This commit is contained in:
seb
2026-10-25 15:46:58 +01:00
parent c6171a1d90
commit 6b6c473f9d
19 changed files with 597 additions and 108 deletions

View File

@@ -93,6 +93,43 @@ export class MssqlProvider {
#config;
#connecting;
async #tryCreateDatabaseIfMissing() {
if (!this.#config?.database) return false;
const targetDb = String(this.#config.database);
if (targetDb.toLowerCase() === 'master') return false;
const masterConfig = {
...this.#config,
database: 'master',
pool: { min: 0, max: 1, idleTimeoutMillis: 5000 },
};
let masterPool;
try {
masterPool = await new sql.ConnectionPool(masterConfig).connect();
} catch {
return false;
}
try {
const checkReq = masterPool.request();
checkReq.input('dbname', sql.NVarChar, targetDb);
const res = await checkReq.query('SELECT DB_ID(@dbname) AS dbid');
if (res.recordset[0]?.dbid != null) {
return false;
}
const createReq = masterPool.request();
createReq.input('dbname', sql.NVarChar, targetDb);
await createReq.query(
"DECLARE @sql NVARCHAR(MAX) = N'CREATE DATABASE ' + QUOTENAME(@dbname); EXEC sp_executesql @sql;"
);
return true;
} finally {
await masterPool.close();
}
}
/**
* Returns the underlying pool, creating and connecting it on first use
* when the provider was constructed from a config object.
@@ -101,15 +138,26 @@ export class MssqlProvider {
ensurePool() {
if (this.pool.connected) return Promise.resolve(this.pool);
if (!this.#connecting) {
this.#connecting = this.pool
.connect()
.then((pool) => {
return pool;
})
.catch((err) => {
this.#connecting = undefined;
this.#connecting = (async () => {
try {
return await this.pool.connect();
} catch (err) {
if (err.code === 'ELOGIN') {
try {
const created = await this.#tryCreateDatabaseIfMissing();
if (created) {
return await this.pool.connect();
}
} catch {
// ignore creation error and fall through to rethrow original error
}
}
throw err;
});
}
})().catch((err) => {
this.#connecting = undefined;
throw err;
});
}
return this.#connecting;
}

View File

@@ -462,12 +462,12 @@ export const GET_ARTICLE_BY_SKU_FULL = `
co.default_language_id AS languageId,
co.poscustomergroup_id AS posCustomerGroupId,
cu.id AS companyuserId
FROM article a
INNER JOIN company co ON co.id = a.company_id
INNER JOIN google_auth ga ON ga.id = @googleAuthId
INNER JOIN companyuser cu
FROM article a WITH (NOLOCK)
INNER JOIN company co WITH (NOLOCK) ON co.id = a.company_id
INNER JOIN google_auth ga WITH (NOLOCK) ON ga.id = @googleAuthId
INNER JOIN companyuser cu WITH (NOLOCK)
ON cu.company_id = a.company_id AND cu.google_auth_id = @googleAuthId
LEFT JOIN categoryarticle ca ON ca.article_id = a.id
LEFT JOIN categoryarticle ca WITH (NOLOCK) ON ca.article_id = a.id
WHERE a.sku = @sku
AND (ga.selected_company IS NULL OR a.company_id = ga.selected_company)
)
@@ -503,7 +503,7 @@ SELECT
bp.thumbhash AS brandThumbHash,
(
SELECT COUNT(*)
FROM optionslistarticle ola
FROM optionslistarticle ola WITH (NOLOCK)
WHERE ola.optionslist_id = a.optionslist_id
) AS optionsCount,
a.optionslist_id AS optionslistId,
@@ -516,16 +516,16 @@ SELECT
ola.count,
ola.sort,
ola.mandated
FROM optionslistarticle ola
INNER JOIN article a_opt ON a_opt.id = ola.article_id
LEFT JOIN articletext at_opt ON at_opt.article_id = a_opt.id AND at_opt.language_id = auth.languageId
FROM optionslistarticle ola WITH (NOLOCK)
INNER JOIN article a_opt WITH (NOLOCK) ON a_opt.id = ola.article_id
LEFT JOIN articletext at_opt WITH (NOLOCK) ON at_opt.article_id = a_opt.id AND at_opt.language_id = auth.languageId
WHERE ola.optionslist_id = a.optionslist_id
ORDER BY ola.sort ASC, ola.id ASC
FOR JSON PATH
) AS optionslistItemsJson,
(
SELECT COUNT(*)
FROM articlelistarticle ala
FROM articlelistarticle ala WITH (NOLOCK)
WHERE ala.articlelist_id = a.articlelist_id
) AS articleListCount,
a.articlelist_id AS articlelistId,
@@ -537,16 +537,16 @@ SELECT
at_item.name,
ala.count,
ala.sort
FROM articlelistarticle ala
INNER JOIN article a_item ON a_item.id = ala.article_id
LEFT JOIN articletext at_item ON at_item.article_id = a_item.id AND at_item.language_id = auth.languageId
FROM articlelistarticle ala WITH (NOLOCK)
INNER JOIN article a_item WITH (NOLOCK) ON a_item.id = ala.article_id
LEFT JOIN articletext at_item WITH (NOLOCK) ON at_item.article_id = a_item.id AND at_item.language_id = auth.languageId
WHERE ala.articlelist_id = a.articlelist_id
ORDER BY ala.sort ASC, ala.id ASC
FOR JSON PATH
) AS articlelistItemsJson,
(
SELECT COUNT(*)
FROM article child
FROM article child WITH (NOLOCK)
WHERE child.parentarticle_id = a.id
) AS childCount,
a.is_parent AS isParent,
@@ -563,11 +563,11 @@ SELECT
at_child.name,
av.id AS attributeValueId,
av.value AS attributeValue
FROM article child
LEFT JOIN articletext at_child ON at_child.article_id = child.id AND at_child.language_id = auth.languageId
FROM article child WITH (NOLOCK)
LEFT JOIN articletext at_child WITH (NOLOCK) ON at_child.article_id = child.id AND at_child.language_id = auth.languageId
LEFT JOIN (
articleattributevalue aav
INNER JOIN attributevalue av ON av.id = aav.attributevalue_id AND av.attribute_id = a.parentattributename_id
articleattributevalue aav WITH (NOLOCK)
INNER JOIN attributevalue av WITH (NOLOCK) ON av.id = aav.attributevalue_id AND av.attribute_id = a.parentattributename_id
) ON aav.article_id = child.id
WHERE child.parentarticle_id = a.id
ORDER BY child.parentsort ASC, child.id ASC
@@ -575,7 +575,7 @@ SELECT
) AS childrenJson,
(
SELECT ca2.category_id
FROM categoryarticle ca2
FROM categoryarticle ca2 WITH (NOLOCK)
WHERE ca2.article_id = a.id
ORDER BY ca2.category_id
FOR JSON PATH
@@ -590,15 +590,15 @@ SELECT
p.thumbw AS thumbW,
p.thumbh AS thumbH,
p.thumbhash AS thumbHash
FROM articlepic ap
INNER JOIN pic p ON p.id = ap.pic_id
FROM articlepic ap WITH (NOLOCK)
INNER JOIN pic p WITH (NOLOCK) ON p.id = ap.pic_id
WHERE ap.article_id = a.id
ORDER BY ap.sort ASC, ap.id ASC
FOR JSON PATH
) AS photosJson,
(
SELECT ae.ean
FROM articleean ae
FROM articleean ae WITH (NOLOCK)
WHERE ae.article_id = a.id
ORDER BY ae.ean
FOR JSON PATH
@@ -609,8 +609,8 @@ SELECT
pr.net,
t.rate AS taxRate,
pr.customergroup_id AS customergroupId
FROM price pr
INNER JOIN tax t ON t.id = pr.tax_id
FROM price pr WITH (NOLOCK)
INNER JOIN tax t WITH (NOLOCK) ON t.id = pr.tax_id
WHERE pr.article_id = a.id
ORDER BY pr.customergroup_id, pr.minmultiplier
FOR JSON PATH
@@ -632,11 +632,11 @@ SELECT
SELECT
m.[date] AS [date],
SUM(ma.amount - COALESCE(ma_ledger.booked_amount, 0)) AS amount
FROM manifest m
INNER JOIN manifestarticle ma ON ma.manifest_id = m.id
FROM manifest m WITH (NOLOCK)
INNER JOIN manifestarticle ma WITH (NOLOCK) ON ma.manifest_id = m.id
LEFT JOIN (
SELECT manifestarticle_id, SUM(amount) AS booked_amount
FROM ledger
FROM ledger WITH (NOLOCK)
WHERE warehouse_id IS NULL
GROUP BY manifestarticle_id
) ma_ledger ON ma_ledger.manifestarticle_id = ma.id
@@ -651,9 +651,9 @@ SELECT
ORDER BY m.[date] ASC, m.id ASC
FOR JSON PATH
) AS incomingJson
FROM articlesupplier asup
INNER JOIN entity e ON e.id = asup.entity_id
LEFT JOIN tax t ON t.id = asup.tax_id
FROM articlesupplier asup WITH (NOLOCK)
INNER JOIN entity e WITH (NOLOCK) ON e.id = asup.entity_id
LEFT JOIN tax t WITH (NOLOCK) ON t.id = asup.tax_id
WHERE asup.article_id = a.id
ORDER BY asup.sort ASC, asup.id ASC
FOR JSON PATH
@@ -665,21 +665,21 @@ SELECT
w.sort,
CASE
WHEN a.articlelist_id IS NOT NULL AND EXISTS (
SELECT 1 FROM articlelistarticle ala WHERE ala.articlelist_id = a.articlelist_id
SELECT 1 FROM articlelistarticle ala WITH (NOLOCK) WHERE ala.articlelist_id = a.articlelist_id
) THEN COALESCE((
SELECT CASE
WHEN MIN(COALESCE(comp_stock.stock, 0) / ala.count) < 0 THEN 0
ELSE FLOOR(MIN(COALESCE(comp_stock.stock, 0) / ala.count))
END
FROM articlelistarticle ala
FROM articlelistarticle ala WITH (NOLOCK)
LEFT JOIN (
SELECT ca.id AS comp_id, SUM(l.amount) AS stock
FROM ledger l
INNER JOIN manifestarticle ma ON ma.id = l.manifestarticle_id
INNER JOIN manifest m ON m.id = ma.manifest_id
INNER JOIN article ca ON (
FROM ledger l WITH (NOLOCK)
INNER JOIN manifestarticle ma WITH (NOLOCK) ON ma.id = l.manifestarticle_id
INNER JOIN manifest m WITH (NOLOCK) ON m.id = ma.manifest_id
INNER JOIN article ca WITH (NOLOCK) ON (
ma.sku = ca.sku
OR ma.sku IN (SELECT asup.sku FROM articlesupplier asup WHERE asup.article_id = ca.id)
OR ma.sku IN (SELECT asup.sku FROM articlesupplier asup WITH (NOLOCK) WHERE asup.article_id = ca.id)
)
WHERE m.company_id = a.company_id
AND l.warehouse_id = w.id
@@ -690,16 +690,16 @@ SELECT
WHEN a.articlelist_id IS NOT NULL THEN 0
ELSE COALESCE(stock_calc.stock, 0)
END AS stock
FROM warehouse w
FROM warehouse w WITH (NOLOCK)
LEFT JOIN (
SELECT l.warehouse_id, SUM(l.amount) AS stock
FROM ledger l
INNER JOIN manifestarticle ma ON ma.id = l.manifestarticle_id
INNER JOIN manifest m ON m.id = ma.manifest_id
FROM ledger l WITH (NOLOCK)
INNER JOIN manifestarticle ma WITH (NOLOCK) ON ma.id = l.manifestarticle_id
INNER JOIN manifest m WITH (NOLOCK) ON m.id = ma.manifest_id
WHERE m.company_id = a.company_id
AND (
ma.sku = a.sku
OR ma.sku IN (SELECT asup.sku FROM articlesupplier asup WHERE asup.article_id = a.id)
OR ma.sku IN (SELECT asup.sku FROM articlesupplier asup WITH (NOLOCK) WHERE asup.article_id = a.id)
)
GROUP BY l.warehouse_id
) stock_calc ON stock_calc.warehouse_id = w.id
@@ -715,20 +715,20 @@ SELECT
COALESCE(os.customer_name, LTRIM(RTRIM(ISNULL(e.first_name + ' ', '') + ISNULL(e.name, '')))) AS customerName,
ROUND(SUM(ma.amount) - COALESCE((
SELECT SUM(ma_s.amount)
FROM manifest m_s
INNER JOIN manifestarticle ma_s ON ma_s.manifest_id = m_s.id
LEFT JOIN shipmentsummary ss ON ss.manifest_id = m_s.id
FROM manifest m_s WITH (NOLOCK)
INNER JOIN manifestarticle ma_s WITH (NOLOCK) ON ma_s.manifest_id = m_s.id
LEFT JOIN shipmentsummary ss WITH (NOLOCK) ON ss.manifest_id = m_s.id
WHERE m_s.company_id = m.company_id
AND m_s.[type] = 'shipment'
AND ISNULL(ss.state, 'new') != 'cancelled'
AND m_s.[number] NOT LIKE '%#cancelled#%'
AND ma_s.sku = a.sku
AND m_s.[number] LIKE m.[number] + COALESCE((SELECT prefix FROM numbers WHERE company_id = m.company_id AND [type] = 'shipment'), '-L-') + '%'
AND m_s.[number] LIKE m.[number] + COALESCE((SELECT prefix FROM numbers WITH (NOLOCK) WHERE company_id = m.company_id AND [type] = 'shipment'), '-L-') + '%'
), 0), 3) AS amount
FROM manifest m
INNER JOIN manifestarticle ma ON ma.manifest_id = m.id
LEFT JOIN ordersummary os ON os.manifest_id = m.id
LEFT JOIN entity e ON e.id = m.entity_id
FROM manifest m WITH (NOLOCK)
INNER JOIN manifestarticle ma WITH (NOLOCK) ON ma.manifest_id = m.id
LEFT JOIN ordersummary os WITH (NOLOCK) ON os.manifest_id = m.id
LEFT JOIN entity e WITH (NOLOCK) ON e.id = m.entity_id
WHERE m.company_id = a.company_id
AND m.[type] = 'order'
AND ma.sku = a.sku
@@ -736,35 +736,35 @@ SELECT
GROUP BY m.id, m.[number], m.[date], m.company_id, os.customer_name, e.first_name, e.name
HAVING (SUM(ma.amount) - COALESCE((
SELECT SUM(ma_s.amount)
FROM manifest m_s
INNER JOIN manifestarticle ma_s ON ma_s.manifest_id = m_s.id
LEFT JOIN shipmentsummary ss ON ss.manifest_id = m_s.id
FROM manifest m_s WITH (NOLOCK)
INNER JOIN manifestarticle ma_s WITH (NOLOCK) ON ma_s.manifest_id = m_s.id
LEFT JOIN shipmentsummary ss WITH (NOLOCK) ON ss.manifest_id = m_s.id
WHERE m_s.company_id = m.company_id
AND m_s.[type] = 'shipment'
AND ISNULL(ss.state, 'new') != 'cancelled'
AND m_s.[number] NOT LIKE '%#cancelled#%'
AND ma_s.sku = a.sku
AND m_s.[number] LIKE m.[number] + COALESCE((SELECT prefix FROM numbers WHERE company_id = m.company_id AND [type] = 'shipment'), '-L-') + '%'
AND m_s.[number] LIKE m.[number] + COALESCE((SELECT prefix FROM numbers WITH (NOLOCK) WHERE company_id = m.company_id AND [type] = 'shipment'), '-L-') + '%'
), 0)) > 0
ORDER BY m.[date] ASC, m.id ASC
FOR JSON PATH
) AS undeliveredOrdersJson
FROM article a
LEFT JOIN articletext at
FROM article a WITH (NOLOCK)
LEFT JOIN articletext at WITH (NOLOCK)
ON at.article_id = a.id AND at.language_id = auth.languageId
LEFT JOIN unit u ON u.id = a.unit_id
LEFT JOIN unittext ut
LEFT JOIN unit u WITH (NOLOCK) ON u.id = a.unit_id
LEFT JOIN unittext ut WITH (NOLOCK)
ON ut.unit_id = u.id AND ut.language_id = auth.languageId
LEFT JOIN brand b ON b.id = a.brand_id
LEFT JOIN brand b WITH (NOLOCK) ON b.id = a.brand_id
OUTER APPLY (
SELECT TOP 1 bp2.pic_id
FROM brandpic bp2
FROM brandpic bp2 WITH (NOLOCK)
WHERE bp2.brand_id = b.id
ORDER BY bp2.sort ASC, bp2.id ASC
) first_brand_pic
LEFT JOIN pic bp ON bp.id = first_brand_pic.pic_id
LEFT JOIN article fa ON fa.id = a.parentarticle_id
LEFT JOIN attributename fan ON fan.id = a.parentattributename_id
LEFT JOIN pic bp WITH (NOLOCK) ON bp.id = first_brand_pic.pic_id
LEFT JOIN article fa WITH (NOLOCK) ON fa.id = a.parentarticle_id
LEFT JOIN attributename fan WITH (NOLOCK) ON fan.id = a.parentattributename_id
WHERE a.id = auth.articleId
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
) AS articleJson

View File

@@ -3,6 +3,7 @@ SELECT
ma.id,
ma.sku,
ma.amount AS lineAmount,
ma.pu AS linePu,
ma.net,
ma.rebate,
ma.taxrate,
@@ -67,7 +68,7 @@ SELECT TOP 1
hash_version,
prev_hash,
created_at
FROM ledger WITH (UPDLOCK, HOLDLOCK)
FROM ledger WITH (UPDLOCK, ROWLOCK)
ORDER BY id DESC;
`;

View File

@@ -158,22 +158,61 @@ SELECT
a.id,
a.is_parent AS isParent,
COALESCE(
(SELECT at.name FROM articletext at WHERE at.article_id = a.id AND at.language_id = co.default_language_id),
(SELECT MIN(at2.name) FROM articletext at2 WHERE at2.article_id = a.id),
(SELECT at.name FROM articletext at WITH (NOLOCK) WHERE at.article_id = a.id AND at.language_id = co.default_language_id),
(SELECT MIN(at2.name) FROM articletext at2 WITH (NOLOCK) WHERE at2.article_id = a.id),
a.sku
) AS articleName,
COALESCE(
(SELECT MIN(asup.pu) FROM articlesupplier asup WHERE asup.article_id = a.id AND asup.sku = @sku),
(SELECT MIN(asup2.pu) FROM articlesupplier asup2 WHERE asup2.article_id = a.id),
(SELECT MIN(asup.pu) FROM articlesupplier asup WITH (NOLOCK) WHERE asup.article_id = a.id AND asup.sku = @sku),
(SELECT MIN(asup2.pu) FROM articlesupplier asup2 WITH (NOLOCK) WHERE asup2.article_id = a.id),
a.unitamount,
1
) AS pu
FROM article a
INNER JOIN manifest m ON m.company_id = a.company_id
INNER JOIN company co ON co.id = m.company_id
FROM article a WITH (NOLOCK)
INNER JOIN manifest m WITH (NOLOCK) ON m.company_id = a.company_id
INNER JOIN company co WITH (NOLOCK) ON co.id = m.company_id
WHERE m.id = @manifestId
AND (a.sku = @sku OR EXISTS (
SELECT 1 FROM articlesupplier asup WHERE asup.article_id = a.id AND asup.sku = @sku
SELECT 1 FROM articlesupplier asup WITH (NOLOCK) WHERE asup.article_id = a.id AND asup.sku = @sku
))
`;
export const GET_MANIFEST_CONTEXT = `
SELECT
m.id,
m.company_id AS companyId,
m.[type] AS [type],
m.entity_id AS entityId,
e.name AS entityName
FROM manifest m
LEFT JOIN entity e ON e.id = m.entity_id
WHERE m.id = @manifestId
`;
export const GET_ARTICLE_SUPPLIER_LINK = `
SELECT
asup.id,
asup.article_id AS articleId,
asup.entity_id AS entityId,
asup.sku,
asup.pu,
asup.net,
asup.tax_id AS taxId,
t.rate AS taxRate,
e.name AS supplierName
FROM articlesupplier asup
LEFT JOIN entity e ON e.id = asup.entity_id
LEFT JOIN tax t ON t.id = asup.tax_id
WHERE asup.article_id = @articleId
AND asup.entity_id = @entityId
`;
export const UPDATE_ARTICLE_SUPPLIER_LINK = `
UPDATE articlesupplier
SET
pu = @pu,
net = @net,
tax_id = @taxId
WHERE id = @id
`;

View File

@@ -360,6 +360,16 @@ BEGIN
ALTER TABLE article ADD track_stock BIT NOT NULL CONSTRAINT DF_article_track_stock DEFAULT 0;
END
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_article_sku' AND object_id = OBJECT_ID('article'))
BEGIN
CREATE NONCLUSTERED INDEX IX_article_sku ON article (sku);
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_article_parentarticle_id' AND object_id = OBJECT_ID('article'))
BEGIN
CREATE NONCLUSTERED INDEX IX_article_parentarticle_id ON article (parentarticle_id);
END
`;
export const INIT_ARTICLEHISTORY = `
@@ -624,6 +634,18 @@ BEGIN
CREATE INDEX IX_articlesupplier_article_entity
ON articlesupplier (article_id, entity_id);
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_articlesupplier_sku' AND object_id = OBJECT_ID('articlesupplier'))
BEGIN
CREATE NONCLUSTERED INDEX IX_articlesupplier_sku
ON articlesupplier (sku, article_id);
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_articlesupplier_entity' AND object_id = OBJECT_ID('articlesupplier'))
BEGIN
CREATE NONCLUSTERED INDEX IX_articlesupplier_entity
ON articlesupplier (entity_id);
END
`;
export const INIT_MANIFEST = `
@@ -648,6 +670,12 @@ BEGIN
CREATE UNIQUE NONCLUSTERED INDEX UQ_manifest_company_type_number
ON manifest (company_id, [type], [number]);
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_manifest_entity_id' AND object_id = OBJECT_ID('manifest'))
BEGIN
CREATE NONCLUSTERED INDEX IX_manifest_entity_id
ON manifest (entity_id);
END
`;
export const INIT_MANIFESTARTICLE = `
@@ -668,6 +696,18 @@ BEGIN
CONSTRAINT FK_manifestarticle_manifest FOREIGN KEY (manifest_id) REFERENCES manifest(id) ON DELETE CASCADE
);
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_manifestarticle_manifest_id' AND object_id = OBJECT_ID('manifestarticle'))
BEGIN
CREATE NONCLUSTERED INDEX IX_manifestarticle_manifest_id
ON manifestarticle (manifest_id);
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_manifestarticle_sku' AND object_id = OBJECT_ID('manifestarticle'))
BEGIN
CREATE NONCLUSTERED INDEX IX_manifestarticle_sku
ON manifestarticle (sku);
END
`;
@@ -706,6 +746,18 @@ BEGIN
CONSTRAINT FK_ledger_warehouse FOREIGN KEY (warehouse_id) REFERENCES warehouse(id) ON DELETE NO ACTION
) WITH (LEDGER = ON (APPEND_ONLY = ON));
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ledger_manifestarticle_warehouse' AND object_id = OBJECT_ID('ledger'))
BEGIN
CREATE NONCLUSTERED INDEX IX_ledger_manifestarticle_warehouse
ON ledger (manifestarticle_id, warehouse_id);
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_ledger_warehouse_id' AND object_id = OBJECT_ID('ledger'))
BEGIN
CREATE NONCLUSTERED INDEX IX_ledger_warehouse_id
ON ledger (warehouse_id);
END
`;
export const INIT_NUMBERS = `
@@ -1146,6 +1198,12 @@ BEGIN
CONSTRAINT FK_payment_manifest FOREIGN KEY (manifest_id) REFERENCES manifest(id) ON DELETE CASCADE
);
END
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE name = 'IX_payment_manifest_id' AND object_id = OBJECT_ID('payment'))
BEGIN
CREATE NONCLUSTERED INDEX IX_payment_manifest_id
ON payment (manifest_id);
END
`;
export const INIT_CARRIER = `

View File

@@ -3,6 +3,7 @@ SELECT
ma.id,
ma.sku,
ma.amount AS lineAmount,
ma.pu AS linePu,
ma.net,
ma.rebate,
ma.taxrate,

View File

@@ -4,8 +4,8 @@ import { translateQueries } from './translate.js';
const queries = translateQueries(source, 'manifestDoc');
export const {
CHECK_ARTICLE_IS_PARENT, COUNT_MANIFESTS, CREATE_LINE, CREATE_MANIFEST, DELETE_LINES_BY_MANIFEST,
DELETE_MANIFEST, GET_MANIFEST_HEADER, GET_MANIFEST_LINES, LIST_MANIFESTS,
ORDER_TYPE, QUOTE_TYPE, UPDATE_MANIFEST,
DELETE_MANIFEST, GET_ARTICLE_SUPPLIER_LINK, GET_MANIFEST_CONTEXT, GET_MANIFEST_HEADER,
GET_MANIFEST_LINES, LIST_MANIFESTS, ORDER_TYPE, QUOTE_TYPE, UPDATE_ARTICLE_SUPPLIER_LINK, UPDATE_MANIFEST,
} = queries;
export const LIST_MANIFESTS_PAGED = `

View File

@@ -31,6 +31,7 @@ export function sqliteQuery(sql) {
if (typeof sql !== 'string') return sql;
let result = quoteIdentifiers(sql)
.replace(/\bWITH\s*\(\s*(?:NOLOCK|UPDLOCK|ROWLOCK|HOLDLOCK|READPAST)(?:\s*,\s*(?:NOLOCK|UPDLOCK|ROWLOCK|HOLDLOCK|READPAST))*\s*\)/gi, '')
.replace(/\bISNULL\s*\(/gi, 'IFNULL(')
.replace(/\bSYSUTCDATETIME\s*\(\s*\)/gi, "strftime('%Y-%m-%dT%H:%M:%fZ', 'now')")
.replace(/\bDATEDIFF_BIG\s*\(\s*second\s*,\s*'1970-01-01'\s*,\s*([^)]+?)\s*\)/gi, "CAST(strftime('%s', $1) AS INTEGER)")

View File

@@ -243,6 +243,8 @@ CREATE TABLE IF NOT EXISTS article (
CREATE UNIQUE INDEX IF NOT EXISTS UQ_article_parentarticle_parentsort
ON article(parentarticle_id, parentsort)
WHERE parentarticle_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS IX_article_sku ON article (sku);
CREATE INDEX IF NOT EXISTS IX_article_parentarticle_id ON article (parentarticle_id);
`;
export const INIT_ARTICLEEAN = `
@@ -417,6 +419,10 @@ CREATE TABLE IF NOT EXISTS articlesupplier (
);
CREATE INDEX IF NOT EXISTS IX_articlesupplier_article_entity
ON articlesupplier(article_id, entity_id);
CREATE INDEX IF NOT EXISTS IX_articlesupplier_sku
ON articlesupplier(sku, article_id);
CREATE INDEX IF NOT EXISTS IX_articlesupplier_entity
ON articlesupplier(entity_id);
`;
export const INIT_MANIFEST = `
@@ -434,6 +440,8 @@ CREATE TABLE IF NOT EXISTS manifest (
);
CREATE UNIQUE INDEX IF NOT EXISTS UQ_manifest_company_type_number
ON manifest (company_id, "type", "number");
CREATE INDEX IF NOT EXISTS IX_manifest_entity_id
ON manifest (entity_id);
`;
export const INIT_MANIFESTARTICLE = `
@@ -451,6 +459,10 @@ CREATE TABLE IF NOT EXISTS manifestarticle (
shippable INTEGER NOT NULL DEFAULT 1,
FOREIGN KEY (manifest_id) REFERENCES manifest(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS IX_manifestarticle_manifest_id
ON manifestarticle (manifest_id);
CREATE INDEX IF NOT EXISTS IX_manifestarticle_sku
ON manifestarticle (sku);
`;
export const INIT_WAREHOUSE = `
@@ -479,6 +491,10 @@ CREATE TABLE IF NOT EXISTS ledger (
FOREIGN KEY (manifestarticle_id) REFERENCES manifestarticle(id) ON DELETE NO ACTION,
FOREIGN KEY (warehouse_id) REFERENCES warehouse(id) ON DELETE NO ACTION
);
CREATE INDEX IF NOT EXISTS IX_ledger_manifestarticle_warehouse
ON ledger (manifestarticle_id, warehouse_id);
CREATE INDEX IF NOT EXISTS IX_ledger_warehouse_id
ON ledger (warehouse_id);
`;
export const INIT_NUMBERS = `
@@ -817,6 +833,8 @@ CREATE TABLE IF NOT EXISTS payment (
FOREIGN KEY (account_id) REFERENCES account(id) ON DELETE CASCADE,
FOREIGN KEY (manifest_id) REFERENCES manifest(id) ON DELETE CASCADE
);
CREATE INDEX IF NOT EXISTS IX_payment_manifest_id
ON payment (manifest_id);
`;
export const INIT_CARRIER = `