Kontrolle: Projektkonto und Rechnungsbau waehlen dieselbe Aufwands-AB

Gemeinsame Auswahl juengsteAufwandAb (gueltig, jueengste nach gesendetAm) im AB-Speicher.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-07 15:19:48 +00:00
1 parent 4177b76d82
commit c2245b6905
4 files changed
+32 -8

No files matched your search

+14 -1
View File
@@ -16,7 +16,8 @@ const st = await startFakeStripe()
useTestEnv({ appwriteUrl: aw.url, stripeUrl: st.url })
const { config } = await import('../server/config.js')
const { seedRechnungsDaten, legeAuftragAn, legeRechnungAn, leereRechnungsDaten } = await import('./auftraegeRechnungenHilfe.js')
const { createProjectInvoice, sendInvoiceNow, voidInvoice, deleteDraft, invalidateFinanceCache, resetInvoiceCreateGuardForTests } = await import('../server/services/finance/stripeFinance.js')
const { projektkontoDetail } = await import('../server/services/auftraege/projektkonto.js')
const { createProjectInvoice, rechnungsVorschau, sendInvoiceNow, voidInvoice, deleteDraft, invalidateFinanceCache, resetInvoiceCreateGuardForTests } = await import('../server/services/finance/stripeFinance.js')
const { getAuftrag, updateAuftrag } = await import('../server/services/auftraege/auftragStore.js')
const { umhaengen } = await import('../server/services/auftraege/projektRechnungenStore.js')
@@ -132,3 +133,15 @@ test('Finalisieren einer Schlussrechnung setzt die AB aus dem Projektdatensatz a
assert.equal((await getAuftrag(neu.id)).status, 'abgerechnet')
assert.equal((await getAuftrag(ab.id)).status, 'ersetzt')
})
test('Stundensatz: bei zwei gültigen Aufwands-ABs rechnen Rechnung und Projektkonto mit derselben (jüngste nach gesendetAm)', async () => {
const basis = { art: 'aufwand', positionen: [], summeCents: null, zahlungsplan: { art: 'monatlich', prozent: null, text: '' } }
// A zuerst angelegt, aber später gesendet; B danach angelegt, aber früher gesendet
await legeAuftragAn({ ...basis, stundensatzCents: 8000 }, { nummer: 'AB-2026-0010', gesendetAm: '2026-10-09T08:00:00.000Z' })
await new Promise((resolve) => setTimeout(resolve, 15))
await legeAuftragAn({ ...basis, stundensatzCents: 12000 }, { nummer: 'AB-2026-0011', gesendetAm: '2026-10-06T08:00:00.000Z' })
const vorschau = await rechnungsVorschau({ customerId: 'k1', art: 'aufwand', projektId: 'p1', arbeitsblattIds: ['ws1'] })
const konto = await projektkontoDetail('p1')
assert.equal(konto.konto.zeit.satzCents, 8000)
assert.match(vorschau.positionen[0].beschreibung, /à 80,00\s€/)
})