Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions assets/images/integrationicons/campfire-icon-square.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions assets/images/integrationicons/rillet-icon-square.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 9 additions & 1 deletion src/CONST/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3709,6 +3709,8 @@ const CONST = {
NETSUITE: 'netsuite',
SAGE_INTACCT: 'intacct',
CERTINIA: 'certinia',
RILLET: 'rillet',
CAMPFIRE: 'campfire',
GUSTO: 'gusto',
},
SUPPORTED_ONLY_ON_OLDDOT: {
Expand All @@ -3724,6 +3726,8 @@ const CONST = {
SAGE_INTACCT: 'sage-intacct',
QBD: 'quickbooks-desktop',
CERTINIA: 'certinia',
RILLET: 'rillet',
CAMPFIRE: 'campfire',
GUSTO: 'gusto',
},
NAME_USER_FRIENDLY: {
Expand All @@ -3734,6 +3738,8 @@ const CONST = {
intacct: 'Sage Intacct',
financialForce: 'FinancialForce',
certinia: 'Certinia',
rillet: 'Rillet',
campfire: 'Campfire',
gusto: 'Gusto',
billCom: 'Bill.com',
zenefits: 'Zenefits',
Expand All @@ -3743,7 +3749,7 @@ const CONST = {
other: 'Other',
},
get ACCOUNTING_CONNECTION_NAMES() {
return [this.NAME.QBO, this.NAME.QBD, this.NAME.XERO, this.NAME.NETSUITE, this.NAME.SAGE_INTACCT, this.NAME.CERTINIA] as const;
return [this.NAME.QBO, this.NAME.QBD, this.NAME.XERO, this.NAME.NETSUITE, this.NAME.SAGE_INTACCT, this.NAME.CERTINIA, this.NAME.RILLET, this.NAME.CAMPFIRE] as const;
},
get HR_CONNECTION_NAMES() {
return [this.NAME.GUSTO] as const;
Expand Down Expand Up @@ -6099,6 +6105,8 @@ const CONST = {
SEARCH_ISSUES: 'https://github.com/Expensify/App/issues',
},

RILLET_INTEGRATION_URL: 'https://www.rillet.com/integrations/expensify',
CAMPFIRE_INTEGRATION_URL: 'https://campfire.ai/integrations',
BOOK_TRAVEL_DEMO_URL: 'https://calendly.com/d/ck2z-xsh-q97/expensify-travel-demo-travel-page',
TRAVEL_DOT_URL: 'https://travel.expensify.com',
STAGING_TRAVEL_DOT_URL: 'https://staging.travel.expensify.com',
Expand Down
15 changes: 15 additions & 0 deletions src/components/ConnectToCampfireFlow/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import {useEffect} from 'react';
import {openExternalLink} from '@userActions/Link';
import CONST from '@src/CONST';
import type {ConnectToCampfireFlowProps} from './types';

// eslint-disable-next-line @typescript-eslint/no-unused-vars
function ConnectToCampfireFlow(_props: ConnectToCampfireFlowProps) {
useEffect(() => {
openExternalLink(CONST.CAMPFIRE_INTEGRATION_URL);
}, []);

return null;
}

export default ConnectToCampfireFlow;
6 changes: 6 additions & 0 deletions src/components/ConnectToCampfireFlow/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
type ConnectToCampfireFlowProps = {
policyID: string;
};

// eslint-disable-next-line import/prefer-default-export
export type {ConnectToCampfireFlowProps};
15 changes: 15 additions & 0 deletions src/components/ConnectToRilletFlow/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import {useEffect} from 'react';
import {openExternalLink} from '@userActions/Link';
import CONST from '@src/CONST';
import type {ConnectToRilletFlowProps} from './types';

// eslint-disable-next-line @typescript-eslint/no-unused-vars
function ConnectToRilletFlow(_props: ConnectToRilletFlowProps) {
useEffect(() => {
openExternalLink(CONST.RILLET_INTEGRATION_URL);
}, []);

return null;
}

export default ConnectToRilletFlow;
6 changes: 6 additions & 0 deletions src/components/ConnectToRilletFlow/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
type ConnectToRilletFlowProps = {
policyID: string;
};

// eslint-disable-next-line import/prefer-default-export
export type {ConnectToRilletFlowProps};
4 changes: 4 additions & 0 deletions src/components/Icon/chunks/expensify-icons.chunk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ import ImageCropSquareMask from '@assets/images/image-crop-square-mask.svg';
import Inbox from '@assets/images/inbox.svg';
import Info from '@assets/images/info.svg';
import BillComSquare from '@assets/images/integrationicons/bill-com-icon-square.svg';
import CampfireSquare from '@assets/images/integrationicons/campfire-icon-square.svg';
import CertiniaSquare from '@assets/images/integrationicons/certinia-icon-square.svg';
import CircleSlash from '@assets/images/integrationicons/circle-slash.svg';
import NetSuiteExport from '@assets/images/integrationicons/export/netsuite-icon.svg';
Expand All @@ -139,6 +140,7 @@ import OracleSquare from '@assets/images/integrationicons/oracle-icon-square.svg
import QBDSquare from '@assets/images/integrationicons/qbd-icon-square.svg';
import QBOCircle from '@assets/images/integrationicons/qbo-icon-circle.svg';
import QBOSquare from '@assets/images/integrationicons/qbo-icon-square.svg';
import RilletSquare from '@assets/images/integrationicons/rillet-icon-square.svg';
import SageIntacctSquare from '@assets/images/integrationicons/sage-intacct-icon-square.svg';
import SapSquare from '@assets/images/integrationicons/sap-icon-square.svg';
import Uber from '@assets/images/integrationicons/uber.svg';
Expand Down Expand Up @@ -294,6 +296,7 @@ const Expensicons = {
Buildings,
Calendar,
Camera,
CampfireSquare,
Car,
CarPlus,
Cash,
Expand Down Expand Up @@ -431,6 +434,7 @@ const Expensicons = {
ReportCopy,
ReplaceReceipt,
ReceiptMultiple,
RilletSquare,
Rotate,
RotateLeft,
Scan,
Expand Down
2 changes: 2 additions & 0 deletions src/languages/de.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6081,6 +6081,8 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand Down
6 changes: 6 additions & 0 deletions src/languages/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6093,6 +6093,8 @@ const translations = {
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand All @@ -6110,6 +6112,10 @@ const translations = {
return 'NetSuite';
case CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT:
return 'Sage Intacct';
case CONST.POLICY.CONNECTIONS.NAME.RILLET:
return 'Rillet';
case CONST.POLICY.CONNECTIONS.NAME.CAMPFIRE:
return 'Campfire';
default: {
return '';
}
Expand Down
6 changes: 6 additions & 0 deletions src/languages/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5902,6 +5902,8 @@ ${amount} para ${merchant} - ${date}`,
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand All @@ -5919,6 +5921,10 @@ ${amount} para ${merchant} - ${date}`,
return 'NetSuite';
case CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT:
return 'Sage Intacct';
case CONST.POLICY.CONNECTIONS.NAME.RILLET:
return 'Rillet';
case CONST.POLICY.CONNECTIONS.NAME.CAMPFIRE:
return 'Campfire';
default: {
return '';
}
Expand Down
2 changes: 2 additions & 0 deletions src/languages/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6102,6 +6102,8 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST.
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand Down
2 changes: 2 additions & 0 deletions src/languages/it.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6070,6 +6070,8 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST.
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand Down
2 changes: 2 additions & 0 deletions src/languages/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6002,6 +6002,8 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand Down
2 changes: 2 additions & 0 deletions src/languages/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6051,6 +6051,8 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand Down
2 changes: 2 additions & 0 deletions src/languages/pl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6043,6 +6043,8 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand Down
2 changes: 2 additions & 0 deletions src/languages/pt-BR.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6050,6 +6050,8 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand Down
2 changes: 2 additions & 0 deletions src/languages/zh-hans.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5900,6 +5900,8 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM
xero: 'Xero',
netsuite: 'NetSuite',
intacct: 'Sage Intacct',
rillet: 'Rillet',
campfire: 'Campfire',
sap: 'SAP',
oracle: 'Oracle',
microsoftDynamics: 'Microsoft Dynamics',
Expand Down
4 changes: 4 additions & 0 deletions src/libs/AccountingUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ const ROUTE_NAME_MAPPING = {
[CONST.POLICY.CONNECTIONS.ROUTE.NETSUITE]: CONST.POLICY.CONNECTIONS.NAME.NETSUITE,
[CONST.POLICY.CONNECTIONS.ROUTE.QBD]: CONST.POLICY.CONNECTIONS.NAME.QBD,
[CONST.POLICY.CONNECTIONS.ROUTE.CERTINIA]: CONST.POLICY.CONNECTIONS.NAME.CERTINIA,
[CONST.POLICY.CONNECTIONS.ROUTE.RILLET]: CONST.POLICY.CONNECTIONS.NAME.RILLET,
[CONST.POLICY.CONNECTIONS.ROUTE.CAMPFIRE]: CONST.POLICY.CONNECTIONS.NAME.CAMPFIRE,
[CONST.POLICY.CONNECTIONS.ROUTE.GUSTO]: CONST.POLICY.CONNECTIONS.NAME.GUSTO,
};

Expand All @@ -19,6 +21,8 @@ const NAME_ROUTE_MAPPING = {
[CONST.POLICY.CONNECTIONS.NAME.NETSUITE]: CONST.POLICY.CONNECTIONS.ROUTE.NETSUITE,
[CONST.POLICY.CONNECTIONS.NAME.QBD]: CONST.POLICY.CONNECTIONS.ROUTE.QBD,
[CONST.POLICY.CONNECTIONS.NAME.CERTINIA]: CONST.POLICY.CONNECTIONS.ROUTE.CERTINIA,
[CONST.POLICY.CONNECTIONS.NAME.RILLET]: CONST.POLICY.CONNECTIONS.ROUTE.RILLET,
[CONST.POLICY.CONNECTIONS.NAME.CAMPFIRE]: CONST.POLICY.CONNECTIONS.ROUTE.CAMPFIRE,
[CONST.POLICY.CONNECTIONS.NAME.GUSTO]: CONST.POLICY.CONNECTIONS.ROUTE.GUSTO,
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ function AccountingContextProvider({children, policy}: AccountingContextProvider
const [activeIntegration, setActiveIntegration] = useState<ActiveIntegrationState>();
const {translate} = useLocalize();
const policyID = policy?.id;
const accountingIcons = useMemoizedLazyExpensifyIcons(['IntacctSquare', 'QBOSquare', 'XeroSquare', 'NetSuiteSquare', 'QBDSquare']);
const accountingIcons = useMemoizedLazyExpensifyIcons(['IntacctSquare', 'QBOSquare', 'XeroSquare', 'NetSuiteSquare', 'QBDSquare', 'RilletSquare', 'CampfireSquare']);
const hasReusablePoliciesConnectedToSageIntacct = useHasReusablePoliciesConnectedTo(CONST.POLICY.CONNECTIONS.NAME.SAGE_INTACCT, policyID);
const hasReusablePoliciesConnectedToQBD = useHasReusablePoliciesConnectedTo(CONST.POLICY.CONNECTIONS.NAME.QBD, policyID);

Expand Down
2 changes: 1 addition & 1 deletion src/pages/workspace/accounting/PolicyAccountingPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ function PolicyAccountingPage({policy}: PolicyAccountingPageProps) {
const allCardSettings = useExpensifyCardFeeds(policyID);
const isSyncInProgress = isConnectionInProgress(connectionSyncProgress, policy);
const icons = useMemoizedLazyExpensifyIcons(['ArrowRight', 'CircularArrowBackwards', 'ExpensifyCard', 'Gear', 'Key', 'NewWindow', 'Pencil', 'QuestionMark', 'Send', 'Sync', 'Trashcan']);
const accountingIcons = useMemoizedLazyExpensifyIcons(['IntacctSquare', 'QBOSquare', 'XeroSquare', 'NetSuiteSquare', 'QBDSquare']);
const accountingIcons = useMemoizedLazyExpensifyIcons(['IntacctSquare', 'QBOSquare', 'XeroSquare', 'NetSuiteSquare', 'QBDSquare', 'RilletSquare', 'CampfireSquare']);
const illustrations = useMemoizedLazyIllustrations(['Accounting']);

const accountingIntegrations = CONST.POLICY.CONNECTIONS.ACCOUNTING_CONNECTION_NAMES;
Expand Down
34 changes: 33 additions & 1 deletion src/pages/workspace/accounting/utils.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import React from 'react';
import type {OnyxEntry} from 'react-native-onyx';
import ConnectToCampfireFlow from '@components/ConnectToCampfireFlow';
import ConnectToNetSuiteFlow from '@components/ConnectToNetSuiteFlow';
import ConnectToQuickbooksDesktopFlow from '@components/ConnectToQuickbooksDesktopFlow';
import ConnectToQuickbooksOnlineFlow from '@components/ConnectToQuickbooksOnlineFlow';
import ConnectToRilletFlow from '@components/ConnectToRilletFlow';
import ConnectToSageIntacctFlow from '@components/ConnectToSageIntacctFlow';
import ConnectToXeroFlow from '@components/ConnectToXeroFlow';
import type {LocaleContextProps} from '@components/LocaleContextProvider';
Expand Down Expand Up @@ -50,7 +52,7 @@ function getAccountingIntegrationData(
integrationToDisconnect?: ConnectionName,
shouldDisconnectIntegrationBeforeConnecting?: boolean,
canUseNetSuiteUSATax?: boolean,
expensifyIcons?: Record<'IntacctSquare' | 'QBOSquare' | 'XeroSquare' | 'NetSuiteSquare' | 'QBDSquare', IconAsset>,
expensifyIcons?: Record<'IntacctSquare' | 'QBOSquare' | 'XeroSquare' | 'NetSuiteSquare' | 'QBDSquare' | 'RilletSquare' | 'CampfireSquare', IconAsset>,
): AccountingIntegration | undefined {
const qboConfig = policy?.connections?.quickbooksOnline?.config;
const netsuiteConfig = policy?.connections?.netsuite?.options?.config;
Expand Down Expand Up @@ -308,6 +310,36 @@ function getAccountingIntegrationData(
backToAfterWorkspaceUpgradeRoute: getBackToAfterWorkspaceUpgradeRouteForQBD(),
},
};
case CONST.POLICY.CONNECTIONS.NAME.RILLET:
return {
title: translate('workspace.accounting.rillet'),
icon: expensifyIcons?.RilletSquare,
setupConnectionFlow: (
<ConnectToRilletFlow
policyID={policyID}
key={key}
/>
),
onImportPagePress: () => {},
onExportPagePress: () => {},
onAdvancedPagePress: () => {},
onCardReconciliationPagePress: () => {},
};
case CONST.POLICY.CONNECTIONS.NAME.CAMPFIRE:
return {
title: translate('workspace.accounting.campfire'),
icon: expensifyIcons?.CampfireSquare,
setupConnectionFlow: (
<ConnectToCampfireFlow
policyID={policyID}
key={key}
/>
),
onImportPagePress: () => {},
onExportPagePress: () => {},
onAdvancedPagePress: () => {},
onCardReconciliationPagePress: () => {},
};
default:
return undefined;
}
Expand Down
6 changes: 6 additions & 0 deletions src/types/onyx/Policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1507,6 +1507,12 @@ type Connections = {
/** Certinia integration connection */
[CONST.POLICY.CONNECTIONS.NAME.CERTINIA]: Connection<Record<string, never>, Record<string, never>>;

/** Rillet integration connection */
[CONST.POLICY.CONNECTIONS.NAME.RILLET]: Connection<Record<string, never>, Record<string, never>>;

/** Campfire integration connection */
[CONST.POLICY.CONNECTIONS.NAME.CAMPFIRE]: Connection<Record<string, never>, Record<string, never>>;

/** Gusto integration connection */
[CONST.POLICY.CONNECTIONS.NAME.GUSTO]: Connection<GustoConnectionData, GustoConnectionConfig>;
};
Expand Down
Loading