update import to include milestones

deepsource-autofix-76c6eb20
Dan Gowans 2022-09-08 14:54:08 -04:00
parent 8bbe9ab637
commit 3c34838e84
2 changed files with 330 additions and 28 deletions

View File

@ -20,7 +20,9 @@ import { addWorkOrderLot } from "../helpers/lotOccupancyDB/addWorkOrderLot.js";
import { addWorkOrderLotOccupancy } from "../helpers/lotOccupancyDB/addWorkOrderLotOccupancy.js"; import { addWorkOrderLotOccupancy } from "../helpers/lotOccupancyDB/addWorkOrderLotOccupancy.js";
import { getWorkOrder, getWorkOrderByWorkOrderNumber } from "../helpers/lotOccupancyDB/getWorkOrder.js"; import { getWorkOrder, getWorkOrderByWorkOrderNumber } from "../helpers/lotOccupancyDB/getWorkOrder.js";
import { reopenWorkOrder } from "../helpers/lotOccupancyDB/reopenWorkOrder.js"; import { reopenWorkOrder } from "../helpers/lotOccupancyDB/reopenWorkOrder.js";
import { dateIntegerToString } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import { dateIntegerToString, dateToString } from "@cityssm/expressjs-server-js/dateTimeFns.js";
import addWorkOrderMilestone from "../helpers/lotOccupancyDB/addWorkOrderMilestone.js";
import closeWorkOrder from "../helpers/lotOccupancyDB/closeWorkOrder.js";
const user = { const user = {
user: { user: {
userName: "import.unix", userName: "import.unix",
@ -32,6 +34,7 @@ const user = {
}; };
function purgeTables() { function purgeTables() {
const database = sqlite(databasePath); const database = sqlite(databasePath);
database.prepare("delete from WorkOrderMilestones").run();
database.prepare("delete from WorkOrderComments").run(); database.prepare("delete from WorkOrderComments").run();
database.prepare("delete from WorkOrderLots").run(); database.prepare("delete from WorkOrderLots").run();
database.prepare("delete from WorkOrderLotOccupancies").run(); database.prepare("delete from WorkOrderLotOccupancies").run();
@ -45,7 +48,7 @@ function purgeTables() {
database.prepare("delete from LotComments").run(); database.prepare("delete from LotComments").run();
database.prepare("delete from Lots").run(); database.prepare("delete from Lots").run();
database database
.prepare("delete from sqlite_sequence where name in ('Lots', 'LotComments', 'LotOccupancies', 'LotOccupancyComments', 'WorkOrders', 'WorkOrderComments')") .prepare("delete from sqlite_sequence where name in ('Lots', 'LotComments', 'LotOccupancies', 'LotOccupancyComments', 'WorkOrders', 'WorkOrderComments', 'WorkOrderMilestones')")
.run(); .run();
database.close(); database.close();
} }
@ -74,6 +77,9 @@ function formatDateString(year, month, day) {
"-" + "-" +
("00" + day).slice(-2)); ("00" + day).slice(-2));
} }
function formatTimeString(hour, minute) {
return ("00" + hour).slice(-2) + ":" + ("00" + minute).slice(-2);
}
const cemeteryToMapName = { const cemeteryToMapName = {
"00": "Crematorium", "00": "Crematorium",
GC: "New Greenwood - Columbarium", GC: "New Greenwood - Columbarium",
@ -182,6 +188,11 @@ const cremationOccupancyType = cacheFunctions.getOccupancyTypeByOccupancyType("C
const preneedOwnerLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Preneed Owner"); const preneedOwnerLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Preneed Owner");
const deceasedLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Deceased"); const deceasedLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Deceased");
const arrangerLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Arranger"); const arrangerLotOccupantType = cacheFunctions.getLotOccupantTypesByLotOccupantType("Arranger");
const acknowledgedWorkOrderMilestoneType = cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType("Acknowledged");
const deathWorkOrderMilestoneType = cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType("Death");
const funeralWorkOrderMilestoneType = cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType("Funeral");
const cremationWorkOrderMilestoneType = cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType("Cremation");
const intermentWorkOrderMilestoneType = cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType("Interment");
function importFromMasterCSV() { function importFromMasterCSV() {
let masterRow; let masterRow;
const rawData = fs.readFileSync("./temp/CMMASTER.csv").toString(); const rawData = fs.readFileSync("./temp/CMMASTER.csv").toString();
@ -692,6 +703,7 @@ function importFromWorkOrderCSV() {
for (const parseError of cmwkordr.errors) { for (const parseError of cmwkordr.errors) {
console.log(parseError); console.log(parseError);
} }
const currentDateString = dateToString(new Date());
try { try {
for (workOrderRow of cmwkordr.data) { for (workOrderRow of cmwkordr.data) {
let workOrder = getWorkOrderByWorkOrderNumber(workOrderRow.WO_WORK_ORDER); let workOrder = getWorkOrderByWorkOrderNumber(workOrderRow.WO_WORK_ORDER);
@ -861,6 +873,95 @@ function importFromWorkOrderCSV() {
workOrderId: workOrder.workOrderId, workOrderId: workOrder.workOrderId,
lotOccupancyId lotOccupancyId
}, user); }, user);
let hasIncompleteMilestones = !workOrderRow.WO_CONFIRMATION_IN;
let maxMilestoneCompletionDateString = workOrderOpenDateString;
addWorkOrderMilestone({
workOrderId: workOrder.workOrderId,
workOrderMilestoneTypeId: acknowledgedWorkOrderMilestoneType.workOrderMilestoneTypeId,
workOrderMilestoneDateString: workOrderOpenDateString,
workOrderMilestoneDescription: "",
workOrderMilestoneCompletionDateString: workOrderRow.WO_CONFIRMATION_IN
? workOrderOpenDateString
: undefined,
workOrderMilestoneCompletionTimeString: workOrderRow.WO_CONFIRMATION_IN ? "00:00" : undefined
}, user);
if (workOrderRow.WO_DEATH_YR) {
const workOrderMilestoneDateString = formatDateString(workOrderRow.WO_DEATH_YR, workOrderRow.WO_DEATH_MON, workOrderRow.WO_DEATH_DAY);
addWorkOrderMilestone({
workOrderId: workOrder.workOrderId,
workOrderMilestoneTypeId: deathWorkOrderMilestoneType.workOrderMilestoneTypeId,
workOrderMilestoneDateString,
workOrderMilestoneDescription: "Death Place: " + workOrderRow.WO_DEATH_PLACE,
workOrderMilestoneCompletionDateString: workOrderMilestoneDateString < currentDateString
? workOrderMilestoneDateString
: undefined,
workOrderMilestoneCompletionTimeString: workOrderMilestoneDateString < currentDateString
? "00:00"
: undefined
}, user);
if (workOrderMilestoneDateString >
maxMilestoneCompletionDateString) {
maxMilestoneCompletionDateString =
workOrderMilestoneDateString;
}
if (workOrderMilestoneDateString >= currentDateString) {
hasIncompleteMilestones = true;
}
}
if (workOrderRow.WO_FUNERAL_YR) {
const workOrderMilestoneDateString = formatDateString(workOrderRow.WO_FUNERAL_YR, workOrderRow.WO_FUNERAL_MON, workOrderRow.WO_FUNERAL_DAY);
const workOrderMilestoneTimeString = formatTimeString(workOrderRow.WO_FUNERAL_HR, workOrderRow.WO_FUNERAL_MIN);
addWorkOrderMilestone({
workOrderId: workOrder.workOrderId,
workOrderMilestoneTypeId: funeralWorkOrderMilestoneType.workOrderMilestoneTypeId,
workOrderMilestoneDateString,
workOrderMilestoneTimeString,
workOrderMilestoneDescription: "Funeral Home: " + workOrderRow.WO_FUNERAL_HOME,
workOrderMilestoneCompletionDateString: workOrderMilestoneDateString < currentDateString
? workOrderMilestoneDateString
: undefined,
workOrderMilestoneCompletionTimeString: workOrderMilestoneDateString < currentDateString
? workOrderMilestoneTimeString
: undefined
}, user);
if (workOrderMilestoneDateString >
maxMilestoneCompletionDateString) {
maxMilestoneCompletionDateString =
workOrderMilestoneDateString;
}
if (workOrderMilestoneDateString >= currentDateString) {
hasIncompleteMilestones = true;
}
}
if (workOrderRow.WO_INTERMENT_YR) {
const workOrderMilestoneDateString = formatDateString(workOrderRow.WO_INTERMENT_YR, workOrderRow.WO_INTERMENT_MON, workOrderRow.WO_INTERMENT_DAY);
addWorkOrderMilestone({
workOrderId: workOrder.workOrderId,
workOrderMilestoneTypeId: intermentWorkOrderMilestoneType.workOrderMilestoneTypeId,
workOrderMilestoneDateString,
workOrderMilestoneDescription: "Depth: " + workOrderRow.WO_DEPTH,
workOrderMilestoneCompletionDateString: workOrderMilestoneDateString < currentDateString
? workOrderMilestoneDateString
: undefined,
workOrderMilestoneCompletionTimeString: workOrderMilestoneDateString < currentDateString
? "00:00"
: undefined
}, user);
if (workOrderMilestoneDateString >
maxMilestoneCompletionDateString) {
maxMilestoneCompletionDateString =
workOrderMilestoneDateString;
}
if (workOrderMilestoneDateString >= currentDateString) {
hasIncompleteMilestones = true;
}
}
if (!hasIncompleteMilestones) {
closeWorkOrder({
workOrderId: workOrder.workOrderId,
workOrderCloseDateString: maxMilestoneCompletionDateString
}, user);
}
} }
} }
catch (error) { catch (error) {

View File

@ -44,9 +44,14 @@ import {
import { reopenWorkOrder } from "../helpers/lotOccupancyDB/reopenWorkOrder.js"; import { reopenWorkOrder } from "../helpers/lotOccupancyDB/reopenWorkOrder.js";
import { dateIntegerToString } from "@cityssm/expressjs-server-js/dateTimeFns.js"; import {
dateIntegerToString,
dateToString
} from "@cityssm/expressjs-server-js/dateTimeFns.js";
import type * as recordTypes from "../types/recordTypes"; import type * as recordTypes from "../types/recordTypes";
import addWorkOrderMilestone from "../helpers/lotOccupancyDB/addWorkOrderMilestone.js";
import closeWorkOrder from "../helpers/lotOccupancyDB/closeWorkOrder.js";
interface MasterRecord { interface MasterRecord {
CM_SYSREC: string; CM_SYSREC: string;
@ -203,6 +208,7 @@ const user: recordTypes.PartialSession = {
function purgeTables() { function purgeTables() {
const database = sqlite(databasePath); const database = sqlite(databasePath);
database.prepare("delete from WorkOrderMilestones").run();
database.prepare("delete from WorkOrderComments").run(); database.prepare("delete from WorkOrderComments").run();
database.prepare("delete from WorkOrderLots").run(); database.prepare("delete from WorkOrderLots").run();
database.prepare("delete from WorkOrderLotOccupancies").run(); database.prepare("delete from WorkOrderLotOccupancies").run();
@ -217,7 +223,7 @@ function purgeTables() {
database.prepare("delete from Lots").run(); database.prepare("delete from Lots").run();
database database
.prepare( .prepare(
"delete from sqlite_sequence where name in ('Lots', 'LotComments', 'LotOccupancies', 'LotOccupancyComments', 'WorkOrders', 'WorkOrderComments')" "delete from sqlite_sequence where name in ('Lots', 'LotComments', 'LotOccupancies', 'LotOccupancyComments', 'WorkOrders', 'WorkOrderComments', 'WorkOrderMilestones')"
) )
.run(); .run();
database.close(); database.close();
@ -256,6 +262,10 @@ function formatDateString(year: string, month: string, day: string) {
); );
} }
function formatTimeString(hour: string, minute: string) {
return ("00" + hour).slice(-2) + ":" + ("00" + minute).slice(-2);
}
const cemeteryToMapName = { const cemeteryToMapName = {
"00": "Crematorium", "00": "Crematorium",
GC: "New Greenwood - Columbarium", GC: "New Greenwood - Columbarium",
@ -421,6 +431,23 @@ const deceasedLotOccupantType =
const arrangerLotOccupantType = const arrangerLotOccupantType =
cacheFunctions.getLotOccupantTypesByLotOccupantType("Arranger"); cacheFunctions.getLotOccupantTypesByLotOccupantType("Arranger");
const acknowledgedWorkOrderMilestoneType =
cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType(
"Acknowledged"
);
const deathWorkOrderMilestoneType =
cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType("Death");
const funeralWorkOrderMilestoneType =
cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType("Funeral");
const cremationWorkOrderMilestoneType =
cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType(
"Cremation"
);
const intermentWorkOrderMilestoneType =
cacheFunctions.getWorkOrderMilestoneTypeByWorkOrderMilestoneType(
"Interment"
);
function importFromMasterCSV() { function importFromMasterCSV() {
let masterRow: MasterRecord; let masterRow: MasterRecord;
@ -1229,6 +1256,8 @@ function importFromWorkOrderCSV() {
console.log(parseError); console.log(parseError);
} }
const currentDateString = dateToString(new Date());
try { try {
for (workOrderRow of cmwkordr.data) { for (workOrderRow of cmwkordr.data) {
let workOrder = getWorkOrderByWorkOrderNumber( let workOrder = getWorkOrderByWorkOrderNumber(
@ -1333,29 +1362,39 @@ function importFromWorkOrderCSV() {
let occupancyStartDateString = workOrderOpenDateString; let occupancyStartDateString = workOrderOpenDateString;
if (workOrderRow.WO_INTERMENT_YR) { if (workOrderRow.WO_INTERMENT_YR) {
occupancyStartDateString = formatDateString(workOrderRow.WO_INTERMENT_YR, occupancyStartDateString = formatDateString(
workOrderRow.WO_INTERMENT_YR,
workOrderRow.WO_INTERMENT_MON, workOrderRow.WO_INTERMENT_MON,
workOrderRow.WO_INTERMENT_DAY); workOrderRow.WO_INTERMENT_DAY
);
} }
const lotOccupancyId = addLotOccupancy({ const lotOccupancyId = addLotOccupancy(
lotId: lot ? lot.lotId : "", {
occupancyTypeId: deceasedOccupancyType.occupancyTypeId, lotId: lot ? lot.lotId : "",
occupancyStartDateString, occupancyTypeId: deceasedOccupancyType.occupancyTypeId,
occupancyEndDateString: "" occupancyStartDateString,
}, user); occupancyEndDateString: ""
},
user
);
addLotOccupancyOccupant({ addLotOccupancyOccupant(
lotOccupancyId, {
lotOccupantTypeId: deceasedLotOccupantType.lotOccupantTypeId, lotOccupancyId,
occupantName: workOrderRow.WO_DECEASED_NAME, lotOccupantTypeId:
occupantAddress1: workOrderRow.WO_ADDRESS, deceasedLotOccupantType.lotOccupantTypeId,
occupantAddress2: "", occupantName: workOrderRow.WO_DECEASED_NAME,
occupantCity: workOrderRow.WO_CITY, occupantAddress1: workOrderRow.WO_ADDRESS,
occupantProvince: workOrderRow. WO_PROV.slice(0, 2), occupantAddress2: "",
occupantPostalCode: workOrderRow.WO_POST1 + " " + workOrderRow.WO_POST2, occupantCity: workOrderRow.WO_CITY,
occupantPhoneNumber: "" occupantProvince: workOrderRow.WO_PROV.slice(0, 2),
}, user); occupantPostalCode:
workOrderRow.WO_POST1 + " " + workOrderRow.WO_POST2,
occupantPhoneNumber: ""
},
user
);
if (workOrderRow.WO_DEATH_YR !== "") { if (workOrderRow.WO_DEATH_YR !== "") {
const lotOccupancyFieldValue = formatDateString( const lotOccupancyFieldValue = formatDateString(
@ -1508,10 +1547,172 @@ function importFromWorkOrderCSV() {
); );
} }
addWorkOrderLotOccupancy({ addWorkOrderLotOccupancy(
workOrderId: workOrder.workOrderId, {
lotOccupancyId workOrderId: workOrder.workOrderId,
}, user); lotOccupancyId
},
user
);
// Milestones
let hasIncompleteMilestones = !workOrderRow.WO_CONFIRMATION_IN;
let maxMilestoneCompletionDateString = workOrderOpenDateString;
addWorkOrderMilestone(
{
workOrderId: workOrder.workOrderId,
workOrderMilestoneTypeId:
acknowledgedWorkOrderMilestoneType.workOrderMilestoneTypeId,
workOrderMilestoneDateString: workOrderOpenDateString,
workOrderMilestoneDescription: "",
workOrderMilestoneCompletionDateString:
workOrderRow.WO_CONFIRMATION_IN
? workOrderOpenDateString
: undefined,
workOrderMilestoneCompletionTimeString:
workOrderRow.WO_CONFIRMATION_IN ? "00:00" : undefined
},
user
);
if (workOrderRow.WO_DEATH_YR) {
const workOrderMilestoneDateString = formatDateString(
workOrderRow.WO_DEATH_YR,
workOrderRow.WO_DEATH_MON,
workOrderRow.WO_DEATH_DAY
);
addWorkOrderMilestone(
{
workOrderId: workOrder.workOrderId,
workOrderMilestoneTypeId:
deathWorkOrderMilestoneType.workOrderMilestoneTypeId,
workOrderMilestoneDateString,
workOrderMilestoneDescription:
"Death Place: " + workOrderRow.WO_DEATH_PLACE,
workOrderMilestoneCompletionDateString:
workOrderMilestoneDateString < currentDateString
? workOrderMilestoneDateString
: undefined,
workOrderMilestoneCompletionTimeString:
workOrderMilestoneDateString < currentDateString
? "00:00"
: undefined
},
user
);
if (
workOrderMilestoneDateString >
maxMilestoneCompletionDateString
) {
maxMilestoneCompletionDateString =
workOrderMilestoneDateString;
}
if (workOrderMilestoneDateString >= currentDateString) {
hasIncompleteMilestones = true;
}
}
if (workOrderRow.WO_FUNERAL_YR) {
const workOrderMilestoneDateString = formatDateString(
workOrderRow.WO_FUNERAL_YR,
workOrderRow.WO_FUNERAL_MON,
workOrderRow.WO_FUNERAL_DAY
);
const workOrderMilestoneTimeString = formatTimeString(
workOrderRow.WO_FUNERAL_HR,
workOrderRow.WO_FUNERAL_MIN
);
addWorkOrderMilestone(
{
workOrderId: workOrder.workOrderId,
workOrderMilestoneTypeId:
funeralWorkOrderMilestoneType.workOrderMilestoneTypeId,
workOrderMilestoneDateString,
workOrderMilestoneTimeString,
workOrderMilestoneDescription:
"Funeral Home: " + workOrderRow.WO_FUNERAL_HOME,
workOrderMilestoneCompletionDateString:
workOrderMilestoneDateString < currentDateString
? workOrderMilestoneDateString
: undefined,
workOrderMilestoneCompletionTimeString:
workOrderMilestoneDateString < currentDateString
? workOrderMilestoneTimeString
: undefined
},
user
);
if (
workOrderMilestoneDateString >
maxMilestoneCompletionDateString
) {
maxMilestoneCompletionDateString =
workOrderMilestoneDateString;
}
if (workOrderMilestoneDateString >= currentDateString) {
hasIncompleteMilestones = true;
}
}
if (workOrderRow.WO_INTERMENT_YR) {
const workOrderMilestoneDateString = formatDateString(
workOrderRow.WO_INTERMENT_YR,
workOrderRow.WO_INTERMENT_MON,
workOrderRow.WO_INTERMENT_DAY
);
addWorkOrderMilestone(
{
workOrderId: workOrder.workOrderId,
workOrderMilestoneTypeId:
intermentWorkOrderMilestoneType.workOrderMilestoneTypeId,
workOrderMilestoneDateString,
workOrderMilestoneDescription:
"Depth: " + workOrderRow.WO_DEPTH,
workOrderMilestoneCompletionDateString:
workOrderMilestoneDateString < currentDateString
? workOrderMilestoneDateString
: undefined,
workOrderMilestoneCompletionTimeString:
workOrderMilestoneDateString < currentDateString
? "00:00"
: undefined
},
user
);
if (
workOrderMilestoneDateString >
maxMilestoneCompletionDateString
) {
maxMilestoneCompletionDateString =
workOrderMilestoneDateString;
}
if (workOrderMilestoneDateString >= currentDateString) {
hasIncompleteMilestones = true;
}
}
if (!hasIncompleteMilestones) {
closeWorkOrder(
{
workOrderId: workOrder.workOrderId,
workOrderCloseDateString:
maxMilestoneCompletionDateString
},
user
);
}
} }
} catch (error) { } catch (error) {
console.error(error); console.error(error);
@ -1523,4 +1724,4 @@ purgeTables();
// purgeConfigTables(); // purgeConfigTables();
importFromMasterCSV(); importFromMasterCSV();
importFromPrepaidCSV(); importFromPrepaidCSV();
importFromWorkOrderCSV(); importFromWorkOrderCSV();