diff --git a/client/src/components/production-list-table/production-list-table.resizeable.component.jsx b/client/src/components/production-list-table/production-list-table.resizeable.component.jsx index 07b47c87a..618e9e8cd 100644 --- a/client/src/components/production-list-table/production-list-table.resizeable.component.jsx +++ b/client/src/components/production-list-table/production-list-table.resizeable.component.jsx @@ -14,6 +14,14 @@ export default function ResizableComponent(props) { height={0} onResize={onResize} draggableOpts={{ enableUserSelectHack: false }} + handle={ + { + e.stopPropagation(); + }} + /> + } > diff --git a/client/src/components/scoreboard-day-stats/scoreboard-day-stats.component.jsx b/client/src/components/scoreboard-day-stats/scoreboard-day-stats.component.jsx index 497eab209..cfd6d945d 100644 --- a/client/src/components/scoreboard-day-stats/scoreboard-day-stats.component.jsx +++ b/client/src/components/scoreboard-day-stats/scoreboard-day-stats.component.jsx @@ -1,10 +1,9 @@ -import { Card, Statistic } from "antd"; +import { Card, Divider, Statistic } from "antd"; import moment from "moment"; import React from "react"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import { useTranslation } from "react-i18next"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, }); @@ -14,7 +13,6 @@ const mapDispatchToProps = (dispatch) => ({ export function ScoreboardDayStats({ bodyshop, date, entries }) { const { dailyPaintTarget, dailyBodyTarget } = bodyshop.scoreboard_target; - const { t } = useTranslation(); //let totalHrs = 0; const paintHrs = entries.reduce((acc, value) => { @@ -43,10 +41,9 @@ export function ScoreboardDayStats({ bodyshop, date, entries }) { label="P" value={paintHrs.toFixed(1)} /> - + + + ); } diff --git a/client/src/components/scoreboard-targets-table/scoreboard-targets-table.component.jsx b/client/src/components/scoreboard-targets-table/scoreboard-targets-table.component.jsx index 558b217b6..112d441f6 100644 --- a/client/src/components/scoreboard-targets-table/scoreboard-targets-table.component.jsx +++ b/client/src/components/scoreboard-targets-table/scoreboard-targets-table.component.jsx @@ -1,5 +1,5 @@ import { CalendarOutlined } from "@ant-design/icons"; -import { Card, Col, Row, Statistic } from "antd"; +import { Card, Col, Divider, Row, Statistic } from "antd"; import _ from "lodash"; import moment from "moment"; import React, { useMemo } from "react"; @@ -177,6 +177,9 @@ export function ScoreboardTargetsTable({ bodyshop, scoreBoardlist }) { + + + @@ -186,7 +189,6 @@ export function ScoreboardTargetsTable({ bodyshop, scoreBoardlist }) { { @@ -94,6 +95,7 @@ export default function ScoreboardTimeTickets() { totalLastMonth: 0, totalOverPeriod: 0, actualTotalOverPeriod: 0, + totalEffieciencyOverPeriod: 0, }; } @@ -221,6 +223,19 @@ export default function ScoreboardTimeTickets() { ret2.push(r); }); + + // Add total efficiency of employees + ret.totalEffieciencyOverPeriod = Object.keys(ret.employees) + .map((key) => { + return { employee_number: key, ...ret.employees[key] }; + }) + .map((e) => + ((e.totalOverPeriod / (e.actualTotalOverPeriod || 0.1)) * 100).toFixed( + 1 + ) + ) + .reduce((acc, prev) => acc + Number(prev), 0); + roundObject(ret); roundObject(totals); roundObject(ret2); diff --git a/client/src/components/scoreboard-timetickets/scoreboard-timetickets.stats.component.jsx b/client/src/components/scoreboard-timetickets/scoreboard-timetickets.stats.component.jsx index 0b1b9b6bf..e31cec3af 100644 --- a/client/src/components/scoreboard-timetickets/scoreboard-timetickets.stats.component.jsx +++ b/client/src/components/scoreboard-timetickets/scoreboard-timetickets.stats.component.jsx @@ -62,7 +62,7 @@ export function ScoreboardTicketsStats({ data, bodyshop }) { key: "efficiencyoverperiod", render: (text, record) => `${( - (record.totalOverPeriod / (record.actualTotalOverPeriod || .1)) * + (record.totalOverPeriod / (record.actualTotalOverPeriod || 0.1)) * 100 ).toFixed(1)} %`, }, @@ -113,6 +113,12 @@ export function ScoreboardTicketsStats({ data, bodyshop }) { value={data.totalOverPeriod} /> + + + {t("scoreboard.labels.calendarperiod")} @@ -121,7 +127,7 @@ export function ScoreboardTicketsStats({ data, bodyshop }) { - total[fieldTypeToCheck] === - getFieldValue("cost_center") - )?.difference; + const costCenterDiff = + Math.round( + totals.find( + (total) => + total[fieldTypeToCheck] === + getFieldValue("cost_center") + )?.difference * 10 + ) / 10; if (value > costCenterDiff) return Promise.reject( diff --git a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx index c0cf7b024..a72322851 100644 --- a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx +++ b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx @@ -206,10 +206,14 @@ export function TimeTicketModalComponent({ ? "mod_lbr_ty" : "cost_center"; - const costCenterDiff = totals.find( - (total) => - total[fieldTypeToCheck] === getFieldValue("cost_center") - )?.difference; + const costCenterDiff = + Math.round( + totals.find( + (total) => + total[fieldTypeToCheck] === + getFieldValue("cost_center") + )?.difference * 10 + ) / 10; if (value > costCenterDiff) return Promise.reject(