Add claimed task name to tickets.

This commit is contained in:
Patrick Fic
2023-07-28 08:22:38 -07:00
parent ab2cf8c8c7
commit fe16329443
10 changed files with 126 additions and 22 deletions

View File

@@ -1,4 +1,4 @@
<babeledit_project version="1.2" be_version="2.7.1">
<babeledit_project be_version="2.7.1" version="1.2">
<!--
BabelEdit project file
@@ -1474,6 +1474,27 @@
</translation>
</translations>
</concept_node>
<concept_node>
<name>admin_jobuninvoice</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>admin_jobunvoid</name>
<definition_loaded>false</definition_loaded>
@@ -23815,6 +23836,27 @@
</translation>
</translations>
</concept_node>
<concept_node>
<name>date_void</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>ded_amt</name>
<definition_loaded>false</definition_loaded>
@@ -40967,6 +41009,27 @@
</translation>
</translations>
</concept_node>
<concept_node>
<name>parts_return_slip</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>sublet_order</name>
<definition_loaded>false</definition_loaded>
@@ -46483,6 +46546,27 @@
</translation>
</translations>
</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>
<name>productivehrs</name>
<definition_loaded>false</definition_loaded>

View File

@@ -18,6 +18,8 @@ import RbacWrapper, {
HasRbacAccess,
} from "../rbac-wrapper/rbac-wrapper.component";
import TimeTicketEnterButton from "../time-ticket-enter-button/time-ticket-enter-button.component";
import { useTreatments } from "@splitsoftware/splitio-react";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
authLevel: selectAuthLevel,
@@ -46,7 +48,11 @@ export function TimeTicketList({
});
const { t } = useTranslation();
const { Enhanced_Payroll } = useTreatments(
["Enhanced_Payroll"],
{},
bodyshop.imexshopid
);
const totals = useMemo(() => {
if (timetickets)
return timetickets.reduce(
@@ -168,6 +174,19 @@ export function TimeTicketList({
render: (text, record) =>
record.clockon || record.clockoff ? t(record.memo) : record.memo,
},
...(Enhanced_Payroll.treatment === "on"
? [
{
title: t("timetickets.fields.parent_task"),
dataIndex: "parent_task",
key: "parent_task",
sorter: (a, b) => alphaSort(a.parent_task, b.parent_task),
sortOrder:
state.sortedInfo.columnKey === "parent_task" &&
state.sortedInfo.order,
},
]
: []),
{
title: t("timetickets.fields.clockon"),
dataIndex: "clockon",
@@ -274,17 +293,11 @@ export function TimeTicketList({
title={t("timetickets.labels.timetickets")}
extra={
<Space wrap>
{
// <TimeTicketListTeamPay
// actions={{ refetch }}
// context={{ jobId: jobId }}
// />
}
{bodyshop.md_tasks_presets.enable_tasks && (
{jobId && bodyshop.md_tasks_presets.enable_tasks && (
<Button
onClick={() => {
setTimeTicketTaskContext({
actions: {},
actions: { refetch: refetch },
context: { jobid: jobId },
});
}}

View File

@@ -36,10 +36,6 @@ export function TimeTicketTaskModalComponent({
completedTasks,
unassignedHours,
}) {
console.log(
"🚀 ~ file: time-ticket-task-modal.component.jsx:39 ~ unassignedHours:",
unassignedHours
);
const { t } = useTranslation();
return (

View File

@@ -31,7 +31,7 @@ export function TimeTickeTaskModalContainer({
toggleModalVisible,
}) {
const [form] = Form.useForm();
const { context, visible } = timeTicketTasksModal;
const { context, visible, actions } = timeTicketTasksModal;
const [completedTasks, setCompletedTasks] = useState([]);
const [unassignedHours, setUnassignedHours] = useState(0);
const { t } = useTranslation();
@@ -83,6 +83,7 @@ export function TimeTickeTaskModalContainer({
});
if (response.status === 200 && handleFinish) {
//Close the modal
if (actions?.refetch) actions.refetch();
toggleModalVisible();
} else if (handleFinish === false) {
form.setFieldsValue({ timetickets: data.ticketsToInsert });

View File

@@ -2432,7 +2432,7 @@
"jobs": {
"individual_job_note": "Job Note RO: {{ro_number}}",
"parts_order": "Parts Order PO: {{ro_number}} - {{name}}",
"parts_return_slip":"Parts Return PO: {{ro_number}} - {{name}}",
"parts_return_slip": "Parts Return PO: {{ro_number}} - {{name}}",
"sublet_order": "Sublet Order PO: {{ro_number}} - {{name}}"
}
},
@@ -2760,6 +2760,7 @@
"employee_team": "Employee Team",
"flat_rate": "Flat Rate?",
"memo": "Memo",
"parent_task": "Task",
"productivehrs": "Productive Hours",
"ro_number": "Job to Post Against"
},

View File

@@ -2760,6 +2760,7 @@
"employee_team": "",
"flat_rate": "",
"memo": "",
"parent_task": "",
"productivehrs": "",
"ro_number": ""
},

View File

@@ -2760,6 +2760,7 @@
"employee_team": "",
"flat_rate": "",
"memo": "",
"parent_task": "",
"productivehrs": "",
"ro_number": ""
},

View File

@@ -14,7 +14,7 @@ Dinero.globalRoundingMode = "HALF_EVEN";
exports.calculatelabor = async function (req, res) {
const BearerToken = req.headers.authorization;
const { jobid, calculateOnly } = req.body;
logger.log("job-payroll-pay-all", "DEBUG", req.user.email, jobid, null);
logger.log("job-payroll-calculate-labor", "DEBUG", req.user.email, jobid, null);
const client = new GraphQLClient(process.env.GRAPHQL_ENDPOINT, {
headers: {
Authorization: BearerToken,

View File

@@ -31,6 +31,12 @@ exports.claimtask = async function (req, res) {
const theTaskPreset = job.bodyshop.md_tasks_presets.presets.find(
(tp) => tp.name === task
);
if (!theTaskPreset) {
res
.status(400)
.json({ success: false, error: "Provided task preset not found." });
return;
}
//Get all of the assignments that are filtered.
const { assignmentHash, employeeHash } = CalculateExpectedHoursForJob(
@@ -52,6 +58,7 @@ exports.claimtask = async function (req, res) {
(theTaskPreset.percent / 100);
ticketsToInsert.push({
task_name: task,
jobid: job.id,
bodyshopid: job.bodyshop.id,
employeeid: employeeIdKey,

View File

@@ -53,6 +53,7 @@ exports.payall = async function (req, res) {
console.log("Hours", diff.val[key][Object.keys(diff.val[key])[0]]);
console.log("Rate", Object.keys(diff.val[key])[0]);
ticketsToInsert.push({
task_name: "Pay All",
jobid: job.id,
bodyshopid: job.bodyshop.id,
employeeid: path.employeeid,
@@ -68,6 +69,7 @@ exports.payall = async function (req, res) {
} else {
//Only the 1 value to add.
ticketsToInsert.push({
task_name: "Pay All",
jobid: job.id,
bodyshopid: job.bodyshop.id,
employeeid: path.employeeid,
@@ -86,6 +88,7 @@ exports.payall = async function (req, res) {
//An old ticket amount isn't sufficient
//We can't modify the existing ticket, it might already be committed. So let's add a new one instead.
ticketsToInsert.push({
task_name: "Pay All",
jobid: job.id,
bodyshopid: job.bodyshop.id,
employeeid: path.employeeid,
@@ -107,12 +110,8 @@ exports.payall = async function (req, res) {
) {
//Multiple oldValues to add.
Object.keys(diff.oldVal).forEach((key) => {
console.log(
"Hours",
diff.oldVal[key][Object.keys(diff.oldVal[key])[0]]
);
console.log("Rate", Object.keys(diff.oldVal[key])[0]);
ticketsToInsert.push({
task_name: "Pay All",
jobid: job.id,
bodyshopid: job.bodyshop.id,
employeeid: path.employeeid,
@@ -129,6 +128,7 @@ exports.payall = async function (req, res) {
} else {
//Only the 1 value to add.
ticketsToInsert.push({
task_name: "Pay All",
jobid: job.id,
bodyshopid: job.bodyshop.id,
employeeid: path.employeeid,