feat(schema): add articlesupplier table and manifestarticle custom sku/name fields
This commit is contained in:
22
README.md
22
README.md
@@ -285,6 +285,22 @@ Suppliers are `entity` rows in the company `customergroup` named `Lieferanten` (
|
||||
|
||||
---
|
||||
|
||||
## `articlesupplier`
|
||||
|
||||
Maps articles to suppliers (`entity`) with purchase pricing, stock, packaging unit, and supplier SKU:
|
||||
|
||||
| Column | Type | Constraints / Description |
|
||||
| --- | --- | --- |
|
||||
| `id` | `INT` | Primary Key (`IDENTITY(1,1)`) |
|
||||
| `article_id` | `INT` | FK → `article(id)` (`ON DELETE CASCADE`) |
|
||||
| `entity_id` | `INT` | FK → `entity(id)` (`ON DELETE CASCADE`) |
|
||||
| `price_id` | `INT` | FK → `price(id)` (`ON DELETE NO ACTION`), nullable |
|
||||
| `SupplierSKU` | `NVARCHAR(100)` | Supplier's SKU code, nullable |
|
||||
| `SupplierStock` | `FLOAT` | Stock available at supplier, nullable |
|
||||
| `pu` | `FLOAT` | Packaging unit (Verpackungseinheit), default `1` |
|
||||
|
||||
---
|
||||
|
||||
## `delivery`
|
||||
|
||||
Company-scoped goods receipts on `manifest` / `manifestarticle` with fixed `type = 'delivery'`. Auth via selected company (`google_auth.selected_company` + membership). `manifest.company_id` scopes the list (`ON DELETE NO ACTION` — avoid SQL Server multiple cascade paths with `entity_id`).
|
||||
@@ -311,6 +327,8 @@ type DeliveryLine = {
|
||||
id: number,
|
||||
articleId: number | null,
|
||||
sku: string | null,
|
||||
customsku: string | null,
|
||||
customname: string | null,
|
||||
amount: number,
|
||||
net: number,
|
||||
rebate: number,
|
||||
@@ -321,7 +339,7 @@ type DeliveryLine = {
|
||||
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 `sku` (resolved in the company category tree → `Article not found`), `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` (resolved in the company category tree → `Article not found`; `customsku` and `customname` forced `null`) or custom line fields (`customsku` / `customname` with `articleId` set to `null`). If `article_id` is set, `customsku` and `customname` must be null (`CK_manifestarticle_article_or_custom`). `amount`, `net`, `tax` (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`.
|
||||
|
||||
@@ -635,7 +653,7 @@ Auth via the article's `categoryarticle` category + `resolveCategoryAccess`. Err
|
||||
|
||||
`orderImages` sets `articlepic.sort` to `0..n-1` in the given order. `fullHashes` must list every image of the article exactly once. Errors: `Article not found`, `Invalid image order`, `Not authorized`.
|
||||
|
||||
`delete` removes the article when it has no child articles (`fatherarticle_id` FK is `ON DELETE NO ACTION`). Cascades: `articlehistory`, `articleean`, `categoryarticle`, `price`, `articletext`, `articlelistarticle`, `optionslistarticle`, `articlepic`; deletes linked `pic` rows and owned `articlelist` / `optionslist`. `manifestarticle.article_id` is set to `NULL` and `comment` gets `article <name> deleted` appended. Errors: `Article not found`, `Article has children`, `Not authorized`.
|
||||
`delete` removes the article when it has no child articles (`fatherarticle_id` FK is `ON DELETE NO ACTION`). Cascades: `articlehistory`, `articleean`, `categoryarticle`, `price`, `articlesupplier`, `articletext`, `articlelistarticle`, `optionslistarticle`, `articlepic`; deletes linked `pic` rows and owned `articlelist` / `optionslist`. `manifestarticle.article_id` is set to `NULL` and `comment` gets `article <name> deleted` appended. Errors: `Article not found`, `Article has children`, `Not authorized`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user