diff --git a/client/src/components/jobs-admin-dates/jobs-admin-dates.component.jsx b/client/src/components/jobs-admin-dates/jobs-admin-dates.component.jsx
index d497c9618..bfddbfefc 100644
--- a/client/src/components/jobs-admin-dates/jobs-admin-dates.component.jsx
+++ b/client/src/components/jobs-admin-dates/jobs-admin-dates.component.jsx
@@ -1,14 +1,14 @@
-import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component";
import { useMutation } from "@apollo/client";
import { Button, Form, notification } from "antd";
+import moment from "moment";
import React, { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { UPDATE_JOB } from "../../graphql/jobs.queries";
-import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component";
-import LayoutFormRow from "../layout-form-row/layout-form-row.component";
-import moment from "moment";
-import FormDatePicker from "../form-date-picker/form-date-picker.component";
import AuditTrailMapping from "../../utils/AuditTrailMappings";
+import FormDatePicker from "../form-date-picker/form-date-picker.component";
+import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component";
+import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component";
+import LayoutFormRow from "../layout-form-row/layout-form-row.component";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
@@ -38,8 +38,8 @@ export function JobsAdminDatesChange({ insertAuditTrail, job }) {
setLoading(true);
const result = await updateJob({
variables: { jobId: job.id, job: values },
- refetchQueries: ['GET_JOB_BY_PK'],
- awaitRefetchQueries:true
+ refetchQueries: ["GET_JOB_BY_PK"],
+ awaitRefetchQueries: true,
});
const changedAuditFields = form.getFieldsValue(
@@ -126,7 +126,10 @@ export function JobsAdminDatesChange({ insertAuditTrail, job }) {
-
+
+
+
+
diff --git a/client/src/components/jobs-admin-mark-reexport/jobs-admin-mark-reexport.component.jsx b/client/src/components/jobs-admin-mark-reexport/jobs-admin-mark-reexport.component.jsx
index 137c074aa..c47c30def 100644
--- a/client/src/components/jobs-admin-mark-reexport/jobs-admin-mark-reexport.component.jsx
+++ b/client/src/components/jobs-admin-mark-reexport/jobs-admin-mark-reexport.component.jsx
@@ -1,19 +1,18 @@
-import { useMutation } from "@apollo/client";
+import { gql, useMutation } from "@apollo/client";
import { Button, notification } from "antd";
-import { gql } from "@apollo/client";
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
+import moment from "moment";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
+import { INSERT_EXPORT_LOG } from "../../graphql/accounting.queries";
+import { insertAuditTrail } from "../../redux/application/application.actions";
import {
selectBodyshop,
selectCurrentUser,
} from "../../redux/user/user.selectors";
-import moment from "moment";
import AuditTrailMapping from "../../utils/AuditTrailMappings";
-import { insertAuditTrail } from "../../redux/application/application.actions";
-import { INSERT_EXPORT_LOG } from "../../graphql/accounting.queries";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
currentUser: selectCurrentUser,
@@ -150,6 +149,10 @@ export function JobAdminMarkReexport({
if (!result.errors) {
notification["success"]({ message: t("jobs.successes.save") });
+ insertAuditTrail({
+ jobid: job.id,
+ operation: AuditTrailMapping.admin_jobuninvoice(),
+ });
} else {
notification["error"]({
message: t("jobs.errors.saving", {
diff --git a/client/src/components/jobs-admin-unvoid/jobs-admin-unvoid.component.jsx b/client/src/components/jobs-admin-unvoid/jobs-admin-unvoid.component.jsx
index 51d5d33ed..7963fd05f 100644
--- a/client/src/components/jobs-admin-unvoid/jobs-admin-unvoid.component.jsx
+++ b/client/src/components/jobs-admin-unvoid/jobs-admin-unvoid.component.jsx
@@ -33,8 +33,9 @@ export function JobsAdminUnvoid({
mutation UNVOID_JOB($jobId: uuid!) {
update_jobs_by_pk(pk_columns: {id: $jobId}, _set: {voided: false, status: "${
bodyshop.md_ro_statuses.default_imported
- }"}) {
+ }", date_void: null}) {
id
+ date_void
voided
status
}
diff --git a/client/src/components/jobs-detail-dates/jobs-detail-dates.component.jsx b/client/src/components/jobs-detail-dates/jobs-detail-dates.component.jsx
index ac501c7e1..05cd1b289 100644
--- a/client/src/components/jobs-detail-dates/jobs-detail-dates.component.jsx
+++ b/client/src/components/jobs-detail-dates/jobs-detail-dates.component.jsx
@@ -141,6 +141,10 @@ export function JobsDetailDatesComponent({ jobRO, job, bodyshop }) {
+
+
+
+
);
diff --git a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx
index 48118f1c0..4565864f5 100644
--- a/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx
+++ b/client/src/components/jobs-detail-header-actions/jobs-detail-header-actions.component.jsx
@@ -5,10 +5,10 @@ import {
Dropdown,
Form,
Menu,
- notification,
Popconfirm,
Popover,
Select,
+ notification,
} from "antd";
import React, { useMemo } from "react";
import { useTranslation } from "react-i18next";
@@ -24,12 +24,12 @@ import {
selectBodyshop,
selectCurrentUser,
} from "../../redux/user/user.selectors";
+import RbacWrapper from "../rbac-wrapper/rbac-wrapper.component";
import JobsDetailHeaderActionsAddevent from "./jobs-detail-header-actions.addevent";
import AddToProduction from "./jobs-detail-header-actions.addtoproduction.util";
import JobsDetaiLheaderCsi from "./jobs-detail-header-actions.csi.component";
import DuplicateJob from "./jobs-detail-header-actions.duplicate.util";
import JobsDetailHeaderActionsExportcustdataComponent from "./jobs-detail-header-actions.exportcustdata.component";
-import RbacWrapper from "../rbac-wrapper/rbac-wrapper.component";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
@@ -480,6 +480,7 @@ export function JobsDetailHeaderActions({
scheduled_in: null,
scheduled_completion: null,
inproduction: false,
+ date_void: new Date(),
},
note: [
{
diff --git a/client/src/components/scoreboard-chart/scoreboard-chart.component.jsx b/client/src/components/scoreboard-chart/scoreboard-chart.component.jsx
index 545030397..4e9aa85d0 100644
--- a/client/src/components/scoreboard-chart/scoreboard-chart.component.jsx
+++ b/client/src/components/scoreboard-chart/scoreboard-chart.component.jsx
@@ -47,9 +47,7 @@ export function ScoreboardChart({ sbEntriesByDate, bodyshop }) {
bodyhrs: dayAcc.bodyhrs + dayVal.bodyhrs,
painthrs: dayAcc.painthrs + dayVal.painthrs,
sales:
- dayAcc.painthrs +
- dayVal.job.job_totals.totals.subtotal.amount / 100 +
- 2500,
+ dayAcc.sales + dayVal.job.job_totals.totals.subtotal.amount / 100,
};
},
{ bodyhrs: 0, painthrs: 0, sales: 0 }
diff --git a/client/src/components/shop-info/shop-info.general.component.jsx b/client/src/components/shop-info/shop-info.general.component.jsx
index 416d2f658..99245c76e 100644
--- a/client/src/components/shop-info/shop-info.general.component.jsx
+++ b/client/src/components/shop-info/shop-info.general.component.jsx
@@ -602,6 +602,18 @@ export default function ShopInfoGeneral({ form }) {
>
+
+
+
i18n.t("audit_trail.messages.jobnoteupdated"),
jobnotedeleted: () => i18n.t("audit_trail.messages.jobnotedeleted"),
admin_jobunvoid: () => i18n.t("audit_trail.messages.admin_jobunvoid"),
+ admin_jobuninvoice: () => i18n.t("audit_trail.messages.admin_jobuninvoice"),
admin_jobmarkforreexport: () =>
i18n.t("audit_trail.messages.admin_jobmarkforreexport"),
admin_jobmarkexported: () =>
diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js
index c07e375fa..558af08bc 100644
--- a/client/src/utils/TemplateConstants.js
+++ b/client/src/utils/TemplateConstants.js
@@ -606,7 +606,14 @@ export const TemplateList = (type, context) => {
},
parts_return_slip: {
title: i18n.t("printcenter.jobs.parts_return_slip"),
- subject: i18n.t("printcenter.jobs.parts_return_slip"),
+ subject: i18n.t("printcenter.subjects.jobs.parts_return_slip", {
+ ro_number: context && context.job && context.job.ro_number,
+ name: (
+ (context && context.job && context.job.ownr_ln) ||
+ (context && context.job && context.job.ownr_co_nm) ||
+ ""
+ ).trim(),
+ }),
description: "",
key: "parts_return_slip",
disabled: false,
@@ -1237,7 +1244,7 @@ export const TemplateList = (type, context) => {
disabled: false,
rangeFilter: {
object: i18n.t("reportcenter.labels.objects.jobs"),
- field: i18n.t("jobs.fields.date_open"),
+ field: i18n.t("jobs.fields.date_void"),
},
group: "sales",
},
diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml
index ee39e05c3..cf189ea3f 100644
--- a/hasura/metadata/tables.yaml
+++ b/hasura/metadata/tables.yaml
@@ -3495,6 +3495,7 @@
- v_model_yr
- v_vin
- vehicleid
+ - date_void
- voided
select_permissions:
- role: user
@@ -3761,6 +3762,7 @@
- v_model_yr
- v_vin
- vehicleid
+ - date_void
- voided
filter:
bodyshop:
@@ -4037,6 +4039,7 @@
- v_model_yr
- v_vin
- vehicleid
+ - date_void
- voided
filter:
bodyshop:
@@ -5559,6 +5562,7 @@
- memo
- productivehrs
- rate
+ - task_name
- ttapprovalqueueid
- updated_at
select_permissions:
@@ -5582,6 +5586,7 @@
- memo
- productivehrs
- rate
+ - task_name
- ttapprovalqueueid
- updated_at
filter:
@@ -5614,6 +5619,7 @@
- memo
- productivehrs
- rate
+ - task_name
- ttapprovalqueueid
- updated_at
filter:
diff --git a/hasura/migrations/1689973479186_alter_table_public_jobs_add_column_void_date/down.sql b/hasura/migrations/1689973479186_alter_table_public_jobs_add_column_void_date/down.sql
new file mode 100644
index 000000000..b8c658dd0
--- /dev/null
+++ b/hasura/migrations/1689973479186_alter_table_public_jobs_add_column_void_date/down.sql
@@ -0,0 +1,4 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- alter table "public"."jobs" add column "void_date" Timestamp
+-- null;
diff --git a/hasura/migrations/1689973479186_alter_table_public_jobs_add_column_void_date/up.sql b/hasura/migrations/1689973479186_alter_table_public_jobs_add_column_void_date/up.sql
new file mode 100644
index 000000000..7c41363ed
--- /dev/null
+++ b/hasura/migrations/1689973479186_alter_table_public_jobs_add_column_void_date/up.sql
@@ -0,0 +1,2 @@
+alter table "public"."jobs" add column "void_date" Timestamp
+ null;
diff --git a/hasura/migrations/1689973508700_alter_table_public_jobs_alter_column_void_date/down.sql b/hasura/migrations/1689973508700_alter_table_public_jobs_alter_column_void_date/down.sql
new file mode 100644
index 000000000..42a67c083
--- /dev/null
+++ b/hasura/migrations/1689973508700_alter_table_public_jobs_alter_column_void_date/down.sql
@@ -0,0 +1 @@
+ALTER TABLE "public"."jobs" ALTER COLUMN "void_date" TYPE timestamp without time zone;
diff --git a/hasura/migrations/1689973508700_alter_table_public_jobs_alter_column_void_date/up.sql b/hasura/migrations/1689973508700_alter_table_public_jobs_alter_column_void_date/up.sql
new file mode 100644
index 000000000..97504d6c8
--- /dev/null
+++ b/hasura/migrations/1689973508700_alter_table_public_jobs_alter_column_void_date/up.sql
@@ -0,0 +1 @@
+ALTER TABLE "public"."jobs" ALTER COLUMN "void_date" TYPE timestamptz;
diff --git a/hasura/migrations/1689978551428_alter_table_public_jobs_alter_column_void_date/down.sql b/hasura/migrations/1689978551428_alter_table_public_jobs_alter_column_void_date/down.sql
new file mode 100644
index 000000000..085b24071
--- /dev/null
+++ b/hasura/migrations/1689978551428_alter_table_public_jobs_alter_column_void_date/down.sql
@@ -0,0 +1 @@
+alter table "public"."jobs" rename column "date_void" to "void_date";
diff --git a/hasura/migrations/1689978551428_alter_table_public_jobs_alter_column_void_date/up.sql b/hasura/migrations/1689978551428_alter_table_public_jobs_alter_column_void_date/up.sql
new file mode 100644
index 000000000..4a6b2bfc8
--- /dev/null
+++ b/hasura/migrations/1689978551428_alter_table_public_jobs_alter_column_void_date/up.sql
@@ -0,0 +1 @@
+alter table "public"."jobs" rename column "void_date" to "date_void";
diff --git a/hasura/migrations/1690482057097_alter_table_public_timetickets_add_column_task_name/down.sql b/hasura/migrations/1690482057097_alter_table_public_timetickets_add_column_task_name/down.sql
new file mode 100644
index 000000000..9335d1ce8
--- /dev/null
+++ b/hasura/migrations/1690482057097_alter_table_public_timetickets_add_column_task_name/down.sql
@@ -0,0 +1,4 @@
+-- Could not auto-generate a down migration.
+-- Please write an appropriate down migration for the SQL below:
+-- alter table "public"."timetickets" add column "task_name" text
+-- null;
diff --git a/hasura/migrations/1690482057097_alter_table_public_timetickets_add_column_task_name/up.sql b/hasura/migrations/1690482057097_alter_table_public_timetickets_add_column_task_name/up.sql
new file mode 100644
index 000000000..e88d3a79b
--- /dev/null
+++ b/hasura/migrations/1690482057097_alter_table_public_timetickets_add_column_task_name/up.sql
@@ -0,0 +1,2 @@
+alter table "public"."timetickets" add column "task_name" text
+ null;