diff --git a/client/src/components/eula/eula.component.jsx b/client/src/components/eula/eula.component.jsx index 4ffc4be97..e4b0eb326 100644 --- a/client/src/components/eula/eula.component.jsx +++ b/client/src/components/eula/eula.component.jsx @@ -51,12 +51,23 @@ const Eula = ({currentEula, currentUser, acceptEula}) => { try { const {accepted_terms, ...otherFormValues} = formValues; + + // Trim the values of the fields before submitting + const trimmedFormValues = { + first_name: otherFormValues.first_name.trim(), + last_name: otherFormValues.last_name.trim(), + business_name: otherFormValues.business_name.trim(), + address: otherFormValues.address.trim(), + phone_number: otherFormValues.phone_number.trim(), + }; + await insertEulaAcceptance({ variables: { eulaAcceptance: { eulaid: eulaId, useremail, ...otherFormValues, + ...trimmedFormValues, date_accepted: new Date(), } } @@ -101,7 +112,7 @@ const Eula = ({currentEula, currentUser, acceptEula}) => { >
- +
diff --git a/client/src/components/scoreboard-timetickets-stats/scoreboard-timetickets.component.jsx b/client/src/components/scoreboard-timetickets-stats/scoreboard-timetickets.component.jsx index 8d3171fde..72f22da28 100644 --- a/client/src/components/scoreboard-timetickets-stats/scoreboard-timetickets.component.jsx +++ b/client/src/components/scoreboard-timetickets-stats/scoreboard-timetickets.component.jsx @@ -1,13 +1,13 @@ -import { useQuery } from "@apollo/client"; -import { Col, Row } from "antd"; +import {useQuery} from "@apollo/client"; +import {Col, Row} from "antd"; import _ from "lodash"; import dayjs from "../../utils/day"; -import React, { useMemo } from "react"; -import { useTranslation } from "react-i18next"; -import { connect } from "react-redux"; -import { createStructuredSelector } from "reselect"; -import { QUERY_TIME_TICKETS_IN_RANGE_SB } from "../../graphql/timetickets.queries"; -import { selectBodyshop } from "../../redux/user/user.selectors"; +import React, {useMemo} from "react"; +import {useTranslation} from "react-i18next"; +import {connect} from "react-redux"; +import {createStructuredSelector} from "reselect"; +import {QUERY_TIME_TICKETS_IN_RANGE_SB} from "../../graphql/timetickets.queries"; +import {selectBodyshop} from "../../redux/user/user.selectors"; import AlertComponent from "../alert/alert.component"; import LoadingSpinner from "../loading-spinner/loading-spinner.component"; import * as Utils from "../scoreboard-targets-table/scoreboard-targets-table.util"; @@ -16,396 +16,397 @@ import ScoreboardTicketsStats from "./scoreboard-timetickets.stats.component"; import ScoreboardTimeticketsTargetsTable from "./scoreboard-timetickets.targets-table.component"; const mapStateToProps = createStructuredSelector({ - bodyshop: selectBodyshop, + bodyshop: selectBodyshop, }); const mapDispatchToProps = (dispatch) => ({ - //setUserLanguage: language => dispatch(setUserLanguage(language)) + //setUserLanguage: language => dispatch(setUserLanguage(language)) }); export default connect( - mapStateToProps, - mapDispatchToProps + mapStateToProps, + mapDispatchToProps )(ScoreboardTimeTicketsStats); -export function ScoreboardTimeTicketsStats({ bodyshop }) { - const { t } = useTranslation(); - const startDate = dayjs().startOf("month") - const endDate = dayjs().endOf("month"); +export function ScoreboardTimeTicketsStats({bodyshop}) { + const {t} = useTranslation(); + const startDate = dayjs().startOf("month") + const endDate = dayjs().endOf("month"); - const fixedPeriods = useMemo(() => { - const endOfThisMonth = dayjs().endOf("month"); - const startofthisMonth = dayjs().startOf("month"); + const fixedPeriods = useMemo(() => { + const endOfThisMonth = dayjs().endOf("month"); + const startofthisMonth = dayjs().startOf("month"); - const endOfLastmonth = dayjs().subtract(1, "month").endOf("month"); - const startOfLastmonth = dayjs().subtract(1, "month").startOf("month"); + const endOfLastmonth = dayjs().subtract(1, "month").endOf("month"); + const startOfLastmonth = dayjs().subtract(1, "month").startOf("month"); - const endOfThisWeek = dayjs().endOf("week"); - const startOfThisWeek = dayjs().startOf("week"); + const endOfThisWeek = dayjs().endOf("week"); + const startOfThisWeek = dayjs().startOf("week"); - const endOfLastWeek = dayjs().subtract(1, "week").endOf("week"); - const startOfLastWeek = dayjs().subtract(1, "week").startOf("week"); + const endOfLastWeek = dayjs().subtract(1, "week").endOf("week"); + const startOfLastWeek = dayjs().subtract(1, "week").startOf("week"); - const endOfPriorWeek = dayjs().subtract(2, "week").endOf("week"); - const startOfPriorWeek = dayjs().subtract(2, "week").startOf("week"); + const endOfPriorWeek = dayjs().subtract(2, "week").endOf("week"); + const startOfPriorWeek = dayjs().subtract(2, "week").startOf("week"); - const allDates = [ - endOfThisMonth, - startofthisMonth, - endOfLastmonth, - startOfLastmonth, - endOfThisWeek, - startOfThisWeek, - endOfLastWeek, - startOfLastWeek, - endOfPriorWeek, - startOfPriorWeek, - ]; - const start = dayjs.min(allDates); - const end = dayjs.max(allDates); - return { - start, - end, - endOfThisMonth, - startofthisMonth, - endOfLastmonth, - startOfLastmonth, - endOfThisWeek, - startOfThisWeek, - endOfLastWeek, - startOfLastWeek, - endOfPriorWeek, - startOfPriorWeek, - }; - }, []); + const allDates = [ + endOfThisMonth, + startofthisMonth, + endOfLastmonth, + startOfLastmonth, + endOfThisWeek, + startOfThisWeek, + endOfLastWeek, + startOfLastWeek, + endOfPriorWeek, + startOfPriorWeek, + ]; + const start = dayjs.min(allDates); + const end = dayjs.max(allDates); + return { + start, + end, + endOfThisMonth, + startofthisMonth, + endOfLastmonth, + startOfLastmonth, + endOfThisWeek, + startOfThisWeek, + endOfLastWeek, + startOfLastWeek, + endOfPriorWeek, + startOfPriorWeek, + }; + }, []); - const { loading, error, data } = useQuery(QUERY_TIME_TICKETS_IN_RANGE_SB, { - variables: { - start: startDate.format("YYYY-MM-DD"), - end: endDate.format("YYYY-MM-DD"), - fixedStart: fixedPeriods.start.format("YYYY-MM-DD"), - fixedEnd: fixedPeriods.end.format("YYYY-MM-DD"), - jobStart: startDate, - jobEnd: endDate, - }, - fetchPolicy: "network-only", - nextFetchPolicy: "network-only", - pollInterval: 60000, - skip: !fixedPeriods, - }); - - const calculatedData = useMemo(() => { - if (!data) return []; - const ret = { - totalThisWeek: 0, - totalThisWeekLAB: 0, - totalThisWeekLAR: 0, - totalLastWeek: 0, - totalLastWeekLAB: 0, - totalLastWeekLAR: 0, - totalPriorWeek: 0, - totalPriorWeekLAB: 0, - totalPriorWeekLAR: 0, - totalThisMonth: 0, - totalThisMonthLAB: 0, - totalThisMonthLAR: 0, - totalLastMonth: 0, - totalLastMonthLAB: 0, - totalLastMonthLAR: 0, - actualTotalOverPeriod: 0, - actualTotalOverPeriodLAB: 0, - actualTotalOverPeriodLAR: 0, - totalEffieciencyOverPeriod: 0, - totalEffieciencyOverPeriodLAB: 0, - totalEffieciencyOverPeriodLAR: 0, - seperatedThisWeek: { - sunday: { - total: 0, - lab: 0, - lar: 0, + const {loading, error, data} = useQuery(QUERY_TIME_TICKETS_IN_RANGE_SB, { + variables: { + start: startDate.format("YYYY-MM-DD"), + end: endDate.format("YYYY-MM-DD"), + fixedStart: fixedPeriods.start.format("YYYY-MM-DD"), + fixedEnd: fixedPeriods.end.format("YYYY-MM-DD"), + jobStart: startDate, + jobEnd: endDate, }, - monday: { - total: 0, - lab: 0, - lar: 0, - }, - tuesday: { - total: 0, - lab: 0, - lar: 0, - }, - wednesday: { - total: 0, - lab: 0, - lar: 0, - }, - thursday: { - total: 0, - lab: 0, - lar: 0, - }, - friday: { - total: 0, - lab: 0, - lar: 0, - }, - saturday: { - total: 0, - lab: 0, - lar: 0, - }, - }, - }; - - data.fixedperiod.forEach((ticket) => { - const ticketDate = dayjs(ticket.date); - if ( - ticketDate.isBetween( - fixedPeriods.startOfThisWeek, - fixedPeriods.endOfThisWeek, - undefined, - "[]" - ) - ) { - ret.totalThisWeek = ret.totalThisWeek + ticket.productivehrs; - if (ticket.ciecacode !== "LAR") - ret.totalThisWeekLAB = ret.totalThisWeekLAB + ticket.productivehrs; - if (ticket.ciecacode === "LAR") - ret.totalThisWeekLAR = ret.totalThisWeekLAR + ticket.productivehrs; - - //Seperate out to Day of Week - ret.seperatedThisWeek[ - dayjs(ticket.date).format("dddd").toLowerCase() - ].total = - ret.seperatedThisWeek[ - dayjs(ticket.date).format("dddd").toLowerCase() - ].total + ticket.productivehrs; - if (ticket.ciecacode !== "LAR") - ret.seperatedThisWeek[ - dayjs(ticket.date).format("dddd").toLowerCase() - ].lab = - ret.seperatedThisWeek[ - dayjs(ticket.date).format("dddd").toLowerCase() - ].lab + ticket.productivehrs; - if (ticket.ciecacode === "LAR") - ret.seperatedThisWeek[ - dayjs(ticket.date).format("dddd").toLowerCase() - ].lar = - ret.seperatedThisWeek[ - dayjs(ticket.date).format("dddd").toLowerCase() - ].lar + ticket.productivehrs; - } else if ( - ticketDate.isBetween( - fixedPeriods.startOfLastWeek, - fixedPeriods.endOfLastWeek, - undefined, - "[]" - ) - ) { - ret.totalLastWeek = ret.totalLastWeek + ticket.productivehrs; - if (ticket.ciecacode !== "LAR") - ret.totalLastWeekLAB = ret.totalLastWeekLAB + ticket.productivehrs; - if (ticket.ciecacode === "LAR") - ret.totalLastWeekLAR = ret.totalLastWeekLAR + ticket.productivehrs; - } else if ( - ticketDate.isBetween( - fixedPeriods.startOfPriorWeek, - fixedPeriods.endOfPriorWeek, - undefined, - "[]" - ) - ) { - ret.totalPriorWeek = ret.totalPriorWeek + ticket.productivehrs; - if (ticket.ciecacode !== "LAR") - ret.totalPriorWeekLAB = ret.totalPriorWeekLAB + ticket.productivehrs; - if (ticket.ciecacode === "LAR") - ret.totalPriorWeekLAR = ret.totalPriorWeekLAR + ticket.productivehrs; - } - if ( - ticketDate.isBetween( - fixedPeriods.startofthisMonth, - fixedPeriods.endOfThisMonth, - undefined, - "[]" - ) - ) { - ret.totalThisMonth = ret.totalThisMonth + ticket.productivehrs; - ret.actualTotalOverPeriod = - ret.actualTotalOverPeriod + (ticket.actualhrs || 0); - if (ticket.ciecacode !== "LAR") { - ret.totalThisMonthLAB = ret.totalThisMonthLAB + ticket.productivehrs; - ret.actualTotalOverPeriodLAB = - ret.actualTotalOverPeriodLAB + (ticket.actualhrs || 0); - } - if (ticket.ciecacode === "LAR") { - ret.totalThisMonthLAR = ret.totalThisMonthLAR + ticket.productivehrs; - ret.actualTotalOverPeriodLAR = - ret.actualTotalOverPeriodLAR + (ticket.actualhrs || 0); - } - } else if ( - ticketDate.isBetween( - fixedPeriods.startOfLastmonth, - fixedPeriods.endOfLastmonth, - undefined, - "[]" - ) - ) { - ret.totalLastMonth = ret.totalLastMonth + ticket.productivehrs; - if (ticket.ciecacode !== "LAR") - ret.totalLastMonthLAB = ret.totalLastMonthLAB + ticket.productivehrs; - if (ticket.ciecacode === "LAR") - ret.totalLastMonthLAR = ret.totalLastMonthLAR + ticket.productivehrs; - } + fetchPolicy: "network-only", + nextFetchPolicy: "network-only", + pollInterval: 60000, + skip: !fixedPeriods, }); - ret.totalEffieciencyOverPeriod = ret.actualTotalOverPeriod - ? (ret.totalThisMonth / ret.actualTotalOverPeriod) * 100 - : 0; - ret.totalEffieciencyOverPeriodLAB = ret.actualTotalOverPeriodLAB - ? (ret.totalThisMonthLAB / ret.actualTotalOverPeriodLAB) * 100 - : 0; - ret.totalEffieciencyOverPeriodLAR = ret.actualTotalOverPeriodLAR - ? (ret.totalThisMonthLAR / ret.actualTotalOverPeriodLAR) * 100 - : 0; + const calculatedData = useMemo(() => { + if (!data) return []; + const ret = { + totalThisWeek: 0, + totalThisWeekLAB: 0, + totalThisWeekLAR: 0, + totalLastWeek: 0, + totalLastWeekLAB: 0, + totalLastWeekLAR: 0, + totalPriorWeek: 0, + totalPriorWeekLAB: 0, + totalPriorWeekLAR: 0, + totalThisMonth: 0, + totalThisMonthLAB: 0, + totalThisMonthLAR: 0, + totalLastMonth: 0, + totalLastMonthLAB: 0, + totalLastMonthLAR: 0, + actualTotalOverPeriod: 0, + actualTotalOverPeriodLAB: 0, + actualTotalOverPeriodLAR: 0, + totalEffieciencyOverPeriod: 0, + totalEffieciencyOverPeriodLAB: 0, + totalEffieciencyOverPeriodLAR: 0, + seperatedThisWeek: { + sunday: { + total: 0, + lab: 0, + lar: 0, + }, + monday: { + total: 0, + lab: 0, + lar: 0, + }, + tuesday: { + total: 0, + lab: 0, + lar: 0, + }, + wednesday: { + total: 0, + lab: 0, + lar: 0, + }, + thursday: { + total: 0, + lab: 0, + lar: 0, + }, + friday: { + total: 0, + lab: 0, + lar: 0, + }, + saturday: { + total: 0, + lab: 0, + lar: 0, + }, + }, + }; - roundObject(ret); + data.fixedperiod.forEach((ticket) => { + const ticketDate = dayjs(ticket.date); + if ( + ticketDate.isBetween( + fixedPeriods.startOfThisWeek, + fixedPeriods.endOfThisWeek, + undefined, + "[]" + ) + ) { + ret.totalThisWeek = ret.totalThisWeek + ticket.productivehrs; + if (ticket.ciecacode !== "LAR") + ret.totalThisWeekLAB = ret.totalThisWeekLAB + ticket.productivehrs; + if (ticket.ciecacode === "LAR") + ret.totalThisWeekLAR = ret.totalThisWeekLAR + ticket.productivehrs; - const ticketsGroupedByDate = _.groupBy(data.timetickets, "date"); - - const listOfDays = Utils.ListOfDaysInCurrentMonth(); - - const combinedData = [], - labData = [], - larData = []; - var acc_comb = 0; - var acc_lab = 0; - var acc_lar = 0; - - listOfDays.forEach((day) => { - const r = { - date: dayjs(day).format("MM/DD"), - actualhrs: 0, - productivehrs: 0, - }; - - const combined = { - accTargetHrs: _.round( - Utils.AsOfDateTargetHours( - bodyshop.scoreboard_target.dailyBodyTarget + - bodyshop.scoreboard_target.dailyPaintTarget, - day - ) + - (bodyshop.scoreboard_target.dailyBodyTarget + - bodyshop.scoreboard_target.dailyPaintTarget), - 1 - ), - accHrs: 0, - }; - const lab = { - accTargetHrs: _.round( - Utils.AsOfDateTargetHours( - bodyshop.scoreboard_target.dailyBodyTarget, - day - ) + bodyshop.scoreboard_target.dailyBodyTarget, - 1 - ), - accHrs: 0, - }; - const lar = { - accTargetHrs: _.round( - Utils.AsOfDateTargetHours( - bodyshop.scoreboard_target.dailyPaintTarget, - day - ) + bodyshop.scoreboard_target.dailyPaintTarget, - 1 - ), - accHrs: 0, - }; - - if (ticketsGroupedByDate[day]) { - ticketsGroupedByDate[day].forEach((ticket) => { - r.actualhrs = r.actualhrs + ticket.actualhrs; - r.productivehrs = r.productivehrs + ticket.productivehrs; - acc_comb = acc_comb + ticket.productivehrs; - - if (ticket.ciecacode !== "LAR") - acc_lab = acc_lab + ticket.productivehrs; - if (ticket.ciecacode === "LAR") - acc_lar = acc_lar + ticket.productivehrs; + //Seperate out to Day of Week + ret.seperatedThisWeek[ + dayjs(ticket.date).format("dddd").toLowerCase() + ].total = + ret.seperatedThisWeek[ + dayjs(ticket.date).format("dddd").toLowerCase() + ].total + ticket.productivehrs; + if (ticket.ciecacode !== "LAR") + ret.seperatedThisWeek[ + dayjs(ticket.date).format("dddd").toLowerCase() + ].lab = + ret.seperatedThisWeek[ + dayjs(ticket.date).format("dddd").toLowerCase() + ].lab + ticket.productivehrs; + if (ticket.ciecacode === "LAR") + ret.seperatedThisWeek[ + dayjs(ticket.date).format("dddd").toLowerCase() + ].lar = + ret.seperatedThisWeek[ + dayjs(ticket.date).format("dddd").toLowerCase() + ].lar + ticket.productivehrs; + } else if ( + ticketDate.isBetween( + fixedPeriods.startOfLastWeek, + fixedPeriods.endOfLastWeek, + undefined, + "[]" + ) + ) { + ret.totalLastWeek = ret.totalLastWeek + ticket.productivehrs; + if (ticket.ciecacode !== "LAR") + ret.totalLastWeekLAB = ret.totalLastWeekLAB + ticket.productivehrs; + if (ticket.ciecacode === "LAR") + ret.totalLastWeekLAR = ret.totalLastWeekLAR + ticket.productivehrs; + } else if ( + ticketDate.isBetween( + fixedPeriods.startOfPriorWeek, + fixedPeriods.endOfPriorWeek, + undefined, + "[]" + ) + ) { + ret.totalPriorWeek = ret.totalPriorWeek + ticket.productivehrs; + if (ticket.ciecacode !== "LAR") + ret.totalPriorWeekLAB = ret.totalPriorWeekLAB + ticket.productivehrs; + if (ticket.ciecacode === "LAR") + ret.totalPriorWeekLAR = ret.totalPriorWeekLAR + ticket.productivehrs; + } + if ( + ticketDate.isBetween( + fixedPeriods.startofthisMonth, + fixedPeriods.endOfThisMonth, + undefined, + "[]" + ) + ) { + ret.totalThisMonth = ret.totalThisMonth + ticket.productivehrs; + ret.actualTotalOverPeriod = + ret.actualTotalOverPeriod + (ticket.actualhrs || 0); + if (ticket.ciecacode !== "LAR") { + ret.totalThisMonthLAB = ret.totalThisMonthLAB + ticket.productivehrs; + ret.actualTotalOverPeriodLAB = + ret.actualTotalOverPeriodLAB + (ticket.actualhrs || 0); + } + if (ticket.ciecacode === "LAR") { + ret.totalThisMonthLAR = ret.totalThisMonthLAR + ticket.productivehrs; + ret.actualTotalOverPeriodLAR = + ret.actualTotalOverPeriodLAR + (ticket.actualhrs || 0); + } + } else if ( + ticketDate.isBetween( + fixedPeriods.startOfLastmonth, + fixedPeriods.endOfLastmonth, + undefined, + "[]" + ) + ) { + ret.totalLastMonth = ret.totalLastMonth + ticket.productivehrs; + if (ticket.ciecacode !== "LAR") + ret.totalLastMonthLAB = ret.totalLastMonthLAB + ticket.productivehrs; + if (ticket.ciecacode === "LAR") + ret.totalLastMonthLAR = ret.totalLastMonthLAR + ticket.productivehrs; + } }); - } - combined.accHrs = acc_comb; - lab.accHrs = acc_lab; - lar.accHrs = acc_lar; - combinedData.push({ ...r, ...combined }); - labData.push({ ...r, ...lab }); - larData.push({ ...r, ...lar }); - }); + ret.totalEffieciencyOverPeriod = ret.actualTotalOverPeriod + ? (ret.totalThisMonth / ret.actualTotalOverPeriod) * 100 + : 0; + ret.totalEffieciencyOverPeriodLAB = ret.actualTotalOverPeriodLAB + ? (ret.totalThisMonthLAB / ret.actualTotalOverPeriodLAB) * 100 + : 0; + ret.totalEffieciencyOverPeriodLAR = ret.actualTotalOverPeriodLAR + ? (ret.totalThisMonthLAR / ret.actualTotalOverPeriodLAR) * 100 + : 0; - const jobData = {}; + roundObject(ret); - data.jobs.forEach((job) => { - job.tthrs = job.joblines.reduce((acc, val) => acc + val.mod_lb_hrs, 0); - }); + const ticketsGroupedByDate = _.groupBy(data.timetickets, "date"); - jobData.tthrs = data.jobs - .reduce((acc, val) => acc + val.tthrs, 0) - .toFixed(1); + const listOfDays = Utils.ListOfDaysInCurrentMonth(); - jobData.count = data.jobs.length.toFixed(0); + const combinedData = [], + labData = [], + larData = []; + var acc_comb = 0; + var acc_lab = 0; + var acc_lar = 0; - return { - fixed: ret, - combinedData: combinedData, - labData: labData, - larData: larData, - jobData: jobData, - }; - }, [fixedPeriods, data, bodyshop]); + listOfDays.forEach((day) => { + const r = { + date: dayjs(day).format("MM/DD"), + actualhrs: 0, + productivehrs: 0, + }; - if (error) return ; - if (loading) return ; - return ( - - - - - - - - - - - - - - - - - - ); + const combined = { + accTargetHrs: _.round( + Utils.AsOfDateTargetHours( + bodyshop.scoreboard_target.dailyBodyTarget + + bodyshop.scoreboard_target.dailyPaintTarget, + day + ) + + (bodyshop.scoreboard_target.dailyBodyTarget + + bodyshop.scoreboard_target.dailyPaintTarget), + 1 + ), + accHrs: 0, + }; + const lab = { + accTargetHrs: _.round( + Utils.AsOfDateTargetHours( + bodyshop.scoreboard_target.dailyBodyTarget, + day + ) + bodyshop.scoreboard_target.dailyBodyTarget, + 1 + ), + accHrs: 0, + }; + const lar = { + accTargetHrs: _.round( + Utils.AsOfDateTargetHours( + bodyshop.scoreboard_target.dailyPaintTarget, + day + ) + bodyshop.scoreboard_target.dailyPaintTarget, + 1 + ), + accHrs: 0, + }; + + if (ticketsGroupedByDate[day]) { + ticketsGroupedByDate[day].forEach((ticket) => { + r.actualhrs = r.actualhrs + ticket.actualhrs; + r.productivehrs = r.productivehrs + ticket.productivehrs; + acc_comb = acc_comb + ticket.productivehrs; + + if (ticket.ciecacode !== "LAR") + acc_lab = acc_lab + ticket.productivehrs; + if (ticket.ciecacode === "LAR") + acc_lar = acc_lar + ticket.productivehrs; + }); + } + combined.accHrs = acc_comb; + lab.accHrs = acc_lab; + lar.accHrs = acc_lar; + + combinedData.push({...r, ...combined}); + labData.push({...r, ...lab}); + larData.push({...r, ...lar}); + }); + + const jobData = {}; + + const dataJobs = data.jobs.map((job) => ({ + ...job, + tthrs: job.joblines.reduce((acc, val) => acc + val.mod_lb_hrs, 0) + })); + + jobData.tthrs = dataJobs + .reduce((acc, val) => acc + val.tthrs, 0) + .toFixed(1); + + jobData.count = dataJobs.length.toFixed(0); + + return { + fixed: ret, + combinedData: combinedData, + labData: labData, + larData: larData, + jobData: jobData, + }; + }, [fixedPeriods, data, bodyshop]); + + if (error) return ; + if (loading) return ; + return ( + + + + + + + + + + + + + + + + + + ); } function roundObject(inputObj) { - for (var key of Object.keys(inputObj)) { - if (typeof inputObj[key] === "number") { - inputObj[key] = inputObj[key].toFixed(1); - } else if (Array.isArray(inputObj[key])) { - inputObj[key].forEach((item) => roundObject(item)); - } else if (typeof inputObj[key] === "object") { - roundObject(inputObj[key]); + for (var key of Object.keys(inputObj)) { + if (typeof inputObj[key] === "number") { + inputObj[key] = inputObj[key].toFixed(1); + } else if (Array.isArray(inputObj[key])) { + inputObj[key].forEach((item) => roundObject(item)); + } else if (typeof inputObj[key] === "object") { + roundObject(inputObj[key]); + } } - } }