Buchungskalender: Rechnungen, Einstellungen und Funktionen-Kachel
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
10fe9a2ae0
commit
efeb99e214
8 files changed
+696
-11
No files matched your search
@@ -1,6 +1,33 @@
|
||||
/* Buchungskalender, Reiter „Rechnungen“: Platzhalter (Task 13/14 fuellt ihn). */
|
||||
import { infoKarte } from './shop-dom.js'
|
||||
/* Buchungskalender, Reiter „Rechnungen“: Liste der Rechnungen und Storno-Rechnungen mit PDF-Link.
|
||||
API: GET /api/unterkunft/rechnungen?projectId= => { rechnungen:[{ id, nummer, datum, art:'rechnung'|'storno', gastName, bruttoCent, anfrageNummer? }] };
|
||||
PDF: GET /api/unterkunft/rechnungen/<id>.pdf?projectId= (Einzel-PDF, kein ZIP). Fremdtext nur ueber textContent. render(panel, ctx). */
|
||||
|
||||
export function render(panel) {
|
||||
panel.replaceChildren(infoKarte('Rechnungen', 'Dieser Bereich wird gerade gebaut.'))
|
||||
import { abschnitt, datumText, euroText, h, infoKarte } from './shop-dom.js'
|
||||
import { enc, zeichen } from './buchungen-uk-hilfe.js'
|
||||
|
||||
const ART = { rechnung: 'Rechnung', storno: 'Storno-Rechnung' }
|
||||
const betragText = (cent) => {
|
||||
if (!Number.isInteger(cent)) return ''
|
||||
return cent < 0 ? `−${euroText(-cent)}` : euroText(cent)
|
||||
}
|
||||
|
||||
export async function render(panel, ctx = {}) {
|
||||
const q = `projectId=${enc(ctx.projectId)}`
|
||||
const antwort = await ctx.request(`/api/unterkunft/rechnungen?${q}`)
|
||||
const liste = Array.isArray(antwort?.rechnungen) ? antwort.rechnungen : []
|
||||
if (!liste.length) {
|
||||
panel.replaceChildren(infoKarte('Rechnungen', 'Noch keine Rechnungen. Sobald ein Gast bucht, erscheint hier die Rechnung.'))
|
||||
return
|
||||
}
|
||||
const zeilen = liste.map((r) => h('li', { class: 'bk-rechnung', 'data-rechnung': zeichen(r.id), 'data-art': zeichen(r.art) },
|
||||
h('span', { class: 'bk-nummer' }, zeichen(r.nummer)),
|
||||
h('span', { class: 'bk-zeitraum' }, datumText(zeichen(r.datum), { zeit: false })),
|
||||
h('span', { class: 'bk-gast' }, zeichen(r.gastName)),
|
||||
h('span', { class: `sh-pille ${r.art === 'storno' ? 'sh-pille-bad' : 'sh-pille-ok'}` }, ART[r.art] || 'Rechnung'),
|
||||
h('span', { class: 'bk-betrag' }, betragText(r.bruttoCent)),
|
||||
h('a', {
|
||||
class: 'kb-btn-outline', 'data-aktion': 'pdf', href: `/api/unterkunft/rechnungen/${enc(zeichen(r.id))}.pdf?${q}`, target: '_blank', rel: 'noopener',
|
||||
'aria-label': `PDF zu ${zeichen(r.nummer)} herunterladen`,
|
||||
}, 'PDF')))
|
||||
panel.replaceChildren(abschnitt('Rechnungen', 'Rechnungen und Storno-Rechnungen deiner Gäste, ausgestellt in deinem Namen.', h('ul', { class: 'bk-liste' }, zeilen)))
|
||||
}
|
||||
Reference in new issue
Block a user