From d78955a8fdfdfb3972b2c46f91c1f56c8999f968 Mon Sep 17 00:00:00 2001 From: Patrick Fic <> Date: Fri, 6 May 2022 10:19:49 -0700 Subject: [PATCH] IO-1853 Add Attendance Table excel creation. --- bodyshop_translations.babel | 26 ++++++++++++ ...ime-tickets-attendance-table.component.jsx | 42 +++++++++++++++++++ .../time-tickets/time-tickets.container.jsx | 2 + client/src/translations/en_us/common.json | 3 ++ client/src/translations/es/common.json | 3 ++ client/src/translations/fr/common.json | 3 ++ client/src/utils/TemplateConstants.js | 7 ++++ 7 files changed, 86 insertions(+) create mode 100644 client/src/components/time-tickets-attendance-table/time-tickets-attendance-table.component.jsx diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index a8ae33e7b..9322e859a 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -36737,6 +36737,32 @@ + + special + + + attendance_detail_csv + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + + + subjects diff --git a/client/src/components/time-tickets-attendance-table/time-tickets-attendance-table.component.jsx b/client/src/components/time-tickets-attendance-table/time-tickets-attendance-table.component.jsx new file mode 100644 index 000000000..8448eb131 --- /dev/null +++ b/client/src/components/time-tickets-attendance-table/time-tickets-attendance-table.component.jsx @@ -0,0 +1,42 @@ +import { Button } from "antd"; +import queryString from "query-string"; +import React, { useState } from "react"; +import { useLocation } from "react-router-dom"; +import { GenerateDocument } from "../../utils/RenderTemplate"; +import { TemplateList } from "../../utils/TemplateConstants"; +import { useTranslation } from "react-i18next"; +import moment from "moment"; +const AttendanceCsv = TemplateList("special").attendance_detail_csv; + +export default function TimeTicketsAttendanceTable() { + const searchParams = queryString.parse(useLocation().search); + const { start, end } = searchParams; + const { t } = useTranslation(); + const [loading, setLoading] = useState(false); + + const handleClick = async () => { + setLoading(true); + + await GenerateDocument( + { + name: AttendanceCsv.key, + variables: { + start: start + ? start + : moment().startOf("week").subtract(7, "days").format("YYYY-MM-DD"), + end: end ? end : moment().endOf("week").format("YYYY-MM-DD"), + }, + }, + {}, + "x" + ); + + setLoading(false); + }; + + return ( + + ); +} diff --git a/client/src/pages/time-tickets/time-tickets.container.jsx b/client/src/pages/time-tickets/time-tickets.container.jsx index 222be5117..03cfdda50 100644 --- a/client/src/pages/time-tickets/time-tickets.container.jsx +++ b/client/src/pages/time-tickets/time-tickets.container.jsx @@ -14,6 +14,7 @@ import TimeTicketList from "../../components/time-ticket-list/time-ticket-list.c import TimeTicketsPayrollTable from "../../components/time-tickets-payroll-table/time-tickets-payroll-table.component"; import TimeTicketsSummaryEmployees from "../../components/time-tickets-summary-employees/time-tickets-summary-employees.component"; import { QUERY_TIME_TICKETS_IN_RANGE } from "../../graphql/timetickets.queries"; +import TimeTicketsAttendanceTable from "../../components/time-tickets-attendance-table/time-tickets-attendance-table.component"; import { setBreadcrumbs, setSelectedHeader, @@ -71,6 +72,7 @@ export function TimeTicketsContainer({ timetickets={data ? data.timetickets : []} extra={ + diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index f75ed1931..0dc3c96d2 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -2174,6 +2174,9 @@ "ca_bc_etf_table": "ICBC ETF Table", "exported_payroll": "Payroll Table" }, + "special": { + "attendance_detail_csv": "Attendance Table" + }, "subjects": { "jobs": { "parts_order": "Parts Order PO: {{ro_number}} - {{name}}" diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 1d63e0ffc..8670f0f47 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -2174,6 +2174,9 @@ "ca_bc_etf_table": "", "exported_payroll": "" }, + "special": { + "attendance_detail_csv": "" + }, "subjects": { "jobs": { "parts_order": "" diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 002cba126..fc457d9ff 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -2174,6 +2174,9 @@ "ca_bc_etf_table": "", "exported_payroll": "" }, + "special": { + "attendance_detail_csv": "" + }, "subjects": { "jobs": { "parts_order": "" diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js index fcc6af566..71dacacce 100644 --- a/client/src/utils/TemplateConstants.js +++ b/client/src/utils/TemplateConstants.js @@ -1668,6 +1668,13 @@ export const TemplateList = (type, context) => { key: "exported_payroll", disabled: false, }, + attendance_detail_csv: { + title: i18n.t("printcenter.special.attendance_detail_csv"), + description: "Est Detail", + subject: i18n.t("printcenter.special.attendance_detail_csv"), + key: "attendance_detail_csv", + disabled: false, + }, production_by_technician_one: { title: i18n.t( "reportcenter.templates.production_by_technician_one"