sunrise-cms/helpers/lotOccupancyDB/addWorkOrder.ts

79 lines
2.4 KiB
TypeScript

import sqlite from "better-sqlite3";
import { lotOccupancyDB as databasePath } from "../../data/databasePaths.js";
import { getNextWorkOrderNumber } from "./getNextWorkOrderNumber.js";
import { dateStringToInteger, dateToInteger } from "@cityssm/expressjs-server-js/dateTimeFns.js";
import type * as recordTypes from "../../types/recordTypes";
import addWorkOrderLotOccupancy from "./addWorkOrderLotOccupancy.js";
interface AddWorkOrderForm {
workOrderTypeId: number | string;
workOrderNumber?: string;
workOrderDescription: string;
workOrderOpenDateString?: string;
workOrderCloseDateString?: string;
lotOccupancyId?: string;
}
export const addWorkOrder = (
workOrderForm: AddWorkOrderForm,
requestSession: recordTypes.PartialSession
): number => {
const database = sqlite(databasePath);
const rightNow = new Date();
let workOrderNumber = workOrderForm.workOrderNumber;
if (!workOrderNumber) {
workOrderNumber = getNextWorkOrderNumber(database);
}
const result = database
.prepare(
"insert into WorkOrders (" +
"workOrderTypeId, workOrderNumber, workOrderDescription," +
" workOrderOpenDate, workOrderCloseDate," +
" recordCreate_userName, recordCreate_timeMillis," +
" recordUpdate_userName, recordUpdate_timeMillis)" +
" values (?, ?, ?, ?, ?, ?, ?, ?, ?)"
)
.run(
workOrderForm.workOrderTypeId,
workOrderNumber,
workOrderForm.workOrderDescription,
workOrderForm.workOrderOpenDateString
? dateStringToInteger(workOrderForm.workOrderOpenDateString)
: dateToInteger(rightNow),
workOrderForm.workOrderCloseDateString
? dateStringToInteger(workOrderForm.workOrderCloseDateString)
: undefined,
requestSession.user.userName,
rightNow.getTime(),
requestSession.user.userName,
rightNow.getTime()
);
const workOrderId = result.lastInsertRowid as number;
if (workOrderForm.lotOccupancyId) {
addWorkOrderLotOccupancy(
{
workOrderId,
lotOccupancyId: workOrderForm.lotOccupancyId
},
requestSession,
database
);
}
database.close();
return workOrderId;
};
export default addWorkOrder;