Kundenansicht neu E-Fix M9: featureView nennt den Löschtag auch für News, Webshop und Buchungskalender im Abo-Modell
featureView lieferte loeschungAm nur für den Terminplaner und Öffnungszeiten live. Im Abo-Modell werden aber auch News (30 Tage), Webshop und Buchungskalender (90 Tage) nach dem Ende des Abos tatsächlich gelöscht (K39, Löschjobs); "Meine" und WOMS zeigten kein Datum, der Kommentar "bei News verspräche das Datum eine Löschung, die nie kommt" stimmte nicht mehr. Jetzt: abo_ende bei einem Dokument des Abo-Modells (istAboModell) von news, shop und unterkunft ergibt loeschTagNach(disabledAt, loeschFristTage(key)), derselbe Berliner Tag wie in K39. Team-Sperre, Bestand ohne Abo-Modell und der Terminplaner bleiben unverändert. Test in knLoeschfristAnzeige.test.js. (Der Text in WOMS gehört zum WOMS-Teil W2.) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3e32ddfe86
commit
f6fc291dfe
3 files changed
+60
-5
No files matched your search
@@ -8,7 +8,8 @@ import { anleitungsLink, featureConfig, featureHaken, featureKeys, kuerze, ticke
|
||||
import { speichereZustimmung, zustimmungFuerSitzung } from './featureConsents.js'
|
||||
import { aboLage, laeuft } from './aboStatus.js'
|
||||
import { berlinDateTime } from './berlinTime.js'
|
||||
import { loeschTag } from './termine/frist.js'
|
||||
import { loeschTag, loeschTagNach } from './termine/frist.js'
|
||||
import { loeschFristTage } from './aboFunktionenMails.js'
|
||||
import { ABRECHNUNGEN, istAboModell } from './aboModell.js'
|
||||
import { ohneAboBisher } from './aboAufbauphase.js'
|
||||
import { ABRECHNUNGS_ZEILEN, createFeatureTicket } from './ticketAdmin.js'
|
||||
@@ -142,9 +143,10 @@ export const unlockedByVon = (doc) => doc?.unlockedBy || (doc?.unlockedByPurchas
|
||||
* Ansicht einer Funktion fuer Kunde und Team. Abschaltgrund (disabledReason, ohne Grund = Altbestand => null), Zeitpunkt
|
||||
* (disabledAt) und Berliner Loeschtag (loeschungAm, 30 Tage danach, termine/frist.js) gibt es nur im Zustand `disabled`;
|
||||
* in jedem anderen Zustand sind alle drei null, auch wenn am Dokument noch Reste einer frueheren Abschaltung stehen.
|
||||
* loeschungAm gibt es nur fuer den Terminplaner (R105: der 30-Tage-Loeschlauf in jobs.js loescht nur Terminplaner-Daten,
|
||||
* bei News verspraeche das Datum eine Loeschung, die nie kommt) und fuer Oeffnungszeiten live, dort nur beim Abschaltgrund
|
||||
* abo_ende (bei einer Abschaltung durch das Team gibt es keine Loeschfrist); es ist null, wenn disabledAt fehlt oder nicht lesbar ist.
|
||||
* loeschungAm gibt es fuer den Terminplaner (R105: der 30-Tage-Loeschlauf in jobs.js), fuer Oeffnungszeiten live (nur beim Abschaltgrund
|
||||
* abo_ende; bei einer Abschaltung durch das Team gibt es keine Loeschfrist) und, seit dem Abo-Modell (E-Fix M9), fuer News (30 Tage), Webshop und
|
||||
* Buchungskalender (90 Tage), wenn das Dokument im Abo-Modell mit dem Abo endete (abo_ende): K39 und die Loeschjobs loeschen dann nach der Frist der
|
||||
* Funktion (loeschFristTage), die Anzeige nennt denselben Berliner Tag. Sonst null; null auch, wenn disabledAt fehlt oder nicht lesbar ist.
|
||||
* disabledReason und disabledAt gelten fuer jede Funktion.
|
||||
* Jede Funktion traegt unlockedBy (kauf | abo | projekt | team, null solange die Funktion aus ist). Funktionen mit aboInklusive
|
||||
* (Oeffnungszeiten live) tragen zusaetzlich aboEndeAt (Ende des Wartungs-Abos erkannt) und einbau (angestossen | manuell, Ergebnis des Neubaus).
|
||||
@@ -154,6 +156,7 @@ export async function featureView(doc, key = doc?.featureKey) {
|
||||
const abgeschaltet = doc?.state === 'disabled'
|
||||
const mitAbo = featureConfig(key)?.aboInklusive === true
|
||||
const loeschtag = abgeschaltet && (key === 'termine' || (mitAbo && doc.disabledReason === 'abo_ende'))
|
||||
const aboEndeLoeschung = abgeschaltet && doc.disabledReason === 'abo_ende' && istAboModell(doc) && ['news', 'shop', 'unterkunft'].includes(key)
|
||||
return {
|
||||
state: doc?.state || 'off',
|
||||
siteKey: doc?.siteKey || null,
|
||||
@@ -163,7 +166,7 @@ export async function featureView(doc, key = doc?.featureKey) {
|
||||
invoiceUrl: doc?.invoiceUrl || null,
|
||||
disabledReason: abgeschaltet ? doc.disabledReason || null : null,
|
||||
disabledAt: abgeschaltet ? doc.disabledAt || null : null,
|
||||
loeschungAm: loeschtag ? loeschTag(doc.disabledAt) : null,
|
||||
loeschungAm: loeschtag ? loeschTag(doc.disabledAt) : aboEndeLoeschung ? loeschTagNach(doc.disabledAt, loeschFristTage(key)) : null,
|
||||
// unlockedBy (kauf | abo | projekt | team, null solange die Funktion aus ist) gilt fuer jede Funktion (V7); aboEndeAt und einbau nur mit aboInklusive
|
||||
unlockedBy: doc && doc.state !== 'off' ? unlockedByVon(doc) : null,
|
||||
...(mitAbo
|
||||
|
||||
@@ -27,3 +27,14 @@ export function loeschTag(disabledAt) {
|
||||
const ende = loeschzeit(disabledAt)
|
||||
return ende ? ausUtc(ende).tag : null
|
||||
}
|
||||
|
||||
/**
|
||||
* Wie loeschTag, mit der Frist einer anderen Funktion (E-Fix M9: News 30, Webshop und Buchungskalender 90 Tage, aboFunktionenMails.loeschFristTage):
|
||||
* disabledAt plus tage x 24 Stunden, Berliner Kalendertag. Fehlendes oder ungueltiges disabledAt oder eine ungueltige Frist: null.
|
||||
*/
|
||||
export function loeschTagNach(disabledAt, tage) {
|
||||
const ms = zeitMs(disabledAt)
|
||||
if (!Number.isFinite(ms) || !Number.isInteger(tage) || tage < 0) return null
|
||||
const ende = new Date(ms + tage * TAG_MS)
|
||||
return Number.isNaN(ende.getTime()) ? null : ausUtc(ende).tag
|
||||
}
|
||||
Reference in new issue
Block a user