Ein Eintrag kostet genau einmal, die Rueckkehr ist ein weiteres Glied

An einem Eintrag konnten zwei Buchungen haengen - etwa Kulanz und ein
gekauftes Redesign nebeneinander -, und aufloesen liess sich das
nirgends. Jetzt raeumt sowohl das Nachrechnen als auch das Umstellen der
Bezahlart auf: es bleibt die aelteste passende, der Rest wird storniert.

Die Rueckkehr eines redesignten oder gestorbenen CCs bucht deshalb nicht
mehr zusaetzlich, sondern erschafft ihn noch einmal: derselbe CC als
weiteres Glied ueber dem alten, und das kostet ein Redesign wie jedes
andere. Mit einem CC-Guthaben beginnt er stattdessen eine eigene Liste
und kann neben seinem Nachfolger laufen.

Ein entzogener Platz nimmt seine Buchung mit - sonst waere die Rueckkehr
umsonst oder stuende als zweite Buchung am selben Eintrag.
This commit is contained in:
2026-09-22 14:31:29 +02:00
parent 367f1aace4
commit b93ff2fb0e
3 changed files with 308 additions and 62 deletions
+4 -6
View File
@@ -682,14 +682,12 @@ describe('Einzelne Mitglieder fallen aus', () => {
(error: Error & { code?: string }) => error.code === 'NEED_KIND',
);
// Sein Platz war entzogen, also kostet die Rückkehr wieder einen - in
// seiner Liste steht der CC ganz unten.
const vorher = await credits.getBalances(partner);
await characters.reactivateMember(character.id, partner, { useKind: 'REDESIGN_PAID' }, ctx);
await characters.reactivateMember(character.id, partner, { useKind: 'CC' }, ctx);
assert.equal(
(await credits.getBalances(partner)).REDESIGN_PAID,
vorher.REDESIGN_PAID - 1,
'bezahlt',
);
assert.equal((await credits.getBalances(partner)).CC, vorher.CC - 1, 'bezahlt');
});
it('verlangt für die Rückkehr eines Gestorbenen eine Begründung', async () => {