|
{j.ro_number}
+ {j.status}
|
@@ -142,7 +143,7 @@ export function ScheduleCalendarHeaderComponent({
title={t("appointments.labels.arrivingjobs")}
>
- {(loadData.hoursIn || 0) && loadData.hoursIn.toFixed(2)}
+ {(loadData.allHoursIn || 0) && loadData.allHoursIn.toFixed(2)}
- {(loadData.hoursOut || 0) && loadData.hoursOut.toFixed(2)}
+ {(loadData.allHoursOut || 0) && loadData.allHoursOut.toFixed(2)}
diff --git a/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx b/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx
index 95f825c6e..837f5cbbe 100644
--- a/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx
+++ b/client/src/components/schedule-calendar-wrapper/scheduler-calendar-wrapper.component.jsx
@@ -11,7 +11,7 @@ import HeaderComponent from "./schedule-calendar-header.component";
import "./schedule-calendar.styles.scss";
import JobDetailCards from "../job-detail-cards/job-detail-cards.component";
import { selectProblemJobs } from "../../redux/application/application.selectors";
-import { Alert } from "antd";
+import { Alert, Collapse } from "antd";
import { useTranslation } from "react-i18next";
const mapStateToProps = createStructuredSelector({
@@ -53,7 +53,28 @@ export function ScheduleCalendarWrapperComponent({
return (
<>
- {problemJobs &&
+ {problemJobs && problemJobs.length > 2 ? (
+
+
+ {t("appointments.labels.severalerrorsfound")}
+
+ }
+ >
+ {problemJobs.map((problem) => (
+
+ ))}
+
+
+ ) : (
problemJobs.map((problem) => (
- ))}
+ ))
+ )}
({
//setUserLanguage: language => dispatch(setUserLanguage(language))
+ calculateScheduleLoad: (endDate) => dispatch(calculateScheduleLoad(endDate)),
});
export function ScheduleJobModalComponent({
@@ -36,6 +38,7 @@ export function ScheduleJobModalComponent({
existingAppointments,
lbrHrsData,
jobId,
+ calculateScheduleLoad,
}) {
const { t } = useTranslation();
const [loading, setLoading] = useState(false);
@@ -57,6 +60,7 @@ export function ScheduleJobModalComponent({
const handleDateBlur = () => {
const values = form.getFieldsValue();
+
if (lbrHrsData) {
const totalHours =
lbrHrsData.jobs_by_pk.labhrs.aggregate.sum.mod_lb_hrs +
@@ -130,7 +134,12 @@ export function ScheduleJobModalComponent({
className="imex-flex-row__margin"
key={idx}
onClick={() => {
- form.setFieldsValue({ start: new moment(d).add(8, "hours") });
+ const ssDate = moment(d);
+ if (ssDate.isBefore(moment())) {
+ form.setFieldsValue({ start: moment() });
+ } else {
+ form.setFieldsValue({ start: moment(d).add(8, "hours") });
+ }
handleDateBlur();
}}
>
@@ -191,6 +200,9 @@ export function ScheduleJobModalComponent({
prev.start !== cur.start}>
{() => {
const values = form.getFieldsValue();
+ if (values.start) {
+ calculateScheduleLoad(values.start);
+ }
return (
diff --git a/client/src/components/schedule-job-modal/schedule-job-modal.scss b/client/src/components/schedule-job-modal/schedule-job-modal.scss
index 40c831662..6c2c42694 100644
--- a/client/src/components/schedule-job-modal/schedule-job-modal.scss
+++ b/client/src/components/schedule-job-modal/schedule-job-modal.scss
@@ -1,5 +1,6 @@
.schedule-job-modal {
height: 70vh;
+ overflow-y: auto;
.rbc-calendar {
.rbc-toolbar {
.rbc-btn-group {
diff --git a/client/src/graphql/appointments.queries.js b/client/src/graphql/appointments.queries.js
index 6a95864d8..01399b81a 100644
--- a/client/src/graphql/appointments.queries.js
+++ b/client/src/graphql/appointments.queries.js
@@ -294,6 +294,12 @@ export const QUERY_SCHEDULE_LOAD_DATA = gql`
where: { inproduction: { _eq: true }, suspended: { _eq: false } }
) {
id
+ actual_in
+ scheduled_in
+ actual_completion
+ scheduled_completion
+ inproduction
+ ro_number
labhrs: joblines_aggregate(
where: { mod_lbr_ty: { _neq: "LAR" }, removed: { _eq: false } }
) {
@@ -327,12 +333,15 @@ export const QUERY_SCHEDULE_LOAD_DATA = gql`
}
) {
id
+ status
ro_number
scheduled_completion
actual_completion
+ scheduled_in
ownr_fn
ownr_ln
ownr_co_nm
+ inproduction
labhrs: joblines_aggregate(
where: { mod_lbr_ty: { _neq: "LAR" }, removed: { _eq: false } }
) {
@@ -360,11 +369,16 @@ export const QUERY_SCHEDULE_LOAD_DATA = gql`
) {
id
scheduled_in
+ actual_in
+ scheduled_completion
ro_number
ownr_fn
ownr_ln
ownr_co_nm
alt_transport
+ actual_completion
+ inproduction
+ status
labhrs: joblines_aggregate(
where: { mod_lbr_ty: { _neq: "LAR" }, removed: { _eq: false } }
) {
diff --git a/client/src/redux/application/application.sagas.js b/client/src/redux/application/application.sagas.js
index a768b3b93..02e86c6cc 100644
--- a/client/src/redux/application/application.sagas.js
+++ b/client/src/redux/application/application.sagas.js
@@ -37,7 +37,7 @@ export function* calculateScheduleLoad({ payload: end }) {
productionTotal: {},
productionHours: 0,
};
-
+ let problemJobs = [];
//Set the current load.
buckets.forEach((bucket) => {
load.productionTotal[bucket.id] = { count: 0, label: bucket.label };
@@ -45,6 +45,32 @@ export function* calculateScheduleLoad({ payload: end }) {
prodJobs.forEach((item) => {
//Add all of the jobs currently in production to the buckets so that we have a starting point.
+ if (
+ !item.actual_completion &&
+ moment(item.scheduled_completion).isBefore(moment().startOf("day"))
+ ) {
+ problemJobs.push({
+ ...item,
+ code: "Job was scheduled to go, but it has not been completed. Update the scheduled completion date to correct projections",
+ });
+ }
+
+ if (
+ item.actual_completion &&
+ moment(item.actual_completion).isBefore(moment().startOf("day"))
+ ) {
+ problemJobs.push({
+ ...item,
+ code: "Job is already marked as completed, but it is still in production. This job should be removed from production",
+ });
+ }
+ if (!(item.actual_completion || item.scheduled_completion)) {
+ problemJobs.push({
+ ...item,
+ code: "Job does not have a scheduled or actual completion date. Update the scheduled or actual completion dates to correct projections",
+ });
+ }
+
const bucketId = CheckJobBucket(buckets, item);
load.productionHours =
load.productionHours +
@@ -59,77 +85,120 @@ export function* calculateScheduleLoad({ payload: end }) {
});
arrJobs.forEach((item) => {
- if (!item.scheduled_in)
+ if (!item.scheduled_in) {
console.log("JOB HAS NO SCHEDULED IN DATE.", item);
- const itemDate = moment(item.scheduled_in).format("yyyy-MM-DD");
+ problemJobs.push({
+ ...item,
+ code: "Job has no scheduled in date",
+ });
+ }
+ if(!item.actual_completion && item.actual_in && !item.inproduction){
+ problemJobs.push({
+ ...item,
+ code: "Job has an actual in date, but no actual completion date and is not marked as in production",
+ });
+ }
+ if (item.actual_in && moment(item.actual_in).isAfter(moment())) {
+ problemJobs.push({
+ ...item,
+ code: "Job has an actual in date set in the future",
+ });
+ }
+ if (
+ item.actual_completion &&
+ moment(item.actual_completion).isAfter(moment())
+ ) {
+ problemJobs.push({
+ ...item,
+ code: "Job has an actual completion date set in the future",
+ });
+ }
+ if (item.actual_completion && item.inproduction) {
+ problemJobs.push({
+ ...item,
+ code: "Job has an actual completion date but it is still marked in production",
+ });
+ }
+
+ const itemDate = moment(item.actual_in || item.scheduled_in).format(
+ "yyyy-MM-DD"
+ );
+
+ const AddJobForSchedulingCalc = !item.inproduction;
+
if (!!load[itemDate]) {
- load[itemDate].hoursIn =
- (load[itemDate].hoursIn || 0) +
+ load[itemDate].allHoursIn =
+ (load[itemDate].allHoursIn || 0) +
item.labhrs.aggregate.sum.mod_lb_hrs +
item.larhrs.aggregate.sum.mod_lb_hrs;
- load[itemDate].jobsIn.push(item);
+
+ //If the job hasn't already arrived, add it to the jobs in list.
+ // Make sure it also hasn't already been completed, or isn't an in and out job.
+ //This prevents the duplicate counting.
+ load[itemDate].allJobsIn.push(item);
+ if (AddJobForSchedulingCalc) {
+ load[itemDate].jobsIn.push(item);
+ load[itemDate].hoursIn =
+ (load[itemDate].hoursIn || 0) +
+ item.labhrs.aggregate.sum.mod_lb_hrs +
+ item.larhrs.aggregate.sum.mod_lb_hrs;
+ }
} else {
load[itemDate] = {
- jobsIn: [item],
+ allJobsIn: [item],
+ jobsIn: AddJobForSchedulingCalc ? [item] : [], //Same as above, only add it if it isn't already in production.
jobsOut: [],
- hoursIn:
+ allJobsOut: [],
+ allHoursIn:
item.labhrs.aggregate.sum.mod_lb_hrs +
item.larhrs.aggregate.sum.mod_lb_hrs,
+ hoursIn: AddJobForSchedulingCalc
+ ? item.labhrs.aggregate.sum.mod_lb_hrs +
+ item.larhrs.aggregate.sum.mod_lb_hrs
+ : 0,
};
}
});
- let problemJobs = [];
compJobs.forEach((item) => {
if (!(item.actual_completion || item.scheduled_completion))
- console.log("JOB HAS NO COMPLETION DATE.", item);
+ console.warn("JOB HAS NO COMPLETION DATE.", item);
const inProdJobs = prodJobs.find((p) => p.id === item.id);
const inArrJobs = arrJobs.find((p) => p.id === item.id);
- if (!(inProdJobs || inArrJobs)) {
- //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"
- )
- ) {
- console.log("Job is going today anyways, ignore it.", item);
- return;
- }
-
- if (
- moment(item.actual_completion || item.scheduled_completion).isBefore(
- moment(),
- "day"
- )
- ) {
- console.log("Job should have already gone. Ignoring it.", item);
- return;
- }
-
- problemJobs.push({
- ...item,
- code: "Job is scheduled for completion, but it is not marked in production nor is it an arriving job in this period. Check the scheduled in and completion dates",
- });
- return;
- }
+ const AddJobForSchedulingCalc = inProdJobs || inArrJobs;
const itemDate = moment(
item.actual_completion || item.scheduled_completion
).format("yyyy-MM-DD");
+ //Skip it, it's already completed.
+
if (!!load[itemDate]) {
- load[itemDate].hoursOut =
- (load[itemDate].hoursOut || 0) +
+ load[itemDate].allHoursOut =
+ (load[itemDate].allHoursOut || 0) +
item.labhrs.aggregate.sum.mod_lb_hrs +
item.larhrs.aggregate.sum.mod_lb_hrs;
- load[itemDate].jobsOut.push(item);
+ //Add only the jobs that are still in production to get rid of.
+ //If it's not in production, we'd subtract unnecessarily.
+ load[itemDate].allJobsOut.push(item);
+
+ if (AddJobForSchedulingCalc) {
+ load[itemDate].jobsOut.push(item);
+ load[itemDate].hoursOut =
+ (load[itemDate].hoursOut || 0) +
+ item.labhrs.aggregate.sum.mod_lb_hrs +
+ item.larhrs.aggregate.sum.mod_lb_hrs;
+ }
} else {
load[itemDate] = {
- jobsOut: [item],
- hoursOut:
+ allJobsOut: [item],
+ jobsOut: AddJobForSchedulingCalc ? [item] : [], //Same as above.
+ hoursOut: AddJobForSchedulingCalc
+ ? item.labhrs.aggregate.sum.mod_lb_hrs +
+ item.larhrs.aggregate.sum.mod_lb_hrs
+ : 0,
+ allHoursOut:
item.labhrs.aggregate.sum.mod_lb_hrs +
item.larhrs.aggregate.sum.mod_lb_hrs,
};
@@ -137,6 +206,7 @@ export function* calculateScheduleLoad({ payload: end }) {
});
//Propagate the expected load to each day.
+
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");
@@ -146,6 +216,7 @@ export function* calculateScheduleLoad({ payload: end }) {
if (!!!load[current]) {
load[current] = {};
}
+
if (day === 0) {
//Starting on day 1. The load is current.
load[current].expectedLoad = CalculateLoad(
diff --git a/client/src/translations/en_us/common.json b/client/src/translations/en_us/common.json
index d8e7bc391..332f350fd 100644
--- a/client/src/translations/en_us/common.json
+++ b/client/src/translations/en_us/common.json
@@ -49,7 +49,7 @@
"blocked": "Blocked",
"cancelledappointment": "Canceled appointment for: ",
"completingjobs": "Completing Jobs",
- "dataconsistency": "{{ro_number}} has a data consistency issue. It has been excluded for scheduling purposes. CODE: {{code}}.",
+ "dataconsistency": "{{ro_number}} has a data consistency issue. It may have been excluded for scheduling purposes. CODE: {{code}}.",
"expectedjobs": "Expected Jobs in Production: ",
"expectedprodhrs": "Expected Production Hours:",
"history": "History",
@@ -61,6 +61,7 @@
"priorappointments": "Previous Appointments",
"reminder": "This is {{shopname}} reminding you about an appointment on {{date}} at {{time}}. Please let us know if you are not able to make the appointment. We look forward to seeing you soon. ",
"scheduledfor": "Scheduled appointment for: ",
+ "severalerrorsfound": "Several jobs have issues which may prevent accurate smart scheduling. Click to expand.",
"smartscheduling": "Smart Scheduling",
"suggesteddates": "Suggested Dates"
},
@@ -2425,6 +2426,9 @@
"export_payables": "Export Log - Payables",
"export_payments": "Export Log - Payments",
"export_receivables": "Export Log - Receivables",
+ "gsr_by_atp": "",
+ "gsr_by_ats": "Gross Sales by ATS",
+ "gsr_by_category": "Gross Sales by Category",
"gsr_by_csr": "Gross Sales by CSR",
"gsr_by_delivery_date": "Gross Sales by Delivery Date",
"gsr_by_estimator": "Gross Sales by Estimator",
diff --git a/client/src/translations/es/common.json b/client/src/translations/es/common.json
index 359d844a2..2b7c7391b 100644
--- a/client/src/translations/es/common.json
+++ b/client/src/translations/es/common.json
@@ -61,6 +61,7 @@
"priorappointments": "Nombramientos previos",
"reminder": "",
"scheduledfor": "Cita programada para:",
+ "severalerrorsfound": "",
"smartscheduling": "",
"suggesteddates": ""
},
@@ -2425,6 +2426,9 @@
"export_payables": "",
"export_payments": "",
"export_receivables": "",
+ "gsr_by_atp": "",
+ "gsr_by_ats": "",
+ "gsr_by_category": "",
"gsr_by_csr": "",
"gsr_by_delivery_date": "",
"gsr_by_estimator": "",
diff --git a/client/src/translations/fr/common.json b/client/src/translations/fr/common.json
index 78f2d8777..381fe267b 100644
--- a/client/src/translations/fr/common.json
+++ b/client/src/translations/fr/common.json
@@ -61,6 +61,7 @@
"priorappointments": "Rendez-vous précédents",
"reminder": "",
"scheduledfor": "Rendez-vous prévu pour:",
+ "severalerrorsfound": "",
"smartscheduling": "",
"suggesteddates": ""
},
@@ -2425,6 +2426,9 @@
"export_payables": "",
"export_payments": "",
"export_receivables": "",
+ "gsr_by_atp": "",
+ "gsr_by_ats": "",
+ "gsr_by_category": "",
"gsr_by_csr": "",
"gsr_by_delivery_date": "",
"gsr_by_estimator": "",
diff --git a/client/src/utils/TemplateConstants.js b/client/src/utils/TemplateConstants.js
index a53040f0f..9ae638b2f 100644
--- a/client/src/utils/TemplateConstants.js
+++ b/client/src/utils/TemplateConstants.js
@@ -1343,6 +1343,32 @@ export const TemplateList = (type, context) => {
},
group: "sales",
},
+ gsr_by_category: {
+ title: i18n.t("reportcenter.templates.gsr_by_category"),
+ description: "",
+ subject: i18n.t("reportcenter.templates.gsr_by_category"),
+ key: "gsr_by_category",
+ //idtype: "vendor",
+ disabled: false,
+ rangeFilter: {
+ object: i18n.t("reportcenter.labels.objects.jobs"),
+ field: i18n.t("jobs.fields.date_invoiced"),
+ },
+ group: "sales",
+ },
+ gsr_by_ats: {
+ title: i18n.t("reportcenter.templates.gsr_by_ats"),
+ description: "",
+ subject: i18n.t("reportcenter.templates.gsr_by_ats"),
+ key: "gsr_by_ats",
+ //idtype: "vendor",
+ disabled: false,
+ rangeFilter: {
+ object: i18n.t("reportcenter.labels.objects.jobs"),
+ field: i18n.t("jobs.fields.date_invoiced"),
+ },
+ group: "sales",
+ },
gsr_labor_only: {
title: i18n.t("reportcenter.templates.gsr_labor_only"),
description: "",
diff --git a/server/email/sendemail.js b/server/email/sendemail.js
index 68c57a38d..28c0adf5d 100644
--- a/server/email/sendemail.js
+++ b/server/email/sendemail.js
@@ -23,6 +23,7 @@ let transporter = nodemailer.createTransport({
});
exports.sendServerEmail = async function ({ subject, text }) {
+ if (process.env.NODE_ENV === undefined) return;
try {
transporter.sendMail(
{
diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js
index 14bd8cd17..88ff022ac 100644
--- a/server/graphql-client/queries.js
+++ b/server/graphql-client/queries.js
@@ -536,7 +536,16 @@ exports.QUERY_UPCOMING_APPOINTMENTS = `query QUERY_UPCOMING_APPOINTMENTS($now: t
arrJobs: jobs(where: {scheduled_in: {_gte: $now}, suspended: {_eq: false}}) {
id
scheduled_in
+ actual_in
+ scheduled_completion
ro_number
+ ownr_fn
+ ownr_ln
+ ownr_co_nm
+ alt_transport
+ actual_completion
+ inproduction
+ status
labhrs: joblines_aggregate(where: {mod_lbr_ty: {_neq: "LAR"}, removed: {_eq: false}}) {
aggregate {
sum {
@@ -554,9 +563,15 @@ exports.QUERY_UPCOMING_APPOINTMENTS = `query QUERY_UPCOMING_APPOINTMENTS($now: t
}
compJobs: jobs(where: {_and: [{suspended: {_eq: false}}, {_or: [{scheduled_completion: {_gte: $now}}, {actual_completion: {_gte: $now}}]}]}) {
id
+ status
ro_number
scheduled_completion
actual_completion
+ scheduled_in
+ ownr_fn
+ ownr_ln
+ ownr_co_nm
+ inproduction
labhrs: joblines_aggregate(where: {mod_lbr_ty: {_neq: "LAR"}, removed: {_eq: false}}) {
aggregate {
sum {
@@ -574,15 +589,20 @@ exports.QUERY_UPCOMING_APPOINTMENTS = `query QUERY_UPCOMING_APPOINTMENTS($now: t
}
prodJobs: jobs(where: {inproduction: {_eq: true}, suspended: {_eq: false}}) {
id
+ actual_in
+ scheduled_in
+ actual_completion
scheduled_completion
- labhrs: joblines_aggregate(where: {_and: [{mod_lbr_ty: {_neq: "LAR"}}, {removed: {_eq: false}}]}) {
+ inproduction
+ ro_number
+ labhrs: joblines_aggregate(where: {mod_lbr_ty: {_neq: "LAR"}, removed: {_eq: false}}) {
aggregate {
sum {
mod_lb_hrs
}
}
}
- larhrs: joblines_aggregate(where: {_and: [{mod_lbr_ty: {_eq: "LAR"}}, {removed: {_eq: false}}]}) {
+ larhrs: joblines_aggregate(where: {mod_lbr_ty: {_eq: "LAR"}, removed: {_eq: false}}) {
aggregate {
sum {
mod_lb_hrs
@@ -590,7 +610,8 @@ exports.QUERY_UPCOMING_APPOINTMENTS = `query QUERY_UPCOMING_APPOINTMENTS($now: t
}
}
}
-}`;
+}
+`;
exports.QUERY_EMPLOYEE_PIN = `query QUERY_EMPLOYEE_PIN($shopId: uuid!, $employeeId: String!) {
employees(where: {_and: {shopid: {_eq: $shopId}, employee_number: {_eq: $employeeId}}}) {
diff --git a/server/scheduling/scheduling-job.js b/server/scheduling/scheduling-job.js
index dc26046dd..e906c866e 100644
--- a/server/scheduling/scheduling-job.js
+++ b/server/scheduling/scheduling-job.js
@@ -41,9 +41,9 @@ exports.job = async (req, res) => {
(bucket) =>
bucket.gte <= jobHrs && (!!bucket.lt ? bucket.lt > jobHrs : true)
)[0];
-
const load = {
productionTotal: {},
+ productionHours: 0,
};
//Set the current load.
ssbuckets.forEach((bucket) => {
@@ -70,27 +70,6 @@ exports.job = async (req, res) => {
// );
const filteredArrJobs = [];
- // filteredArrJobs.forEach((item) => {
- // const itemDate = moment(item.scheduled_in)
- // .tz(timezone)
- // .format("yyyy-MM-DD");
- // if (!!load[itemDate]) {
- // load[itemDate].hoursIn =
- // (load[itemDate].hoursIn || 0) +
- // item.labhrs.aggregate.sum.mod_lb_hrs +
- // item.larhrs.aggregate.sum.mod_lb_hrs;
- // load[itemDate].jobsIn.push(item);
- // } else {
- // load[itemDate] = {
- // jobsIn: [item],
- // jobsOut: [],
- // hoursIn:
- // item.labhrs.aggregate.sum.mod_lb_hrs +
- // item.larhrs.aggregate.sum.mod_lb_hrs,
- // };
- // }
- // });
-
arrJobs.forEach((item) => {
let isSameBucket = false;
if (JobBucket.id === CheckJobBucket(ssbuckets, item)) {
@@ -102,21 +81,27 @@ exports.job = async (req, res) => {
item.labhrs.aggregate.sum.mod_lb_hrs +
item.larhrs.aggregate.sum.mod_lb_hrs;
- const itemDate = moment(item.scheduled_in)
+ const AddJobForSchedulingCalc = !item.inproduction;
+
+ const itemDate = moment(item.actual_in || item.scheduled_in)
.tz(timezone)
.format("yyyy-MM-DD");
if (isSameBucket) {
if (!!load[itemDate]) {
- load[itemDate].hoursIn = (load[itemDate].hoursIn || 0) + jobHours;
- load[itemDate].jobsIn.push(item);
+ load[itemDate].hoursIn =
+ (load[itemDate].hoursIn || 0) + AddJobForSchedulingCalc
+ ? jobHours
+ : 0;
+ if (AddJobForSchedulingCalc) load[itemDate].jobsIn.push(item);
} else {
load[itemDate] = {
- jobsIn: [item],
+ jobsIn: AddJobForSchedulingCalc ? [item] : [],
jobsOut: [],
- hoursIn: jobHours,
+ hoursIn: AddJobForSchedulingCalc ? jobHours : 0,
};
}
}
+
if (!load[itemDate]) {
load[itemDate] = {
jobsIn: [],
@@ -139,52 +124,28 @@ exports.job = async (req, res) => {
const inProdJobs = filteredProdJobsList.find((p) => p.id === item.id);
const inArrJobs = filteredArrJobs.find((p) => p.id === item.id);
- if (!(inProdJobs || inArrJobs)) {
- //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)
- .tz(timezone)
- .isSame(moment().tz(timezone), "day")
- ) {
- console.log("Job is going today anyways, ignore it.", item);
- return;
- }
+ const AddJobForSchedulingCalc = inProdJobs || inArrJobs;
- if (
- moment(item.actual_completion || item.scheduled_completion)
- .tz(timezone)
- .isBefore(moment().tz(timezone), "day")
- ) {
- console.log("Job should have already gone. Ignoring it.", item);
- return;
- }
- console.log("PROBLEM JOB", item);
- problemJobs.push({
- ...item,
- code: "Job is scheduled for completion, but it is not marked in production nor is it an arriving job in this period. Check the scheduled in and completion dates",
- });
- return;
+ const itemDate = moment(
+ item.actual_completion || item.scheduled_completion
+ )
+ .tz(timezone)
+ .format("yyyy-MM-DD");
+ if (!!load[itemDate]) {
+ load[itemDate].hoursOut =
+ (load[itemDate].hoursOut || 0) + AddJobForSchedulingCalc
+ ? item.labhrs.aggregate.sum.mod_lb_hrs +
+ item.larhrs.aggregate.sum.mod_lb_hrs
+ : 0;
+ if (AddJobForSchedulingCalc) load[itemDate].jobsOut.push(item);
} else {
- const itemDate = moment(
- item.actual_completion || item.scheduled_completion
- )
- .tz(timezone)
- .format("yyyy-MM-DD");
- if (!!load[itemDate]) {
- load[itemDate].hoursOut =
- (load[itemDate].hoursOut || 0) +
- item.labhrs.aggregate.sum.mod_lb_hrs +
- item.larhrs.aggregate.sum.mod_lb_hrs;
- load[itemDate].jobsOut.push(item);
- } else {
- load[itemDate] = {
- jobsOut: [item],
- hoursOut:
- item.labhrs.aggregate.sum.mod_lb_hrs +
- item.larhrs.aggregate.sum.mod_lb_hrs,
- };
- }
+ load[itemDate] = {
+ jobsOut: AddJobForSchedulingCalc ? [item] : [],
+ hoursOut: AddJobForSchedulingCalc
+ ? item.labhrs.aggregate.sum.mod_lb_hrs +
+ item.larhrs.aggregate.sum.mod_lb_hrs
+ : 0,
+ };
}
});
|