@@ -121,6 +121,7 @@ export default function AccountingPayablesTableComponent({ loading, bills }) {
|
|||||||
billId={record.id}
|
billId={record.id}
|
||||||
disabled={transInProgress || !!record.exported}
|
disabled={transInProgress || !!record.exported}
|
||||||
loadingCallback={setTransInProgress}
|
loadingCallback={setTransInProgress}
|
||||||
|
setSelectedBills={setSelectedBills}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ export default function AccountingPayablesTableComponent({
|
|||||||
paymentId={record.id}
|
paymentId={record.id}
|
||||||
disabled={transInProgress || !!record.exportedat}
|
disabled={transInProgress || !!record.exportedat}
|
||||||
loadingCallback={setTransInProgress}
|
loadingCallback={setTransInProgress}
|
||||||
|
setSelectedPayments={setSelectedPayments}
|
||||||
/>
|
/>
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ export default function AccountingReceivablesTableComponent({ loading, jobs }) {
|
|||||||
<JobExportButton
|
<JobExportButton
|
||||||
jobId={record.id}
|
jobId={record.id}
|
||||||
disabled={!!record.date_exported}
|
disabled={!!record.date_exported}
|
||||||
|
setSelectedJobs={setSelectedJobs}
|
||||||
/>
|
/>
|
||||||
<Link to={`/manage/jobs/${record.id}/close`}>
|
<Link to={`/manage/jobs/${record.id}/close`}>
|
||||||
<Button>{t("jobs.labels.viewallocations")}</Button>
|
<Button>{t("jobs.labels.viewallocations")}</Button>
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import {
|
|||||||
import { Col, notification, Row } from "antd";
|
import { Col, notification, Row } from "antd";
|
||||||
import Axios from "axios";
|
import Axios from "axios";
|
||||||
import Dinero from "dinero.js";
|
import Dinero from "dinero.js";
|
||||||
import _ from "lodash";
|
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import queryString from "query-string";
|
import queryString from "query-string";
|
||||||
import React, { useCallback, useEffect, useState } from "react";
|
import React, { useCallback, useEffect, useState } from "react";
|
||||||
@@ -90,13 +89,7 @@ export function JobsAvailableContainer({
|
|||||||
|
|
||||||
const estData = replaceEmpty(estDataRaw.data.available_jobs_by_pk);
|
const estData = replaceEmpty(estDataRaw.data.available_jobs_by_pk);
|
||||||
|
|
||||||
if (
|
if (!(estData && estData.est_data)) {
|
||||||
!(
|
|
||||||
|
|
||||||
estData &&
|
|
||||||
estData.est_data
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
//We don't have the right data. Error!
|
//We don't have the right data. Error!
|
||||||
setInsertLoading(false);
|
setInsertLoading(false);
|
||||||
notification["error"]({
|
notification["error"]({
|
||||||
@@ -115,10 +108,7 @@ export function JobsAvailableContainer({
|
|||||||
).data;
|
).data;
|
||||||
|
|
||||||
let existingVehicles;
|
let existingVehicles;
|
||||||
if (
|
if (estData.est_data.vehicle && estData.est_data.vin) {
|
||||||
estData.est_data.vehicle &&
|
|
||||||
estData.est_data.vin
|
|
||||||
) {
|
|
||||||
//There's vehicle data, need to double check the VIN.
|
//There's vehicle data, need to double check the VIN.
|
||||||
existingVehicles = await client.query({
|
existingVehicles = await client.query({
|
||||||
query: SEARCH_VEHICLE_BY_VIN,
|
query: SEARCH_VEHICLE_BY_VIN,
|
||||||
@@ -196,14 +186,10 @@ export function JobsAvailableContainer({
|
|||||||
|
|
||||||
setJobModalVisible(false);
|
setJobModalVisible(false);
|
||||||
setInsertLoading(true);
|
setInsertLoading(true);
|
||||||
const estData = replaceEmpty(estDataRaw.data.available_jobs_by_pk);
|
|
||||||
if (
|
const estData = estDataRaw.data.available_jobs_by_pk;
|
||||||
!(
|
|
||||||
|
if (!(estData && estData.est_data)) {
|
||||||
estData &&
|
|
||||||
estData.est_data
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
//We don't have the right data. Error!
|
//We don't have the right data. Error!
|
||||||
setInsertLoading(false);
|
setInsertLoading(false);
|
||||||
notification["error"]({
|
notification["error"]({
|
||||||
@@ -211,18 +197,19 @@ export function JobsAvailableContainer({
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
//create upsert job
|
//create upsert job
|
||||||
let supp = _.cloneDeep(estData.est_data);
|
let supp = replaceEmpty({ ...estData.est_data });
|
||||||
|
|
||||||
delete supp.owner;
|
delete supp.owner;
|
||||||
delete supp.vehicle;
|
delete supp.vehicle;
|
||||||
if (importOptions.overrideHeaders) {
|
delete supp.ins_co_nm;
|
||||||
|
if (!importOptions.overrideHeaders) {
|
||||||
HeaderFields.forEach((item) => delete supp[item]);
|
HeaderFields.forEach((item) => delete supp[item]);
|
||||||
}
|
}
|
||||||
|
|
||||||
let suppDelta = await GetSupplementDelta(
|
let suppDelta = await GetSupplementDelta(
|
||||||
client,
|
client,
|
||||||
selectedJob,
|
selectedJob,
|
||||||
estData.est_data.joblines.data
|
supp.joblines.data
|
||||||
);
|
);
|
||||||
|
|
||||||
delete supp.joblines;
|
delete supp.joblines;
|
||||||
@@ -394,10 +381,10 @@ export default connect(
|
|||||||
)(JobsAvailableContainer);
|
)(JobsAvailableContainer);
|
||||||
|
|
||||||
function replaceEmpty(someObj, replaceValue = null) {
|
function replaceEmpty(someObj, replaceValue = null) {
|
||||||
const replacer = (key, value) => (value === "" ? replaceValue : value);
|
const replacer = (key, value) =>
|
||||||
|
value === "" ? replaceValue || null : value;
|
||||||
//^ because you seem to want to replace (strings) "null" or "undefined" too
|
//^ because you seem to want to replace (strings) "null" or "undefined" too
|
||||||
console.log(someObj)
|
|
||||||
const temp = JSON.stringify(someObj, replacer);
|
const temp = JSON.stringify(someObj, replacer);
|
||||||
console.log(`temp`, temp);
|
console.log("Parsed", JSON.parse(temp));
|
||||||
return JSON.parse(temp);
|
return JSON.parse(temp);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ export function JobsCloseAutoAllocate({ bodyshop, joblines, form, disabled }) {
|
|||||||
}
|
}
|
||||||
//Verify that this is also manually updated in server/job-costing
|
//Verify that this is also manually updated in server/job-costing
|
||||||
if (!jl.part_type && !jl.mod_lbr_ty) {
|
if (!jl.part_type && !jl.mod_lbr_ty) {
|
||||||
const lineDesc = jl.line_desc.toLowerCase();
|
const lineDesc = jl.line_desc ? jl.line_desc.toLowerCase() : "";
|
||||||
if (lineDesc.includes("shop materials")) {
|
if (lineDesc.includes("shop materials")) {
|
||||||
ret.profitcenter_part = defaults.profits["MASH"];
|
ret.profitcenter_part = defaults.profits["MASH"];
|
||||||
} else if (lineDesc.includes("paint/materials")) {
|
} else if (lineDesc.includes("paint/materials")) {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export function JobsCloseExportButton({
|
|||||||
currentUser,
|
currentUser,
|
||||||
jobId,
|
jobId,
|
||||||
disabled,
|
disabled,
|
||||||
|
setSelectedJobs,
|
||||||
}) {
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const [updateJob] = useMutation(UPDATE_JOB);
|
const [updateJob] = useMutation(UPDATE_JOB);
|
||||||
@@ -147,6 +148,11 @@ export function JobsCloseExportButton({
|
|||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (setSelectedJobs) {
|
||||||
|
setSelectedJobs((selectedJobs) => {
|
||||||
|
return selectedJobs.filter((i) => i.id !== jobId);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export function PayableExportButton({
|
|||||||
billId,
|
billId,
|
||||||
disabled,
|
disabled,
|
||||||
loadingCallback,
|
loadingCallback,
|
||||||
|
setSelectedBills,
|
||||||
}) {
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const [updateBill] = useMutation(UPDATE_BILLS);
|
const [updateBill] = useMutation(UPDATE_BILLS);
|
||||||
@@ -142,6 +143,11 @@ export function PayableExportButton({
|
|||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (setSelectedBills) {
|
||||||
|
setSelectedBills((selectedBills) => {
|
||||||
|
return selectedBills.filter((i) => i.id !== billId);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!!loadingCallback) loadingCallback(false);
|
if (!!loadingCallback) loadingCallback(false);
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export function PaymentExportButton({
|
|||||||
paymentId,
|
paymentId,
|
||||||
disabled,
|
disabled,
|
||||||
loadingCallback,
|
loadingCallback,
|
||||||
|
setSelectedPayments,
|
||||||
}) {
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const [updatePayment] = useMutation(UPDATE_PAYMENTS);
|
const [updatePayment] = useMutation(UPDATE_PAYMENTS);
|
||||||
@@ -141,6 +142,12 @@ export function PaymentExportButton({
|
|||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (setSelectedPayments) {
|
||||||
|
setSelectedPayments((selectedBills) => {
|
||||||
|
return selectedBills.filter((i) => i.id !== paymentId);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!!loadingCallback) loadingCallback(false);
|
if (!!loadingCallback) loadingCallback(false);
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import {
|
|||||||
validatePasswordResetSuccess,
|
validatePasswordResetSuccess,
|
||||||
} from "./user.actions";
|
} from "./user.actions";
|
||||||
import UserActionTypes from "./user.types";
|
import UserActionTypes from "./user.types";
|
||||||
|
import * as Sentry from "@sentry/browser";
|
||||||
|
|
||||||
export function* onEmailSignInStart() {
|
export function* onEmailSignInStart() {
|
||||||
yield takeLatest(UserActionTypes.EMAIL_SIGN_IN_START, signInWithEmail);
|
yield takeLatest(UserActionTypes.EMAIL_SIGN_IN_START, signInWithEmail);
|
||||||
@@ -178,6 +179,11 @@ export function* signInSuccessSaga({ payload }) {
|
|||||||
]);
|
]);
|
||||||
console.log("Setting $crisp segments", ["user"]);
|
console.log("Setting $crisp segments", ["user"]);
|
||||||
window.$crisp.push(["set", "session:segments", [["user"]]]);
|
window.$crisp.push(["set", "session:segments", [["user"]]]);
|
||||||
|
|
||||||
|
Sentry.setUser({
|
||||||
|
email: payload.email,
|
||||||
|
username: payload.displayName || payload.email,
|
||||||
|
});
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log("Error updating Crisp settings.", error);
|
console.log("Error updating Crisp settings.", error);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -605,7 +605,7 @@ const formatGpPercent = (gppercent) => {
|
|||||||
const getAdditionalCostCenter = (jl, profitCenters) => {
|
const getAdditionalCostCenter = (jl, profitCenters) => {
|
||||||
console.log("Checking additional cost center", jl.line_desc);
|
console.log("Checking additional cost center", jl.line_desc);
|
||||||
if (!jl.part_type && !jl.mod_lbr_ty) {
|
if (!jl.part_type && !jl.mod_lbr_ty) {
|
||||||
const lineDesc = jl.line_desc.toLowerCase();
|
const lineDesc = jl.line_desc ? jl.line_desc.toLowerCase() : "";
|
||||||
//This logic is covered prior and assigned based on the labor type of the lines
|
//This logic is covered prior and assigned based on the labor type of the lines
|
||||||
// if (lineDesc.includes("shop materials")) {
|
// if (lineDesc.includes("shop materials")) {
|
||||||
// return profitCenters["MASH"];
|
// return profitCenters["MASH"];
|
||||||
|
|||||||
Reference in New Issue
Block a user