diff --git a/server/graphql-client/queries.js b/server/graphql-client/queries.js index ef9e2e42a..80c21cf4e 100644 --- a/server/graphql-client/queries.js +++ b/server/graphql-client/queries.js @@ -1985,12 +1985,20 @@ exports.UPDATE_OLD_TRANSITION = `mutation UPDATE_OLD_TRANSITION($jobid: uuid!, $ } }`; -exports.INSERT_NEW_TRANSITION = `mutation INSERT_NEW_TRANSITION($newTransition: transitions_insert_input!, $oldTransitionId: uuid, $duration: numeric) { +exports.INSERT_NEW_TRANSITION = ( + includeOldTransition +) => `mutation INSERT_NEW_TRANSITION($newTransition: transitions_insert_input!, ${ + includeOldTransition ? `$oldTransitionId: uuid!, $duration: numeric` : "" +}) { insert_transitions_one(object: $newTransition) { id } - update_transitions(where: {id: {_eq: $oldTransitionId}}, _set: {duration: $duration}) { + ${ + includeOldTransition + ? `update_transitions(where: {id: {_eq: $oldTransitionId}}, _set: {duration: $duration}) { affected_rows + }` + : "" } }`; diff --git a/server/job/job-status-transition.js b/server/job/job-status-transition.js index 960041746..d97249c06 100644 --- a/server/job/job-status-transition.js +++ b/server/job/job-status-transition.js @@ -11,82 +11,91 @@ const path = require("path"); const client = require("../graphql-client/graphql-client").client; require("dotenv").config({ - path: path.resolve( - process.cwd(), - `.env.${process.env.NODE_ENV || "development"}` - ), + path: path.resolve( + process.cwd(), + `.env.${process.env.NODE_ENV || "development"}` + ), }); async function StatusTransition(req, res) { - const { - id: jobid, - status: value, - shopid: bodyshopid, - } = req.body.event.data.new; + const { + id: jobid, + status: value, + shopid: bodyshopid, + } = req.body.event.data.new; - // Create record OPEN on new item, enter state - // If change to SCHEDULE, update the last record and create a new record (update status and end time on old record, create a new record saying we came from previous status going to previous status - // (Timeline) - // Final status is exported, there is no end date as there is no further transition (has no end date) - try { - const {update_transitions} = await client.request( - queries.UPDATE_OLD_TRANSITION, - { - jobid: jobid, - existingTransition: { - end: new Date(), - next_value: value, + // Create record OPEN on new item, enter state + // If change to SCHEDULE, update the last record and create a new record (update status and end time on old record, create a new record saying we came from previous status going to previous status + // (Timeline) + // Final status is exported, there is no end date as there is no further transition (has no end date) + try { + const { update_transitions } = await client.request( + queries.UPDATE_OLD_TRANSITION, + { + jobid: jobid, + existingTransition: { + end: new Date(), + next_value: value, - //duration - }, - } - ); + //duration + }, + } + ); - let duration = - update_transitions.affected_rows === 0 - ? 0 - : new Date(update_transitions.returning[0].end) - - new Date(update_transitions.returning[0].start); + let duration = + update_transitions.affected_rows === 0 + ? 0 + : new Date(update_transitions.returning[0].end) - + new Date(update_transitions.returning[0].start); - const resp2 = await client.request(queries.INSERT_NEW_TRANSITION, { - oldTransitionId: + const resp2 = await client.request( + queries.INSERT_NEW_TRANSITION(update_transitions.affected_rows > 0), + { + ...(update_transitions.affected_rows > 0 + ? { + oldTransitionId: update_transitions.affected_rows === 0 - ? null - : update_transitions.returning[0].id, - duration, - newTransition: { - bodyshopid: bodyshopid, - jobid: jobid, - start: - update_transitions.affected_rows === 0 - ? new Date() - : update_transitions.returning[0].end, - prev_value: - update_transitions.affected_rows === 0 - ? null - : update_transitions.returning[0].value, - value: value, - type: "status", - }, - }); + ? null + : update_transitions.returning[0].id, + duration, + } + : {}), + newTransition: { + bodyshopid: bodyshopid, + jobid: jobid, + start: + update_transitions.affected_rows === 0 + ? new Date() + : update_transitions.returning[0].end, + prev_value: + update_transitions.affected_rows === 0 + ? null + : update_transitions.returning[0].value, + value: value, + type: "status", + }, + } + ); - //Check to see if there is an existing status transition record. - //Query using Job ID, start is not null, end is null. + logger.log("job-transition-update-result", "DEBUG", null, jobid, resp2); - //If there is no existing record, this is the start of the transition life cycle. - // Create the initial transition record. + //Check to see if there is an existing status transition record. + //Query using Job ID, start is not null, end is null. - //If there is a current status transition record, update it with the end date, duration, and next value. + //If there is no existing record, this is the start of the transition life cycle. + // Create the initial transition record. - res.sendStatus(200); //.json(ret); - } catch (error) { - logger.log("job-status-transition-error", "ERROR", req.user?.email, jobid, { - message: error.message, - stack: error.stack, - }); + //If there is a current status transition record, update it with the end date, duration, and next value. - res.status(400).send(JSON.stringify(error)); - } + res.sendStatus(200); //.json(ret); + } catch (error) { + logger.log("job-status-transition-error", "ERROR", req.user?.email, jobid, { + message: error.message, + stack: error.stack, + }); + + res.status(400).send(JSON.stringify(error)); + } } exports.statustransition = StatusTransition;