From 91c5560fe8aa2bb28c5cae9620b15e15643111de Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 7 Feb 2022 17:43:34 -0800 Subject: [PATCH] IO-1708 Add shop timezone & update server side calculations. --- bodyshop_translations.babel | 21 ++++++ client/package.json | 1 + .../monthly-employee-efficiency.component.jsx | 1 + .../form-date-picker.component.jsx | 19 +++++- .../schedule-calendar.container.jsx | 1 + .../shop-info/shop-info.general.component.jsx | 21 ++++++ client/src/graphql/bodyshop.queries.js | 2 + client/src/redux/user/user.sagas.js | 9 +++ client/src/translations/en_us/common.json | 1 + client/src/translations/es/common.json | 1 + client/src/translations/fr/common.json | 1 + client/yarn.lock | 9 ++- hasura/metadata/tables.yaml | 2 + .../down.sql | 4 ++ .../up.sql | 2 + package.json | 1 + server/accounting/pbs/pbs-job-export.js | 27 ++++++-- server/accounting/qbo/qbo-payables.js | 6 +- server/accounting/qbo/qbo-payments.js | 24 +++++-- server/accounting/qbo/qbo-receivables.js | 6 +- server/accounting/qbxml/qbxml-payables.js | 11 ++- server/accounting/qbxml/qbxml-payments.js | 14 ++-- server/accounting/qbxml/qbxml-receivables.js | 6 +- server/cdk/cdk-job-export.js | 37 +++++++--- server/data/arms.js | 40 ++++++++--- server/data/autohouse.js | 68 ++++++++++++++----- server/graphql-client/queries.js | 9 ++- server/scheduling/scheduling-job.js | 43 ++++++------ yarn.lock | 9 ++- 29 files changed, 303 insertions(+), 93 deletions(-) create mode 100644 hasura/migrations/1644276091201_alter_table_public_bodyshops_add_column_timezone/down.sql create mode 100644 hasura/migrations/1644276091201_alter_table_public_bodyshops_add_column_timezone/up.sql diff --git a/bodyshop_translations.babel b/bodyshop_translations.babel index c18ffea89..5879459cd 100644 --- a/bodyshop_translations.babel +++ b/bodyshop_translations.babel @@ -7794,6 +7794,27 @@ + + timezone + false + + + + + + en-US + false + + + es-MX + false + + + fr-CA + false + + + tt_allow_post_to_invoiced false diff --git a/client/package.json b/client/package.json index 1153baef0..8aa8c9d56 100644 --- a/client/package.json +++ b/client/package.json @@ -33,6 +33,7 @@ "logrocket": "^2.1.2", "markerjs2": "^2.17.2", "moment-business-days": "^1.2.0", + "moment-timezone": "^0.5.34", "phone": "^3.1.10", "preval.macro": "^5.0.0", "prop-types": "^15.7.2", diff --git a/client/src/components/dashboard-components/monthly-employee-efficiency/monthly-employee-efficiency.component.jsx b/client/src/components/dashboard-components/monthly-employee-efficiency/monthly-employee-efficiency.component.jsx index e90220698..b29f7ba4c 100644 --- a/client/src/components/dashboard-components/monthly-employee-efficiency/monthly-employee-efficiency.component.jsx +++ b/client/src/components/dashboard-components/monthly-employee-efficiency/monthly-employee-efficiency.component.jsx @@ -38,6 +38,7 @@ export default function DashboardMonthlyEmployeeEfficiency({ if (!!ticketsByDate[val]) { dailyHrs = ticketsByDate[val].reduce( (dayAcc, dayVal) => { + console.log(dayAcc); return { actual: dayAcc.actual + dayVal.actualhrs, productive: dayAcc.actual + dayVal.productivehrs, diff --git a/client/src/components/form-date-picker/form-date-picker.component.jsx b/client/src/components/form-date-picker/form-date-picker.component.jsx index ba97b051e..e8c3eb7d1 100644 --- a/client/src/components/form-date-picker/form-date-picker.component.jsx +++ b/client/src/components/form-date-picker/form-date-picker.component.jsx @@ -1,11 +1,24 @@ import { DatePicker } from "antd"; -import moment from "moment"; +import moment from "moment-timezone"; import React, { useRef } from "react"; //To be used as a form element only. +import { connect } from "react-redux"; +import { createStructuredSelector } from "reselect"; +import { selectBodyshop } from "../../redux/user/user.selectors"; +const mapStateToProps = createStructuredSelector({ + //currentUser: selectCurrentUser + bodyshop: selectBodyshop, +}); +const mapDispatchToProps = (dispatch) => ({ + //setUserLanguage: language => dispatch(setUserLanguage(language)) +}); +export default connect(mapStateToProps, mapDispatchToProps)(FormDatePicker); + const dateFormat = "MM/DD/YYYY"; -export default function FormDatePicker({ +export function FormDatePicker({ + bodyshop, value, onChange, onBlur, @@ -23,7 +36,7 @@ export default function FormDatePicker({ const handleKeyDown = (e) => { if (e.key.toLowerCase() === "t") { if (onChange) { - onChange(new moment()); + onChange(moment()); // if (ref.current && ref.current.blur) ref.current.blur(); } } else if (e.key.toLowerCase() === "enter") { diff --git a/client/src/components/schedule-calendar/schedule-calendar.container.jsx b/client/src/components/schedule-calendar/schedule-calendar.container.jsx index aff134b85..27e05258a 100644 --- a/client/src/components/schedule-calendar/schedule-calendar.container.jsx +++ b/client/src/components/schedule-calendar/schedule-calendar.container.jsx @@ -65,6 +65,7 @@ export function ScheduleCalendarContainer({ calculateScheduleLoad }) { color: "red", start: moment(e.start).startOf("day").toDate(), end: moment(e.end).startOf("day").toDate(), + allDay: true, vacation: true, }; }), diff --git a/client/src/components/shop-info/shop-info.general.component.jsx b/client/src/components/shop-info/shop-info.general.component.jsx index 2a167fdb2..603ef790f 100644 --- a/client/src/components/shop-info/shop-info.general.component.jsx +++ b/client/src/components/shop-info/shop-info.general.component.jsx @@ -19,6 +19,9 @@ import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import FormItemEmail from "../form-items-formatted/email-form-item.component"; +import momentTZ from "moment-timezone"; +const timeZonesList = momentTZ.tz.names(); + export default function ShopInfoGeneral({ form }) { const { t } = useTranslation(); return ( @@ -84,6 +87,7 @@ export default function ShopInfoGeneral({ form }) { + + +