Skip to content

Commit

Permalink
Merge branch 'main' into youssef_early_discount
Browse files Browse the repository at this point in the history
  • Loading branch information
youssef-lr committed Jan 7, 2025
2 parents 70ffbfa + 89a18c6 commit 47440ab
Show file tree
Hide file tree
Showing 337 changed files with 11,205 additions and 3,444 deletions.
3 changes: 1 addition & 2 deletions .eslintrc.changed.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,14 @@ module.exports = {
overrides: [
{
files: [
'src/libs/ReportUtils.ts',
'src/libs/actions/IOU.ts',
'src/libs/actions/Report.ts',
'src/libs/actions/Task.ts',
'src/libs/OptionsListUtils.ts',
'src/libs/ReportActionsUtils.ts',
'src/libs/TransactionUtils/index.ts',
'src/pages/home/ReportScreen.tsx',
'src/pages/workspace/WorkspaceInitialPage.tsx',
'src/pages/home/report/PureReportActionItem.tsx',
],
rules: {
'rulesdir/no-default-id-values': 'off',
Expand Down
1 change: 1 addition & 0 deletions .github/actionlint.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ self-hosted-runner:
- macos-13-large
- macos-13-xlarge
- ubuntu-latest-reassure-tests
- macos-12
20 changes: 19 additions & 1 deletion .github/actions/composite/setupNode/action.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
name: Set up Node
description: Set up Node

inputs:
IS_HYBRID_BUILD:
description: "Indicates if node is set up for hybrid app"
required: false
default: 'false'

outputs:
cache-hit:
description: Was there a cache hit on the main node_modules?
Expand All @@ -27,14 +33,26 @@ runs:
path: node_modules
key: ${{ runner.os }}-node-modules-${{ hashFiles('package-lock.json', 'patches/**') }}

- id: cache-old-dot-node-modules
if: inputs.IS_HYBRID_BUILD == 'true'
uses: actions/cache@v4
with:
path: Mobile-Expensify/node_modules
key: ${{ runner.os }}-node-modules-${{ hashFiles('Mobile-Expensify/package-lock.json', 'Mobile-Expensify/patches/**') }}

- id: cache-desktop-node-modules
uses: actions/cache@v4
with:
path: desktop/node_modules
key: ${{ runner.os }}-desktop-node-modules-${{ hashFiles('desktop/package-lock.json', 'desktop/patches/**') }}

- name: Remove ND node_modules if needed for hybrid app build
if: inputs.IS_HYBRID_BUILD == 'true' && steps.cache-node-modules.outputs.cache-hit == 'true' && steps.cache-old-dot-node-modules.outputs.cache-hit != 'true'
shell: bash
run: rm -rf node_modules

- name: Install root project node packages
if: steps.cache-node-modules.outputs.cache-hit != 'true'
if: steps.cache-node-modules.outputs.cache-hit != 'true' || (inputs.IS_HYBRID_BUILD == 'true' && steps.cache-old-dot-node-modules.outputs.cache-hit != 'true')
uses: nick-fields/retry@3f757583fb1b1f940bc8ef4bf4734c8dc02a5847
with:
timeout_minutes: 30
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ jobs:
- name: Setup Node
id: setup-node
uses: ./.github/actions/composite/setupNode
with:
IS_HYBRID_BUILD: 'true'

- name: Run grunt build
run: |
Expand Down Expand Up @@ -449,6 +451,8 @@ jobs:
- name: Setup Node
id: setup-node
uses: ./.github/actions/composite/setupNode
with:
IS_HYBRID_BUILD: 'true'

- name: Setup Ruby
uses: ruby/[email protected]
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/testBuildHybrid.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,8 @@ jobs:
- name: Setup Node
id: setup-node
uses: ./.github/actions/composite/setupNode
with:
IS_HYBRID_BUILD: 'true'

- name: Run grunt build
run: |
Expand Down Expand Up @@ -223,6 +225,8 @@ jobs:
- name: Setup Node
id: setup-node
uses: ./.github/actions/composite/setupNode
with:
IS_HYBRID_BUILD: 'true'

- name: Create .env.adhoc file based on staging and add PULL_REQUEST_NUMBER env to it
run: |
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,8 @@ You can only build HybridApp if you have been granted access to [`Mobile-Expensi
[url "https://github.com/"]
insteadOf = ssh://[email protected]/
```
3. The first time you build the app you will need to build YAPL (OldDot javascript logic). Simply run `npm run grunt:build:shared` from the `Mobile-Expensify` submodule
- The following runtime error often indicates that YAPL has not been built correctly: `undefined is not an object (evaluating'Store.ReportHistory.bindCacheClearingEvents')`

At this point, the default behavior of some `npm` scripts will change to target HybridApp:
- `npm run android` - build HybridApp for Android
Expand Down
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 1009007706
versionName "9.0.77-6"
versionCode 1009008103
versionName "9.0.81-3"
// 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
12 changes: 12 additions & 0 deletions assets/images/buildings.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,16 @@ Expensify makes it easy to receive bills in three simple ways:
Share your Expensify billing email with vendors to receive bills automatically.

- Set a Primary Contact under **Settings > Domains > Domain Admins**.
- Ask vendors to email bills to your billing address: `[email protected]` (e.g., for *expensify.com*, use `expensify@expensify.cash`).
- Ask vendors to email bills to your billing address: `[email protected]` (e.g., for *expensicorp.com*, use `expensicorp@expensify.cash`).
- Once emailed, the bill is automatically created in Expensify, ready for payment.

![Setting the Primary Contact at Domain Admins > Primary Contact](https://help.expensify.com/assets/images/OldDot%20-%20Create%20%26%20Pay%20Bills%201.png){:width="100%"}

### 2. Forwarding Emails
Received a bill in your email? Forward it to Expensify.

- Ensure your Primary Contact is set under **Settings > Domains > Domain Admins**.
- Forward bills to `[email protected]`. Example: `[email protected]` (e.g., for *expensify.com*, use `expensify@expensify.cash`).
- Forward bills to `[email protected]`. Example: `[email protected]` (e.g., for *expensicorp.com*, use `expensicorp@expensify.cash`).
- Expensify will create a bill automatically, ready for payment.

### 3. Manual Upload
Expand All @@ -31,6 +33,7 @@ Got a paper bill? Create a bill manually in [Expensify](https://www.expensify.co
3. Enter the invoice details: sender’s email, merchant name, amount, and date.
4. Upload the invoice as a receipt.

![Manually Create a Bill](https://help.expensify.com/assets/images/OldDot%20-%20Create%20%26%20Pay%20Bills%202.png){:width="100%"}

# Paying Bills in Expensify

Expand All @@ -44,6 +47,8 @@ Expensify makes it easy to manage and pay vendor bills with a straightforward wo
4. **Approval Workflow**: Once reviewed, the bill follows your workspace’s approval process. The final approver handles the payment.
5. **Accounting Integration**: During approval, the bill is coded with the correct GL codes from your connected accounting software. Once approved, it can be exported back to your accounting system.

![Paying a Bill](https://help.expensify.com/assets/images/OldDot%20-%20Create%20%26%20Pay%20Bills%203.png){:width="100%"}

## Payment Methods

Expensify offers several ways to pay bills. Choose the method that works best for you:
Expand Down Expand Up @@ -92,20 +97,27 @@ If you prefer to pay outside Expensify, you can still track the payment within t
3. Select **Mark as Paid** to update its status.

**Fees:** None.

{% include faq-begin.md %}

## Who receives vendor bills in Expensify?
bills are sent to the Primary Contact listed under **Settings > Domains > [Domain Name] > Domain Admins**.

Bills are sent to the Primary Contact listed under **Settings > Domains > [Domain Name] > Domain Admins**.

## Who can view and pay a bill?

Only the primary domain contact can view and pay a bill.

## How can others access bills?

The primary contact can share bills or grant Copilot access for others to manage payments.

## Is bill Pay supported internationally?

Currently, payments are only supported in USD.

## What's the difference between a bill and an Invoice in Expensify?

A bill represents a payable amount owed to a vendor, while an Invoice is a receivable amount owed to you.

{% include faq-end.md %}
Loading

0 comments on commit 47440ab

Please sign in to comment.