IO-1708 Add shop timezone & update server side calculations.
This commit is contained in:
@@ -2,7 +2,7 @@ const GraphQLClient = require("graphql-request").GraphQLClient;
|
||||
const path = require("path");
|
||||
const queries = require("../graphql-client/queries");
|
||||
const Dinero = require("dinero.js");
|
||||
const moment = require("moment");
|
||||
const moment = require("moment-timezone");
|
||||
const logger = require("../utils/logger");
|
||||
const _ = require("lodash");
|
||||
require("dotenv").config({
|
||||
@@ -32,7 +32,7 @@ exports.job = async (req, res) => {
|
||||
});
|
||||
|
||||
const { jobs_by_pk, blockedDays, prodJobs, arrJobs, compJobs } = result;
|
||||
const { ssbuckets, workingdays } = result.jobs_by_pk.bodyshop;
|
||||
const { ssbuckets, workingdays, timezone } = result.jobs_by_pk.bodyshop;
|
||||
const jobHrs = result.jobs_by_pk.jobhrs.aggregate.sum.mod_lb_hrs;
|
||||
|
||||
const JobBucket = ssbuckets.filter(
|
||||
@@ -68,7 +68,9 @@ exports.job = async (req, res) => {
|
||||
);
|
||||
|
||||
filteredArrJobs.forEach((item) => {
|
||||
const itemDate = moment(item.scheduled_in).format("yyyy-MM-DD");
|
||||
const itemDate = moment(item.scheduled_in)
|
||||
.tz(timezone)
|
||||
.format("yyyy-MM-DD");
|
||||
if (!!load[itemDate]) {
|
||||
load[itemDate].hoursIn =
|
||||
(load[itemDate].hoursIn || 0) +
|
||||
@@ -100,18 +102,17 @@ exports.job = async (req, res) => {
|
||||
//Job isn't found in production or coming in.
|
||||
//is it going today or scheduled to go today?
|
||||
if (
|
||||
moment(item.actual_completion || item.scheduled_completion).isSame(
|
||||
moment(),
|
||||
"day"
|
||||
)
|
||||
moment(item.actual_completion || item.scheduled_completion)
|
||||
.tz(timezone)
|
||||
.isSame(moment().tz(timezone), "day")
|
||||
) {
|
||||
console.log("Job is going today anyways, ignore it.", item);
|
||||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
moment(item.actual_completion || item.scheduled_completion).isBefore(
|
||||
moment(),
|
||||
moment(item.actual_completion || item.scheduled_completion).tz(timezone).isBefore(
|
||||
moment().tz(timezone),
|
||||
"day"
|
||||
)
|
||||
) {
|
||||
@@ -127,7 +128,7 @@ exports.job = async (req, res) => {
|
||||
} else {
|
||||
const itemDate = moment(
|
||||
item.actual_completion || item.scheduled_completion
|
||||
).format("yyyy-MM-DD");
|
||||
).tz(timezone).format("yyyy-MM-DD");
|
||||
if (!!load[itemDate]) {
|
||||
load[itemDate].hoursOut =
|
||||
(load[itemDate].hoursOut || 0) +
|
||||
@@ -146,20 +147,20 @@ exports.job = async (req, res) => {
|
||||
});
|
||||
|
||||
//Propagate the expected load to each day.
|
||||
const yesterday = moment().subtract(1, "day");
|
||||
const today = moment().startOf("day");
|
||||
const yesterday = moment().tz(timezone).subtract(1, "day");
|
||||
const today = moment().tz(timezone).startOf("day");
|
||||
|
||||
const end = moment.max([
|
||||
...filteredArrJobs.map((a) => moment(a.scheduled_in)),
|
||||
const end = moment.tz(timezone).max([
|
||||
...filteredArrJobs.map((a) => moment(a.scheduled_in).tz(timezone)),
|
||||
...filteredCompJobs
|
||||
.map((p) => moment(p.actual_completion || p.scheduled_completion))
|
||||
.map((p) => moment(p.actual_completion || p.scheduled_completion).tz(timezone))
|
||||
.filter((p) => p.isValid() && p.isAfter(yesterday)),
|
||||
moment().add(5, "days"),
|
||||
moment().tz(timezone).add(5, "days"),
|
||||
]);
|
||||
const range = Math.round(moment.duration(end.diff(today)).asDays());
|
||||
for (var day = 0; day < range; day++) {
|
||||
const current = moment(today).add(day, "days").format("yyyy-MM-DD");
|
||||
const prev = moment(today)
|
||||
const current = moment(today).tz(timezone).add(day, "days").format("yyyy-MM-DD");
|
||||
const prev = moment(today).tz(timezone)
|
||||
.add(day - 1, "days")
|
||||
.format("yyyy-MM-DD");
|
||||
if (!!!load[current]) {
|
||||
@@ -187,7 +188,7 @@ exports.job = async (req, res) => {
|
||||
|
||||
blockedDays.forEach((b) => {
|
||||
//Find it in the load, set it as blocked.
|
||||
const startIsoFormat = moment(b.start).format("YYYY-MM-DD");
|
||||
const startIsoFormat = moment(b.start).tz(timezone).format("YYYY-MM-DD");
|
||||
if (load[startIsoFormat]) load[startIsoFormat].blocked = true;
|
||||
else {
|
||||
load[startIsoFormat] = { blocked: true };
|
||||
@@ -198,12 +199,12 @@ exports.job = async (req, res) => {
|
||||
const possibleDates = [];
|
||||
delete load.productionTotal;
|
||||
const loadKeys = Object.keys(load).sort((a, b) =>
|
||||
moment(a).isAfter(moment(b)) ? 1 : -1
|
||||
moment(a).tz(timezone).isAfter(moment(b).tz(timezone)) ? 1 : -1
|
||||
);
|
||||
|
||||
loadKeys.forEach((loadKey) => {
|
||||
const isShopOpen =
|
||||
(workingdays[dayOfWeekMapper(moment(loadKey).day())] || false) &&
|
||||
(workingdays[dayOfWeekMapper(moment(loadKey).tz(timezone).day())] || false) &&
|
||||
!load[loadKey].blocked;
|
||||
|
||||
if (
|
||||
|
||||
Reference in New Issue
Block a user