This commit is contained in:
seb
2026-10-30 17:30:10 +01:00
parent 72f168f188
commit 56d376c9bd
7 changed files with 775 additions and 17 deletions

View File

@@ -25,6 +25,7 @@ import {
company as companyApi,
number as numberApi,
posterminal as posterminalApi,
printeragent as printeragentApi,
supplier as supplierApi,
unit as unitApi,
warehouse as warehouseApi,
@@ -168,6 +169,15 @@ const sortTerminals = (terminals) => {
});
};
const sortPrinterAgents = (agents) => {
if (!Array.isArray(agents)) return [];
return [...agents].sort((a, b) => {
const sDiff = (Number(a.sort) || 0) - (Number(b.sort) || 0);
if (sDiff !== 0) return sDiff;
return (Number(a.id) || 0) - (Number(b.id) || 0);
});
};
const sortAccounts = (items) =>
[...items].sort((a, b) => String(a.name ?? '').localeCompare(String(b.name ?? ''), 'de'));
@@ -237,6 +247,12 @@ const initialState = {
terminalsStatus: 'idle',
terminalsError: null,
// Printer agents
printeragents: [],
printeragentsCompanyId: null,
printeragentsStatus: 'idle',
printeragentsError: null,
// 4. Suppliers
suppliers: [],
articlesBySupplier: {},
@@ -303,6 +319,7 @@ let companyAutomat;
let inflightCompany = null;
let inflightNumbers = null;
let inflightTerminals = null;
let inflightPrinterAgents = null;
let inflightSuppliers = null;
let inflightUnits = null;
let inflightWarehouses = null;
@@ -496,6 +513,7 @@ const actions = {
actions.load(),
actions.loadNumbers(),
actions.loadTerminals(),
actions.loadPrinterAgents(),
actions.loadSuppliers(),
actions.loadUnits(),
actions.loadWarehouses(),
@@ -512,6 +530,7 @@ const actions = {
inflightCompany = null;
inflightNumbers = null;
inflightTerminals = null;
inflightPrinterAgents = null;
inflightSuppliers = null;
inflightUnits = null;
inflightWarehouses = null;
@@ -698,6 +717,72 @@ const actions = {
},
// #endregion
// #region Printer agents (printeragent)
// MARK: calls printeragent.list from ../api/index.js
async loadPrinterAgents() {
const companyId =
authAutomat.state.user?.selectedCompanyId ?? companyAutomat.state.current?.id;
if (!companyId) return [];
if (inflightPrinterAgents) return inflightPrinterAgents;
companyAutomat.setState({ printeragentsStatus: 'loading', printeragentsError: null });
inflightPrinterAgents = (async () => {
try {
const res = await printeragentApi.list();
const printeragents = sortPrinterAgents(Array.isArray(res.printeragents) ? res.printeragents : []);
companyAutomat.setState({
printeragents,
printeragentsCompanyId: companyId,
printeragentsStatus: 'succeeded',
printeragentsError: null,
});
return printeragents;
} catch (err) {
companyAutomat.setState({
printeragentsStatus: 'failed',
printeragentsError: err?.message ?? String(err),
});
throw err;
} finally {
inflightPrinterAgents = null;
}
})();
return inflightPrinterAgents;
},
reloadPrinterAgents() {
return actions.loadPrinterAgents();
},
async createPrinterAgent(payload) {
const res = await printeragentApi.create(payload);
const agent = res.printeragent;
companyAutomat.setState({
printeragents: sortPrinterAgents([...companyAutomat.state.printeragents, agent]),
});
return agent;
},
async updatePrinterAgent(agentId, patch) {
const res = await printeragentApi.update(agentId, patch);
const updated = res.printeragent;
companyAutomat.setState({
printeragents: sortPrinterAgents(
companyAutomat.state.printeragents.map((a) =>
a.id === agentId ? { ...a, ...updated } : a,
),
),
});
return updated;
},
async deletePrinterAgent(agentId) {
await printeragentApi.delete(agentId);
companyAutomat.setState({
printeragents: companyAutomat.state.printeragents.filter((a) => a.id !== agentId),
});
},
// #endregion
// #region 4. Suppliers (supplier)
// MARK: calls supplier.list from ../api/index.js
loadSuppliers() {
@@ -1553,6 +1638,9 @@ sseAutomat.actions.on('carrier', () => {
sseAutomat.actions.on('posterminal', () => {
void companyAutomat.actions.loadTerminals().catch(() => {});
});
sseAutomat.actions.on('printeragent', () => {
void companyAutomat.actions.loadPrinterAgents().catch(() => {});
});
sseAutomat.actions.on('customergroup', () => {
void companyAutomat.actions.reloadCustomergroups().catch(() => {});
});
@@ -1593,6 +1681,11 @@ export const selectPosterminals = () => companyAutomat.state.terminals;
export const selectPosterminalStatus = () => companyAutomat.state.terminalsStatus;
export const selectHasPosterminals = () => companyAutomat.state.terminals.length > 0;
// Printer agents selectors
export const selectPrinterAgents = () => companyAutomat.state.printeragents;
export const selectPrinterAgentStatus = () => companyAutomat.state.printeragentsStatus;
export const selectHasPrinterAgents = () => companyAutomat.state.printeragents.length > 0;
// Suppliers selectors
export const selectSuppliers = () => companyAutomat.state.suppliers;
export const selectSuppliersStatus = () => companyAutomat.state.suppliersStatus;

View File

@@ -151,6 +151,9 @@ export {
selectPosterminals,
selectPosterminalStatus,
selectHasPosterminals,
selectPrinterAgents,
selectPrinterAgentStatus,
selectHasPrinterAgents,
selectSuppliers,
selectSuppliersStatus,
selectUnits,