Added speedprint rework to checklist. IO-709

This commit is contained in:
Patrick Fic
2021-02-24 16:45:32 -08:00
parent dfcc18c8dc
commit 56db1e9e97
10 changed files with 185 additions and 107 deletions

View File

@@ -70,7 +70,7 @@ function Header({
<div style={{ display: "flex", alignItems: "center" }}>
<Menu
mode="horizontal"
// theme="dark"
theme="dark"
style={{ flex: 5 }}
selectedKeys={[selectedHeader]}
onClick={handleMenuClick}
@@ -301,8 +301,7 @@ function Header({
<GlobalSearch />
<Menu
mode="horizontal"
// theme="dark"
theme="dark"
selectedKeys={[selectedHeader]}
onClick={handleMenuClick}
>

View File

@@ -1,16 +0,0 @@
import React from "react";
import { PrinterFilled } from "@ant-design/icons";
import { useTranslation } from "react-i18next";
export default function JobChecklistTemplateItem({
templateKey,
renderTemplate,
}) {
const { t } = useTranslation();
return (
<div>
{t(`printcenter.jobs.${templateKey}`)}
<PrinterFilled onClick={() => renderTemplate(templateKey)} />
</div>
);
}

View File

@@ -1,18 +1,26 @@
import { Button } from "antd";
import React from "react";
import { PrinterFilled } from "@ant-design/icons";
import { Button, List } from "antd";
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { useParams } from "react-router-dom";
import { logImEXEvent } from "../../../../firebase/firebase.utils";
import { GenerateDocument } from "../../../../utils/RenderTemplate";
import JobIntakeTemplateItem from "../job-checklist-template-item/job-checklist-template-item.component";
import {
GenerateDocument,
GenerateDocuments,
} from "../../../../utils/RenderTemplate";
import { TemplateList } from "../../../../utils/TemplateConstants";
const TemplateListGenerated = TemplateList();
export default function JobIntakeTemplateList({ templates }) {
const { jobId } = useParams();
const { t } = useTranslation();
const [loading, setLoading] = useState(false);
const renderTemplate = async (templateKey) => {
setLoading(true);
logImEXEvent("job_checklist_template_render");
GenerateDocument(
await GenerateDocument(
{
name: templateKey,
variables: { id: jobId },
@@ -20,27 +28,50 @@ export default function JobIntakeTemplateList({ templates }) {
{},
"p"
);
setLoading(false);
};
const renderAllTemplates = () => {
logImEXEvent("job_checklist_render_all_templates");
templates.forEach((template) => renderTemplate(template));
const renderAllTemplates = async () => {
logImEXEvent("checklist_render_all_templates");
setLoading(true);
console.log("templates :>> ", templates);
await GenerateDocuments(
templates.map((key) => {
return { name: key, variables: { id: jobId } };
})
);
setLoading(false);
};
return (
<div>
{t("intake.labels.printpack")}
<Button onClick={renderAllTemplates}>
<Button onClick={renderAllTemplates} loading={loading}>
{t("checklist.actions.printall")}
</Button>
{templates.map((template) => (
<JobIntakeTemplateItem
key={template}
templateKey={template}
renderTemplate={renderTemplate}
/>
))}
<List
itemLayout="horizontal"
dataSource={templates}
renderItem={(template) => (
<List.Item
actions={[
<Button
loading={loading}
onClick={() => renderTemplate(template)}
>
<PrinterFilled />
</Button>,
]}
>
<List.Item.Meta
title={
TemplateListGenerated[template] &&
TemplateListGenerated[template].title
}
// description={renderTemplateList(template.templates)}
/>
</List.Item>
)}
/>
</div>
);
}

View File

@@ -6,11 +6,11 @@ export default function JobIntakeComponent({ checklistConfig, type, job }) {
const { form, templates } = checklistConfig;
return (
<Row>
<Col span={12}>
<Row gutter={[48, 48]}>
<Col span={6}>
<JobChecklistTemplateList templates={templates} type={type} />
</Col>
<Col span={12}>
<Col span={18}>
<JobChecklistForm formItems={form} type={type} job={job} />
</Col>
</Row>

View File

@@ -1,10 +1,10 @@
import { DownOutlined } from "@ant-design/icons";
import { Dropdown, Menu } from "antd";
import React from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { selectBodyshop } from "../../redux/user/user.selectors";
import { DownOutlined } from "@ant-design/icons";
import { Dropdown, Menu } from "antd";
import { useTranslation } from "react-i18next";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
@@ -19,14 +19,20 @@ export function JobsDetailRatesChangeButton({ disabled, form, bodyshop }) {
form.setFieldsValue(rate);
};
console.log(
"🚀 ~ file: jobs-detail-rates-change-button.component.jsx ~ line 26 ~ bodyshop.md_labor_rates",
bodyshop.md_labor_rates
);
const menu = (
<Menu onClick={handleClick}>
{bodyshop.md_labor_rates.map((rate, idx) => (
<Menu.Item value={rate} key={idx}>
{rate.label}
</Menu.Item>
))}
</Menu>
<div>
<Menu onClick={handleClick}>
{bodyshop.md_labor_rates.map((rate, idx) => (
<Menu.Item value={rate} key={idx}>
{rate.rate_label}
</Menu.Item>
))}
</Menu>
</div>
);
return (

View File

@@ -95,34 +95,53 @@ export default function ShopInfoIntakeChecklistComponent({ form }) {
>
<Switch />
</Form.Item>
<Form.Item
className="imex-flex-row__margin"
label={t("jobs.fields.intake.min")}
key={`${index}min`}
name={[field.name, "min"]}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
>
<InputNumber />
</Form.Item>
<Form.Item
className="imex-flex-row__margin"
label={t("jobs.fields.intake.max")}
key={`${index}max`}
name={[field.name, "max"]}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
>
<InputNumber />
<Form.Item shouldUpdate>
{() => {
if (
form.getFieldValue([
"intakechecklist",
"form",
index,
"type",
]) !== "slider"
)
return null;
return (
<>
<Form.Item
className="imex-flex-row__margin"
label={t("jobs.fields.intake.min")}
key={`${index}min`}
name={[field.name, "min"]}
dependencies={[[field.name, "type"]]}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
>
<InputNumber />
</Form.Item>
<Form.Item
className="imex-flex-row__margin"
label={t("jobs.fields.intake.max")}
key={`${index}max`}
name={[field.name, "max"]}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
>
<InputNumber />
</Form.Item>
</>
);
}}
</Form.Item>
<DeleteFilled
onClick={() => {
remove(field.name);
@@ -246,33 +265,57 @@ export default function ShopInfoIntakeChecklistComponent({ form }) {
>
<Switch />
</Form.Item>
<Form.Item
className="imex-flex-row__margin"
label={t("jobs.fields.intake.min")}
key={`${index}mind`}
name={[field.name, "min"]}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
>
<InputNumber />
</Form.Item>
<Form.Item
className="imex-flex-row__margin"
label={t("jobs.fields.intake.max")}
key={`${index}maxd`}
name={[field.name, "max"]}
rules={[
{
required: true,
message: t("general.validation.required"),
},
]}
>
<InputNumber />
<Form.Item shouldUpdate>
{() => {
if (
form.getFieldValue([
"deliverchecklist",
"form",
index,
"type",
]) !== "slider"
)
return null;
return (
<>
<Form.Item
className="imex-flex-row__margin"
label={t("jobs.fields.intake.min")}
key={`${index}mind`}
name={[field.name, "min"]}
dependencies={[[field.name, "type"]]}
rules={[
{
required:
form.getFieldValue([field.name, "type"]) ===
"slider",
message: t("general.validation.required"),
},
]}
>
<InputNumber />
</Form.Item>
<Form.Item
className="imex-flex-row__margin"
label={t("jobs.fields.intake.max")}
key={`${index}maxd`}
name={[field.name, "max"]}
dependencies={[[field.name, "type"]]}
rules={[
{
required:
form.getFieldValue([field.name, "type"]) ===
"slider",
message: t("general.validation.required"),
},
]}
>
<InputNumber />
</Form.Item>
</>
);
}}
</Form.Item>
<DeleteFilled
onClick={() => {

View File

@@ -177,7 +177,7 @@ export function Manage({ match, conflict }) {
return (
<Layout className="layout-container">
<Header style={{ backgroundColor: "#fff" }}>
<Header>
<HeaderContainer />
</Header>
<Content className="content-container">

View File

@@ -1,7 +1,7 @@
.content-container {
overflow-y: auto;
// margin: 0.5rem 0.5rem 0rem 0.5rem;
padding: 0.25rem 1rem 0rem 1rem;
margin: 1rem 1rem 0rem 1rem;
padding: 0.25rem 2.5rem 1rem 2.5rem;
border-radius: 4px;
background: #fff;
padding-bottom: 3rem;

View File

@@ -0,0 +1,10 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."employees" ADD COLUMN "cost_center" text;
type: run_sql
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."employees" ALTER COLUMN "cost_center" DROP NOT NULL;
type: run_sql

View File

@@ -0,0 +1,5 @@
- args:
cascade: false
read_only: false
sql: ALTER TABLE "public"."employees" DROP COLUMN "cost_center" CASCADE;
type: run_sql