const Dinero = require("dinero.js"); const queries = require("../graphql-client/queries"); //const client = require("../graphql-client/graphql-client").client; const logger = require("../utils/logger"); // Dinero.defaultCurrency = "USD"; // Dinero.globalLocale = "en-CA"; Dinero.globalRoundingMode = "HALF_EVEN"; const client = require("../graphql-client/graphql-client").client; async function StatusTransition(req, res) { 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 //duration } }); 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(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" } }); logger.log("job-transition-update-result", "DEBUG", null, jobid, resp2); //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 no existing record, this is the start of the transition life cycle. // Create the initial transition record. //If there is a current status transition record, update it with the end date, duration, and next value. 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;