Skip to content

Commit

Permalink
Merge branch 'main' into form-migration/additional-details-step
Browse files Browse the repository at this point in the history
merge main into form-migration/additional-details-step
  • Loading branch information
cdOut committed Nov 14, 2023
2 parents cc1c7af + 2c7062b commit 7f3c34e
Show file tree
Hide file tree
Showing 83 changed files with 1,389 additions and 803 deletions.
5 changes: 5 additions & 0 deletions .github/actions/javascript/authorChecklist/authorChecklist.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ function checkPRForCompletedChecklist(expectedNumberOfChecklistItems: number, ch

async function generateDynamicChecksAndCheckForCompletion() {
// Generate dynamic checks
console.log('Generating dynamic checks...');
const dynamicChecks = await getChecklistCategoriesForPullRequest();
let isPassing = true;
let didChecklistChange = false;
Expand All @@ -91,13 +92,15 @@ async function generateDynamicChecksAndCheckForCompletion() {
const regex = new RegExp(`- \\[([ x])] ${escapeRegExp(check)}`);
const match = regex.exec(checklist);
if (!match) {
console.log('Adding check to the checklist:', check);
// Add it to the PR body
isPassing = false;
checklist += `- [ ] ${check}\r\n`;
didChecklistChange = true;
} else {
const isChecked = match[1] === 'x';
if (!isChecked) {
console.log('Found unchecked checklist item:', check);
isPassing = false;
}
}
Expand All @@ -112,6 +115,7 @@ async function generateDynamicChecksAndCheckForCompletion() {
const match = regex.exec(checklist);
if (match) {
// Remove it from the PR body
console.log('Check has been removed from the checklist:', check);
checklist = checklist.replace(match[0], '');
didChecklistChange = true;
}
Expand All @@ -123,6 +127,7 @@ async function generateDynamicChecksAndCheckForCompletion() {

// Update the PR body
if (didChecklistChange) {
console.log('Checklist changed, updating PR...');
await GithubUtils.octokit.pulls.update({
owner: CONST.GITHUB_OWNER,
repo: CONST.APP_REPO,
Expand Down
5 changes: 5 additions & 0 deletions .github/actions/javascript/authorChecklist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -21574,6 +21574,7 @@ function checkPRForCompletedChecklist(expectedNumberOfChecklistItems, checklist)
}
async function generateDynamicChecksAndCheckForCompletion() {
// Generate dynamic checks
console.log('Generating dynamic checks...');
const dynamicChecks = await getChecklistCategoriesForPullRequest();
let isPassing = true;
let didChecklistChange = false;
Expand All @@ -21585,6 +21586,7 @@ async function generateDynamicChecksAndCheckForCompletion() {
const regex = new RegExp(`- \\[([ x])] ${(0, escapeRegExp_1.default)(check)}`);
const match = regex.exec(checklist);
if (!match) {
console.log('Adding check to the checklist:', check);
// Add it to the PR body
isPassing = false;
checklist += `- [ ] ${check}\r\n`;
Expand All @@ -21593,6 +21595,7 @@ async function generateDynamicChecksAndCheckForCompletion() {
else {
const isChecked = match[1] === 'x';
if (!isChecked) {
console.log('Found unchecked checklist item:', check);
isPassing = false;
}
}
Expand All @@ -21605,6 +21608,7 @@ async function generateDynamicChecksAndCheckForCompletion() {
const match = regex.exec(checklist);
if (match) {
// Remove it from the PR body
console.log('Check has been removed from the checklist:', check);
checklist = checklist.replace(match[0], '');
didChecklistChange = true;
}
Expand All @@ -21614,6 +21618,7 @@ async function generateDynamicChecksAndCheckForCompletion() {
const newBody = contentBeforeChecklist + checklistStartsWith + checklist + checklistEndsWith + contentAfterChecklist;
// Update the PR body
if (didChecklistChange) {
console.log('Checklist changed, updating PR...');
await GithubUtils_1.default.octokit.pulls.update({
owner: CONST_1.default.GITHUB_OWNER,
repo: CONST_1.default.APP_REPO,
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/authorChecklist.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
name: PR Author Checklist

on:
pull_request:
# We use pull_request_target here so that the GitHub token will have read/write access and be able to modify the PR description if needed.
# 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]

jobs:
Expand All @@ -16,4 +18,4 @@ jobs:
- name: authorChecklist.js
uses: ./.github/actions/javascript/authorChecklist
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ github.token }}
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
versionCode 1001039803
versionName "1.3.98-3"
versionCode 1001039805
versionName "1.3.98-5"
}

flavorDimensions "default"
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
title: Personal Credit Cards
description: How to import your personal credit cards into Expensify for tracking and reimbursement!
---
# Overview
Welcome to the world of effortless expense tracking! Connecting your personal credit card for importing transactions is a breeze, and we're here to guide you through it. Let's dive in and get your financial journey started.

## How to connect your personal card to import expenses
Importing your card or bank via Account Settings will:
Automatically sync your bank/card transactions with your Expensify account. These will merge seamlessly with any SmartScanned expenses in your account.
Generate IRS-compliant eReceipts, provided your Policy Admin has enabled this feature.
Discover below the numerous ways to easily bring your personal card expenses into Expensify below.

### *Important terms to know:*
- _Transaction Start Date_: When you first import your card, you can choose a specific transaction start date. Depending on your bank, you can go back up to 90 days. If you need to include transactions from an earlier date, you can upload a spreadsheet of those transactions separately.
- _Deleted Cards_: If you delete an imported card from Expensify, all unsubmitted expenses associated with that card will also be removed from the system. Don't worry, though – any imported card transactions within a processing, approved, closed, or reimbursed report will remain unaffected.

### *Importing expenses directly from your credit card or bank (in the web browser)*
1. Log into your Expensify account.
2. Navigate to *Settings* > *Account* > *Credit Card Import*.
3. Click the *Import Bank/Card* button.
4. Choose your bank from the list provided. If you don't see your bank, use the search box below to find it. If your bank isn't listed, you can use our CSV method to import your expenses instead.
5. Select a transaction start date using the calendar dropdown, then click *Take me there*.
6. Enter the same username and password you use for online banking to connect.
7. We'll display all the accounts linked to your username. Select the account(s) you want to import.
8. Once your card(s) are successfully imported, you can click *Update* next to the importing card(s) to fetch the latest transactions into your account.

## Importing expenses directly from your credit card or bank (in the mobile app)
In your Settings, tap *Import a card* and follow the directions (similar to the instructions above) for your bank to start importing transactions.

### Importing expenses via a spreadsheet
Spreadsheets can be uploaded as long as they are in one of the following formats:
- CSV
- XLS
- OFX
- QFX

To import expenses via a spreadsheet:
1. Download a spreadsheet of your expenses directly from your online banking account.
_Please note: an OFX file type will require no editing but not all banks' OFX files are compatible, so CSV is a good fallback option._
2. If you need to, delete any extra header rows so that you have one header row. At minimum, you should include the merchant, transaction date and amount. It's fine to have extra columns, but make sure you know which ones you’ll need so the data gets imported correctly.
3. Format the date column — if you use Excel, you can do this by navigating to *Format Cells* > *Custom*. You can choose your preferred format (e.g, yyyy-mm-dd or mm-dd-yyyy), but remember to use the same format each month.
4. Once your file is saved and ready, log into Expensify and click *Settings* > *Account* > *Credit Card Import*. Then click *Import Transactions from File* and on the next screen, select *Upload*.
5. Now, let's set up your file details. If this is the first time you're uploading for this card, keep the layout as *Default* and choose a logical *Mapping Name*, such as 'Platinum Visa.' You might use this layout again in the future so be sure to choose something that’s easy to remember.
6. Set the date format to match your CSV and adjust the currency to match your bank account currency.
7. If you've previously imported expenses for the same card, choose the default layout of a previously uploaded spreadsheet.
8. Scroll down and select which columns map to the merchant, date and amount (as a number without a currency symbol) – these are required presets which must be assigned.
9. If applicable, you can also map specific Categories and Tags as long as you don't have an integration connection to your default group policy. If you have an integration connected, you'll want to add the Categories and Tags to the expense after the expense is uploaded.
10. Check the preview of your selection under *Output Preview*. If everything looks good, you can then select *Add Expenses*.
11. For checking accounts, you may need to "Flip Amount Sign" as transactions are often exported as negative amounts.

## Removing or managing settings for imported personal cards
*Changing How Card Appears*: If you'd like to change the name of how your imported card appears, click *Settings* located under the card listed. Here, you can rename the account as well as decide whether these transactions should be reimbursable by default.

*Reimbursable Status of Imported Transactions*:
Expenses can be imported as either reimbursable or non-reimbursable. Select the option that best fits your card.
- *Reimbursable expenses* are expenses that are owed back to you by the person/company you are submitting them to. If you incurred an expense on a personal card you, it is likely reimbursable.
- *Non-reimbursable expenses* are expenses that are not owed back to you. This is likely spend incurred on a company card or any card that someone else pays the balance for that you incur spend on and must track the expenses for.

*Remove a card*: If you need to remove a card, you can select the red trash can icon. Please remember this will remove all unreported and un-submitted transactions from your account that are tied to this card, so be careful!

# FAQ
*Is the bank/credit card import option right for me?*
If you incur expenses using your personal or business card and need to get them accounted for in your company’s accounting, then you might want to import your bank/credit card. Please note, if you have a company-assigned corporate card, check with your company's Expensify admin on how to handle these cards. Often, admins will take care of card assignments, and you won't need to import them yourself.

*Is the personal card spreadsheet import option right for me?*
Spreadsheet import is a great option for manually creating expenses in bulk when you run into any of the below scenarios. Take advantage of this time-saving option if:
- You have already imported your bank/credit card, but you need earlier transactions beyond the default 30-90 days (this varies depending on your bank).
- Your bank is not supported through a direct connection with Expensify, but you still need to get your transactions into the system. The best way to find if your bank is supported is to try importing it. If the bank is not listed, we do not support it at this time.
- You would like a way to do either of the above and would like to have the transactions merge with your SmartScanned receipts.

*I'm not able to see the transactions I have imported when I click "View expenses". Why?*
If you aren't able to see the expenses imported when you click “View expenses”, try using the filters at the top of the Expenses screen to open up search criteria (such as the date) which often reveals "missing" expenses.

*How do I remove an imported spreadsheet?*
If you need to remove an imported spreadsheet, you can select the red trash can icon. Please remember this will remove all unreported and unsubmitted transactions from your account that are tied to this import, so be careful!
Loading

0 comments on commit 7f3c34e

Please sign in to comment.