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;