fix(fleet): normalize nullable maintenance fields before editing
This commit is contained in:
@@ -6,9 +6,9 @@ import type { PageResult } from './overseasMasterData'
|
||||
type Numeric = number | string
|
||||
type Wire = Omit<VehicleCareRecord, 'recordVersion' | 'details' | 'files'> & {
|
||||
recordVersion: Numeric
|
||||
details: Omit<VehicleCareDraft, 'odometer' | 'lastServiceOdometer' | 'nextServiceOdometer' | 'fuelQuantity' | 'incident'> & {
|
||||
odometer: Numeric | null; lastServiceOdometer: Numeric | null; nextServiceOdometer: Numeric | null; fuelQuantity: Numeric | null
|
||||
incident: (Omit<VehicleIncident, 'reportedCost'> & { reportedCost: Numeric | null }) | null
|
||||
details: Pick<VehicleCareDraft, 'recordType' | 'occurredAt'> & Partial<Omit<VehicleCareDraft, 'odometer' | 'lastServiceOdometer' | 'nextServiceOdometer' | 'fuelQuantity' | 'incident'>> & {
|
||||
odometer?: Numeric | null; lastServiceOdometer?: Numeric | null; nextServiceOdometer?: Numeric | null; fuelQuantity?: Numeric | null
|
||||
incident?: (Pick<VehicleIncident, 'description' | 'processingStatus'> & Partial<Omit<VehicleIncident, 'reportedCost'>> & { reportedCost?: Numeric | null }) | null
|
||||
}
|
||||
files: Array<Omit<VehicleCareRecord['files'][number], 'sizeBytes'> & { sizeBytes: Numeric }>
|
||||
}
|
||||
@@ -24,10 +24,16 @@ function decimal(value: Numeric): number {
|
||||
return result
|
||||
}
|
||||
function record(value: Wire): VehicleCareRecord {
|
||||
const optional = (number: Numeric | null) => number == null ? null : decimal(number)
|
||||
return { ...value, recordVersion: integer(value.recordVersion), details: { ...value.details, odometer: optional(value.details.odometer),
|
||||
lastServiceOdometer: optional(value.details.lastServiceOdometer), nextServiceOdometer: optional(value.details.nextServiceOdometer), fuelQuantity: optional(value.details.fuelQuantity),
|
||||
incident: value.details.incident ? { ...value.details.incident, reportedCost: optional(value.details.incident.reportedCost) } : null },
|
||||
const optional = (number: Numeric | null | undefined) => number == null ? null : decimal(number)
|
||||
const details = value.details, incident = details.incident
|
||||
return { ...value, recordVersion: integer(value.recordVersion), paymentStatus: value.paymentStatus ?? null, details: {
|
||||
recordType: details.recordType, occurredAt: details.occurredAt, distanceUnit: details.distanceUnit ?? null,
|
||||
odometer: optional(details.odometer), lastServiceOdometer: optional(details.lastServiceOdometer),
|
||||
nextServiceOdometer: optional(details.nextServiceOdometer), fuelQuantity: optional(details.fuelQuantity),
|
||||
fuelUnit: details.fuelUnit ?? null, verificationStatus: details.verificationStatus ?? null, remark: details.remark ?? null,
|
||||
incident: incident ? { description: incident.description, processingStatus: incident.processingStatus,
|
||||
item: incident.item ?? null, place: incident.place ?? null, handler: incident.handler ?? null,
|
||||
exceptionType: incident.exceptionType ?? null, reportedCost: optional(incident.reportedCost), currency: incident.currency ?? null } : null },
|
||||
files: value.files.map(file => ({ ...file, sizeBytes: integer(file.sizeBytes) })) }
|
||||
}
|
||||
export async function listVehicleCare(vehicleId: string, recordType: VehicleCareType, page = 1, size = 10): Promise<PageResult<VehicleCareRecord>> {
|
||||
|
||||
Reference in New Issue
Block a user