diff --git a/package.json b/package.json index 16a9df7..ffb9327 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "lint": "eslint src/", "start": "node index", "test:ci": "jest --silent", - "ts:ci": "tsc --noEmit" + "ts:ci": "tsc --noEmit", + "ts:watch": "tsc --noEmit --watch" }, "keywords": [], "author": "", diff --git a/src/services/work-order-service/adapters/odoo-adapter/index.ts b/src/services/work-order-service/adapters/odoo-adapter/index.ts index 0b8fba3..4c60f29 100644 --- a/src/services/work-order-service/adapters/odoo-adapter/index.ts +++ b/src/services/work-order-service/adapters/odoo-adapter/index.ts @@ -45,6 +45,7 @@ const WORK_ORDER_FIELDS: string[] = [ 'equipment_code', 'rental_property_id', 'create_date', + 'due_date', 'write_date', 'stage_id', 'phone_number', diff --git a/src/services/work-order-service/adapters/odoo-adapter/utils.ts b/src/services/work-order-service/adapters/odoo-adapter/utils.ts index 6aa733c..ebfcd37 100644 --- a/src/services/work-order-service/adapters/odoo-adapter/utils.ts +++ b/src/services/work-order-service/adapters/odoo-adapter/utils.ts @@ -70,6 +70,7 @@ export const transformWorkOrder = (odooWorkOrder: OdooWorkOrder): WorkOrder => { ), Priority: odooWorkOrder.priority || '', Registered: new Date(odooWorkOrder.create_date), + DueDate: odooWorkOrder.due_date ? new Date(odooWorkOrder.due_date) : null, RentalObjectCode: odooWorkOrder.rental_property_id[1], Status: odooWorkOrder.stage_id[1], HiddenFromMyPages: odooWorkOrder.hidden_from_my_pages || false, diff --git a/src/services/work-order-service/adapters/xpand-adapter/index.ts b/src/services/work-order-service/adapters/xpand-adapter/index.ts index 3790c19..2d11eac 100644 --- a/src/services/work-order-service/adapters/xpand-adapter/index.ts +++ b/src/services/work-order-service/adapters/xpand-adapter/index.ts @@ -23,6 +23,7 @@ export interface XpandDbWorkOrder { resource: string resourceGroup: string createdAt: Date + expiresAt: Date | null lastChanged: Date priority: string | null residenceId: string @@ -54,6 +55,7 @@ export async function getWorkOrdersByResidenceId( 'resource.cmctcben AS resource', 'cmrgr.caption AS resourceGroup', 'aoupp.time AS createdAt', + 'aoupp.timeforf AS expiresAt', 'aoupp.lastchged AS lastChanged', 'aopri.code AS priority', 'babuf.hyresid AS residenceId' @@ -61,7 +63,7 @@ export async function getWorkOrdersByResidenceId( .innerJoin('babuf', 'babuf.keycmobj', 'aoupp.keycmobj') .innerJoin('aotlt', 'aotlt.keyaotlt', 'aoupp.keyaotlt') .leftJoin('cmctc', 'cmctc.keycmctc', 'aoupp.keycmctc') - .leftJoin('cmctc as resource', 'cmctc.keycmctc', 'aoupp.keycmctc2') + .leftJoin('cmctc as resource', 'resource.keycmctc', 'aoupp.keycmctc2') .leftJoin('cmrgr', 'cmrgr.keycmrgr', 'aoupp.keycmrgr') .leftJoin('aopri', 'aopri.keyaopri', 'aoupp.keyaopri') .where('babuf.hyresid', residenceId) @@ -102,6 +104,7 @@ export async function getWorkOrderDetails( 'resource.cmctcben AS resource', 'cmrgr.caption AS resourceGroup', 'aoupp.time AS createdAt', + 'aoupp.timeforf AS expiresAt', 'aoupp.lastchged AS lastChanged', 'aopri.code AS priority', 'babuf.hyresid AS residenceId', diff --git a/src/services/work-order-service/adapters/xpand-adapter/utils.ts b/src/services/work-order-service/adapters/xpand-adapter/utils.ts index f8be0c0..507b8cf 100644 --- a/src/services/work-order-service/adapters/xpand-adapter/utils.ts +++ b/src/services/work-order-service/adapters/xpand-adapter/utils.ts @@ -64,6 +64,9 @@ export function transformXpandDbWorkOrderDetails( LastChanged: new Date(dbWorkOrderDetails.lastChanged), Priority: dbWorkOrderDetails.priority, Registered: new Date(dbWorkOrderDetails.createdAt), + DueDate: dbWorkOrderDetails.expiresAt + ? new Date(dbWorkOrderDetails.expiresAt) + : null, RentalObjectCode: dbWorkOrderDetails.residenceId, Status: xpandStatusToString(dbWorkOrderDetails.status), WorkOrderRows: rows.map((row) => ({ @@ -92,6 +95,7 @@ export function transformXpandDbWorkOrder( LastChanged: new Date(dbWorkOrder.lastChanged), Priority: dbWorkOrder.priority, Registered: new Date(dbWorkOrder.createdAt), + DueDate: dbWorkOrder.expiresAt, RentalObjectCode: dbWorkOrder.residenceId, Status: xpandStatusToString(dbWorkOrder.status), } diff --git a/src/services/work-order-service/index.ts b/src/services/work-order-service/index.ts index 32f7a2f..a4384b3 100644 --- a/src/services/work-order-service/index.ts +++ b/src/services/work-order-service/index.ts @@ -1,5 +1,5 @@ import KoaRouter from '@koa/router' -import { generateRouteMetadata } from 'onecore-utilities' +import { generateRouteMetadata, logger } from 'onecore-utilities' import * as odooAdapter from './adapters/odoo-adapter' import { CreateWorkOrderBodySchema, @@ -298,7 +298,8 @@ export const routes = (router: KoaRouter) => { }, ...metadata, } - } catch (error: unknown) { + } catch (error) { + logger.error(error, 'Error fetching work orders from Xpand') ctx.status = 500 if (error instanceof Error) { diff --git a/src/services/work-order-service/schemas.ts b/src/services/work-order-service/schemas.ts index 28d6e0a..527b3c9 100644 --- a/src/services/work-order-service/schemas.ts +++ b/src/services/work-order-service/schemas.ts @@ -20,6 +20,7 @@ export const WorkOrderSchema = z.object({ LastChanged: z.coerce.date(), Priority: z.string(), Registered: z.coerce.date(), + DueDate: z.union([z.null(), z.coerce.date()]), RentalObjectCode: z.string(), Status: z.string(), UseMasterKey: z.boolean(), @@ -50,6 +51,7 @@ export const OdooWorkOrderSchema = z.object({ equipment_code: z.string(), rental_property_id: z.string(), create_date: z.coerce.string(), + due_date: z.coerce.string().nullable(), write_date: z.coerce.string(), stage_id: z.tuple([z.number(), z.string()]), }) diff --git a/src/services/work-order-service/tests/factories/work-order.ts b/src/services/work-order-service/tests/factories/work-order.ts index f7400e9..7fdedd4 100644 --- a/src/services/work-order-service/tests/factories/work-order.ts +++ b/src/services/work-order-service/tests/factories/work-order.ts @@ -22,6 +22,7 @@ export const WorkOrderFactory = Factory.define(({ sequence }) => ({ LastChanged: new Date(), Priority: 'High', Registered: new Date(), + DueDate: null, RentalObjectCode: `RO-${sequence}`, Status: 'Resurs tilldelad', UseMasterKey: false, @@ -60,6 +61,7 @@ export const OdooWorkOrderFactory = Factory.define( rental_property_id: `987-654-321/${sequence}`, create_date: new Date().toDateString(), write_date: new Date().toDateString(), + due_date: new Date().toDateString(), stage_id: [1, 'Ny Begäran'], hidden_from_my_pages: false, name: '', diff --git a/src/services/work-order-service/tests/factories/xpand-work-order.ts b/src/services/work-order-service/tests/factories/xpand-work-order.ts index dfd9b5f..f1e35e5 100644 --- a/src/services/work-order-service/tests/factories/xpand-work-order.ts +++ b/src/services/work-order-service/tests/factories/xpand-work-order.ts @@ -16,6 +16,7 @@ export const XpandWorkOrderDetailsFactory = LastChanged: new Date(), Priority: sequence % 2 === 0 ? 'High' : null, Registered: new Date(), + DueDate: null, RentalObjectCode: `RO-${sequence}`, Status: 'Resurs tilldelad', WorkOrderRows: [ @@ -37,6 +38,7 @@ export const XpandWorkOrderFactory = Factory.define( LastChanged: new Date(), Priority: sequence % 2 === 0 ? 'High' : null, Registered: new Date(), + DueDate: null, RentalObjectCode: `RO-${sequence}`, Status: 'Resurs tilldelad', }) @@ -52,6 +54,7 @@ export const XpandDbWorkOrderDetailsFactory = resource: `Resource-${sequence}`, resourceGroup: `Group-${sequence}`, createdAt: new Date(), + expiresAt: null, lastChanged: new Date(), priority: sequence % 2 === 0 ? '7 dagar' : null, residenceId: `406-028-02-${sequence}`, @@ -74,6 +77,7 @@ export const XpandDbWorkOrderFactory = Factory.define( resource: `Resource-${sequence}`, resourceGroup: `Group-${sequence}`, createdAt: new Date(), + expiresAt: null, lastChanged: new Date(), priority: sequence % 2 === 0 ? '7 dagar' : null, residenceId: `406-028-02-${sequence}`,