diff --git a/client/.env.development.promanager b/client/.env.development.promanager
index 70b8b0fdd..15fa08bce 100644
--- a/client/.env.development.promanager
+++ b/client/.env.development.promanager
@@ -1,7 +1,7 @@
VITE_APP_GRAPHQL_ENDPOINT=https://db.dev.bodyshop.app/v1/graphql
VITE_APP_GRAPHQL_ENDPOINT_WS=wss://db.dev.bodyshop.app/v1/graphql
VITE_APP_GA_CODE=231099835
-VITE_APP_FIREBASE_CONFIG={ "apiKey": "AIzaSyAuLQR9SV5LsVxjU8wh9hvFLdhcAHU6cxE", "authDomain": "rome-prod-1.firebaseapp.com", "projectId": "rome-prod-1", "storageBucket": "rome-prod-1.appspot.com", "messagingSenderId": "147786367145", "appId": "1:147786367145:web:9d4cba68071c3f29a8a9b8", "measurementId": "G-G8Z9DRHTZS"}
+VITE_APP_FIREBASE_CONFIG={"apiKey":"AIzaSyDPLT8GiDHDR1R4nI66Qi0BY1aYviDPioc","authDomain":"imex-dev.firebaseapp.com","databaseURL":"https://imex-dev.firebaseio.com","projectId":"imex-dev","storageBucket":"imex-dev.appspot.com","messagingSenderId":"759548147434","appId":"1:759548147434:web:e8239868a48ceb36700993","measurementId":"G-K5XRBVVB4S"}
VITE_APP_CLOUDINARY_ENDPOINT_API=https://api.cloudinary.com/v1_1/io-test
VITE_APP_CLOUDINARY_ENDPOINT=https://res.cloudinary.com/io-test
VITE_APP_CLOUDINARY_API_KEY=957865933348715
diff --git a/client/src/App/App.jsx b/client/src/App/App.jsx
index ecbb5a904..441359097 100644
--- a/client/src/App/App.jsx
+++ b/client/src/App/App.jsx
@@ -1,15 +1,13 @@
import { useSplitClient } from "@splitsoftware/splitio-react";
import { Button, Result } from "antd";
import LogRocket from "logrocket";
-import React, { lazy, Suspense, useEffect, useMemo, useState } from "react";
+import React, { lazy, Suspense, useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Route, Routes } from "react-router-dom";
import { createStructuredSelector } from "reselect";
import DocumentEditorContainer from "../components/document-editor/document-editor.container";
-import ErrorBoundary from "../components/error-boundary/error-boundary.component";
-
-// Component Imports
+import ErrorBoundary from "../components/error-boundary/error-boundary.component"; // Component Imports
import LoadingSpinner from "../components/loading-spinner/loading-spinner.component";
import DisclaimerPage from "../pages/disclaimer/disclaimer.page";
import LandingPage from "../pages/landing/landing.page";
@@ -23,7 +21,7 @@ import "./App.styles.scss";
import handleBeta from "../utils/betaHandler";
import Eula from "../components/eula/eula.component";
import InstanceRenderMgr from "../utils/instanceRenderMgr";
-import { ProductFruits } from "react-product-fruits";
+import ProductFruitsWrapper from "./ProductFruitsWrapper.jsx";
const ResetPassword = lazy(() => import("../pages/reset-password/reset-password.component"));
const ManagePage = lazy(() => import("../pages/manage/manage.page.container"));
@@ -48,23 +46,6 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
const [listenersAdded, setListenersAdded] = useState(false);
const { t } = useTranslation();
- const workspaceCode = useMemo(
- () =>
- InstanceRenderMgr({
- imex: null,
- rome: "9BkbEseqNqxw8jUH",
- promanager: "aoJoEifvezYI0Z0P"
- }),
- []
- );
-
- const workspaceLogin = useMemo(
- () => ({
- email: currentUser.email,
- username: currentUser.email
- }),
- [currentUser.email]
- );
useEffect(() => {
if (!navigator.onLine) {
setOnline(false);
@@ -73,6 +54,10 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
checkUserSession();
}, [checkUserSession, setOnline]);
+ //const b = Grid.useBreakpoint();
+ // console.log("Breakpoints:", b);
+
+ // Associate event listeners, memoize to prevent multiple listeners being added
useEffect(() => {
const offlineListener = () => {
setOnline(false);
@@ -144,6 +129,7 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
return ;
}
+ // Any route that is not assigned and matched will default to the Landing Page component
return (
}
>
- {currentUser && currentUser.email && (
-
- )}
+
{
+ return (
+ workspaceCode &&
+ currentUser?.authorized === true &&
+ currentUser?.email && (
+
+ )
+ );
+});
+
+export default ProductFruitsWrapper;
+
+ProductFruitsWrapper.propTypes = {
+ currentUser: PropTypes.shape({
+ authorized: PropTypes.bool,
+ email: PropTypes.string
+ }).isRequired,
+ workspaceCode: PropTypes.string.isRequired
+};
diff --git a/client/src/components/shop-employees/shop-employees-list.component.jsx b/client/src/components/shop-employees/shop-employees-list.component.jsx
index 2add19f34..d6b41bad2 100644
--- a/client/src/components/shop-employees/shop-employees-list.component.jsx
+++ b/client/src/components/shop-employees/shop-employees-list.component.jsx
@@ -63,7 +63,7 @@ export default function ShopEmployeesListComponent({ loading, employees }) {
value: false
}
],
- onFilter: (value, record) => value === record.flate_rate,
+ onFilter: (value, record) => value === record.flat_rate,
render: (text, record) =>
record.flat_rate ? t("employees.labels.flat_rate") : t("employees.labels.straight_time")
},
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 85689a62b..fd9f03e5b 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -2946,7 +2946,8 @@
"parts_not_recieved_vendor": "Parts Not Received by Vendor",
"parts_received_not_scheduled": "Parts Received for Jobs Not Scheduled",
"payments_by_date": "Payments by Date",
- "payments_by_date_type": "Payments by Date and Type",
+ "payments_by_date_payment": "Payments by Date and Payment Type",
+ "payments_by_date_type": "Payments by Date and Customer Type",
"production_by_category": "Production by Category",
"production_by_category_one": "Production filtered by Category",
"production_by_csr": "Production by CSR",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 2785c962a..cdb5f63e4 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -2929,6 +2929,7 @@
"parts_not_recieved_vendor": "",
"parts_received_not_scheduled": "",
"payments_by_date": "",
+ "payments_by_date_payment": "",
"payments_by_date_type": "",
"production_by_category": "",
"production_by_category_one": "",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 4abb5d683..5b10b29a6 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -2921,6 +2921,7 @@
"parts_not_recieved_vendor": "",
"parts_received_not_scheduled": "",
"payments_by_date": "",
+ "payments_by_date_payment": "",
"payments_by_date_type": "",
"production_by_category": "",
"production_by_category_one": "",
diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js
index 8fda63504..2aa482fb6 100644
--- a/client/src/utils/TemplateConstants.js
+++ b/client/src/utils/TemplateConstants.js
@@ -1194,6 +1194,17 @@ export const TemplateList = (type, context) => {
},
group: "customers"
},
+ payments_by_date_payment: {
+ title: i18n.t("reportcenter.templates.payments_by_date_payment"),
+ subject: i18n.t("reportcenter.templates.payments_by_date_payment"),
+ key: "payments_by_date_payment",
+ disabled: false,
+ rangeFilter: {
+ object: i18n.t("reportcenter.labels.objects.payments"),
+ field: i18n.t("payments.fields.date")
+ },
+ group: "customers"
+ },
schedule: {
title: i18n.t("reportcenter.templates.schedule"),
subject: i18n.t("reportcenter.templates.schedule"),
diff --git a/server/accounting/qb-receivables-lines.js b/server/accounting/qb-receivables-lines.js
index 69818343e..e2437dca1 100644
--- a/server/accounting/qb-receivables-lines.js
+++ b/server/accounting/qb-receivables-lines.js
@@ -632,7 +632,7 @@ exports.default = function ({ bodyshop, jobs_by_pk, qbo = false, items, taxCodes
}
}
- //QB USA with GST
+ //QB USA with GST and PST
//This was required for the No. 1 Collision Group.
if (
bodyshop.accountingconfig &&
@@ -651,6 +651,17 @@ exports.default = function ({ bodyshop, jobs_by_pk, qbo = false, items, taxCodes
Qty: 1
}
});
+ InvoiceLineAdd.push({
+ DetailType: "SalesItemLineDetail",
+ Amount: Dinero(jobs_by_pk.job_totals.totals.state_tax).toFormat(DineroQbFormat),
+ SalesItemLineDetail: {
+ ...(jobs_by_pk.class ? { ClassRef: { value: classes[jobs_by_pk.class] } } : {}),
+ ItemRef: {
+ value: items[bodyshop.md_responsibility_centers.taxes.state.accountitem]
+ },
+ Qty: 1
+ }
+ });
}
} else {
//Handle insurance profile adjustments