diff --git a/client/src/components/job-3rd-party-modal/job-3rd-party-modal.component.jsx b/client/src/components/job-3rd-party-modal/job-3rd-party-modal.component.jsx index af6c4fc3d..b0657d270 100644 --- a/client/src/components/job-3rd-party-modal/job-3rd-party-modal.component.jsx +++ b/client/src/components/job-3rd-party-modal/job-3rd-party-modal.component.jsx @@ -5,6 +5,7 @@ import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { SEARCH_VENDOR_AUTOCOMPLETE_WITH_ADDR } from "../../graphql/vendors.queries"; +import { selectTechnician } from "../../redux/tech/tech.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; import { GenerateDocument } from "../../utils/RenderTemplate"; import { TemplateList } from "../../utils/TemplateConstants"; @@ -13,13 +14,14 @@ import VendorSearchSelect from "../vendor-search-select/vendor-search-select.com const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, + technician: selectTechnician, }); const mapDispatchToProps = (dispatch) => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); export default connect(mapStateToProps, mapDispatchToProps)(Jobd3RdPartyModal); -export function Jobd3RdPartyModal({ bodyshop, jobId, job }) { +export function Jobd3RdPartyModal({ bodyshop, jobId, job, technician }) { const [isModalVisible, setIsModalVisible] = useState(false); const { t } = useTranslation(); const [form] = Form.useForm(); @@ -212,7 +214,9 @@ export function Jobd3RdPartyModal({ bodyshop, jobId, job }) { ]} > - {t("parts_orders.labels.email")} + {!technician ? ( + {t("parts_orders.labels.email")} + ) : null} {t("parts_orders.labels.print")} diff --git a/client/src/components/print-center-item/print-center-item.component.jsx b/client/src/components/print-center-item/print-center-item.component.jsx index d1c6b1b58..48bc92291 100644 --- a/client/src/components/print-center-item/print-center-item.component.jsx +++ b/client/src/components/print-center-item/print-center-item.component.jsx @@ -5,11 +5,13 @@ import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { setEmailOptions } from "../../redux/email/email.actions"; import { selectPrintCenter } from "../../redux/modals/modals.selectors"; +import { selectTechnician } from "../../redux/tech/tech.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; import { GenerateDocument } from "../../utils/RenderTemplate"; const mapStateToProps = createStructuredSelector({ printCenterModal: selectPrintCenter, bodyshop: selectBodyshop, + technician: selectTechnician, }); const mapDispatchToProps = (dispatch) => ({ setEmailOptions: (e) => dispatch(setEmailOptions(e)), @@ -22,6 +24,7 @@ export function PrintCenterItemComponent({ id, bodyshop, disabled, + technician, }) { const [loading, setLoading] = useState(false); const { context } = printCenterModal; @@ -44,19 +47,24 @@ export function PrintCenterItemComponent({ {item.title} - { - GenerateDocument( - { - name: item.key, - variables: { id: id }, - }, - { to: context.job && context.job.ownr_ea, subject: item.subject }, - "e", - id - ); - }} - /> + {!technician ? ( + { + GenerateDocument( + { + name: item.key, + variables: { id: id }, + }, + { + to: context.job && context.job.ownr_ea, + subject: item.subject, + }, + "e", + id + ); + }} + /> + ) : null} {loading && } diff --git a/client/src/components/production-list-detail/production-list-detail.component.jsx b/client/src/components/production-list-detail/production-list-detail.component.jsx index ac5b4146c..170b31b46 100644 --- a/client/src/components/production-list-detail/production-list-detail.component.jsx +++ b/client/src/components/production-list-detail/production-list-detail.component.jsx @@ -1,31 +1,33 @@ +import { PrinterFilled } from "@ant-design/icons"; import { useQuery } from "@apollo/client"; -import { Descriptions, Drawer, Space, PageHeader, Button } from "antd"; +import { Button, Descriptions, Drawer, PageHeader, Space } from "antd"; import queryString from "query-string"; import React from "react"; import { useTranslation } from "react-i18next"; +import { connect } from "react-redux"; import { useHistory, useLocation } from "react-router-dom"; +import { createStructuredSelector } from "reselect"; import { QUERY_JOB_CARD_DETAILS } from "../../graphql/jobs.queries"; +import { setModalContext } from "../../redux/modals/modals.actions"; +import { selectTechnician } from "../../redux/tech/tech.selectors"; +import { selectBodyshop } from "../../redux/user/user.selectors"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; import { DateFormatter } from "../../utils/DateFormatter"; import AlertComponent from "../alert/alert.component"; import StartChatButton from "../chat-open-button/chat-open-button.component"; +import JobAtChange from "../job-at-change/job-at-change.component"; import JobDetailCardsDocumentsComponent from "../job-detail-cards/job-detail-cards.documents.component"; import JobDetailCardsNotesComponent from "../job-detail-cards/job-detail-cards.notes.component"; import JobDetailCardsPartsComponent from "../job-detail-cards/job-detail-cards.parts.component"; import JobEmployeeAssignments from "../job-employee-assignments/job-employee-assignments.container"; -import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component"; -import ProductionRemoveButton from "../production-remove-button/production-remove-button.component"; -import JobAtChange from "../job-at-change/job-at-change.component"; -import { PrinterFilled } from "@ant-design/icons"; -import OwnerNameDisplay from "../owner-name-display/owner-name-display.component"; -import { connect } from "react-redux"; -import { createStructuredSelector } from "reselect"; -import { setModalContext } from "../../redux/modals/modals.actions"; import ScoreboardAddButton from "../job-scoreboard-add-button/job-scoreboard-add-button.component"; -import { selectBodyshop } from "../../redux/user/user.selectors"; +import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component"; +import OwnerNameDisplay from "../owner-name-display/owner-name-display.component"; +import ProductionRemoveButton from "../production-remove-button/production-remove-button.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, + technician: selectTechnician, }); const mapDispatchToProps = (dispatch) => ({ setPrintCenterContext: (context) => @@ -40,6 +42,7 @@ export function ProductionListDetail({ bodyshop, jobs, setPrintCenterContext, + technician, }) { const search = queryString.parse(useLocation().search); const history = useHistory(); @@ -66,7 +69,9 @@ export function ProductionListDetail({ title={theJob.ro_number} extra={ - {" "} + {!technician ? ( + + ) : null} - + {!technician ? ( + + ) : null} } /> diff --git a/client/src/components/tech-job-print-tickets/tech-job-print-tickets.component.jsx b/client/src/components/tech-job-print-tickets/tech-job-print-tickets.component.jsx index 1cec8dede..b96a1d062 100644 --- a/client/src/components/tech-job-print-tickets/tech-job-print-tickets.component.jsx +++ b/client/src/components/tech-job-print-tickets/tech-job-print-tickets.component.jsx @@ -1,4 +1,4 @@ -import { Button, Card, DatePicker, Form, Popover, Space } from "antd"; +import { Button, Card, DatePicker, Form, Popover, Radio, Space } from "antd"; import moment from "moment"; import React, { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; @@ -69,7 +69,7 @@ export function TechJobPrintTickets({ technician, event, attendacePrint }) { ? Templates.attendance_employee.subject : Templates.timetickets_employee.subject, }, - "p" + values.sendby // === "email" ? "e" : "p" ); } catch (error) { console.log(error); @@ -99,10 +99,25 @@ export function TechJobPrintTickets({ technician, event, attendacePrint }) { format={"MM/DD/YYYY"} /> - + + {() => { + return ( + + + {t("general.labels.email")} + {t("general.labels.print")} + + + ); + }} + ); diff --git a/client/src/pages/tech/tech.page.component.jsx b/client/src/pages/tech/tech.page.component.jsx index 50219f72d..5808ae84c 100644 --- a/client/src/pages/tech/tech.page.component.jsx +++ b/client/src/pages/tech/tech.page.component.jsx @@ -1,21 +1,24 @@ import { BackTop, Layout } from "antd"; -import React, { lazy, Suspense, useEffect } from "react"; +import React, { Suspense, lazy, useEffect } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { Redirect, Route, Switch } from "react-router-dom"; import { createStructuredSelector } from "reselect"; import ErrorBoundary from "../../components/error-boundary/error-boundary.component"; +import FeatureWrapper from "../../components/feature-wrapper/feature-wrapper.component"; import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component"; import TechHeader from "../../components/tech-header/tech-header.component"; import TechSider from "../../components/tech-sider/tech-sider.component"; -import { selectTechnician } from "../../redux/tech/tech.selectors"; -import FeatureWrapper from "../../components/feature-wrapper/feature-wrapper.component"; -import "./tech.page.styles.scss"; import UpdateAlert from "../../components/update-alert/update-alert.component"; +import { selectTechnician } from "../../redux/tech/tech.selectors"; +import "./tech.page.styles.scss"; const TimeTicketModalContainer = lazy(() => import("../../components/time-ticket-modal/time-ticket-modal.container") ); +const EmailOverlayContainer = lazy(() => + import("../../components/email-overlay/email-overlay.container.jsx") +); const PrintCenterModalContainer = lazy(() => import("../../components/print-center-modal/print-center-modal.container") ); @@ -69,6 +72,7 @@ export function TechPage({ technician, match }) { > +