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

@@ -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
);