Merged in release/2024-07-19 (pull request #1528)

Release/2024 07 19
This commit is contained in:
Allan Carr
2024-07-19 17:26:48 +00:00
8 changed files with 55 additions and 31 deletions

View File

@@ -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

View File

@@ -7,9 +7,7 @@ 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,20 +21,21 @@ 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"));
const SignInPage = lazy(() => import("../pages/sign-in/sign-in.page")); const SignInPage = lazy(() => import("../pages/sign-in/sign-in.page"));
const CsiPage = lazy(() => import("../pages/csi/csi.container.page")); const CsiPage = lazy(() => import("../pages/csi/csi.container.page"));
const MobilePaymentContainer = lazy(() => import("../pages/mobile-payment/mobile-payment.container")); const MobilePaymentContainer = lazy(() => import("../pages/mobile-payment/mobile-payment.container"));
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
currentUser: selectCurrentUser, currentUser: selectCurrentUser,
online: selectOnline, online: selectOnline,
bodyshop: selectBodyshop, bodyshop: selectBodyshop,
currentEula: selectCurrentEula currentEula: selectCurrentEula
}); });
const mapDispatchToProps = (dispatch) => ({ const mapDispatchToProps = (dispatch) => ({
checkUserSession: () => dispatch(checkUserSession()), checkUserSession: () => dispatch(checkUserSession()),
setOnline: (isOnline) => dispatch(setOnline(isOnline)) setOnline: (isOnline) => dispatch(setOnline(isOnline))
@@ -60,11 +59,11 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
// Associate event listeners, memoize to prevent multiple listeners being added // Associate event listeners, memoize to prevent multiple listeners being added
useEffect(() => { useEffect(() => {
const offlineListener = (e) => { const offlineListener = () => {
setOnline(false); setOnline(false);
}; };
const onlineListener = (e) => { const onlineListener = () => {
setOnline(true); setOnline(true);
}; };
@@ -98,7 +97,7 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
InstanceRenderMgr({ InstanceRenderMgr({
imex: "gvfvfw/bodyshopapp", imex: "gvfvfw/bodyshopapp",
rome: "rome-online/rome-online", rome: "rome-online/rome-online",
promanager: "" //TODO:AIO Add in log rocket for promanager instances. promanager: "" // TODO: AIO Add in log rocket for promanager instances.
}) })
); );
} }
@@ -111,24 +110,20 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
handleBeta(); handleBeta();
if (!online) if (!online) {
return ( return (
<Result <Result
status="warning" status="warning"
title={t("general.labels.nointernet")} title={t("general.labels.nointernet")}
subTitle={t("general.labels.nointernet_sub")} subTitle={t("general.labels.nointernet_sub")}
extra={ extra={
<Button <Button type="primary" onClick={() => window.location.reload()}>
type="primary"
onClick={() => {
window.location.reload();
}}
>
{t("general.actions.refresh")} {t("general.actions.refresh")}
</Button> </Button>
} }
/> />
); );
}
if (currentEula && !currentUser.eulaIsAccepted) { if (currentEula && !currentUser.eulaIsAccepted) {
return <Eula />; return <Eula />;
@@ -147,19 +142,7 @@ export function App({ bodyshop, checkUserSession, currentUser, online, setOnline
/> />
} }
> >
<ProductFruits <ProductFruitsWrapper currentUser={currentUser} />
workspaceCode={InstanceRenderMgr({
imex: null,
rome: "9BkbEseqNqxw8jUH",
promanager: "aoJoEifvezYI0Z0P"
})}
debug
language="en"
user={{
email: currentUser.email,
username: currentUser.email
}}
/>
<Routes> <Routes>
<Route <Route

View 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;

View File

@@ -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")
}, },

View File

@@ -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",

View File

@@ -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": "",

View File

@@ -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": "",

View File

@@ -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"),