diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index 0e03b408f..02df0f870 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -34524,6 +34524,116 @@ + + groups + + + customers + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + jobs + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + payroll + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + purchases + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + sales + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + key false diff --git a/client/src/components/report-center-modal/report-center-modal.component.jsx b/client/src/components/report-center-modal/report-center-modal.component.jsx index 536d5deed..9d9f5a6ab 100644 --- a/client/src/components/report-center-modal/report-center-modal.component.jsx +++ b/client/src/components/report-center-modal/report-center-modal.component.jsx @@ -1,5 +1,16 @@ import { useLazyQuery } from "@apollo/client"; -import { Button, DatePicker, Form, Radio, Space } from "antd"; +import { + Button, + Card, + Col, + DatePicker, + Form, + Input, + Radio, + Row, + Typography, +} from "antd"; +import _ from "lodash"; import moment from "moment"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; @@ -14,7 +25,6 @@ import { TemplateList } from "../../utils/TemplateConstants"; import EmployeeSearchSelect from "../employee-search-select/employee-search-select.component"; import VendorSearchSelect from "../vendor-search-select/vendor-search-select.component"; import "./report-center-modal.styles.scss"; - const mapStateToProps = createStructuredSelector({ reportCenterModal: selectReportCenter, }); @@ -28,9 +38,14 @@ export default connect( export function ReportCenterModalComponent({ reportCenterModal }) { const [form] = Form.useForm(); + const [search, setSearch] = useState(""); + const [loading, setLoading] = useState(false); const { t } = useTranslation(); const Templates = TemplateList("report_center"); + const ReportsList = Object.keys(Templates).map((key) => { + return Templates[key]; + }); const { visible } = reportCenterModal; const [callVendorQuery, { data: vendorData, called: vendorCalled }] = @@ -80,6 +95,17 @@ export function ReportCenterModalComponent({ reportCenterModal }) { setLoading(false); }; + const FilteredReportsList = + search !== "" + ? ReportsList.filter((r) => + r.title.toLowerCase().includes(search.toLowerCase()) + ) + : ReportsList; + + //Group it, create cards, and then filter out. + + const grouped = _.groupBy(FilteredReportsList, "group"); + return (
+ setSearch(e.target.value)} + value={search} + /> - - {Object.keys(Templates).map((key) => ( + {/* {Object.keys(Templates).map((key) => ( {Templates[key].title} + ))} */} + + + {Object.keys(grouped).map((key) => ( + + + + {t(`reportcenter.labels.groups.${key}`)} + +
    + {grouped[key].map((item) => ( +
  • + + {item.title} + +
  • + ))} +
+
+ ))} -
+
- + {() => { const key = form.getFieldValue("key"); if (!key) return null; @@ -137,14 +186,14 @@ export function ReportCenterModalComponent({ reportCenterModal }) { shouldUpdate={(prev, cur) => Templates[prev.key]?.idtype !== Templates[cur.key]?.idtype } - style={{ display: "none" }} + style={{ display: "none", margin: 0, padding: 0 }} > {() => { form.setFieldsValue({ id: null }); return null; }} - + {() => { const key = form.getFieldValue("key"); if (!key) return null; diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index bd7222649..967ad3daf 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -2073,6 +2073,13 @@ "employee": "Employee", "filterson": "Filters on {{object}}: {{field}}", "generateasemail": "Generate as Email?", + "groups": { + "customers": "Customers", + "jobs": "Jobs & Costing", + "payroll": "Payroll", + "purchases": "Purchases", + "sales": "Sales" + }, "key": "Report", "objects": { "appointments": "Appointments", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 1f59115e9..a1e6bfe7e 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -2073,6 +2073,13 @@ "employee": "", "filterson": "", "generateasemail": "", + "groups": { + "customers": "", + "jobs": "", + "payroll": "", + "purchases": "", + "sales": "" + }, "key": "", "objects": { "appointments": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index c87e8fdaf..e961a9582 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -2073,6 +2073,13 @@ "employee": "", "filterson": "", "generateasemail": "", + "groups": { + "customers": "", + "jobs": "", + "payroll": "", + "purchases": "", + "sales": "" + }, "key": "", "objects": { "appointments": "", diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js index 0012a2c56..bfe7225f5 100644 --- a/client/src/utils/TemplateConstants.js +++ b/client/src/utils/TemplateConstants.js @@ -417,222 +417,6 @@ export const TemplateList = (type, context) => { ...(!type || type === "csi" ? {} : {}), ...(!type || type === "report_center" ? { - payments_by_date: { - title: i18n.t("reportcenter.templates.payments_by_date"), - subject: i18n.t("reportcenter.templates.payments_by_date"), - key: "payments_by_date", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.payments"), - field: i18n.t("payments.fields.date"), - }, - }, - payments_by_date_type: { - title: i18n.t("reportcenter.templates.payments_by_date_type"), - subject: i18n.t("reportcenter.templates.payments_by_date_type"), - key: "payments_by_date_type", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.payments"), - field: i18n.t("payments.fields.date"), - }, - }, - purchases_by_date_range_detail: { - title: i18n.t( - "reportcenter.templates.purchases_by_date_range_detail" - ), - subject: i18n.t( - "reportcenter.templates.purchases_by_date_range_detail" - ), - key: "purchases_by_date_range_detail", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.bills"), - field: i18n.t("bills.fields.date"), - }, - }, - purchases_by_date_range_summary: { - title: i18n.t( - "reportcenter.templates.purchases_by_date_range_summary" - ), - subject: i18n.t( - "reportcenter.templates.purchases_by_date_range_summary" - ), - key: "purchases_by_date_range_summary", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.bills"), - field: i18n.t("bills.fields.date"), - }, - }, - purchases_by_vendor_detailed_date_range: { - title: i18n.t( - "reportcenter.templates.purchases_by_vendor_detailed_date_range" - ), - subject: i18n.t( - "reportcenter.templates.purchases_by_vendor_detailed_date_range" - ), - key: "purchases_by_vendor_detailed_date_range", - idtype: "vendor", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.bills"), - field: i18n.t("bills.fields.date"), - }, - }, - purchases_by_vendor_summary_date_range: { - title: i18n.t( - "reportcenter.templates.purchases_by_vendor_summary_date_range" - ), - subject: i18n.t( - "reportcenter.templates.purchases_by_vendor_summary_date_range" - ), - key: "purchases_by_vendor_summary_date_range", - idtype: "vendor", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.bills"), - field: i18n.t("bills.fields.date"), - }, - }, - purchases_by_cost_center_detail: { - title: i18n.t( - "reportcenter.templates.purchases_by_cost_center_detail" - ), - description: "", - subject: i18n.t( - "reportcenter.templates.purchases_by_cost_center_detail" - ), - key: "purchases_by_cost_center_detail", - //idtype: "vendor", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.bills"), - field: i18n.t("bills.fields.date"), - }, - }, - purchases_by_cost_center_summary: { - title: i18n.t( - "reportcenter.templates.purchases_by_cost_center_summary" - ), - description: "", - subject: i18n.t( - "reportcenter.templates.purchases_by_cost_center_summary" - ), - key: "purchases_by_cost_center_summary", - //idtype: "vendor", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.bills"), - field: i18n.t("bills.fields.date"), - }, - }, - purchases_grouped_by_vendor_detailed: { - title: i18n.t( - "reportcenter.templates.purchases_grouped_by_vendor_detailed" - ), - description: "", - subject: i18n.t( - "reportcenter.templates.purchases_grouped_by_vendor_detailed" - ), - key: "purchases_grouped_by_vendor_detailed", - //idtype: "vendor", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.jobs"), - field: i18n.t("bills.fields.date"), - }, - }, - purchases_grouped_by_vendor_summary: { - title: i18n.t( - "reportcenter.templates.purchases_grouped_by_vendor_summary" - ), - description: "", - subject: i18n.t( - "reportcenter.templates.purchases_grouped_by_vendor_summary" - ), - key: "purchases_grouped_by_vendor_summary", - //idtype: "vendor", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.jobs"), - field: i18n.t("bills.fields.date"), - }, - }, - schedule: { - title: i18n.t("reportcenter.templates.schedule"), - subject: i18n.t("reportcenter.templates.schedule"), - key: "schedule", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.appointments"), - field: i18n.t("appointments.fields.time"), - }, - }, - - timetickets: { - title: i18n.t("reportcenter.templates.timetickets"), - subject: i18n.t("reportcenter.templates.timetickets"), - key: "timetickets", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.timetickets"), - field: i18n.t("timetickets.fields.date"), - }, - }, - timetickets_employee: { - title: i18n.t("reportcenter.templates.timetickets_employee"), - subject: i18n.t("reportcenter.templates.timetickets_employee"), - key: "timetickets_employee", - idtype: "employee", - disabled: false, - }, - attendance_detail: { - title: i18n.t("reportcenter.templates.attendance_detail"), - subject: i18n.t("reportcenter.templates.attendance_detail"), - key: "attendance_detail", - - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.timetickets"), - field: i18n.t("timetickets.fields.date"), - }, - }, - attendance_summary: { - title: i18n.t("reportcenter.templates.attendance_summary"), - subject: i18n.t("reportcenter.templates.attendance_summary"), - key: "attendance_summary", - - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.timetickets"), - field: i18n.t("timetickets.fields.date"), - }, - }, - attendance_employee: { - title: i18n.t("reportcenter.templates.attendance_employee"), - subject: i18n.t("reportcenter.templates.attendance_employee"), - key: "attendance_employee", - idtype: "employee", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.timetickets"), - field: i18n.t("timetickets.fields.date"), - }, - }, - - timetickets_summary: { - title: i18n.t("reportcenter.templates.timetickets_summary"), - subject: i18n.t("reportcenter.templates.timetickets_summary"), - key: "timetickets_summary", - //idtype: "vendor", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.timetickets"), - field: i18n.t("timetickets.fields.date"), - }, - }, - hours_sold_detail_closed: { title: i18n.t("reportcenter.templates.hours_sold_detail_closed"), description: "", @@ -644,6 +428,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, hours_sold_detail_closed_ins_co: { @@ -661,6 +446,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, hours_sold_summary_closed: { @@ -674,6 +460,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, hours_sold_summary_closed_ins_co: { @@ -691,6 +478,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, hours_sold_detail_open: { @@ -704,6 +492,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "sales", }, hours_sold_detail_open_ins_co: { @@ -721,6 +510,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "sales", }, hours_sold_summary_open: { @@ -734,6 +524,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "sales", }, hours_sold_summary_open_ins_co: { @@ -751,6 +542,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "sales", }, hours_sold_detail_closed_csr: { @@ -768,6 +560,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, hours_sold_detail_open_csr: { title: i18n.t("reportcenter.templates.hours_sold_detail_open_csr"), @@ -782,6 +575,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "sales", }, hours_sold_summary_closed_csr: { title: i18n.t( @@ -798,6 +592,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, hours_sold_summary_open_csr: { title: i18n.t("reportcenter.templates.hours_sold_summary_open_csr"), @@ -812,54 +607,137 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, - estimator_detail: { - title: i18n.t("reportcenter.templates.estimator_detail"), + purchases_by_date_range_detail: { + title: i18n.t( + "reportcenter.templates.purchases_by_date_range_detail" + ), + subject: i18n.t( + "reportcenter.templates.purchases_by_date_range_detail" + ), + key: "purchases_by_date_range_detail", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.bills"), + field: i18n.t("bills.fields.date"), + }, + group: "purchases", + }, + purchases_by_date_range_summary: { + title: i18n.t( + "reportcenter.templates.purchases_by_date_range_summary" + ), + subject: i18n.t( + "reportcenter.templates.purchases_by_date_range_summary" + ), + key: "purchases_by_date_range_summary", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.bills"), + field: i18n.t("bills.fields.date"), + }, + group: "purchases", + }, + purchases_by_vendor_detailed_date_range: { + title: i18n.t( + "reportcenter.templates.purchases_by_vendor_detailed_date_range" + ), + subject: i18n.t( + "reportcenter.templates.purchases_by_vendor_detailed_date_range" + ), + key: "purchases_by_vendor_detailed_date_range", + idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.bills"), + field: i18n.t("bills.fields.date"), + }, + group: "purchases", + }, + purchases_by_vendor_summary_date_range: { + title: i18n.t( + "reportcenter.templates.purchases_by_vendor_summary_date_range" + ), + subject: i18n.t( + "reportcenter.templates.purchases_by_vendor_summary_date_range" + ), + key: "purchases_by_vendor_summary_date_range", + idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.bills"), + field: i18n.t("bills.fields.date"), + }, + group: "purchases", + }, + purchases_by_cost_center_detail: { + title: i18n.t( + "reportcenter.templates.purchases_by_cost_center_detail" + ), description: "", - subject: i18n.t("reportcenter.templates.estimator_detail"), - key: "estimator_detail", + subject: i18n.t( + "reportcenter.templates.purchases_by_cost_center_detail" + ), + key: "purchases_by_cost_center_detail", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.bills"), + field: i18n.t("bills.fields.date"), + }, + group: "purchases", + }, + purchases_by_cost_center_summary: { + title: i18n.t( + "reportcenter.templates.purchases_by_cost_center_summary" + ), + description: "", + subject: i18n.t( + "reportcenter.templates.purchases_by_cost_center_summary" + ), + key: "purchases_by_cost_center_summary", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.bills"), + field: i18n.t("bills.fields.date"), + }, + group: "purchases", + }, + purchases_grouped_by_vendor_detailed: { + title: i18n.t( + "reportcenter.templates.purchases_grouped_by_vendor_detailed" + ), + description: "", + subject: i18n.t( + "reportcenter.templates.purchases_grouped_by_vendor_detailed" + ), + key: "purchases_grouped_by_vendor_detailed", //idtype: "vendor", disabled: false, rangeFilter: { object: i18n.t("reportcenter.labels.objects.jobs"), - field: i18n.t("jobs.fields.date_invoiced"), + field: i18n.t("bills.fields.date"), }, + group: "purchases", }, - estimator_summary: { - title: i18n.t("reportcenter.templates.estimator_summary"), + purchases_grouped_by_vendor_summary: { + title: i18n.t( + "reportcenter.templates.purchases_grouped_by_vendor_summary" + ), description: "", - subject: i18n.t("reportcenter.templates.estimator_summary"), - key: "estimator_summary", + subject: i18n.t( + "reportcenter.templates.purchases_grouped_by_vendor_summary" + ), + key: "purchases_grouped_by_vendor_summary", //idtype: "vendor", disabled: false, rangeFilter: { object: i18n.t("reportcenter.labels.objects.jobs"), - field: i18n.t("jobs.fields.date_invoiced"), - }, - }, - supplement_ratio_ins_co: { - title: i18n.t("reportcenter.templates.supplement_ratio_ins_co"), - description: "", - subject: i18n.t("reportcenter.templates.supplement_ratio_ins_co"), - key: "supplement_ratio_ins_co", - //idtype: "vendor", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.jobs"), - field: i18n.t("jobs.fields.date_invoiced"), - }, - }, - credits_not_received_date: { - title: i18n.t("reportcenter.templates.credits_not_received_date"), - description: "", - subject: i18n.t("reportcenter.templates.credits_not_received_date"), - key: "credits_not_received_date", - //idtype: "vendor", - disabled: false, - rangeFilter: { - object: i18n.t("reportcenter.labels.objects.jobs"), - field: i18n.t("jobs.fields.date_open"), + field: i18n.t("bills.fields.date"), }, + group: "purchases", }, job_costing_ro_date_summary: { title: i18n.t("reportcenter.templates.job_costing_ro_date_summary"), @@ -874,6 +752,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "jobs", }, job_costing_ro_csr: { title: i18n.t("reportcenter.templates.job_costing_ro_csr"), @@ -886,6 +765,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "jobs", }, job_costing_ro_ins_co: { title: i18n.t("reportcenter.templates.job_costing_ro_ins_co"), @@ -898,6 +778,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "jobs", }, job_costing_ro_date_detail: { title: i18n.t("reportcenter.templates.job_costing_ro_date_detail"), @@ -912,6 +793,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "jobs", }, job_costing_ro_estimator: { title: i18n.t("reportcenter.templates.job_costing_ro_estimator"), @@ -924,7 +806,165 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "jobs", }, + payments_by_date: { + title: i18n.t("reportcenter.templates.payments_by_date"), + subject: i18n.t("reportcenter.templates.payments_by_date"), + key: "payments_by_date", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.payments"), + field: i18n.t("payments.fields.date"), + }, + group: "customers", + }, + payments_by_date_type: { + title: i18n.t("reportcenter.templates.payments_by_date_type"), + subject: i18n.t("reportcenter.templates.payments_by_date_type"), + key: "payments_by_date_type", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.payments"), + field: i18n.t("payments.fields.date"), + }, + group: "customers", + }, + + schedule: { + title: i18n.t("reportcenter.templates.schedule"), + subject: i18n.t("reportcenter.templates.schedule"), + key: "schedule", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.appointments"), + field: i18n.t("appointments.fields.time"), + }, + group: "customers", + }, + + timetickets: { + title: i18n.t("reportcenter.templates.timetickets"), + subject: i18n.t("reportcenter.templates.timetickets"), + key: "timetickets", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.timetickets"), + field: i18n.t("timetickets.fields.date"), + }, + group: "payroll", + }, + timetickets_employee: { + title: i18n.t("reportcenter.templates.timetickets_employee"), + subject: i18n.t("reportcenter.templates.timetickets_employee"), + key: "timetickets_employee", + idtype: "employee", + disabled: false, + group: "payroll", + }, + attendance_detail: { + title: i18n.t("reportcenter.templates.attendance_detail"), + subject: i18n.t("reportcenter.templates.attendance_detail"), + key: "attendance_detail", + + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.timetickets"), + field: i18n.t("timetickets.fields.date"), + }, + group: "payroll", + }, + attendance_summary: { + title: i18n.t("reportcenter.templates.attendance_summary"), + subject: i18n.t("reportcenter.templates.attendance_summary"), + key: "attendance_summary", + + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.timetickets"), + field: i18n.t("timetickets.fields.date"), + }, + group: "payroll", + }, + attendance_employee: { + title: i18n.t("reportcenter.templates.attendance_employee"), + subject: i18n.t("reportcenter.templates.attendance_employee"), + key: "attendance_employee", + idtype: "employee", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.timetickets"), + field: i18n.t("timetickets.fields.date"), + }, + group: "payroll", + }, + + timetickets_summary: { + title: i18n.t("reportcenter.templates.timetickets_summary"), + subject: i18n.t("reportcenter.templates.timetickets_summary"), + key: "timetickets_summary", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.timetickets"), + field: i18n.t("timetickets.fields.date"), + }, + group: "payroll", + }, + + estimator_detail: { + title: i18n.t("reportcenter.templates.estimator_detail"), + description: "", + subject: i18n.t("reportcenter.templates.estimator_detail"), + key: "estimator_detail", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.jobs"), + field: i18n.t("jobs.fields.date_invoiced"), + }, + group: "sales", + }, + estimator_summary: { + title: i18n.t("reportcenter.templates.estimator_summary"), + description: "", + subject: i18n.t("reportcenter.templates.estimator_summary"), + key: "estimator_summary", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.jobs"), + field: i18n.t("jobs.fields.date_invoiced"), + }, + group: "sales", + }, + supplement_ratio_ins_co: { + title: i18n.t("reportcenter.templates.supplement_ratio_ins_co"), + description: "", + subject: i18n.t("reportcenter.templates.supplement_ratio_ins_co"), + key: "supplement_ratio_ins_co", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.jobs"), + field: i18n.t("jobs.fields.date_invoiced"), + }, + group: "sales", + }, + credits_not_received_date: { + title: i18n.t("reportcenter.templates.credits_not_received_date"), + description: "", + subject: i18n.t("reportcenter.templates.credits_not_received_date"), + key: "credits_not_received_date", + //idtype: "vendor", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.jobs"), + field: i18n.t("jobs.fields.date_open"), + }, + group: "purchases", + }, + void_ros: { title: i18n.t("reportcenter.templates.void_ros"), description: "", @@ -936,6 +976,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "sales", }, gsr_by_csr: { title: i18n.t("reportcenter.templates.gsr_by_csr"), @@ -948,6 +989,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, gsr_by_make: { title: i18n.t("reportcenter.templates.gsr_by_make"), @@ -960,6 +1002,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, gsr_by_delivery_date: { title: i18n.t("reportcenter.templates.gsr_by_delivery_date"), @@ -972,6 +1015,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.actual_delivery"), }, + group: "sales", }, gsr_by_referral: { title: i18n.t("reportcenter.templates.gsr_by_referral"), @@ -984,6 +1028,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, gsr_by_ro: { title: i18n.t("reportcenter.templates.gsr_by_ro"), @@ -996,6 +1041,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, gsr_by_ins_co: { title: i18n.t("reportcenter.templates.gsr_by_ins_co"), @@ -1008,6 +1054,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, gsr_by_exported_date: { title: i18n.t("reportcenter.templates.gsr_by_exported_date"), @@ -1020,6 +1067,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_exported"), }, + group: "sales", }, gsr_by_estimator: { @@ -1033,6 +1081,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, gsr_labor_only: { title: i18n.t("reportcenter.templates.gsr_labor_only"), @@ -1045,6 +1094,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "sales", }, open_orders: { title: i18n.t("reportcenter.templates.open_orders"), @@ -1057,6 +1107,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "jobs", }, open_orders_csr: { title: i18n.t("reportcenter.templates.open_orders_csr"), @@ -1069,6 +1120,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "jobs", }, open_orders_estimator: { title: i18n.t("reportcenter.templates.open_orders_estimator"), @@ -1081,6 +1133,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "jobs", }, open_orders_ins_co: { title: i18n.t("reportcenter.templates.open_orders_ins_co"), @@ -1093,6 +1146,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "jobs", }, export_payables: { title: i18n.t("reportcenter.templates.export_payables"), @@ -1105,6 +1159,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.exportlogs"), field: i18n.t("exportlogs.fields.createdat"), }, + group: "purchases", }, export_payments: { title: i18n.t("reportcenter.templates.export_payments"), @@ -1117,6 +1172,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.exportlogs"), field: i18n.t("exportlogs.fields.createdat"), }, + group: "customers", }, export_receivables: { title: i18n.t("reportcenter.templates.export_receivables"), @@ -1129,6 +1185,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.exportlogs"), field: i18n.t("exportlogs.fields.createdat"), }, + group: "sales", }, parts_backorder: { title: i18n.t("reportcenter.templates.parts_backorder"), @@ -1141,6 +1198,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.actual_in"), }, + group: "purchases", }, thank_you_date: { title: i18n.t("reportcenter.templates.thank_you_date"), @@ -1153,6 +1211,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "customers", }, unclaimed_hrs: { title: i18n.t("reportcenter.templates.unclaimed_hrs"), @@ -1165,6 +1224,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "jobs", }, work_in_progress_labour: { title: i18n.t("reportcenter.templates.work_in_progress_labour"), @@ -1177,6 +1237,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "jobs", }, work_in_progress_payables: { title: i18n.t("reportcenter.templates.work_in_progress_payables"), @@ -1189,6 +1250,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_open"), }, + group: "jobs", }, lag_time: { title: i18n.t("reportcenter.templates.lag_time"), @@ -1201,6 +1263,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.date_invoiced"), }, + group: "jobs", }, parts_not_recieved: { title: i18n.t("reportcenter.templates.parts_not_recieved"), @@ -1213,6 +1276,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.parts_orders"), field: i18n.t("parts_orders.fields.order_date"), }, + group: "jobs", }, scoreboard_detail: { title: i18n.t("reportcenter.templates.scoreboard_detail"), @@ -1225,6 +1289,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.scoreboard"), field: i18n.t("scoreboard.fields.date"), }, + group: "payroll", }, scoreboard_summary: { title: i18n.t("reportcenter.templates.scoreboard_summary"), @@ -1237,6 +1302,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.scoreboard"), field: i18n.t("scoreboard.fields.date"), }, + group: "payroll", }, anticipated_revenue: { title: i18n.t("reportcenter.templates.anticipated_revenue"), @@ -1249,6 +1315,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.jobs"), field: i18n.t("jobs.fields.scheduled_completion"), // Also date invoice. }, + group: "sales", }, csi: { title: i18n.t("reportcenter.templates.csi"), @@ -1261,6 +1328,7 @@ export const TemplateList = (type, context) => { object: i18n.t("reportcenter.labels.objects.csi"), field: i18n.t("csi.fields.created_at"), // Also date invoice. }, + group: "jobs", }, } : {}),