This commit is contained in:
2026-05-07 10:06:14 -05:00
parent e01c5367bc
commit 5b3da47d87
6 changed files with 1414 additions and 226 deletions

View File

@@ -116,8 +116,8 @@ const API = {
auth: () => window.location.href = '/auth/qbo'
},
// Accounting API (Phase 1 — read-only)
accounting: {
// Phase 1
getAccounts: (type = null, activeOnly = true) => {
const params = new URLSearchParams();
if (type) params.set('type', type);
@@ -125,7 +125,6 @@ const API = {
const qs = params.toString();
return fetch('/api/accounting/accounts' + (qs ? '?' + qs : '')).then(r => r.json());
},
syncAccounts: () => fetch('/api/accounting/sync-accounts', { method: 'POST' }).then(r => r.json()),
getRegister: (accountId, startDate, endDate) => {
const params = new URLSearchParams({ accountId });
if (startDate) params.set('startDate', startDate);
@@ -139,6 +138,41 @@ const API = {
getBalanceSheet: (asOfDate, accountingMethod = 'Accrual') => {
const params = new URLSearchParams({ asOfDate, accountingMethod });
return fetch('/api/accounting/reports/balance-sheet?' + params.toString()).then(r => r.json());
},
// Phase 2 Lieferung 1 — Sync + Cache-Reads
syncAccounts: () => fetch('/api/accounting/sync-accounts', { method: 'POST' }).then(r => r.json()),
syncVendors: () => fetch('/api/accounting/sync-vendors', { method: 'POST' }).then(r => r.json()),
getSyncStatus: () => fetch('/api/accounting/sync-status').then(r => r.json()),
getVendors: (search = '', limit = 200) => {
const params = new URLSearchParams();
if (search) params.set('search', search);
if (limit) params.set('limit', String(limit));
const qs = params.toString();
return fetch('/api/accounting/vendors' + (qs ? '?' + qs : '')).then(r => r.json());
},
getExpenseAccounts: () => fetch('/api/accounting/expense-accounts').then(r => r.json()),
getPaymentAccounts: () => fetch('/api/accounting/payment-accounts').then(r => r.json()),
getPaymentMethods: () => fetch('/api/accounting/payment-methods').then(r => r.json()),
// Phase 2 Lieferung 2 — Mutations + List
createVendor: (data) => fetch('/api/accounting/vendors', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
}).then(r => r.json()),
createExpense: (data) => fetch('/api/accounting/expenses', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
}).then(r => r.json()),
listExpenses: (startDate, endDate, onlyMine = false) => {
const params = new URLSearchParams({ startDate, endDate });
if (onlyMine) params.set('onlyMine', 'true');
return fetch('/api/accounting/expenses?' + params.toString()).then(r => r.json());
}
},