import { Button, Form, Input, Select, Space, Statistic, Switch, Typography, Upload, } from "antd"; import React, { useEffect, useState } from "react"; import { useApolloClient } from "react-apollo"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { CHECK_BILL_INVOICE_NUMBER } from "../../graphql/bills.queries"; import { selectBodyshop } from "../../redux/user/user.selectors"; import AlertComponent from "../alert/alert.component"; import FormDatePicker from "../form-date-picker/form-date-picker.component"; import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import JobSearchSelect from "../job-search-select/job-search-select.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import VendorSearchSelect from "../vendor-search-select/vendor-search-select.component"; import BillFormLines from "./bill-form.lines.component"; import { CalculateBillTotal } from "./bill-form.totals.utility"; import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, }); const mapDispatchToProps = (dispatch) => ({}); export function BillFormComponent({ bodyshop, disabled, form, vendorAutoCompleteOptions, lineData, responsibilityCenters, loadLines, billEdit, disableInvNumber, }) { const { t } = useTranslation(); const client = useApolloClient(); const [discount, setDiscount] = useState(0); const handleVendorSelect = (props, opt) => { setDiscount(opt.discount); }; useEffect(() => { if (form.getFieldValue("vendorid") && vendorAutoCompleteOptions) { const vendorId = form.getFieldValue("vendorid"); const matchingVendors = vendorAutoCompleteOptions.filter( (v) => v.id === vendorId ); if (matchingVendors.length === 1) { setDiscount(matchingVendors[0].discount); } } if (form.getFieldValue("jobid")) { loadLines({ variables: { id: form.getFieldValue("jobid") } }); } }, [form, setDiscount, vendorAutoCompleteOptions, loadLines]); return (
{ if (form.getFieldValue("jobid") !== null) { loadLines({ variables: { id: form.getFieldValue("jobid") } }); } }} /> ({ async validator(rule, value) { const vendorid = getFieldValue("vendorid"); if (vendorid && value) { const response = await client.query({ query: CHECK_BILL_INVOICE_NUMBER, variables: { invoice_number: value, vendorid: vendorid, }, }); if (response.data.bills_aggregate.aggregate.count === 0) { return Promise.resolve(); } else if ( response.data.bills_aggregate.nodes.length === 1 && response.data.bills_aggregate.nodes[0].id === form.getFieldValue("id") ) { return Promise.resolve(); } return Promise.reject( t("bills.validation.unique_invoice_number") ); } else { return Promise.resolve(); } }, }), ]} > {t("bills.labels.bill_lines")} { if (Array.isArray(e)) { return e; } return e && e.fileList; }} > false} listType="picture"> {() => { const values = form.getFieldsValue([ "billlines", "total", "federal_tax_rate", "state_tax_rate", "local_tax_rate", ]); let totals; if ( !!values.total && !!values.billlines && values.billlines.length > 0 ) totals = CalculateBillTotal(values); if (!!totals) return (
{form.getFieldValue("is_credit_memo") ? ( ) : null}
); return null; }}
); } export default connect(mapStateToProps, mapDispatchToProps)(BillFormComponent);