Skip to content

Commit c7e3933

Browse files
committed
Merge branch 'main' of github.com:software-mansion-labs/expensify-app-fork into Guccio163/MoneyRequestReportPreviewStylesCleanup
2 parents d43f09d + 67e472c commit c7e3933

205 files changed

Lines changed: 3821 additions & 2024 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/workflows/deploy.yml

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -180,20 +180,15 @@ jobs:
180180
GOOGLE_KEY_FILE: ./android-fastlane-json-key.json
181181
PACKAGE_NAME: org.me.mobiexpensifyg
182182

183+
# Complete the previous version rollout if the current rollout percentage is not -1 (no rollout in progress) or 1 (fully rolled out)
184+
- name: Submit previous production build to 100%
185+
if: ${{ github.ref == 'refs/heads/production' && !contains(fromJSON('["1", "-1"]'), steps.getAndroidRolloutPercentage.outputs.CURRENT_ROLLOUT_PERCENTAGE) }}
186+
run: bundle exec fastlane android complete_hybrid_rollout
187+
continue-on-error: true
188+
183189
- name: Submit production build for Google Play review and a slow rollout
184190
if: ${{ github.ref == 'refs/heads/production' }}
185-
run: |
186-
# Complete the previous version rollout if the current rollout percentage is not -1 (no rollout in progress) or 1 (fully rolled out)
187-
echo "Current rollout percentage: ${{ steps.getAndroidRolloutPercentage.outputs.CURRENT_ROLLOUT_PERCENTAGE }}"
188-
if [[ ${{ steps.getAndroidRolloutPercentage.outputs.CURRENT_ROLLOUT_PERCENTAGE }} != '-1' && ${{ steps.getAndroidRolloutPercentage.outputs.CURRENT_ROLLOUT_PERCENTAGE }} != '1' ]]; then
189-
echo "Completing the previous version rollout"
190-
bundle exec fastlane android complete_hybrid_rollout
191-
else
192-
echo "Skipping the completion of the previous version rollout"
193-
fi
194-
195-
# Submit the new version for review and slow rollout when it's approved
196-
bundle exec fastlane android upload_google_play_production_hybrid_rollout
191+
run: bundle exec fastlane android upload_google_play_production_hybrid_rollout
197192
env:
198193
VERSION: ${{ steps.getAndroidVersion.outputs.VERSION_CODE }}
199194

@@ -433,14 +428,14 @@ jobs:
433428
if: ${{ fromJSON(env.IS_APP_REPO) && fromJSON(env.SHOULD_BUILD_APP) }}
434429
run: bundle exec fastlane ios upload_dsyms_hybrid
435430

436-
- name: Submit production build for App Store review and a slow rollout
431+
- name: Submit previous production build to 100%
437432
if: ${{ github.ref == 'refs/heads/production' }}
438-
run: |
439-
# Complete the previous version rollout
440-
bundle exec fastlane ios complete_hybrid_rollout
433+
run: bundle exec fastlane ios complete_hybrid_rollout
434+
continue-on-error: true
441435

442-
# Submit the new version for review and phased rollout when it's approved
443-
bundle exec fastlane ios submit_hybrid_for_rollout
436+
- name: Submit production build for App Store review and a slow rollout
437+
if: ${{ github.ref == 'refs/heads/production' }}
438+
run: bundle exec fastlane ios submit_hybrid_for_rollout
444439
env:
445440
VERSION: ${{ steps.getIOSVersion.outputs.IOS_VERSION }}
446441
APPLE_ID: ${{ vars.APPLE_ID }}

.github/workflows/deployExpensifyHelp.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,3 @@ jobs:
8181
with:
8282
token: ${{ secrets.OS_BOTIFY_TOKEN }}
8383
body: ${{ format('A preview of your ExpensifyHelp changes have been deployed to {0} ⚡️', steps.deploy.outputs.alias) }}
84-
85-
- name: Reindex google search
86-
if: ${{ github.event_name == 'push' }}
87-
run : |
88-
curl "https://www.google.com/ping?sitemap=https://help.expensify.com/sitemap.xml"

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 1009017006
118-
versionName "9.1.70-6"
117+
versionCode 1009017101
118+
versionName "9.1.71-1"
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"

assets/images/money-hourglass.svg

Lines changed: 13 additions & 0 deletions
Loading

cspell.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,7 @@
711711
"assets/emojis/es.ts",
712712
"patches/**",
713713
"docs/assets/Files/**",
714+
"docs/sitemap.xml",
714715
"ios/NewExpensify.xcodeproj/**",
715716
"ios/GoogleService-Info.plist",
716717
"ios/GoogleService-Info-DEV.plist",

desktop/main.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {translate} from '@libs/Localize';
1111
import Log from '@libs/Log';
1212
import CONFIG from '@src/CONFIG';
1313
import CONST from '@src/CONST';
14-
import TranslationStore from '@src/languages/TranslationStore';
14+
import IntlStore from '@src/languages/IntlStore';
1515
import type {TranslationPaths} from '@src/languages/types';
1616
import type PlatformSpecificUpdater from '@src/setup/platformSetup/types';
1717
import type {Locale} from '@src/types/onyx';
@@ -666,7 +666,7 @@ const mainWindow = (): Promise<void> => {
666666
// because the only way code can be shared between the main and renderer processes at runtime is via the context bridge
667667
// So we track preferredLocale separately via ELECTRON_EVENTS.LOCALE_UPDATED
668668
ipcMain.on(ELECTRON_EVENTS.LOCALE_UPDATED, (event, updatedLocale: Locale) => {
669-
TranslationStore.load(updatedLocale).then(() => {
669+
IntlStore.load(updatedLocale).then(() => {
670670
preferredLocale = updatedLocale;
671671
Menu.setApplicationMenu(Menu.buildFromTemplate(localizeMenuItems(initialMenuTemplate, updatedLocale)));
672672
disposeContextMenu?.();
Lines changed: 74 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,136 +1,128 @@
11
---
2-
title: Direct Feeds
3-
description: Learn how to connect your bank to Expensify using a direct feed to import company card expenses quickly and reliably.
4-
keywords: [New Expensify, direct feeds, company cards, credit card integration, import transactions, assign cards, manage cards]
2+
title: Direct Company Card Feeds
3+
description: Learn how to connect company credit cards using direct feeds or Plaid to import transactions and assign cards in New Expensify.
4+
keywords: [New Expensify, direct feeds, Plaid integration, company cards, credit card import, assign cards, connect bank, manage card feeds]
55
---
6+
67
<div id="new-expensify" markdown="1">
78

8-
Direct feeds offer a fast and reliable way to import company card transactions. By connecting your bank to Expensify using your credentials, you can be up and running in just a few minutes.
9+
Direct feeds in Expensify provide a fast, reliable way to import company card transactions. You can also use Plaid to connect your company card program, giving you even more options to manage your corporate card account directly in Expensify.
910

1011
You can add one **direct** or [**commercial feed**](https://help.expensify.com/articles/new-expensify/connect-credit-cards/Commercial-feeds) on the **Collect plan**. Upgrade to the **Control plan** to add unlimited company cards.
1112

1213
---
1314

1415
# Prerequisites
1516

16-
Before setting up a direct feed, go to **Workspaces > New Workspace** to create a workspace (if you haven't already).
17+
**A workspace on the Collect or Control plan:** Before setting up a direct feed, go to **Workspaces > New Workspace** to create a workspace (if you haven't already).
1718

1819
---
1920

2021
# Set Up a Direct Feed
2122

22-
1. Go to **Workspaces > [Workspace Name] > Company Cards**.
23-
2. Click **Add Cards**.
23+
1. . Go to **Workspaces > [Workspace Name] > Company cards** to view your company’s card setup page.
24+
2. Click **Add cards** to start connecting a new feed.
25+
3. **Select your country** from the list.
26+
- Expensify will prefill this based on your workspace’s currency, but you can manually change it if needed.
27+
- You won’t be able to continue without selecting a country -- You'll see an error.
28+
29+
4. **Choose your feed type** when prompted:
30+
- **Direct feed** – This is the default option in most supported countries and works for the majority of users.
31+
- **Commercial feed** – Best for large-scale card programs where your bank facilitates the connection directly.
32+
5. **Pick your bank:**
33+
- If you’re in the U.S., select your bank from the list or choose **Other** to see additional banks supported by Plaid.
34+
- For international members in supported countries, choosing **Direct feed** will automatically launch the Plaid connection process.
2435

2536
![Click add cards to add a card feed]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_01.png){:width="100%"}
2637

27-
3. Select your **bank** from the list.
28-
- If your bank isn't listed, consider using a [commercial feed](https://help.expensify.com/articles/new-expensify/connect-credit-cards/Commercial-feeds).
29-
30-
![Select your bank and click Next]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_02.png){:width="100%"}
31-
32-
4. Select **Direct Feed**.
33-
34-
![Select your feed type and click next]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_03.png){:width="100%"}
35-
36-
5. Log in to your bank using **master credentials** (typically those of the account owner).
37-
6. Select the account(s) to connect.
38-
39-
![Login to your bank]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_04.png){:width="100%"}
40-
4138
---
4239

4340
# Assign Company Cards
4441

45-
Once connected:
46-
47-
1. Go to **Workspaces > [Workspace Name] > Company Cards**.
48-
49-
![Click company cards in the workspace editor to open the feed]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_05.png){:width="100%"}
42+
Once connected, you'll want to assign the company cards to their respective cardholders:
5043

51-
2. If you have multiple feeds, click the feed name at the top left to select the correct card feed.
44+
1. Go to **Workspaces > [Workspace Name] > Company cards**.
45+
2. If you have multiple feeds, click the feed name at the top left to select the correct one.
46+
3. Click **Assign card**
47+
- You may be prompted to reauthenticate your account before assigning cards.
48+
5. Select a **workspace member** from the list.
49+
6. Choose a **card** (only cards with recent transactions will appear).
50+
7. Set a **start date**:
51+
- **From the beginning** (typically 30–90 days)
52+
- **Custom date** to define your own range
53+
8. Review your selections and click **Assign card**.
5254

5355
![Click the feed name in the top left to open the feed selector where you can select a feed from the list]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_06.png){:width="100%"}
5456

55-
3. Click **Assign Card**.
56-
- You may be prompted to reauthenticate with your bank.
57-
4. Select a workspace member.
58-
59-
![Click assign card to begin the flow. Start by selecting a member from the list]({{site.url}}/assets/images/Direct Feed HelpDot Images
60-
/directfeeds_07.png){:width="100%"}
61-
62-
5. Choose a card (only cards with recent transactions will appear).
63-
64-
![Select a card from the list]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_08.png){:width="100%"}
65-
66-
6. Set a **start date**:
67-
- **From the beginning** – All available transactions (typically 30–90 days)
68-
- **Custom start date** – Specify a date
69-
70-
![Choose a transaction start date]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_09.png){:width="100%"}
71-
72-
7. Review your selections and click **Assign Card**.
73-
74-
![Check your selections and assign the card]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_10.png){:width="100%"}
57+
![Click company cards in the workspace editor to open the feed]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_05.png){:width="100%"}
7558

7659
---
7760

7861
# Manage Assigned Cards
7962

80-
To manage a card, click any assigned card to open the **Card Details** page.
63+
To manage a card, click any assigned card to open the **Card details** page.
8164

8265
![Tap the assigned card to open the card details page where you can manage the card]({{site.url}}/assets/images/Direct Feed HelpDot Images/directfeeds_11.png){:width="100%"}
8366

8467
**Available actions:**
68+
- Rename the card
69+
- Assign a specific export account
70+
- Update transactions
71+
- Unassign the card
8572

86-
- **Rename the card**
87-
- **Assign a specific export account** (if connected to accounting software)
88-
- **Update transactions**
89-
- **Unassign the card:** This will remove the card and delete any unsubmitted expenses from draft reports in the cardholder’s account.
73+
**Note:** Unassigning a card will delete unsubmitted expenses from draft reports for that cardholder.
9074

9175
---
9276

9377
# FAQ
9478

95-
## My Direct Feed Is Connected. Why Isn’t a Specific Card Showing Up?
96-
97-
Make sure you use the master credentials when connecting. Cards must be active and have at least one recent transaction to appear. If issues persist, contact your account manager or email [concierge@expensify.com](mailto:concierge@expensify.com).
98-
99-
---
100-
101-
## Are Direct Feeds the Best Option?
79+
## What if I’m outside the U.S.?
10280

103-
If Expensify supports your bank, direct feeds are a fast and convenient setup.
104-
For **greater stability**, consider a [commercial feed](https://help.expensify.com/articles/new-expensify/connect-credit-cards/Commercial-feeds) or use the [Expensify Card](https://use.expensify.com/company-credit-card).
81+
Plaid feeds are available in many countries outside the U.S. If your country isn’t supported, you’ll see the option to connect a **Commercial feed**.
10582

106-
---
83+
**Direct feeds are supported for the following countries:**
84+
- United States
85+
- Canada
86+
- United Kingdom
87+
- Austria
88+
- Belgium
89+
- Denmark
90+
- Estonia
91+
- Finland
92+
- France
93+
- Germany
94+
- Ireland
95+
- Italy
96+
- Latvia
97+
- Lithuania
98+
- Netherlands
99+
- Norway
100+
- Poland
101+
- Portugal
102+
- Spain
103+
- Sweden
107104

108-
## Is There an Extra Fee?
105+
## How do I reconnect a broken feed?
109106

110-
No.
111-
- One direct feed is included in the **Collect plan**.
112-
- Add more by upgrading to the **Control plan**.
113-
114-
---
107+
1. Go to **Workspaces > [Workspace Name] > Company cards**
108+
2. Click the red error banner
109+
3. Log in to your bank using your bank account credentials to restore the connection
115110

116-
## What’s the Difference Between Direct and Commercial Feeds?
111+
## Can I connect multiple feeds from the same bank?
117112

118-
| Feature | Direct Feed | Commercial Feed |
119-
|--------------------|------------------------------|--------------------------------|
120-
| Setup | User credentials (login) | Bank-initiated (no login) |
121-
| Stability | May require reauthentication | Most reliable connection |
122-
| Bank involvement | Not required | Required |
113+
Not quite. Each workspace can only have **one direct feed per bank**.
114+
If your company uses cards from multiple banks, that’s no problem — just connect each bank as its own separate feed.
123115

124-
---
116+
## Is there an extra cost?
125117

126-
## What If Expensify Doesn’t Support My Bank?
118+
Nope — there’s no extra charge for using Plaid or direct feeds.
127119

128-
If your bank isn’t supported for direct feeds, consider:
120+
- With the **Collect** plan, you can add one direct or Plaid feed at no cost.
121+
- To connect more than one, you’ll need to upgrade to the **Control** plan.
129122

130-
- Setting up a [commercial feed](https://help.expensify.com/articles/new-expensify/connect-credit-cards/Commercial-feeds)
131-
- Using the [Expensify Card](https://use.expensify.com/company-credit-card)
123+
## Which banks support direct feeds?
132124

133-
Supported banks for direct feeds include:
125+
Some examples of supported direct feed banks include:
134126

135127
- American Express
136128
- Bank of America
@@ -139,28 +131,7 @@ Supported banks for direct feeds include:
139131
- Chase
140132
- Citibank
141133
- Stripe
142-
- Wells Fargo
143-
144-
---
145-
146-
## Can Direct Feeds Have Downtime?
147-
148-
Occasionally, yes. Bank security updates can interrupt connections. Expensify’s engineering team monitors these and works to restore access quickly.
149-
150-
---
151-
152-
## My Direct Feed Is Broken. How Do I Fix It?
153-
154-
If login credentials, card numbers, or security questions have changed:
155-
156-
1. Go to **Workspaces > [Workspace Name] > Company Cards**
157-
2. Click **Log into your bank** on the error message
158-
3. Reauthenticate to restore the connection
159-
160-
---
161-
162-
## Can I Connect Multiple Direct Feeds from the Same Bank?
163-
164-
No. Each workspace supports **one direct feed per bank**. If you have multiple programs, request that your bank consolidate them under one login. You can connect multiple direct feeds from **different banks** in the same workspace.
134+
- Wells Fargo
135+
- Plaid enables a connection with hundreds of banks ([Plaid - European Bank Coverage](https://plaid.com/docs/resources/#european-bank-coverage))
165136

166137
</div>

0 commit comments

Comments
 (0)