diff --git a/scripts/searchArticles.js b/scripts/searchArticles.js index b4b2dbe..040ebbf 100644 --- a/scripts/searchArticles.js +++ b/scripts/searchArticles.js @@ -5,7 +5,7 @@ import chalk from 'chalk'; import { getArticle } from '../src/services/article/getArticle.js'; import { searchArticles } from '../src/services/article/searchArticles.js'; import { closePool } from '../src/db/mssqlClient.js'; -import { bruttoFromNetto, loadSteuerklassen } from '../src/services/misc/steuerklassen.js'; +import { bruttoFromNetto, loadSteuerklassen } from '../src/services/misc/getSteuer.js'; import '../src/config/env.js'; diff --git a/src/services/article/getArticle.js b/src/services/article/getArticle.js index 262290c..33c08e3 100644 --- a/src/services/article/getArticle.js +++ b/src/services/article/getArticle.js @@ -1,7 +1,7 @@ import env from '../../config/env.js'; import { getPool } from '../../db/mssqlClient.js'; import { enrichSupplierAnmerkungRow } from './enrichSupplier.js'; -import { bruttoFromNetto, loadSteuerklassen } from '../misc/steuerklassen.js'; +import { bruttoFromNetto, loadSteuerklassen } from '../misc/getSteuer.js'; import * as Q from '../../db/mssql/getArticle.js'; async function query(pool, sql, inputs = {}) { diff --git a/src/services/misc/getCategories.js b/src/services/misc/getCategories.js index 8954a8f..729a063 100644 --- a/src/services/misc/getCategories.js +++ b/src/services/misc/getCategories.js @@ -46,6 +46,10 @@ function buildCategoryTree(rows) { return roots; } +/** + * Loads the full JTL category list with per-category article counts and a nested tree. + * @returns {Promise<{ categories: Array<{ kKategorie: number, kOberKategorie: number, nSort: number, cName: string|null, count: number }>, tree: object[] }>} + */ export async function getCategories() { const pool = await getPool(); diff --git a/src/services/misc/getSteuer.js b/src/services/misc/getSteuer.js index e10f23b..f86d199 100644 --- a/src/services/misc/getSteuer.js +++ b/src/services/misc/getSteuer.js @@ -1,4 +1,36 @@ -import { loadSteuerklassen } from './steuerklassen.js'; +import { getPool } from '../../db/mssqlClient.js'; +import { LOAD_STEUERKLASSEN } from '../../db/mssql/steuer.js'; + +let cache; + +/** + * Loads JTL tax classes with domestic VAT rates (`tSteuerklasse` / `tSteuersatz`). + * Results are cached for the process lifetime. + * @returns {Promise>} + */ +export async function loadSteuerklassen() { + if (cache) { + return cache; + } + + const pool = await getPool(); + const result = await pool.request().query(LOAD_STEUERKLASSEN); + cache = result.recordset.map((row) => ({ + kSteuerklasse: row.kSteuerklasse, + cName: row.cName, + nStandard: row.nStandard, + fSteuersatz: row.fSteuersatz, + })); + return cache; +} + +export function bruttoFromNetto(netto, kSteuerklasse, steuerklassen) { + const row = steuerklassen.find((item) => item.kSteuerklasse === kSteuerklasse); + if (row == null || netto == null) { + return null; + } + return netto * (1 + row.fSteuersatz / 100); +} export async function getSteuer() { const steuerklassen = await loadSteuerklassen(); diff --git a/src/services/misc/steuerklassen.js b/src/services/misc/steuerklassen.js deleted file mode 100644 index 263c6a3..0000000 --- a/src/services/misc/steuerklassen.js +++ /dev/null @@ -1,28 +0,0 @@ -import { getPool } from '../../db/mssqlClient.js'; -import { LOAD_STEUERKLASSEN } from '../../db/mssql/steuer.js'; - -let cache; - -export async function loadSteuerklassen() { - if (cache) { - return cache; - } - - const pool = await getPool(); - const result = await pool.request().query(LOAD_STEUERKLASSEN); - cache = result.recordset.map((row) => ({ - kSteuerklasse: row.kSteuerklasse, - cName: row.cName, - nStandard: row.nStandard, - fSteuersatz: row.fSteuersatz, - })); - return cache; -} - -export function bruttoFromNetto(netto, kSteuerklasse, steuerklassen) { - const row = steuerklassen.find((item) => item.kSteuerklasse === kSteuerklasse); - if (row == null || netto == null) { - return null; - } - return netto * (1 + row.fSteuersatz / 100); -}