Additional Changes for calculations of RPS %.

This commit is contained in:
Patrick Fic
2020-10-16 15:14:25 -07:00
parent c94f525a3e
commit 584f43bc4e
27 changed files with 504 additions and 115 deletions

View File

@@ -1,4 +1,4 @@
import { Descriptions, Skeleton } from "antd";
import { Descriptions, PageHeader, Skeleton } from "antd";
import React from "react";
import CurrencyFormatterAtom from "../../atoms/currency-formatter/currency-formatter.atom";
import ErrorResultAtom from "../../atoms/error-result/error-result.atom";
@@ -10,24 +10,17 @@ export default function JobsDetailDescriptionMolecule({ loading, job }) {
return (
<div>
<Descriptions
title={`${job.clm_no}${job.ins_co_nm ? ` | ${job.ins_co_nm}` : ""}`}
bordered
layout="vertical"
column={{ xxl: 5, xl: 4, lg: 3, md: 3, sm: 2, xs: 1 }}
>
<Descriptions.Item label="Claim No.">{job.clm_no}</Descriptions.Item>
<Descriptions.Item label="Ins Co. Nm.">
{job.ins_co_nm}
</Descriptions.Item>
<Descriptions.Item label="Owner">{`${job.ownr_fn} ${job.ownr_ln}`}</Descriptions.Item>
<Descriptions.Item label="Vehicle">{`${job.v_model_yr} ${job.v_makedesc} ${job.v_model}`}</Descriptions.Item>
<Descriptions.Item label="Claim Total">
<CurrencyFormatterAtom>{job.clm_total}</CurrencyFormatterAtom>
</Descriptions.Item>
<Descriptions.Item label="Group">{job.group}</Descriptions.Item>
<Descriptions.Item label="Age">{job.v_age}</Descriptions.Item>
</Descriptions>
<PageHeader ghost={false} title={job.clm_no} subTitle={job.ins_co_nm}>
<Descriptions column={{ xxl: 5, xl: 4, lg: 3, md: 3, sm: 2, xs: 1 }}>
<Descriptions.Item label="Owner">{`${job.ownr_fn} ${job.ownr_ln}`}</Descriptions.Item>
<Descriptions.Item label="Vehicle">{`${job.v_model_yr} ${job.v_makedesc} ${job.v_model}`}</Descriptions.Item>
<Descriptions.Item label="Claim Total">
<CurrencyFormatterAtom>{job.clm_total}</CurrencyFormatterAtom>
</Descriptions.Item>
<Descriptions.Item label="Group">{job.group}</Descriptions.Item>
<Descriptions.Item label="Age">{job.v_age}</Descriptions.Item>
</Descriptions>
</PageHeader>
</div>
);
}

View File

@@ -1,8 +1,10 @@
import { Table } from "antd";
import React from "react";
import CurrencyFormatterAtom from "../../atoms/currency-formatter/currency-formatter.atom";
import PriceDiffPcFormatterAtom from "../../atoms/price-diff-pc-formatter/price-diff-pc-formatter.atom";
export default function JobLinesTableMolecule({ loading, jobLines }) {
export default function JobLinesTableMolecule({ loading, job }) {
const { joblines } = job;
const columns = [
{
title: "#",
@@ -48,9 +50,26 @@ export default function JobLinesTableMolecule({ loading, jobLines }) {
),
},
{
title: "Qty.",
dataIndex: "part_qty",
key: "part_qty",
title: "Price Diff.",
dataIndex: "price_diff",
key: "price_diff",
render: (text, record) => (
<CurrencyFormatterAtom>{record.price_diff}</CurrencyFormatterAtom>
),
},
{
title: "Price Diff. %",
dataIndex: "price_diff_pc",
key: "price_diff_pc",
render: (text, record) => (
<PriceDiffPcFormatterAtom
price_diff_pc={record.price_diff_pc}
v_age={job.v_age}
group={job.group}
/>
),
},
];
@@ -62,7 +81,7 @@ export default function JobLinesTableMolecule({ loading, jobLines }) {
loading={loading}
size="small"
pagination={false}
dataSource={jobLines}
dataSource={joblines}
scroll={{
x: true,
//y: "40rem"

View File

@@ -0,0 +1,52 @@
import { Skeleton, Space, Statistic } from "antd";
import React, { useMemo } from "react";
import ErrorResultAtom from "../../atoms/error-result/error-result.atom";
import TargetPriceDiffPcAtom from "../../atoms/target-price-diff/target-price-diff-pc.atom";
import _ from "lodash";
import Dinero from "dinero.js";
export default function JobsTargetsStatsMolecule({ loading, job }) {
const currentRpsPc = useMemo(() => {
if (!job) {
return 0;
}
return (
(_.sum(job.joblines.map((jl) => jl.price_diff_pc)) /
job.joblines.length) *
100
).toFixed(1);
}, [job]);
const currentRpsDollars = useMemo(() => {
if (!job) {
return 0;
}
return job.joblines.reduce((acc, val) => {
console.log("val.price_diff :>> ", val.price_diff);
if (val.price_diff > 0) {
return acc.add(
Dinero({ amount: Math.round((val.price_diff || 0) * 100) })
);
} else {
return acc;
}
}, Dinero());
}, [job]);
if (loading) return <Skeleton active />;
if (!job) return <ErrorResultAtom title="Error displaying job data." />;
return (
<div
style={{
display: "flex",
alignItems: "center",
justifyContent: "space-around",
}}
>
<TargetPriceDiffPcAtom v_age={job.v_age} group={job.group} />
<Statistic title="Current RPS %" value={currentRpsPc} suffix="%" />
<Statistic title="Current RPS $" value={currentRpsDollars.toFormat()} />
</div>
);
}