Repository navigation
Closed
Labels
Awaiting PaymentAuto-added when associated PR is deployed to productionAuto-added when associated PR is deployed to productionExternalAdded to denote the issue can be worked on by a contributorAdded to denote the issue can be worked on by a contributorNewFeatureSomething to build that is a new item.Something to build that is a new item.WeeklyKSv2KSv2
Description
Tracking Issue: https://github.com/Expensify/Expensify/issues/377671
Design Doc Section: https://docs.google.com/document/d/1WubNv_VAv78IxG4FKsi9aS0pWESfWvUYbqBAAy5b4bc/edit#heading=h.ursdzd4yhqi0
Route
- Route:
/settings/workspaces/{policyID}/accounting/netsuite/subsidiary - PageComponent:
NetSuiteSubsidiarySelector - Calls
UpdateNetSuiteSubsidiarysubsidiaryName: name of the selected subsidiary fromoptions.data.subsidiaryListarray.- The pendingAction for the OfflineWithFeedback component will be
policy.pendingFields.subsidiary
We’ll have a NetSuiteSubsidiarySelectorPage, which will populate the list of subsidiaries from the data.subsidiaryList. The sample data shows the list of subsidiaries here.
The basic code for the page will look as follows:
function NetSuiteNetSuiteSubsidiarySelectorPage({policy}: WithPolicyConnectionsProps) {
const policyID = policy?.id ?? '';
const { subsidiary } = policy?.connections?.netsuite?.config ?? {};
const subsidiaryOptions = useMemo<SelectorType[]>(() => {
const subsidiaryList = policy?.connections?.netsuite?.options?.data.subsidiaryList ?? {} ?? [];
const isMatchFound = subsidiaryList?.some(({subsidiaryObj}) => subsidiaryObj === subsidiary); // toLowerCase() ?
return (subsidiaryList ?? []).map(({id, name}, index) => ({
value: name,
text: name,
keyForList: id,
isSelected: isMatchFound ? subsidiary === id : index === 0,
}));
});
const listHeaderComponent = useMemo( // Move this to another file as a standalone component.
() => (
<View style={[styles.pb2, styles.ph5]}>
<Text style={[styles.pb5, styles.textNormal]}>{translate('workspace.netsuite.subsidiary.description')}</Text>
</View>
),
[translate, styles.pb2, styles.ph5, styles.pb5, styles.textNormal],
);
const initiallyFocusedOptionKey = useMemo(() => subsidiaryList?.find((subsidiary) => subsidiary.isSelected)?.keyForList, [subsidiaryOptions]);
const updateSubsidiary = useCallback(
({value}: SelectorType) => {
Connections.updateNetSuiteSubsidiary(policyID, CONST.POLICY.CONNECTIONS.NAME.NET_SUITE, CONST.NET_SUITE_CONFIG, {
subsidiary: value,
subsidiaryID: //
});
Navigation.goBack(ROUTES.POLICY_ACCOUNTING.getRoute(policyID));
},
[policyID],
);
return (
<SelectionScreen
policyID={policyID}
accessVariants={[CONST.POLICY.ACCESS_VARIANTS.ADMIN, CONST.POLICY.ACCESS_VARIANTS.PAID]}
featureName={CONST.POLICY.MORE_FEATURES.ARE_CONNECTIONS_ENABLED}
displayName={NetSuiteNetSuiteSubsidiarySelectorPage.displayName}
sections={[{data: subsidiaryOptions}]}
listItem={RadioListItem}
onSelectRow={updateSubsidiary}
initiallyFocusedOptionKey={initiallyFocusedOptionKey}
headerContent={listHeaderComponent}
onBackButtonPress={() => Navigation.goBack(ROUTES.POLICY_ACCOUNTING.getRoute(policyID))}
title="workspace.netsuite.subsidiary.title"
/>
);
}
NetSuiteNetSuiteSubsidiarySelectorPage.displayName = 'NetSuiteNetSuiteSubsidiarySelectorPage';
export default withPolicyConnections(NetSuiteNetSuiteSubsidiarySelectorPage);Upwork Automation - Do Not Edit
- Upwork Job URL: https://www.upwork.com/jobs/~01d62f33ad0e1e9fe6
- Upwork Job ID: 1800281430610989476
- Last Price Increase: 2024-06-10
Issue Owner
Current Issue Owner: @Issue Owner
Current Issue Owner: @JmillsExpensifyMetadata
Metadata
Assignees
Labels
Awaiting PaymentAuto-added when associated PR is deployed to productionAuto-added when associated PR is deployed to productionExternalAdded to denote the issue can be worked on by a contributorAdded to denote the issue can be worked on by a contributorNewFeatureSomething to build that is a new item.Something to build that is a new item.WeeklyKSv2KSv2
Type
Projects
- StatusShow more project fieldsDone

Activity
melvin-bot commentedon Jun 10, 2024
Job added to Upwork: https://www.upwork.com/jobs/~01d62f33ad0e1e9fe6
[-][#Wave-Control: Add NetSuite] Settings Configuration in NewDot: Top-Level Subsidiary Selector[/-][+][$250] [#Wave-Control: Add NetSuite] Settings Configuration in NewDot: Top-Level Subsidiary Selector[/+]melvin-bot commentedon Jun 10, 2024
Triggered auto assignment to @JmillsExpensify (
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.melvin-bot commentedon Jun 10, 2024
Current assignee @mananjadhav is eligible for the External assigner, not assigning anyone new.
24 remaining items
[-][#Wave-Control: Add NetSuite] Settings Configuration in NewDot: Top-Level Subsidiary Selector[/-][+][HOLD for payment 2024-07-10] [#Wave-Control: Add NetSuite] Settings Configuration in NewDot: Top-Level Subsidiary Selector[/+]melvin-bot commentedon Jul 3, 2024
Reviewinglabel has been removed, please complete the "BugZero Checklist".melvin-bot commentedon Jul 3, 2024
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.0.3-7 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
If no regressions arise, payment will be issued on 2024-07-10. 🎊
For reference, here are some details about the assignees on this issue:
melvin-bot commentedon Jul 3, 2024
BugZero Checklist: The PR adding this new feature has been merged! The following checklist (instructions) will need to be completed before the issue can be closed:
mananjadhav commentedon Jul 10, 2024
Payout for this will be centrally paid, no further action here.