Ketten mit Vorgeschichte: unterstes Glied ist nicht immer ein Kauf
Ein Spieler mit drei Paketen und drei Plaetzen stand bei "-1 von 3". Der dritte Platz kam aus einem fremden Gruppen-CC: beigetreten mit einem CC-Guthaben, spaeter per Redesign ausgestiegen und als eigener CC weitergefuehrt. Damit beginnt zwar eine neue Kette, aber kein neuer Platz - bezahlt ist er laengst, naemlich mit dem Beitritt. Die Automatik sah nur "unterstes Glied" und buchte es auf CC-Paket um. Der Platz stand damit zweimal im Konto, einmal fuer den Beitritt und einmal fuer den eigenen CC. Jetzt zaehlt, ob der Kette etwas vorausging: Zeigt ihr erstes Glied auf einen Vorgaenger ausserhalb, ist auch dieses Glied ein Redesign. Dabei fiel ein zweiter Fehler auf: Das Neuverketten loeschte genau diesen Verweis, weil es die Verkettung innerhalb der Linie normalisierte. Damit ging die einzige Spur zur Herkunft verloren - und mit ihr der Eintrag "war dabei" am Fuss der Kette. Ein Vorgaenger ausserhalb bleibt jetzt stehen. Fuer die Korrektur bereits falsch gebuchter Eintraege kann "Bezahlart" jetzt auch zwischen CC-Paket und Redesign wechseln, nicht nur zwischen bezahlt und Kulanz. Der Knopf steht an jedem Eintrag, nicht nur an Redesigns.
This commit is contained in:
@@ -24,7 +24,7 @@ import {
|
||||
removeLink,
|
||||
moveInChain,
|
||||
detachFromChain,
|
||||
changeRedesignKind,
|
||||
changeFunding,
|
||||
addMemberToChain,
|
||||
} from '../services/characters.js';
|
||||
import { parseThreadId } from '../lib/forum.js';
|
||||
@@ -183,18 +183,19 @@ export async function characterRoutes(app: FastifyInstance): Promise<void> {
|
||||
});
|
||||
|
||||
/**
|
||||
* Nachträglich umstellen, woraus ein Redesign bezahlt wurde. Umgebucht
|
||||
* wird im Kontobuch, nicht überschrieben.
|
||||
* Nachträglich umstellen, woraus ein CC bezahlt wurde - aus einem Paket,
|
||||
* einem bezahlten Redesign oder aus Kulanz. Umgebucht wird im Kontobuch,
|
||||
* nicht überschrieben.
|
||||
*/
|
||||
app.post('/api/characters/:id/redesign-kind', { preHandler: requireEditor }, async (request) => {
|
||||
app.post('/api/characters/:id/funding', { preHandler: requireEditor }, async (request) => {
|
||||
const { id } = parseWith(idParam, request.params);
|
||||
const body = parseWith(
|
||||
z.object({
|
||||
useKind: z.enum([CreditKind.REDESIGN_PAID, CreditKind.REDESIGN_KULANZ]),
|
||||
useKind: z.enum([CreditKind.CC, CreditKind.REDESIGN_PAID, CreditKind.REDESIGN_KULANZ]),
|
||||
}),
|
||||
request.body,
|
||||
);
|
||||
return changeRedesignKind(id, body.useKind, contextOf(request));
|
||||
return changeFunding(id, body.useKind, contextOf(request));
|
||||
});
|
||||
|
||||
// --- Ketten ---
|
||||
|
||||
Reference in New Issue
Block a user