Added memo to time ticket IO-485
This commit is contained in:
@@ -18940,6 +18940,27 @@
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>discrepancy</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
<description></description>
|
||||
<comment></comment>
|
||||
<default_text></default_text>
|
||||
<translations>
|
||||
<translation>
|
||||
<language>en-US</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>es-MX</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
<translation>
|
||||
<language>fr-CA</language>
|
||||
<approved>false</approved>
|
||||
</translation>
|
||||
</translations>
|
||||
</concept_node>
|
||||
<concept_node>
|
||||
<name>joblinestotal</name>
|
||||
<definition_loaded>false</definition_loaded>
|
||||
|
||||
@@ -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")}
|
||||
|
||||
@@ -9,6 +9,7 @@ export const QUERY_TICKETS_BY_JOBID = gql`
|
||||
rate
|
||||
productivehrs
|
||||
id
|
||||
memo
|
||||
employee {
|
||||
employee_number
|
||||
first_name
|
||||
@@ -66,6 +67,7 @@ export const INSERT_NEW_TIME_TICKET = gql`
|
||||
actualhrs
|
||||
ciecacode
|
||||
date
|
||||
memo
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -92,6 +94,7 @@ export const UPDATE_TIME_TICKET = gql`
|
||||
updated_at
|
||||
jobid
|
||||
date
|
||||
memo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1145,6 +1145,7 @@
|
||||
"byassoc": "By Line Association",
|
||||
"byprice": "By Price",
|
||||
"clear": "Clear All",
|
||||
"discrepancy": "Discrepancy",
|
||||
"joblinestotal": "Job Lines Total",
|
||||
"multipleactprices": "${{act_price}} is the price for multiple job lines.",
|
||||
"multiplebilllines": "{{line_desc}} has 2 or more bill lines associated to it.",
|
||||
|
||||
@@ -1145,6 +1145,7 @@
|
||||
"byassoc": "",
|
||||
"byprice": "",
|
||||
"clear": "",
|
||||
"discrepancy": "",
|
||||
"joblinestotal": "",
|
||||
"multipleactprices": "",
|
||||
"multiplebilllines": "",
|
||||
|
||||
@@ -1145,6 +1145,7 @@
|
||||
"byassoc": "",
|
||||
"byprice": "",
|
||||
"clear": "",
|
||||
"discrepancy": "",
|
||||
"joblinestotal": "",
|
||||
"multipleactprices": "",
|
||||
"multiplebilllines": "",
|
||||
|
||||
Reference in New Issue
Block a user