@@ -1,7 +1,7 @@
|
|||||||
VITE_APP_GRAPHQL_ENDPOINT=https://db.dev.bodyshop.app/v1/graphql
|
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_GRAPHQL_ENDPOINT_WS=wss://db.dev.bodyshop.app/v1/graphql
|
||||||
VITE_APP_GA_CODE=231099835
|
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_API=https://api.cloudinary.com/v1_1/io-test
|
||||||
VITE_APP_CLOUDINARY_ENDPOINT=https://res.cloudinary.com/io-test
|
VITE_APP_CLOUDINARY_ENDPOINT=https://res.cloudinary.com/io-test
|
||||||
VITE_APP_CLOUDINARY_API_KEY=957865933348715
|
VITE_APP_CLOUDINARY_API_KEY=957865933348715
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
import { useSplitClient } from "@splitsoftware/splitio-react";
|
import { useSplitClient } from "@splitsoftware/splitio-react";
|
||||||
import { Button, Result } from "antd";
|
import { Button, Result } from "antd";
|
||||||
import LogRocket from "logrocket";
|
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 { useTranslation } from "react-i18next";
|
||||||
import { connect } from "react-redux";
|
import { connect } from "react-redux";
|
||||||
import { Route, Routes } from "react-router-dom";
|
import { Route, Routes } from "react-router-dom";
|
||||||
import { createStructuredSelector } from "reselect";
|
import { createStructuredSelector } from "reselect";
|
||||||
import DocumentEditorContainer from "../components/document-editor/document-editor.container";
|
import DocumentEditorContainer from "../components/document-editor/document-editor.container";
|
||||||
import ErrorBoundary from "../components/error-boundary/error-boundary.component";
|
import ErrorBoundary from "../components/error-boundary/error-boundary.component"; // Component Imports
|
||||||
|
|
||||||
// Component Imports
|
|
||||||
import LoadingSpinner from "../components/loading-spinner/loading-spinner.component";
|
import LoadingSpinner from "../components/loading-spinner/loading-spinner.component";
|
||||||
import DisclaimerPage from "../pages/disclaimer/disclaimer.page";
|
import DisclaimerPage from "../pages/disclaimer/disclaimer.page";
|
||||||
import LandingPage from "../pages/landing/landing.page";
|
import LandingPage from "../pages/landing/landing.page";
|
||||||
@@ -23,7 +21,7 @@ import "./App.styles.scss";
|
|||||||
import handleBeta from "../utils/betaHandler";
|
import handleBeta from "../utils/betaHandler";
|
||||||
import Eula from "../components/eula/eula.component";
|
import Eula from "../components/eula/eula.component";
|
||||||
import InstanceRenderMgr from "../utils/instanceRenderMgr";
|
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 ResetPassword = lazy(() => import("../pages/reset-password/reset-password.component"));
|
||||||
const ManagePage = lazy(() => import("../pages/manage/manage.page.container"));
|
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 [listenersAdded, setListenersAdded] = useState(false);
|
||||||
const { t } = useTranslation();
|
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(() => {
|
useEffect(() => {
|
||||||
if (!navigator.onLine) {
|
if (!navigator.onLine) {
|
||||||
setOnline(false);
|
setOnline(false);
|
||||||
@@ -73,6 +54,10 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
|
|||||||
checkUserSession();
|
checkUserSession();
|
||||||
}, [checkUserSession, setOnline]);
|
}, [checkUserSession, setOnline]);
|
||||||
|
|
||||||
|
//const b = Grid.useBreakpoint();
|
||||||
|
// console.log("Breakpoints:", b);
|
||||||
|
|
||||||
|
// Associate event listeners, memoize to prevent multiple listeners being added
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const offlineListener = () => {
|
const offlineListener = () => {
|
||||||
setOnline(false);
|
setOnline(false);
|
||||||
@@ -144,6 +129,7 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
|
|||||||
return <Eula />;
|
return <Eula />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Any route that is not assigned and matched will default to the Landing Page component
|
||||||
return (
|
return (
|
||||||
<Suspense
|
<Suspense
|
||||||
fallback={
|
fallback={
|
||||||
@@ -156,9 +142,7 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
|
|||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
{currentUser && currentUser.email && (
|
<ProductFruitsWrapper currentUser={currentUser} />
|
||||||
<ProductFruits workspaceCode={workspaceCode} debug language="en" user={workspaceLogin} />
|
|
||||||
)}
|
|
||||||
|
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route
|
<Route
|
||||||
|
|||||||
27
client/src/App/ProductFruitsWrapper.jsx
Normal file
27
client/src/App/ProductFruitsWrapper.jsx
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { ProductFruits } from "react-product-fruits";
|
||||||
|
import InstanceRenderMgr from "../utils/instanceRenderMgr";
|
||||||
|
|
||||||
|
const ProductFruitsWrapper = React.memo(({ currentUser }) => {
|
||||||
|
return (
|
||||||
|
currentUser?.authorized === true &&
|
||||||
|
currentUser?.email && (
|
||||||
|
<ProductFruits
|
||||||
|
lifeCycle="unmount"
|
||||||
|
workspaceCode={InstanceRenderMgr({
|
||||||
|
imex: null,
|
||||||
|
rome: "9BkbEseqNqxw8jUH",
|
||||||
|
promanager: "aoJoEifvezYI0Z0P"
|
||||||
|
})}
|
||||||
|
debug
|
||||||
|
language="en"
|
||||||
|
user={{
|
||||||
|
email: currentUser.email,
|
||||||
|
username: currentUser.email
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
export default ProductFruitsWrapper;
|
||||||
@@ -63,7 +63,7 @@ export default function ShopEmployeesListComponent({ loading, employees }) {
|
|||||||
value: false
|
value: false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
onFilter: (value, record) => value === record.flate_rate,
|
onFilter: (value, record) => value === record.flat_rate,
|
||||||
render: (text, record) =>
|
render: (text, record) =>
|
||||||
record.flat_rate ? t("employees.labels.flat_rate") : t("employees.labels.straight_time")
|
record.flat_rate ? t("employees.labels.flat_rate") : t("employees.labels.straight_time")
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2920,7 +2920,8 @@
|
|||||||
"parts_not_recieved_vendor": "Parts Not Received by Vendor",
|
"parts_not_recieved_vendor": "Parts Not Received by Vendor",
|
||||||
"parts_received_not_scheduled": "Parts Received for Jobs Not Scheduled",
|
"parts_received_not_scheduled": "Parts Received for Jobs Not Scheduled",
|
||||||
"payments_by_date": "Payments by Date",
|
"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": "Production by Category",
|
||||||
"production_by_category_one": "Production filtered by Category",
|
"production_by_category_one": "Production filtered by Category",
|
||||||
"production_by_csr": "Production by CSR",
|
"production_by_csr": "Production by CSR",
|
||||||
|
|||||||
@@ -2920,6 +2920,7 @@
|
|||||||
"parts_not_recieved_vendor": "",
|
"parts_not_recieved_vendor": "",
|
||||||
"parts_received_not_scheduled": "",
|
"parts_received_not_scheduled": "",
|
||||||
"payments_by_date": "",
|
"payments_by_date": "",
|
||||||
|
"payments_by_date_payment": "",
|
||||||
"payments_by_date_type": "",
|
"payments_by_date_type": "",
|
||||||
"production_by_category": "",
|
"production_by_category": "",
|
||||||
"production_by_category_one": "",
|
"production_by_category_one": "",
|
||||||
|
|||||||
@@ -2920,6 +2920,7 @@
|
|||||||
"parts_not_recieved_vendor": "",
|
"parts_not_recieved_vendor": "",
|
||||||
"parts_received_not_scheduled": "",
|
"parts_received_not_scheduled": "",
|
||||||
"payments_by_date": "",
|
"payments_by_date": "",
|
||||||
|
"payments_by_date_payment": "",
|
||||||
"payments_by_date_type": "",
|
"payments_by_date_type": "",
|
||||||
"production_by_category": "",
|
"production_by_category": "",
|
||||||
"production_by_category_one": "",
|
"production_by_category_one": "",
|
||||||
|
|||||||
@@ -1194,6 +1194,17 @@ export const TemplateList = (type, context) => {
|
|||||||
},
|
},
|
||||||
group: "customers"
|
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: {
|
schedule: {
|
||||||
title: i18n.t("reportcenter.templates.schedule"),
|
title: i18n.t("reportcenter.templates.schedule"),
|
||||||
subject: i18n.t("reportcenter.templates.schedule"),
|
subject: i18n.t("reportcenter.templates.schedule"),
|
||||||
|
|||||||
@@ -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.
|
//This was required for the No. 1 Collision Group.
|
||||||
if (
|
if (
|
||||||
bodyshop.accountingconfig &&
|
bodyshop.accountingconfig &&
|
||||||
@@ -651,6 +651,17 @@ exports.default = function ({ bodyshop, jobs_by_pk, qbo = false, items, taxCodes
|
|||||||
Qty: 1
|
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 {
|
} else {
|
||||||
//Handle insurance profile adjustments
|
//Handle insurance profile adjustments
|
||||||
|
|||||||
Reference in New Issue
Block a user