Files
dashlibstorage/src/store/shipment/helpers.js
2026-10-17 05:10:28 +02:00

67 lines
2.4 KiB
JavaScript

import * as mssqlShipmentQueries from '../../providers/mssql/queries/shipment.js';
import * as sqliteShipmentQueries from '../../providers/sqlite3/queries/shipment.js';
import * as mssqlDocQueries from '../../providers/mssql/queries/manifestDoc.js';
import * as sqliteDocQueries from '../../providers/sqlite3/queries/manifestDoc.js';
import * as mssqlLogisticsQueries from '../../providers/mssql/queries/logistics.js';
import * as sqliteLogisticsQueries from '../../providers/sqlite3/queries/logistics.js';
import { shapeLine } from '../manifestLines.js';
export function queriesFor(provider) {
const isSqlite = provider?.dialect === 'sqlite3';
return {
...(isSqlite ? sqliteShipmentQueries : mssqlShipmentQueries),
CREATE_MANIFEST: isSqlite
? sqliteDocQueries.CREATE_MANIFEST
: mssqlDocQueries.CREATE_MANIFEST,
GET_MANIFEST_LINES: isSqlite
? sqliteDocQueries.GET_MANIFEST_LINES
: mssqlDocQueries.GET_MANIFEST_LINES,
SHIPPING_LIST_BY_MANIFEST: isSqlite
? sqliteLogisticsQueries.SHIPPING_LIST_BY_MANIFEST
: mssqlLogisticsQueries.SHIPPING_LIST_BY_MANIFEST,
};
}
export function shapeShipping(row) {
return {
id: row.id,
manifestId: row.manifest_id ?? row.manifestId,
number: row.number,
trackingCode: row.tracking_code ?? row.trackingCode ?? null,
carrierId: row.carrier_id ?? row.carrierId,
carrier: row.carrier ?? null,
type: row.type,
state: row.state,
};
}
export async function loadShipment(runner, q, companyId, id) {
const headerRes = await runner.query(q.GET_SHIPMENT_HEADER, { id, companyId });
const row = headerRes.rows[0];
if (!row) return null;
const [linesRes, shippingsRes, summaryRes] = await Promise.all([
runner.query(q.GET_MANIFEST_LINES, { manifestId: id }),
runner.query(q.SHIPPING_LIST_BY_MANIFEST, { manifestId: id }),
runner.query('SELECT state FROM shipmentsummary WHERE manifest_id = @manifestId', { manifestId: id }).catch(() => ({ rows: [] })),
]);
const lines = linesRes.rows.map(shapeLine);
const shippings = shippingsRes.rows.map(shapeShipping);
return {
id: row.id,
number: row.number,
type: 'shipment',
entityId: row.entityId ?? null,
externalNumber: row.externalNumber ?? null,
date: row.date,
createdAt: row.createdAt ?? null,
lineCount: lines.length,
packageCount: shippings.length,
state: summaryRes.rows[0]?.state || 'new',
lines,
shippings,
};
}