Skip to content

Commit 76f127b

Browse files
committed
Merge branch 'main' into fix/75364
2 parents cbaaa4b + 2b2e960 commit 76f127b

208 files changed

Lines changed: 3151 additions & 2189 deletions

File tree

Some content is hidden

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

.github/actions/javascript/createOrUpdateStagingDeploy/createOrUpdateStagingDeploy.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,23 +164,21 @@ async function run(): Promise<IssuesCreateResponse | void> {
164164
});
165165

166166
// Then make sure we include any demoted or closed blockers as well, and just check them off automatically
167-
// eslint-disable-next-line unicorn/no-array-for-each
168-
currentChecklistData?.deployBlockers.forEach((deployBlocker) => {
167+
for (const deployBlocker of currentChecklistData?.deployBlockers ?? []) {
169168
const isResolved = deployBlockers.findIndex((openBlocker) => openBlocker.number === deployBlocker.number) < 0;
170169
deployBlockers.push({
171170
...deployBlocker,
172171
isResolved,
173172
});
174-
});
173+
}
175174

176175
// Include any existing Mobile-Expensify PRs from the current checklist that aren't in the new merged list
177-
// eslint-disable-next-line unicorn/no-array-for-each
178-
currentChecklistData?.PRListMobileExpensify.forEach((existingPR) => {
176+
for (const existingPR of currentChecklistData?.PRListMobileExpensify ?? []) {
179177
const isAlreadyIncluded = PRListMobileExpensify.findIndex((pr) => pr.number === existingPR.number) >= 0;
180178
if (!isAlreadyIncluded) {
181179
PRListMobileExpensify.push(existingPR);
182180
}
183-
});
181+
}
184182

185183
const didVersionChange = newVersion !== currentChecklistData?.version;
186184
const stagingDeployCashBodyAndAssignees = await GithubUtils.generateStagingDeployCashBodyAndAssignees(

.github/actions/javascript/createOrUpdateStagingDeploy/index.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11674,22 +11674,20 @@ async function run() {
1167411674
};
1167511675
});
1167611676
// Then make sure we include any demoted or closed blockers as well, and just check them off automatically
11677-
// eslint-disable-next-line unicorn/no-array-for-each
11678-
currentChecklistData?.deployBlockers.forEach((deployBlocker) => {
11677+
for (const deployBlocker of currentChecklistData?.deployBlockers ?? []) {
1167911678
const isResolved = deployBlockers.findIndex((openBlocker) => openBlocker.number === deployBlocker.number) < 0;
1168011679
deployBlockers.push({
1168111680
...deployBlocker,
1168211681
isResolved,
1168311682
});
11684-
});
11683+
}
1168511684
// Include any existing Mobile-Expensify PRs from the current checklist that aren't in the new merged list
11686-
// eslint-disable-next-line unicorn/no-array-for-each
11687-
currentChecklistData?.PRListMobileExpensify.forEach((existingPR) => {
11685+
for (const existingPR of currentChecklistData?.PRListMobileExpensify ?? []) {
1168811686
const isAlreadyIncluded = PRListMobileExpensify.findIndex((pr) => pr.number === existingPR.number) >= 0;
1168911687
if (!isAlreadyIncluded) {
1169011688
PRListMobileExpensify.push(existingPR);
1169111689
}
11692-
});
11690+
}
1169311691
const didVersionChange = newVersion !== currentChecklistData?.version;
1169411692
const stagingDeployCashBodyAndAssignees = await GithubUtils_1.default.generateStagingDeployCashBodyAndAssignees(newVersion, PRList.map((pr) => pr.url), PRListMobileExpensify.map((pr) => pr.url), PRList.filter((pr) => pr.isVerified).map((pr) => pr.url), PRListMobileExpensify.filter((pr) => pr.isVerified).map((pr) => pr.url), deployBlockers.map((blocker) => blocker.url), deployBlockers.filter((blocker) => blocker.isResolved).map((blocker) => blocker.url), currentChecklistData?.internalQAPRList.filter((pr) => pr.isResolved).map((pr) => pr.url), didVersionChange ? false : currentChecklistData.isFirebaseChecked, didVersionChange ? false : currentChecklistData.isGHStatusChecked);
1169511693
if (stagingDeployCashBodyAndAssignees) {

.github/actions/javascript/getGraphiteString/getGraphiteString.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,13 @@ const run = () => {
2323

2424
// Initialize string to store Graphite metrics
2525
let graphiteString = '';
26-
let timestamp: number;
26+
let timestamp: number | null = null;
2727

2828
// Iterate over each entry
29-
// eslint-disable-next-line unicorn/no-array-for-each
30-
regressionEntries.forEach((entry) => {
29+
for (const entry of regressionEntries) {
3130
// Skip empty lines
3231
if (entry.trim() === '') {
33-
return;
32+
continue;
3433
}
3534

3635
try {
@@ -56,7 +55,7 @@ const run = () => {
5655
console.error(error.message);
5756
core.setFailed(error);
5857
}
59-
});
58+
}
6059

6160
// Set generated graphite string to the github variable
6261
core.setOutput('GRAPHITE_STRING', graphiteString);

.github/actions/javascript/getGraphiteString/index.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2745,13 +2745,12 @@ const run = () => {
27452745
const regressionEntries = regressionFile.split('\n');
27462746
// Initialize string to store Graphite metrics
27472747
let graphiteString = '';
2748-
let timestamp;
2748+
let timestamp = null;
27492749
// Iterate over each entry
2750-
// eslint-disable-next-line unicorn/no-array-for-each
2751-
regressionEntries.forEach((entry) => {
2750+
for (const entry of regressionEntries) {
27522751
// Skip empty lines
27532752
if (entry.trim() === '') {
2754-
return;
2753+
continue;
27552754
}
27562755
try {
27572756
const current = JSON.parse(entry);
@@ -2773,7 +2772,7 @@ const run = () => {
27732772
console.error(error.message);
27742773
core.setFailed(error);
27752774
}
2776-
});
2775+
}
27772776
// Set generated graphite string to the github variable
27782777
core.setOutput('GRAPHITE_STRING', graphiteString);
27792778
};

Mobile-Expensify

android/app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,8 @@ android {
114114
minSdkVersion rootProject.ext.minSdkVersion
115115
targetSdkVersion rootProject.ext.targetSdkVersion
116116
multiDexEnabled rootProject.ext.multiDexEnabled
117-
versionCode 1009027000
118-
versionName "9.2.70-0"
117+
versionCode 1009027105
118+
versionName "9.2.71-5"
119119
// Supported language variants must be declared here to avoid from being removed during the compilation.
120120
// This also helps us to not include unnecessary language variants in the APK.
121121
resConfigs "en", "es"
Lines changed: 54 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,84 @@
11
---
22
title: How to Pay Expenses in New Expensify
3-
description: Learn how to pay expenses submitted by employees, friends, or family using New Expensify.
4-
keywords: [New Expensify, pay expenses, reimburse friends, personal payments, pay with Expensify, expense approval]
3+
description: Learn how to pay personal or workspace expenses in New Expensify using connected bank accounts or your Wallet.
4+
keywords: [New Expensify, pay expenses, reimburse teammates, reimburse friends, personal payments, business payments, connected bank account, Wallet, pay report]
55
---
6+
<div id="new-expensify" markdown="1">
67

7-
Paying expenses is simple, whether you're reimbursing a teammate or sending money to a friend. Here's how to make payments via Expensify.
8+
Paying expenses in New Expensify is fast and easy—whether you're reimbursing a teammate through a Workspace or sending money to a friend personally. You can pay using a connected business bank account or your Wallet.
89

910
---
1011

11-
# Pay Expenses Submitted to a Workspace
12+
# How to Pay Expenses Submitted to a Workspace
1213

13-
Before you can pay workspace expenses:
14-
- Connect a [business bank account](https://help.expensify.com/articles/new-expensify/expenses-and-payments/Connect-a-Business-Bank-Account)
15-
- The submitter must connect a [personal bank account](https://help.expensify.com/articles/new-expensify/expenses-and-payments/Connect-a-Personal-Bank-Account)
14+
To pay Workspace expenses, you’ll first need to:
15+
- [Connect a business bank account](https://help.expensify.com/articles/new-expensify/expenses-and-payments/Connect-a-Business-Bank-Account)
16+
- Ask the submitter to [connect a personal bank account](https://help.expensify.com/articles/new-expensify/expenses-and-payments/Connect-a-Personal-Bank-Account)
1617

17-
## How to Pay Workspace Expenses
18+
## Where to Find Workspaces Expenses to Pay
19+
20+
- On web, go to the **navigation tabs on the left** and select **Reports > To-do > Pay**
21+
- On mobile, go to the **navigation tabs on the bottom** and select **Reports > To-do > Pay**
22+
- Or, tap the notification you received via email, push, or text
1823

19-
In the **navigation tabs** (on the left on web, and at the bottom on mobile), select **Reports > To-do > Pay** or follow the notification prompt.
24+
## How to Pay Workspace Expenses
2025

21-
1. You'll receive an email, in-app notification, or text (if your contact method is a phone number).
22-
2. Click or tap **Pay** to open the expense report in New Expensify.
23-
3. Choose how to pay:
24-
- **Pay with Expensify** – Use your connected business bank account.
25-
- **Pay elsewhere** – Record that you paid outside Expensify.
26+
1. Open the expense report from the **Reports** tab or the notification.
27+
2. Tap **Pay** to continue.
28+
3. Choose your payment method:
29+
- Use your connected business bank account
30+
- Or mark the report as paid manually
31+
4. If you've paid before, your most recent payment method will appear automatically. To switch, tap the right side of the button to see all available options.
32+
5. If this is your first time paying, you'll be prompted to select your payment method after tapping **Pay**.
2633

27-
![Click Pay Button]({{site.url}}/assets/images/Reports_PayExpense_02.png){:width="100%"}
34+
![Click Pay Button]({{site.url}}/assets/images/Reports_PayExpense_02_Update.png){:width="100%"}
2835

2936
---
3037

31-
# Paying Personal Expenses
38+
# How to Pay Personal Expenses
3239

33-
To send personal payments, you’ll need to [set up your Wallet](https://help.expensify.com/articles/new-expensify/expenses-and-payments/Set-up-your-wallet). This feature is available for U.S. customers only.
40+
To send a personal payment, you must first [set up your Wallet](https://help.expensify.com/articles/new-expensify/expenses-and-payments/Set-up-your-wallet).
41+
**Note:** Personal payments are currently available only to U.S. customers.
3442

35-
## How to Pay a Personal Expense
43+
## Where to find Personal Expenses to Pay
3644

37-
In the **navigation tabs** (on the left on web, and at the bottom on mobile), select **Reports > To-do > Pay** or click on the notification you received.
45+
- On web, go to the **navigation tabs on the left** and select **Reports > To-do > Pay**
46+
- On mobile, go to the **navigation tabs on the bottom** and select **Reports > To-do > Pay**
47+
- Or, click the notification you received
3848

39-
1. You'll be notified via email, in-app alert, or text when someone submits an expense to you.
40-
2. Click or tap **Pay** to view the details.
41-
3. Review the expense, then select your payment method:
42-
- **Pay with Expensify** – Pay using your connected Wallet.
43-
- **Pay elsewhere** – Mark the expense as paid outside Expensify.
49+
## How to Pay a Personal Expense
50+
51+
1. Open the personal expense from your notification or the **Reports** tab.
52+
2. Tap **Pay** to proceed.
53+
3. Choose your payment method:
54+
- Pay from your Wallet (personal bank account)
55+
- Pay from a connected Workspace/business account
56+
- Or mark the report as paid manually
57+
4. If you've made a payment before, the most recently used method will be selected by default. Tap the right side of the button to view other options.
58+
5. If this is your first time paying, you’ll be asked to select a payment method after tapping **Pay**.
4459

4560
---
4661

4762
# FAQ
4863

49-
## Once I pay an expense, how long does it take for the deposit to reach the submitter’s bank account?
64+
## How long does it take for the submitter to receive a payment?
65+
66+
- If you're paying from a **personal bank account** and the payment is **under $100**, it will process in **one business day**.
67+
- If you're paying from a **business bank account**, and your total withdrawals in the past 24 hours are **under $10,000**, the payment will also process in **one business day**.
5068

51-
- If the payment is coming from a **personal bank account** and is under $100, it will process in one business day.
52-
- If the payment is coming from a **business bank account** and the total withdrawal amount has not exceeded $10,000 in the last 24 hours, the payment will process in one business day.
69+
Otherwise, standard bank transfer times apply, and the recipient will receive their funds within **4–5 business days**.
5370

54-
Otherwise, the payment will follow the standard bank transfer timeframe, and the recipient can expect to receive their payment within 4-5 business days.
71+
---
5572

5673
## Can I pay someone in another currency?
5774

58-
You can record expenses in different currencies, but all payments are made to U.S.-based personal or business bank accounts.
75+
You can reimburse Workspace expenses using business bank accounts in the following currencies:
76+
- United States (USD)
77+
- Canada (CAD)
78+
- United Kingdom (GBP)
79+
- European Union (EUR)
80+
- Australia (AUD)
81+
82+
**Note:** Personal expenses paid with the Wallet can only be paid in **USD**.
5983

84+
</div>
Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,73 @@
11
---
2-
title: Pay an Invoice
3-
description: process to pay an invoice
2+
title: How to Pay an Invoice in Expensify
3+
description: Learn how to securely pay an invoice in Expensify—even if you don’t have an account. Instructions for web and mobile.
4+
keywords: pay invoice, Expensify invoice, invoice payment, pay as business, mark as paid, add bank account, pay vendor, invoice steps, desktop, mobile
45
---
56

7+
<div id="new-expensify" markdown="1">
8+
69
{% include info.html %}
7-
Anyone who receives an Expensify invoice can pay it using Expensify—even if they don’t have an Expensify account.
10+
Anyone who receives an invoice from a client or vendor in Expensify can pay it—even if they don’t have an Expensify account.
811
{% include end-info.html %}
912

10-
You'll receive an automated email or text notification when an invoice is sent to you for payment.
13+
When someone sends you an invoice through Expensify, you’ll get an automated email or text notification with a secure link to make a payment.
1114

12-
# Pay an invoice
15+
# How to pay an invoice in Expensify
1316

1417
{% include selector.html values="desktop, mobile" %}
1518

1619
{% include option.html value="desktop" %}
1720
1. Click the link in the email or text notification you receive from Expensify.
1821
2. Click **Pay**.
19-
3. Choose **Pay as an individual** or **Pay as a business**.
20-
4. Click **Add Bank Account** or **Add debit or credit card** to issue payment.
22+
3. Choose whether to pay **as an individual** or **as a business**.
23+
4. Click **Add Bank Account** to connect your payment method, or click **Mark as paid** if you’ve paid outside Expensify.
2124
{% include end-option.html %}
2225

2326
{% include option.html value="mobile" %}
24-
1. Tap the link in the email or text notification they receive from Expensify.
27+
1. Tap the link in the email or text notification you receive from Expensify.
2528
2. Tap **Pay**.
26-
3. Choose **Pay as an individual** or **Pay as a business**.
27-
4. Tap **Add Bank Account** or **Add debit or credit card** to issue payment.
29+
3. Choose whether to pay **as an individual** or **as a business**.
30+
4. Tap **Add Bank Account** to connect your payment method, or tap **Mark as paid** if you’ve paid outside Expensify.
2831
{% include end-option.html %}
2932

3033
{% include end-selector.html %}
3134

32-
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.
35+
## Where to find unpaid invoices
3336

34-
![Click Pay Button on the Invoice]({{site.url}}/assets/images/ExpensifyHelp-Invoice-1.png){:width="100%"}
37+
You can view any unpaid invoices by searching for the sender’s email or phone number using the **Search** bar in the navigation tabs.
38+
39+
- **Web:** Use the search bar at the top of the navigation tabs on the left.
40+
- **Mobile:** Use the search bar at the top of the navigation tabs on the bottom.
3541

36-
{% include faq-begin.md %}
42+
Invoices awaiting your payment are marked with a green dot.
3743

38-
**Why can't I add a debit or credit card to pay an invoice?**
44+
![Click Pay Button on the Invoice]({{site.url}}/assets/images/ExpensifyHelp-Invoice-1.png){:width="100%"}
45+
46+
---
3947

40-
If the **Add a debit or credit card** option is missing, it means that the invoice sender has not added a verified bank account to receive payment.
48+
# FAQ
4149

42-
**Can someone else pay an invoice besides the person who received it?**
50+
## Can someone else pay an invoice besides the person who received it?
4351

44-
No, only the person who received the invoice will see the option to pay it.
52+
**No.** Only the person who received the invoice can view and pay it in Expensify.
4553

46-
**Who can send an invoice?**
54+
## Who can send an invoice in Expensify?
4755

48-
Anyone can pay an invoice they’ve received, but only Expensify customers can send an invoice. This feature ensures that businesses using Expensify can seamlessly manage their invoice billing processes while providing flexibility for their customers to make payments.
56+
Only Expensify members can send invoices. Anyone—regardless of whether they have an Expensify account—can pay an invoice they’ve received.
4957

50-
Expensify invoicing is designed to cater to both business-to-customer (B2C) and business-to-business (B2B) needs, making it a versatile tool for businesses of all sizes.
58+
Expensify Invoicing works for both business-to-customer (B2C) and business-to-business (B2B) payments.
5159

52-
**Can I pay an invoice outside of Expensify?**
60+
## Can I pay an invoice outside of Expensify?
5361

54-
You will need to work with the vendor to discuss alternative payment options. You can chat with your vendor directly at expensify.com in the designated invoice room.
62+
Yes, but you’ll need to coordinate directly with the vendor. You can message them through the invoice room at [expensify.com](https://www.expensify.com) to discuss alternative payment methods.
5563

56-
**Can I add additional payment methods?**
64+
## Can I add multiple payment methods?
5765

58-
You can add additional payment methods to your [Wallet](https://help.expensify.com/articles/new-expensify/expenses-and-payments/Set-up-your-wallet). Click **Account Settings** > **Wallet** > click **Add Bank Account**.
66+
Yes. To add another payment method:
5967

60-
You will be prompted to choose a payment method when paying future invoices.
68+
1. Go to **Account** > **Wallet**.
69+
2. Click **Add Bank Account**.
6170

62-
{% include faq-end.md %}
71+
The next time you pay an invoice, you’ll be prompted to choose a payment method from your Wallet.
6372

73+
</div>

ios/NewExpensify/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<key>CFBundlePackageType</key>
2424
<string>APPL</string>
2525
<key>CFBundleShortVersionString</key>
26-
<string>9.2.70</string>
26+
<string>9.2.71</string>
2727
<key>CFBundleSignature</key>
2828
<string>????</string>
2929
<key>CFBundleURLTypes</key>
@@ -44,7 +44,7 @@
4444
</dict>
4545
</array>
4646
<key>CFBundleVersion</key>
47-
<string>9.2.70.0</string>
47+
<string>9.2.71.5</string>
4848
<key>FullStory</key>
4949
<dict>
5050
<key>OrgId</key>

ios/NotificationServiceExtension/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<key>CFBundleName</key>
1212
<string>$(PRODUCT_NAME)</string>
1313
<key>CFBundleShortVersionString</key>
14-
<string>9.2.70</string>
14+
<string>9.2.71</string>
1515
<key>CFBundleVersion</key>
16-
<string>9.2.70.0</string>
16+
<string>9.2.71.5</string>
1717
<key>NSExtension</key>
1818
<dict>
1919
<key>NSExtensionPointIdentifier</key>

0 commit comments

Comments
 (0)