Shop Review A M2: Bestellaktionen, Erstattung und Widerruf erledigt auch bei abgeschaltetem Shop

Die Routen aktion, erstatten und widerrufe/erledigt akzeptieren jetzt auch den Zustand disabled; Einstellungen, Artikel und Oeffnen bleiben gesperrt. Die Oberflaeche laesst Bestellungen und Widerrufe bei abgeschaltetem Shop bearbeitbar (ctx.abwickeln), der Hinweis nennt es.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-05 09:37:29 +00:00
1 parent 21805c9a93
commit c6706f88ff
6 files changed
+42 -15

No files matched your search

+5 -3
View File
@@ -5,7 +5,7 @@
Erstatten (POST /bestellungen/:id/erstatten { projectId, betragCent, grund? }) nur nach Rückfrage in der Seite. Darunter der CSV-Export
(GET /api/shop/bestellungen.csv?projectId=&von=&bis= als Link zum Herunterladen).
- Widerrufe: Liste (GET /api/shop/widerrufe?projectId=&seite=) mit „Als erledigt markieren“ (POST /widerrufe/:id/erledigt { projectId }).
Mit ctx.nurLesen (Shop abgeschaltet) gibt es keine Knöpfe zum Ändern. In der Kundenansicht antwortet der Server beim Ändern mit 403: der Text wird gezeigt.
Mit ctx.nurLesen (Shop abgeschaltet) gibt es keine Knöpfe zum Ändern, ausser ctx.abwickeln ist gesetzt (shop.js: Bestellungen und Widerrufe bleiben bearbeitbar). In der Kundenansicht antwortet der Server beim Ändern mit 403: der Text wird gezeigt.
render(panel, ctx): ctx = { projectId, status, nurLesen, aktuell(), neuLaden(), zeigeMeldung(text, art), request } (shop.js).
Fremdtext (Käufer, Artikel, Erklärung) kommt nur über textContent in die Seite. */
@@ -77,6 +77,8 @@ const fakten = (...zeilen) => h('dl', { class: 'sh-fakten' }, zeilen.filter(Bool
export function render(panel, ctx) {
const wurzel = h('div', { class: 'sh-bestellungen' })
panel.replaceChildren(wurzel)
// Bei abgeschaltetem Shop bleiben Bestellungen, Erstattungen und Widerrufe bearbeitbar (ctx.abwickeln), alles andere ist nur lesbar
const nurLesen = ctx.nurLesen === true && ctx.abwickeln !== true
const z = { ansicht: 'bestellungen', filter: 'bezahlt', suche: '', seite: 1, widerrufSeite: 1, detail: null }
let lauf = 0 // nur die zuletzt gestartete Abfrage zeichnet
let beschaeftigt = false
@@ -298,7 +300,7 @@ export function render(panel, ctx) {
)))
// Aktionen
if (!ctx.nurLesen && (aktionen.length || b.kannErstatten)) teile.push(aktionenKarte(b, aktionen))
if (!nurLesen && (aktionen.length || b.kannErstatten)) teile.push(aktionenKarte(b, aktionen))
// Verlauf und Erstattungen
const verlauf = Array.isArray(b.verlauf) ? b.verlauf.filter(istObjekt) : []
@@ -461,7 +463,7 @@ export function render(panel, ctx) {
),
h('div', { class: 'sh-aktionen' },
w.orderId ? h('button', { type: 'button', class: 'kb-btn-outline', 'data-aktion': 'zur-bestellung', onclick: () => { z.ansicht = 'bestellungen'; oeffneDetail(w.orderId) } }, 'Zur Bestellung') : null,
!erledigt && !ctx.nurLesen ? h('button', {
!erledigt && !nurLesen ? h('button', {
type: 'button',
class: 'kb-btn-primary',
'data-aktion': 'erledigt',
+2 -1
View File
@@ -27,7 +27,7 @@ export const REITER = [
]
const HINWEIS_SETUP = 'Wir bauen deinen Shop gerade ein. Du kannst schon Artikel, Stripe und Rechtstexte vorbereiten.'
const HINWEIS_ABGESCHALTET = 'Dein Webshop ist abgeschaltet. Du kannst Bestellungen noch ansehen und exportieren.'
const HINWEIS_ABGESCHALTET = 'Dein Webshop ist abgeschaltet. Du kannst Bestellungen noch ansehen, bearbeiten, erstatten und exportieren.'
const DANKE_SETUP = 'Danke! Die Zahlung ist bei uns angekommen.'
const NICHT_VERFUEGBAR = 'Der Webshop ist noch nicht verfügbar.'
const SHOP_PREIS = '299 €'
@@ -309,6 +309,7 @@ function zeigeReiter(s, { status, aktuell, zustand }) {
projectId: s.projekt.projectId,
status,
nurLesen: zustand === 'disabled',
abwickeln: true, // Bestellungen, Erstattungen und Widerrufe gehen auch bei abgeschaltetem Shop (Pflichten gegenueber Kaeufern)
stripeRueckkehr: s.stripe,
aktuell,
request,