@@ -3,6 +3,7 @@ orbs:
|
|||||||
#snyk: snyk/snyk@0.0.8
|
#snyk: snyk/snyk@0.0.8
|
||||||
#cypress: cypress-io/cypress@1.23.0
|
#cypress: cypress-io/cypress@1.23.0
|
||||||
aws-s3: circleci/aws-s3@4.0.0
|
aws-s3: circleci/aws-s3@4.0.0
|
||||||
|
aws-cli: circleci/aws-cli@4.0
|
||||||
eb: circleci/aws-elastic-beanstalk@2.0.1
|
eb: circleci/aws-elastic-beanstalk@2.0.1
|
||||||
jobs:
|
jobs:
|
||||||
api-deploy:
|
api-deploy:
|
||||||
@@ -172,7 +173,7 @@ jobs:
|
|||||||
app-beta-build:
|
app-beta-build:
|
||||||
docker:
|
docker:
|
||||||
- image: cimg/node:18.18.2
|
- image: cimg/node:18.18.2
|
||||||
resource_class: xlarge
|
resource_class: large
|
||||||
working_directory: ~/repo/client
|
working_directory: ~/repo/client
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -184,6 +185,11 @@ jobs:
|
|||||||
|
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
|
|
||||||
|
- aws-cli/setup:
|
||||||
|
aws_access_key_id: AWS_ACCESS_KEY_ID
|
||||||
|
aws_secret_access_key: AWS_SECRET_ACCESS_KEY
|
||||||
|
region: AWS_REGION
|
||||||
|
|
||||||
- aws-s3/sync:
|
- aws-s3/sync:
|
||||||
from: build
|
from: build
|
||||||
to: "s3://imex-online-beta/"
|
to: "s3://imex-online-beta/"
|
||||||
@@ -253,7 +259,7 @@ jobs:
|
|||||||
test-app-beta-build:
|
test-app-beta-build:
|
||||||
docker:
|
docker:
|
||||||
- image: cimg/node:18.18.2
|
- image: cimg/node:18.18.2
|
||||||
resource_class: snaptsoft/pfic
|
resource_class: large
|
||||||
working_directory: ~/repo/client
|
working_directory: ~/repo/client
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -266,6 +272,13 @@ jobs:
|
|||||||
|
|
||||||
- run: npm run build:test
|
- run: npm run build:test
|
||||||
|
|
||||||
|
- run: npm run sentry:sourcemaps
|
||||||
|
|
||||||
|
- aws-cli/setup:
|
||||||
|
aws_access_key_id: AWS_ACCESS_KEY_ID
|
||||||
|
aws_secret_access_key: AWS_SECRET_ACCESS_KEY
|
||||||
|
region: AWS_REGION
|
||||||
|
|
||||||
- aws-s3/sync:
|
- aws-s3/sync:
|
||||||
from: build
|
from: build
|
||||||
to: "s3://imex-online-test-beta/"
|
to: "s3://imex-online-test-beta/"
|
||||||
|
|||||||
1047
client/package-lock.json
generated
1047
client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -6,18 +6,18 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ant-design/compatible": "^5.1.2",
|
"@ant-design/compatible": "^5.1.2",
|
||||||
"@ant-design/pro-layout": "^7.17.16",
|
"@ant-design/pro-layout": "^7.17.16",
|
||||||
"@apollo/client": "^3.9.0",
|
"@apollo/client": "^3.8.10",
|
||||||
"@asseinfo/react-kanban": "^2.2.0",
|
"@asseinfo/react-kanban": "^2.2.0",
|
||||||
"@craco/craco": "^7.1.0",
|
"@craco/craco": "^7.1.0",
|
||||||
"@fingerprintjs/fingerprintjs": "^4.2.2",
|
"@fingerprintjs/fingerprintjs": "^4.2.2",
|
||||||
"@jsreport/browser-client": "^3.1.0",
|
"@jsreport/browser-client": "^3.1.0",
|
||||||
"@reduxjs/toolkit": "^2.1.0",
|
"@reduxjs/toolkit": "^2.1.0",
|
||||||
"@sentry/cli": "^2.27.0",
|
"@sentry/cli": "^2.28.0",
|
||||||
"@sentry/react": "^7.99.0",
|
"@sentry/react": "^7.100.0",
|
||||||
"@sentry/tracing": "^7.99.0",
|
"@sentry/tracing": "^7.100.0",
|
||||||
"@splitsoftware/splitio-react": "^1.11.0",
|
"@splitsoftware/splitio-react": "^1.11.0",
|
||||||
"@tanem/react-nprogress": "^5.0.51",
|
"@tanem/react-nprogress": "^5.0.51",
|
||||||
"antd": "^5.13.3",
|
"antd": "^5.14.0",
|
||||||
"apollo-link-logger": "^2.0.1",
|
"apollo-link-logger": "^2.0.1",
|
||||||
"apollo-link-sentry": "^3.3.0",
|
"apollo-link-sentry": "^3.3.0",
|
||||||
"axios": "^1.6.7",
|
"axios": "^1.6.7",
|
||||||
@@ -29,20 +29,20 @@
|
|||||||
"enquire-js": "^0.2.1",
|
"enquire-js": "^0.2.1",
|
||||||
"env-cmd": "^10.1.0",
|
"env-cmd": "^10.1.0",
|
||||||
"exifr": "^7.1.3",
|
"exifr": "^7.1.3",
|
||||||
"firebase": "^10.7.2",
|
"firebase": "^10.8.0",
|
||||||
"graphql": "^16.6.0",
|
"graphql": "^16.6.0",
|
||||||
"i18next": "^23.8.1",
|
"i18next": "^23.8.2",
|
||||||
"i18next-browser-languagedetector": "^7.0.2",
|
"i18next-browser-languagedetector": "^7.0.2",
|
||||||
"jsoneditor": "^10.0.0",
|
"jsoneditor": "^10.0.0",
|
||||||
"jsreport-browser-client-dist": "^1.3.0",
|
"jsreport-browser-client-dist": "^1.3.0",
|
||||||
"libphonenumber-js": "^1.10.54",
|
"libphonenumber-js": "^1.10.55",
|
||||||
"logrocket": "^7.0.0",
|
"logrocket": "^7.0.0",
|
||||||
"markerjs2": "^2.32.0",
|
"markerjs2": "^2.32.0",
|
||||||
"normalize-url": "^8.0.0",
|
"normalize-url": "^8.0.0",
|
||||||
"phone": "^3.1.42",
|
"phone": "^3.1.42",
|
||||||
"preval.macro": "^5.0.0",
|
"preval.macro": "^5.0.0",
|
||||||
"prop-types": "^15.8.1",
|
"prop-types": "^15.8.1",
|
||||||
"query-string": "^8.1.0",
|
"query-string": "^8.2.0",
|
||||||
"rc-queue-anim": "^2.0.0",
|
"rc-queue-anim": "^2.0.0",
|
||||||
"rc-scroll-anim": "^2.7.6",
|
"rc-scroll-anim": "^2.7.6",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
@@ -53,15 +53,15 @@
|
|||||||
"react-drag-listview": "^2.0.0",
|
"react-drag-listview": "^2.0.0",
|
||||||
"react-grid-gallery": "^1.0.0",
|
"react-grid-gallery": "^1.0.0",
|
||||||
"react-grid-layout": "1.3.4",
|
"react-grid-layout": "1.3.4",
|
||||||
"react-i18next": "^14.0.1",
|
"react-i18next": "^14.0.4",
|
||||||
"react-icons": "^5.0.1",
|
"react-icons": "^5.0.1",
|
||||||
"react-image-lightbox": "^5.1.4",
|
"react-image-lightbox": "^5.1.4",
|
||||||
"react-intersection-observer": "^9.5.3",
|
"react-intersection-observer": "^9.7.0",
|
||||||
"react-markdown": "^9.0.1",
|
"react-markdown": "^9.0.1",
|
||||||
"react-number-format": "^5.1.4",
|
"react-number-format": "^5.1.4",
|
||||||
"react-redux": "^9.1.0",
|
"react-redux": "^9.1.0",
|
||||||
"react-resizable": "^3.0.5",
|
"react-resizable": "^3.0.5",
|
||||||
"react-router-dom": "^6.21.3",
|
"react-router-dom": "^6.22.0",
|
||||||
"react-scripts": "^5.0.1",
|
"react-scripts": "^5.0.1",
|
||||||
"react-sticky": "^6.0.3",
|
"react-sticky": "^6.0.3",
|
||||||
"react-sublime-video": "^0.2.5",
|
"react-sublime-video": "^0.2.5",
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"analyze": "source-map-explorer 'build/static/js/*.js'",
|
"analyze": "source-map-explorer 'build/static/js/*.js'",
|
||||||
"start": "craco start",
|
"start": "craco start",
|
||||||
"build": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` craco build && npm run sentry:sourcemaps",
|
"build": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` craco build",
|
||||||
"build:test": "env-cmd -f .env.test npm run build",
|
"build:test": "env-cmd -f .env.test npm run build",
|
||||||
"build-deploy:test": "npm run build:test && s3cmd sync build/* s3://imex-online-test && echo '🚀 TESTING Deployed!'",
|
"build-deploy:test": "npm run build:test && s3cmd sync build/* s3://imex-online-test && echo '🚀 TESTING Deployed!'",
|
||||||
"buildcra": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` craco build",
|
"buildcra": "REACT_APP_GIT_SHA=`git rev-parse --short HEAD` craco build",
|
||||||
@@ -123,7 +123,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
||||||
"@sentry/webpack-plugin": "^2.10.3",
|
"@sentry/webpack-plugin": "^2.14.0",
|
||||||
"@testing-library/cypress": "^10.0.1",
|
"@testing-library/cypress": "^10.0.1",
|
||||||
"cypress": "^13.6.4",
|
"cypress": "^13.6.4",
|
||||||
"eslint-plugin-cypress": "^2.15.1",
|
"eslint-plugin-cypress": "^2.15.1",
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ export function BillFormComponent({
|
|||||||
// // Gate bill lines
|
// // Gate bill lines
|
||||||
// if (!values?.billlines?.length) return;
|
// if (!values?.billlines?.length) return;
|
||||||
|
|
||||||
// const billlines = values.billlines.map((b) => {
|
// const billlines = values.billlines.map((b) => {
|
||||||
// b.applicable_taxes.federal = false;
|
// b.applicable_taxes.federal = false;
|
||||||
// return b;
|
// return b;
|
||||||
// });
|
// });
|
||||||
@@ -393,11 +393,11 @@ export function BillFormComponent({
|
|||||||
{/*</Form.Item>*/}
|
{/*</Form.Item>*/}
|
||||||
{/* {bodyshop.pbs_serialnumber || bodyshop.cdk_dealerid ? (*/}
|
{/* {bodyshop.pbs_serialnumber || bodyshop.cdk_dealerid ? (*/}
|
||||||
{/* <Form.Item*/}
|
{/* <Form.Item*/}
|
||||||
{/* span={2}*/}
|
{/* span={2}*/}
|
||||||
{/* label={t("bills.labels.federal_tax_exempt")}*/}
|
{/* label={t("bills.labels.federal_tax_exempt")}*/}
|
||||||
{/* name="federal_tax_exempt"*/}
|
{/* name="federal_tax_exempt"*/}
|
||||||
{/* >*/}
|
{/* >*/}
|
||||||
{/* <Switch onChange={handleFederalTaxExemptSwitchToggle} />*/}
|
{/* <Switch onChange={handleFederalTaxExemptSwitchToggle} />*/}
|
||||||
{/* </Form.Item>*/}
|
{/* </Form.Item>*/}
|
||||||
{/* ) : null}*/}
|
{/* ) : null}*/}
|
||||||
<Form.Item shouldUpdate span={13}>
|
<Form.Item shouldUpdate span={13}>
|
||||||
|
|||||||
@@ -540,7 +540,7 @@ export function BillEnterModalLinesComponent({
|
|||||||
// key: `${field.index}fedtax`,
|
// key: `${field.index}fedtax`,
|
||||||
// valuePropName: "checked",
|
// valuePropName: "checked",
|
||||||
// // initialValue: true,
|
// // initialValue: true,
|
||||||
// name: [field.name, "applicable_taxes", "federal"],
|
// name: [field.name, "applicable_taxes", "federal"],
|
||||||
// };
|
// };
|
||||||
// },
|
// },
|
||||||
// formInput: (record, index) => <Switch disabled={disabled} />,
|
// formInput: (record, index) => <Switch disabled={disabled} />,
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import {useTranslation} from "react-i18next";
|
|||||||
import {connect} from "react-redux";
|
import {connect} from "react-redux";
|
||||||
import {createStructuredSelector} from "reselect";
|
import {createStructuredSelector} from "reselect";
|
||||||
import {selectBodyshop, selectCurrentUser,} from "../../redux/user/user.selectors";
|
import {selectBodyshop, selectCurrentUser,} from "../../redux/user/user.selectors";
|
||||||
|
|
||||||
const mapStateToProps = createStructuredSelector({
|
const mapStateToProps = createStructuredSelector({
|
||||||
currentUser: selectCurrentUser,
|
currentUser: selectCurrentUser,
|
||||||
bodyshop: selectBodyshop,
|
bodyshop: selectBodyshop,
|
||||||
|
|||||||
@@ -48,7 +48,14 @@ export function FormDatePicker({
|
|||||||
const v = e.target.value;
|
const v = e.target.value;
|
||||||
if (!v) return;
|
if (!v) return;
|
||||||
|
|
||||||
const formats = ["MMDDYY", "MMDDYYYY", "MMDD", "MM/DD/YY", "MM/DD/YYYY"];
|
const formats = [
|
||||||
|
"MMDDYY", "MMDDYYYY", "MM/DD/YY", "MM/DD/YYYY",
|
||||||
|
"M/DD/YY", "M/DD/YYYY",
|
||||||
|
"MM/D/YY", "MM/D/YYYY", "M/D/YY", "M/D/YYYY",
|
||||||
|
"D/MM/YY", "D/MM/YYYY",
|
||||||
|
"DD/M/YY", "DD/M/YYYY", "D/M/YY", "D/M/YYYY"
|
||||||
|
];
|
||||||
|
|
||||||
let _a;
|
let _a;
|
||||||
|
|
||||||
// Iterate through formats to find the correct one
|
// Iterate through formats to find the correct one
|
||||||
|
|||||||
@@ -499,9 +499,9 @@ function Header({
|
|||||||
key: 'beta-switch',
|
key: 'beta-switch',
|
||||||
style: {marginLeft: 'auto'},
|
style: {marginLeft: 'auto'},
|
||||||
label: (
|
label: (
|
||||||
<Tooltip title="A more modern ImEX Online is ready for you to try! You can switch back at any time.">
|
<Tooltip title="A more modern Rome Online is ready for you to try! You can switch back at any time.">
|
||||||
<InfoCircleOutlined/>
|
<InfoCircleOutlined/>
|
||||||
<span style={{marginRight: 8}}>Try the new ImEX Online</span>
|
<span style={{marginRight: 8}}>Try the new Rome Online</span>
|
||||||
<Switch
|
<Switch
|
||||||
checked={betaSwitch}
|
checked={betaSwitch}
|
||||||
onChange={betaSwitchChange}
|
onChange={betaSwitchChange}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import {useParams} from "react-router-dom";
|
|||||||
import {logImEXEvent} from "../../../../firebase/firebase.utils";
|
import {logImEXEvent} from "../../../../firebase/firebase.utils";
|
||||||
import {GenerateDocument, GenerateDocuments,} from "../../../../utils/RenderTemplate";
|
import {GenerateDocument, GenerateDocuments,} from "../../../../utils/RenderTemplate";
|
||||||
import {TemplateList} from "../../../../utils/TemplateConstants";
|
import {TemplateList} from "../../../../utils/TemplateConstants";
|
||||||
|
|
||||||
const TemplateListGenerated = TemplateList();
|
const TemplateListGenerated = TemplateList();
|
||||||
|
|
||||||
export default function JobIntakeTemplateList({templates}) {
|
export default function JobIntakeTemplateList({templates}) {
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ import JobLinesBillRefernece from "../job-lines-bill-reference/job-lines-bill-re
|
|||||||
// import AllocationsBulkAssignmentContainer from "../allocations-bulk-assignment/allocations-bulk-assignment.container";
|
// import AllocationsBulkAssignmentContainer from "../allocations-bulk-assignment/allocations-bulk-assignment.container";
|
||||||
// import AllocationsEmployeeLabelContainer from "../allocations-employee-label/allocations-employee-label.container";
|
// import AllocationsEmployeeLabelContainer from "../allocations-employee-label/allocations-employee-label.container";
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
import {selectBodyshop} from "../../redux/user/user.selectors";
|
|
||||||
import JobCreateIOU from "../job-create-iou/job-create-iou.component";
|
import JobCreateIOU from "../job-create-iou/job-create-iou.component";
|
||||||
import JobSendPartPriceChangeComponent from "../job-send-parts-price-change/job-send-parts-price-change.component";
|
import JobSendPartPriceChangeComponent from "../job-send-parts-price-change/job-send-parts-price-change.component";
|
||||||
import PartsOrderModalContainer from "../parts-order-modal/parts-order-modal.container";
|
import PartsOrderModalContainer from "../parts-order-modal/parts-order-modal.container";
|
||||||
import JobLinesExpander from "./job-lines-expander.component";
|
import JobLinesExpander from "./job-lines-expander.component";
|
||||||
|
import {selectBodyshop} from "../../redux/user/user.selectors";
|
||||||
import dayjs from "../../utils/day";
|
import dayjs from "../../utils/day";
|
||||||
import JobLinesPartPriceChange from "./job-lines-part-price-change.component";
|
import JobLinesPartPriceChange from "./job-lines-part-price-change.component";
|
||||||
import JoblineTeamAssignment from "../job-line-team-assignment/job-line-team-assignmnent.component";
|
import JoblineTeamAssignment from "../job-line-team-assignment/job-line-team-assignmnent.component";
|
||||||
|
|||||||
@@ -2,8 +2,7 @@ import {useMutation} from "@apollo/client";
|
|||||||
import {Button, Space, notification} from "antd";
|
import {Button, Space, notification} from "antd";
|
||||||
import React, {useState} from "react";
|
import React, {useState} from "react";
|
||||||
import {useTranslation} from "react-i18next";
|
import {useTranslation} from "react-i18next";
|
||||||
|
import dayjs from '../../utils/day';
|
||||||
import moment from "moment";
|
|
||||||
import {connect} from "react-redux";
|
import {connect} from "react-redux";
|
||||||
import {createStructuredSelector} from "reselect";
|
import {createStructuredSelector} from "reselect";
|
||||||
import {INSERT_EXPORT_LOG} from "../../graphql/accounting.queries";
|
import {INSERT_EXPORT_LOG} from "../../graphql/accounting.queries";
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import {useMutation} from "@apollo/client";
|
import {useMutation} from "@apollo/client";
|
||||||
import {Switch, notification} from "antd";
|
import { notification, Switch} from "antd";
|
||||||
import React, {useState} from "react";
|
import React, {useState} from "react";
|
||||||
import {useTranslation} from "react-i18next";
|
import {useTranslation} from "react-i18next";
|
||||||
import {connect} from "react-redux";
|
import {connect} from "react-redux";
|
||||||
|
|||||||
@@ -459,7 +459,7 @@ async function CheckTaxRates(estData, bodyshop) {
|
|||||||
// ) {
|
// ) {
|
||||||
// const res = await confirmDialog(
|
// const res = await confirmDialog(
|
||||||
// `Rome Online has detected that there is a missing tax rate for LKQ parts. Pressing OK will set the tax rate to ${bodyshop.bill_tax_rates.state_tax_rate}% and enable the rate. Pressing cancel will keep the tax rate as is.`
|
// `Rome Online has detected that there is a missing tax rate for LKQ parts. Pressing OK will set the tax rate to ${bodyshop.bill_tax_rates.state_tax_rate}% and enable the rate. Pressing cancel will keep the tax rate as is.`
|
||||||
// );
|
// );
|
||||||
// if (res) {
|
// if (res) {
|
||||||
// if (!estData.parts_tax_rates.PAL) {
|
// if (!estData.parts_tax_rates.PAL) {
|
||||||
// estData.parts_tax_rates.PAL = {
|
// estData.parts_tax_rates.PAL = {
|
||||||
@@ -482,7 +482,7 @@ async function CheckTaxRates(estData, bodyshop) {
|
|||||||
// ) {
|
// ) {
|
||||||
// const res = await confirmDialog(
|
// const res = await confirmDialog(
|
||||||
// `Rome Online has detected that there is a missing tax rate for rechromed parts. Pressing OK will set the tax rate to ${bodyshop.bill_tax_rates.state_tax_rate}% and enable the rate. Pressing cancel will keep the tax rate as is.`
|
// `Rome Online has detected that there is a missing tax rate for rechromed parts. Pressing OK will set the tax rate to ${bodyshop.bill_tax_rates.state_tax_rate}% and enable the rate. Pressing cancel will keep the tax rate as is.`
|
||||||
// );
|
// );
|
||||||
// if (res) {
|
// if (res) {
|
||||||
// if (!estData.parts_tax_rates.PAC) {
|
// if (!estData.parts_tax_rates.PAC) {
|
||||||
// estData.parts_tax_rates.PAC = {
|
// estData.parts_tax_rates.PAC = {
|
||||||
@@ -498,9 +498,9 @@ async function CheckTaxRates(estData, bodyshop) {
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
//PAM Check
|
//PAM Check
|
||||||
if (!estData.parts_tax_rates?.PAM) {
|
if (!estData.parts_tax_rates?.PAM) {
|
||||||
estData.parts_tax_rates.PAM = estData.parts_tax_rates.PAC;
|
estData.parts_tax_rates.PAM = estData.parts_tax_rates.PAC;
|
||||||
}
|
}
|
||||||
|
|
||||||
// //PAM Check
|
// //PAM Check
|
||||||
@@ -534,7 +534,7 @@ async function CheckTaxRates(estData, bodyshop) {
|
|||||||
// ) {
|
// ) {
|
||||||
// const res = await confirmDialog(
|
// const res = await confirmDialog(
|
||||||
// `Rome Online has detected that there is a missing tax rate for recored parts. Pressing OK will set the tax rate to ${bodyshop.bill_tax_rates.state_tax_rate}% and enable the rate. Pressing cancel will keep the tax rate as is.`
|
// `Rome Online has detected that there is a missing tax rate for recored parts. Pressing OK will set the tax rate to ${bodyshop.bill_tax_rates.state_tax_rate}% and enable the rate. Pressing cancel will keep the tax rate as is.`
|
||||||
// );
|
// );
|
||||||
// if (res) {
|
// if (res) {
|
||||||
// if (!estData.parts_tax_rates.PAR) {
|
// if (!estData.parts_tax_rates.PAR) {
|
||||||
// estData.parts_tax_rates.PAR = {
|
// estData.parts_tax_rates.PAR = {
|
||||||
|
|||||||
@@ -23,9 +23,9 @@ export function JobsDetailDatesComponent({jobRO, job, bodyshop}) {
|
|||||||
);
|
);
|
||||||
}, [job.status, bodyshop.md_ro_statuses.post_production_statuses]);
|
}, [job.status, bodyshop.md_ro_statuses.post_production_statuses]);
|
||||||
|
|
||||||
const calcRepairDays =
|
const calcRepairDays = job?.joblines?.length ?
|
||||||
job.joblines.reduce((acc, val) => acc + val.mod_lb_hrs, 0) /
|
job.joblines.reduce((acc, val) => acc + val.mod_lb_hrs, 0) /
|
||||||
(bodyshop.target_touchtime === 0 ? 1 : bodyshop.target_touchtime);
|
(bodyshop.target_touchtime === 0 ? 1 : bodyshop.target_touchtime) : [];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
@@ -43,5 +43,4 @@ export default function AddToProduction(
|
|||||||
|
|
||||||
//insert the new job. call the callback with the returned ID when done.
|
//insert the new job. call the callback with the returned ID when done.
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -898,7 +898,7 @@ export function JobsDetailHeaderActions({
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
if (job.csiinvites.length) {
|
if (job?.csiinvites?.length) {
|
||||||
children.push(
|
children.push(
|
||||||
{
|
{
|
||||||
type: "divider"
|
type: "divider"
|
||||||
|
|||||||
@@ -59,7 +59,6 @@ export default async function DuplicateJob(
|
|||||||
|
|
||||||
//insert the new job. call the callback with the returned ID when done.
|
//insert the new job. call the callback with the returned ID when done.
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function CreateIouForJob(
|
export async function CreateIouForJob(
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ export function JobsDetailHeader({job, bodyshop, disabled}) {
|
|||||||
{job.alt_transport}
|
{job.alt_transport}
|
||||||
<JobAltTransportChange job={job}/>
|
<JobAltTransportChange job={job}/>
|
||||||
</DataLabel>
|
</DataLabel>
|
||||||
{job.cccontracts.length > 0 && (
|
{job?.cccontracts?.length > 0 && (
|
||||||
<DataLabel label={t("jobs.labels.contracts")}>
|
<DataLabel label={t("jobs.labels.contracts")}>
|
||||||
{job.cccontracts.map((c) => (
|
{job.cccontracts.map((c) => (
|
||||||
<Link
|
<Link
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import {connect} from "react-redux";
|
|||||||
import {createStructuredSelector} from "reselect";
|
import {createStructuredSelector} from "reselect";
|
||||||
import {selectJobReadOnly} from "../../redux/application/application.selectors";
|
import {selectJobReadOnly} from "../../redux/application/application.selectors";
|
||||||
import {selectBodyshop} from "../../redux/user/user.selectors";
|
import {selectBodyshop} from "../../redux/user/user.selectors";
|
||||||
|
|
||||||
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
|
import CurrencyInput from "../form-items-formatted/currency-form-item.component";
|
||||||
import JobsDetailRatesChangeButton from "../jobs-detail-rates-change-button/jobs-detail-rates-change-button.component";
|
import JobsDetailRatesChangeButton from "../jobs-detail-rates-change-button/jobs-detail-rates-change-button.component";
|
||||||
import JobsMarkPstExempt from "../jobs-mark-pst-exempt/jobs-mark-pst-exempt.component";
|
import JobsMarkPstExempt from "../jobs-mark-pst-exempt/jobs-mark-pst-exempt.component";
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ export function ReportCenterModalComponent({reportCenterModal, bodyshop}) {
|
|||||||
splitKey: bodyshop.imexshopid,
|
splitKey: bodyshop.imexshopid,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const {t} = useTranslation();
|
const {t} = useTranslation();
|
||||||
const Templates = TemplateList("report_center");
|
const Templates = TemplateList("report_center");
|
||||||
@@ -275,7 +274,7 @@ export function ReportCenterModalComponent({reportCenterModal, bodyshop}) {
|
|||||||
>
|
>
|
||||||
<DatePicker.RangePicker
|
<DatePicker.RangePicker
|
||||||
format="MM/DD/YYYY"
|
format="MM/DD/YYYY"
|
||||||
ranges={DatePIckerRanges}
|
presets={DatePIckerRanges}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -35,9 +35,13 @@ if (process.env.NODE_ENV !== "development") {
|
|||||||
maskAllText: false,
|
maskAllText: false,
|
||||||
blockAllMedia: true,
|
blockAllMedia: true,
|
||||||
}),
|
}),
|
||||||
new Sentry.BrowserTracing(),
|
new Sentry.BrowserTracing({}),
|
||||||
],
|
],
|
||||||
tracesSampleRate: 1.0,
|
tracePropagationTargets: [
|
||||||
|
"api.imex.online",
|
||||||
|
"api.test.imex.online",
|
||||||
|
"db.imex.online",
|
||||||
|
],tracesSampleRate: 1.0,
|
||||||
replaysOnErrorSampleRate: 1.0,
|
replaysOnErrorSampleRate: 1.0,
|
||||||
environment: process.env.NODE_ENV,
|
environment: process.env.NODE_ENV,
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import QueueAnim from 'rc-queue-anim';
|
import QueueAnim from 'rc-queue-anim';
|
||||||
import {Row, Col} from 'antd';
|
import { Col, Row} from 'antd';
|
||||||
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
|
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
|
||||||
import {getChildrenToRender} from './utils';
|
import {getChildrenToRender} from './utils';
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,8 @@ import React from 'react';
|
|||||||
import TweenOne from 'rc-tween-one';
|
import TweenOne from 'rc-tween-one';
|
||||||
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
|
import OverPack from 'rc-scroll-anim/lib/ScrollOverPack';
|
||||||
import QueueAnim from 'rc-queue-anim';
|
import QueueAnim from 'rc-queue-anim';
|
||||||
import {Row, Col} from 'antd';
|
import { Col, Row} from 'antd';
|
||||||
import {getChildrenToRender} from './utils';
|
import {getChildrenToRender,isImg} from './utils';
|
||||||
import {isImg} from './utils';
|
|
||||||
|
|
||||||
class Footer extends React.Component {
|
class Footer extends React.Component {
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
|
|||||||
@@ -399,7 +399,7 @@ const transformJobToForm = (job) => {
|
|||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
transformedJob.loss_date = transformedJob.loss_date ? dayjs(transformedJob.loss_date) : null;
|
transformedJob.loss_date = transformedJob.loss_date ? dayjs(transformedJob.loss_date) : null;
|
||||||
transformedJob.date_estimated = transformedJob.date_estimated ? dayjs(transformedJob.date_estimated) : null;
|
transformedJob.date_estimated = transformedJob.date_estimated ? dayjs(transformedJob.date_estimated) : null;
|
||||||
|
|
||||||
return transformedJob;
|
return transformedJob;
|
||||||
};
|
};
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
import {clientsClaim} from 'workbox-core';
|
import {clientsClaim} from 'workbox-core';
|
||||||
import {ExpirationPlugin} from 'workbox-expiration';
|
import {ExpirationPlugin} from 'workbox-expiration';
|
||||||
import {precacheAndRoute, createHandlerBoundToURL} from 'workbox-precaching';
|
import { createHandlerBoundToURL, precacheAndRoute} from 'workbox-precaching';
|
||||||
import {registerRoute} from 'workbox-routing';
|
import {registerRoute} from 'workbox-routing';
|
||||||
import {StaleWhileRevalidate} from 'workbox-strategies';
|
import {StaleWhileRevalidate} from 'workbox-strategies';
|
||||||
|
|
||||||
|
|||||||
@@ -808,7 +808,7 @@ function CalculateTaxesTotals(job, otherTotals) {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
} else if (!val.part_type) {
|
} else if (!val.part_type) {
|
||||||
//Do nothing for now.
|
//Do nothing for now.
|
||||||
} else {
|
} else {
|
||||||
const typeOfPart = val.part_type;
|
const typeOfPart = val.part_type;
|
||||||
|
|
||||||
@@ -1043,7 +1043,7 @@ function CalculateTaxesTotals(job, otherTotals) {
|
|||||||
); // THis is currently using the lbr tax rate from PFH not PFL.
|
); // THis is currently using the lbr tax rate from PFH not PFL.
|
||||||
}
|
}
|
||||||
|
|
||||||
//console.log("Labor Tax Total", laborTaxTotal.toFormat());
|
//console.log("Labor Tax Total", laborTaxTotal.toFormat());
|
||||||
|
|
||||||
let ret = {
|
let ret = {
|
||||||
subtotal: subtotal,
|
subtotal: subtotal,
|
||||||
@@ -1093,7 +1093,7 @@ function CalculateTaxesTotals(job, otherTotals) {
|
|||||||
exports.default = Totals;
|
exports.default = Totals;
|
||||||
|
|
||||||
function DiscountNotAlreadyCounted(jobline, joblines) {
|
function DiscountNotAlreadyCounted(jobline, joblines) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.DiscountNotAlreadyCounted = DiscountNotAlreadyCounted;
|
exports.DiscountNotAlreadyCounted = DiscountNotAlreadyCounted;
|
||||||
|
|||||||
Reference in New Issue
Block a user