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/28593-viewing-category-split-bill
  • Loading branch information
rezkiy37 committed Oct 3, 2023
2 parents 259d4bc + 53ee975 commit c034aeb
Show file tree
Hide file tree
Showing 77 changed files with 1,396 additions and 745 deletions.
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 1001037511
versionName "1.3.75-11"
versionCode 1001037603
versionName "1.3.76-3"
}

flavorDimensions "default"
Expand Down
2 changes: 1 addition & 1 deletion docs/_config.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
title: Expensify Help
tagline: Expensify Help - all your Expensify questions answered in one place.
description: Got a question about receipts, expenses, corporate cards, or anything else in the spend management universe? Get answers at help.expensify.com.
url: help.expensify.com
url: https://help.expensify.com
author: Expensify
logo: /assets/images/expensify-help.svg
open_url: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,29 @@
title: Default Export Templates
description: Default Export Templates
---
## Resource Coming Soon!
# Overview
Use default export templates for exporting report data to a CSV format, for data analysis, or uploading to an accounting software.
Below is a breakdown of the available default templates.
# How to use default export templates
- **All Data - Expense Level Export** - This export prints a line for each expense with all of the data associated with the expenses. This is useful if you want to see all of the data stored in Expensify for each expense.
- **All Data - Report Level Export** - This export prints a line per report, giving a summary of the report data.
- **Basic Export** - A simpler expense level export without as much detail. This exports the data visible on the PDF of the report. Basics such as date, amount, merchant, category, tag, reimbursable state, description, receipt URL, and original expense currency and amount.
- **Canadian Multiple Tax Export** - Exports a line per expense with all available info on the taxes applied to the expenses on your report(s). This is useful if you need to see the tax spend.
- **Category Export** - Exports category names with the total amount attributed to each category on the report. While you can also access this information on the Insights page, it can be convenient to export to a CSV to run further analysis in your favorite spreadsheet program.
- **Per Diem Export** - This exports basic expense details only for the per diem expenses on the report. Useful for reviewing employee Per Diem spend.
- **Tag Export** - Exports tag names into columns with the total amount attributed to each tag on the report.

# How to export using a default template
1. Navigate to your Reports page
2. Select the reports you want to export (you can use the filters to help you find the reports you’re after)
3. Click the **Export to** in the top right corner
4. Select the export template you’d like to use

# FAQ
## Why are my numbers exporting in a weird format?
Do your numbers look something like this: 1.7976931348623157e+308? This means that your spreadsheet program is formatting long numbers in an exponential or scientific format. If that happens, you can correct it by changing the data to Plain Text or a Number in your spreadsheet program.
## Why are my leading zeros missing?
Is the export showing “1” instead of “01”? This means that your spreadsheet program is cutting off the leading zero. This is a common issue with viewing exported data in Excel. Unfortunately, we don’t have a good solution for this. We recommend checking your spreadsheet program’s help documents for suggestions for formatting.
## I want a report that is not in the default list, how can I build that?
For a guide on building your own custom template check out Exports > Custom Exports in the Help pages!

Original file line number Diff line number Diff line change
@@ -1,5 +1,55 @@
---
title: Coming Soon
description: Coming Soon
title: Gusto Integration
description: Automatically sync employees between Gusto and Expensify
---
## Resource Coming Soon!

# Overview

Expensify's direct integration with Gusto will automatically:

- **Create new Expensify accounts** for full-time, active employees when they're hired
- **Update the approval workflow in Expensify** based on any changes in Gusto
- **Deprovision an employee's Expensify account** upon Gusto termination date

# How to connect the Gusto integration
## Before connecting Expensify with Gusto, please review the prerequisites:

- You must be an admin in both Gusto and in Expensify to establish the integration
- You must have a paid group workspace in Expensify (i.e. a Control or Collect workspace)
- Every employee record in Gusto must have an email address, since that’s how each employee will sign into Expensify. We recommend that each employee's Gusto record use their work email address.
- Gusto will add all employees to one Expensify workspace, so if you have more than one workspace, you'll need to choose one to connect to Gusto

## To connect your Expensify workspace to Gusto:

1. Navigate to **Settings > Workspaces > _[Workspace Name]_ > Connections**
2. Scroll down to HR Integrations, click the **Connect with Gusto** radio button, then click the **Connect with Gusto** button
3. Login to your Gusto account using your Gusto admin credentials and authorize Expensify to access your Gusto account

## To configure the connection:

1. Select the Approval Workflow that works best for your team
a. **Basic Approval** - Each employee will submit expense reports to one final approver. By default, the final approver is the workspace's Billing Owner in Expensify.
b. **Manager Approval** - Expense reports will first be submitted to each employee's direct manager as listed in Gusto, and then forwarded to one final approver (the Expensify workspace's Billing Owner by default). This option is only available on the Control workspace plan.
c. **Configure Manually** - Use the Members table to manually configure how employees submit reports. In this case, you're choosing to not import employee managers, and you will need to manually set and update the approval workflow for each employee. This option is only available on the Control workspace plan.
2. Click **Save** in the bottom right corner to sync employees into Expensify
3. If the connection is successful, you'll see a summary of how many employees were synced. If any employees were skipped, we'll tell you why.

# FAQ
## Can I import different sets of employees into different Expensify workspaces?

No - Gusto will add all employees to one Expensify workspace, so if you have more than one workspace, you'll need to choose when connecting.

## Can I change the Approval Workflow mode after connecting?

Yes! You can change the Approval Workflow mode in two ways:

1. Go to **Settings > Workspaces > _[Workspace Name]_ > Members**, then scroll down to Approval Mode below the list of workspace members
2. Go to **Settings > Workspaces > _[Workspace Name]_ > Connections**, click Configure under Gusto, then select the desired Approval Mode and **Save**


## Why do my employees have duplicate Expensify accounts after I set up the Gusto integration?

If your employees are set up in Expensify with their company emails, but with their personal emails in Gusto, then they will end up with duplicate Expensify accounts after you connect the two systems. The Gusto integration imports users from Gusto using the emails entered in Gusto - if it's a different email from an existing account in Expensify, then a new, separate account will be created.

To resolve this, you can ask each affected employee to merge their existing Expensify account with the new Expensify account by navigating to **Settings > Account > Account Details** and scrolling down to **Merge Accounts**.

Original file line number Diff line number Diff line change
@@ -1,5 +1,104 @@
---
title: Coming Soon
description: Coming Soon
title: Workday Integration
description: Automatically sync employees between Workday and Expensify
---
## Resource Coming Soon!

# Overview
By leveraging Expensify's [Employee Updater API](https://integrations.expensify.com/Integration-Server/doc/employeeUpdater/), you can set up a fully customizable integration between Workday and Expensify. This integration can:

- **Provision new employees in Expensify:** Employees are automatically invited to the correct Expensify workspace on their start date based on data in Workday.
- **Update employees and approval workflows:** Any changes to employee email and manager are automatically updated in Expensify.
- **Deprovision employees:** Employees can optionally be removed from their primary Expensify workspace on their termination date.
Please note that while your Account Manager can help advise on setting up the Workday integration, the Expensify API is a self-serve tool.

# How to set up an Advanced Custom Report in Workday
The first step to integrating Workday with Expensify is to create an advanced custom report in Workday. This report can:
- Map Workday column data to an Expensify Workspace for import.
- Import employee names, email addresses and manager emails into the Expensify Workspace.
- Set the employee’s **Submits To** column in the Expensify Members table.
- Set the employee's Expensify **Custom Field 1 & 2**, typically used for Employee ID, Cost Center and/or Legal Entity.
- Add employees to different Expensify Domain Groups.
- Auto-assign Expensify Cards.

In order to complete the steps below, you'll need a Workday System Administrator to create an **Integration System User** and **Integration System Security Group**.

## Create an Integration System User
1. Search "create user" and click **Create Integration System User**.
2. Add a password, leave **Require New Password at Next Sign In** unchecked, set **Session Timeout Minutes** to 0, and check **Do Not Allow UI Sessions**.
3. Click **OK**.

## Create a Security Group
1. Search "create security group", then click **Create Security Group**.
2. Create a **Constrained** security group and specify the **Organizations** you'd like to sync data from.
3. Add the **Integration System User** you created to your **Security Group**.
4. Search and select "security group membership and access".
5. Search for the security group you just created.
6. Click the ellipsis, then **Security Group > Maintain Domain Permissions for Security Group**.
7. Under **Integration Permissions**, add "External Account Provisioning" to **Domain Security Workspaces permitting Put access** and "Worker Data: Workers" to **Domain Security Workspaces permitting Get access**.
8. Click **OK** and **Done**.
9. Search **Activate Pending Security Workspace Changes** and complete the task for activating the security workspace change, adding a comment if required and checking the **Confirmed** check-box.

## Create the Advanced Custom Report
Before completing the steps below, you will need Workday Report Writer access to create an Advanced Custom Report in Workday and enable it as a RAAS (Report as a Service).

1. Search “Create Custom Report” and click **Create Custom Report**.
2. Enter the report details:
- Give the report a **Name**.
- Set the **Report Type** to **Advanced**.
- Check **Enable As Web Service**.
- Uncheck **Optimized for Performance**.
- For **Data Source**, search and select **All Active and Terminated Employees**.
- Click **OK**.
3. Select the **Column Data** you’d like to sync with Expensify. Typical fields synced with Expensify from Workday are as follows (Required fields are marked with \*):
- First Name
- Last Name
- Primary Work Email\*
- Employee ID\*
- Expensify Workspace ID\*
- Worker’s Manager [Primary Work Email]\*
- Domain Group ID (If you want to specify a Domain Group in Expensify, please work with your Account Manager to get your Domain Group IDs)
- Cost Center
- Entity ID (sometimes called Legal Entity)
- Active/Inactive
- Termination Date
- 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
- firstName
- lastName
- employeeEmail
- managerEmail
- workspaceID
- domainGroupID
- approvesTo
Switch to the **Share** tab, and share the report with your **Integration System User** and **Security Group**.

## Enable your report as a Report as a Service (RAAS)

1. In your Workday tenant, search “view custom report” and select it. On the **View Custom Report** screen, click **My Reports**.
2. Select the report you have created and click **OK**.
3. Click **Actions > Web Service > View URLs** and click **OK**.
4. Scroll to the **JSON** section, right-click **JSON**, then select **Copy URL**.

## Activate the Workday Integration

If you would like to enable and run the API job that performs a recurring sync, you can do so by following Expensify’s API reference documentation [here](https://integrations.expensify.com/Integration-Server/doc/employeeUpdater/#api-principles).

If you would like Expensify to perform the sync on your behalf, please follow the steps below.

1. To generate your **Expensify API Credentials**, log into Expensify with an account that has both Workspace Admin and Domain Admin access, then head to https://www.expensify.com/tools/integrations/ where you will find your partnerUserID and partnerUserSecret.
2. Go to **Settings > Workspaces > Group > _[Workspace Name]_ > Connections > HR Integrations** and click **Connect to Workday**.
3. In the form, supply the following details:
- partnerUserID
- partnerUserSecret
- Workday ISU Username (e.g. ISU_Expensify)
- Workday password
- Workday REST Web Services URL
- Preferred go live date (e.g. YYYY/MM/DD, or leave blank)
- Expensify Card Auto-Assignment? (Y/N)
- Note: If using Expensify Cards, card auto-assignment occurs when a Smart Limit for a Group is enabled.
- Deprovision Users? (Y/N)

After you submit the form, the request is sent to your Expensify Account Manager. Your Account Manager will create a recurring sync that will retrieve the data columns from your Workday Web Services URL and apply the rule mappings you have specified above.

If we have any questions, we will reach out to you via direct message.
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.
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.
4 changes: 2 additions & 2 deletions ios/NewExpensify/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.3.75</string>
<string>1.3.76</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
Expand All @@ -40,7 +40,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>1.3.75.11</string>
<string>1.3.76.3</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
<key>LSApplicationQueriesSchemes</key>
Expand Down
4 changes: 2 additions & 2 deletions ios/NewExpensifyTests/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.3.75</string>
<string>1.3.76</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.3.75.11</string>
<string>1.3.76.3</string>
</dict>
</plist>
4 changes: 2 additions & 2 deletions package-lock.json

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

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "new.expensify",
"version": "1.3.75-11",
"version": "1.3.76-3",
"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
5 changes: 3 additions & 2 deletions src/components/AddressSearch/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -208,14 +208,15 @@ function AddressSearch(props) {

// Autocomplete returns any additional valid address fragments (e.g. Apt #) as subpremise.
street2: subpremise,

// Make sure country is updated first, since city and state will be reset if the country changes
country: '',
// When locality is not returned, many countries return the city as postalTown (e.g. 5 New Street
// Square, London), otherwise as sublocality (e.g. 384 Court Street Brooklyn). If postalTown is
// returned, the sublocality will be a city subdivision so shouldn't take precedence (e.g.
// Salagatan, Upssala, Sweden).
city: locality || postalTown || sublocality || cityAutocompleteFallback,
zipCode,
country: '',

state: state || stateAutoCompleteFallback,
lat: lodashGet(details, 'geometry.location.lat', 0),
lng: lodashGet(details, 'geometry.location.lng', 0),
Expand Down
2 changes: 1 addition & 1 deletion src/components/Checkbox.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ function Checkbox(props) {
onPress={firePressHandlerOnClick}
onMouseDown={props.onMouseDown}
ref={props.forwardedRef}
style={[props.style, styles.checkboxPressable]}
style={[props.style, StyleUtils.getCheckboxPressableStyle(props.containerBorderRadius + 2)]} // to align outline on focus, border-radius of pressable should be 2px more than Checkbox
onKeyDown={handleSpaceKey}
accessibilityRole={CONST.ACCESSIBILITY_ROLE.CHECKBOX}
accessibilityState={{checked: props.isChecked}}
Expand Down
Loading

0 comments on commit c034aeb

Please sign in to comment.