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"