Merged in release/2023-04-21 (pull request #719)

Release/2023 04 21
This commit is contained in:
Patrick Fic
2023-04-21 20:18:25 +00:00
20 changed files with 298 additions and 47 deletions

View File

@@ -143,13 +143,16 @@
} }
} }
//Update row highlighting on production board. //Update row highlighting on production board.
.ant-table-tbody > tr.ant-table-row:hover > td { .ant-table-tbody > tr.ant-table-row:hover > td {
background: #eaeaea !important; background: #eaeaea !important;
} }
.job-line-manual{ .job-line-manual {
color: tomato; color: tomato;
font-style: italic; font-style: italic;
} }
td.ant-table-column-sort {
background-color: transparent;
}

View File

@@ -52,11 +52,15 @@ function JobDocumentsLocalGalleryExternal({
val.type.mime && val.type.mime &&
val.type.mime.startsWith("image") val.type.mime.startsWith("image")
) { ) {
acc.push(val); acc.push({ ...val, src: val.thumbnail });
} }
return acc; return acc;
}, []) }, [])
: []; : [];
console.log(
"🚀 ~ file: jobs-documents-local-gallery.external.component.jsx:48 ~ useEffect ~ documents:",
documents
);
setgalleryImages(documents); setgalleryImages(documents);
}, [allMedia, jobId, setgalleryImages, t]); }, [allMedia, jobId, setgalleryImages, t]);

View File

@@ -201,6 +201,7 @@ export function PartsOrderListTableComponent({
subject: record.return subject: record.return
? Templates.parts_return_slip.subject ? Templates.parts_return_slip.subject
: Templates.parts_order.subject, : Templates.parts_order.subject,
to: record.vendor.email,
}} }}
id={job.id} id={job.id}
/> />
@@ -296,7 +297,6 @@ export function PartsOrderListTableComponent({
sortOrder: sortOrder:
state.sortedInfo.columnKey === "quantity" && state.sortedInfo.order, state.sortedInfo.columnKey === "quantity" && state.sortedInfo.order,
}, },
{ {
title: t("parts_orders.fields.act_price"), title: t("parts_orders.fields.act_price"),
dataIndex: "act_price", dataIndex: "act_price",

View File

@@ -92,7 +92,11 @@ export function ReportCenterModalComponent({ reportCenterModal }) {
to: values.to, to: values.to,
subject: Templates[values.key]?.subject, subject: Templates[values.key]?.subject,
}, },
values.sendby === "email" ? "e" : "p", values.sendbyexcel === "excel"
? "x"
: values.sendby === "email"
? "e"
: "p",
id id
); );
setLoading(false); setLoading(false);
@@ -250,15 +254,38 @@ export function ReportCenterModalComponent({ reportCenterModal }) {
ranges={DatePIckerRanges} ranges={DatePIckerRanges}
/> />
</Form.Item> </Form.Item>
<Form.Item <Form.Item style={{ margin: 0, padding: 0 }} dependencies={["key"]}>
label={t("general.labels.sendby")} {() => {
name="sendby" const key = form.getFieldValue("key");
initialValue="print" //Kind of Id
> const reporttype = Templates[key] && Templates[key].reporttype;
<Radio.Group>
<Radio value="email">{t("general.labels.email")}</Radio> if (reporttype === "excel")
<Radio value="print">{t("general.labels.print")}</Radio> return (
</Radio.Group> <Form.Item
label={t("general.labels.sendby")}
name="sendbyexcel"
initialValue="excel"
>
<Radio.Group>
<Radio value="excel">{t("general.labels.excel")}</Radio>
</Radio.Group>
</Form.Item>
);
if (reporttype !== "excel")
return (
<Form.Item
label={t("general.labels.sendby")}
name="sendby"
initialValue="print"
>
<Radio.Group>
<Radio value="email">{t("general.labels.email")}</Radio>
<Radio value="print">{t("general.labels.print")}</Radio>
</Radio.Group>
</Form.Item>
);
}}
</Form.Item> </Form.Item>
<div <div

View File

@@ -29,7 +29,17 @@ export function TechSider({ technician, techLogout }) {
}; };
return ( return (
<Sider collapsible collapsed={collapsed} onCollapse={onCollapse}> <Sider
style={{
height: "100vh",
position: "sticky",
top: 0,
left: 0,
}}
collapsible
collapsed={collapsed}
onCollapse={onCollapse}
>
<Menu theme="dark" defaultSelectedKeys={["1"]} mode="inline"> <Menu theme="dark" defaultSelectedKeys={["1"]} mode="inline">
<Menu.Item <Menu.Item
key="1" key="1"

View File

@@ -69,6 +69,7 @@ export const QUERY_BILLS_BY_JOBID = gql`
vendor { vendor {
id id
name name
email
} }
order_date order_date
deliver_by deliver_by
@@ -104,6 +105,7 @@ export const QUERY_BILLS_BY_JOBID = gql`
vendor { vendor {
id id
name name
email
} }
total total
invoice_number invoice_number

View File

@@ -1,9 +1,10 @@
.tech-content-container { .tech-content-container {
overflow-y: auto; overflow-y: visible;
padding: 1rem; padding: 1rem;
background: #fff; background: #fff;
} }
.tech-layout-container { .tech-layout-container {
height: 100vh; position: relative;
min-height: 100vh;
} }

View File

@@ -1015,6 +1015,7 @@
"created_at": "Created At", "created_at": "Created At",
"email": "Email", "email": "Email",
"errors": "Errors", "errors": "Errors",
"excel": "Excel",
"exceptiontitle": "An error has occurred.", "exceptiontitle": "An error has occurred.",
"friday": "Friday", "friday": "Friday",
"globalsearch": "Global Search", "globalsearch": "Global Search",
@@ -2226,6 +2227,7 @@
"csi_invitation": "CSI Invitation", "csi_invitation": "CSI Invitation",
"csi_invitation_action": "CSI Invite", "csi_invitation_action": "CSI Invite",
"diagnostic_authorization": "Diagnostic Authorization", "diagnostic_authorization": "Diagnostic Authorization",
"dms_posting_sheet": "DMS Posting Sheet",
"envelope_return_address": "#10 Envelope Return Address Label", "envelope_return_address": "#10 Envelope Return Address Label",
"estimate": "Estimate Only", "estimate": "Estimate Only",
"estimate_detail": "Estimate Details", "estimate_detail": "Estimate Details",
@@ -2444,6 +2446,8 @@
"export_payables": "Export Log - Payables", "export_payables": "Export Log - Payables",
"export_payments": "Export Log - Payments", "export_payments": "Export Log - Payments",
"export_receivables": "Export Log - Receivables", "export_receivables": "Export Log - Receivables",
"exported_gsr_by_ro": "Exported Gross Sales - Excel",
"exported_gsr_by_ro_labor": "Exported Gross Sales (Labor) - Excel",
"gsr_by_atp": "", "gsr_by_atp": "",
"gsr_by_ats": "Gross Sales by ATS", "gsr_by_ats": "Gross Sales by ATS",
"gsr_by_category": "Gross Sales by Category", "gsr_by_category": "Gross Sales by Category",

View File

@@ -1015,6 +1015,7 @@
"created_at": "", "created_at": "",
"email": "", "email": "",
"errors": "", "errors": "",
"excel": "",
"exceptiontitle": "", "exceptiontitle": "",
"friday": "", "friday": "",
"globalsearch": "", "globalsearch": "",
@@ -2226,6 +2227,7 @@
"csi_invitation": "", "csi_invitation": "",
"csi_invitation_action": "", "csi_invitation_action": "",
"diagnostic_authorization": "", "diagnostic_authorization": "",
"dms_posting_sheet": "",
"envelope_return_address": "", "envelope_return_address": "",
"estimate": "", "estimate": "",
"estimate_detail": "", "estimate_detail": "",
@@ -2444,6 +2446,8 @@
"export_payables": "", "export_payables": "",
"export_payments": "", "export_payments": "",
"export_receivables": "", "export_receivables": "",
"exported_gsr_by_ro": "",
"exported_gsr_by_ro_labor": "",
"gsr_by_atp": "", "gsr_by_atp": "",
"gsr_by_ats": "", "gsr_by_ats": "",
"gsr_by_category": "", "gsr_by_category": "",

View File

@@ -1015,6 +1015,7 @@
"created_at": "", "created_at": "",
"email": "", "email": "",
"errors": "", "errors": "",
"excel": "",
"exceptiontitle": "", "exceptiontitle": "",
"friday": "", "friday": "",
"globalsearch": "", "globalsearch": "",
@@ -2226,6 +2227,7 @@
"csi_invitation": "", "csi_invitation": "",
"csi_invitation_action": "", "csi_invitation_action": "",
"diagnostic_authorization": "", "diagnostic_authorization": "",
"dms_posting_sheet": "",
"envelope_return_address": "", "envelope_return_address": "",
"estimate": "", "estimate": "",
"estimate_detail": "", "estimate_detail": "",
@@ -2444,6 +2446,8 @@
"export_payables": "", "export_payables": "",
"export_payments": "", "export_payments": "",
"export_receivables": "", "export_receivables": "",
"exported_gsr_by_ro": "",
"exported_gsr_by_ro_labor": "",
"gsr_by_atp": "", "gsr_by_atp": "",
"gsr_by_ats": "", "gsr_by_ats": "",
"gsr_by_category": "", "gsr_by_category": "",

View File

@@ -20,7 +20,6 @@ export const TemplateList = (type, context) => {
disabled: false, disabled: false,
group: "authorization", group: "authorization",
}, },
fippa_authorization: { fippa_authorization: {
title: i18n.t("printcenter.jobs.fippa_authorization"), title: i18n.t("printcenter.jobs.fippa_authorization"),
description: "CASL Authorization", description: "CASL Authorization",
@@ -101,7 +100,6 @@ export const TemplateList = (type, context) => {
disabled: false, disabled: false,
group: "ro", group: "ro",
}, },
job_notes: { job_notes: {
title: i18n.t("printcenter.jobs.job_notes"), title: i18n.t("printcenter.jobs.job_notes"),
description: "All Jobs Notes", description: "All Jobs Notes",
@@ -330,7 +328,6 @@ export const TemplateList = (type, context) => {
disabled: false, disabled: false,
group: "post", group: "post",
}, },
vehicle_delivery_check: { vehicle_delivery_check: {
title: i18n.t("printcenter.jobs.vehicle_delivery_check"), title: i18n.t("printcenter.jobs.vehicle_delivery_check"),
description: "All Jobs Notes", description: "All Jobs Notes",
@@ -339,7 +336,6 @@ export const TemplateList = (type, context) => {
disabled: false, disabled: false,
group: "post", group: "post",
}, },
guarantee: { guarantee: {
title: i18n.t("printcenter.jobs.guarantee"), title: i18n.t("printcenter.jobs.guarantee"),
description: "All Jobs Notes", description: "All Jobs Notes",
@@ -496,6 +492,14 @@ export const TemplateList = (type, context) => {
disabled: false, disabled: false,
group: "financial", group: "financial",
}, },
dms_posting_sheet: {
title: i18n.t("printcenter.jobs.dms_posting_sheet"),
description: "DMS Posting Sheet",
subject: i18n.t("printcenter.jobs.dms_posting_sheet"),
key: "dms_posting_sheet",
disabled: false,
group: "financial",
},
} }
: {}), : {}),
...(!type || type === "job_special" ...(!type || type === "job_special"
@@ -622,7 +626,6 @@ export const TemplateList = (type, context) => {
}, },
group: "sales", group: "sales",
}, },
hours_sold_detail_closed_ins_co: { hours_sold_detail_closed_ins_co: {
title: i18n.t( title: i18n.t(
"reportcenter.templates.hours_sold_detail_closed_ins_co" "reportcenter.templates.hours_sold_detail_closed_ins_co"
@@ -640,7 +643,6 @@ export const TemplateList = (type, context) => {
}, },
group: "sales", group: "sales",
}, },
hours_sold_summary_closed: { hours_sold_summary_closed: {
title: i18n.t("reportcenter.templates.hours_sold_summary_closed"), title: i18n.t("reportcenter.templates.hours_sold_summary_closed"),
description: "", description: "",
@@ -654,7 +656,6 @@ export const TemplateList = (type, context) => {
}, },
group: "sales", group: "sales",
}, },
hours_sold_summary_closed_ins_co: { hours_sold_summary_closed_ins_co: {
title: i18n.t( title: i18n.t(
"reportcenter.templates.hours_sold_summary_closed_ins_co" "reportcenter.templates.hours_sold_summary_closed_ins_co"
@@ -672,7 +673,6 @@ export const TemplateList = (type, context) => {
}, },
group: "sales", group: "sales",
}, },
hours_sold_detail_open: { hours_sold_detail_open: {
title: i18n.t("reportcenter.templates.hours_sold_detail_open"), title: i18n.t("reportcenter.templates.hours_sold_detail_open"),
description: "", description: "",
@@ -686,7 +686,6 @@ export const TemplateList = (type, context) => {
}, },
group: "sales", group: "sales",
}, },
hours_sold_detail_open_ins_co: { hours_sold_detail_open_ins_co: {
title: i18n.t( title: i18n.t(
"reportcenter.templates.hours_sold_detail_open_ins_co" "reportcenter.templates.hours_sold_detail_open_ins_co"
@@ -704,7 +703,6 @@ export const TemplateList = (type, context) => {
}, },
group: "sales", group: "sales",
}, },
hours_sold_summary_open: { hours_sold_summary_open: {
title: i18n.t("reportcenter.templates.hours_sold_summary_open"), title: i18n.t("reportcenter.templates.hours_sold_summary_open"),
description: "", description: "",
@@ -718,7 +716,6 @@ export const TemplateList = (type, context) => {
}, },
group: "sales", group: "sales",
}, },
hours_sold_summary_open_ins_co: { hours_sold_summary_open_ins_co: {
title: i18n.t( title: i18n.t(
"reportcenter.templates.hours_sold_summary_open_ins_co" "reportcenter.templates.hours_sold_summary_open_ins_co"
@@ -736,7 +733,6 @@ export const TemplateList = (type, context) => {
}, },
group: "sales", group: "sales",
}, },
hours_sold_detail_closed_csr: { hours_sold_detail_closed_csr: {
title: i18n.t( title: i18n.t(
"reportcenter.templates.hours_sold_detail_closed_csr" "reportcenter.templates.hours_sold_detail_closed_csr"
@@ -1090,7 +1086,6 @@ export const TemplateList = (type, context) => {
}, },
group: "customers", group: "customers",
}, },
schedule: { schedule: {
title: i18n.t("reportcenter.templates.schedule"), title: i18n.t("reportcenter.templates.schedule"),
subject: i18n.t("reportcenter.templates.schedule"), subject: i18n.t("reportcenter.templates.schedule"),
@@ -1102,7 +1097,6 @@ export const TemplateList = (type, context) => {
}, },
group: "customers", group: "customers",
}, },
timetickets: { timetickets: {
title: i18n.t("reportcenter.templates.timetickets"), title: i18n.t("reportcenter.templates.timetickets"),
subject: i18n.t("reportcenter.templates.timetickets"), subject: i18n.t("reportcenter.templates.timetickets"),
@@ -1126,7 +1120,6 @@ export const TemplateList = (type, context) => {
title: i18n.t("reportcenter.templates.attendance_detail"), title: i18n.t("reportcenter.templates.attendance_detail"),
subject: i18n.t("reportcenter.templates.attendance_detail"), subject: i18n.t("reportcenter.templates.attendance_detail"),
key: "attendance_detail", key: "attendance_detail",
disabled: false, disabled: false,
rangeFilter: { rangeFilter: {
object: i18n.t("reportcenter.labels.objects.timetickets"), object: i18n.t("reportcenter.labels.objects.timetickets"),
@@ -1138,7 +1131,6 @@ export const TemplateList = (type, context) => {
title: i18n.t("reportcenter.templates.attendance_summary"), title: i18n.t("reportcenter.templates.attendance_summary"),
subject: i18n.t("reportcenter.templates.attendance_summary"), subject: i18n.t("reportcenter.templates.attendance_summary"),
key: "attendance_summary", key: "attendance_summary",
disabled: false, disabled: false,
rangeFilter: { rangeFilter: {
object: i18n.t("reportcenter.labels.objects.timetickets"), object: i18n.t("reportcenter.labels.objects.timetickets"),
@@ -1158,7 +1150,6 @@ export const TemplateList = (type, context) => {
}, },
group: "payroll", group: "payroll",
}, },
timetickets_summary: { timetickets_summary: {
title: i18n.t("reportcenter.templates.timetickets_summary"), title: i18n.t("reportcenter.templates.timetickets_summary"),
subject: i18n.t("reportcenter.templates.timetickets_summary"), subject: i18n.t("reportcenter.templates.timetickets_summary"),
@@ -1171,7 +1162,6 @@ export const TemplateList = (type, context) => {
}, },
group: "payroll", group: "payroll",
}, },
estimator_detail: { estimator_detail: {
title: i18n.t("reportcenter.templates.estimator_detail"), title: i18n.t("reportcenter.templates.estimator_detail"),
description: "", description: "",
@@ -1224,7 +1214,6 @@ export const TemplateList = (type, context) => {
}, },
group: "purchases", group: "purchases",
}, },
void_ros: { void_ros: {
title: i18n.t("reportcenter.templates.void_ros"), title: i18n.t("reportcenter.templates.void_ros"),
description: "", description: "",
@@ -1329,7 +1318,6 @@ export const TemplateList = (type, context) => {
}, },
group: "sales", group: "sales",
}, },
gsr_by_estimator: { gsr_by_estimator: {
title: i18n.t("reportcenter.templates.gsr_by_estimator"), title: i18n.t("reportcenter.templates.gsr_by_estimator"),
description: "", description: "",
@@ -1814,7 +1802,9 @@ export const TemplateList = (type, context) => {
group: "jobs", group: "jobs",
}, },
purchase_return_ratio_grouped_by_vendor_detail: { purchase_return_ratio_grouped_by_vendor_detail: {
title: i18n.t("reportcenter.templates.purchase_return_ratio_grouped_by_vendor_detail"), title: i18n.t(
"reportcenter.templates.purchase_return_ratio_grouped_by_vendor_detail"
),
subject: i18n.t( subject: i18n.t(
"reportcenter.templates.purchase_return_ratio_grouped_by_vendor_detail" "reportcenter.templates.purchase_return_ratio_grouped_by_vendor_detail"
), ),
@@ -1828,7 +1818,9 @@ export const TemplateList = (type, context) => {
group: "purchases", group: "purchases",
}, },
purchase_return_ratio_grouped_by_vendor_summary: { purchase_return_ratio_grouped_by_vendor_summary: {
title: i18n.t("reportcenter.templates.purchase_return_ratio_grouped_by_vendor_summary"), title: i18n.t(
"reportcenter.templates.purchase_return_ratio_grouped_by_vendor_summary"
),
subject: i18n.t( subject: i18n.t(
"reportcenter.templates.purchase_return_ratio_grouped_by_vendor_summary" "reportcenter.templates.purchase_return_ratio_grouped_by_vendor_summary"
), ),
@@ -1843,9 +1835,7 @@ export const TemplateList = (type, context) => {
}, },
production_over_time: { production_over_time: {
title: i18n.t("reportcenter.templates.production_over_time"), title: i18n.t("reportcenter.templates.production_over_time"),
subject: i18n.t( subject: i18n.t("reportcenter.templates.production_over_time"),
"reportcenter.templates.production_over_time"
),
key: "production_over_time", key: "production_over_time",
//idtype: "vendor", //idtype: "vendor",
disabled: false, disabled: false,
@@ -1857,9 +1847,7 @@ export const TemplateList = (type, context) => {
}, },
customer_list: { customer_list: {
title: i18n.t("reportcenter.templates.customer_list"), title: i18n.t("reportcenter.templates.customer_list"),
subject: i18n.t( subject: i18n.t("reportcenter.templates.customer_list"),
"reportcenter.templates.customer_list"
),
key: "customer_list", key: "customer_list",
//idtype: "vendor", //idtype: "vendor",
disabled: false, disabled: false,
@@ -1869,6 +1857,32 @@ export const TemplateList = (type, context) => {
}, },
group: "customers", group: "customers",
}, },
exported_gsr_by_ro: {
title: i18n.t("reportcenter.templates.exported_gsr_by_ro"),
subject: i18n.t("reportcenter.templates.exported_gsr_by_ro"),
key: "exported_gsr_by_ro",
//idtype: "vendor",
reporttype: "excel",
disabled: false,
rangeFilter: {
object: i18n.t("reportcenter.labels.objects.jobs"),
field: i18n.t("jobs.fields.date_exported"),
},
group: "sales",
},
exported_gsr_by_ro_labor: {
title: i18n.t("reportcenter.templates.exported_gsr_by_ro_labor"),
subject: i18n.t("reportcenter.templates.exported_gsr_by_ro_labor"),
key: "exported_gsr_by_ro_labor",
//idtype: "vendor",
reporttype: "excel",
disabled: false,
rangeFilter: {
object: i18n.t("reportcenter.labels.objects.jobs"),
field: i18n.t("jobs.fields.date_exported"),
},
group: "sales",
},
} }
: {}), : {}),
...(!type || type === "courtesycarcontract" ...(!type || type === "courtesycarcontract"
@@ -1963,7 +1977,6 @@ export const TemplateList = (type, context) => {
}, },
} }
: {}), : {}),
...(!type || type === "production" ...(!type || type === "production"
? { ? {
production_by_last_name: { production_by_last_name: {

View File

@@ -831,6 +831,13 @@
table: table:
name: transitions name: transitions
schema: public schema: public
- name: tt_approval_queues
using:
foreign_key_constraint_on:
column: bodyshopid
table:
name: tt_approval_queue
schema: public
- name: vehicles - name: vehicles
using: using:
foreign_key_constraint_on: foreign_key_constraint_on:
@@ -2262,6 +2269,13 @@
table: table:
name: timetickets name: timetickets
schema: public schema: public
- name: tt_approval_queues
using:
foreign_key_constraint_on:
column: employeeid
table:
name: tt_approval_queue
schema: public
insert_permissions: insert_permissions:
- role: user - role: user
permission: permission:
@@ -3145,6 +3159,13 @@
table: table:
name: transitions name: transitions
schema: public schema: public
- name: tt_approval_queues
using:
foreign_key_constraint_on:
column: jobid
table:
name: tt_approval_queue
schema: public
insert_permissions: insert_permissions:
- role: user - role: user
permission: permission:
@@ -5210,6 +5231,14 @@
- name: job - name: job
using: using:
foreign_key_constraint_on: jobid foreign_key_constraint_on: jobid
array_relationships:
- name: tt_approval_queues
using:
foreign_key_constraint_on:
column: timeticketid
table:
name: tt_approval_queue
schema: public
insert_permissions: insert_permissions:
- role: user - role: user
permission: permission:
@@ -5228,6 +5257,7 @@
- ciecacode - ciecacode
- clockoff - clockoff
- clockon - clockon
- committed_at
- cost_center - cost_center
- created_at - created_at
- date - date
@@ -5248,6 +5278,7 @@
- ciecacode - ciecacode
- clockoff - clockoff
- clockon - clockon
- committed_at
- cost_center - cost_center
- created_at - created_at
- date - date
@@ -5277,6 +5308,7 @@
- ciecacode - ciecacode
- clockoff - clockoff
- clockon - clockon
- committed_at
- cost_center - cost_center
- created_at - created_at
- date - date
@@ -5397,6 +5429,117 @@
authid: authid:
_eq: X-Hasura-User-Id _eq: X-Hasura-User-Id
check: {} check: {}
- table:
name: tt_approval_queue
schema: public
object_relationships:
- name: bodyshop
using:
foreign_key_constraint_on: bodyshopid
- name: employee
using:
foreign_key_constraint_on: employeeid
- name: job
using:
foreign_key_constraint_on: jobid
- name: timeticket
using:
foreign_key_constraint_on: timeticketid
- name: user
using:
foreign_key_constraint_on: approved_by
insert_permissions:
- role: user
permission:
check:
bodyshop:
associations:
_and:
- active:
_eq: true
- user:
authid:
_eq: X-Hasura-User-Id
columns:
- id
- created_at
- updated_at
- bodyshopid
- jobid
- employeeid
- timeticketid
- approved_by
- approved_at
- actualhrs
- productivehrs
- rate
- flat_rate
- ciecacode
- cost_center
- date
- memo
select_permissions:
- role: user
permission:
columns:
- flat_rate
- date
- actualhrs
- productivehrs
- rate
- approved_by
- ciecacode
- cost_center
- memo
- approved_at
- created_at
- updated_at
- bodyshopid
- employeeid
- id
- jobid
- timeticketid
filter:
bodyshop:
associations:
_and:
- active:
_eq: true
- user:
authid:
_eq: X-Hasura-User-Id
allow_aggregations: true
update_permissions:
- role: user
permission:
columns:
- flat_rate
- date
- actualhrs
- productivehrs
- rate
- approved_by
- ciecacode
- cost_center
- memo
- approved_at
- created_at
- updated_at
- bodyshopid
- employeeid
- id
- jobid
- timeticketid
filter:
bodyshop:
associations:
_and:
- active:
_eq: true
- user:
authid:
_eq: X-Hasura-User-Id
check: null
- table: - table:
name: users name: users
schema: public schema: public
@@ -5467,6 +5610,13 @@
table: table:
name: parts_orders name: parts_orders
schema: public schema: public
- name: tt_approval_queues
using:
foreign_key_constraint_on:
column: approved_by
table:
name: tt_approval_queue
schema: public
insert_permissions: insert_permissions:
- role: user - role: user
permission: permission:

View File

@@ -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 "committed_at" timestamptz
-- null;

View File

@@ -0,0 +1,2 @@
alter table "public"."timetickets" add column "committed_at" timestamptz
null;

View File

@@ -0,0 +1 @@
DROP TABLE "public"."tt_approval_queue";

View File

@@ -0,0 +1,18 @@
CREATE TABLE "public"."tt_approval_queue" ("id" uuid NOT NULL DEFAULT gen_random_uuid(), "created_at" timestamptz NOT NULL DEFAULT now(), "updated_at" timestamptz NOT NULL DEFAULT now(), "bodyshopid" uuid NOT NULL, "jobid" uuid NOT NULL, "employeeid" uuid NOT NULL, "timeticketid" uuid, "approved_by" text, "approved_at" timestamptz NOT NULL, "actualhrs" numeric NOT NULL DEFAULT 0, "productivehrs" numeric NOT NULL DEFAULT 0, "rate" numeric NOT NULL DEFAULT 0, "flat_rate" boolean NOT NULL DEFAULT true, "ciecacode" text, "cost_center" text NOT NULL, "date" date NOT NULL DEFAULT now(), "memo" text NOT NULL, PRIMARY KEY ("id") , FOREIGN KEY ("bodyshopid") REFERENCES "public"."bodyshops"("id") ON UPDATE cascade ON DELETE cascade, FOREIGN KEY ("jobid") REFERENCES "public"."jobs"("id") ON UPDATE cascade ON DELETE cascade, FOREIGN KEY ("employeeid") REFERENCES "public"."employees"("id") ON UPDATE cascade ON DELETE cascade, FOREIGN KEY ("timeticketid") REFERENCES "public"."timetickets"("id") ON UPDATE cascade ON DELETE cascade, FOREIGN KEY ("approved_by") REFERENCES "public"."users"("email") ON UPDATE restrict ON DELETE restrict);
CREATE OR REPLACE FUNCTION "public"."set_current_timestamp_updated_at"()
RETURNS TRIGGER AS $$
DECLARE
_new record;
BEGIN
_new := NEW;
_new."updated_at" = NOW();
RETURN _new;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER "set_public_tt_approval_queue_updated_at"
BEFORE UPDATE ON "public"."tt_approval_queue"
FOR EACH ROW
EXECUTE PROCEDURE "public"."set_current_timestamp_updated_at"();
COMMENT ON TRIGGER "set_public_tt_approval_queue_updated_at" ON "public"."tt_approval_queue"
IS 'trigger to set value of column "updated_at" to current timestamp on row update';
CREATE EXTENSION IF NOT EXISTS pgcrypto;

View File

@@ -0,0 +1 @@
alter table "public"."tt_approval_queue" alter column "approved_at" set not null;

View File

@@ -0,0 +1 @@
alter table "public"."tt_approval_queue" alter column "approved_at" drop not null;

View File

@@ -0,0 +1 @@
alter table "public"."tt_approval_queue" alter column "memo" set not null;

View File

@@ -0,0 +1 @@
alter table "public"."tt_approval_queue" alter column "memo" drop not null;