import sqlite from 'better-sqlite3' import { lotOccupancyDB as databasePath } from '../../data/databasePaths.js' import { dateStringToInteger } from '@cityssm/expressjs-server-js/dateTimeFns.js' import { addOrUpdateLotOccupancyField } from './addOrUpdateLotOccupancyField.js' import { deleteLotOccupancyField } from './deleteLotOccupancyField.js' import type * as recordTypes from '../../types/recordTypes' interface UpdateLotOccupancyForm { lotOccupancyId: string | number occupancyTypeId: string | number lotId: string | number occupancyStartDateString: string occupancyEndDateString: string occupancyTypeFieldIds?: string [lotOccupancyFieldValue_occupancyTypeFieldId: string]: unknown } export function updateLotOccupancy( lotOccupancyForm: UpdateLotOccupancyForm, requestSession: recordTypes.PartialSession ): boolean { const database = sqlite(databasePath) const rightNowMillis = Date.now() const result = database .prepare( `update LotOccupancies set occupancyTypeId = ?, lotId = ?, occupancyStartDate = ?, occupancyEndDate = ?, recordUpdate_userName = ?, recordUpdate_timeMillis = ? where lotOccupancyId = ? and recordDelete_timeMillis is null` ) .run( lotOccupancyForm.occupancyTypeId, lotOccupancyForm.lotId === '' ? undefined : lotOccupancyForm.lotId, dateStringToInteger(lotOccupancyForm.occupancyStartDateString), lotOccupancyForm.occupancyEndDateString === '' ? undefined : dateStringToInteger(lotOccupancyForm.occupancyEndDateString), requestSession.user!.userName, rightNowMillis, lotOccupancyForm.lotOccupancyId ) if (result.changes > 0) { const occupancyTypeFieldIds = ( lotOccupancyForm.occupancyTypeFieldIds ?? '' ).split(',') for (const occupancyTypeFieldId of occupancyTypeFieldIds) { const lotOccupancyFieldValue = lotOccupancyForm[ 'lotOccupancyFieldValue_' + occupancyTypeFieldId ] as string if (lotOccupancyFieldValue && lotOccupancyFieldValue !== '') { addOrUpdateLotOccupancyField( { lotOccupancyId: lotOccupancyForm.lotOccupancyId, occupancyTypeFieldId, lotOccupancyFieldValue }, requestSession, database ) } else { deleteLotOccupancyField( lotOccupancyForm.lotOccupancyId, occupancyTypeFieldId, requestSession, database ) } } } database.close() return result.changes > 0 } export default updateLotOccupancy