@@ -19,22 +17,6 @@ export default function JobsCreateVehicleInfoComponent({ loading, vehicles }) {
/>
-
{
- setState({
- ...state,
- vehicle: {
- ...state.vehicle,
- new: !state.vehicle.new,
- selectedid: null
- }
- });
- }}
- >
- {t("jobs.labels.create.newvehicle")}
-
diff --git a/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.new.component.jsx b/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.new.component.jsx
index 17cf1727d..015c60e53 100644
--- a/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.new.component.jsx
+++ b/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.new.component.jsx
@@ -1,14 +1,30 @@
-import { DatePicker, Form, Input } from "antd";
+import { DatePicker, Form, Input, Checkbox } from "antd";
import React, { useContext } from "react";
import { useTranslation } from "react-i18next";
import JobCreateContext from "../../pages/jobs-create/jobs-create.context";
export default function JobsCreateVehicleInfoNewComponent() {
- const [state] = useContext(JobCreateContext);
+ const [state, setState] = useContext(JobCreateContext);
const { t } = useTranslation();
return (
+
{
+ setState({
+ ...state,
+ vehicle: {
+ ...state.vehicle,
+ new: !state.vehicle.new,
+ selectedid: null
+ }
+ });
+ }}
+ >
+ {t("jobs.labels.create.newvehicle")}
+
+
+
+
+
+ content: ,
+ validation: !!state.vehicle.new || !!state.vehicle.selectedid,
+ error: t("vehicles.errors.selectexistingornew")
},
{
title: t("jobs.labels.create.ownerinfo"),
- content:
+ content: ,
+ validation: !!state.owner.new || !!state.owner.selectedid,
+ error: t("owners.errors.selectexistingornew")
},
{
title: t("jobs.labels.create.jobinfo"),
- content: "Last-content"
+ content:
}
];
@@ -28,8 +38,49 @@ export default function JobsCreateComponent() {
const prev = () => {
setPageIndex(pageIndex - 1);
};
-
const { Step } = Steps;
+
+ const ProgressButtons = () => {
+ return (
+
+ {pageIndex > 0 && (
+
+ )}
+ {pageIndex < steps.length - 1 && (
+
+ )}
+ {pageIndex === steps.length - 1 && (
+
+ )}
+
+ );
+ };
+
return (
@@ -39,38 +90,33 @@ export default function JobsCreateComponent() {
title={item.title}
style={{ cursor: "pointer" }}
onClick={() => {
- setPageIndex(idx);
+ form
+ .validateFields()
+ .then(r => {
+ if (steps[pageIndex].validation) {
+ setErrorMessage(null);
+ setPageIndex(idx);
+ } else {
+ setErrorMessage(steps[pageIndex].error);
+ }
+ })
+ .catch(error => console.log("error", error));
}}
/>
))}
+
+
+ {errorMessage ? (
+
+ ) : null}
{steps.map((item, idx) => (
{item.content}
))}
-
-
- {pageIndex > 0 && (
-
- )}
- {pageIndex < steps.length - 1 && (
-
- )}
- {pageIndex === steps.length - 1 && (
-
- )}
-
+
);
}
diff --git a/client/src/pages/jobs-create/jobs-create.container.jsx b/client/src/pages/jobs-create/jobs-create.container.jsx
index b745431e7..e6ca9409e 100644
--- a/client/src/pages/jobs-create/jobs-create.container.jsx
+++ b/client/src/pages/jobs-create/jobs-create.container.jsx
@@ -2,28 +2,71 @@ import React, { useState } from "react";
import JobsCreateComponent from "./jobs-create.component";
import { Form } from "antd";
import JobCreateContext from "./jobs-create.context";
-export default function JobsCreateContainer() {
- const [form] = Form.useForm();
+import { useMutation, useLazyQuery } from "react-apollo";
+import { INSERT_NEW_JOB } from "../../graphql/jobs.queries";
+import { QUERY_OWNER_FOR_JOB_CREATION } from "../../graphql/owners.queries";
+import { connect } from "react-redux";
+import { createStructuredSelector } from "reselect";
+import { selectBodyshop } from "../../redux/user/user.selectors";
+const mapStateToProps = createStructuredSelector({
+ bodyshop: selectBodyshop
+});
+export default connect(mapStateToProps, null)(JobsCreateContainer);
+function JobsCreateContainer({ bodyshop }) {
const contextState = useState({
vehicle: { new: false, search: "", selectedid: null },
owner: { new: false, search: "", selectedid: null },
job: null
});
-
+ const [form] = Form.useForm();
const [state] = contextState;
+ const [insertJob] = useMutation(INSERT_NEW_JOB);
+ const [loadOwner] = useLazyQuery(QUERY_OWNER_FOR_JOB_CREATION);
const handleFinish = values => {
console.log("Form Values", values);
- //const vehicleSpread = state.vehicle.selectedid ? {vehicleid: state.vehicle.selectedid} : {vehicle: {data: { ...values.vehicle} }
- const job = Object.assign(
+ console.log("state", state);
+ let job = Object.assign(
{},
+ values,
{
vehicle: state.vehicle.selectedid ? null : values.vehicle,
vehicleid: state.vehicle.selectedid || null
+ },
+ {
+ owner: state.owner.selectedid ? null : values.owner,
+ ownerid: state.owner.selectedid || null
+ },
+ {
+ status: bodyshop.md_ro_statuses.default_imported || "Open*", //Pull from redux store.
+ shopid: bodyshop.id
}
);
+
+ if (!!job.owner) {
+ //spread the owner into to the job
+ console.log("Spread New Owner");
+ let ownerData = job.owner.data;
+ delete ownerData.allow_text_message;
+ delete ownerData.preferred_contact;
+ job = { ...job, ...ownerData };
+ runInsertJob(job);
+ } else {
+ //lookup the owner and spread it then.
+ loadOwner({
+ variables: { id: state.owner.selectedid },
+ onCompleted: data => {
+ console.log("data", data);
+ runInsertJob({ ...job, ...data.owners_by_pk });
+ }
+ });
+ }
+ };
+
+ const runInsertJob = job => {
console.log("Job To Save", job);
+ insertJob({ variables: { job: job } });
};
return (
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index 229cffc7f..384a32028 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -303,6 +303,7 @@
"addNote": "Add Note",
"changestatus": "Change Status",
"convert": "Convert",
+ "manualnew": "Create New Job Manually",
"postInvoices": "Post Invoices",
"printCenter": "Print Center",
"schedule": "Schedule"
@@ -416,7 +417,6 @@
"labels": {
"appointmentconfirmation": "Send confirmation to customer?",
"audit": "Audit Trail",
- "available_new_jobs": "",
"availablenew": "Available New Jobs",
"availablesupplements": "Available Supplements",
"cards": {
@@ -435,6 +435,7 @@
},
"create": {
"jobinfo": "Job Info",
+ "newowner": "Create a new Owner instead. ",
"newvehicle": "Create a new Vehicle Instead",
"ownerinfo": "Owner Info",
"vehicleinfo": "Vehicle Info"
@@ -522,7 +523,8 @@
},
"owners": {
"errors": {
- "noaccess": "The record does not exist or you do not have access to it. "
+ "noaccess": "The record does not exist or you do not have access to it. ",
+ "selectexistingornew": "Select an existing owner record or create a new one. "
},
"fields": {
"address": "Address",
@@ -605,6 +607,7 @@
"vehicles": {
"errors": {
"noaccess": "The vehicle does not exist or you do not have access to it.",
+ "selectexistingornew": "Select an existing vehicle record or create a new one. ",
"validation": "Please ensure all fields are entered correctly.",
"validationtitle": "Validation Error"
},
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 1cfd7e801..20022889c 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -303,6 +303,7 @@
"addNote": "Añadir la nota",
"changestatus": "Cambiar Estado",
"convert": "Convertir",
+ "manualnew": "",
"postInvoices": "Contabilizar facturas",
"printCenter": "Centro de impresión",
"schedule": "Programar"
@@ -416,7 +417,6 @@
"labels": {
"appointmentconfirmation": "¿Enviar confirmación al cliente?",
"audit": "",
- "available_new_jobs": "",
"availablenew": "",
"availablesupplements": "",
"cards": {
@@ -435,6 +435,7 @@
},
"create": {
"jobinfo": "",
+ "newowner": "",
"newvehicle": "",
"ownerinfo": "",
"vehicleinfo": ""
@@ -522,7 +523,8 @@
},
"owners": {
"errors": {
- "noaccess": "El registro no existe o no tiene acceso a él."
+ "noaccess": "El registro no existe o no tiene acceso a él.",
+ "selectexistingornew": ""
},
"fields": {
"address": "Dirección",
@@ -605,6 +607,7 @@
"vehicles": {
"errors": {
"noaccess": "El vehículo no existe o usted no tiene acceso a él.",
+ "selectexistingornew": "",
"validation": "Asegúrese de que todos los campos se ingresen correctamente.",
"validationtitle": "Error de validacion"
},
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 57a1c513d..cb31d9d0c 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -303,6 +303,7 @@
"addNote": "Ajouter une note",
"changestatus": "Changer le statut",
"convert": "Convertir",
+ "manualnew": "",
"postInvoices": "Poster des factures",
"printCenter": "Centre d'impression",
"schedule": "Programme"
@@ -416,7 +417,6 @@
"labels": {
"appointmentconfirmation": "Envoyer une confirmation au client?",
"audit": "",
- "available_new_jobs": "",
"availablenew": "",
"availablesupplements": "",
"cards": {
@@ -435,6 +435,7 @@
},
"create": {
"jobinfo": "",
+ "newowner": "",
"newvehicle": "",
"ownerinfo": "",
"vehicleinfo": ""
@@ -522,7 +523,8 @@
},
"owners": {
"errors": {
- "noaccess": "L'enregistrement n'existe pas ou vous n'y avez pas accès."
+ "noaccess": "L'enregistrement n'existe pas ou vous n'y avez pas accès.",
+ "selectexistingornew": ""
},
"fields": {
"address": "Adresse",
@@ -605,6 +607,7 @@
"vehicles": {
"errors": {
"noaccess": "Le véhicule n'existe pas ou vous n'y avez pas accès.",
+ "selectexistingornew": "",
"validation": "Veuillez vous assurer que tous les champs sont correctement entrés.",
"validationtitle": "Erreur de validation"
},