Replaced appropriate number fields with calculator field. BOD-398

This commit is contained in:
Patrick Fic
2020-09-22 10:10:43 -07:00
parent ff0ee8cbae
commit 489ef3df0d
11 changed files with 116 additions and 109 deletions

View File

@@ -6,6 +6,8 @@ import FormDatePicker from "../form-date-picker/form-date-picker.component";
import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component"; import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component";
import InputPhone from "../form-items-formatted/phone-form-item.component"; import InputPhone from "../form-items-formatted/phone-form-item.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
export default function ContractFormComponent({ form, create = false }) { export default function ContractFormComponent({ form, create = false }) {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
@@ -298,16 +300,16 @@ export default function ContractFormComponent({ form, create = false }) {
<InputNumber precision={2} /> <InputNumber precision={2} />
</Form.Item> </Form.Item>
<Form.Item label={t("contracts.fields.federaltax")} name="federaltax"> <Form.Item label={t("contracts.fields.federaltax")} name="federaltax">
<InputNumber precision={2} /> <InputNumberCalculator precision={2} />
</Form.Item> </Form.Item>
<Form.Item label={t("contracts.fields.statetax")} name="statetax"> <Form.Item label={t("contracts.fields.statetax")} name="statetax">
<InputNumber precision={2} /> <InputNumberCalculator precision={2} />
</Form.Item> </Form.Item>
<Form.Item label={t("contracts.fields.localtax")} name="localtax"> <Form.Item label={t("contracts.fields.localtax")} name="localtax">
<InputNumber precision={2} /> <InputNumberCalculator precision={2} />
</Form.Item> </Form.Item>
<Form.Item label={t("contracts.fields.coverage")} name="coverage"> <Form.Item label={t("contracts.fields.coverage")} name="coverage">
<InputNumber precision={2} /> <InputNumberCalculator precision={2} />
</Form.Item> </Form.Item>
</LayoutFormRow> </LayoutFormRow>
</div> </div>

View File

@@ -7,6 +7,8 @@ import FormDatePicker from "../form-date-picker/form-date-picker.component";
import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component"; import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component";
import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import CurrencyInput from "../form-items-formatted/currency-form-item.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
export default function CourtesyCarCreateFormComponent({ form, saveLoading }) { export default function CourtesyCarCreateFormComponent({ form, saveLoading }) {
const { t } = useTranslation(); const { t } = useTranslation();
return ( return (
@@ -172,7 +174,7 @@ export default function CourtesyCarCreateFormComponent({ form, saveLoading }) {
}, },
]} ]}
> >
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("courtesycars.fields.nextservicedate")} label={t("courtesycars.fields.nextservicedate")}

View File

@@ -1,31 +1,19 @@
import { Input, Popover } from "antd"; import { InputNumber, Popover } from "antd";
import React, { useEffect, useState, forwardRef } from "react"; import React, { forwardRef, useEffect, useRef, useState } from "react";
const FormInputNUmberCalculator = ( const FormInputNUmberCalculator = (
{ value: formValue, onChange: formOnChange }, { value: formValue, onChange: formOnChange, ...restProps },
ref refProp
) => { ) => {
const [value, setValue] = useState(formValue); const [value, setValue] = useState(formValue);
const [total, setTotal] = useState(0); const [total, setTotal] = useState(0);
const [history, setHistory] = useState([]); const [history, setHistory] = useState([]);
const handleChange = (e) => { const ref = useRef(null);
const key = e.target.value;
switch (key) {
case "/":
case "*":
case "+":
case "-":
return;
default:
setValue(key);
return;
}
};
const handleKeyDown = (e) => { const handleKeyDown = (e) => {
console.log("e :>> ", e.currentTarget.value);
const { key } = e; const { key } = e;
let action; let action;
switch (key) { switch (key) {
case "/": case "/":
@@ -38,11 +26,13 @@ const FormInputNUmberCalculator = (
action = "="; action = "=";
break; break;
default: default:
setValue(e.currentTarget.value);
return; return;
} }
const val = parseFloat(value); const val = parseFloat(value);
setValue(null); setValue(null);
ref.current.blur();
ref.current.focus();
if (!isNaN(val)) { if (!isNaN(val)) {
setHistory([...history, val, action]); setHistory([...history, val, action]);
} }
@@ -82,7 +72,12 @@ const FormInputNUmberCalculator = (
} }
}, 0); }, 0);
setTotal(subTotal); setTotal(subTotal);
if (history[history.length - 1] === "=") setValue(subTotal); if (history[history.length - 1] === "=") {
setValue(subTotal);
ref.current.blur();
ref.current.focus();
setHistory([]);
}
} }
}, [history]); }, [history]);
@@ -101,13 +96,13 @@ const FormInputNUmberCalculator = (
return ( return (
<div> <div>
<Popover content={popContent} visible={history.length > 0}> <Popover content={popContent} visible={history.length > 0}>
<Input <InputNumber
ref={ref} ref={ref}
value={value} value={value}
defaultValue={value} defaultValue={value}
onChange={handleChange}
onKeyDown={handleKeyDown} onKeyDown={handleKeyDown}
onBlur={(e) => setHistory([])} onBlur={(e) => setHistory([])}
{...restProps}
/> />
</Popover> </Popover>
</div> </div>

View File

@@ -1,11 +1,12 @@
import { useMutation } from "@apollo/react-hooks"; import { useMutation } from "@apollo/react-hooks";
import { Button, Card, Form, InputNumber, notification, Popover } from "antd"; import { Button, Card, Form, notification, Popover } from "antd";
import moment from "moment"; import moment from "moment";
import React, { useState } from "react"; import React, { useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { logImEXEvent } from "../../firebase/firebase.utils"; import { logImEXEvent } from "../../firebase/firebase.utils";
import { INSERT_SCOREBOARD_ENTRY } from "../../graphql/scoreboard.queries"; import { INSERT_SCOREBOARD_ENTRY } from "../../graphql/scoreboard.queries";
import FormDatePicker from "../form-date-picker/form-date-picker.component"; import FormDatePicker from "../form-date-picker/form-date-picker.component";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
export default function ScoreboardAddButton({ job, ...otherBtnProps }) { export default function ScoreboardAddButton({ job, ...otherBtnProps }) {
const { t } = useTranslation(); const { t } = useTranslation();
@@ -68,7 +69,7 @@ export default function ScoreboardAddButton({ job, ...otherBtnProps }) {
}, },
]} ]}
> >
<InputNumber precision={1} /> <InputNumberCalculator precision={1} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("scoreboard.fields.painthrs")} label={t("scoreboard.fields.painthrs")}
@@ -80,7 +81,7 @@ export default function ScoreboardAddButton({ job, ...otherBtnProps }) {
}, },
]} ]}
> >
<InputNumber precision={1} /> <InputNumberCalculator precision={1} />
</Form.Item> </Form.Item>
<Button type="primary" htmlType="submit"> <Button type="primary" htmlType="submit">

View File

@@ -1,10 +1,11 @@
import { Collapse, Form, Input, InputNumber, Select, Switch } from "antd"; import { Collapse, Form, Input, Select, Switch } from "antd";
import React from "react"; import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { selectBodyshop } from "../../redux/user/user.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors";
import FormDatePicker from "../form-date-picker/form-date-picker.component"; import FormDatePicker from "../form-date-picker/form-date-picker.component";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
import FormItemEmail from "../form-items-formatted/email-form-item.component"; import FormItemEmail from "../form-items-formatted/email-form-item.component";
import FormItemPhone from "../form-items-formatted/phone-form-item.component"; import FormItemPhone from "../form-items-formatted/phone-form-item.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component";
@@ -203,7 +204,7 @@ export function JobsCreateJobsInfo({ bodyshop, form, selected }) {
> >
<LayoutFormRow> <LayoutFormRow>
<Form.Item label={t("jobs.fields.ded_amt")} name="ded_amt"> <Form.Item label={t("jobs.fields.ded_amt")} name="ded_amt">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.ded_status")} name="ded_status"> <Form.Item label={t("jobs.fields.ded_status")} name="ded_status">
<Input /> <Input />
@@ -212,38 +213,38 @@ export function JobsCreateJobsInfo({ bodyshop, form, selected }) {
label={t("jobs.fields.depreciation_taxes")} label={t("jobs.fields.depreciation_taxes")}
name="depreciation_taxes" name="depreciation_taxes"
> >
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
TODO This is equivalent of GST payable. TODO This is equivalent of GST payable.
<Form.Item <Form.Item
label={t("jobs.fields.federal_tax_payable")} label={t("jobs.fields.federal_tax_payable")}
name="federal_tax_payable" name="federal_tax_payable"
> >
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("jobs.fields.other_amount_payable")} label={t("jobs.fields.other_amount_payable")}
name="other_amount_payable" name="other_amount_payable"
> >
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("jobs.fields.towing_payable")} label={t("jobs.fields.towing_payable")}
name="towing_payable" name="towing_payable"
> >
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("jobs.fields.storage_payable")} label={t("jobs.fields.storage_payable")}
name="storage_payable" name="storage_payable"
> >
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("jobs.fields.adjustment_bottom_line")} label={t("jobs.fields.adjustment_bottom_line")}
name="adjustment_bottom_line" name="adjustment_bottom_line"
> >
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
Totals Table Totals Table
<Form.Item <Form.Item
@@ -253,70 +254,70 @@ export function JobsCreateJobsInfo({ bodyshop, form, selected }) {
<Input /> <Input />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_lab")} name="rate_lab"> <Form.Item label={t("jobs.fields.rate_lab")} name="rate_lab">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_lad")} name="rate_lad"> <Form.Item label={t("jobs.fields.rate_lad")} name="rate_lad">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_lae")} name="rate_lae"> <Form.Item label={t("jobs.fields.rate_lae")} name="rate_lae">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_lar")} name="rate_lar"> <Form.Item label={t("jobs.fields.rate_lar")} name="rate_lar">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_las")} name="rate_las"> <Form.Item label={t("jobs.fields.rate_las")} name="rate_las">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_laf")} name="rate_laf"> <Form.Item label={t("jobs.fields.rate_laf")} name="rate_laf">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_lam")} name="rate_lam"> <Form.Item label={t("jobs.fields.rate_lam")} name="rate_lam">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_lag")} name="rate_lag"> <Form.Item label={t("jobs.fields.rate_lag")} name="rate_lag">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_lau")} name="rate_lau"> <Form.Item label={t("jobs.fields.rate_lau")} name="rate_lau">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_la1")} name="rate_la1"> <Form.Item label={t("jobs.fields.rate_la1")} name="rate_la1">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_la2")} name="rate_la2"> <Form.Item label={t("jobs.fields.rate_la2")} name="rate_la2">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_la3")} name="rate_la3"> <Form.Item label={t("jobs.fields.rate_la3")} name="rate_la3">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_la4")} name="rate_la4"> <Form.Item label={t("jobs.fields.rate_la4")} name="rate_la4">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_mapa")} name="rate_mapa"> <Form.Item label={t("jobs.fields.rate_mapa")} name="rate_mapa">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_mash")} name="rate_mash"> <Form.Item label={t("jobs.fields.rate_mash")} name="rate_mash">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_mahw")} name="rate_mahw"> <Form.Item label={t("jobs.fields.rate_mahw")} name="rate_mahw">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_ma2s")} name="rate_ma2s"> <Form.Item label={t("jobs.fields.rate_ma2s")} name="rate_ma2s">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_ma3s")} name="rate_ma3s"> <Form.Item label={t("jobs.fields.rate_ma3s")} name="rate_ma3s">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_mabl")} name="rate_mabl"> <Form.Item label={t("jobs.fields.rate_mabl")} name="rate_mabl">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_macs")} name="rate_macs"> <Form.Item label={t("jobs.fields.rate_macs")} name="rate_macs">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_matd")} name="rate_matd"> <Form.Item label={t("jobs.fields.rate_matd")} name="rate_matd">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.rate_laa")} name="rate_laa"> <Form.Item label={t("jobs.fields.rate_laa")} name="rate_laa">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
</LayoutFormRow> </LayoutFormRow>
</Collapse.Panel> </Collapse.Panel>

View File

@@ -1,10 +1,11 @@
import { Col, Form, Input, InputNumber, Row, Select, Switch } from "antd"; import { Col, Form, Input, Row, Select, Switch } from "antd";
import React from "react"; import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { selectBodyshop } from "../../redux/user/user.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors";
import FormDatePicker from "../form-date-picker/form-date-picker.component"; import FormDatePicker from "../form-date-picker/form-date-picker.component";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import CurrencyInput from "../form-items-formatted/currency-form-item.component";
import FormItemEmail from "../form-items-formatted/email-form-item.component"; import FormItemEmail from "../form-items-formatted/email-form-item.component";
import FormItemPhone from "../form-items-formatted/phone-form-item.component"; import FormItemPhone from "../form-items-formatted/phone-form-item.component";
@@ -109,10 +110,10 @@ export function JobsDetailGeneral({ bodyshop, job, form }) {
<FormDatePicker /> <FormDatePicker />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.kmin")} name="kmin"> <Form.Item label={t("jobs.fields.kmin")} name="kmin">
<InputNumber precision={1} min={0} /> <InputNumberCalculator precision={1} min={0} />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.kmout")} name="kmout"> <Form.Item label={t("jobs.fields.kmout")} name="kmout">
<InputNumber precision={1} min={0} /> <InputNumberCalculator precision={1} min={0} />
</Form.Item> </Form.Item>
<Form.Item label={t("jobs.fields.ponumber")} name="po_number"> <Form.Item label={t("jobs.fields.ponumber")} name="po_number">
<Input /> <Input />

View File

@@ -1,9 +1,11 @@
import { Button, Card, Dropdown, Form, InputNumber, notification } from "antd"; import { Button, Card, Dropdown, Form, notification } from "antd";
import React, { useState } from "react"; import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import FormDatePicker from "../form-date-picker/form-date-picker.component";
import { useMutation } from "react-apollo"; import { useMutation } from "react-apollo";
import { useTranslation } from "react-i18next";
import { UPDATE_SCOREBOARD_ENTRY } from "../../graphql/scoreboard.queries"; import { UPDATE_SCOREBOARD_ENTRY } from "../../graphql/scoreboard.queries";
import FormDatePicker from "../form-date-picker/form-date-picker.component";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
export default function ScoreboardEntryEdit({ entry }) { export default function ScoreboardEntryEdit({ entry }) {
const [visible, setVisible] = useState(false); const [visible, setVisible] = useState(false);
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
@@ -62,7 +64,7 @@ export default function ScoreboardEntryEdit({ entry }) {
}, },
]} ]}
> >
<InputNumber precision={1} /> <InputNumberCalculator precision={1} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("scoreboard.fields.painthrs")} label={t("scoreboard.fields.painthrs")}
@@ -74,7 +76,7 @@ export default function ScoreboardEntryEdit({ entry }) {
}, },
]} ]}
> >
<InputNumber precision={1} /> <InputNumberCalculator precision={1} />
</Form.Item> </Form.Item>
<Button type="primary" loading={loading} htmlType="submit"> <Button type="primary" loading={loading} htmlType="submit">

View File

@@ -11,17 +11,18 @@ import {
} from "antd"; } from "antd";
import React from "react"; import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
import PhoneFormItem from "../form-items-formatted/phone-form-item.component";
import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component"; import FormListMoveArrows from "../form-list-move-arrows/form-list-move-arrows.component";
import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import ShopInfoIntakeChecklistComponent from "./shop-info.intake.component"; import ShopInfoIntakeChecklistComponent from "./shop-info.intake.component";
import ShopInfoLaborRates from "./shop-info.laborrates.component";
import ShopInfoOrderStatusComponent from "./shop-info.orderstatus.component"; import ShopInfoOrderStatusComponent from "./shop-info.orderstatus.component";
import ShopInfoRbacComponent from "./shop-info.rbac.component"; import ShopInfoRbacComponent from "./shop-info.rbac.component";
import ShopInfoResponsibilityCenterComponent from "./shop-info.responsibilitycenters.component"; import ShopInfoResponsibilityCenterComponent from "./shop-info.responsibilitycenters.component";
import ShopInfoROStatusComponent from "./shop-info.rostatus.component"; import ShopInfoROStatusComponent from "./shop-info.rostatus.component";
import ShopInfoSchedulingComponent from "./shop-info.scheduling.component"; import ShopInfoSchedulingComponent from "./shop-info.scheduling.component";
import ShopInfoSpeedPrint from "./shop-info.speedprint.component"; import ShopInfoSpeedPrint from "./shop-info.speedprint.component";
import ShopInfoLaborRates from "./shop-info.laborrates.component";
import PhoneFormItem from "../form-items-formatted/phone-form-item.component";
export default function ShopInfoComponent({ form, saveLoading }) { export default function ShopInfoComponent({ form, saveLoading }) {
const { t } = useTranslation(); const { t } = useTranslation();
@@ -195,7 +196,7 @@ export default function ShopInfoComponent({ form, saveLoading }) {
}, },
]} ]}
> >
<InputNumber min={0} precision={0} /> <InputNumberCalculator min={0} precision={0} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
@@ -208,7 +209,7 @@ export default function ShopInfoComponent({ form, saveLoading }) {
}, },
]} ]}
> >
<InputNumber min={0} precision={0} /> <InputNumberCalculator min={0} precision={0} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
@@ -233,7 +234,7 @@ export default function ShopInfoComponent({ form, saveLoading }) {
}, },
]} ]}
> >
<InputNumber min={1} precision={1} /> <InputNumberCalculator min={1} precision={1} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name={["md_referral_sources"]} name={["md_referral_sources"]}
@@ -541,7 +542,7 @@ export default function ShopInfoComponent({ form, saveLoading }) {
}, },
]} ]}
> >
<InputNumber min={0.1} precision={1} /> <InputNumberCalculator min={0.1} precision={1} />
</Form.Item> </Form.Item>
</Collapse.Panel> </Collapse.Panel>
<Collapse.Panel <Collapse.Panel

View File

@@ -1,23 +1,16 @@
import { useMutation } from "@apollo/react-hooks"; import { useMutation } from "@apollo/react-hooks";
import { import { Button, Card, Form, notification, Popover, Select } from "antd";
Button, import axios from "axios";
Card,
Form,
InputNumber,
notification,
Popover,
Select,
} from "antd";
import React, { useState } from "react"; import React, { useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { UPDATE_TIME_TICKET } from "../../graphql/timetickets.queries";
import axios from "axios";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { createStructuredSelector } from "reselect"; import { createStructuredSelector } from "reselect";
import { selectBodyshop } from "../../redux/user/user.selectors";
import { selectTechnician } from "../../redux/tech/tech.selectors";
import TechJobClockoutDelete from "../tech-job-clock-out-delete/tech-job-clock-out-delete.component";
import { logImEXEvent } from "../../firebase/firebase.utils"; import { logImEXEvent } from "../../firebase/firebase.utils";
import { UPDATE_TIME_TICKET } from "../../graphql/timetickets.queries";
import { selectTechnician } from "../../redux/tech/tech.selectors";
import { selectBodyshop } from "../../redux/user/user.selectors";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
import TechJobClockoutDelete from "../tech-job-clock-out-delete/tech-job-clock-out-delete.component";
const mapStateToProps = createStructuredSelector({ const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop, bodyshop: selectBodyshop,
@@ -72,7 +65,7 @@ export function TechClockOffButton({
<div> <div>
<Form <Form
form={form} form={form}
layout='vertical' layout="vertical"
onFinish={handleFinish} onFinish={handleFinish}
initialValues={{ initialValues={{
cost_center: isShiftTicket cost_center: isShiftTicket
@@ -80,46 +73,50 @@ export function TechClockOffButton({
: technician : technician
? technician.cost_center ? technician.cost_center
: null, : null,
}}> }}
>
{!isShiftTicket ? ( {!isShiftTicket ? (
<div> <div>
<Form.Item <Form.Item
label={t("timetickets.fields.actualhrs")} label={t("timetickets.fields.actualhrs")}
name='actualhrs' name="actualhrs"
rules={[ rules={[
{ {
required: true, required: true,
message: t("general.validation.required"), message: t("general.validation.required"),
}, },
]}> ]}
<InputNumber precision={1} /> >
<InputNumberCalculator precision={1} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("timetickets.fields.productivehrs")} label={t("timetickets.fields.productivehrs")}
name='productivehrs' name="productivehrs"
rules={[ rules={[
{ {
required: true, required: true,
message: t("general.validation.required"), message: t("general.validation.required"),
}, },
]}> ]}
<InputNumber precision={1} /> >
<InputNumberCalculator precision={1} />
</Form.Item> </Form.Item>
</div> </div>
) : null} ) : null}
<Form.Item <Form.Item
name='cost_center' name="cost_center"
label={t("timetickets.fields.cost_center")} label={t("timetickets.fields.cost_center")}
rules={[ rules={[
{ {
required: true, required: true,
message: t("general.validation.required"), message: t("general.validation.required"),
}, },
]}> ]}
>
<Select disabled={isShiftTicket}> <Select disabled={isShiftTicket}>
{isShiftTicket ? ( {isShiftTicket ? (
<Select.Option value='timetickets.labels.shift'> <Select.Option value="timetickets.labels.shift">
{t("timetickets.labels.shift")} {t("timetickets.labels.shift")}
</Select.Option> </Select.Option>
) : ( ) : (
@@ -131,17 +128,20 @@ export function TechClockOffButton({
)} )}
</Select> </Select>
</Form.Item> </Form.Item>
<Button type='primary' htmlType='submit' loading={loading}> <Button type="primary" htmlType="submit" loading={loading}>
{t("general.actions.save")} {t("general.actions.save")}
</Button> </Button>
<TechJobClockoutDelete completedCallback={completedCallback} timeTicketId={timeTicketId} /> <TechJobClockoutDelete
completedCallback={completedCallback}
timeTicketId={timeTicketId}
/>
</Form> </Form>
</div> </div>
</Card> </Card>
); );
return ( return (
<Popover content={overlay} trigger='click'> <Popover content={overlay} trigger="click">
<Button loading={loading} {...otherBtnProps}> <Button loading={loading} {...otherBtnProps}>
{t("timetickets.actions.clockout")} {t("timetickets.actions.clockout")}
</Button> </Button>

View File

@@ -1,8 +1,9 @@
import { Form, Input, InputNumber, Select } from "antd"; import { Form, Input, Select } from "antd";
import React from "react"; import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import EmployeeSearchSelect from "../employee-search-select/employee-search-select.component"; import EmployeeSearchSelect from "../employee-search-select/employee-search-select.component";
import FormDatePicker from "../form-date-picker/form-date-picker.component"; import FormDatePicker from "../form-date-picker/form-date-picker.component";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
import JobSearchSelect from "../job-search-select/job-search-select.component"; import JobSearchSelect from "../job-search-select/job-search-select.component";
import LaborAllocationsTable from "../labor-allocations-table/labor-allocations-table.component"; import LaborAllocationsTable from "../labor-allocations-table/labor-allocations-table.component";
@@ -77,7 +78,7 @@ export default function TimeTicketModalComponent({
}, },
]} ]}
> >
<InputNumber min={0} precision={1} /> <InputNumberCalculator min={0} precision={1} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("timetickets.fields.actualhrs")} label={t("timetickets.fields.actualhrs")}
@@ -89,7 +90,7 @@ export default function TimeTicketModalComponent({
}, },
]} ]}
> >
<InputNumber min={0} precision={1} /> <InputNumberCalculator min={0} precision={1} />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
name="cost_center" name="cost_center"

View File

@@ -1,8 +1,9 @@
import { Button, Form, Input, InputNumber, Select } from "antd"; import { DeleteFilled } from "@ant-design/icons";
import { Button, Form, Input, InputNumber, Select } from "antd";
import React from "react"; import React from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import InputNumberCalculator from "../form-input-number-calculator/form-input-number-calculator.component";
import FormItemEmail from "../form-items-formatted/email-form-item.component"; import FormItemEmail from "../form-items-formatted/email-form-item.component";
import { DeleteFilled } from "@ant-design/icons";
export default function VendorsFormComponent({ export default function VendorsFormComponent({
form, form,
@@ -87,7 +88,7 @@ export default function VendorsFormComponent({
label={t("vendors.fields.prompt_discount")} label={t("vendors.fields.prompt_discount")}
name="prompt_discount" name="prompt_discount"
> >
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("vendors.fields.name")} name="name"> <Form.Item label={t("vendors.fields.name")} name="name">
<Input /> <Input />
@@ -111,7 +112,7 @@ export default function VendorsFormComponent({
<Input /> <Input />
</Form.Item> </Form.Item>
<Form.Item label={t("vendors.fields.discount")} name="discount"> <Form.Item label={t("vendors.fields.discount")} name="discount">
<InputNumber /> <InputNumberCalculator />
</Form.Item> </Form.Item>
<Form.Item label={t("vendors.fields.country")} name="country"> <Form.Item label={t("vendors.fields.country")} name="country">
<Input /> <Input />