import { Button, Col, Form, Input, Row, Select, Space, Switch, Typography } from "antd"; import axios from "axios"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { calculateScheduleLoad } from "../../redux/application/application.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; import { DateFormatter } from "../../utils/DateFormatter"; import dayjs from "../../utils/day"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component"; import EmailInput from "../form-items-formatted/email-form-item.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import ScheduleDayViewContainer from "../schedule-day-view/schedule-day-view.container"; import ScheduleExistingAppointmentsList from "../schedule-existing-appointments-list/schedule-existing-appointments-list.component"; import "./schedule-job-modal.scss"; import LockWrapperComponent from "../lock-wrapper/lock-wrapper.component"; import BlurWrapper from "../feature-wrapper/blur-wrapper.component"; import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop }); const mapDispatchToProps = (dispatch) => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) calculateScheduleLoad: (endDate) => dispatch(calculateScheduleLoad(endDate)) }); export function ScheduleJobModalComponent({ bodyshop, form, existingAppointments, lbrHrsData, jobId, calculateScheduleLoad }) { const { t } = useTranslation(); const [loading, setLoading] = useState(false); const [smartOptions, setSmartOptions] = useState([]); const handleSmartScheduling = async () => { setLoading(true); try { const response = await axios.post("/scheduling/job", { jobId: jobId }); if (response.data) setSmartOptions(response.data); } catch (error) { console.log("error", error, error.message); } finally { setLoading(false); } }; const handleDateBlur = () => { const values = form.getFieldsValue(); if (lbrHrsData) { const totalHours = lbrHrsData.jobs_by_pk.labhrs.aggregate.sum.mod_lb_hrs + lbrHrsData.jobs_by_pk.larhrs.aggregate.sum.mod_lb_hrs; if (values.start && !values.scheduled_completion) form.setFieldsValue({ scheduled_completion: dayjs(values.start).businessDaysAdd(totalHours / bodyshop.target_touchtime, "day") }); } }; const hasSmartSchedulingAccess = HasFeatureAccess({ bodyshop, featureName: "smartscheduling" }); return ( {lbrHrsData?.jobs_by_pk?.ro_number} {`B/R Hrs:${ lbrHrsData?.jobs_by_pk.labhrs?.aggregate?.sum?.mod_lb_hrs || 0 }/${lbrHrsData?.jobs_by_pk.larhrs?.aggregate?.sum?.mod_lb_hrs || 0}`} { <> {t("appointments.labels.smartscheduling")} {smartOptions.map((d, idx) => ( ))} {!smartOptions.length > 1 && hasSmartSchedulingAccess && ( )} } {t("appointments.labels.history")} prev.start !== cur.start}> {() => { const values = form.getFieldsValue(); if (values.start) { calculateScheduleLoad(dayjs(values.start).add(3, "day")); } return (
); }}
); } export default connect(mapStateToProps, mapDispatchToProps)(ScheduleJobModalComponent);