Added memo to time ticket IO-485
This commit is contained in:
@@ -46,51 +46,63 @@ export default function JobReconciliationTotals({
|
||||
}, [billLines, jobLines, selectedBillLines, selectedJobLines]);
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Space direction="horizontal">
|
||||
<Statistic
|
||||
title={t("jobs.labels.reconciliation.joblinestotal")}
|
||||
value={totals.joblinesTotal.toFormat()}
|
||||
/>
|
||||
<Statistic
|
||||
title={t("jobs.labels.reconciliation.billlinestotal")}
|
||||
value={totals.billLinesTotal.toFormat()}
|
||||
/>
|
||||
<Button
|
||||
onClick={() =>
|
||||
reconcileByAssocLine(
|
||||
jobLines,
|
||||
jobLineState,
|
||||
billLines,
|
||||
billLineState,
|
||||
setErrors
|
||||
)
|
||||
}
|
||||
>
|
||||
{t("jobs.labels.reconciliation.byassoc")}
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() =>
|
||||
reconcileByPrice(
|
||||
jobLines,
|
||||
jobLineState,
|
||||
billLines,
|
||||
billLineState,
|
||||
setErrors
|
||||
)
|
||||
}
|
||||
>
|
||||
{t("jobs.labels.reconciliation.byprice")}
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => {
|
||||
jobLineState[1]([]);
|
||||
billLineState[1]([]);
|
||||
}}
|
||||
>
|
||||
{t("jobs.labels.reconciliation.clear")}
|
||||
</Button>
|
||||
</Space>
|
||||
<div style={{ display: "inline-block" }}>
|
||||
<div>
|
||||
<Space>
|
||||
<Statistic
|
||||
title={t("jobs.labels.reconciliation.joblinestotal")}
|
||||
value={totals.joblinesTotal.toFormat()}
|
||||
/>
|
||||
<Statistic
|
||||
title={t("jobs.labels.reconciliation.billlinestotal")}
|
||||
value={totals.billLinesTotal.toFormat()}
|
||||
/>
|
||||
<Statistic
|
||||
title={t("jobs.labels.reconciliation.discrepancy")}
|
||||
value={totals.joblinesTotal
|
||||
.subtract(totals.billLinesTotal)
|
||||
.toFormat()}
|
||||
/>
|
||||
</Space>
|
||||
</div>
|
||||
<div>
|
||||
<Space direction="horizontal">
|
||||
<Button
|
||||
onClick={() =>
|
||||
reconcileByAssocLine(
|
||||
jobLines,
|
||||
jobLineState,
|
||||
billLines,
|
||||
billLineState,
|
||||
setErrors
|
||||
)
|
||||
}
|
||||
>
|
||||
{t("jobs.labels.reconciliation.byassoc")}
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() =>
|
||||
reconcileByPrice(
|
||||
jobLines,
|
||||
jobLineState,
|
||||
billLines,
|
||||
billLineState,
|
||||
setErrors
|
||||
)
|
||||
}
|
||||
>
|
||||
{t("jobs.labels.reconciliation.byprice")}
|
||||
</Button>
|
||||
<Button
|
||||
onClick={() => {
|
||||
jobLineState[1]([]);
|
||||
billLineState[1]([]);
|
||||
}}
|
||||
>
|
||||
{t("jobs.labels.reconciliation.clear")}
|
||||
</Button>
|
||||
</Space>
|
||||
</div>
|
||||
{errors.length > 0 && (
|
||||
<div>
|
||||
{t("general.labels.errors")}
|
||||
|
||||
@@ -98,6 +98,14 @@ export default function TimeTicketList({
|
||||
sortOrder:
|
||||
state.sortedInfo.columnKey === "actualhrs" && state.sortedInfo.order,
|
||||
},
|
||||
{
|
||||
title: t("timetickets.fields.memo"),
|
||||
dataIndex: "memo",
|
||||
key: "memo",
|
||||
sorter: (a, b) => a.memo - b.memo,
|
||||
sortOrder:
|
||||
state.sortedInfo.columnKey === "memo" && state.sortedInfo.order,
|
||||
},
|
||||
{
|
||||
title: t("timetickets.fields.clockon"),
|
||||
dataIndex: "clockon",
|
||||
|
||||
@@ -124,6 +124,10 @@ export default function TimeTicketModalComponent({
|
||||
<InputNumber min={0} precision={1} />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item label={t("timetickets.fields.memo")} name="memo">
|
||||
<Input />
|
||||
</Form.Item>
|
||||
|
||||
<Form.Item
|
||||
name="ciecacode"
|
||||
label={t("timetickets.fields.ciecacode")}
|
||||
|
||||
Reference in New Issue
Block a user