-
- {steps.map((item, 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 ? (
+ {state.created ? (
-
-
+
+
+ ,
+
+
+
+ ]}
+ />
- ) : null}
+ ) : (
+
+
+ {steps.map((item, idx) => (
+ {
+ form
+ .validateFields()
+ .then(r => {
+ if (steps[pageIndex].validation) {
+ setErrorMessage(null);
+ setPageIndex(idx);
+ } else {
+ setErrorMessage(steps[pageIndex].error);
+ }
+ })
+ .catch(error => console.log("error", error));
+ }}
+ />
+ ))}
+
+
- {steps.map((item, idx) => (
-
- {item.content}
+ {errorMessage ? (
+
+ ) : null}
+
+ {steps.map((item, idx) => (
+
+ {item.content}
+
+ ))}
+
- ))}
-
+ )}
);
}
diff --git a/client/src/pages/jobs-create/jobs-create.container.jsx b/client/src/pages/jobs-create/jobs-create.container.jsx
index 6c0e21251..de241aaed 100644
--- a/client/src/pages/jobs-create/jobs-create.container.jsx
+++ b/client/src/pages/jobs-create/jobs-create.container.jsx
@@ -1,6 +1,6 @@
import React, { useState, useEffect } from "react";
import JobsCreateComponent from "./jobs-create.component";
-import { Form } from "antd";
+import { Form, notification } from "antd";
import JobCreateContext from "./jobs-create.context";
import { useMutation, useLazyQuery } from "@apollo/react-hooks";
import { INSERT_NEW_JOB } from "../../graphql/jobs.queries";
@@ -8,19 +8,26 @@ 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";
+import { useTranslation } from "react-i18next";
+
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop
});
export default connect(mapStateToProps, null)(JobsCreateContainer);
function JobsCreateContainer({ bodyshop }) {
+ const { t } = useTranslation();
const contextState = useState({
vehicle: { new: false, search: "", selectedid: null },
owner: { new: false, search: "", selectedid: null },
- job: null
+ job: null,
+ created: false,
+ error: null,
+ newJobId: null,
+ newJobEstNum: null
});
const [form] = Form.useForm();
- const [state] = contextState;
+ const [state, setState] = contextState;
const [insertJob] = useMutation(INSERT_NEW_JOB);
const [loadOwner, RemoteOwnerData] = useLazyQuery(
QUERY_OWNER_FOR_JOB_CREATION
@@ -37,7 +44,22 @@ function JobsCreateContainer({ bodyshop }) {
const runInsertJob = job => {
console.log("Job To Save", job);
- insertJob({ variables: { job: job } });
+ insertJob({ variables: { job: job } })
+ .then(resp => {
+ setState({
+ ...state,
+ created: true,
+ error: null,
+ newJobId: resp.data.insert_jobs.returning[0].id,
+ newJobEstNum: resp.data.insert_jobs.returning[0].est_number
+ });
+ })
+ .catch(error => {
+ notification["error"]({
+ message: t("jobs.errors.creating", { error: error })
+ });
+ setState({ ...state, error: error });
+ });
};
const handleFinish = values => {
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index d90c90cce..7a2970ee1 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -306,6 +306,7 @@
"addNote": "Add Note",
"changestatus": "Change Status",
"convert": "Convert",
+ "gotojob": "Go to Job",
"manualnew": "Create New Job Manually",
"postInvoices": "Post Invoices",
"printCenter": "Print Center",
@@ -458,6 +459,8 @@
"all_deleted": "{{count}} jobs deleted successfully.",
"converted": "Job converted successfully.",
"created": "Job created successfully. Click to view.",
+ "created_subtitle": "Estimate Number {{est_number}} has been created.",
+ "creatednoclick": "Job created successfully. ",
"deleted": "Job deleted successfully.",
"save": "Job saved successfully.",
"savetitle": "Record saved successfully.",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 3e4569125..fd513c3aa 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -306,6 +306,7 @@
"addNote": "Añadir la nota",
"changestatus": "Cambiar Estado",
"convert": "Convertir",
+ "gotojob": "",
"manualnew": "",
"postInvoices": "Contabilizar facturas",
"printCenter": "Centro de impresión",
@@ -458,6 +459,8 @@
"all_deleted": "{{count}} trabajos eliminados con éxito.",
"converted": "Trabajo convertido con éxito.",
"created": "Trabajo creado con éxito. Click para ver.",
+ "created_subtitle": "",
+ "creatednoclick": "",
"deleted": "Trabajo eliminado con éxito.",
"save": "Trabajo guardado con éxito.",
"savetitle": "Registro guardado con éxito.",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 5b518e56c..234fec4f2 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -306,6 +306,7 @@
"addNote": "Ajouter une note",
"changestatus": "Changer le statut",
"convert": "Convertir",
+ "gotojob": "",
"manualnew": "",
"postInvoices": "Poster des factures",
"printCenter": "Centre d'impression",
@@ -458,6 +459,8 @@
"all_deleted": "{{count}} travaux supprimés avec succès.",
"converted": "Travail converti avec succès.",
"created": "Le travail a été créé avec succès. Clique pour voir.",
+ "created_subtitle": "",
+ "creatednoclick": "",
"deleted": "Le travail a bien été supprimé.",
"save": "Le travail a été enregistré avec succès.",
"savetitle": "Enregistrement enregistré avec succès.",
diff --git a/client/src/utils/TestingHelpers.js b/client/src/utils/TestingHelpers.js
new file mode 100644
index 000000000..806feaa8b
--- /dev/null
+++ b/client/src/utils/TestingHelpers.js
@@ -0,0 +1,148 @@
+export const MockBodyshop = {
+ address1: "123 Fake St",
+ address2: "Unit #100",
+ city: "Vancouver",
+ country: "Canada",
+ created_at: "2019-12-10T20:03:06.420853+00:00",
+ email: "snaptsoft@gmail.com",
+ federal_tax_id: "GST10150492",
+ id: "52b7357c-0edd-4c95-85c3-dfdbcdfad9ac",
+ insurance_vendor_id: "F123456",
+ logo_img_path: "https://www.snapt.ca/assets/logo-placeholder.png",
+ md_ro_statuses: {
+ statuses: [
+ "Open",
+ "Scheduled",
+ "Arrived",
+ "Repair Plan",
+ "Parts",
+ "Body",
+ "Prep",
+ "Paint",
+ "Reassembly",
+ "Sublet",
+ "Detail",
+ "Completed",
+ "Delivered",
+ "Invoiced",
+ "Exported"
+ ],
+ open_statuses: [
+ "Open",
+ "Scheduled",
+ "Arrived",
+ "Repair Plan",
+ "Parts",
+ "Body",
+ "Prep",
+ "Paint"
+ ],
+ default_arrived: "Arrived",
+ default_exported: "Exported",
+ default_imported: "Open",
+ default_invoiced: "Invoiced",
+ default_completed: "Completed",
+ default_delivered: "Delivered",
+ default_scheduled: "Scheduled"
+ },
+ md_order_statuses: {
+ statuses: ["Ordered", "Received", "Canceled", "Backordered"],
+ default_bo: "Backordered",
+ default_ordered: "Ordered",
+ default_canceled: "Canceled",
+ default_received: "Received"
+ },
+ shopname: "Testing Collision",
+ state: "BC",
+ state_tax_id: "PST1000-2991",
+ updated_at: "2020-03-23T22:06:03.509544+00:00",
+ zip_post: "V6B 1M9",
+ region_config: "CA_BC",
+ md_responsibility_centers: {
+ costs: [
+ "Aftermarket",
+ "ATP",
+ "Body",
+ "Detail",
+ "Daignostic",
+ "Electrical",
+ "Chrome",
+ "Frame",
+ "Mechanical",
+ "Refinish",
+ "Structural",
+ "Existing",
+ "Glass",
+ "LKQ",
+ "OEM",
+ "OEM Partial",
+ "Re-cored",
+ "Remanufactured",
+ "Other",
+ "Sublet",
+ "Towing"
+ ],
+ profits: [
+ "Aftermarket",
+ "ATP",
+ "Body",
+ "Detail",
+ "Daignostic",
+ "Electrical",
+ "Chrome",
+ "Frame",
+ "Mechanical",
+ "Refinish",
+ "Structural",
+ "Existing",
+ "Glass",
+ "LKQ",
+ "OEM",
+ "OEM Partial",
+ "Re-cored",
+ "Remanufactured",
+ "Other",
+ "Sublet",
+ "Towing"
+ ],
+ defaults: {
+ ATP: "ATP",
+ LAB: "Body",
+ LAD: "Diagnostic",
+ LAE: "Electrical",
+ LAF: "Frame",
+ LAG: "Glass",
+ LAM: "Mechanical",
+ LAR: "Refinish",
+ LAS: "Structural",
+ LAU: "Detail",
+ PAA: "Aftermarket",
+ PAC: "Chrome",
+ PAL: "LKQ",
+ PAM: "Remanufactured",
+ PAN: "OEM",
+ PAO: "Other",
+ PAP: "OEM Partial",
+ PAR: "16",
+ TOW: "Towing"
+ }
+ },
+ employees: [
+ {
+ id: "075b744c-8919-49ca-abb2-ccd51040326d",
+ first_name: "Patrick",
+ last_name: "BODY123",
+ employee_number: "101",
+ cost_center: "Body",
+ __typename: "employees"
+ },
+ {
+ id: "8cc787d3-1cfe-49d3-8a15-8469cd5c2e41",
+ first_name: "Patrick",
+ last_name: "Painter",
+ employee_number: "10211",
+ cost_center: "REFINISH",
+ __typename: "employees"
+ }
+ ]
+};