Merged in feature/2021-08-13 (pull request #180)

Feature/2021 08 13
This commit is contained in:
Patrick Fic
2021-08-13 19:09:00 +00:00
10 changed files with 43 additions and 28 deletions

View File

@@ -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>
), ),

View File

@@ -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}
/> />
), ),
}, },

View File

@@ -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>

View File

@@ -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 (
!(
estData && const estData = estDataRaw.data.available_jobs_by_pk;
estData.est_data
) if (!(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);
} }

View File

@@ -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")) {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
} }

View File

@@ -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"];