Add task name to queries.

This commit is contained in:
Patrick Fic
2023-07-28 09:34:27 -07:00
parent fe16329443
commit ff153cdd81
9 changed files with 120 additions and 96 deletions

View File

@@ -1,4 +1,4 @@
<babeledit_project be_version="2.7.1" version="1.2"> <babeledit_project version="1.2" be_version="2.7.1">
<!-- <!--
BabelEdit project file BabelEdit project file
@@ -46546,27 +46546,6 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>parent_task</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> <concept_node>
<name>productivehrs</name> <name>productivehrs</name>
<definition_loaded>false</definition_loaded> <definition_loaded>false</definition_loaded>
@@ -46609,6 +46588,27 @@
</translation> </translation>
</translations> </translations>
</concept_node> </concept_node>
<concept_node>
<name>task_name</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>
</children> </children>
</folder_node> </folder_node>
<folder_node> <folder_node>

View File

@@ -1,4 +1,5 @@
import { Button, Card, Col, Row, Space, Table, Typography } from "antd"; import { Button, Card, Col, Row, Space, Table, Typography } from "antd";
import { SyncOutlined } from '@ant-design/icons'
import axios from "axios"; import axios from "axios";
import _ from "lodash"; import _ from "lodash";
import React, { useEffect, useMemo, useState } from "react"; import React, { useEffect, useMemo, useState } from "react";
@@ -241,7 +242,7 @@ export function PayrollLaborAllocationsTable({
refetch(); refetch();
}} }}
> >
(TODO: Add Label) Calculate Labor <SyncOutlined/>
</Button> </Button>
</Space> </Space>
} }

View File

@@ -1,4 +1,4 @@
import { EditFilled } from "@ant-design/icons"; import { EditFilled, SyncOutlined } from "@ant-design/icons";
import { Button, Card, Checkbox, Space, Table } from "antd"; import { Button, Card, Checkbox, Space, Table } from "antd";
import moment from "moment"; import moment from "moment";
import React, { useMemo, useState } from "react"; import React, { useMemo, useState } from "react";
@@ -132,21 +132,26 @@ export function TimeTicketList({
}) || [], }) || [],
onFilter: (value, record) => value.includes(record.cost_center), onFilter: (value, record) => value.includes(record.cost_center),
}, },
{ ...(jobId
title: t("jobs.fields.ro_number"), ? []
dataIndex: "ro_number", : [
key: "ro_number", {
sorter: (a, b) => title: t("jobs.fields.ro_number"),
alphaSort(a.job && a.job.ro_number, b.job && b.job.ro_number), dataIndex: "ro_number",
sortOrder: key: "ro_number",
state.sortedInfo.columnKey === "ro_number" && state.sortedInfo.order, sorter: (a, b) =>
render: (text, record) => alphaSort(a.job && a.job.ro_number, b.job && b.job.ro_number),
record.job && ( sortOrder:
<Link to={"/manage/jobs/" + record.job.id}> state.sortedInfo.columnKey === "ro_number" &&
{record.job.ro_number || "N/A"} state.sortedInfo.order,
</Link> render: (text, record) =>
), record.job && (
}, <Link to={"/manage/jobs/" + record.job.id}>
{record.job.ro_number || "N/A"}
</Link>
),
},
]),
{ {
title: t("timetickets.fields.productivehrs"), title: t("timetickets.fields.productivehrs"),
dataIndex: "productivehrs", dataIndex: "productivehrs",
@@ -156,14 +161,20 @@ export function TimeTicketList({
state.sortedInfo.columnKey === "productivehrs" && state.sortedInfo.columnKey === "productivehrs" &&
state.sortedInfo.order, state.sortedInfo.order,
}, },
{ ...(Enhanced_Payroll.treatment === "on"
title: t("timetickets.fields.actualhrs"), ? []
dataIndex: "actualhrs", : [
key: "actualhrs", {
sorter: (a, b) => a.actualhrs - b.actualhrs, title: t("timetickets.fields.actualhrs"),
sortOrder: dataIndex: "actualhrs",
state.sortedInfo.columnKey === "actualhrs" && state.sortedInfo.order, key: "actualhrs",
}, sorter: (a, b) => a.actualhrs - b.actualhrs,
sortOrder:
state.sortedInfo.columnKey === "actualhrs" &&
state.sortedInfo.order,
},
]),
{ {
title: t("timetickets.fields.memo"), title: t("timetickets.fields.memo"),
dataIndex: "memo", dataIndex: "memo",
@@ -177,52 +188,57 @@ export function TimeTicketList({
...(Enhanced_Payroll.treatment === "on" ...(Enhanced_Payroll.treatment === "on"
? [ ? [
{ {
title: t("timetickets.fields.parent_task"), title: t("timetickets.fields.task_name"),
dataIndex: "parent_task", dataIndex: "task_name",
key: "parent_task", key: "task_name",
sorter: (a, b) => alphaSort(a.parent_task, b.parent_task), sorter: (a, b) => alphaSort(a.task_name, b.task_name),
sortOrder: sortOrder:
state.sortedInfo.columnKey === "parent_task" && state.sortedInfo.columnKey === "task_name" &&
state.sortedInfo.order, state.sortedInfo.order,
}, },
] ]
: []), : []),
{ ...(Enhanced_Payroll.treatment === "on"
title: t("timetickets.fields.clockon"), ? []
dataIndex: "clockon", : [
key: "clockon", {
title: t("timetickets.fields.clockon"),
dataIndex: "clockon",
key: "clockon",
render: (text, record) => ( render: (text, record) => (
<DateTimeFormatter>{record.clockon}</DateTimeFormatter> <DateTimeFormatter>{record.clockon}</DateTimeFormatter>
), ),
}, },
{ {
title: t("timetickets.fields.clockoff"), title: t("timetickets.fields.clockoff"),
dataIndex: "clockoff", dataIndex: "clockoff",
key: "clockoff", key: "clockoff",
render: (text, record) => (
<DateTimeFormatter>{record.clockoff}</DateTimeFormatter>
),
},
{
title: t("timetickets.fields.clockhours"),
dataIndex: "clockhours",
key: "clockhours",
render: (text, record) => {
if (record.clockoff && record.clockon)
return (
<div>
{moment(record.clockoff)
.diff(moment(record.clockon), "hours", true)
.toFixed(2)}
</div>
);
else {
return null;
}
},
},
]),
render: (text, record) => (
<DateTimeFormatter>{record.clockoff}</DateTimeFormatter>
),
},
{
title: t("timetickets.fields.clockhours"),
dataIndex: "clockhours",
key: "clockhours",
render: (text, record) => {
if (record.clockoff && record.clockon)
return (
<div>
{moment(record.clockoff)
.diff(moment(record.clockon), "hours", true)
.toFixed(2)}
</div>
);
else {
return null;
}
},
},
// { // {
// title: "Pay", // title: "Pay",
// dataIndex: "pay", // dataIndex: "pay",
@@ -295,6 +311,7 @@ export function TimeTicketList({
<Space wrap> <Space wrap>
{jobId && bodyshop.md_tasks_presets.enable_tasks && ( {jobId && bodyshop.md_tasks_presets.enable_tasks && (
<Button <Button
disabled={disabled}
onClick={() => { onClick={() => {
setTimeTicketTaskContext({ setTimeTicketTaskContext({
actions: { refetch: refetch }, actions: { refetch: refetch },
@@ -316,6 +333,13 @@ export function TimeTicketList({
</TimeTicketEnterButton> </TimeTicketEnterButton>
))} ))}
{extra} {extra}
<Button
onClick={async () => {
refetch();
}}
>
<SyncOutlined />
</Button>
</Space> </Space>
} }
> >

View File

@@ -52,10 +52,7 @@ export function TimeTicketTaskModalComponent({
}, },
]} ]}
> >
<JobSearchSelectComponent <JobSearchSelectComponent convertedOnly={true} notExported={true} />
convertedOnly={!bodyshop.tt_allow_post_to_invoiced}
notExported={!bodyshop.tt_allow_post_to_invoiced}
/>
</Form.Item> </Form.Item>
<Space wrap> <Space wrap>
<Form.Item name="task" label={t("timetickets.labels.task")}> <Form.Item name="task" label={t("timetickets.labels.task")}>

View File

@@ -68,6 +68,7 @@ export const GET_LINE_TICKET_BY_PK = gql`
rate rate
committed_at committed_at
commited_by commited_by
task_name
employee { employee {
id id
first_name first_name

View File

@@ -48,6 +48,7 @@ export const QUERY_TIME_TICKETS_IN_RANGE = gql`
flat_rate flat_rate
commited_by commited_by
committed_at committed_at
task_name
job { job {
id id
ro_number ro_number

View File

@@ -2760,9 +2760,9 @@
"employee_team": "Employee Team", "employee_team": "Employee Team",
"flat_rate": "Flat Rate?", "flat_rate": "Flat Rate?",
"memo": "Memo", "memo": "Memo",
"parent_task": "Task",
"productivehrs": "Productive Hours", "productivehrs": "Productive Hours",
"ro_number": "Job to Post Against" "ro_number": "Job to Post Against",
"task_name": "Task"
}, },
"labels": { "labels": {
"alreadyclockedon": "You are already clocked in to the following job(s):", "alreadyclockedon": "You are already clocked in to the following job(s):",

View File

@@ -2760,9 +2760,9 @@
"employee_team": "", "employee_team": "",
"flat_rate": "", "flat_rate": "",
"memo": "", "memo": "",
"parent_task": "",
"productivehrs": "", "productivehrs": "",
"ro_number": "" "ro_number": "",
"task_name": ""
}, },
"labels": { "labels": {
"alreadyclockedon": "", "alreadyclockedon": "",

View File

@@ -2760,9 +2760,9 @@
"employee_team": "", "employee_team": "",
"flat_rate": "", "flat_rate": "",
"memo": "", "memo": "",
"parent_task": "",
"productivehrs": "", "productivehrs": "",
"ro_number": "" "ro_number": "",
"task_name": ""
}, },
"labels": { "labels": {
"alreadyclockedon": "", "alreadyclockedon": "",