Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into fix/45410-back-category
Browse files Browse the repository at this point in the history
  • Loading branch information
dominictb committed Jul 22, 2024
2 parents 5b8a940 + f3a8f73 commit 2c77629
Show file tree
Hide file tree
Showing 306 changed files with 7,169 additions and 6,603 deletions.
13 changes: 11 additions & 2 deletions .github/scripts/createDocsRoutes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import type {ValueOf} from 'type-fest';
type Article = {
href: string;
title: string;
order?: number;
};

type Section = {
Expand Down Expand Up @@ -60,11 +61,12 @@ function toTitleCase(str: string): string {
/**
* @param filename - The name of the file
*/
function getArticleObj(filename: string): Article {
function getArticleObj(filename: string, order?: number): Article {
const href = filename.replace('.md', '');
return {
href,
title: toTitleCase(href.replaceAll('-', ' ')),
order,
};
}

Expand All @@ -90,6 +92,12 @@ function pushOrCreateEntry<TKey extends HubEntriesKey>(hubs: Hub[], hub: string,
}
}

function getOrderFromArticleFrontMatter(path: string): number | undefined {
const frontmatter = fs.readFileSync(path, 'utf8').split('---')[1];
const frontmatterObject = yaml.load(frontmatter) as Record<string, unknown>;
return frontmatterObject.order as number | undefined;
}

/**
* Add articles and sections to hubs
* @param hubs - The hubs inside docs/articles/ for a platform
Expand All @@ -113,7 +121,8 @@ function createHubsWithArticles(hubs: string[], platformName: ValueOf<typeof pla

// Each subfolder will be a section containing articles
fs.readdirSync(`${docsDir}/articles/${platformName}/${hub}/${section}`).forEach((subArticle) => {
articles.push(getArticleObj(subArticle));
const order = getOrderFromArticleFrontMatter(`${docsDir}/articles/${platformName}/${hub}/${section}/${subArticle}`);
articles.push(getArticleObj(subArticle, order));
});

pushOrCreateEntry(routeHubs, hub, 'sections', {
Expand Down
4 changes: 3 additions & 1 deletion .github/workflows/preDeploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ jobs:

- name: Exit failed workflow
if: ${{ needs.typecheck.result == 'failure' || needs.lint.result == 'failure' || needs.test.result == 'failure' }}
run: exit 1
run: |
echo "Checks failed, exiting ~ typecheck: ${{ needs.typecheck.result }}, lint: ${{ needs.lint.result }}, test: ${{ needs.test.result }}"
exit 1
chooseDeployActions:
runs-on: ubuntu-latest
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/reassurePerformanceTests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,12 @@ jobs:
BASELINE_BRANCH=${BASELINE_BRANCH:="main"}
git fetch origin "$BASELINE_BRANCH" --no-tags --depth=1
git switch "$BASELINE_BRANCH"
npm install --force
npm install --force || (rm -rf node_modules && npm install --force)
NODE_OPTIONS=--experimental-vm-modules npx reassure --baseline
git switch --force --detach -
git merge --no-commit --allow-unrelated-histories "$BASELINE_BRANCH" -X ours
git checkout --ours .
npm install --force
npm install --force || (rm -rf node_modules && npm install --force)
NODE_OPTIONS=--experimental-vm-modules npx reassure --branch
- name: Validate output.json
Expand Down
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,8 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
multiDexEnabled rootProject.ext.multiDexEnabled
versionCode 1009000802
versionName "9.0.8-2"
versionCode 1009001002
versionName "9.0.10-2"
// 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
4 changes: 2 additions & 2 deletions docs/_data/_routes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,8 @@ platforms:
icon: /assets/images/handshake.svg
description: Discover the benefits of becoming an Expensify Partner.

- href: integrations
title: Integrations
- href: connections
title: Connections
icon: /assets/images/simple-illustration__monitor-remotesync.svg
description: Integrate with accounting or HR software to streamline expense approvals.

Expand Down
14 changes: 9 additions & 5 deletions docs/_includes/hub.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,17 @@ <h1 class="title">
{{ hub.description }}
</p>

{% assign sortedSectionsAndArticles = hub.sections | concat: hub.articles | sort: 'title' %}

<section>
<div class="cards-group">
{% for section in hub.sections %}
{% include section-card.html platform=activePlatform hub=hub.href section=section.href title=section.title %}
{% endfor %}
{% for article in hub.articles %}
{% include article-card.html hub=hub.href href=article.href title=article.title platform=activePlatform %}
{% for item in sortedSectionsAndArticles %}
<!-- The item is a section if it has articles inside it -->
{% if item.articles %}
{% include section-card.html platform=activePlatform hub=hub.href section=item.href title=item.title %}
{% else %}
{% include article-card.html hub=hub.href href=item.href title=item.title platform=activePlatform %}
{% endif %}
{% endfor %}
</div>
</section>
50 changes: 25 additions & 25 deletions docs/_includes/lhn-template.html
Original file line number Diff line number Diff line change
Expand Up @@ -33,31 +33,31 @@
<span>{{ hub.title }}</span>
</div>
<ul class="nested-treeview">
{% for section in hub.sections %}
<li>
{% if section.href == activeSection %}
<div class="icon-with-link selected">
<a href="/{{ activePlatform }}/hubs/{{ hub.href }}"><img src="/assets/images/down.svg" class="base-icon"></img></a>
<span>{{ section.title }}</span>
</div>
<ul>
{% for article in section.articles %}
{% assign article_href = section.href | append: '/' | append: article.href %}
{% include lhn-article-link.html platform=activePlatform hub=hub.href href=article_href title=article.title %}
{% endfor %}
</ul>
{% else %}
<a href="{{ section.href }}" class="icon-with-link link">
<img src="/assets/images/arrow-right.svg" class="base-icon"></img>
{{ section.title }}
</a>
{% endif %}

</li>
{% endfor %}

{% for article in hub.articles %}
{% include lhn-article-link.html platform=activePlatform hub=hub.href href=article.href title=article.title %}
{% assign sortedSectionsAndArticles = hub.sections | concat: hub.articles | sort: 'title' %}
{% for item in sortedSectionsAndArticles %}
{% if item.articles %}
<li>
{% if item.href == activeSection %}
<div class="icon-with-link selected">
<a href="/{{ activePlatform }}/hubs/{{ hub.href }}"><img src="/assets/images/down.svg" class="base-icon"></img></a>
<span>{{ item.title }}</span>
</div>
<ul>
{% for article in item.articles %}
{% assign article_href = item.href | append: '/' | append: article.href %}
{% include lhn-article-link.html platform=activePlatform hub=hub.href href=article_href title=article.title %}
{% endfor %}
</ul>
{% else %}
<a href="{{ item.href }}" class="icon-with-link link">
<img src="/assets/images/arrow-right.svg" class="base-icon"></img>
{{ item.title }}
</a>
{% endif %}
</li>
{% else %}
{% include lhn-article-link.html platform=activePlatform hub=hub.href href=item.href title=item.title %}
{% endif %}
{% endfor %}
</ul>
{% else %}
Expand Down
3 changes: 2 additions & 1 deletion docs/_includes/section.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ <h1 class="title">

<section>
<div class="cards-group">
{% for article in section.articles %}
{% assign sortedArticles = section.articles | sort: 'order', 'last' | default: 999 %}
{% for article in sortedArticles %}
{% assign article_href = section.href | append: '/' | append: article.href %}
{% include article-card.html hub=hub.href href=article_href title=article.title platform=activePlatform %}
{% endfor %}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@ Whether you're encountering issues related to company cards, require assistance
## How to add company cards to Expensify
You can add company credit cards under the Domain settings in your Expensify account by navigating to *Settings* > *Domain* > _Domain Name_ > *Company Cards* and clicking *Import Card/Bank* and following the prompts.

## To Locate Missing Card Transactions in Expensify
1. **Wait for Posting**: Bank transactions may take up to 24 hours to import into Expensify after they have "posted" at your bank. Ensure sufficient time has passed for transactions to appear.
2. **Update Company Cards**: Go to Settings > Domains > Company Cards. Click on the card in question and click "Update" to refresh the card feed.
3. **Reconcile Cards**: Navigate to the Reconciliation section under Settings > Domains > Company Cards. Refer to the detailed guide on how to use the [Reconciliation Dashboard](https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/Reconciliation#identifying-outstanding-unapproved-expenses-using-the-reconciliation-dashboard).
4. **Review Transactions**: Use the Reconciliation Dashboard to view all transactions within a specific timeframe. Transactions will display on the Expenses page based on their "Posted Date". If needed, uncheck the "use posted date" checkbox near the filters to view transactions based on their "Transaction Date" instead.
5. **Address Gaps**: If there is a significant gap in transactions or if transactions are still missing, contact Expensify's Concierge or your Account Manager. They can initiate a historical data update on your card feed to ensure all transactions are properly imported.

Following these steps should help you identify and resolve any issues with missing card transactions in Expensify.

## Known issues importing transactions
The first step should always be to "Update" your card, either from Settings > Your Account > Credit Card Import or Settings > Domain > [Domain Name] > Company Cards for centrally managed cards. If a "Fix" or "Fix card" option appears, follow the steps to fix the connection. If this fails to import your missing transactions, there is a known issue whereby some transactions will not import for certain API-based company card connections. So far this has been reported on American Express, Chase and Wells Fargo. This can be temporarily resolved by creating the expenses manually instead:

Expand Down Expand Up @@ -63,6 +72,24 @@ If you've answered "yes" to any of these questions, a Domain Admins need to upda
Make sure you're importing your card in the correct spot in Expensify and selecting the right bank connection. For company cards, use the master administrative credentials to import your set of cards at *Settings* > *Domains* > _Domain Name_ > *Company Cards* > *Import Card*.
Please note there are some things that cannot be bypassed within Expensify, including two-factor authentication being enabled within your bank account. This will prevent the connection from remaining stable and will need to be turned off on the bank side.

## Why Can’t I See the Transactions Before a Certain Date?
When importing a card into Expensify, the platform typically retrieves 30-90 days of historical transactions, depending on the card or account type. For commercial feeds, transactions cannot be imported before the bank starts sending data. If needed, banks can send backdated files, and Expensify can run a historical update upon request.

Additionally, Expensify does not import transactions dated before the "start date" you specify when assigning the card. Unless transitioning from an old card to a new one to avoid duplicates, it's advisable to set the start date to "earliest possible" or leave it blank.

For historical expenses that cannot be imported automatically, consider using Expensify's [company card](https://help.expensify.com/articles/expensify-classic/connect-credit-cards/company-cards/CSV-Import) or [personal card](https://help.expensify.com/articles/expensify-classic/connect-credit-cards/Personal-Credit-Cards#importing-expenses-via-a-spreadsheet) spreadsheet import method. This allows you to manually input missing transactions into the system.

## Why Am I / Why Is My Employee Seeing Duplicates?
If an employee is seeing duplicate expenses, they may have accidentally imported the card as a personal credit card as well as having the Domain Admin assign them a company card.

To troubleshoot:
- Have the employee navigate to their Settings > Your Account > Credit Card Import and confirm that their card is only listed once.
- If the card is listed twice, delete the entry without the "padlock" icon.

**Important:** Deleting a duplicate card will delete all unapproved expenses from that transaction feed. Transactions associated with the remaining card will not be affected. If receipts were attached to those transactions, they will still be on the Expenses page, and the employee can click to SmartScan them again.

Duplicate expenses might also occur if you recently unassigned and reassigned a company card with an overlapping start date. If this is the case and expenses on the “new” copy have not been submitted, you can unassign the card again and reassign it with a more appropriate start date. This action will delete all unsubmitted expenses from the new card feed.

## What are the most reliable bank connections in Expensify?*
All bank connections listed below are extremely reliable, but we recommend transacting with the Expensify Visa® Commercial Card. It also offers daily and monthly settlement, unapproved expense limits, realtime compliance for secure and efficient spending, and cash back on all US purchases. [Click here to learn more about the Expensify Card](https://use.expensify.com/company-credit-card).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ Now, every time you use Uber for Business – be it for rides or meals – the r

![Uber integration set up steps: Connecting your account](https://help.expensify.com/assets/images/Uber1.png){:width="100%"}
![Uber integration set up steps: Selecting Expensify](https://help.expensify.com/assets/images/Uber2.png){:width="100%"}

To disconnect Uber and Expensify, simply follow the above path and select Disconnect on the Expensify option.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
title: Accelo Troubleshooting
description: Accelo Troubleshooting
order: 3
---

# Coming soon
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
title: Configure Accelo
description: Configure Accelo
order: 2
---

# Coming soon
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Accelo
description: Help doc for Accelo integration
order: 1
---
<!-- The lines above are required by Jekyll to process the .md file -->

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
title: Certinia Troubleshooting
description: Certinia Troubleshooting
---

# Coming soon
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
title: Configure Certinia
description: Configure Certinia
order: 2
---

# Coming soon
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Certinia
description: Guide to connecting Expensify and Certinia FFA and PSA/SRP (formerly known as FinancialForce)
order: 1
---
# Overview
[Cetinia](https://use.expensify.com/financialforce) (formerly known as FinancialForce) is a cloud-based software solution that provides a range of financial management and accounting applications built on the Salesforce platform. There are two versions: PSA/SRP and FFA and we support both.
Expand Down
Loading

0 comments on commit 2c77629

Please sign in to comment.