Files
alrahma_sunday_school_api/apps/api/dist/modules/reservations/reservation.presenter.js
T
2026-06-11 03:22:12 -04:00

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