This commit is contained in:
seb
2026-09-27 21:01:30 +02:00
parent f9c570a036
commit 0cafa11a32
34 changed files with 2010 additions and 1534 deletions

View File

@@ -31,6 +31,7 @@ export const ARTICLE_LIST_COLUMNS = `
at.slug,
pr.net,
t.rate AS taxRate,
a.track_stock,
CASE
WHEN a.optionslist_id IS NOT NULL THEN (
SELECT COUNT(*)
@@ -133,6 +134,12 @@ SET weight = @weight
WHERE id = @articleId
`;
export const UPDATE_TRACK_STOCK = `
UPDATE article
SET track_stock = @trackStock
WHERE id = @articleId
`;
export const UPDATE_BRAND = `
UPDATE article
SET brand_id = @brandId
@@ -158,9 +165,9 @@ WHERE id = @articleId
`;
export const CREATE = `
INSERT INTO article (company_id, sku, unit_id, unitamount, weight)
INSERT INTO article (company_id, sku, unit_id, unitamount, weight, track_stock)
OUTPUT INSERTED.id
VALUES (@companyId, @sku, @unitId, @unitamount, @weight)
VALUES (@companyId, @sku, @unitId, @unitamount, @weight, @trackStock)
`;
export const DELETE_EANS_BY_ARTICLE = `
@@ -287,6 +294,7 @@ SELECT
u.si AS unitSi,
ut.symbol AS unitSymbol,
a.unitamount,
a.track_stock,
b.name AS brandName,
b.name AS brandName,
pr.net AS net,
@@ -371,6 +379,7 @@ SELECT
at.slug,
a.unitamount,
a.weight,
a.track_stock,
u.si AS unitSi,
u.basesi AS unitBasesi,
u.basesifactor AS unitBasesifactor,
@@ -467,6 +476,7 @@ SELECT
SELECT
w.id,
w.name,
w.sort,
COALESCE(stock_calc.stock, 0) AS stock
FROM warehouse w
LEFT JOIN (
@@ -482,7 +492,7 @@ SELECT
GROUP BY l.warehouse_id
) stock_calc ON stock_calc.warehouse_id = w.id
WHERE w.company_id = a.company_id
ORDER BY w.name ASC
ORDER BY w.sort ASC, w.name ASC
FOR JSON PATH
) AS warehousesJson
FROM article a

View File

@@ -5,6 +5,7 @@ export const ARTICLE_DETAIL_COLUMNS = `
at.slug,
a.unitamount,
a.weight,
a.track_stock,
u.si AS unitSi,
u.basesi AS unitBasesi,
u.basesifactor AS unitBasesifactor,

View File

@@ -2,17 +2,19 @@ export const LIST_BY_COMPANY = `
SELECT
id,
company_id,
name
name,
sort
FROM warehouse
WHERE company_id = @companyId
ORDER BY name ASC;
ORDER BY sort ASC, name ASC;
`;
export const GET_BY_COMPANY_AND_ID = `
SELECT
id,
company_id,
name
name,
sort
FROM warehouse
WHERE id = @id AND company_id = @companyId;
`;
@@ -21,20 +23,39 @@ export const GET_BY_COMPANY_AND_NAME = `
SELECT
id,
company_id,
name
name,
sort
FROM warehouse
WHERE company_id = @companyId AND name = @name;
`;
export const GET_NEXT_SORT = `
SELECT ISNULL(MAX(sort), -1) + 1 AS sort
FROM warehouse
WHERE company_id = @companyId;
`;
export const CREATE = `
INSERT INTO warehouse (company_id, name)
OUTPUT INSERTED.id, INSERTED.company_id, INSERTED.name
VALUES (@companyId, @name);
INSERT INTO warehouse (company_id, name, sort)
OUTPUT INSERTED.id, INSERTED.company_id, INSERTED.name, INSERTED.sort
VALUES (@companyId, @name, @sort);
`;
export const UPDATE_BY_ID = `
UPDATE warehouse
SET name = @name
SET name = @name, sort = @sort
WHERE id = @id AND company_id = @companyId;
`;
export const LIST_IDS_BY_COMPANY = `
SELECT id
FROM warehouse
WHERE company_id = @companyId;
`;
export const UPDATE_SORT = `
UPDATE warehouse
SET sort = @sort
WHERE id = @id AND company_id = @companyId;
`;

View File

@@ -317,6 +317,7 @@ BEGIN
unit_id INT NOT NULL,
unitamount FLOAT NOT NULL,
weight FLOAT NOT NULL,
track_stock BIT NOT NULL CONSTRAINT DF_article_track_stock DEFAULT 1,
brand_id INT NULL,
articlelist_id INT NULL,
optionslist_id INT NULL,
@@ -340,6 +341,10 @@ BEGIN
ON article (fatherarticle_id, fathersort)
WHERE fatherarticle_id IS NOT NULL;
END
ELSE IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('article') AND name = 'track_stock')
BEGIN
ALTER TABLE article ADD track_stock BIT NOT NULL CONSTRAINT DF_article_track_stock DEFAULT 1;
END
`;
export const INIT_ARTICLEHISTORY = `
@@ -599,10 +604,15 @@ BEGIN
id INT IDENTITY(1,1) PRIMARY KEY,
company_id INT NOT NULL,
name NVARCHAR(255) NOT NULL,
sort INT NOT NULL CONSTRAINT DF_warehouse_sort DEFAULT 0,
CONSTRAINT FK_warehouse_company FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE,
CONSTRAINT UQ_warehouse_company_name UNIQUE (company_id, name)
);
END
ELSE IF NOT EXISTS (SELECT * FROM sys.columns WHERE object_id = OBJECT_ID('warehouse') AND name = 'sort')
BEGIN
ALTER TABLE warehouse ADD sort INT NOT NULL CONSTRAINT DF_warehouse_sort DEFAULT 0;
END
`;
export const INIT_LEDGER = `

View File

@@ -399,6 +399,20 @@ export class BetterSqlite3Provider extends BetterSqlite3Executor {
`ALTER TABLE ledger ADD COLUMN warehouse_id INTEGER REFERENCES warehouse(id) ON DELETE NO ACTION`,
);
}
const articleCols = this.db.pragma('table_info("article")').map((c) => c.name);
if (articleCols.length > 0 && !articleCols.includes('track_stock')) {
this.db.exec(
`ALTER TABLE article ADD COLUMN track_stock INTEGER NOT NULL DEFAULT 1`,
);
}
const warehouseCols = this.db.pragma('table_info("warehouse")').map((c) => c.name);
if (warehouseCols.length > 0 && !warehouseCols.includes('sort')) {
this.db.exec(
`ALTER TABLE warehouse ADD COLUMN sort INTEGER NOT NULL DEFAULT 0`,
);
}
} catch {
// ignore
}

View File

@@ -8,7 +8,7 @@ export const {
GET_BRAND_BY_COMPANY_AND_ID,
GET_CATEGORY_ID_BY_SKU, GET_CATEGORY_TREE_FLAT, GET_ID_BY_SKU,
SET_FATHER_SORT,
SET_IS_FATHER, UPDATE_BRAND, UPDATE_FATHER_BY_SKU, UPDATE_UNIT,
SET_IS_FATHER, UPDATE_BRAND, UPDATE_FATHER_BY_SKU, UPDATE_TRACK_STOCK, UPDATE_UNIT,
UPDATE_UNITAMOUNT, UPDATE_UNIT_AND_AMOUNT, UPDATE_WEIGHT,
} = queries;
@@ -83,7 +83,7 @@ WITH RECURSIVE category_tree AS (
INNER JOIN category_tree ct ON c.parent_id = ct.id
)
SELECT DISTINCT a.id, a.sku, at.name, at.slug, u.si AS unitSi,
ut.symbol AS unitSymbol, a.unitamount, b.name AS brandName,
ut.symbol AS unitSymbol, a.unitamount, a.track_stock, b.name AS brandName,
pr.net, t.rate AS taxRate,
${JSON_EANS} AS eansJson,
${JSON_CATEGORIES} AS categoryIdsJson,
@@ -122,6 +122,7 @@ SELECT auth.*,
json_object(
'id', a.id, 'sku', a.sku, 'name', at.name, 'slug', at.slug,
'unitamount', a.unitamount, 'weight', a.weight,
'track_stock', a.track_stock,
'unitSi', u.si, 'unitBasesi', u.basesi,
'unitBasesifactor', u.basesifactor, 'unitSymbol', ut.symbol,
'unitName', ut.name,
@@ -169,7 +170,7 @@ SELECT auth.*,
WHERE s.article_id = a.id ORDER BY s.sort, s.id
))),
'warehousesJson', json((SELECT COALESCE(json_group_array(json_object(
'id', w.id, 'name', w.name, 'stock', COALESCE(stock_calc.stock, 0)
'id', w.id, 'name', w.name, 'sort', w.sort, 'stock', COALESCE(stock_calc.stock, 0)
)), '[]') FROM warehouse w
LEFT JOIN (
SELECT l.warehouse_id, SUM(l.amount) AS stock
@@ -184,7 +185,7 @@ SELECT auth.*,
GROUP BY l.warehouse_id
) stock_calc ON stock_calc.warehouse_id = w.id
WHERE w.company_id = a.company_id
ORDER BY w.name ASC))
ORDER BY w.sort ASC, w.name ASC))
) AS articleJson
FROM auth
INNER JOIN article a ON a.id = auth.articleId

View File

@@ -2,17 +2,19 @@ export const LIST_BY_COMPANY = `
SELECT
id,
company_id,
name
name,
sort
FROM warehouse
WHERE company_id = @companyId
ORDER BY name ASC;
ORDER BY sort ASC, name ASC;
`;
export const GET_BY_COMPANY_AND_ID = `
SELECT
id,
company_id,
name
name,
sort
FROM warehouse
WHERE id = @id AND company_id = @companyId;
`;
@@ -21,20 +23,39 @@ export const GET_BY_COMPANY_AND_NAME = `
SELECT
id,
company_id,
name
name,
sort
FROM warehouse
WHERE company_id = @companyId AND name = @name;
`;
export const GET_NEXT_SORT = `
SELECT IFNULL(MAX(sort), -1) + 1 AS sort
FROM warehouse
WHERE company_id = @companyId;
`;
export const CREATE = `
INSERT INTO warehouse (company_id, name)
VALUES (@companyId, @name)
RETURNING id, company_id, name;
INSERT INTO warehouse (company_id, name, sort)
VALUES (@companyId, @name, @sort)
RETURNING id, company_id, name, sort;
`;
export const UPDATE_BY_ID = `
UPDATE warehouse
SET name = @name
SET name = @name, sort = @sort
WHERE id = @id AND company_id = @companyId;
`;
export const LIST_IDS_BY_COMPANY = `
SELECT id
FROM warehouse
WHERE company_id = @companyId;
`;
export const UPDATE_SORT = `
UPDATE warehouse
SET sort = @sort
WHERE id = @id AND company_id = @companyId;
`;

View File

@@ -216,6 +216,7 @@ CREATE TABLE IF NOT EXISTS article (
unit_id INTEGER NOT NULL,
unitamount REAL NOT NULL,
weight REAL NOT NULL,
track_stock INTEGER NOT NULL DEFAULT 1,
brand_id INTEGER,
articlelist_id INTEGER,
optionslist_id INTEGER,
@@ -431,6 +432,7 @@ CREATE TABLE IF NOT EXISTS warehouse (
id INTEGER PRIMARY KEY,
company_id INTEGER NOT NULL,
name TEXT NOT NULL COLLATE NOCASE,
sort INTEGER NOT NULL DEFAULT 0,
UNIQUE (company_id, name),
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE
);