From 1fafeeb5f20930ff8c83890a4cacedbcef7000f5 Mon Sep 17 00:00:00 2001 From: seb Date: Thu, 17 Sep 2026 11:02:44 +0200 Subject: [PATCH] refactor(manifestLines): standardize on taxrate and change schema type to float --- API.delivery.md | 10 +++++----- API.md | 18 +++++++++--------- API.order.md | 10 +++++----- API.quote.md | 10 +++++----- README.md | 6 +++--- schema-graph.dot | 2 +- schema-graph.svg | 2 +- src/schema.js | 2 +- src/sql/delivery.js | 1 - src/sql/manifestDoc.js | 1 - src/store/delivery/create.js | 4 ++-- src/store/delivery/getById.js | 2 +- src/store/delivery/update.js | 4 ++-- src/store/manifestLines.js | 16 ++++++++-------- src/store/order/create.js | 4 ++-- src/store/order/getById.js | 2 +- src/store/order/update.js | 4 ++-- src/store/quote/create.js | 4 ++-- src/store/quote/getById.js | 2 +- src/store/quote/update.js | 4 ++-- 20 files changed, 53 insertions(+), 55 deletions(-) diff --git a/API.delivery.md b/API.delivery.md index d88d442..fd4d274 100644 --- a/API.delivery.md +++ b/API.delivery.md @@ -17,11 +17,11 @@ Creates a new delivery for the user's selected company with its lines. The deliv | `body.date` | `string` | The delivery date. | | `body.supplierId` | `number` | The id of the supplier. | | `[body.externalNumber]` | `string` | An external (supplier) reference number. | -| `[body.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>` | The delivery lines. | +| `[body.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>` | The delivery lines. | **Returns** -`Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` — The created delivery. +`Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` — The created delivery. **Throws** @@ -76,7 +76,7 @@ Returns a single delivery by its id within the user's selected company. **Returns** -`Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` — The delivery. +`Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` — The delivery. **Throws** @@ -129,11 +129,11 @@ Updates a delivery's header and/or lines. | `[patch.date]` | `string` | The new delivery date. | | `[patch.supplierId]` | `number` | The new supplier id. | | `[patch.externalNumber]` | `string` | The new external (supplier) reference number. | -| `[patch.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>` | The new delivery lines. | +| `[patch.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>` | The new delivery lines. | **Returns** -`Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` — The updated delivery. +`Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` — The updated delivery. **Throws** diff --git a/API.md b/API.md index c46cc3c..a76116a 100644 --- a/API.md +++ b/API.md @@ -99,23 +99,23 @@ The store is exposed as a `LibDashStore` instance (see `src/index.js`). Each met - `list(googleAuthId: number): Promise>` - `update(googleAuthId: number, id: number, input: {name: string}): Promise<{id: number, name: string, createdAt: string, updatedAt: string}>` - [delivery](API.delivery.md) - - `create(googleAuthId: number, body: {date: string, supplierId: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` + - `create(googleAuthId: number, body: {date: string, supplierId: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` - `delete(googleAuthId: number, id: number): Promise` - - `getById(googleAuthId: number, id: number): Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` + - `getById(googleAuthId: number, id: number): Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` - `list(googleAuthId: number): Promise>` - - `update(googleAuthId: number, id: number, patch: {number?: string, date?: string, supplierId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` + - `update(googleAuthId: number, id: number, patch: {number?: string, date?: string, supplierId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` - [quote](API.quote.md) - - `create(googleAuthId: number, body: {number: string, date: string, entityId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` + - `create(googleAuthId: number, body: {number: string, date: string, entityId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` - `delete(googleAuthId: number, id: number): Promise` - - `getById(googleAuthId: number, id: number): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` + - `getById(googleAuthId: number, id: number): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` - `list(googleAuthId: number): Promise>` - - `update(googleAuthId: number, id: number, patch: {number?: string, date?: string, entityId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` + - `update(googleAuthId: number, id: number, patch: {number?: string, date?: string, entityId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` - [order](API.order.md) - - `create(googleAuthId: number, body: {number: string, date: string, entityId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` + - `create(googleAuthId: number, body: {number: string, date: string, entityId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` - `delete(googleAuthId: number, id: number): Promise` - - `getById(googleAuthId: number, id: number): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` + - `getById(googleAuthId: number, id: number): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` - `list(googleAuthId: number): Promise>` - - `update(googleAuthId: number, id: number, patch: {number?: string, date?: string, entityId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` + - `update(googleAuthId: number, id: number, patch: {number?: string, date?: string, entityId?: number, externalNumber?: string, lines?: Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>}): Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` - [manifestattachment](API.manifestattachment.md) - `add(googleAuthId: number, manifestId: number, input: {mimetype: string, name: string, content: Buffer}): Promise<{id: number, manifestId: number, fileId: number, mimetype: string, name: string}>` - `getById(googleAuthId: number, manifestId: number, id: number): Promise<{id: number, manifestId: number, fileId: number, mimetype: string, name: string, content: Buffer}>` diff --git a/API.order.md b/API.order.md index 07444ee..88a200a 100644 --- a/API.order.md +++ b/API.order.md @@ -18,11 +18,11 @@ Creates a new order for the user's selected company with its lines. | `body.date` | `string` | The order date. | | `[body.entityId]` | `number` | The id of the customer entity. | | `[body.externalNumber]` | `string` | An external (customer) reference number. | -| `[body.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>` | The order lines. | +| `[body.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>` | The order lines. | **Returns** -`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` — The created order. +`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` — The created order. **Throws** @@ -77,7 +77,7 @@ Returns a single order by its id within the user's selected company. **Returns** -`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` — The order with its lines. +`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` — The order with its lines. **Throws** @@ -130,11 +130,11 @@ Updates an order's header and/or lines. | `[patch.date]` | `string` | The new order date. | | `[patch.entityId]` | `number` | The new customer entity id. | | `[patch.externalNumber]` | `string` | The new external (customer) reference number. | -| `[patch.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>` | The new order lines. | +| `[patch.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>` | The new order lines. | **Returns** -`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` — The updated order. +`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` — The updated order. **Throws** diff --git a/API.quote.md b/API.quote.md index 6a89068..750e32a 100644 --- a/API.quote.md +++ b/API.quote.md @@ -18,11 +18,11 @@ Creates a new quote for the user's selected company with its lines. | `body.date` | `string` | The quote date. | | `[body.entityId]` | `number` | The id of the customer entity. | | `[body.externalNumber]` | `string` | An external (customer) reference number. | -| `[body.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>` | The quote lines. | +| `[body.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>` | The quote lines. | **Returns** -`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` — The created quote. +`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` — The created quote. **Throws** @@ -77,7 +77,7 @@ Returns a single quote by its id within the user's selected company. **Returns** -`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` — The quote with its lines. +`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` — The quote with its lines. **Throws** @@ -130,11 +130,11 @@ Updates a quote's header and/or lines. | `[patch.date]` | `string` | The new quote date. | | `[patch.entityId]` | `number` | The new customer entity id. | | `[patch.externalNumber]` | `string` | The new external (customer) reference number. | -| `[patch.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>` | The new quote lines. | +| `[patch.lines]` | `Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>` | The new quote lines. | **Returns** -`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>` — The updated quote. +`Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>` — The updated quote. **Throws** diff --git a/README.md b/README.md index 3f493aa..852a956 100644 --- a/README.md +++ b/README.md @@ -333,14 +333,14 @@ type DeliveryLine = { amount: number, net: number, rebate: number, - tax: number, // manifestarticle.taxrate + taxrate: number, // manifestarticle.taxrate comment: string | null, } type Delivery = DeliverySummary & { lines: DeliveryLine[] } ``` -`create` inserts header + lines in one transaction. The `number` is auto-allocated via `getnextnumberwithprefixandpadding` (`numbers` type `delivery`); supply `externalNumber` for an external (supplier) reference. `supplierId` null or a Lieferanten `entity` of the company (else `Supplier not found`). Each line requires either `sku` or `name`. For delivery manifests, `sku` points to `articlesupplier.sku`; for quote and order manifests, `sku` points to `article.sku`. Lines are stored without FKs so manifest articles are preserved even if articles or suppliers are deleted. `amount`, `net`, `tax` (rate → `tax.ensure`); `rebate` defaults `0`. Empty/invalid `date` → `Invalid delivery`; bad line payload → `Invalid lines`. +`create` inserts header + lines in one transaction. The `number` is auto-allocated via `getnextnumberwithprefixandpadding` (`numbers` type `delivery`); supply `externalNumber` for an external (supplier) reference. `supplierId` null or a Lieferanten `entity` of the company (else `Supplier not found`). Each line requires either `sku` or `name`. For delivery manifests, `sku` points to `articlesupplier.sku`; for quote and order manifests, `sku` points to `article.sku`. Lines are stored without FKs so manifest articles are preserved even if articles or suppliers are deleted. `amount`, `net`, `taxrate` (rate → `tax.ensure`); `rebate` defaults `0`. Empty/invalid `date` → `Invalid delivery`; bad line payload → `Invalid lines`. `update` patches header fields that are present. If `lines` is present, replace-all lines; if omitted, leave lines unchanged. Returns full `Delivery`. @@ -377,7 +377,7 @@ type ManifestLine = { amount: number, net: number, rebate: number, - tax: number, // tax.rate + taxrate: number, // tax.rate comment: string | null, } diff --git a/schema-graph.dot b/schema-graph.dot index 449a64b..4c13ced 100644 --- a/schema-graph.dot +++ b/schema-graph.dot @@ -60,7 +60,7 @@ digraph schema { label="Documents"; labeljust="l"; fontsize=15; style="rounded,filled"; fillcolor="#202a3a"; color="#3f4c5f"; fontcolor="#e2e8f0"; margin=14; - manifestarticle [label=<
manifestarticle
idINT PK
manifest_idINT FK
sku?NVARCHAR(100)
name?NVARCHAR(255)
puFLOAT
amountFLOAT
netFLOAT
comment?NVARCHAR(MAX)
rebateFLOAT
taxrateDECIMAL(18,4)
>]; + manifestarticle [label=<
manifestarticle
idINT PK
manifest_idINT FK
sku?NVARCHAR(100)
name?NVARCHAR(255)
puFLOAT
amountFLOAT
netFLOAT
comment?NVARCHAR(MAX)
rebateFLOAT
taxrateFLOAT
>]; ledger [label=<
ledger
idINT PK
manifestarticle_idINT FK
transaction_typeNVARCHAR(100)
amountFLOAT
transaction_textNVARCHAR(MAX)
hash_versionINT
prev_hash?NVARCHAR(128)
>]; manifest [label=<
manifest
idINT PK
entity_id?INT FK
company_idINT FK
numberNVARCHAR(100)
typeNVARCHAR(100)
external_number?NVARCHAR(100)
dateDATETIME2
>]; manifestattachment [label=<
manifestattachment
idINT PK
manifest_idINT FK
file_idINT FK
>]; diff --git a/schema-graph.svg b/schema-graph.svg index 93b9314..126db4f 100644 --- a/schema-graph.svg +++ b/schema-graph.svg @@ -1638,7 +1638,7 @@ taxrate -DECIMAL(18,4) +FLOAT diff --git a/src/schema.js b/src/schema.js index 6344212..d649025 100644 --- a/src/schema.js +++ b/src/schema.js @@ -579,7 +579,7 @@ BEGIN net FLOAT NOT NULL, comment NVARCHAR(MAX) NULL, rebate FLOAT NOT NULL CONSTRAINT DF_manifestarticle_rebate DEFAULT 0, - taxrate DECIMAL(18,4) NOT NULL CONSTRAINT DF_manifestarticle_taxrate DEFAULT 0, + taxrate FLOAT NOT NULL CONSTRAINT DF_manifestarticle_taxrate DEFAULT 0, CONSTRAINT FK_manifestarticle_manifest FOREIGN KEY (manifest_id) REFERENCES manifest(id) ON DELETE CASCADE ); END diff --git a/src/sql/delivery.js b/src/sql/delivery.js index 10a1de5..feb00e8 100644 --- a/src/sql/delivery.js +++ b/src/sql/delivery.js @@ -37,7 +37,6 @@ SELECT ma.amount, ma.net, ma.rebate, - ma.taxrate AS tax, ma.taxrate, ma.comment FROM manifestarticle ma diff --git a/src/sql/manifestDoc.js b/src/sql/manifestDoc.js index e7573ab..0956f5f 100644 --- a/src/sql/manifestDoc.js +++ b/src/sql/manifestDoc.js @@ -43,7 +43,6 @@ SELECT ma.amount, ma.net, ma.rebate, - ma.taxrate AS tax, ma.taxrate, ma.comment FROM manifestarticle ma diff --git a/src/store/delivery/create.js b/src/store/delivery/create.js index 82f5f17..2814c04 100644 --- a/src/store/delivery/create.js +++ b/src/store/delivery/create.js @@ -22,8 +22,8 @@ export default function create(pool) { * @param {string} body.date - The delivery date. * @param {number} body.supplierId - The id of the supplier. * @param {string} [body.externalNumber] - An external (supplier) reference number. - * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>} [body.lines] - The delivery lines. - * @returns {Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>} The created delivery. + * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>} [body.lines] - The delivery lines. + * @returns {Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>} The created delivery. * @throws {Error} If the delivery is invalid. * * @example diff --git a/src/store/delivery/getById.js b/src/store/delivery/getById.js index 97655a5..7c8efa6 100644 --- a/src/store/delivery/getById.js +++ b/src/store/delivery/getById.js @@ -9,7 +9,7 @@ export default function getById(pool) { * * @param {number} googleAuthId - The id of the Google auth user. * @param {number} id - The id of the delivery. - * @returns {Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>} The delivery. + * @returns {Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>} The delivery. * @throws {Error} If the delivery is not found. * * @example diff --git a/src/store/delivery/update.js b/src/store/delivery/update.js index a266940..e4a2ab8 100644 --- a/src/store/delivery/update.js +++ b/src/store/delivery/update.js @@ -25,8 +25,8 @@ export default function update(pool) { * @param {string} [patch.date] - The new delivery date. * @param {number} [patch.supplierId] - The new supplier id. * @param {string} [patch.externalNumber] - The new external (supplier) reference number. - * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>} [patch.lines] - The new delivery lines. - * @returns {Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>} The updated delivery. + * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>} [patch.lines] - The new delivery lines. + * @returns {Promise<{id: number, number: string, type: string, entityId: number, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>} The updated delivery. * @throws {Error} If the delivery is not found. * * @example diff --git a/src/store/manifestLines.js b/src/store/manifestLines.js index c29c9e0..ac18f54 100644 --- a/src/store/manifestLines.js +++ b/src/store/manifestLines.js @@ -5,7 +5,7 @@ import request from './request.js'; * Normalizes and validates an array of manifest line inputs. * * @param {Array} lines - The raw line inputs. - * @returns {Array<{sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>} The normalized lines. + * @returns {Array<{sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>} The normalized lines. * @throws {Error} If the lines are invalid. */ export function normalizeLines(lines) { @@ -28,7 +28,7 @@ export function normalizeLines(lines) { const net = entry?.net; const rebate = entry?.rebate === undefined || entry?.rebate === null ? 0 : entry.rebate; - const tax = entry?.tax; + const taxrate = entry?.taxrate; const comment = entry?.comment === undefined || entry?.comment === null ? null @@ -39,12 +39,12 @@ export function normalizeLines(lines) { !Number.isFinite(amount) || !Number.isFinite(net) || !Number.isFinite(rebate) || - !Number.isFinite(tax) + !Number.isFinite(taxrate) ) { throw new Error('Invalid lines'); } - return { sku, name, pu, amount, net, rebate, tax, comment }; + return { sku, name, pu, amount, net, rebate, taxrate, comment }; }); } @@ -74,7 +74,7 @@ export function parseDate(value) { * @returns {object} The shaped line. */ export function shapeLine(row) { - const tax = Number(row.tax); + const taxrate = Number(row.taxrate); return { id: row.id, sku: row.sku ?? null, @@ -83,7 +83,7 @@ export function shapeLine(row) { amount: row.amount, net: row.net, rebate: row.rebate, - tax, + taxrate, comment: row.comment ?? null, }; } @@ -107,7 +107,7 @@ export async function insertLines( ) { for (const line of lines) { if (ensureTax) { - await ensureTax(line.tax, tx); + await ensureTax(line.taxrate, tx); } await request(pool, tx) @@ -119,7 +119,7 @@ export async function insertLines( .input('net', line.net) .input('comment', line.comment) .input('rebate', line.rebate) - .input('taxrate', line.tax) + .input('taxrate', line.taxrate) .query(CREATE_LINE); } } diff --git a/src/store/order/create.js b/src/store/order/create.js index 99edb66..83da40b 100644 --- a/src/store/order/create.js +++ b/src/store/order/create.js @@ -18,8 +18,8 @@ export default function create(pool) { * @param {string} body.date - The order date. * @param {number} [body.entityId] - The id of the customer entity. * @param {string} [body.externalNumber] - An external (customer) reference number. - * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>} [body.lines] - The order lines. - * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>} The created order. + * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>} [body.lines] - The order lines. + * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>} The created order. * @throws {Error} If the order is invalid. * * @example diff --git a/src/store/order/getById.js b/src/store/order/getById.js index f9c387f..72242d8 100644 --- a/src/store/order/getById.js +++ b/src/store/order/getById.js @@ -10,7 +10,7 @@ export default function getById(pool) { * * @param {number} googleAuthId - The id of the Google auth user. * @param {number} id - The id of the order. - * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>} The order with its lines. + * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>} The order with its lines. * @throws {Error} If the order is not found. * * @example diff --git a/src/store/order/update.js b/src/store/order/update.js index 5329ebc..f87c1de 100644 --- a/src/store/order/update.js +++ b/src/store/order/update.js @@ -24,8 +24,8 @@ export default function update(pool) { * @param {string} [patch.date] - The new order date. * @param {number} [patch.entityId] - The new customer entity id. * @param {string} [patch.externalNumber] - The new external (customer) reference number. - * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>} [patch.lines] - The new order lines. - * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>} The updated order. + * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>} [patch.lines] - The new order lines. + * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>} The updated order. * @throws {Error} If the order is not found. * * @example diff --git a/src/store/quote/create.js b/src/store/quote/create.js index 8786ec7..94ad91f 100644 --- a/src/store/quote/create.js +++ b/src/store/quote/create.js @@ -18,8 +18,8 @@ export default function create(pool) { * @param {string} body.date - The quote date. * @param {number} [body.entityId] - The id of the customer entity. * @param {string} [body.externalNumber] - An external (customer) reference number. - * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>} [body.lines] - The quote lines. - * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>} The created quote. + * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>} [body.lines] - The quote lines. + * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>} The created quote. * @throws {Error} If the quote is invalid. * * @example diff --git a/src/store/quote/getById.js b/src/store/quote/getById.js index ab6562f..9f28768 100644 --- a/src/store/quote/getById.js +++ b/src/store/quote/getById.js @@ -10,7 +10,7 @@ export default function getById(pool) { * * @param {number} googleAuthId - The id of the Google auth user. * @param {number} id - The id of the quote. - * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>} The quote with its lines. + * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>} The quote with its lines. * @throws {Error} If the quote is not found. * * @example diff --git a/src/store/quote/update.js b/src/store/quote/update.js index a1d0eb4..39f300b 100644 --- a/src/store/quote/update.js +++ b/src/store/quote/update.js @@ -24,8 +24,8 @@ export default function update(pool) { * @param {string} [patch.date] - The new quote date. * @param {number} [patch.entityId] - The new customer entity id. * @param {string} [patch.externalNumber] - The new external (customer) reference number. - * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, tax: number, comment?: string|null}>} [patch.lines] - The new quote lines. - * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, tax: number, comment: string|null}>}>} The updated quote. + * @param {Array<{sku?: string, name?: string, pu?: number, amount: number, net: number, rebate?: number, taxrate: number, comment?: string|null}>} [patch.lines] - The new quote lines. + * @returns {Promise<{id: number, number: string, type: string, entityId: number|null, externalNumber: string|null, date: string, lines: Array<{id: number, sku: string|null, name: string|null, pu: number, amount: number, net: number, rebate: number, taxrate: number, comment: string|null}>}>} The updated quote. * @throws {Error} If the quote is not found. * * @example