50 lines
2.3 KiB
JavaScript
50 lines
2.3 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.parseReservationExtras = parseReservationExtras;
|
|
exports.normalizeOptionalString = normalizeOptionalString;
|
|
exports.buildReservationWorkflow = buildReservationWorkflow;
|
|
exports.serializeReservationForDashboard = serializeReservationForDashboard;
|
|
const storage_1 = require("../../lib/storage");
|
|
function parseReservationExtras(extras) {
|
|
if (!extras || typeof extras !== 'object' || Array.isArray(extras))
|
|
return {};
|
|
return { ...extras };
|
|
}
|
|
function normalizeOptionalString(value) {
|
|
const trimmed = typeof value === 'string' ? value.trim() : value;
|
|
return trimmed || null;
|
|
}
|
|
function buildReservationWorkflow(reservation) {
|
|
const extras = parseReservationExtras(reservation.extras);
|
|
const closedAt = typeof extras.reservationClosedAt === 'string' ? extras.reservationClosedAt : null;
|
|
const contractGenerated = Boolean(reservation.contractNumber || reservation.invoiceNumber);
|
|
const closed = Boolean(closedAt);
|
|
return {
|
|
contractGenerated,
|
|
closed,
|
|
closedAt,
|
|
closedBy: typeof extras.reservationClosedBy === 'string' ? extras.reservationClosedBy : null,
|
|
coreEditable: !closed && !contractGenerated && ['DRAFT', 'CONFIRMED'].includes(reservation.status),
|
|
returnEditable: !closed && reservation.status === 'COMPLETED',
|
|
checkInInspectionEditable: !closed && ['CONFIRMED', 'ACTIVE'].includes(reservation.status),
|
|
checkOutInspectionEditable: !closed && reservation.status === 'COMPLETED',
|
|
};
|
|
}
|
|
function serializeReservationForDashboard(reservation) {
|
|
const extras = parseReservationExtras(reservation.extras);
|
|
const customer = reservation.customer
|
|
? {
|
|
...reservation.customer,
|
|
licenseImageUrl: reservation.customer.licenseImageUrl
|
|
? (0, storage_1.getProtectedCustomerLicenseImageUrl)(reservation.customer.id)
|
|
: null,
|
|
}
|
|
: reservation.customer;
|
|
return {
|
|
...reservation,
|
|
...(customer !== undefined ? { customer } : {}),
|
|
paymentMode: typeof extras.paymentMode === 'string' ? extras.paymentMode : null,
|
|
workflow: buildReservationWorkflow(reservation),
|
|
};
|
|
}
|
|
//# sourceMappingURL=reservation.presenter.js.map
|