diff --git a/src/providers/mssql/queries/article.js b/src/providers/mssql/queries/article.js index 291d580..0a908c8 100644 --- a/src/providers/mssql/queries/article.js +++ b/src/providers/mssql/queries/article.js @@ -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, diff --git a/src/providers/mssql/queries/category.js b/src/providers/mssql/queries/category.js index e45c93f..74b0141 100644 --- a/src/providers/mssql/queries/category.js +++ b/src/providers/mssql/queries/category.js @@ -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 diff --git a/src/providers/sqlite3/queries/category.js b/src/providers/sqlite3/queries/category.js index 90f9047..5f5f50f 100644 --- a/src/providers/sqlite3/queries/category.js +++ b/src/providers/sqlite3/queries/category.js @@ -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, diff --git a/src/providers/sqlite3/queries/translate.js b/src/providers/sqlite3/queries/translate.js index 8df566c..45350ad 100644 --- a/src/providers/sqlite3/queries/translate.js +++ b/src/providers/sqlite3/queries/translate.js @@ -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)') diff --git a/src/store/category/queryCategoryArticles.js b/src/store/category/queryCategoryArticles.js index ed8e063..c169f82 100644 --- a/src/store/category/queryCategoryArticles.js +++ b/src/store/category/queryCategoryArticles.js @@ -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