From 7d22dcab7c7c85aaeefe6e10aad4d879b24da73c Mon Sep 17 00:00:00 2001 From: Allan Carr Date: Thu, 18 Apr 2024 13:42:42 -0700 Subject: [PATCH] IO-2667 Employee Tasks report Signed-off-by: Allan Carr --- ...employee-search-select-email.component.jsx | 37 +++++++++++++++++++ .../report-center-modal.component.jsx | 34 ++++++++++++++--- client/src/graphql/employees.queries.js | 18 +++++++++ client/src/translations/en_us/common.json | 2 + client/src/translations/es/common.json | 2 + client/src/translations/fr/common.json | 2 + client/src/utils/TemplateConstants.js | 14 ++++++- 7 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 client/src/components/employee-search-select/employee-search-select-email.component.jsx diff --git a/client/src/components/employee-search-select/employee-search-select-email.component.jsx b/client/src/components/employee-search-select/employee-search-select-email.component.jsx new file mode 100644 index 000000000..c583db68c --- /dev/null +++ b/client/src/components/employee-search-select/employee-search-select-email.component.jsx @@ -0,0 +1,37 @@ +import { Select, Space, Tag } from "antd"; +import React from "react"; +import { useTranslation } from "react-i18next"; + +const { Option } = Select; +//To be used as a form element only. + +const EmployeeSearchSelectEmail = ({ options, ...props }) => { + const { t } = useTranslation(); + + return ( + + ); +}; +export default EmployeeSearchSelectEmail; 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 b1847d9e3..49a5372ff 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 @@ -2,23 +2,24 @@ import { useLazyQuery } from "@apollo/client"; import { useSplitTreatments } from "@splitsoftware/splitio-react"; import { Button, Card, Col, DatePicker, Form, Input, Radio, Row, Typography } from "antd"; import _ from "lodash"; -import dayjs from "../../utils/day"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; -import { QUERY_ACTIVE_EMPLOYEES } from "../../graphql/employees.queries"; +import { QUERY_ACTIVE_EMPLOYEES, QUERY_ACTIVE_EMPLOYEES_WITH_EMAIL } from "../../graphql/employees.queries"; import { QUERY_ALL_VENDORS } from "../../graphql/vendors.queries"; import { selectReportCenter } from "../../redux/modals/modals.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; import DatePickerRanges from "../../utils/DatePickerRanges"; import { GenerateDocument } from "../../utils/RenderTemplate"; import { TemplateList } from "../../utils/TemplateConstants"; +import dayjs from "../../utils/day"; +import EmployeeSearchSelectEmail from "../employee-search-select/employee-search-select-email.component"; 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"; -import ReportCenterModalFiltersSortersComponent from "./report-center-modal-filters-sorters-component"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; +import VendorSearchSelect from "../vendor-search-select/vendor-search-select.component"; +import ReportCenterModalFiltersSortersComponent from "./report-center-modal-filters-sorters-component"; +import "./report-center-modal.styles.scss"; const mapStateToProps = createStructuredSelector({ reportCenterModal: selectReportCenter, @@ -66,6 +67,13 @@ export function ReportCenterModalComponent({ reportCenterModal, bodyshop }) { skip: !(open && Templates[form.getFieldValue("key")] && Templates[form.getFieldValue("key")].idtype) }); + const [callEmployeeWithEmailQuery, { data: employeeWithEmailData, called: employeeWithEmailCalled }] = useLazyQuery( + QUERY_ACTIVE_EMPLOYEES_WITH_EMAIL, + { + skip: !(open && Templates[form.getFieldValue("key")] && Templates[form.getFieldValue("key")].idtype) + } + ); + const handleFinish = async (values) => { setLoading(true); const start = values.dates ? values.dates[0] : null; @@ -197,6 +205,7 @@ export function ReportCenterModalComponent({ reportCenterModal, bodyshop }) { } if (!vendorCalled && idtype === "vendor") callVendorQuery(); if (!employeeCalled && idtype === "employee") callEmployeeQuery(); + if (!employeeWithEmailCalled && idtype === "employeeWithEmail") callEmployeeWithEmailQuery(); if (idtype === "vendor") return ( ); + if (idtype === "employeeWithEmail") + return ( + + + + ); else return null; }} diff --git a/client/src/graphql/employees.queries.js b/client/src/graphql/employees.queries.js index 2f558e838..5b73db825 100644 --- a/client/src/graphql/employees.queries.js +++ b/client/src/graphql/employees.queries.js @@ -67,6 +67,24 @@ export const QUERY_ACTIVE_EMPLOYEES = gql` } `; +export const QUERY_ACTIVE_EMPLOYEES_WITH_EMAIL = gql` + query QUERY_ACTIVE_EMPLOYEES_WITH_EMAIL { + employees(where: {active: {_eq: true}, user_email: {_is_null: false}}) { + last_name + id + first_name + employee_number + active + termination_date + hire_date + flat_rate + rates + pin + user_email + } + } +`; + export const INSERT_EMPLOYEES = gql` mutation INSERT_EMPLOYEES($employees: [employees_insert_input!]!) { insert_employees(objects: $employees) { diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json index 7cb96323e..5fdd89d31 100644 --- a/client/src/translations/en_us/common.json +++ b/client/src/translations/en_us/common.json @@ -2909,6 +2909,7 @@ "parts_orders": "Parts Orders", "payments": "Payments", "scoreboard": "Scoreboard", + "tasks": "Tasks", "timetickets": "Timetickets" }, "vendor": "Vendor" @@ -3025,6 +3026,7 @@ "scoreboard_summary": "Scoreboard Summary", "supplement_ratio_ins_co": "Supplement Ratio by Source", "tasks_date": "Tasks by Date", + "tasks_date_employee": "Employee Tasks by Date", "thank_you_date": "Thank You Letters", "timetickets": "Time Tickets", "timetickets_employee": "Employee Time Tickets", diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json index 16ba2bd97..eddbdc6cc 100644 --- a/client/src/translations/es/common.json +++ b/client/src/translations/es/common.json @@ -2907,6 +2907,7 @@ "parts_orders": "", "payments": "", "scoreboard": "", + "tasks": "", "timetickets": "" }, "vendor": "" @@ -3023,6 +3024,7 @@ "scoreboard_summary": "", "supplement_ratio_ins_co": "", "tasks_date": "", + "tasks_date_employee": "", "thank_you_date": "", "timetickets": "", "timetickets_employee": "", diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json index 20c8065ba..b6565ac10 100644 --- a/client/src/translations/fr/common.json +++ b/client/src/translations/fr/common.json @@ -2907,6 +2907,7 @@ "parts_orders": "", "payments": "", "scoreboard": "", + "tasks": "", "timetickets": "" }, "vendor": "" @@ -3023,6 +3024,7 @@ "scoreboard_summary": "", "supplement_ratio_ins_co": "", "tasks_date": "", + "tasks_date_employee": "", "thank_you_date": "", "timetickets": "", "timetickets_employee": "", diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js index aa4fc5041..7415622b9 100644 --- a/client/src/utils/TemplateConstants.js +++ b/client/src/utils/TemplateConstants.js @@ -2105,7 +2105,19 @@ export const TemplateList = (type, context) => { //idtype: "vendor", disabled: false, rangeFilter: { - object: i18n.t("reportcenter.labels.objects.jobs"), + object: i18n.t("reportcenter.labels.objects.tasks"), + field: i18n.t("tasks.fields.created_at") + }, + group: "jobs" + }, + tasks_date_employee: { + title: i18n.t("reportcenter.templates.tasks_date_employee"), + subject: i18n.t("reportcenter.templates.tasks_date_employee"), + key: "tasks_date_employee", + idtype: "employeeWithEmail", + disabled: false, + rangeFilter: { + object: i18n.t("reportcenter.labels.objects.tasks"), field: i18n.t("tasks.fields.created_at") }, group: "jobs"