General gendoc function & reprint parts orders IO-411
This commit is contained in:
@@ -1,15 +1,13 @@
|
||||
import React from "react";
|
||||
import JobIntakeTemplateItem from "../job-checklist-template-item/job-checklist-template-item.component";
|
||||
import { useParams } from "react-router-dom";
|
||||
import RenderTemplate, {
|
||||
displayTemplateInWindow,
|
||||
} from "../../../../utils/RenderTemplate";
|
||||
import { Button } from "antd";
|
||||
import { selectBodyshop } from "../../../../redux/user/user.selectors";
|
||||
import { connect } from "react-redux";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { connect } from "react-redux";
|
||||
import { useParams } from "react-router-dom";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { logImEXEvent } from "../../../../firebase/firebase.utils";
|
||||
import { selectBodyshop } from "../../../../redux/user/user.selectors";
|
||||
import { GenerateDocument } from "../../../../utils/RenderTemplate";
|
||||
import JobIntakeTemplateItem from "../job-checklist-template-item/job-checklist-template-item.component";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
//currentUser: selectCurrentUser
|
||||
@@ -25,14 +23,14 @@ export function JobIntakeTemplateList({ bodyshop, templates }) {
|
||||
const renderTemplate = async (templateKey) => {
|
||||
logImEXEvent("job_checklist_template_render");
|
||||
|
||||
const html = await RenderTemplate(
|
||||
GenerateDocument(
|
||||
{
|
||||
name: templateKey,
|
||||
variables: { id: jobId },
|
||||
},
|
||||
bodyshop
|
||||
{},
|
||||
"p"
|
||||
);
|
||||
displayTemplateInWindow(html);
|
||||
};
|
||||
|
||||
const renderAllTemplates = () => {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { SyncOutlined } from "@ant-design/icons";
|
||||
import { Button, Input, Table, Typography } from "antd";
|
||||
import { MailFilled, PrinterFilled, SyncOutlined } from "@ant-design/icons";
|
||||
import { Button, Input, Space, Table, Typography } from "antd";
|
||||
import queryString from "query-string";
|
||||
import React, { useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
@@ -7,13 +7,15 @@ import { connect } from "react-redux";
|
||||
import { useLocation } from "react-router-dom";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
import { selectJobReadOnly } from "../../redux/application/application.selectors";
|
||||
import { setModalContext } from "../../redux/modals/modals.actions";
|
||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||
import CurrencyFormatter from "../../utils/CurrencyFormatter";
|
||||
import { DateFormatter } from "../../utils/DateFormatter";
|
||||
import { GenerateDocument } from "../../utils/RenderTemplate";
|
||||
import { alphaSort } from "../../utils/sorters";
|
||||
import { TemplateList } from "../../utils/TemplateConstants";
|
||||
import PartsOrderLineBackorderButton from "../parts-order-line-backorder-button/parts-order-line-backorder-button.component";
|
||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||
import { selectJobReadOnly } from "../../redux/application/application.selectors";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
jobRO: selectJobReadOnly,
|
||||
@@ -90,37 +92,67 @@ export function PartsOrderListTableComponent({
|
||||
dataIndex: "actions",
|
||||
key: "actions",
|
||||
render: (text, record) => (
|
||||
<Button
|
||||
disabled={jobRO}
|
||||
onClick={() => {
|
||||
logImEXEvent("parts_order_receive_bill");
|
||||
<Space>
|
||||
<Button
|
||||
disabled={jobRO}
|
||||
onClick={() => {
|
||||
logImEXEvent("parts_order_receive_bill");
|
||||
|
||||
setBillEnterContext({
|
||||
actions: { refetch: refetch },
|
||||
context: {
|
||||
job: job,
|
||||
bill: {
|
||||
vendorid: record.vendor.id,
|
||||
billlines: record.parts_order_lines.map((pol) => {
|
||||
return {
|
||||
joblineid: pol.job_line_id,
|
||||
line_desc: pol.line_desc,
|
||||
quantity: pol.quantity,
|
||||
actual_price: pol.act_price,
|
||||
cost_center: pol.jobline.part_type
|
||||
? responsibilityCenters.defaults.costs[
|
||||
pol.jobline.part_type
|
||||
] || null
|
||||
: null,
|
||||
};
|
||||
}),
|
||||
setBillEnterContext({
|
||||
actions: { refetch: refetch },
|
||||
context: {
|
||||
job: job,
|
||||
bill: {
|
||||
vendorid: record.vendor.id,
|
||||
billlines: record.parts_order_lines.map((pol) => {
|
||||
return {
|
||||
joblineid: pol.job_line_id,
|
||||
line_desc: pol.line_desc,
|
||||
quantity: pol.quantity,
|
||||
actual_price: pol.act_price,
|
||||
cost_center: pol.jobline.part_type
|
||||
? responsibilityCenters.defaults.costs[
|
||||
pol.jobline.part_type
|
||||
] || null
|
||||
: null,
|
||||
};
|
||||
}),
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}}
|
||||
>
|
||||
{t("parts_orders.actions.receivebill")}
|
||||
</Button>
|
||||
});
|
||||
}}
|
||||
>
|
||||
{t("parts_orders.actions.receivebill")}
|
||||
</Button>
|
||||
<PrinterFilled
|
||||
onClick={() =>
|
||||
GenerateDocument(
|
||||
{
|
||||
name: record.isReturn
|
||||
? TemplateList().parts_return_confirmation.key
|
||||
: TemplateList().parts_order_confirmation.key,
|
||||
variables: { id: record.id },
|
||||
},
|
||||
{},
|
||||
"p"
|
||||
)
|
||||
}
|
||||
/>
|
||||
<MailFilled
|
||||
onClick={() =>
|
||||
GenerateDocument(
|
||||
{
|
||||
name: record.isReturn
|
||||
? TemplateList().parts_return_confirmation.key
|
||||
: TemplateList().parts_order_confirmation.key,
|
||||
variables: { id: record.id },
|
||||
},
|
||||
{},
|
||||
"e"
|
||||
)
|
||||
}
|
||||
/>
|
||||
</Space>
|
||||
),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -12,16 +12,14 @@ import { QUERY_ALL_VENDORS_FOR_ORDER } from "../../graphql/vendors.queries";
|
||||
import { setEmailOptions } from "../../redux/email/email.actions";
|
||||
import {
|
||||
setModalContext,
|
||||
toggleModalVisible,
|
||||
toggleModalVisible
|
||||
} from "../../redux/modals/modals.actions";
|
||||
import { selectPartsOrder } from "../../redux/modals/modals.selectors";
|
||||
import {
|
||||
selectBodyshop,
|
||||
selectCurrentUser,
|
||||
selectCurrentUser
|
||||
} from "../../redux/user/user.selectors";
|
||||
import RenderTemplate, {
|
||||
displayTemplateInWindow,
|
||||
} from "../../utils/RenderTemplate";
|
||||
import { GenerateDocument } from "../../utils/RenderTemplate";
|
||||
import { TemplateList } from "../../utils/TemplateConstants";
|
||||
import AlertComponent from "../alert/alert.component";
|
||||
import LoadingSpinner from "../loading-spinner/loading-spinner.component";
|
||||
@@ -157,14 +155,9 @@ export function PartsOrderModalContainer({
|
||||
const matchingVendor = data.vendors.filter(
|
||||
(item) => item.id === values.vendorid
|
||||
)[0];
|
||||
setEmailOptions({
|
||||
messageOptions: {
|
||||
to: matchingVendor ? [matchingVendor.email] : null,
|
||||
replyTo: bodyshop.email,
|
||||
subject: TemplateList("job", bodyshop.shopname)
|
||||
.parts_order_confirmation.subject,
|
||||
},
|
||||
template: {
|
||||
|
||||
GenerateDocument(
|
||||
{
|
||||
name: isReturn
|
||||
? TemplateList().parts_return_confirmation.key
|
||||
: TemplateList().parts_order_confirmation.key,
|
||||
@@ -172,20 +165,26 @@ export function PartsOrderModalContainer({
|
||||
id: insertResult.data.insert_parts_orders.returning[0].id,
|
||||
},
|
||||
},
|
||||
});
|
||||
{
|
||||
to: matchingVendor ? [matchingVendor.email] : null,
|
||||
replyTo: bodyshop.email,
|
||||
subject: TemplateList("job", bodyshop.shopname)
|
||||
.parts_order_confirmation.subject,
|
||||
},
|
||||
"e"
|
||||
);
|
||||
} else {
|
||||
displayTemplateInWindow(
|
||||
await RenderTemplate(
|
||||
{
|
||||
name: isReturn
|
||||
? TemplateList().parts_return_confirmation.key
|
||||
: TemplateList().parts_order_confirmation.key,
|
||||
variables: {
|
||||
id: insertResult.data.insert_parts_orders.returning[0].id,
|
||||
},
|
||||
GenerateDocument(
|
||||
{
|
||||
name: isReturn
|
||||
? TemplateList().parts_return_confirmation.key
|
||||
: TemplateList().parts_order_confirmation.key,
|
||||
variables: {
|
||||
id: insertResult.data.insert_parts_orders.returning[0].id,
|
||||
},
|
||||
bodyshop
|
||||
)
|
||||
},
|
||||
{},
|
||||
"p"
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -9,18 +9,16 @@ import { createStructuredSelector } from "reselect";
|
||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
import {
|
||||
INSERT_NEW_PAYMENT,
|
||||
UPDATE_PAYMENT
|
||||
UPDATE_PAYMENT,
|
||||
} from "../../graphql/payments.queries";
|
||||
import { setEmailOptions } from "../../redux/email/email.actions";
|
||||
import { toggleModalVisible } from "../../redux/modals/modals.actions";
|
||||
import { selectPayment } from "../../redux/modals/modals.selectors";
|
||||
import {
|
||||
selectBodyshop,
|
||||
selectCurrentUser
|
||||
selectCurrentUser,
|
||||
} from "../../redux/user/user.selectors";
|
||||
import RenderTemplate, {
|
||||
displayTemplateInWindow
|
||||
} from "../../utils/RenderTemplate";
|
||||
import { GenerateDocument } from "../../utils/RenderTemplate";
|
||||
import { TemplateList } from "../../utils/TemplateConstants";
|
||||
import PaymentForm from "../payment-form/payment-form.component";
|
||||
|
||||
@@ -121,32 +119,19 @@ function BillEnterModalContainer({
|
||||
notification["error"]({ message: t("payments.errors.payment") });
|
||||
}
|
||||
|
||||
if (sendby === "email") {
|
||||
setEmailOptions({
|
||||
messageOptions: {
|
||||
// to: [appData.email],
|
||||
replyTo: bodyshop.email,
|
||||
GenerateDocument(
|
||||
{
|
||||
name: TemplateList().payment_receipt.key,
|
||||
variables: {
|
||||
id: newPayment.data.insert_payments.returning[0].id,
|
||||
},
|
||||
template: {
|
||||
name: TemplateList().payment_receipt.key,
|
||||
variables: {
|
||||
id: newPayment.data.insert_payments.returning[0].id,
|
||||
},
|
||||
},
|
||||
});
|
||||
} else {
|
||||
displayTemplateInWindow(
|
||||
await RenderTemplate(
|
||||
{
|
||||
name: TemplateList().payment_receipt.key,
|
||||
variables: {
|
||||
id: newPayment.data.insert_payments.returning[0].id,
|
||||
},
|
||||
},
|
||||
bodyshop
|
||||
)
|
||||
);
|
||||
}
|
||||
},
|
||||
{
|
||||
// to: [appData.email],
|
||||
replyTo: bodyshop.email,
|
||||
},
|
||||
sendby === "email" ? "e" : "p"
|
||||
);
|
||||
} else {
|
||||
const updatedPayment = await updatePayment({
|
||||
variables: {
|
||||
|
||||
@@ -5,7 +5,7 @@ import { createStructuredSelector } from "reselect";
|
||||
import { setEmailOptions } from "../../redux/email/email.actions";
|
||||
import { selectPrintCenter } from "../../redux/modals/modals.selectors";
|
||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||
import RenderTemplate from "../../utils/RenderTemplate";
|
||||
import { GenerateDocument } from "../../utils/RenderTemplate";
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
printCenterModal: selectPrintCenter,
|
||||
bodyshop: selectBodyshop,
|
||||
@@ -23,14 +23,14 @@ export function PrintCenterItemComponent({
|
||||
disabled,
|
||||
}) {
|
||||
const renderToNewWindow = async () => {
|
||||
await RenderTemplate(
|
||||
await GenerateDocument(
|
||||
{
|
||||
name: item.key,
|
||||
variables: { id: id },
|
||||
},
|
||||
bodyshop
|
||||
{},
|
||||
"p"
|
||||
);
|
||||
// displayTemplateInWindow(html);
|
||||
};
|
||||
|
||||
if (disabled) return <li className="print-center-item">{item.title} </li>;
|
||||
@@ -40,15 +40,14 @@ export function PrintCenterItemComponent({
|
||||
<PrinterOutlined onClick={renderToNewWindow} />
|
||||
<MailOutlined
|
||||
onClick={() => {
|
||||
setEmailOptions({
|
||||
messageOptions: {
|
||||
Subject: "",
|
||||
},
|
||||
template: {
|
||||
GenerateDocument(
|
||||
{
|
||||
name: item.key,
|
||||
variables: { id: id },
|
||||
},
|
||||
});
|
||||
{},
|
||||
"e"
|
||||
);
|
||||
}}
|
||||
/>
|
||||
</li>
|
||||
|
||||
@@ -1,13 +1,11 @@
|
||||
import { Button, Typography, List } from "antd";
|
||||
import { Button, List, Typography } from "antd";
|
||||
import React from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { connect } from "react-redux";
|
||||
import { createStructuredSelector } from "reselect";
|
||||
import { logImEXEvent } from "../../firebase/firebase.utils";
|
||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||
import RenderTemplate, {
|
||||
displayTemplateInWindow,
|
||||
} from "../../utils/RenderTemplate";
|
||||
import { GenerateDocument } from "../../utils/RenderTemplate";
|
||||
import { TemplateList } from "../../utils/TemplateConstants";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
@@ -20,17 +18,18 @@ const mapDispatchToProps = (dispatch) => ({
|
||||
export function PrintCenterSpeedPrint({ bodyshop, jobId }) {
|
||||
const { speedprint } = bodyshop;
|
||||
const { t } = useTranslation();
|
||||
|
||||
const renderTemplate = async (templateKey) => {
|
||||
logImEXEvent("speed_print_template_render");
|
||||
|
||||
const html = await RenderTemplate(
|
||||
GenerateDocument(
|
||||
{
|
||||
name: templateKey,
|
||||
variables: { id: jobId },
|
||||
},
|
||||
bodyshop
|
||||
{},
|
||||
"p"
|
||||
);
|
||||
displayTemplateInWindow(html);
|
||||
};
|
||||
|
||||
const renderAllTemplates = (templateKeys) => {
|
||||
|
||||
@@ -3,6 +3,9 @@ import jsreport from "jsreport-browser-client-dist";
|
||||
import client from "../utils/GraphQLClient";
|
||||
import axios from "axios";
|
||||
import { auth } from "../firebase/firebase.utils";
|
||||
import { TemplateList } from "./TemplateConstants";
|
||||
import { store } from "../redux/store";
|
||||
import { setEmailOptions } from "../redux/email/email.actions";
|
||||
const server = process.env.REACT_APP_REPORTS_SERVER_URL;
|
||||
jsreport.serverUrl = server;
|
||||
|
||||
@@ -120,3 +123,17 @@ export const displayTemplateInWindowNoprint = (html) => {
|
||||
console.log("Unable to write to new window.", error);
|
||||
}
|
||||
};
|
||||
|
||||
export const GenerateDocument = async (template, messageOptions, sendType) => {
|
||||
const bodyshop = store.getState().user.bodyshop;
|
||||
if (sendType === "e") {
|
||||
store.dispatch(
|
||||
setEmailOptions({
|
||||
messageOptions,
|
||||
template,
|
||||
})
|
||||
);
|
||||
} else {
|
||||
displayTemplateInWindow(await RenderTemplate(template, bodyshop));
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user