Skip to content

Commit 98a04c9

Browse files
committed
Merge branch 'main' of https://github.com/rezkiy37/Expensify into feature/45179-invoice-balance-section
2 parents cb31a55 + 8636074 commit 98a04c9

File tree

88 files changed

+1243
-608
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+1243
-608
lines changed

.github/scripts/verifyDeploy.sh

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/bin/bash
2+
3+
ENV="$1"
4+
EXPECTED_VERSION="$2"
5+
6+
BASE_URL=""
7+
if [[ "$ENV" == 'staging' ]]; then
8+
BASE_URL='https://staging.new.expensify.com'
9+
else
10+
BASE_URL='https://new.expensify.com'
11+
fi
12+
13+
sleep 5
14+
ATTEMPT=0
15+
MAX_ATTEMPTS=10
16+
while [[ $ATTEMPT -lt $MAX_ATTEMPTS ]]; do
17+
((ATTEMPT++))
18+
19+
echo "Attempt $ATTEMPT: Checking deployed version..."
20+
DOWNLOADED_VERSION="$(wget -q -O /dev/stdout "$BASE_URL"/version.json | jq -r '.version')"
21+
22+
if [[ "$EXPECTED_VERSION" == "$DOWNLOADED_VERSION" ]]; then
23+
echo "Success: Deployed version matches local version: $DOWNLOADED_VERSION"
24+
exit 0
25+
fi
26+
27+
if [[ $ATTEMPT -lt $MAX_ATTEMPTS ]]; then
28+
echo "Version mismatch, found $DOWNLOADED_VERSION. Retrying in 5 seconds..."
29+
sleep 5
30+
fi
31+
done
32+
33+
echo "Error: Deployed version did not match local version after $MAX_ATTEMPTS attempts. Something went wrong..."
34+
exit 1

.github/workflows/deploy.yml

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -386,23 +386,11 @@ jobs:
386386

387387
- name: Verify staging deploy
388388
if: ${{ !fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }}
389-
run: |
390-
sleep 5
391-
DOWNLOADED_VERSION="$(wget -q -O /dev/stdout https://staging.new.expensify.com/version.json | jq -r '.version')"
392-
if [[ '${{ needs.prep.outputs.APP_VERSION }}' != "$DOWNLOADED_VERSION" ]]; then
393-
echo "Error: deployed version $DOWNLOADED_VERSION does not match local version ${{ needs.prep.outputs.APP_VERSION }}. Something went wrong..."
394-
exit 1
395-
fi
389+
run: ./.github/scripts/verifyDeploy.sh staging ${{ needs.prep.outputs.APP_VERSION }}
396390

397391
- name: Verify production deploy
398392
if: ${{ fromJSON(env.SHOULD_DEPLOY_PRODUCTION) }}
399-
run: |
400-
sleep 5
401-
DOWNLOADED_VERSION="$(wget -q -O /dev/stdout https://new.expensify.com/version.json | jq -r '.version')"
402-
if [[ '${{ needs.prep.outputs.APP_VERSION }}' != "$DOWNLOADED_VERSION" ]]; then
403-
echo "Error: deployed version $DOWNLOADED_VERSION does not match local version ${{ needs.prep.outputs.APP_VERSION }}. Something went wrong..."
404-
exit 1
405-
fi
393+
run: ./.github/scripts/verifyDeploy.sh production ${{ needs.prep.outputs.APP_VERSION }}
406394

407395
- name: Upload web sourcemaps artifact
408396
uses: actions/upload-artifact@v4
@@ -507,11 +495,13 @@ jobs:
507495
GITHUB_TOKEN: ${{ github.token }}
508496

509497
- name: Rename web and desktop sourcemaps artifacts before assets upload in order to have unique ReleaseAsset.name
498+
continue-on-error: true
510499
run: |
511500
mv ./desktop-staging-sourcemaps-artifact/merged-source-map.js.map ./desktop-staging-sourcemaps-artifact/desktop-staging-merged-source-map.js.map
512501
mv ./web-staging-sourcemaps-artifact/merged-source-map.js.map ./web-staging-sourcemaps-artifact/web-staging-merged-source-map.js.map
513502
514503
- name: Upload artifacts to GitHub Release
504+
continue-on-error: true
515505
run: |
516506
gh release upload ${{ needs.prep.outputs.APP_VERSION }} --repo ${{ github.repository }} --clobber \
517507
./android-sourcemaps-artifact/index.android.bundle.map#android-sourcemap-${{ needs.prep.outputs.APP_VERSION }} \
@@ -552,11 +542,6 @@ jobs:
552542
- name: Download all workflow run artifacts
553543
uses: actions/download-artifact@v4
554544

555-
- name: Rename web and desktop sourcemaps artifacts before assets upload in order to have unique ReleaseAsset.name
556-
run: |
557-
mv ./desktop-sourcemaps-artifact/merged-source-map.js.map ./desktop-sourcemaps-artifact/desktop-merged-source-map.js.map
558-
mv ./web-sourcemaps-artifact/merged-source-map.js.map ./web-sourcemaps-artifact/web-merged-source-map.js.map
559-
560545
- name: 🚀 Edit the release to be no longer a prerelease 🚀
561546
run: |
562547
LATEST_RELEASE="$(gh release list --repo ${{ github.repository }} --exclude-pre-releases --json tagName,isLatest --jq '.[] | select(.isLatest) | .tagName')"
@@ -565,7 +550,14 @@ jobs:
565550
env:
566551
GITHUB_TOKEN: ${{ github.token }}
567552

553+
- name: Rename web and desktop sourcemaps artifacts before assets upload in order to have unique ReleaseAsset.name
554+
continue-on-error: true
555+
run: |
556+
mv ./desktop-sourcemaps-artifact/merged-source-map.js.map ./desktop-sourcemaps-artifact/desktop-merged-source-map.js.map
557+
mv ./web-sourcemaps-artifact/merged-source-map.js.map ./web-sourcemaps-artifact/web-merged-source-map.js.map
558+
568559
- name: Upload artifacts to GitHub Release
560+
continue-on-error: true
569561
run: |
570562
gh release upload ${{ needs.prep.outputs.APP_VERSION }} --repo ${{ github.repository }} --clobber \
571563
./desktop-sourcemaps-artifact/desktop-merged-source-map.js.map#desktop-sourcemap-${{ needs.prep.outputs.APP_VERSION }} \

.github/workflows/deployNewHelp.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Deploy New Help Site
2+
3+
on:
4+
# Run on any push to main that has changes to the help directory
5+
# TEST: Verify Cloudflare picks this up even if not run when merged to main
6+
# push:
7+
# branches:
8+
# - main
9+
# paths:
10+
# - 'help/**'
11+
12+
# Run on any pull request (except PRs against staging or production) that has changes to the help directory
13+
pull_request:
14+
types: [opened, synchronize]
15+
branches-ignore: [staging, production]
16+
paths:
17+
- 'help/**'
18+
19+
# Run on any manual trigger
20+
workflow_dispatch:
21+
22+
# Allow only one concurrent deployment
23+
concurrency:
24+
group: "newhelp"
25+
cancel-in-progress: false
26+
27+
jobs:
28+
build:
29+
env:
30+
IS_PR_FROM_FORK: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.repo.fork }}
31+
runs-on: ubuntu-latest
32+
33+
steps:
34+
- name: Checkout code
35+
uses: actions/checkout@v4
36+
37+
# Set up Ruby and run bundle install inside the /help directory
38+
- name: Set up Ruby
39+
uses: ruby/setup-ruby@v1
40+
with:
41+
bundler-cache: true
42+
working-directory: ./help
43+
44+
- name: Build Jekyll site
45+
run: bundle exec jekyll build --source ./ --destination ./_site
46+
working-directory: ./help # Ensure Jekyll is building the site in /help
47+
48+
- name: Deploy to Cloudflare Pages
49+
uses: cloudflare/pages-action@v1
50+
id: deploy
51+
if: env.IS_PR_FROM_FORK != 'true'
52+
with:
53+
apiToken: ${{ secrets.CLOUDFLARE_PAGES_TOKEN }}
54+
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
55+
projectName: newhelp
56+
directory: ./help/_site # Deploy the built site
57+
58+
- name: Setup Cloudflare CLI
59+
if: env.IS_PR_FROM_FORK != 'true'
60+
run: pip3 install cloudflare==2.19.0
61+
62+
- name: Purge Cloudflare cache
63+
if: env.IS_PR_FROM_FORK != 'true'
64+
run: /home/runner/.local/bin/cli4 --verbose --delete hosts=["newhelp.expensify.com"] /zones/:9ee042e6cfc7fd45e74aa7d2f78d617b/purge_cache
65+
env:
66+
CF_API_KEY: ${{ secrets.CLOUDFLARE_TOKEN }}
67+
68+
- name: Leave a comment on the PR
69+
uses: actions-cool/[email protected]
70+
if: ${{ github.event_name == 'pull_request' && env.IS_PR_FROM_FORK != 'true' }}
71+
with:
72+
token: ${{ github.token }}
73+
body: ${{ format('A preview of your New Help changes have been deployed to {0} :zap:️', steps.deploy.outputs.alias) }}
74+

.github/workflows/preDeploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ name: Process new code merged to main
44
on:
55
push:
66
branches: [main]
7-
paths-ignore: [docs/**, contributingGuides/**, jest/**, tests/**]
7+
paths-ignore: [docs/**, help/**, contributingGuides/**, jest/**, tests/**]
88

99
jobs:
1010
typecheck:

.github/workflows/reassurePerformanceTests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
pull_request:
55
types: [opened, synchronize]
66
branches-ignore: [staging, production]
7-
paths-ignore: [docs/**, .github/**, contributingGuides/**, tests/**, '**.md', '**.sh']
7+
paths-ignore: [docs/**, help/**, .github/**, contributingGuides/**, tests/**, '**.md', '**.sh']
88

99
jobs:
1010
perf-tests:

.github/workflows/sendReassurePerfData.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Send Reassure Performance Tests to Graphite
33
on:
44
push:
55
branches: [main]
6-
paths-ignore: [docs/**, contributingGuides/**, jest/**]
6+
paths-ignore: [docs/**, help/**, contributingGuides/**, jest/**]
77

88
jobs:
99
perf-tests:

.prettierignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ package-lock.json
1515
*.css
1616
*.scss
1717
*.md
18+
*.markdown
1819
# We need to modify the import here specifically, hence we disable prettier to get rid of the sorted imports
1920
src/libs/E2E/reactNativeLaunchingTest.ts
2021
# Temporary while we keep react-compiler in our repo

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ android {
110110
minSdkVersion rootProject.ext.minSdkVersion
111111
targetSdkVersion rootProject.ext.targetSdkVersion
112112
multiDexEnabled rootProject.ext.multiDexEnabled
113-
versionCode 1009004004
114-
versionName "9.0.40-4"
113+
versionCode 1009004103
114+
versionName "9.0.41-3"
115115
// Supported language variants must be declared here to avoid from being removed during the compilation.
116116
// This also helps us to not include unnecessary language variants in the APK.
117117
resConfigs "en", "es"

docs/articles/new-expensify/connections/quickbooks-online/Configure-Quickbooks-Online.md

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,76 @@
11
---
22
title: Configure Quickbooks Online
3-
description: Coming Soon
3+
description: Configure your QuickBooks Online connection with Expensify
44
---
55

6-
# FAQ
6+
Once you've set up your QuickBooks Online connection, you'll be able to configure your import and export settings.
7+
8+
# Step 1: Configure import settings
9+
10+
The following steps help you determine how data will be imported from QuickBooks Online to Expensify.
11+
12+
<ol type="a">
13+
<li>Under the Accounting settings for your workspace, click Import under the QuickBooks Online connection.</li>
14+
<li>Review each of the following import settings:</li>
15+
<ul>
16+
<li><b>Chart of accounts</b>: The chart of accounts are automatically imported from QuickBooks Online as categories. This cannot be amended.</li>
17+
<li><b>Classes</b>: Choose whether to import classes, which will be shown in Expensify as tags for expense-level coding.</li>
18+
<li><b>Customers/projects</b>: Choose whether to import customers/projects, which will be shown in Expensify as tags for expense-level coding.</li>
19+
<li><b>Locations</b>: Choose whether to import locations, which will be shown in Expensify as tags for expense-level coding.</li>
20+
{% include info.html %}
21+
As Locations are only configurable as tags, you cannot export expense reports as vendor bills or checks to QuickBooks Online. To unlock these export options, either disable locations import or upgrade to the Control Plan to export locations encoded as a report field.
22+
{% include end-info.html %}
23+
<li><b>Taxes</b>: Choose whether to import tax rates and defaults.</li>
24+
</ul>
25+
</ol>
26+
27+
# Step 2: Configure export settings
28+
29+
The following steps help you determine how data will be exported from Expensify to QuickBooks Online.
30+
31+
<ol type="a">
32+
<li>Under the Accounting settings for your workspace, click Export under the QuickBooks Online connection.</li>
33+
<li>Review each of the following export settings:</li>
34+
<ul>
35+
<li><b>Preferred Exporter</b>: Choose whether to assign a Workspace Admin as the Preferred Exporter. Once selected, the Preferred Exporter automatically receives reports for export in their account to help automate the exporting process.</li>
36+
37+
{% include info.html %}
38+
* Other Workspace Admins will still be able to export to QuickBooks Online.
39+
* If you set different export accounts for individual company cards under your domain settings, then your Preferred Exporter must be a Domain Admin.
40+
{% include end-info.html %}
41+
42+
<li><b>Date</b>: Choose whether to use the date of last expense, export date, or submitted date.</li>
43+
<li><b>Export Out-of-Pocket Expenses as</b>: Select whether out-of-pocket expenses will be exported as a check, journal entry, or vendor bill.</li>
44+
45+
{% include info.html %}
46+
These settings may vary based on whether tax is enabled for your workspace.
47+
* If tax is not enabled on the workspace, you’ll also select the Accounts Payable/AP.
48+
* If tax is enabled on the workspace, journal entry will not be available as an option. If you select the journal entries option first and later enable tax on the workspace, you will see a red dot and an error message under the “Export Out-of-Pocket Expenses as” options. To resolve this error, you must change your export option to vendor bill or check to successfully code and export expense reports.
49+
{% include end-info.html %}
50+
51+
<li><b>Invoices</b>: Select the QuickBooks Online invoice account that invoices will be exported to.</li>
52+
<li><b>Export as</b>: Select whether company cards export to QuickBooks Online as a credit card (the default), debit card, or vendor bill. Then select the account they will export to.</li>
53+
<li>If you select vendor bill, you’ll also select the accounts payable account that vendor bills will be created from, as well as whether to set a default vendor for credit card transactions upon export. If this option is enabled, you will select the vendor that all credit card transactions will be applied to.</li>
54+
</ul>
55+
</ol>
56+
57+
# Step 3: Configure advanced settings
58+
59+
The following steps help you determine the advanced settings for your connection, like auto-sync and employee invitation settings.
60+
61+
<ol type="a">
62+
<li>Under the Accounting settings for your workspace, click Advanced under the QuickBooks Online connection.</li>
63+
<li>Select an option for each of the following settings:</li>
64+
<ul>
65+
<li><b>Auto-sync</b>: Choose whether to enable QuickBooks Online to automatically communicate changes with Expensify to ensure that the data shared between the two systems is up-to-date. New report approvals/reimbursements will be synced during the next auto-sync period.</li>
66+
<li><b>Invite Employees</b>: Choose whether to enable Expensify to import employee records from QuickBooks Online and invite them to this workspace.</li>
67+
<li><b>Automatically Create Entities</b>: Choose whether to enable Expensify to automatically create vendors and customers in QuickBooks Online if a matching vendor or customer does not exist.</li>
68+
<li><b>Sync Reimbursed Reports</b>: Choose whether to enable report syncing for reimbursed expenses. If enabled, all reports that are marked as Paid in QuickBooks Online will also show in Expensify as Paid. If enabled, you must also select the QuickBooks Online account that reimbursements are coming out of, and Expensify will automatically create the payment in QuickBooks Online.</li>
69+
<li><b>Invoice Collection Account</b>: Select the invoice collection account that you want invoices to appear under once the invoice is marked as paid.</li>
70+
</ul>
71+
</ol>
72+
73+
{% include faq-begin.md %}
774

875
## How do I know if a report is successfully exported to QuickBooks Online?
976

@@ -22,3 +89,5 @@ When an admin manually exports a report, Expensify will notify them if the repor
2289
- If a report has been exported and marked as paid in QuickBooks Online, it will be automatically marked as reimbursed in Expensify during the next sync.
2390

2491
Reports that have yet to be exported to QuickBooks Online won’t be automatically exported.
92+
93+
{% include faq-end.md %}

docs/articles/new-expensify/expenses-&-payments/Pay-an-invoice.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ To pay an invoice,
3232

3333
You can also view all unpaid invoices by searching for the sender’s email or phone number on the left-hand side of the app. The invoices waiting for your payment will have a green dot.
3434

35+
![Click Pay Button on the Invoice]({{site.url}}/assets/images/ExpensifyHelp-Invoice-1.png){:width="100%"}
36+
3537
{% include faq-begin.md %}
3638

3739
**Can someone else pay an invoice besides the person who received it?**

0 commit comments

Comments
 (0)