Open yuwenmemon opened 4 weeks ago
Current assignee @shubham1206agra is eligible for the External assigner, not assigning anyone new.
Triggered auto assignment to @CortneyOfstad (NewFeature
), see https://stackoverflowteams.com/c/expensify/questions/14418#:~:text=BugZero%20process%20steps%20for%20feature%20requests for more details. Please add this Feature request to a GH project, as outlined in the SO.
@shubham1206agra is working on Export first.
@shubham1206agra is almost done with Export and will be moving onto this one shortly.
Tracking Issue: https://github.com/Expensify/Expensify/issues/377671
Design Doc Section: https://docs.google.com/document/d/1WubNv_VAv78IxG4FKsi9aS0pWESfWvUYbqBAAy5b4bc/edit#heading=h.1vf74ijo8qpn
(High-Level Section)
Routes
Route:
/settings/workspaces/{policyID}/accounting/netsuite/advanced
NetSuiteAdvancedPage
UpdateNetSuiteAutoSync
enabled
-TRUE
/FALSE
, depending on the toggleconfig.syncOptions.hasChosenAutoSyncOption
policy.pendingFields.syncOptions
UpdateNetSuiteSyncReimbursedReports
enabled
-TRUE
/FALSE
, depending on the toggleconfig.syncOptions.syncReimbursedReports
policy.pendingFields.syncOptions
UpdateNetSuiteSyncPeople
enabled
-TRUE
/FALSE
, depending on the toggleconfig.syncOptions.syncPeople
policy.pendingFields.syncOptions
UpdateNetSuiteAutoCreateEntities
enabled
-TRUE
/FALSE
, depending on the toggleconfig.autoCreateEntities
policy.pendingFields.autoCreateEntities
UpdateNetSuiteEnableNewCategories
enabled
-TRUE
/FALSE
, depending on the toggleconfig.syncOptions.enableNewCategories
policy.pendingFields.syncOptions
Route:
/settings/workspaces/{policyID}/accounting/netsuite/advanced/reimbursement-account/select
NetSuiteReimbursementAccountSelectPage
UpdateNetSuiteReimbursementAccountID
bankAccountID
- one of the payable accounts available (present underdata.payableList
)config.reimbursementAccountID
policy.pendingFields.reimbursementAccountID
Route:
/settings/workspaces/{policyID}/accounting/netsuite/advanced/collection-account/select
NetSuiteCollectionAccountSelectPage
UpdateNetSuiteCollectionAccount
bankAccountID
- one of the payable accounts available (present underdata.payableList
)config.collectionAccount
policy.pendingFields.collectionAccount
Route:
/settings/workspaces/{policyID}/accounting/netsuite/advanced/report-approval-level/select
NetSuiteExpenseReportApprovalLevelSelectPage
UpdateNetSuiteExportReportsTo
value
- one of the values inExpenseReportApprovalLevelTypeEnum
(REPORTS_APPROVED_NONE
,REPORTS_SUPERVISOR_APPROVED
,REPORTS_ACCOUNTING_APPROVED
,REPORTS_APPROVED_BOTH
)config.syncOptions.exportReportsTo
policy.pendingFields.syncOptions
Route:
/settings/workspaces/{policyID}/accounting/netsuite/advanced/vb-approval-level/select
NetSuiteVendorBillApprovalLevelSelectPage
UpdateNetSuiteExportVendorBillsTo
value
- one of the values inVendorBillApprovalLevelTypeEnum
(VENDOR_BILLS_APPROVED_NONE
,VENDOR_BILLS_APPROVAL_PENDING
,VENDOR_BILLS_APPROVED
)config.syncOptions.exportVendorBillsTo
policy.pendingFields.syncOptions
Route:
/settings/workspaces/{policyID}/accounting/netsuite/advanced/je-approval-level/select
NetSuiteJournalEntryApprovalLevelSelectPage
UpdateNetSuiteExportJournalsTo
value
- one of the values inJournalEntryApprovalLevelTypeEnum
(JOURNALS_APPROVED_NONE
,JOURNALS_APPROVAL_PENDING
,JOURNALS_APPROVED
)config.syncOptions.exportJournalsTo
policy.pendingFields.syncOptions
Route:
/settings/workspaces/{policyID}/accounting/netsuite/advanced/approval-account/select
NetSuiteApprovalAccountSelectPage
UpdateNetSuiteApprovalAccount
value
- one of the payable accounts available (present underdata.payableList
) orAPPROVAL_ACCOUNT_DEFAULT
config.approvalAccount
policy.pendingFields.approvalAccount
Refer to here and here in order to get the corresponding routes and parameters. We'll discuss the Export and Advanced Sections together, as these are very similar in design.
The set of pages needed for the export configurations is similar to that for the import configurations.
The first part “UI Components” explains the UI components and their arrangement on the pages. The second part, “Data Retrieval,” discusses how data or options displayed on the pages are fetched or retrieved.
UI Components
We need two types of pages for configuring export/advanced settings. The first type of page displays menu items, each representing a setting that can be configured. When clicked or pressed, it navigates to a configuration detail page. This is the second type of page. On the configuration detail page, the user can edit the chosen configuration.
Menu Items Page
Configuration Detail Page
This section UI Components will be divided into two subsections: Menu Items Page, explaining the first type of screen, and Configuration Detail Page, explaining the second.
Menu Items Pages
NetSuiteAdvancedPage
Configuration Detail Page
The other page type is the Configuration Detail pages. On a Configuration Detail page, users can alter a configuration by selecting from various options or toggling a specific item.
When an option item is selected, a function corresponding to the Selector Page from policy.ts should be invoked to update the connection configuration data. For more information about the API, please refer to the “Saving Connection Settings” section.
We’ll reuse the SelectionScreen component to render the option list. You can find an example of its implementation here.
Data Retrieval
On all pages related to export configuration, we need access to the current configuration. This information is stored in Onyx as part of the policy object, all pages need to subscribe to it.
The Menu Items pages display the preset list of items. Each item of the list is a pair of the configuration item (ex. Preferred exporter) and the current configuration value for the item (ex. The email of the admin who is used as the preferred exporter). The items are static and the values are simply read from the policy object that is provided by Onyx subscription.
For Configuration Detail Pages, we will subdivide the pages into 2 categories:
Static Options Pages display a preset list of options, i.e., they do not depend on the current data stored in the policy. In this category of pages, the policy data will only be used to determine the currently selected option (initiallyFocusedOptionKey). The pages that fall under this category are -
Dynamic Options Pages are the pages where we show a list of options dynamically, i.e., they depend on current data stored in the policy. In this category of pages, the policy data will be used to determine the set of options being shown to the user and the currently selected option (initiallyFocusedOptionKey). The pages which fall under this category are:
Issue Owner
Current Issue Owner: @Issue Owner
Current Issue Owner: @shubham1206agraIssue Owner
Current Issue Owner: @shubham1206agra