Skip to content

Commit

Permalink
Merge branch 'main' into georgia-eReceiptColor-fix
Browse files Browse the repository at this point in the history
  • Loading branch information
grgia committed Nov 6, 2023
2 parents bfdb132 + 87cff84 commit fce67d2
Show file tree
Hide file tree
Showing 110 changed files with 1,156 additions and 590 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/cherryPick.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
token: ${{ secrets.OS_BOTIFY_TOKEN }}

- name: Set up git for OSBotify
id: setupGitForOSBotify
uses: Expensify/App/.github/actions/composite/setupGitForOSBotifyApp@8c19d6da4a3d7ce3b15c9cd89a802187d208ecab
with:
GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
Expand Down Expand Up @@ -119,7 +120,7 @@ jobs:
**Important:** There may be conflicts that GitHub is not able to detect, so please _carefully_ review this pull request before approving."
gh pr edit --add-assignee "${{ github.actor }},${{ steps.getCPMergeCommit.outputs.MERGE_ACTOR }}"
env:
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
GITHUB_TOKEN: ${{ steps.setupGitForOSBotify.outputs.OS_BOTIFY_API_TOKEN }}

- name: "Announces a CP failure in the #announce Slack room"
uses: 8398a7/action-slack@v3
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/finishReleaseCycle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@ jobs:
echo "IS_DEPLOYER=false" >> "$GITHUB_OUTPUT"
fi
env:
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
GITHUB_TOKEN: ${{ steps.setupGitForOSBotify.outputs.OS_BOTIFY_API_TOKEN }}

- name: Reopen and comment on issue (not a team member)
if: ${{ !fromJSON(steps.isDeployer.outputs.IS_DEPLOYER) }}
uses: Expensify/App/.github/actions/javascript/reopenIssueWithComment@main
with:
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
GITHUB_TOKEN: ${{ steps.setupGitForOSBotify.outputs.OS_BOTIFY_API_TOKEN }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
COMMENT: |
Sorry, only members of @Expensify/Mobile-Deployers can close deploy checklists.
Expand All @@ -51,14 +51,14 @@ jobs:
id: checkDeployBlockers
uses: Expensify/App/.github/actions/javascript/checkDeployBlockers@main
with:
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
GITHUB_TOKEN: ${{ steps.setupGitForOSBotify.outputs.OS_BOTIFY_API_TOKEN }}
ISSUE_NUMBER: ${{ github.event.issue.number }}

- name: Reopen and comment on issue (has blockers)
if: ${{ fromJSON(steps.isDeployer.outputs.IS_DEPLOYER) && fromJSON(steps.checkDeployBlockers.outputs.HAS_DEPLOY_BLOCKERS || 'false') }}
uses: Expensify/App/.github/actions/javascript/reopenIssueWithComment@main
with:
GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
GITHUB_TOKEN: ${{ steps.setupGitForOSBotify.outputs.OS_BOTIFY_API_TOKEN }}
ISSUE_NUMBER: ${{ github.event.issue.number }}
COMMENT: |
This issue either has unchecked items or has not yet been marked with the `:shipit:` emoji of approval.
Expand Down
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
versionCode 1001039501
versionName "1.3.95-1"
versionCode 1001039505
versionName "1.3.95-5"
}

flavorDimensions "default"
Expand Down
5 changes: 5 additions & 0 deletions assets/css/fonts.css
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@
src: url('/fonts/ExpensifyNewKansas-MediumItalic.woff2') format('woff2'), url('/fonts/ExpensifyNewKansas-MediumItalic.woff') format('woff');
}

@font-face {
font-family: Windows Segoe UI Emoji;
src: url('/fonts/seguiemj.ttf');
}

* {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
Expand Down
Binary file added assets/fonts/web/seguiemj.ttf
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,5 +1,101 @@
---
title: CSV Import
description: CSV Import
title: Import and assign company cards from CSV file
description: uploading a CSV file containing your company card transactions
---
## Resource Coming Soon!

# Overview
Expensify offers a convenient CSV import feature for managing company card expenses when direct connections or commercial card feeds aren't available. This feature allows you to upload a CSV file containing your company card transactions and assign them to cardholders within your Expensify domain.
This feature is available on Group Workspaces and requires Domain Admin access.

# How to import company cards via CSV
1. Download a CSV of transactions from your bank by logging into their website and finding the relevant statement.
2. Format the CSV for upload using [this template](https://s3-us-west-1.amazonaws.com/concierge-responses-expensify-com/uploads%2F1594908368712-Best+Example+CSV+for+Domains.csv) as a guide.
- At a minimum, your file must include the following columns:
- **Card Number** - each number in this column should display at least the last four digits, and you can obscure up to 12 characters
(e.g., 543212XXXXXX12334).
- **Posted Date** - use the YYYY-MM-DD format in this column (and any other date column in your spreadsheet).
- **Merchant** - the name of the individual or business that provided goods or services for the transaction. This is a free-text field.
- **Posted Amount** - use the number format in this column, and indicate negative amounts with parentheses (e.g., (335.98) for -$335.98).
- **Posted Currency** - use currency codes (e.g., USD, GBP, EUR) to indicate the currency of the posted transactions.
- You can also add mapping for Categories and Tags, but those parameters are optional.
3. Log into Expensify on your web browser.
4. Head to Settings > Domains > Domain Name > Company Cards
5. Click Manage/Import CSV
6. Create a Company Card Layout Name for your spreadsheet
7. Click Upload CSV
8. Review the mapping of your spreadsheet to ensure that the Card Number, Date, Merchant, Amount, and Currency match your data.
9. Double-check the Output Preview for any errors and, if needed, refer to the common error solutions listed in the FAQ below.
10. Once the mapping is correct, click Submit Spreadsheet to complete the import.
11. After submitting the spreadsheet, click I'll wait a minute. Then, wait about 1-2 minutes for the import to process. The domain page will refresh once the upload is complete.

# How to assign new cards
If you're assigning cards via CSV upload for the first time:
1. Head to **Settings > Domains > Domain Name > Company Cards**
2. Find the new CSV feed in the drop-down list underneath **Imported Cards**
3. Click **Assign New Cards**
4. Under **Assign a Card**, enter the relevant info
5. Click **Assign**
From there, transactions will be imported to the cardholder's account, where they can add receipts, code the expenses, and submit them for review and approval.

# How to upload new expenses for existing assigned cards
There's no need to create a new upload layout for subsequent CSV uploads. Instead, add new expenses to the existing CSV:
1. Head to **Settings > Domains > Domain Name > Company Cards**
2. Click **Manage/Import CSV**
3. Select the saved layout from the drop-down list
4. Click **Upload CSV**
5. After uploading the more recent CSV, click **Update All Cards** to retrieve the new expenses for the assigned cards.

# Deep dive
If the CSV upload isn't formatted correctly, it will cause issues when you try to import or assign cards. Let's go over some common issues and how to fix them.

## Error: "Attribute value mapping is missing"
If you encounter an error that says "Attribute-value mapping is missing," the spreadsheet likely lacks critical details like Card Number, Date, Merchant, Amount, or Currency. To resolve:
1. Click the **X** at the top of the page to close the mapping window
2. Confirm what's missing from the spreadsheet
3. Add a new column to your spreadsheet and add the missing detail
4. Upload the revised spreadsheet by clicking **Manage Spreadsheet**
5. Enter a **Company Card Layout Name** for the contents of your spreadsheet
6. Click **Upload CSV**

## Error: "We've detected an error while processing your spreadsheet feed"
This error usually occurs when there's an upload issue.
To troubleshoot this:
1. Head to **Settings > Domains > Domain Name > Company Cards** and click **Manage/Import CSV**
2. In the **Upload Company Card transactions for** dropdown list, look for the layout name you previously created.
3. If the layout is listed, wait at least one hour and then sync the cards to see if new transactions are imported.
4. If the layout isn't listed, create a new **Company Card Layout Name** and upload the spreadsheet again.

## Error: "An unexpected error occurred, and we could not retrieve the list of cards"
This error occurs when there's an issue uploading the spreadsheet or the upload fails.
To troubleshoot this:
1. Head to **Settings > Domains > Domain Name > Company Cards** and click **Manage/Import CSV**
2. In the **Upload Company Card transactions for** dropdown list, look for the layout name you previously created.
3. If the layout is listed, wait at least one hour and then sync the cards to see if new transactions are imported.
4. If the layout isn't listed, create a new **Company Card Layout Name** and upload the spreadsheet again.


## I added a new parameter to an existing spreadsheet, but the data isn't showing in Expensify after the upload completes. What's going on?
If you added a new card to an existing spreadsheet and imported it via a saved layout, but it isn't showing up for assignment, this suggests that the modification may have caused an issue.
The next step in troubleshooting this issue is to compare the number of rows on the revised spreadsheet to the Output Preview to ensure the row count matches the revised spreadsheet.
To check this:
1. Head to **Settings > Domains > Domain Name > Company Cards** and click **Manage/Import CSV**
2. Select your saved layout in the dropdown list
3. Click **Upload CSV** and select the revised spreadsheet
4. Compare the Output Preview row count to your revised spreadsheet to ensure they match


If they don't match, you'll need to revise the spreadsheet by following the CSV formatting guidelines in step 2 of "How to import company cards via CSV" above.
Once you do that, save the revised spreadsheet with a new layout name.
Then, try to upload the revised spreadsheet again:

1. Click **Upload CSV**
2. Upload the revised file
3. Check the row count again on the Output Preview to confirm it matches the spreadsheet
4. Click **Submit Spreadsheet**

# FAQ
## Why can't I see my CSV transactions immediately after uploading them?
Don't worry! You'll typically need to wait 1-2 minutes after clicking **I understand, I'll wait!**

## I'm trying to import a credit. Why isn't it uploading?
Negative expenses shouldn't include a minus sign. Instead, they should just be wrapped in parentheses. For example, to indicate "-335.98," you'll want to make sure it's formatted as "(335.98)."
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ Every expense has an Attendees field and will list the expense creator’s name
## How to Add Additional Attendees to an Expense
* Go to the attendees field
* Search for the names of the attendees
* The default list will be of internal attendees belonging to your workspace and domain.
* The default list will be of internal attendees belonging to your workspace and domain
* External attendees are not part of your workspace or domain, so you will need to enter their name or email
* Select the attendees you would like to add
* Save the expense
* Once added, the list of attendees for each expense will be visible on the expense line.
* An amount per employee expense will also be displayed on the report for easy viewing
* Once added, the list of attendees for each expense will be visible on the expense line
* An amount per employee expense will also be displayed on the report for easy viewing

![image of an expense with attendee tracking]({{site.url}}/assets/images/attendee-tracking.png){:width="100%"}

# FAQ

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ Before completing the steps below, you will need Workday Report Writer access to
- Note: _if there is field data you want to import that is not listed above, or you have any special requests, let your Expensify Account Manager know and we will work with you to accommodate the request._
4. Rename the columns so they match Expensify's API key names (The full list of names are found here):
- employeeID
- customField1
- customField2
- firstName
- lastName
- employeeEmail
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: Coming Soon
title: Add Members to your Workspace
description: Coming Soon
---
## Resource Coming Soon!
Binary file added docs/assets/images/attendee-tracking.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion ios/NewExpensify/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>1.3.95.1</string>
<string>1.3.95.5</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationQueriesSchemes</key>
Expand Down
2 changes: 1 addition & 1 deletion ios/NewExpensifyTests/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.3.95.1</string>
<string>1.3.95.5</string>
</dict>
</plist>
22 changes: 11 additions & 11 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
"version": "1.3.95-1",
"version": "1.3.95-5",
"author": "Expensify, Inc.",
"homepage": "https://new.expensify.com",
"description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
Expand Down Expand Up @@ -144,7 +144,7 @@
"react-native-linear-gradient": "^2.8.1",
"react-native-localize": "^2.2.6",
"react-native-modal": "^13.0.0",
"react-native-onyx": "1.0.100",
"react-native-onyx": "1.0.111",
"react-native-pager-view": "^6.2.0",
"react-native-pdf": "^6.7.1",
"react-native-performance": "^5.1.0",
Expand Down
1 change: 1 addition & 0 deletions src/CONST.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1312,6 +1312,7 @@ const CONST = {

TAX_ID: /^\d{9}$/,
NON_NUMERIC: /\D/g,
ANY_SPACE: /\s/g,

// Extract attachment's source from the data's html string
ATTACHMENT_DATA: /(data-expensify-source|data-name)="([^"]+)"/g,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,5 +82,6 @@ function CarouselButtons({page, attachments, shouldShowArrows, onBack, onForward

CarouselButtons.propTypes = propTypes;
CarouselButtons.defaultProps = defaultProps;
CarouselButtons.displayName = 'CarouselButtons';

export default CarouselButtons;
Original file line number Diff line number Diff line change
Expand Up @@ -116,5 +116,6 @@ function CarouselItem({item, isFocused, onPress}) {

CarouselItem.propTypes = propTypes;
CarouselItem.defaultProps = defaultProps;
CarouselItem.displayName = 'CarouselItem';

export default CarouselItem;
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,9 @@ function AttachmentCarouselPage({source, isAuthTokenRequired, isActive: initialI
</>
);
}

AttachmentCarouselPage.propTypes = pagePropTypes;
AttachmentCarouselPage.defaultProps = defaultProps;
AttachmentCarouselPage.displayName = 'AttachmentCarouselPage';

export default AttachmentCarouselPage;
Original file line number Diff line number Diff line change
Expand Up @@ -574,5 +574,6 @@ function ImageTransformer({imageWidth, imageHeight, imageScaleX, imageScaleY, sc
}
ImageTransformer.propTypes = imageTransformerPropTypes;
ImageTransformer.defaultProps = imageTransformerDefaultProps;
ImageTransformer.displayName = 'ImageTransformer';

export default ImageTransformer;
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/* eslint-disable es/no-optional-chaining */
import PropTypes from 'prop-types';
import React from 'react';
import {StyleSheet} from 'react-native';
Expand All @@ -19,6 +18,8 @@ function ImageWrapper({children}) {
</Animated.View>
);
}

ImageWrapper.propTypes = imageWrapperPropTypes;
ImageWrapper.displayName = 'ImageWrapper';

export default ImageWrapper;
3 changes: 2 additions & 1 deletion src/components/Attachments/AttachmentCarousel/Pager/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/* eslint-disable es/no-optional-chaining */
import PropTypes from 'prop-types';
import React, {useImperativeHandle, useMemo, useRef, useState} from 'react';
import {View} from 'react-native';
Expand Down Expand Up @@ -168,8 +167,10 @@ function AttachmentCarouselPager({
</GestureHandlerRootView>
);
}

AttachmentCarouselPager.propTypes = pagerPropTypes;
AttachmentCarouselPager.defaultProps = pagerDefaultProps;
AttachmentCarouselPager.displayName = 'AttachmentCarouselPager';

const AttachmentCarouselPagerWithRef = React.forwardRef((props, ref) => (
<AttachmentCarouselPager
Expand Down
2 changes: 2 additions & 0 deletions src/components/Attachments/AttachmentCarousel/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,10 @@ function AttachmentCarousel({report, reportActions, source, onNavigate, setDownl
</View>
);
}

AttachmentCarousel.propTypes = propTypes;
AttachmentCarousel.defaultProps = defaultProps;
AttachmentCarousel.displayName = 'AttachmentCarousel';

export default compose(
withOnyx({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ function AttachmentCarousel({report, reportActions, source, onNavigate, onClose,
}
AttachmentCarousel.propTypes = propTypes;
AttachmentCarousel.defaultProps = defaultProps;
AttachmentCarousel.displayName = 'AttachmentCarousel';

export default compose(
withOnyx({
Expand Down
Loading

0 comments on commit fce67d2

Please sign in to comment.