Skip to content

Commit

Permalink
Merge branch 'main' of https://github.com/rezkiy37/Expensify into fea…
Browse files Browse the repository at this point in the history
…ture/45171-invoicing-payment-flow
  • Loading branch information
rezkiy37 committed Mar 7, 2025
2 parents b7a4859 + d414689 commit c4edf8b
Show file tree
Hide file tree
Showing 132 changed files with 2,427 additions and 1,052 deletions.
1 change: 1 addition & 0 deletions .github/workflows/authorChecklist.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
# Warning: – when using the pull_request_target event, DO NOT checkout code from an untrusted branch: https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
pull_request_target:
types: [opened, edited, reopened, synchronize]
branches: [main]

jobs:
# Note: PHP specifically looks for the name of this job, "checklist", so if the name of the job is changed,
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/cherryPick.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,17 +104,17 @@ jobs:
\`\`\`bash
git fetch
git checkout roryabraham-cherry-pick-staging-56382-1
git cherry-pick -S -x --mainline 1 6486b1d1961d4c6de85154905d57af5118b33ff9
git checkout ${{ github.actor }}-cherry-pick-staging-${{ github.event.inputs.PULL_REQUEST_NUMBER }}-${{ github.run_attempt }}
git cherry-pick -S -x --mainline 1 ${{ steps.getCPMergeCommit.outputs.MERGE_COMMIT_SHA }}
\`\`\`
Then manually resolve conflicts, and commit the change with \`git cherry-pick --continue\`. Lastly, please run:
\`\`\`bash
git commit --amend -m "\$(git log -1 --pretty=%B)" -m "(CP triggered by roryabraham)"
git commit --amend -m "\$(git log -1 --pretty=%B)" -m "(CP triggered by ${{ github.actor }})"
\`\`\`
That will help us keep track of who triggered this CP. Once all that's done, push your changes with \`git push origin roryabraham-cherry-pick-staging-6486b1d1961d4c6de85154905d57af5118b33ff9-1\`, and then open this PR for review.
That will help us keep track of who triggered this CP. Once all that's done, push your changes with \`git push origin ${{ github.actor }}-cherry-pick-staging-${{ github.event.inputs.PULL_REQUEST_NUMBER }}-${{ github.run_attempt }}\`, and then open this PR for review.
Note that you **must** test this PR, and both the author and reviewer checklist should be completed, just as if you were merging the PR to main.
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/cla.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
types: [created]
pull_request_target:
types: [opened, synchronize]
branches: [main]

jobs:
CLA:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/postBuildStartedComment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: ${{ inputs.APP_PULL_REQUEST_NUMBER }},
body: `🚧 @${{ github.actor }} has triggered a test hybrid app build. You can view the [workflow run here](${workflowURL}).`
body: `🚧 @${{ github.actor }} has triggered a test app build. You can view the [workflow run here](${workflowURL}).`
});
- name: Add build start comment to OD PR
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/verifyHybridApp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ on:
- 'ios/project.pbxproj'
pull_request_target:
types: [opened, synchronize]
branches-ignore: [staging, production]
branches: [main]
paths:
- '**.kt'
- '**.java'
Expand Down Expand Up @@ -52,7 +52,7 @@ jobs:
- name: Comment on forks
run: |
gh pr comment ${{github.event.pull_request.html_url }} --body \
":warning: This PR is possibly changing native code, it may cause problems with HybridApp. Please run an AdHoc build to verify that HybridApp will not break. :warning:"
":warning: This PR is possibly changing native code and/or updating libraries, it may cause problems with HybridApp. Please check if any patch updates are required in the HybridApp repo and run an AdHoc build to verify that HybridApp will not break. Ask Contributor Plus for help if you are not sure how to handle this. :warning:"
env:
GITHUB_TOKEN: ${{ github.token }}
verify_android:
Expand Down
2 changes: 1 addition & 1 deletion Mobile-Expensify
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
versionCode 1009010906
versionName "9.1.9-6"
versionCode 1009011000
versionName "9.1.10-0"
// 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
261 changes: 261 additions & 0 deletions assets/images/product-illustrations/rocket-dude.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 28 additions & 17 deletions contributingGuides/FORMS.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,23 +35,6 @@ Labels and hints are enabled by passing the appropriate props to each input:
/>
```

### Character Limits

If a field has a character limit, we should give that field a max limit. This is done by passing the maxLength prop to TextInput.

```jsx
<InputWrapper
InputComponent={TextInput}
maxLength={20}
/>
```
Note: We shouldn't place a max limit on a field if the entered value can be formatted. eg: Phone number.
The phone number can be formatted in different ways.

- 2109400803
- +12109400803
- (210)-940-0803

### Native Keyboards

We should always set people up for success on native platforms by enabling the best keyboard for the type of input we’re asking them to provide. See [inputMode](https://reactnative.dev/docs/textinput#inputmode) in the React Native documentation.
Expand Down Expand Up @@ -176,6 +159,34 @@ function validate(values) {

For a working example, check [Form story](https://github.com/Expensify/App/blob/aa1f0f34eeba5d761657168255a1ae9aebdbd95e/src/stories/Form.stories.js#L63-L72)

### Character Limits

If a field has a character limit, we should give that field a max limit. This is done by passing the character limit validation in the validate function.

Here's an example for a form that has one input `name`, and has character limit of 100:

```js
function validate(values) {
const errors = {};
if (values.name.length > 100) {
ErrorUtils.addErrorMessage(errors, 'name', translate('common.error.characterLimitExceedCounter', {length: values.name.length, limit: 100}));
}
return errors;
}
```

> [!NOTE]
> We shouldn't place a max limit on a field if the entered value can be formatted. eg: Phone number.
> The phone number can be formatted in different ways.
>
> - 2109400803
> - +12109400803
> - (210)-940-0803
> [!NOTE]
> If we want to count number of Unicode code points instead of the number of UTF-16 code units, we should use the spread syntax.
> Example - `[...newCategoryName].length`
### Highlight Fields and Inline Errors

Individual form fields should be highlighted with a red error outline and present supporting inline error text below the field. Error text will be required for all required fields and optional fields that require validation. This will keep our error handling consistent and ensure we put in a good effort to help the user fix the problem by providing more information than less.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
---
title: Out-of-Date Billing
description: How to resolve an out-of-date billing notification for your Expensify Workspace.
---

**A notification about out-of-date billing appears when:**

- The payment method for your workspace is expired, invalid, or has insufficient funds.
- Your company’s Expensify trial has ended, and it’s time to [upgrade your subscription](https://help.expensify.com/articles/expensify-classic/expensify-billing/Change-Plan-Or-Subscription).

---

# Identify the Billing Owner

1. Hover over **Settings** and click **Workspaces**.
2. Select the workspace with the `!` symbol.
3. Locate the **Billing Owner** listed.
4. Ask the Billing Owner to follow the next steps. If you need to take over billing, click **Take Over Billing**.

---

# Update Payment and Retry Billing

**Note:** Only the **Billing Owner** can complete this step.

1. Ensure the linked card or bank account has sufficient funds.
2. Hover over **Settings** and click **Account**.
3. Select the **Payments** tab.
4. Choose one of the following:
- Click **Retry Billing** if the previous payment failed due to insufficient funds.
- Click **Add Payment Card** to enter a new payment method.

Once the payment is processed, the out-of-date billing notification will disappear.

This file was deleted.

24 changes: 24 additions & 0 deletions docs/articles/expensify-classic/settings/Set-Time-Zone.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
title: Set Time Zone
description: Learn how to set your time zone in Expensify for accurate timestamps.
---

You can set your time zone manually or allow Expensify to adjust it automatically based on your location.

Some actions in Expensify are timestamped. To ensure accuracy, make sure your time zone matches your current location.
- **Automatic time zone**: Expensify updates your time zone based on your location.
- **Manual time zone**: You must manually update your time zone when traveling.

**Note:** This process is only available on the Expensify website and cannot be completed from the mobile app.

---

## Set Your Time Zone

1. Hover over **Settings**, then click **Account**.
2. Click the **Preferences** tab.
3. Scroll to the **Time Zone** section and choose your preference:
- **Automatic**: Check the **Set my time zone automatically** box to allow Expensify to adjust your time zone based on your location.
- **Manual**: Select your time zone from the list.

Your time zone settings will now be applied to your Expensify account.
21 changes: 0 additions & 21 deletions docs/articles/expensify-classic/settings/Set-time-zone.md

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,65 @@
title: Fringe Benefits
description: How to track your Fringe Benefits
---
# Overview
If you’re looking to track and report expense data to calculate Fringe Benefits Tax (FBT), you can use Expensify’s special workflow that allows you to capture extra information and use a template to export to a spreadsheet.

# How to set up Fringe Benefit Tax
If you need to track and report expense data for **Fringe Benefits Tax (FBT)**, Expensify offers a workflow to capture the required information and export it to a spreadsheet.

## Add Attendee Count Tags
First, you’ll need to add these two tags to your Workspace:
1) Number of Internal Attendees
2) Number of External Attendees
---

These tags must be named exactly as written above, ensuring there are no extra spaces at the beginning or at the end. You’ll need to set the tags to be numbers 00 - 10 or whatever number you wish to go up to (up to the maximum number of attendees you would expect at any one time), one tag per number i.e. “01”, “02”, “03” etc. These tags can be added in addition to those that are pulled in from your accounting solution. Follow these [instructions](https://help.expensify.com/articles/expensify-classic/workspaces/Tags) to add tags.
# Set Up Fringe Benefits Tax

## Add Payroll Code
Go to **Settings > Workspaces > Group > _Workspace Name_ > Categories** and within the categories you wish to track FBT against, select **Edit Category** and add the code “TAG”:
## Add Attendee Count Tags
To start tracking FBT, add the following tags to your **Workspace**:
- **Number of Internal Attendees**
- **Number of External Attendees**

## Enable Workflow
Once you’ve added both tags (Internal Attendees and External Attendees) and added the payroll code “TAG” to FBT categories, you can send a request to Expensify at concierge@expensify.com to enable the FBT workflow. Please send the following request:
>“Can you please add the custom workflow/DEW named FRINGE_BENEFIT_TAX to my company workspace named <insert your company workspace name> ?”
Once the FBT workflow is enabled, it will require anything with the code “TAG” to include the two attendee count tags in order to be submitted.
These tags **must be named exactly** as written above, without extra spaces.

## Setting up Tags:
1. Go to **Settings > Workspaces > Group > _Workspace Name_ > Tags**.
2. Create tags with numeric values (e.g., **"01", "02", "03"**) up to your expected maximum number of attendees.
3. These tags can be used alongside existing accounting solution tags.
4. Follow [these instructions](https://help.expensify.com/articles/expensify-classic/workspaces/Tags) to add tags.

# For Users
Once these steps are completed, users who create expenses coded with any category that has the payroll code “TAG” (e.g. Entertainment Expenses) but don’t add the internal and external attendee counts, will not be able to submit their expenses.
# For Admins
You are now able to create and run a report, which shows all expenses under these categories and also shows the number of internal and external attendees. Because we don’t presume to know all of the data points you wish to capture, you’ll need to create a Custom CSV export.
Here are a couple of examples of Excel formulas to use to report on attendees:
- `{expense:tag:ntag-1}` outputs the first tag the user chooses.
- `{expense:tag:ntag-3}` outputs the third tag the user chooses.
## Add Payroll Code
1. Navigate to **Settings > Workspaces > Group > _Workspace Name_ > Categories**.
2. Select **Edit Category** for the relevant expense categories.
3. Add the payroll code **“TAG”**.

Your expenses may have multiple levels of coding, i.e.:
- GL Code (Category)
- Department (Tag 1)
- Location (Tag 2)
- Number of Internal Attendees (Tag 3)
- Number of External Attendees (Tag 4)
## Enable the FBT Workflow
Once you've added the attendee count tags and payroll code, email **concierge@expensify.com** with this request:

In the above case, you’ll want to use `{expense:tag:ntag-3}` and `{expense:tag:ntag-4}` as formulas to report on the number of internal and external attendees.
> **Subject:** Enable Fringe Benefits Tax Workflow
> **Message:** Can you please add the custom workflow/DEW named **FRINGE_BENEFIT_TAX** to my company workspace named **<Your Company Workspace Name>**?
Our article on [Custom Templates](https://help.expensify.com/articles/expensify-classic/insights-and-custom-reporting/Custom-Templates) shows how to create a custom CSV.
Once enabled, expenses coded with **“TAG”** will require the attendee count tags before they can be submitted.

---

# For Workspace Members

- When submitting expenses under **FBT-tracked categories**, users **must** include internal and external attendee counts.
- If these fields are missing, the expense **cannot be submitted**.

---

# For Workspace Admins

## Running Reports
You can generate reports that include FBT-tracked expenses and attendee counts.

To extract the data:
1. Use a **Custom CSV Export** to format your report.
2. Apply these formulas to reference attendee counts:
- `{expense:tag:ntag-3}`**Internal Attendees**
- `{expense:tag:ntag-4}`**External Attendees**

## Example: Expense Coding Levels
If your expenses have multiple coding levels, your report might include:
- **GL Code** (Category)
- **Department** (Tag 1)
- **Location** (Tag 2)
- **Number of Internal Attendees** (Tag 3)
- **Number of External Attendees** (Tag 4)

For more details, visit our [Custom Templates guide](https://help.expensify.com/articles/expensify-classic/insights-and-custom-reporting/Custom-Templates).
Loading

0 comments on commit c4edf8b

Please sign in to comment.