Abo (A1+A2): Liefertag frei waehlbar 1-31, Aenderung nur nach vorn, Sperre erst am Ausfuehrungstag
A1: Jeder Monatstag ist als Liefertag erlaubt (UserAbo::allowedDeliveryDays), Tage 29-31 liefern in kuerzeren Monaten am letzten Tag. Eine Stelle AboHelper::dateForDayInMonth klammert; setNextDate, Erstausfuehrung, Admin-Termin und Pause rechnen darueber, der Folgemonat immer aus dem Liefertag (31.01 -> 28.02 -> 31.03). Liefertag-Aenderung gilt fuer den laufenden Zyklus und nur nach vorn: ist der Tag im Referenzmonat vorbei, wird abgelehnt, der Monat verschiebt sich nie (Rueckfrage R1). Admin-Filter "naechste Ausfuehrung" als Datumsbereich. Prognose-Kacheln bekommen die Kachel Monatsende, Team-Abos rechnen bis Monatsende. A2: Sperrfristen Default 0, Setting 0 ist ausdruecklich 0 (fiel bisher auf den Default zurueck). Bedingung Kalendertage <= Sperre, zentral in AboHelper::isWithinLock: am Ausfuehrungstag ab 0:00 Uhr fixiert, Vortag bis 23:59 Uhr frei, fuer Liefertag, Produkte, Pause und Kuendigung (R2). Texte mit _zero-Varianten ueber AboHelper::lockMessage. Sprachdateien de/en/es/fr, neuer AboDeliveryDayTest, bestehende Tests angepasst, Plan-Status mit Deploy-Schritt (Settings auf 0). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
parent
d6efe56cd4
commit
cf0311afc1
30 changed files with 638 additions and 185 deletions
|
|
@ -119,6 +119,7 @@ it('lehnt die Pause vor Erreichen der Mindestlaufzeit ab', function (): void {
|
|||
});
|
||||
|
||||
it('lehnt die Pause innerhalb der Sperrfrist vor der Ausfuehrung ab', function (): void {
|
||||
Setting::setContentBySlug('abo-lock-days-pause-cancel', 3, 'int');
|
||||
$user = aptMakeUser();
|
||||
$abo = aptMakeAbo($user, nextDate: '2026-07-24'); // in 2 Tagen, Sperre = 3 Tage
|
||||
|
||||
|
|
@ -126,6 +127,16 @@ it('lehnt die Pause innerhalb der Sperrfrist vor der Ausfuehrung ab', function (
|
|||
->and($abo->fresh()->pause_count)->toBe(0);
|
||||
});
|
||||
|
||||
it('lehnt die Pause ohne Vorlaufsperre nur am Ausfuehrungstag selbst ab (A2)', function (): void {
|
||||
$user = aptMakeUser();
|
||||
$tomorrow = aptMakeAbo($user, nextDate: '2026-07-23');
|
||||
$today = aptMakeAbo(aptMakeUser(), nextDate: '2026-07-22');
|
||||
|
||||
expect(aptPause($tomorrow))->toBeTrue()
|
||||
->and(aptPause($today))->toBeFalse()
|
||||
->and(session('alert-error'))->toBe(__('abo.error_pause_locked_zero', ['lock' => 0, 'days' => 0, 'date' => '22.07.2026']));
|
||||
});
|
||||
|
||||
it('erlaubt die Pause nur einmal pro rollierendem Intervall', function (): void {
|
||||
$user = aptMakeUser();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue