This commit is contained in:
seb
2026-10-01 07:12:39 +02:00
parent 9c770d765e
commit 62c3e69ed4
11 changed files with 273 additions and 13 deletions

View File

@@ -8,6 +8,8 @@ import {
INSERT_ROW as SQLITE_INSERT,
GET_VALUE_DETAIL as SQLITE_GET_DETAIL,
} from '../../providers/sqlite3/queries/articleattributevalue.js';
import { INSERT as MSSQL_INSERT_HISTORY } from '../../providers/mssql/queries/articlehistory.js';
import { INSERT as SQLITE_INSERT_HISTORY } from '../../providers/sqlite3/queries/articlehistory.js';
import resolveArticleBySku from '../article/resolveArticleBySku.js';
import makeRunner from '../runner.js';
@@ -17,6 +19,7 @@ export default function setByArticleSku(provider) {
const deleteSql = isSqlite ? SQLITE_DELETE : MSSQL_DELETE;
const insertSql = isSqlite ? SQLITE_INSERT : MSSQL_INSERT;
const getDetailSql = isSqlite ? SQLITE_GET_DETAIL : MSSQL_GET_DETAIL;
const insertHistorySql = isSqlite ? SQLITE_INSERT_HISTORY : MSSQL_INSERT_HISTORY;
/**
* Replaces all attribute values for an article by its SKU.
@@ -34,7 +37,19 @@ export default function setByArticleSku(provider) {
}
const runSet = async (runner) => {
const { articleId, companyId } = await resolve(googleAuthId, sku, runner);
const { articleId, companyId, companyuserId } = await resolve(googleAuthId, sku, runner);
// Read old attribute values for history
const oldAttrRes = await runner.query(
`SELECT aav.attributevalue_id AS attributeValueId, an.name AS attributeName, av.value
FROM articleattributevalue aav
INNER JOIN attributevalue av ON av.id = aav.attributevalue_id
INNER JOIN attributename an ON an.id = av.attributename_id
WHERE aav.article_id = @articleId
ORDER BY aav.sort ASC, aav.id ASC`,
{ articleId },
);
const oldAttrs = oldAttrRes.rows;
const validated = [];
const seenValues = new Set();
@@ -137,6 +152,18 @@ export default function setByArticleSku(provider) {
});
}
// Write history if attribute values changed
const fmtAttr = (a) => `${a.attributeName}: ${a.value}`;
const oldStr = oldAttrs.map(fmtAttr).join(', ');
const newStr = validated.map(fmtAttr).join(', ');
if (oldStr !== newStr) {
await runner.query(insertHistorySql, {
articleId,
companyuserId,
text: `Attributwerte geändert von [${oldStr}] auf [${newStr}]`,
});
}
return inserted;
};