Merged in release/2021-12-17 (pull request #313)
release/2021-12-17 Approved-by: Patrick Fic
This commit is contained in:
4
.vscode/settings.json
vendored
4
.vscode/settings.json
vendored
@@ -3,6 +3,10 @@
|
||||
{
|
||||
"pattern": "**/Test.xml",
|
||||
"systemId": "file:///Users/pfic/Downloads/IMEX.xsd"
|
||||
},
|
||||
{
|
||||
"pattern": "**/IMEX.xml",
|
||||
"systemId": "logs/IMEX.xsd"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -134,3 +134,11 @@
|
||||
background: unset;
|
||||
}
|
||||
}
|
||||
|
||||
.ReactGridGallery_tile-icon-bar {
|
||||
div {
|
||||
svg {
|
||||
fill: #1890ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,13 +110,6 @@ export function AccountingReceivablesTableComponent({
|
||||
sorter: (a, b) => alphaSort(a.clm_no, b.clm_no),
|
||||
sortOrder:
|
||||
state.sortedInfo.columnKey === "clm_no" && state.sortedInfo.order,
|
||||
render: (text, record) => {
|
||||
return record.clm_no ? (
|
||||
<span>{record.clm_no}</span>
|
||||
) : (
|
||||
t("general.labels.unknown")
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: t("jobs.fields.clm_total"),
|
||||
@@ -126,11 +119,7 @@ export function AccountingReceivablesTableComponent({
|
||||
sortOrder:
|
||||
state.sortedInfo.columnKey === "clm_total" && state.sortedInfo.order,
|
||||
render: (text, record) => {
|
||||
return record.clm_total ? (
|
||||
<CurrencyFormatter>{record.clm_total}</CurrencyFormatter>
|
||||
) : (
|
||||
t("general.labels.unknown")
|
||||
);
|
||||
return <CurrencyFormatter>{record.clm_total}</CurrencyFormatter>;
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import React, { useState, useEffect } from "react";
|
||||
import { Input, notification, Space } from "antd";
|
||||
import { FieldTimeOutlined } from "@ant-design/icons";
|
||||
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
|
||||
import { useMutation } from "@apollo/client";
|
||||
import { UPDATE_JOB_LINE } from "../../graphql/jobs-lines.queries";
|
||||
import { Input, notification } from "antd";
|
||||
import React, { useEffect, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { UPDATE_JOB_LINE } from "../../graphql/jobs-lines.queries";
|
||||
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
|
||||
|
||||
export default function JobLineNotePopup({ jobline, disabled }) {
|
||||
const [editing, setEditing] = useState(false);
|
||||
@@ -57,21 +57,21 @@ export default function JobLineNotePopup({ jobline, disabled }) {
|
||||
);
|
||||
return (
|
||||
<div>
|
||||
{jobline.ioucreated && (
|
||||
<Space>
|
||||
<FieldTimeOutlined />
|
||||
{t("joblines.labels.ioucreated")}
|
||||
</Space>
|
||||
)}
|
||||
<div
|
||||
style={{
|
||||
width: "100%",
|
||||
minHeight: "2rem",
|
||||
...(jobline.ioucreated ? {} : { minHeight: "2rem" }),
|
||||
cursor: "pointer",
|
||||
}}
|
||||
onClick={() => !disabled && setEditing(true)}
|
||||
>
|
||||
{jobline.notes}
|
||||
{jobline.ioucreated && (
|
||||
<div>
|
||||
<FieldTimeOutlined style={{ margin: 0, padding: 0 }} />
|
||||
{t("joblines.labels.ioucreated")}
|
||||
</div>
|
||||
)}
|
||||
{jobline.notes || null}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -61,6 +61,7 @@ export function JobLineStatusPopup({ bodyshop, jobline, disabled }) {
|
||||
value={status}
|
||||
onSelect={handleChange}
|
||||
onBlur={handleSave}
|
||||
onClear={() => handleChange(null)}
|
||||
>
|
||||
{Object.values(bodyshop.md_order_statuses).map((s, idx) => (
|
||||
<Select.Option key={idx} value={s}>
|
||||
|
||||
@@ -109,7 +109,7 @@ export async function CreateIouForJob(
|
||||
delete line.id;
|
||||
delete line.__typename;
|
||||
line.oem_partno = `${line.oem_partno ? `${line.oem_partno} - ` : ``}IOU $${
|
||||
line.act_price || 0
|
||||
(line.act_price && line.act_price.toFixed(2)) || 0
|
||||
}/${line.mod_lb_hrs || 0}hrs`;
|
||||
line.act_price = 0;
|
||||
line.mod_lb_hrs = 0;
|
||||
|
||||
@@ -5,6 +5,7 @@ const moment = require("moment");
|
||||
var builder = require("xmlbuilder2");
|
||||
const _ = require("lodash");
|
||||
const logger = require("../utils/logger");
|
||||
const fs = require("fs");
|
||||
require("dotenv").config({
|
||||
path: path.resolve(
|
||||
process.cwd(),
|
||||
@@ -47,7 +48,7 @@ exports.default = async (req, res) => {
|
||||
try {
|
||||
const { jobs } = await client.request(queries.AUTOHOUSE_QUERY, {
|
||||
bodyshopid: bodyshop.id,
|
||||
start: moment().subtract(30, "days").startOf("day"),
|
||||
start: moment().subtract(3, "days").startOf("day"),
|
||||
});
|
||||
|
||||
const autoHouseObject = {
|
||||
@@ -111,13 +112,16 @@ exports.default = async (req, res) => {
|
||||
});
|
||||
}
|
||||
}
|
||||
res.json(allxmlsToUpload);
|
||||
|
||||
if (process.env.NODE_ENV !== "production") {
|
||||
res.json(allxmlsToUpload);
|
||||
return;
|
||||
//if (process.env.NODE_ENV !== "production") {
|
||||
for (const xmlObj of allxmlsToUpload) {
|
||||
fs.writeFileSync(`./logs/${xmlObj.filename}`, xmlObj.xml);
|
||||
}
|
||||
|
||||
res.json(allxmlsToUpload);
|
||||
return;
|
||||
// }
|
||||
|
||||
let sftp = new Client();
|
||||
sftp.on("error", (errors) =>
|
||||
logger.log("autohouse-sftp-error", "ERROR", "api", null, {
|
||||
@@ -631,8 +635,9 @@ const CreateCosts = (job) => {
|
||||
billTotalsByCostCenters[defaultCosts.PAP] || Dinero()
|
||||
),
|
||||
PartsAMCost: billTotalsByCostCenters[defaultCosts.PAA] || Dinero(),
|
||||
PartsReconditionedCost: Dinero(),
|
||||
PartsRecycledCost: billTotalsByCostCenters[defaultCosts.PAR] || Dinero(),
|
||||
PartsReconditionedCost:
|
||||
billTotalsByCostCenters[defaultCosts.PAM] || Dinero(),
|
||||
PartsRecycledCost: billTotalsByCostCenters[defaultCosts.PAL] || Dinero(),
|
||||
PartsOtherCost: billTotalsByCostCenters[defaultCosts.PAO] || Dinero(),
|
||||
SubletTotalCost: billTotalsByCostCenters[defaultCosts.PAS] || Dinero(),
|
||||
BodyLaborTotalCost: ticketTotalsByCostCenter[defaultCosts.LAB] || Dinero(),
|
||||
@@ -700,7 +705,7 @@ const GenerateDetailLines = (line, statuses) => {
|
||||
OrderedOn: null,
|
||||
OriginalCost: null,
|
||||
OriginalInvoiceNumber: null,
|
||||
PriceEach: (line.billlines[0] && line.billlines[0].actual_cost) || 0,
|
||||
PriceEach: (line.billlines[0] && line.billlines[0].retail_price) || 0,
|
||||
PartNumber: _.escape(line.oem_partno),
|
||||
ProfitPercent: null,
|
||||
PurchaseOrderNumber: null,
|
||||
@@ -717,7 +722,7 @@ const GenerateDetailLines = (line, statuses) => {
|
||||
OrderedBy: null,
|
||||
ShipVia: null,
|
||||
VendorContact: null,
|
||||
EstimateAmount: line.act_price || 0,
|
||||
EstimateAmount: line.act_price * line.part_qty || 0, //Rebecca
|
||||
};
|
||||
return ret;
|
||||
};
|
||||
|
||||
@@ -525,7 +525,7 @@ exports.QUERY_EMPLOYEE_PIN = `query QUERY_EMPLOYEE_PIN($shopId: uuid!, $employee
|
||||
}`;
|
||||
|
||||
exports.AUTOHOUSE_QUERY = `query AUTOHOUSE_EXPORT($start: timestamptz, $bodyshopid: uuid!) {
|
||||
jobs(where: {_and: [{converted: {_eq: true}}, {updated_at: {_gt: $start}}, {shopid: {_eq: $bodyshopid}}]} ) {
|
||||
jobs(where: {_and: [{converted: {_eq: true}}, {updated_at: {_gt: $start}}, {shopid: {_eq: $bodyshopid}}]}) {
|
||||
id
|
||||
ro_number
|
||||
status
|
||||
|
||||
Reference in New Issue
Block a user