This commit is contained in:
seb
2026-06-24 09:54:34 +02:00
parent 9b11a8a24c
commit b278d3cf92
5 changed files with 39 additions and 31 deletions

View File

@@ -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 = {}) {

View File

@@ -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();

View File

@@ -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<Array<{ kSteuerklasse: number, cName: string, nStandard: number, fSteuersatz: number }>>}
*/
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();

View File

@@ -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);
}