Add machine category lookup

This commit is contained in:
2026-06-07 13:40:12 +02:00
parent cd89a30631
commit 24c6c9e017
9 changed files with 65 additions and 4 deletions
+25
View File
@@ -14,6 +14,7 @@ import type {
AgrarmonitorRegistrierungStatus,
EingangsrechnungLivesearchResult,
Logger,
MaschinenKategorie,
Rechnungsdaten,
} from './types';
@@ -352,6 +353,26 @@ export class AgrarmonitorConnector implements AgrarmonitorConnectorResult {
throw new Error('Ungueltige Agrarmonitor Kunden-API-Antwort');
}
async getMaschinenKategorien(): Promise<MaschinenKategorie[]> {
const response = await this.http.get('/maschinen/kategorien');
await this.saveSession();
const document = this.parseHtmlDocument(response.data);
const rows = Array.from(document.querySelectorAll<HTMLTableRowElement>('table#kategorien tbody tr'));
return rows.map(row => {
const cells = Array.from(row.querySelectorAll<HTMLTableCellElement>('td'));
return {
id: this.parseNumber(row.id),
name: cells[0]?.textContent?.trim() ?? '',
zugmaschine: this.parseJaNein(cells[2]?.textContent ?? ''),
mobilSichtbar: Boolean(cells[4]?.querySelector<HTMLInputElement>('input[type="checkbox"]')?.checked),
};
});
}
private createHttpClient(): AxiosInstance {
const client = wrapper(
axios.create({
@@ -596,6 +617,10 @@ export class AgrarmonitorConnector implements AgrarmonitorConnectorResult {
return Number.isFinite(numberValue) ? numberValue : 0;
}
private parseJaNein(value: string): boolean {
return value.trim().toLowerCase() === 'ja';
}
private parseGermanShortDate(value: string): Date | null {
const match = value.trim().match(/^(\d{2})\.(\d{2})\.(\d{2})$/);
+8
View File
@@ -53,6 +53,7 @@ export interface AgrarmonitorConnectorResult {
setLieferscheinNummer(rechnungId: number, nummer: string): Promise<void>;
setEingangsdatum(rechnungId: number, datum: Date): Promise<boolean>;
getCustomerById(id: number): Promise<AgrarmonitorApiCustomer>;
getMaschinenKategorien(): Promise<MaschinenKategorie[]>;
}
export interface AgrarmonitorFreischaltungStatus {
@@ -129,3 +130,10 @@ export interface Rechnungsdaten {
kundenId: number;
adresstext: string;
}
export interface MaschinenKategorie {
id: number;
name: string;
zugmaschine: boolean;
mobilSichtbar: boolean;
}