This commit is contained in:
seb
2026-10-30 15:43:28 +01:00
parent 0fdffb864f
commit a4718d81c0
5 changed files with 32 additions and 0 deletions

View File

@@ -29,6 +29,8 @@ export const ARTICLE_LIST_COLUMNS = `
a.sku,
at.name,
at.slug,
ISNULL(LEN(at.[desc]), 0) AS descLength,
at.seo AS seo,
pr.net,
t.rate AS taxRate,
a.track_stock,

View File

@@ -82,6 +82,16 @@ WHERE ca.category_id = @categoryId
ORDER BY w.sort ASC, w.name ASC, aws.id ASC
`;
export const GET_CATEGORY_ARTICLE_EANS = `
SELECT
ae.article_id AS articleId,
ae.ean
FROM articleean ae
INNER JOIN categoryarticle ca ON ca.article_id = ae.article_id
WHERE ca.category_id = @categoryId
ORDER BY ae.ean ASC
`;
export const CREATE = `
INSERT INTO category (parent_id, sort)
OUTPUT INSERTED.id, INSERTED.parent_id AS parentId, INSERTED.sort

View File

@@ -5,6 +5,7 @@ import { ARTICLE_LIST_COLUMNS, ARTICLE_LIST_JOINS } from './article.js';
const queries = translateQueries(source, 'category');
export const {
CREATE, DELETE, GET_BY_PARENT_AND_NAME,
GET_CATEGORY_ARTICLE_EANS,
GET_CATEGORY_ARTICLE_WAREHOUSE_SUMMARIES,
GET_NEXT_SIBLING_SORT, LIST_CHILD_IDS,
LIST_CHILD_CATEGORIES,

View File

@@ -33,6 +33,7 @@ export function sqliteQuery(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(/\bLEN\s*\(/gi, 'LENGTH(')
.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)")
.replace(/\bCAST\s*\(([^()]+?)\s+AS\s+INT\s*\)/gi, 'CAST($1 AS INTEGER)')

View File

@@ -1,16 +1,19 @@
import {
GET_CATEGORY_ARTICLES as MSSQL_GET,
GET_CATEGORY_ARTICLE_WAREHOUSE_SUMMARIES as MSSQL_SUMMARIES,
GET_CATEGORY_ARTICLE_EANS as MSSQL_EANS,
} from '../../providers/mssql/queries/category.js';
import {
GET_CATEGORY_ARTICLES as SQLITE_GET,
GET_CATEGORY_ARTICLE_WAREHOUSE_SUMMARIES as SQLITE_SUMMARIES,
GET_CATEGORY_ARTICLE_EANS as SQLITE_EANS,
} from '../../providers/sqlite3/queries/category.js';
import makeRunner from '../runner.js';
export default function queryCategoryArticles(provider) {
const sql = provider?.dialect === 'sqlite3' ? SQLITE_GET : MSSQL_GET;
const sqlSummaries = provider?.dialect === 'sqlite3' ? SQLITE_SUMMARIES : MSSQL_SUMMARIES;
const sqlEans = provider?.dialect === 'sqlite3' ? SQLITE_EANS : MSSQL_EANS;
return async ({ categoryId, languageId, posCustomerGroupId }, tx) => {
const runner = makeRunner(provider, tx);
@@ -43,6 +46,19 @@ export default function queryCategoryArticles(provider) {
});
}
const eanResult = await runner.query(sqlEans, { categoryId });
const eanMap = new Map();
for (const e of eanResult.rows) {
let list = eanMap.get(e.articleId);
if (!list) {
list = [];
eanMap.set(e.articleId, list);
}
if (e.ean) {
list.push(e.ean);
}
}
return result.rows.map((row) => {
const {
brandId,
@@ -54,8 +70,10 @@ export default function queryCategoryArticles(provider) {
...rest
} = row;
const summaries = summaryMap.get(row.id) ?? [];
const eans = eanMap.get(row.id) ?? [];
return {
...rest,
eans,
smallThumbW: rest.smallThumbW != null ? Number(rest.smallThumbW) : null,
smallThumbH: rest.smallThumbH != null ? Number(rest.smallThumbH) : null,
smallThumbBinary: rest.smallThumbBinary