Added financial fields.

This commit is contained in:
Patrick Fic
2020-01-28 10:38:50 -08:00
parent cc27a8c228
commit 203a680d0f
27 changed files with 1690 additions and 50 deletions

View File

@@ -6,7 +6,7 @@ function FormItemEmail(props, ref) {
{...props}
addonAfter={
<a href={`mailto:${props.email}`}>
<Icon type='mail' />
<Icon type="mail" />
</a>
}
/>

View File

@@ -0,0 +1,57 @@
import { Form, Input, InputNumber } from "antd";
import React, { useContext } from "react";
import { useTranslation } from "react-i18next";
import JobDetailFormContext from "../../pages/jobs-detail/jobs-detail.page.context";
export default function JobsDetailFinancials({ job }) {
const form = useContext(JobDetailFormContext);
const { getFieldDecorator } = form;
const { t } = useTranslation();
return (
<div>
<Form.Item label={t("jobs.fields.ded_amt")}>
{getFieldDecorator("ded_amt", {
initialValue: job.ded_amt
})(<InputNumber name="ded_amt" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.ded_status")}>
{getFieldDecorator("ded_status", {
initialValue: job.ded_status
})(<Input name="ded_status" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.depreciation_taxes")}>
{getFieldDecorator("depreciation_taxes", {
initialValue: job.depreciation_taxes
})(<InputNumber name="depreciation_taxes" />)}
</Form.Item>
TODO: This is equivalent of GST payable.
<Form.Item label={t("jobs.fields.federal_tax_payable")}>
{getFieldDecorator("federal_tax_payable", {
initialValue: job.federal_tax_payable
})(<InputNumber name="federal_tax_payable" />)}
</Form.Item>
TODO: equivalent of other customer amount
<Form.Item label={t("jobs.fields.other_amount_payable")}>
{getFieldDecorator("other_amount_payable", {
initialValue: job.other_amount_payable
})(<InputNumber name="other_amount_payable" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.towing_payable")}>
{getFieldDecorator("towing_payable", {
initialValue: job.towing_payable
})(<InputNumber name="towing_payable" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.storage_payable")}>
{getFieldDecorator("storage_payable", {
initialValue: job.storage_payable
})(<InputNumber name="storage_payable" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.adjustment_bottom_line")}>
{getFieldDecorator("adjustment_bottom_line", {
initialValue: job.adjustment_bottom_line
})(<InputNumber name="adjustment_bottom_line" />)}
</Form.Item>
</div>
);
}

View File

@@ -1,41 +1,45 @@
import { Divider, Form, Input } from "antd";
import { Divider, Form, Input, DatePicker } from "antd";
import React, { useContext } from "react";
import { useTranslation } from "react-i18next";
import JobDetailFormContext from "../../pages/jobs-detail/jobs-detail.page.context";
import FormItemEmail from "../form-items-formatted/email-form-item.component";
import FormItemPhone from "../form-items-formatted/phone-form-item.component";
import moment from "moment";
export default function JobsDetailInsurance({ job }) {
const form = useContext(JobDetailFormContext);
const { getFieldDecorator, getFieldValue } = form;
const { t } = useTranslation();
console.log("job.loss_date", job.loss_date);
return (
<div>
<Form.Item label={t("jobs.fields.ins_co_id")}>
{getFieldDecorator("ins_co_id", {
initialValue: job.ins_co_id
})(<Input name='ins_co_id' />)}
})(<Input name="ins_co_id" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.policy_no")}>
{getFieldDecorator("policy_no", {
initialValue: job.policy_no
})(<Input name='policy_no' />)}
})(<Input name="policy_no" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.clm_no")}>
{getFieldDecorator("clm_no", {
initialValue: job.clm_no
})(<Input name='clm_no' />)}
})(<Input name="clm_no" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.regie_number")}>
{getFieldDecorator("regie_number", {
initialValue: job.regie_number
})(<Input name='regie_number' />)}
})(<Input name="regie_number" />)}
</Form.Item>
TODO: missing KOL field???
<Form.Item label={t("jobs.fields.loss_date")}>
{getFieldDecorator("loss_date", {
initialValue: job.loss_date
})(<Input name='loss_date' />)}
initialValue: job.loss_date ? moment(job.loss_date) : null
})(<DatePicker name="loss_date" />)}
</Form.Item>
DAMAGE {JSON.stringify(job.area_of_damage)}
CAA # seems not correct based on field mapping Class seems not correct
@@ -43,32 +47,32 @@ export default function JobsDetailInsurance({ job }) {
<Form.Item label={t("jobs.fields.ins_co_nm")}>
{getFieldDecorator("ins_co_nm", {
initialValue: job.ins_co_nm
})(<Input name='ins_co_nm' />)}
})(<Input name="ins_co_nm" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.ins_addr1")}>
{getFieldDecorator("ins_addr1", {
initialValue: job.ins_addr1
})(<Input name='ins_addr1' />)}
})(<Input name="ins_addr1" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.ins_city")}>
{getFieldDecorator("ins_city", {
initialValue: job.ins_city
})(<Input name='ins_city' />)}
})(<Input name="ins_city" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.ins_ct_ln")}>
{getFieldDecorator("ins_ct_ln", {
initialValue: job.ins_ct_ln
})(<Input name='ins_ct_ln' />)}
})(<Input name="ins_ct_ln" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.ins_ct_fn")}>
{getFieldDecorator("ins_ct_fn", {
initialValue: job.ins_ct_fn
})(<Input name='ins_ct_fn' />)}
})(<Input name="ins_ct_fn" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.ins_ph1")}>
{getFieldDecorator("ins_ph1", {
initialValue: job.ins_ph1
})(<FormItemPhone customInput={Input} name='ins_ph1' />)}
})(<FormItemPhone customInput={Input} name="ins_ph1" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.ins_ea")}>
{getFieldDecorator("ins_ea", {
@@ -79,35 +83,35 @@ export default function JobsDetailInsurance({ job }) {
message: "This is not a valid email address."
}
]
})(<FormItemEmail name='ins_ea' email={getFieldValue("ins_ea")} />)}
})(<FormItemEmail name="ins_ea" email={getFieldValue("ins_ea")} />)}
</Form.Item>
<Divider />
Appraiser Info
<Form.Item label={t("jobs.fields.est_co_nm")}>
{getFieldDecorator("est_co_nm", {
initialValue: job.est_co_nm
})(<Input name='est_co_nm' />)}
})(<Input name="est_co_nm" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.est_ct_fn")}>
{getFieldDecorator("est_ct_fn", {
initialValue: job.est_ct_fn
})(<Input name='est_ct_fn' />)}
})(<Input name="est_ct_fn" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.est_ct_ln")}>
{getFieldDecorator("est_ct_ln", {
initialValue: job.est_ct_ln
})(<Input name='est_ct_ln' />)}
})(<Input name="est_ct_ln" />)}
</Form.Item>
TODO: Field is pay date but title is inspection date. Likely incorrect?
<Form.Item label={t("jobs.fields.pay_date")}>
{getFieldDecorator("pay_date", {
initialValue: job.pay_date
})(<Input name='pay_date' />)}
})(<Input name="pay_date" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.est_ph1")}>
{getFieldDecorator("est_ph1", {
initialValue: job.est_ph1
})(<Input name='est_ph1' />)}
})(<Input name="est_ph1" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.est_ea")}>
{getFieldDecorator("est_ea", {
@@ -118,27 +122,27 @@ export default function JobsDetailInsurance({ job }) {
message: "This is not a valid email address."
}
]
})(<FormItemEmail name='est_ea' email={getFieldValue("est_ea")} />)}
})(<FormItemEmail name="est_ea" email={getFieldValue("est_ea")} />)}
</Form.Item>
<Form.Item label={t("jobs.fields.selling_dealer")}>
{getFieldDecorator("selling_dealer", {
initialValue: job.selling_dealer
})(<Input name='selling_dealer' />)}
})(<Input name="selling_dealer" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.servicing_dealer")}>
{getFieldDecorator("servicing_dealer", {
initialValue: job.servicing_dealer
})(<Input name='servicing_dealer' />)}
})(<Input name="servicing_dealer" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.selling_dealer_contact")}>
{getFieldDecorator("selling_dealer_contact", {
initialValue: job.selling_dealer_contact
})(<Input name='selling_dealer_contact' />)}
})(<Input name="selling_dealer_contact" />)}
</Form.Item>
<Form.Item label={t("jobs.fields.servicing_dealer_contact")}>
{getFieldDecorator("servicing_dealer_contact", {
initialValue: job.servicing_dealer_contact
})(<Input name='servicing_dealer_contact' />)}
})(<Input name="servicing_dealer_contact" />)}
</Form.Item>
TODO: Adding servicing/selling dealer contact info?
</div>

View File

@@ -144,6 +144,14 @@ export const GET_JOB_BY_PK = gql`
regie_number
scheduled_completion
id
ded_amt
ded_status
depreciation_taxes
federal_tax_payable
other_amount_payable
towing_payable
storage_payable
adjustment_bottom_line
}
}
`;

View File

@@ -1,20 +1,20 @@
import { Form, Icon, Tabs, Alert, Button } from "antd";
import { Alert, Button, Form, Icon, Tabs } from "antd";
import React, { useContext } from "react";
import { useTranslation } from "react-i18next";
import {
FaHardHat,
FaInfo,
FaRegStickyNote,
FaShieldAlt,
FaHardHat
FaShieldAlt
} from "react-icons/fa";
import JobLinesContainer from "../../components/job-lines/job-lines.container.component";
import JobsDetailClaims from "../../components/jobs-detail-claims/jobs-detail-claims.component";
import JobsDetailFinancials from "../../components/jobs-detail-financial/jobs-detail-financial.component";
import JobsDetailHeader from "../../components/jobs-detail-header/jobs-detail-header.component";
import JobsDetailInsurance from "../../components/jobs-detail-insurance/jobs-detail-insurance.component";
import JobsDocumentsContainer from "../../components/jobs-documents/jobs-documents.container";
import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container";
import JobsRatesContainer from "../../components/jobs-rates/jobs-rates.container";
import JobDetailFormContext from "./jobs-detail.page.context";
import JobsDetailInsurance from "../../components/jobs-detail-insurance/jobs-detail-insurance.component";
export default function JobsDetailPage({
job,
@@ -60,7 +60,7 @@ export default function JobsDetailPage({
/>
) : null}
<Tabs defaultActiveKey='claimdetail'>
<Tabs defaultActiveKey="claimdetail">
<Tabs.TabPane
tab={
<span>
@@ -68,7 +68,8 @@ export default function JobsDetailPage({
{t("menus.jobsdetail.claimdetail")}
</span>
}
key='claimdetail'>
key="claimdetail"
>
<JobsDetailClaims job={job} />
</Tabs.TabPane>
@@ -79,40 +80,44 @@ export default function JobsDetailPage({
{t("menus.jobsdetail.insurance")}
</span>
}
key='insurance'>
key="insurance"
>
<JobsDetailInsurance job={job} />
</Tabs.TabPane>
<Tabs.TabPane
tab={
<span>
<Icon type='bars' />
<Icon type="bars" />
{t("menus.jobsdetail.repairdata")}
</span>
}
key='repairdata'>
key="repairdata"
>
<JobLinesContainer jobId={job.id} />
</Tabs.TabPane>
<Tabs.TabPane
tab={
<span>
<Icon type='dollar' />
<Icon type="dollar" />
{t("menus.jobsdetail.financials")}
</span>
}
key='financials'>
<JobsRatesContainer />
key="financials"
>
<JobsDetailFinancials job={job} />
</Tabs.TabPane>
<Tabs.TabPane
tab={
<span>
<Icon type='tool' />
<Icon type="tool" />
{t("menus.jobsdetail.partssublet")}
</span>
}
key='partssublet'>
key="partssublet"
>
Partssublet
</Tabs.TabPane>
@@ -123,29 +128,32 @@ export default function JobsDetailPage({
{t("menus.jobsdetail.labor")}
</span>
}
key='labor'>
key="labor"
>
Labor
</Tabs.TabPane>
<Tabs.TabPane
tab={
<span>
<Icon type='calendar' />
<Icon type="calendar" />
{t("menus.jobsdetail.dates")}
</span>
}
key='dates'>
key="dates"
>
Dates
</Tabs.TabPane>
<Tabs.TabPane
tab={
<span>
<Icon type='file-image' />
<Icon type="file-image" />
{t("jobs.labels.documents")}
</span>
}
key='#documents'>
key="#documents"
>
<JobsDocumentsContainer jobId={job.id} />
</Tabs.TabPane>
<Tabs.TabPane
@@ -155,7 +163,8 @@ export default function JobsDetailPage({
{t("jobs.labels.notes")}
</span>
}
key='#notes'>
key="#notes"
>
<JobNotesContainer jobId={job.id} />
</Tabs.TabPane>
</Tabs>

View File

@@ -58,6 +58,7 @@
"actual_completion": "Actual Completion",
"actual_delivery": "Actual Delivery",
"actual_in": "Actual In",
"adjustment_bottom_line": "Adjustments",
"claim_total": "Claim Total",
"clm_no": "Claim #",
"clm_total": "Claim Total",
@@ -69,7 +70,9 @@
"date_invoiced": "Invoiced",
"date_open": "Open",
"date_scheduled": "Scheduled",
"deductible": "Deductible",
"ded_amt": "Deductible",
"ded_status": "Deductible Status",
"depreciation_taxes": "Depreciation/Taxes",
"est_addr1": "Appraiser Address",
"est_co_nm": "Appraiser",
"est_ct_fn": "Appraiser First Name",
@@ -77,6 +80,7 @@
"est_ea": "Appraiser Email",
"est_number": "Estimate Number",
"est_ph1": "Appraiser Phone #",
"federal_tax_payable": "Federal Tax Payable",
"ins_addr1": "Insurance Co. Address",
"ins_city": "Insurance City",
"ins_co_id": "Insurance Co. ID",
@@ -89,6 +93,7 @@
"kmout": "Mileage Out",
"loss_date": "Loss Date",
"loss_desc": "Loss of Use",
"other_amount_payable": "Other Amount Payable",
"owner": "Owner",
"owner_owing": "Cust. Owes",
"ownr_ea": "Email",
@@ -111,6 +116,8 @@
"servicing_dealer_contact": "Servicing Dealer Contact",
"specialcoveragepolicy": "Special Coverage Policy",
"status": "Job Status",
"storage_payable": "Storage/PVRT",
"towing_payable": "Towing Payable",
"unitnumber": "Unit #",
"vehicle": "Vehicle"
},

View File

@@ -58,6 +58,7 @@
"actual_completion": "Realización real",
"actual_delivery": "Entrega real",
"actual_in": "Real en",
"adjustment_bottom_line": "Ajustes",
"claim_total": "Reclamar total",
"clm_no": "Reclamación #",
"clm_total": "Reclamar total",
@@ -69,7 +70,9 @@
"date_invoiced": "Facturado",
"date_open": "Abierto",
"date_scheduled": "Programado",
"deductible": "Deducible",
"ded_amt": "Deducible",
"ded_status": "Estado deducible",
"depreciation_taxes": "Depreciación / Impuestos",
"est_addr1": "Dirección del tasador",
"est_co_nm": "Tasador",
"est_ct_fn": "Nombre del tasador",
@@ -77,6 +80,7 @@
"est_ea": "Correo electrónico del tasador",
"est_number": "Numero Estimado",
"est_ph1": "Número de teléfono del tasador",
"federal_tax_payable": "Impuesto federal por pagar",
"ins_addr1": "Dirección de Insurance Co.",
"ins_city": "Ciudad de seguros",
"ins_co_id": "ID de la compañía de seguros",
@@ -89,6 +93,7 @@
"kmout": "Kilometraje",
"loss_date": "Fecha de pérdida",
"loss_desc": "Perdida de uso",
"other_amount_payable": "Otra cantidad a pagar",
"owner": "Propietario",
"owner_owing": "Cust. Debe",
"ownr_ea": "Email",
@@ -111,6 +116,8 @@
"servicing_dealer_contact": "Servicio Contacto con el concesionario",
"specialcoveragepolicy": "Política de cobertura especial",
"status": "Estado del trabajo",
"storage_payable": "Almacenamiento / PVRT",
"towing_payable": "Remolque a pagar",
"unitnumber": "Unidad #",
"vehicle": "Vehículo"
},

View File

@@ -58,6 +58,7 @@
"actual_completion": "Achèvement réel",
"actual_delivery": "Livraison réelle",
"actual_in": "En réel",
"adjustment_bottom_line": "Ajustements",
"claim_total": "Total réclamation",
"clm_no": "Prétendre #",
"clm_total": "Total réclamation",
@@ -69,7 +70,9 @@
"date_invoiced": "Facturé",
"date_open": "Ouvrir",
"date_scheduled": "Prévu",
"deductible": "Déductible",
"ded_amt": "Déductible",
"ded_status": "Statut de franchise",
"depreciation_taxes": "Amortissement / taxes",
"est_addr1": "Adresse de l'évaluateur",
"est_co_nm": "Expert",
"est_ct_fn": "Prénom de l'évaluateur",
@@ -77,6 +80,7 @@
"est_ea": "Courriel de l'évaluateur",
"est_number": "Numéro d'estimation",
"est_ph1": "Numéro de téléphone de l'évaluateur",
"federal_tax_payable": "Impôt fédéral à payer",
"ins_addr1": "Adresse Insurance Co.",
"ins_city": "Insurance City",
"ins_co_id": "ID de la compagnie d'assurance",
@@ -89,6 +93,7 @@
"kmout": "Kilométrage hors",
"loss_date": "Date de perte",
"loss_desc": "Perte d'usage",
"other_amount_payable": "Autre montant à payer",
"owner": "Propriétaire",
"owner_owing": "Cust. Owes",
"ownr_ea": "Email",
@@ -111,6 +116,8 @@
"servicing_dealer_contact": "Contacter le concessionnaire",
"specialcoveragepolicy": "Politique de couverture spéciale",
"status": "Statut de l'emploi",
"storage_payable": "Stockage / PVRT",
"towing_payable": "Remorquage à payer",
"unitnumber": "Unité #",
"vehicle": "Véhicule"
},