Skip to content

Commit

Permalink
Merge branch 'refs/heads/main' into VickyStash/bugfix/52820-direct-fe…
Browse files Browse the repository at this point in the history
…ed-card-assignment

# Conflicts:
#	src/pages/workspace/companyCards/WorkspaceCompanyCardsListHeaderButtons.tsx
  • Loading branch information
VickyStash committed Nov 27, 2024
2 parents 9b51ad7 + fe6f1e7 commit 73c7f90
Show file tree
Hide file tree
Showing 67 changed files with 1,599 additions and 839 deletions.
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
versionCode 1009006700
versionName "9.0.67-0"
versionCode 1009006701
versionName "9.0.67-1"
// Supported language variants must be declared here to avoid from being removed during the compilation.
// This also helps us to not include unnecessary language variants in the APK.
resConfigs "en", "es"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ Any transactions that were posted prior to this date will not be imported into E
Click the Assign button
Once assigned, you will see each cardholder associated with their card as well as the start date listed.

If you're using a connected accounting system such as NetSuite, Xero, Intacct, Quickbooks Desktop, or QuickBooks Online, you can also connect the card to export to a specific credit card GL account.
If you're using a connected accounting system such as NetSuite, Xero, Intacct, QuickBooks Desktop, or QuickBooks Online, you can also connect the card to export to a specific credit card GL account.

Go to Settings > Domains > [Domain name] > Company Cards
Click Edit Exports on the right-hand side of the card table and select the GL account you want to export expenses to.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ If Scheduled Submit is disabled on the group workspace level (or set to a manual

# How to connect company cards to an accounting integration

If you're using a connected accounting system such as NetSuite, Xero, Intacct, Quickbooks Desktop, or QuickBooks Online, you can also connect the card to export to a specific credit card GL account. First, connect the card itself, and once completed, follow the steps below:
If you're using a connected accounting system such as NetSuite, Xero, Intacct, QuickBooks Desktop, or QuickBooks Online, you can also connect the card to export to a specific credit card GL account. First, connect the card itself, and once completed, follow the steps below:
Go to Settings > Domains > Domain name > Company Cards
Click Edit Exports on the right-hand side of the card table and select the GL account you want to export expenses to
You're all done. After the account is set, exported expenses will be mapped to the specific account selected when exported by a Domain Admin.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ To completely remove the card connection, unassign every card from the list and
# Deep Dive
## Configure card settings
Once you’ve imported your company cards, the next step is configuring the cards’ settings.
If you're using a connected accounting system such as NetSuite, Xero, Sage Intacct, Quickbooks Desktop, or QuickBooks Online. In that case, you can connect the card to export to a specific credit card GL account.
If you're using a connected accounting system such as NetSuite, Xero, Sage Intacct, QuickBooks Desktop, or QuickBooks Online. In that case, you can connect the card to export to a specific credit card GL account.
1. Go to **Settings > Domains > _Domain Name_ > Company Cards**
2. Click **Edit Exports** on the right-hand side of the card table and select the GL account you want to export expenses to
3. You're all done. After the account is set, exported expenses will be mapped to the specific account selected when exported by a Domain Admin.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Configure Quickbooks Desktop
description: Configure Quickbooks Desktop
title: Configure QuickBooks Desktop
description: Configure QuickBooks Desktop
---
Our new QuickBooks Desktop integration allows you to automate the import and export process with Expensify.

Expand Down Expand Up @@ -71,7 +71,7 @@ For manual syncing, we recommend completing this process at least once a week an

When syncing Expensify to QuickBooks Desktop, we recommend waiting until the sync finishes to access either Expensify and/or QuickBooks Desktop, as performance may vary during this process. You cannot open an instance of QuickBooks Desktop while a program is syncing - this may cause QuickBooks Desktop to behave unexpectedly.

## **What are the different types of accounts that can be imported from Quickbooks Desktop?**
## **What are the different types of accounts that can be imported from QuickBooks Desktop?**

Here is the list of accounts from QuickBooks Desktop and how they are pulled into Expensify:

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Configure Quickbooks Online
description: Configure Quickbooks Online
title: Configure QuickBooks Online
description: Configure QuickBooks Online
---

# Best Practices Using QuickBooks Online
Expand Down Expand Up @@ -88,7 +88,7 @@ The following steps help you determine the advanced settings for your connection
- _Automatically Create Entities_: If you export reimbursable expenses as Vendor Bills or Journal Entries, Expensify will automatically create a vendor in QuickBooks (If one does not already exist). Expensify will also automatically create a customer when exporting Invoices.
- _Sync Reimbursed Reports_: Enabling will mark the Vendor Bill as paid in QuickBooks Online if you reimburse a report via ACH direct deposit in Expensify. If you reimburse outside of Expensify, then marking the Vendor Bill as paid in QuickBooks Online will automatically mark the report as reimbursed in Expensify.
- _QuickBooks Account_: Select the bank account your reimbursements are coming out of, and we'll create the payment in QuickBooks.
- _Collection Account_: When exporting invoices from Expensify to Quickbooks Online, the invoice will appear against the Collection Account once marked as Paid.
- _Collection Account_: When exporting invoices from Expensify to QuickBooks Online, the invoice will appear against the Collection Account once marked as Paid.

{% include faq-begin.md %}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Quickbooks Online Troubleshooting
description: Quickbooks Online Troubleshooting
title: QuickBooks Online Troubleshooting
description: QuickBooks Online Troubleshooting
---

# ExpensiError QBO022: When exporting billable expenses, please make sure the account in QuickBooks Online has been marked as billable.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Configure Quickbooks Online
title: Configure QuickBooks Online
description: Configure your QuickBooks Online connection with Expensify
---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Quickbooks Online Troubleshooting
title: QuickBooks Online Troubleshooting
description: A list of common QuickBooks Online errors and how to resolve them
---

Expand Down
4 changes: 2 additions & 2 deletions help/map.md
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,8 @@ Lost in the app? Let this map guide you!
* Delete
* Accounting
* Connections list
* Quickbooks Online Connect
* Quickbooks Desktop Connect
* QuickBooks Online Connect
* QuickBooks Desktop Connect
* Xero
* NetSuite
* Sage Intacct
Expand Down
2 changes: 1 addition & 1 deletion ios/NewExpensify/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>9.0.67.0</string>
<string>9.0.67.1</string>
<key>FullStory</key>
<dict>
<key>OrgId</key>
Expand Down
2 changes: 1 addition & 1 deletion ios/NewExpensifyTests/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>9.0.67.0</string>
<string>9.0.67.1</string>
</dict>
</plist>
2 changes: 1 addition & 1 deletion ios/NotificationServiceExtension/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<key>CFBundleShortVersionString</key>
<string>9.0.67</string>
<key>CFBundleVersion</key>
<string>9.0.67.0</string>
<string>9.0.67.1</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionPointIdentifier</key>
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
"version": "9.0.67-0",
"version": "9.0.67-1",
"author": "Expensify, Inc.",
"homepage": "https://new.expensify.com",
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
Expand Down
17 changes: 12 additions & 5 deletions src/CONST.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2575,8 +2575,8 @@ const CONST = {
},
NAME_USER_FRIENDLY: {
netsuite: 'NetSuite',
quickbooksOnline: 'Quickbooks Online',
quickbooksDesktop: 'Quickbooks Desktop',
quickbooksOnline: 'QuickBooks Online',
quickbooksDesktop: 'QuickBooks Desktop',
xero: 'Xero',
intacct: 'Sage Intacct',
financialForce: 'FinancialForce',
Expand Down Expand Up @@ -4974,9 +4974,8 @@ const CONST = {
'2. Go to *Workspaces*.\n' +
'3. Select your workspace.\n' +
'4. Click *Categories*.\n' +
'5. Add or import your own categories.\n' +
"6. Disable any default categories you don't need.\n" +
'7. Require a category for every expense in *Settings*.\n' +
"5. Disable any categories you don't need.\n" +
'6. Add your own categories in the top right.\n' +
'\n' +
`[Take me to workspace category settings](${workspaceCategoriesLink}).`,
},
Expand Down Expand Up @@ -6151,6 +6150,14 @@ const CONST = {
description: 'workspace.upgrade.reportFields.description' as const,
icon: 'Pencil',
},
categories: {
id: 'categories' as const,
alias: 'categories',
name: 'Categories',
title: 'workspace.upgrade.categories.title' as const,
description: 'workspace.upgrade.categories.description' as const,
icon: 'FolderOpen',
},
[this.POLICY.CONNECTIONS.NAME.NETSUITE]: {
id: this.POLICY.CONNECTIONS.NAME.NETSUITE,
alias: 'netsuite',
Expand Down
5 changes: 5 additions & 0 deletions src/ROUTES.ts
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,11 @@ const ROUTES = {
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') =>
getUrlWithBackToParam(`${action as string}/${iouType as string}/attendees/${transactionID}/${reportID}`, backTo),
},
MONEY_REQUEST_UPGRADE: {
route: ':action/:iouType/upgrade/:transactionID/:reportID',
getRoute: (action: IOUAction, iouType: IOUType, transactionID: string, reportID: string, backTo = '') =>
getUrlWithBackToParam(`${action as string}/${iouType as string}/upgrade/${transactionID}/${reportID}`, backTo),
},
SETTINGS_TAGS_ROOT: {
route: 'settings/:policyID/tags',
getRoute: (policyID: string, backTo = '') => getUrlWithBackToParam(`settings/${policyID}/tags`, backTo),
Expand Down
1 change: 1 addition & 0 deletions src/SCREENS.ts
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ const SCREENS = {
HOLD: 'Money_Request_Hold_Reason',
STEP_CONFIRMATION: 'Money_Request_Step_Confirmation',
START: 'Money_Request_Start',
STEP_UPGRADE: 'Money_Request_Step_Upgrade',
STEP_AMOUNT: 'Money_Request_Step_Amount',
STEP_CATEGORY: 'Money_Request_Step_Category',
STEP_CURRENCY: 'Money_Request_Step_Currency',
Expand Down
4 changes: 3 additions & 1 deletion src/components/EmptyStateComponent/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ function EmptyStateComponent({
<Text style={[styles.textAlignCenter, styles.textHeadlineH1, styles.mb2, titleStyles]}>{title}</Text>
{typeof subtitle === 'string' ? <Text style={[styles.textAlignCenter, styles.textSupporting, styles.textNormal]}>{subtitle}</Text> : subtitle}
<View style={[styles.gap2, styles.mt5, !shouldUseNarrowLayout ? styles.flexRow : undefined]}>
{buttons?.map(({buttonText, buttonAction, success}, index) => (
{buttons?.map(({buttonText, buttonAction, success, icon, isDisabled}, index) => (
<View
// eslint-disable-next-line react/no-array-index-key
key={index}
Expand All @@ -109,7 +109,9 @@ function EmptyStateComponent({
success={success}
onPress={buttonAction}
text={buttonText}
icon={icon}
large
isDisabled={isDisabled}
/>
</View>
))}
Expand Down
2 changes: 1 addition & 1 deletion src/components/EmptyStateComponent/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import type IconAsset from '@src/types/utils/IconAsset';

type ValidSkeletons = typeof SearchRowSkeleton | typeof TableRowSkeleton;
type MediaTypes = ValueOf<typeof CONST.EMPTY_STATE_MEDIA>;
type Button = {buttonText?: string; buttonAction?: () => void; success?: boolean};
type Button = {buttonText?: string; buttonAction?: () => void; success?: boolean; icon?: IconAsset; isDisabled?: boolean};

type SharedProps<T> = {
SkeletonComponent: ValidSkeletons;
Expand Down
7 changes: 5 additions & 2 deletions src/components/LHNOptionsList/OptionRowLHNData.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,10 @@ function OptionRowLHNData({
const optionItemRef = useRef<OptionData>();

const shouldDisplayViolations = ReportUtils.shouldDisplayViolationsRBRInLHN(fullReport, transactionViolations);
const shouldDisplayReportViolations = ReportUtils.isReportOwner(fullReport) && ReportUtils.hasReportViolations(reportID);
const isSettled = ReportUtils.isSettled(fullReport);
const shouldDisplayReportViolations = !isSettled && ReportUtils.isReportOwner(fullReport) && ReportUtils.hasReportViolations(reportID);
// We only want to show RBR for expense reports with transaction violations not for transaction threads reports.
const doesExpenseReportHasViolations = ReportUtils.isExpenseReport(fullReport) && !isSettled && ReportUtils.hasViolations(reportID, transactionViolations, true);

const optionItem = useMemo(() => {
// Note: ideally we'd have this as a dependent selector in onyx!
Expand All @@ -49,7 +52,7 @@ function OptionRowLHNData({
preferredLocale: preferredLocale ?? CONST.LOCALES.DEFAULT,
policy,
parentReportAction,
hasViolations: !!shouldDisplayViolations || shouldDisplayReportViolations,
hasViolations: !!shouldDisplayViolations || shouldDisplayReportViolations || doesExpenseReportHasViolations,
lastMessageTextFromReport,
transactionViolations,
invoiceReceiverPolicy,
Expand Down
Loading

0 comments on commit 73c7f90

Please sign in to comment.