Compare commits
14 Commits
release/20
...
feature/oe
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5db43dd065 | ||
|
|
53be0bbc1a | ||
|
|
bfcc03850b | ||
|
|
65402c1420 | ||
|
|
b462b2fa03 | ||
|
|
0c26b90591 | ||
|
|
f8f2384c54 | ||
|
|
9d35fc85ad | ||
|
|
95e5385cd1 | ||
|
|
87f06425e1 | ||
|
|
120e4fc94c | ||
|
|
ea6277c586 | ||
|
|
dac53a56c3 | ||
|
|
d74870812e |
@@ -4304,6 +4304,27 @@
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>md_email_cc</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
<description></description>
|
||||
<comment></comment>
|
||||
<default_text></default_text>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>es-MX</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-CA</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<folder_node>
|
||||
<name>md_hour_split</name>
|
||||
<children>
|
||||
@@ -30816,6 +30837,27 @@
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>oec</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
<description></description>
|
||||
<comment></comment>
|
||||
<default_text></default_text>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>es-MX</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-CA</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
</children>
|
||||
</folder_node>
|
||||
<folder_node>
|
||||
@@ -31309,6 +31351,27 @@
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>oec</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
<description></description>
|
||||
<comment></comment>
|
||||
<default_text></default_text>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>es-MX</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-CA</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>orderhistory</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
|
||||
@@ -27,7 +27,6 @@ export const tracker = new Tracker({
|
||||
onStart: async ({ sessionID }) => {
|
||||
const user = await getCurrentUser();
|
||||
if (user) tracker.setUserID(user.email);
|
||||
console.log("ORS SESSION ", sessionID, user && user.email);
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -53,7 +53,6 @@ export function App({ checkUserSession, currentUser, online, setOnline }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
window.addEventListener("offline", function (e) {
|
||||
console.log("Internet connection lost.");
|
||||
setOnline(false);
|
||||
});
|
||||
|
||||
|
||||
@@ -157,16 +157,6 @@ export function BillEnterModalLinesComponent({
|
||||
billlines: getFieldsValue("billlines").billlines.map(
|
||||
(item, idx) => {
|
||||
if (idx === index) {
|
||||
console.log(
|
||||
"Found and setting.",
|
||||
!!item.actual_cost
|
||||
? item.actual_cost
|
||||
: Math.round(
|
||||
(parseFloat(e.target.value) * (1 - discount) +
|
||||
Number.EPSILON) *
|
||||
100
|
||||
) / 100
|
||||
);
|
||||
return {
|
||||
...item,
|
||||
actual_cost: !!item.actual_cost
|
||||
|
||||
@@ -14,7 +14,6 @@ const BillLineSearchSelect = ({ options, disabled, ...restProps }, ref) => {
|
||||
showSearch
|
||||
// optionFilterProp="line_desc"
|
||||
filterOption={(inputValue, option) => {
|
||||
console.log(inputValue);
|
||||
return (
|
||||
(option.line_desc &&
|
||||
option.line_desc
|
||||
|
||||
@@ -20,7 +20,6 @@ export function ChatNewConversation({ openChatByPhone }) {
|
||||
const { t } = useTranslation();
|
||||
const [form] = Form.useForm();
|
||||
const handleFinish = (values) => {
|
||||
console.log("values :>> ", values);
|
||||
openChatByPhone({ phone_num: values.phoneNumber });
|
||||
form.resetFields();
|
||||
};
|
||||
|
||||
@@ -86,10 +86,7 @@ export function DashboardGridComponent({ currentUser, bodyshop }) {
|
||||
const handleRemoveComponent = (key) => {
|
||||
logImEXEvent("dashboard_remove_component", { name: key });
|
||||
const idxToRemove = state.items.findIndex((i) => i.i === key);
|
||||
console.log(
|
||||
"🚀 ~ file: dashboard-grid.component.jsx ~ line 81 ~ idxToRemove",
|
||||
idxToRemove
|
||||
);
|
||||
|
||||
const items = _.cloneDeep(state.items);
|
||||
|
||||
items.splice(idxToRemove, 1);
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { Button } from "antd";
|
||||
import axios from "axios";
|
||||
import React, { useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { connect } from "react-redux";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||
import { useTranslation } from "react-i18next";
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
//currentUser: selectCurrentUser
|
||||
bodyshop: selectBodyshop,
|
||||
@@ -19,11 +19,11 @@ export function DmsCdkMakesRefetch({ bodyshop, form, socket }) {
|
||||
const { t } = useTranslation();
|
||||
const handleRefetch = async () => {
|
||||
setLoading(true);
|
||||
const response = await axios.post("/cdk/getvehicles", {
|
||||
await axios.post("/cdk/getvehicles", {
|
||||
cdk_dealerid: bodyshop.cdk_dealerid,
|
||||
bodyshopid: bodyshop.id,
|
||||
});
|
||||
console.log(response);
|
||||
|
||||
setLoading(false);
|
||||
};
|
||||
return (
|
||||
|
||||
@@ -27,7 +27,7 @@ export function DmsLogEvents({ socket, logs, bodyshop }) {
|
||||
<Timeline.Item key={idx} color={LogLevelHierarchy(log.level)}>
|
||||
<Space wrap align="start" style={{}}>
|
||||
<Tag color={LogLevelHierarchy(log.level)}>{log.level}</Tag>
|
||||
<span>{moment(log.timestamp).format("MM/DD/YYYY HH:MM:ss")}</span>
|
||||
<span>{moment(log.timestamp).format("MM/DD/YYYY HH:mm:ss")}</span>
|
||||
<Divider type="vertical" />
|
||||
<span>{log.message}</span>
|
||||
</Space>
|
||||
|
||||
@@ -58,11 +58,9 @@ export function DocumentEditorComponent({ currentUser, bodyshop, document }) {
|
||||
if (imgRef.current !== null) {
|
||||
// create a marker.js MarkerArea
|
||||
markerArea.current = new markerjs2.MarkerArea(imgRef.current);
|
||||
console.log(`markerArea.current`, markerArea.current);
|
||||
|
||||
// attach an event handler to assign annotated image back to our image element
|
||||
markerArea.current.addCloseEventListener((closeEvent) => {
|
||||
console.log("Close Event", closeEvent);
|
||||
});
|
||||
markerArea.current.addCloseEventListener((closeEvent) => {});
|
||||
|
||||
markerArea.current.addRenderEventListener((dataUrl) => {
|
||||
imgRef.current.src = dataUrl;
|
||||
|
||||
@@ -14,8 +14,6 @@ var cleanAxios = axios.create();
|
||||
cleanAxios.interceptors.request.eject(axiosAuthInterceptorId);
|
||||
|
||||
export const handleUpload = (ev, context) => {
|
||||
console.log("Handling Upload", ev);
|
||||
|
||||
logImEXEvent("document_upload", { filetype: ev.file.type });
|
||||
|
||||
const { onError, onSuccess, onProgress } = ev;
|
||||
@@ -61,7 +59,7 @@ export const uploadToCloudinary = async (
|
||||
// let eager = process.env.REACT_APP_CLOUDINARY_THUMB_TRANSFORMATIONS;
|
||||
|
||||
//Get the signed url.
|
||||
console.log("fileType", fileType);
|
||||
|
||||
const upload_preset = fileType.startsWith("video")
|
||||
? "incoming_upload_video"
|
||||
: "incoming_upload";
|
||||
@@ -74,7 +72,6 @@ export const uploadToCloudinary = async (
|
||||
});
|
||||
|
||||
if (signedURLResponse.status !== 200) {
|
||||
console.log("Error Getting Signed URL", signedURLResponse.statusText);
|
||||
if (!!onError) onError(signedURLResponse.statusText);
|
||||
notification["error"]({
|
||||
message: i18n.t("documents.errors.getpresignurl", {
|
||||
@@ -113,13 +110,8 @@ export const uploadToCloudinary = async (
|
||||
...options,
|
||||
}
|
||||
);
|
||||
console.log("Upload Response", cloudinaryUploadResponse.data);
|
||||
|
||||
if (cloudinaryUploadResponse.status !== 200) {
|
||||
console.log(
|
||||
"Error uploading to cloudinary.",
|
||||
cloudinaryUploadResponse.statusText
|
||||
);
|
||||
if (!!onError) onError(cloudinaryUploadResponse.statusText);
|
||||
notification["error"]({
|
||||
message: i18n.t("documents.errors.insert", {
|
||||
|
||||
@@ -35,10 +35,6 @@ export function EmailDocumentsComponent({
|
||||
},
|
||||
skip: !emailConfig.jobid,
|
||||
});
|
||||
console.log(
|
||||
"🚀 ~ file: email-documents.component.jsx ~ line 38 ~ emailConfig",
|
||||
emailConfig
|
||||
);
|
||||
|
||||
return (
|
||||
<div>
|
||||
|
||||
@@ -111,7 +111,6 @@ export function EmailOverlayContainer({
|
||||
notification["success"]({ message: t("emails.successes.sent") });
|
||||
toggleEmailOverlayVisible();
|
||||
} catch (error) {
|
||||
console.log(JSON.stringify(error));
|
||||
notification["error"]({
|
||||
message: t("emails.errors.notsent", { message: error.message }),
|
||||
});
|
||||
@@ -149,6 +148,18 @@ export function EmailOverlayContainer({
|
||||
html: response.data,
|
||||
fileList: [],
|
||||
});
|
||||
|
||||
if (
|
||||
bodyshop.md_email_cc[emailConfig.template.name] &&
|
||||
bodyshop.md_email_cc[emailConfig.template.name].length > 0
|
||||
) {
|
||||
form.setFieldsValue({
|
||||
cc: [
|
||||
...(form.getFieldValue("cc") || []),
|
||||
...bodyshop.md_email_cc[emailConfig.template.name],
|
||||
],
|
||||
});
|
||||
}
|
||||
setLoading(false);
|
||||
};
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ export function EmailTestComponent({ currentUser, setEmailOptions }) {
|
||||
const [form] = Form.useForm();
|
||||
|
||||
const handleFinish = (values) => {
|
||||
console.log("values", values);
|
||||
GenerateDocument(
|
||||
{
|
||||
name: values.key,
|
||||
|
||||
@@ -10,15 +10,11 @@ export default function HelpRescue() {
|
||||
var bodyFormData = new FormData();
|
||||
bodyFormData.append("Code", code);
|
||||
bodyFormData.append("hostederrorhandling", 1);
|
||||
const res1 = await fetch(
|
||||
"https://secure.logmeinrescue.com/Customer/Code.aspx",
|
||||
{
|
||||
mode: "no-cors",
|
||||
method: "POST",
|
||||
body: bodyFormData,
|
||||
}
|
||||
);
|
||||
console.log("handleClick -> res1", await res1.text());
|
||||
await fetch("https://secure.logmeinrescue.com/Customer/Code.aspx", {
|
||||
mode: "no-cors",
|
||||
method: "POST",
|
||||
body: bodyFormData,
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -40,7 +36,6 @@ export default function HelpRescue() {
|
||||
method="post"
|
||||
id="logmeinsupport"
|
||||
onSubmit={(...props) => {
|
||||
console.log(`props`, props);
|
||||
alert();
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -44,7 +44,7 @@ export function Jobd3RdPartyModal({ bodyshop, jobId }) {
|
||||
};
|
||||
const handleFinish = (values) => {
|
||||
const { sendtype, ...restVals } = values;
|
||||
console.log(restVals);
|
||||
|
||||
GenerateDocument(
|
||||
{
|
||||
name: TemplateList("job_special").thirdpartypayer.key,
|
||||
|
||||
@@ -56,7 +56,7 @@ export function ScheduleEventColor({ bodyshop, event }) {
|
||||
<Menu.Item key={"null"}>{t("general.actions.clear")}</Menu.Item>
|
||||
</Menu>
|
||||
);
|
||||
console.log(`event`, event);
|
||||
|
||||
return (
|
||||
<Dropdown overlay={menu}>
|
||||
<a href=" #" onClick={(e) => e.preventDefault()}>
|
||||
|
||||
@@ -176,7 +176,7 @@ export function ScheduleEventComponent({
|
||||
t("appointments.labels.reminder", {
|
||||
shopname: bodyshop.shopname,
|
||||
date: moment(event.start).format("MM/DD/YYYY"),
|
||||
time: moment(event.start).format("HH:MM a"),
|
||||
time: moment(event.start).format("HH:mm a"),
|
||||
})
|
||||
);
|
||||
setVisible(false);
|
||||
|
||||
@@ -55,7 +55,6 @@ export default function JobBillsTotalComponent({
|
||||
);
|
||||
}
|
||||
if (il.deductedfromlbr) {
|
||||
console.log(i, "Deducting from labor.");
|
||||
lbrAdjustments = lbrAdjustments.add(
|
||||
Dinero({
|
||||
amount: Math.round((il.actual_price || 0) * 100),
|
||||
|
||||
@@ -34,7 +34,7 @@ export default function JobIntakeTemplateList({ templates }) {
|
||||
const renderAllTemplates = async () => {
|
||||
logImEXEvent("checklist_render_all_templates");
|
||||
setLoading(true);
|
||||
console.log("templates :>> ", templates);
|
||||
|
||||
await GenerateDocuments(
|
||||
templates.map((key) => {
|
||||
return { name: key, variables: { id: jobId } };
|
||||
|
||||
@@ -35,7 +35,7 @@ export function JobCostingModalContainer({
|
||||
async function getData() {
|
||||
if (jobId && visible) {
|
||||
const { data } = await axios.post("/job/costing", { jobid: jobId });
|
||||
console.log(data);
|
||||
|
||||
setCostingData(data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +77,6 @@ export default function JobCostingPartsTable({ data, summaryData }) {
|
||||
.includes(searchText.toLowerCase())
|
||||
);
|
||||
|
||||
console.log("data :>> ", data);
|
||||
return (
|
||||
<div>
|
||||
<Table
|
||||
|
||||
@@ -42,9 +42,7 @@ export default function ScoreboardAddButton({
|
||||
}, [visibility, job.id, callQuery]);
|
||||
|
||||
useEffect(() => {
|
||||
console.log("UE", entryData);
|
||||
if (entryData && entryData.scoreboard && entryData.scoreboard[0]) {
|
||||
console.log("Setting FOrm");
|
||||
form.setFieldsValue(entryData.scoreboard[0]);
|
||||
}
|
||||
}, [entryData, form]);
|
||||
|
||||
@@ -22,7 +22,6 @@ export function JobsAdminClass({ bodyshop, job }) {
|
||||
const [updateJob] = useMutation(UPDATE_JOB);
|
||||
|
||||
const handleFinish = async (values) => {
|
||||
console.log(values);
|
||||
setLoading(true);
|
||||
const result = await updateJob({
|
||||
variables: { jobId: job.id, job: values },
|
||||
|
||||
@@ -13,7 +13,6 @@ export default function JobsAdminDatesChange({ job }) {
|
||||
const [updateJob] = useMutation(UPDATE_JOB);
|
||||
|
||||
const handleFinish = async (values) => {
|
||||
console.log(values);
|
||||
setLoading(true);
|
||||
const result = await updateJob({
|
||||
variables: { jobId: job.id, job: values },
|
||||
|
||||
@@ -10,7 +10,6 @@ export default function JobAdminOwnerReassociate({ job }) {
|
||||
const [form] = Form.useForm();
|
||||
const [updateJob] = useMutation(UPDATE_JOB);
|
||||
const handleFinish = async (values) => {
|
||||
console.log(values);
|
||||
setLoading(true);
|
||||
const result = await updateJob({
|
||||
variables: { jobId: job.id, job: { ownerid: values.ownerid } },
|
||||
|
||||
@@ -10,7 +10,6 @@ export default function JobAdminOwnerReassociate({ job }) {
|
||||
const [form] = Form.useForm();
|
||||
const [updateJob] = useMutation(UPDATE_JOB);
|
||||
const handleFinish = async (values) => {
|
||||
console.log(values);
|
||||
setLoading(true);
|
||||
const result = await updateJob({
|
||||
variables: { jobId: job.id, job: { vehicleid: values.vehicleid } },
|
||||
|
||||
@@ -3,8 +3,6 @@ import { gql } from "@apollo/client";
|
||||
import _ from "lodash";
|
||||
|
||||
export const GetSupplementDelta = async (client, jobId, newLines) => {
|
||||
console.log("-----Begin Supplement-----");
|
||||
|
||||
const {
|
||||
data: { joblines: existingLinesFromDb },
|
||||
} = await client.query({
|
||||
|
||||
@@ -19,7 +19,6 @@ export default async function DuplicateJob(
|
||||
variables: { id: jobId },
|
||||
});
|
||||
|
||||
console.log("res", res);
|
||||
const { jobs_by_pk } = res.data;
|
||||
const existingJob = _.cloneDeep(jobs_by_pk);
|
||||
delete existingJob.__typename;
|
||||
|
||||
@@ -40,7 +40,6 @@ export function JobsDocumentsGalleryReassign({ bodyshop, galleryImages }) {
|
||||
|
||||
const updateImage = async (i, jobid) => {
|
||||
//Move the cloudinary image
|
||||
console.log(i);
|
||||
|
||||
//Update it in the database.
|
||||
const result = await updateDocument({
|
||||
|
||||
@@ -29,7 +29,7 @@ export function PartnerPingComponent({ setPartnerVersion }) {
|
||||
//if (process.env.NODE_ENV === "development") return;
|
||||
const PartnerResponse = await axios.post("http://localhost:1337/ping/");
|
||||
const { appver, qbpath } = PartnerResponse.data;
|
||||
console.log("SETTING PARTNER VERSION.");
|
||||
|
||||
setPartnerVersion(appver);
|
||||
console.log({ appver, qbpath });
|
||||
if (!qbpath) {
|
||||
|
||||
@@ -164,6 +164,7 @@ export default function PartsOrderModalComponent({
|
||||
<Radio value={"none"}>{t("general.labels.none")}</Radio>
|
||||
<Radio value={"e"}>{t("parts_orders.labels.email")}</Radio>
|
||||
<Radio value={"p"}>{t("parts_orders.labels.print")}</Radio>
|
||||
<Radio value={"oec"}>{t("parts_orders.labels.oec")}</Radio>
|
||||
</Radio.Group>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
import { useMutation, useQuery } from "@apollo/client";
|
||||
import { useMutation, useQuery, useApolloClient } from "@apollo/client";
|
||||
import { Form, Modal, notification } from "antd";
|
||||
import moment from "moment";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { connect } from "react-redux";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
import { logImEXEvent, auth } from "../../firebase/firebase.utils";
|
||||
import { UPDATE_JOB_LINE_STATUS } from "../../graphql/jobs-lines.queries";
|
||||
import { INSERT_NEW_PARTS_ORDERS } from "../../graphql/parts-orders.queries";
|
||||
import {
|
||||
INSERT_NEW_PARTS_ORDERS,
|
||||
QUERY_PARTS_ORDER_OEC,
|
||||
} from "../../graphql/parts-orders.queries";
|
||||
import { QUERY_ALL_VENDORS_FOR_ORDER } from "../../graphql/vendors.queries";
|
||||
import { insertAuditTrail } from "../../redux/application/application.actions";
|
||||
import { setEmailOptions } from "../../redux/email/email.actions";
|
||||
@@ -26,6 +29,7 @@ import { TemplateList } from "../../utils/TemplateConstants";
|
||||
import AlertComponent from "../alert/alert.component";
|
||||
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
|
||||
import PartsOrderModalComponent from "./parts-order-modal.component";
|
||||
import axios from "axios";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
currentUser: selectCurrentUser,
|
||||
@@ -52,7 +56,7 @@ export function PartsOrderModalContainer({
|
||||
insertAuditTrail,
|
||||
}) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const client = useApolloClient();
|
||||
const { visible, context, actions } = partsOrderModal;
|
||||
const {
|
||||
jobId,
|
||||
@@ -175,7 +179,7 @@ export function PartsOrderModalContainer({
|
||||
}
|
||||
|
||||
if (refetch) refetch();
|
||||
toggleModalVisible();
|
||||
|
||||
const Templates = TemplateList("partsorder", context);
|
||||
|
||||
if (sendType === "e") {
|
||||
@@ -215,7 +219,50 @@ export function PartsOrderModalContainer({
|
||||
{},
|
||||
"p"
|
||||
);
|
||||
} else if (sendType === "oec") {
|
||||
//Send to Partner OEC.
|
||||
try {
|
||||
const partsOrder = await client.query({
|
||||
query: QUERY_PARTS_ORDER_OEC,
|
||||
variables: {
|
||||
id: insertResult.data.insert_parts_orders.returning[0].id,
|
||||
},
|
||||
});
|
||||
|
||||
const oecResponse = await axios.post(
|
||||
"http://localhost:1337/oec/",
|
||||
|
||||
partsOrder.data.parts_orders_by_pk,
|
||||
{
|
||||
headers: {
|
||||
Authorization: `Bearer ${await auth.currentUser.getIdToken()}`,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
if (oecResponse.data && oecResponse.data.success === false) {
|
||||
notification.open({
|
||||
type: "error",
|
||||
message: t("parts_orders.errors.oec", {
|
||||
error: oecResponse.data.error,
|
||||
}),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
} catch (error) {
|
||||
console.log("Error OEC.", error);
|
||||
notification["error"]({
|
||||
message: t("parts_orders.errors.oec", {
|
||||
error: JSON.stringify(error.message),
|
||||
}),
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
toggleModalVisible();
|
||||
};
|
||||
|
||||
const initialValues = {
|
||||
|
||||
@@ -60,12 +60,10 @@ export function PartsStatusPie({ bodyshop, joblines_status }) {
|
||||
[pieColor, t]
|
||||
);
|
||||
|
||||
const memoizedData = useMemo(() => Calculatedata(joblines_status), [
|
||||
joblines_status,
|
||||
Calculatedata,
|
||||
]);
|
||||
|
||||
console.log("PartsStatusPie -> memoizedData", memoizedData);
|
||||
const memoizedData = useMemo(
|
||||
() => Calculatedata(joblines_status),
|
||||
[joblines_status, Calculatedata]
|
||||
);
|
||||
|
||||
return (
|
||||
<div>
|
||||
|
||||
@@ -174,18 +174,8 @@ export function ProductionBoardKanbanComponent({
|
||||
: standardSizes[selectedBreakpoint[0]]
|
||||
: "250";
|
||||
|
||||
const Container = styled.div`
|
||||
.react-kanban-card-skeleton,
|
||||
.react-kanban-card,
|
||||
.react-kanban-card-adder-form {
|
||||
box-sizing: border-box;
|
||||
max-width: ${width}px;
|
||||
min-width: ${width}px;
|
||||
}
|
||||
`;
|
||||
|
||||
return (
|
||||
<Container>
|
||||
<Container width={width}>
|
||||
<IndefiniteLoading loading={isMoving} />
|
||||
<PageHeader
|
||||
title={
|
||||
@@ -248,3 +238,13 @@ export default connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(ProductionBoardKanbanComponent);
|
||||
|
||||
const Container = styled.div`
|
||||
.react-kanban-card-skeleton,
|
||||
.react-kanban-card,
|
||||
.react-kanban-card-adder-form {
|
||||
box-sizing: border-box;
|
||||
max-width: ${(props) => props.width}px;
|
||||
min-width: ${(props) => props.width}px;
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -71,7 +71,7 @@ export function ReportCenterModalComponent({ reportCenterModal }) {
|
||||
const start = values.dates[0];
|
||||
const end = values.dates[1];
|
||||
const { id } = values;
|
||||
console.log("values", values);
|
||||
|
||||
await GenerateDocument(
|
||||
{
|
||||
name: values.key,
|
||||
|
||||
@@ -101,7 +101,6 @@ export function ScheduleJobModalContainer({
|
||||
}
|
||||
|
||||
if (existingAppointments.data.appointments.length > 0) {
|
||||
console.log("Cancelling all previous appts.");
|
||||
await Promise.all(
|
||||
existingAppointments.data.appointments.map((app) => {
|
||||
return cancelAppointment({
|
||||
|
||||
@@ -3,12 +3,9 @@ import { Form } from "antd";
|
||||
import ConfigFormComponents from "../config-form-components/config-form-components.component";
|
||||
|
||||
export default function ShopCsiConfigForm({ selectedCsi }) {
|
||||
console.log("ShopCsiConfigForm -> selectedCsi", selectedCsi);
|
||||
const readOnly = !!selectedCsi;
|
||||
const [form] = Form.useForm();
|
||||
const handleFinish = (values) => {
|
||||
console.log("values :>> ", values);
|
||||
};
|
||||
const handleFinish = (values) => {};
|
||||
|
||||
return (
|
||||
<div>
|
||||
|
||||
@@ -467,6 +467,19 @@ export default function ShopInfoGeneral({ form }) {
|
||||
>
|
||||
<Switch />
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name={["md_email_cc", "parts_order"]}
|
||||
label={t("bodyshop.fields.md_email_cc", { template: "parts_order" })}
|
||||
rules={[
|
||||
{
|
||||
required: true,
|
||||
//message: t("general.validation.required"),
|
||||
type: "array",
|
||||
},
|
||||
]}
|
||||
>
|
||||
<Select mode="tags" />
|
||||
</Form.Item>
|
||||
<Form.Item
|
||||
name={["tt_allow_post_to_invoiced"]}
|
||||
label={t("bodyshop.fields.tt_allow_post_to_invoiced")}
|
||||
|
||||
@@ -344,10 +344,6 @@ export default function ShopInfoROStatusComponent({ form }) {
|
||||
|
||||
const ColorPicker = ({ value, onChange, style, ...restProps }) => {
|
||||
const handleChange = (color) => {
|
||||
console.log(
|
||||
"🚀 ~ file: shop-info.rostatus.component.jsx ~ line 345 ~ color",
|
||||
color
|
||||
);
|
||||
if (onChange) onChange(color.rgb);
|
||||
};
|
||||
return (
|
||||
|
||||
@@ -116,11 +116,10 @@ export function TimeTicketModalComponent({
|
||||
<EmployeeSearchSelect
|
||||
options={employeeAutoCompleteOptions}
|
||||
onSelect={(value) => {
|
||||
console.log(value);
|
||||
const emps =
|
||||
employeeAutoCompleteOptions &&
|
||||
employeeAutoCompleteOptions.filter((e) => e.id === value)[0];
|
||||
console.log(emps);
|
||||
|
||||
form.setFieldsValue({ flat_rate: emps && emps.flat_rate });
|
||||
}}
|
||||
/>
|
||||
|
||||
@@ -37,10 +37,9 @@ export function UserValidatePwReset({
|
||||
async function checkCodeValid() {
|
||||
try {
|
||||
const codeValid = await checkActionCode(auth, oobCode);
|
||||
console.log("codeValid :>> ", codeValid);
|
||||
|
||||
setCodeValid({ loading: false, ...codeValid });
|
||||
} catch (error) {
|
||||
console.log("error :>> ", error);
|
||||
setCodeValid({ loading: false, ...error });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ export function VendorsPhonebookAdd({ form, bodyshop, disabled }) {
|
||||
"zip",
|
||||
"country",
|
||||
]);
|
||||
console.log(`VendorValues`, VendorValues);
|
||||
|
||||
const result = await insertPhonebook({
|
||||
variables: {
|
||||
phonebook_entry: [
|
||||
|
||||
@@ -99,6 +99,7 @@ export const QUERY_BODYSHOP = gql`
|
||||
pbs_configuration
|
||||
pbs_serialnumber
|
||||
md_filehandlers
|
||||
md_email_cc
|
||||
employees {
|
||||
user_email
|
||||
id
|
||||
@@ -195,6 +196,7 @@ export const UPDATE_SHOP = gql`
|
||||
pbs_configuration
|
||||
pbs_serialnumber
|
||||
md_filehandlers
|
||||
md_email_cc
|
||||
employees {
|
||||
id
|
||||
first_name
|
||||
|
||||
@@ -11,6 +11,278 @@ export const INSERT_NEW_PARTS_ORDERS = gql`
|
||||
}
|
||||
`;
|
||||
|
||||
export const QUERY_PARTS_ORDER_OEC = gql`
|
||||
query QUERY_PARTS_ORDER_OEC($id: uuid!) {
|
||||
parts_orders_by_pk(id: $id) {
|
||||
parts_order_lines {
|
||||
jobline {
|
||||
tran_code
|
||||
act_price
|
||||
db_ref
|
||||
db_price
|
||||
db_hrs
|
||||
glass_flag
|
||||
id
|
||||
lbr_amt
|
||||
lbr_hrs_j
|
||||
lbr_inc
|
||||
lbr_op
|
||||
lbr_op_j
|
||||
lbr_tax
|
||||
lbr_typ_j
|
||||
line_desc
|
||||
line_ind
|
||||
line_no
|
||||
line_ref
|
||||
location
|
||||
misc_amt
|
||||
misc_sublt
|
||||
misc_tax
|
||||
mod_lb_hrs
|
||||
mod_lbr_ty
|
||||
oem_partno
|
||||
op_code_desc
|
||||
paint_stg
|
||||
paint_tone
|
||||
part_qty
|
||||
part_type
|
||||
price_inc
|
||||
price_j
|
||||
prt_dsmk_m
|
||||
prt_dsmk_p
|
||||
tax_part
|
||||
unq_seq
|
||||
alt_co_id
|
||||
alt_overrd
|
||||
alt_part_i
|
||||
alt_partm
|
||||
alt_partno
|
||||
bett_amt
|
||||
bett_pctg
|
||||
bett_tax
|
||||
bett_type
|
||||
cert_part
|
||||
est_seq
|
||||
}
|
||||
act_price
|
||||
id
|
||||
db_price
|
||||
line_desc
|
||||
quantity
|
||||
}
|
||||
job {
|
||||
bodyshop{
|
||||
shopname
|
||||
bill_tax_rates
|
||||
}
|
||||
ro_number
|
||||
clm_no
|
||||
asgn_no
|
||||
asgn_date
|
||||
state_tax_rate
|
||||
area_of_damage
|
||||
asgn_no
|
||||
asgn_type
|
||||
ciecaid
|
||||
clm_addr1
|
||||
clm_city
|
||||
clm_addr2
|
||||
clm_ct_fn
|
||||
clm_ct_ln
|
||||
clm_ct_ph
|
||||
clm_ct_phx
|
||||
clm_ctry
|
||||
clm_ea
|
||||
clm_fax
|
||||
clm_faxx
|
||||
clm_ofc_id
|
||||
clm_ofc_nm
|
||||
clm_ph1
|
||||
clm_ph1x
|
||||
clm_ph2
|
||||
clm_ph2x
|
||||
clm_st
|
||||
clm_title
|
||||
clm_total
|
||||
clm_zip
|
||||
ded_amt
|
||||
est_addr1
|
||||
est_addr2
|
||||
est_city
|
||||
est_co_nm
|
||||
est_ct_fn
|
||||
est_ctry
|
||||
est_ct_ln
|
||||
est_ea
|
||||
est_ph1
|
||||
est_st
|
||||
est_zip
|
||||
g_bett_amt
|
||||
id
|
||||
ins_addr1
|
||||
ins_city
|
||||
ins_addr2
|
||||
ins_co_id
|
||||
ins_co_nm
|
||||
ins_ct_fn
|
||||
ins_ct_ln
|
||||
ins_ct_ph
|
||||
ins_ct_phx
|
||||
ins_ctry
|
||||
ins_ea
|
||||
ins_fax
|
||||
ins_faxx
|
||||
ins_memo
|
||||
ins_ph1
|
||||
ins_ph1x
|
||||
ins_ph2
|
||||
ins_ph2x
|
||||
ins_st
|
||||
ins_title
|
||||
ins_zip
|
||||
insd_addr1
|
||||
insd_addr2
|
||||
insd_city
|
||||
insd_co_nm
|
||||
insd_ctry
|
||||
insd_ea
|
||||
insd_fax
|
||||
insd_faxx
|
||||
insd_fn
|
||||
insd_ln
|
||||
insd_ph1
|
||||
insd_ph1x
|
||||
insd_ph2
|
||||
insd_ph2x
|
||||
insd_st
|
||||
insd_title
|
||||
insd_zip
|
||||
job_totals
|
||||
loss_cat
|
||||
loss_date
|
||||
loss_desc
|
||||
loss_of_use
|
||||
loss_type
|
||||
ownr_addr1
|
||||
ownr_addr2
|
||||
ownr_city
|
||||
ownr_co_nm
|
||||
ownr_ctry
|
||||
ownr_ea
|
||||
ownr_fax
|
||||
ownr_faxx
|
||||
ownr_ph1
|
||||
ownr_fn
|
||||
ownr_ln
|
||||
ownr_ph1x
|
||||
ownr_ph2
|
||||
ownr_ph2x
|
||||
ownr_st
|
||||
ownr_title
|
||||
ownr_zip
|
||||
parts_tax_rates
|
||||
pay_amt
|
||||
pay_date
|
||||
pay_type
|
||||
pay_chknm
|
||||
payee_nms
|
||||
plate_no
|
||||
plate_st
|
||||
po_number
|
||||
policy_no
|
||||
tax_lbr_rt
|
||||
tax_levies_rt
|
||||
tax_paint_mat_rt
|
||||
tax_predis
|
||||
tax_prethr
|
||||
tax_pstthr
|
||||
tax_registration_number
|
||||
tax_str_rt
|
||||
tax_shop_mat_rt
|
||||
tax_sub_rt
|
||||
tax_thramt
|
||||
tax_tow_rt
|
||||
theft_ind
|
||||
tlos_ind
|
||||
towin
|
||||
v_color
|
||||
v_make_desc
|
||||
v_model_desc
|
||||
v_model_yr
|
||||
v_vin
|
||||
vehicle {
|
||||
v_bstyle
|
||||
v_type
|
||||
v_trimcode
|
||||
v_tone
|
||||
v_stage
|
||||
v_prod_dt
|
||||
v_options
|
||||
v_paint_codes
|
||||
v_model_yr
|
||||
v_model_desc
|
||||
v_mldgcode
|
||||
v_makecode
|
||||
v_make_desc
|
||||
v_engine
|
||||
v_cond
|
||||
v_color
|
||||
trim_color
|
||||
shopid
|
||||
plate_no
|
||||
plate_st
|
||||
db_v_code
|
||||
v_vin
|
||||
}
|
||||
agt_zip
|
||||
agt_st
|
||||
agt_ph2x
|
||||
agt_ph2
|
||||
agt_ph1x
|
||||
agt_ph1
|
||||
agt_lic_no
|
||||
agt_faxx
|
||||
agt_fax
|
||||
agt_ea
|
||||
agt_ctry
|
||||
agt_ct_phx
|
||||
agt_ct_ph
|
||||
agt_ct_ln
|
||||
agt_ct_fn
|
||||
agt_co_nm
|
||||
agt_co_id
|
||||
agt_city
|
||||
agt_addr1
|
||||
agt_addr2
|
||||
adj_g_disc
|
||||
rate_matd
|
||||
rate_mash
|
||||
rate_mapa
|
||||
rate_mahw
|
||||
rate_macs
|
||||
rate_mabl
|
||||
rate_ma3s
|
||||
rate_ma2t
|
||||
rate_ma2s
|
||||
rate_lau
|
||||
rate_las
|
||||
rate_lar
|
||||
rate_lam
|
||||
rate_lag
|
||||
rate_laf
|
||||
rate_lae
|
||||
rate_lad
|
||||
rate_lab
|
||||
rate_laa
|
||||
rate_la4
|
||||
rate_la3
|
||||
rate_la2
|
||||
rate_la1
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
export const DELETE_PARTS_ORDER = gql`
|
||||
mutation DELETE_PARTS_ORDER($partsOrderId: uuid!) {
|
||||
delete_parts_orders_by_pk(id: $partsOrderId) {
|
||||
|
||||
@@ -58,7 +58,7 @@ export default class Home extends React.Component {
|
||||
}, 500);
|
||||
}
|
||||
/* 如果不是 dva 2.0 请删除 end */
|
||||
console.log("Setting $crisp segments", ["lead"]);
|
||||
|
||||
window.$crisp.push(["set", "session:segments", [["lead"]]]);
|
||||
window.$crisp.push([
|
||||
"set",
|
||||
|
||||
@@ -124,11 +124,6 @@ export function ContractDetailPageContainer({
|
||||
if (loading) return <LoadingSpinner />;
|
||||
|
||||
if (!!!data.cccontracts_by_pk) return <NotFound />;
|
||||
console.log(
|
||||
"data.cccontracts_by_pk",
|
||||
!!!data.cccontracts_by_pk,
|
||||
data.cccontracts_by_pk
|
||||
);
|
||||
|
||||
return (
|
||||
<RbacWrapper action="contracts:detail">
|
||||
|
||||
@@ -92,7 +92,7 @@ export function CsiContainerPage({ currentUser }) {
|
||||
/>
|
||||
</Layout>
|
||||
);
|
||||
console.log(bodyshop);
|
||||
|
||||
return (
|
||||
<Layout
|
||||
style={{ height: "100vh", display: "flex", flexDirection: "column" }}
|
||||
|
||||
@@ -10,7 +10,6 @@ export default function MobilePaymentComponent() {
|
||||
const [paymentRequest, setPaymentRequest] = useState(null);
|
||||
useEffect(() => {
|
||||
if (stripe) {
|
||||
console.log("in useeff");
|
||||
const pr = stripe.paymentRequest({
|
||||
country: "CA",
|
||||
displayItems: [{ label: "Deductible", amount: 1 }],
|
||||
@@ -23,10 +22,8 @@ export default function MobilePaymentComponent() {
|
||||
requestPayerEmail: true,
|
||||
});
|
||||
|
||||
console.log("pr", pr);
|
||||
// Check the availability of the Payment Request API.
|
||||
pr.canMakePayment().then((result) => {
|
||||
console.log("result", result);
|
||||
if (result) {
|
||||
setPaymentRequest(pr);
|
||||
} else {
|
||||
@@ -45,7 +42,7 @@ export default function MobilePaymentComponent() {
|
||||
|
||||
if (paymentRequest) {
|
||||
paymentRequest.on("paymentmethod", async (ev) => {
|
||||
//Call server side to get the client secret
|
||||
//Call server side to get the client secret
|
||||
// Confirm the PaymentIntent without handling potential next actions (yet).
|
||||
const { error: confirmError } = await stripe.confirmCardPayment(
|
||||
"clientSecret",
|
||||
@@ -63,14 +60,14 @@ export default function MobilePaymentComponent() {
|
||||
// it to close the browser payment method collection interface.
|
||||
ev.complete("success");
|
||||
// Let Stripe.js handle the rest of the payment flow.
|
||||
const { error, paymentIntent } = await stripe.confirmCardPayment(
|
||||
const { error, //paymentIntent
|
||||
} = await stripe.confirmCardPayment(
|
||||
"clientSecret"
|
||||
);
|
||||
if (error) {
|
||||
// The payment failed -- ask your customer for a new payment method.
|
||||
} else {
|
||||
// The payment has succeeded.
|
||||
console.log('paymentIntent', paymentIntent)
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import React from "react";
|
||||
import MobilePaymentComponent from "./mobile-payment.component";
|
||||
import { Elements } from "@stripe/react-stripe-js";
|
||||
import { loadStripe } from "@stripe/stripe-js";
|
||||
import React from "react";
|
||||
import MobilePaymentComponent from "./mobile-payment.component";
|
||||
|
||||
const stripePromise = new Promise((resolve, reject) => {
|
||||
resolve(
|
||||
|
||||
@@ -120,8 +120,6 @@ export function* calculateScheduleLoad({ payload: end }) {
|
||||
|
||||
yield put(scheduleLoadSuccess(load));
|
||||
} catch (error) {
|
||||
//console.log("Error in sendEmailFailure saga.", error.message);
|
||||
console.log("error", error);
|
||||
yield put(scheduleLoadFailure(error));
|
||||
}
|
||||
}
|
||||
@@ -139,14 +137,7 @@ export function* insertAuditTrailSaga({
|
||||
const state = yield select();
|
||||
const bodyshop = state.user.bodyshop;
|
||||
const currentUser = state.user.currentUser;
|
||||
console.log(
|
||||
"Inserting audit trail for",
|
||||
bodyshop.shopname,
|
||||
currentUser.email,
|
||||
jobid,
|
||||
billid,
|
||||
operation
|
||||
);
|
||||
|
||||
const variables = {
|
||||
auditObj: {
|
||||
bodyshopid: bodyshop.id,
|
||||
|
||||
@@ -178,13 +178,13 @@ export function* signInSuccessSaga({ payload }) {
|
||||
|
||||
try {
|
||||
// window.$crisp.push(["set", "user:email", [payload.email]]);
|
||||
console.log("$crisp set nickname", [payload.displayName || payload.email]);
|
||||
|
||||
window.$crisp.push([
|
||||
"set",
|
||||
"user:nickname",
|
||||
[payload.displayName || payload.email],
|
||||
]);
|
||||
console.log("Setting $crisp segments", ["user"]);
|
||||
|
||||
window.$crisp.push(["set", "session:segments", [["user"]]]);
|
||||
|
||||
Sentry.setUser({
|
||||
@@ -235,7 +235,6 @@ export function* validatePasswordResetStart({ payload: { password, code } }) {
|
||||
yield confirmPasswordReset(auth, code, password);
|
||||
yield put(validatePasswordResetSuccess());
|
||||
} catch (error) {
|
||||
console.log("function*validatePasswordResetStart -> error", error);
|
||||
yield put(validatePasswordResetFailure(error.message));
|
||||
}
|
||||
}
|
||||
@@ -267,7 +266,6 @@ export function* SetAuthLevelFromShopDetails({ payload }) {
|
||||
try {
|
||||
window.$crisp.push(["set", "user:company", [payload.shopname]]);
|
||||
if (authRecord[0] && authRecord[0].user.validemail) {
|
||||
console.log("$crisp user email", authRecord[0].user.email);
|
||||
window.$crisp.push(["set", "user:email", [authRecord[0].user.email]]);
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
@@ -271,6 +271,7 @@
|
||||
"md_ccc_rates": "Courtesy Car Contract Rate Presets",
|
||||
"md_classes": "Classes",
|
||||
"md_ded_notes": "Deductible Notes",
|
||||
"md_email_cc": "Auto Email CC: $t(printcenter.subjects.jobs.{{template}})",
|
||||
"md_hour_split": {
|
||||
"paint": "Paint Hour Split",
|
||||
"prep": "Prep Hour Split"
|
||||
@@ -1832,7 +1833,8 @@
|
||||
"errors": {
|
||||
"associatedbills": "This parts order cannot",
|
||||
"backordering": "Error backordering part {{message}}.",
|
||||
"creating": "Error encountered when creating parts order. "
|
||||
"creating": "Error encountered when creating parts order. ",
|
||||
"oec": "Error creating EMS files for OEC. {{error}}"
|
||||
},
|
||||
"fields": {
|
||||
"act_price": "Price",
|
||||
@@ -1860,6 +1862,7 @@
|
||||
"email": "Send by Email",
|
||||
"inthisorder": "Parts in this Order",
|
||||
"newpartsorder": "New Parts Order",
|
||||
"oec": "Order via OEC",
|
||||
"orderhistory": "Order History",
|
||||
"parts_orders": "Parts Orders",
|
||||
"print": "Show Printed Form",
|
||||
|
||||
@@ -271,6 +271,7 @@
|
||||
"md_ccc_rates": "",
|
||||
"md_classes": "",
|
||||
"md_ded_notes": "",
|
||||
"md_email_cc": "",
|
||||
"md_hour_split": {
|
||||
"paint": "",
|
||||
"prep": ""
|
||||
@@ -1832,7 +1833,8 @@
|
||||
"errors": {
|
||||
"associatedbills": "",
|
||||
"backordering": "",
|
||||
"creating": "Se encontró un error al crear el pedido de piezas."
|
||||
"creating": "Se encontró un error al crear el pedido de piezas.",
|
||||
"oec": ""
|
||||
},
|
||||
"fields": {
|
||||
"act_price": "",
|
||||
@@ -1860,6 +1862,7 @@
|
||||
"email": "Enviar por correo electrónico",
|
||||
"inthisorder": "Partes en este pedido",
|
||||
"newpartsorder": "",
|
||||
"oec": "",
|
||||
"orderhistory": "Historial de pedidos",
|
||||
"parts_orders": "",
|
||||
"print": "Mostrar formulario impreso",
|
||||
|
||||
@@ -271,6 +271,7 @@
|
||||
"md_ccc_rates": "",
|
||||
"md_classes": "",
|
||||
"md_ded_notes": "",
|
||||
"md_email_cc": "",
|
||||
"md_hour_split": {
|
||||
"paint": "",
|
||||
"prep": ""
|
||||
@@ -1832,7 +1833,8 @@
|
||||
"errors": {
|
||||
"associatedbills": "",
|
||||
"backordering": "",
|
||||
"creating": "Erreur rencontrée lors de la création de la commande de pièces."
|
||||
"creating": "Erreur rencontrée lors de la création de la commande de pièces.",
|
||||
"oec": ""
|
||||
},
|
||||
"fields": {
|
||||
"act_price": "",
|
||||
@@ -1860,6 +1862,7 @@
|
||||
"email": "Envoyé par email",
|
||||
"inthisorder": "Pièces dans cette commande",
|
||||
"newpartsorder": "",
|
||||
"oec": "",
|
||||
"orderhistory": "Historique des commandes",
|
||||
"parts_orders": "",
|
||||
"print": "Afficher le formulaire imprimé",
|
||||
|
||||
@@ -195,7 +195,6 @@ export const GenerateDocuments = async (templates) => {
|
||||
};
|
||||
|
||||
const fetchContextData = async (templateObject) => {
|
||||
console.log("Fetching context data", templateObject);
|
||||
const bodyshop = store.getState().user.bodyshop;
|
||||
|
||||
jsreport.headers["Authorization"] =
|
||||
|
||||
@@ -829,6 +829,7 @@
|
||||
- md_ccc_rates
|
||||
- md_classes
|
||||
- md_ded_notes
|
||||
- md_email_cc
|
||||
- md_estimators
|
||||
- md_filehandlers
|
||||
- md_hour_split
|
||||
@@ -908,6 +909,7 @@
|
||||
- md_ccc_rates
|
||||
- md_classes
|
||||
- md_ded_notes
|
||||
- md_email_cc
|
||||
- md_estimators
|
||||
- md_filehandlers
|
||||
- md_hour_split
|
||||
@@ -2158,6 +2160,7 @@
|
||||
- sublet_completed
|
||||
- sublet_ignored
|
||||
- tax_part
|
||||
- tran_code
|
||||
- unq_seq
|
||||
- updated_at
|
||||
select_permissions:
|
||||
@@ -2219,6 +2222,7 @@
|
||||
- sublet_completed
|
||||
- sublet_ignored
|
||||
- tax_part
|
||||
- tran_code
|
||||
- unq_seq
|
||||
- updated_at
|
||||
filter:
|
||||
@@ -2291,6 +2295,7 @@
|
||||
- sublet_completed
|
||||
- sublet_ignored
|
||||
- tax_part
|
||||
- tran_code
|
||||
- unq_seq
|
||||
- updated_at
|
||||
filter:
|
||||
@@ -2303,7 +2308,16 @@
|
||||
_eq: X-Hasura-User-Id
|
||||
- active:
|
||||
_eq: true
|
||||
check: null
|
||||
check:
|
||||
job:
|
||||
bodyshop:
|
||||
associations:
|
||||
_and:
|
||||
- user:
|
||||
authid:
|
||||
_eq: X-Hasura-User-Id
|
||||
- active:
|
||||
_eq: true
|
||||
delete_permissions:
|
||||
- role: user
|
||||
permission:
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
-- Could not auto-generate a down migration.
|
||||
-- Please write an appropriate down migration for the SQL below:
|
||||
-- alter table "public"."bodyshops" add column "md_email_cc" jsonb
|
||||
-- null default jsonb_build_object();
|
||||
@@ -0,0 +1,2 @@
|
||||
alter table "public"."bodyshops" add column "md_email_cc" jsonb
|
||||
null default jsonb_build_object();
|
||||
@@ -0,0 +1,4 @@
|
||||
-- Could not auto-generate a down migration.
|
||||
-- Please write an appropriate down migration for the SQL below:
|
||||
-- alter table "public"."joblines" add column "tran_code" text
|
||||
-- null;
|
||||
@@ -0,0 +1,2 @@
|
||||
alter table "public"."joblines" add column "tran_code" text
|
||||
null;
|
||||
@@ -866,9 +866,9 @@ async function InsertServiceVehicleHistory(socket) {
|
||||
roNumber: socket.JobData.ro_number.match(/\d+/g),
|
||||
mileage: socket.txEnvelope.kmout,
|
||||
openDate: moment(socket.JobData.actual_in).format("YYYY-MM-DD"),
|
||||
openTime: moment(socket.JobData.actual_in).format("HH:MM:ss"),
|
||||
openTime: moment(socket.JobData.actual_in).format("HH:mm:ss"),
|
||||
closeDate: moment(socket.JobData.invoice_date).format("YYYY-MM-DD"),
|
||||
closeTime: moment(socket.JobData.invoice_date).format("HH:MM:ss"),
|
||||
closeTime: moment(socket.JobData.invoice_date).format("HH:mm:ss"),
|
||||
comments: socket.txEnvelope.story,
|
||||
cashierID: socket.JobData.bodyshop.cdk_configuration.cashierid,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user