diff --git a/src/store/delivery/delete.js b/src/store/delivery/delete.js index 8025730..850ecdc 100644 --- a/src/store/delivery/delete.js +++ b/src/store/delivery/delete.js @@ -1,5 +1,6 @@ import * as mssqlQueries from '../../providers/mssql/queries/delivery.js'; import * as sqliteQueries from '../../providers/sqlite3/queries/delivery.js'; +import { isForeignKeyConstraintError } from '../../providers/provider.js'; import resolveSelectedCompanyAccess from '../companyuser/resolveSelectedCompanyAccess.js'; import makeRunner from '../runner.js'; @@ -16,15 +17,22 @@ export default function del(provider) { const { companyId } = await access(googleAuthId); const runner = makeRunner(provider); - const result = await runner(queries.DELETE_MANIFEST, { - id, - companyId, - type: queries.DELIVERY_TYPE, - }); + try { + const result = await runner(queries.DELETE_MANIFEST, { + id, + companyId, + type: queries.DELIVERY_TYPE, + }); - const rowsAffected = result.rowsAffected?.[0] ?? (typeof result.rowsAffected === 'number' ? result.rowsAffected : 0); - if (!rowsAffected) { - throw new Error('Delivery not found'); + const rowsAffected = result.rowsAffected?.[0] ?? (typeof result.rowsAffected === 'number' ? result.rowsAffected : 0); + if (!rowsAffected) { + throw new Error('Delivery not found'); + } + } catch (err) { + if (isForeignKeyConstraintError(err)) { + throw new Error('Delivery in use in ledger'); + } + throw err; } }; } diff --git a/src/store/delivery/update.js b/src/store/delivery/update.js index 9d10bd1..098a994 100644 --- a/src/store/delivery/update.js +++ b/src/store/delivery/update.js @@ -1,5 +1,6 @@ import * as mssqlQueries from '../../providers/mssql/queries/delivery.js'; import * as sqliteQueries from '../../providers/sqlite3/queries/delivery.js'; +import { isForeignKeyConstraintError } from '../../providers/provider.js'; import resolveSelectedCompanyAccess from '../companyuser/resolveSelectedCompanyAccess.js'; import taxEnsure from '../tax/ensure.js'; import { insertLines, normalizeLines, parseDate } from '../manifestLines.js'; @@ -108,9 +109,16 @@ export default function update(provider) { }); if (hasLines) { - await runner(queries.DELETE_LINES_BY_MANIFEST, { - manifestId: id, - }); + try { + await runner(queries.DELETE_LINES_BY_MANIFEST, { + manifestId: id, + }); + } catch (err) { + if (isForeignKeyConstraintError(err)) { + throw new Error('Delivery lines already booked on ledger'); + } + throw err; + } await insertLines(provider, tx, { manifestId: id,