Files
dashlibstorage/src/store/company/update.js
2026-07-31 05:57:23 +02:00

64 lines
1.7 KiB
JavaScript

import sql from 'mssql';
import { UPDATE } from '../../sql/company.js';
import getById from './getById.js';
import getByName from './getByName.js';
import langEnsure from '../lang/ensure.js';
import taxEnsure from '../tax/ensure.js';
import request from '../request.js';
export default function update(pool) {
const byId = getById(pool);
const byName = getByName(pool);
const ensureLang = langEnsure(pool);
const ensureTax = taxEnsure(pool);
return async (id, { iso639, name, taxrate, reducedtaxrate }) => {
const tx = new sql.Transaction(pool);
await tx.begin();
try {
const company = await byId(id, tx);
if (!company) {
throw new Error('Company not found');
}
if (name !== company.name) {
const taken = await byName(name, tx);
if (taken) {
throw new Error('Company name not available');
}
}
const languageId = await ensureLang(iso639, tx);
const taxrateId = await ensureTax(taxrate, tx);
const reducedtaxrateId = await ensureTax(reducedtaxrate, tx);
await request(pool, tx)
.input('id', sql.Int, id)
.input('name', sql.NVarChar(255), name)
.input('languageId', sql.Int, languageId)
.input('taxrate', sql.Int, taxrateId)
.input('reducedtaxrate', sql.Int, reducedtaxrateId)
.query(UPDATE);
await tx.commit();
return {
id,
rootCategoryId: company.root_category_id,
languageId,
taxrateId,
reducedtaxrateId,
taxfreerateId: company.taxfreerate,
};
} catch (err) {
try {
await tx.rollback();
} catch {
// ignore
}
throw err;
}
};
}