Quality / test (push) Canceled after 0s
Commit the working vertical slices for inventory image processing and the Sale workflow, including Sale history, audited voiding, multi-item persistence, admin UI, migrations, documentation, and tests.
47 lines
1.7 KiB
JavaScript
47 lines
1.7 KiB
JavaScript
function toIsoString(value) {
|
|
return value instanceof Date ? value.toISOString() : value;
|
|
}
|
|
|
|
export function toAdminSaleDto({ sale, saleItem, inventoryItem, saleItems = [saleItem], inventoryItems = [inventoryItem], netProceedsMinor, profitMinor, productName }) {
|
|
return {
|
|
id: sale.id,
|
|
sellerId: sale.sellerId,
|
|
status: sale.status,
|
|
saleDate: sale.saleDate,
|
|
saleLocation: sale.saleLocation ?? null,
|
|
soldPriceMinor: sale.soldPriceMinor,
|
|
currency: sale.currency,
|
|
platformFeesMinor: sale.platformFeesMinor,
|
|
paymentProcessingFeesMinor: sale.paymentProcessingFeesMinor,
|
|
shippingCostMinor: sale.shippingCostMinor,
|
|
taxesMinor: sale.taxesMinor,
|
|
otherFeesMinor: sale.otherFeesMinor,
|
|
buyerName: sale.buyerName ?? null,
|
|
buyerContact: sale.buyerContact ?? null,
|
|
notes: sale.notes ?? null,
|
|
voidReason: sale.voidReason ?? null,
|
|
voidedAt: toIsoString(sale.voidedAt) ?? null,
|
|
productName: productName ?? null,
|
|
netProceedsMinor: netProceedsMinor ?? null,
|
|
profitMinor: profitMinor ?? null,
|
|
saleItem: {
|
|
id: saleItem.id,
|
|
inventoryItemId: saleItem.inventoryItemId,
|
|
soldPriceMinor: saleItem.soldPriceMinor,
|
|
costBasisMinor: saleItem.costBasisMinor,
|
|
},
|
|
saleItems: saleItems.map((item) => ({
|
|
id: item.id,
|
|
inventoryItemId: item.inventoryItemId,
|
|
soldPriceMinor: item.soldPriceMinor,
|
|
costBasisMinor: item.costBasisMinor,
|
|
})),
|
|
inventoryItem: {
|
|
id: inventoryItem.id,
|
|
status: inventoryItem.status,
|
|
},
|
|
inventoryItems: inventoryItems.map((item) => ({ id: item.id, status: item.status })),
|
|
createdAt: toIsoString(sale.createdAt),
|
|
updatedAt: toIsoString(sale.updatedAt),
|
|
};
|
|
} |