34 lines
2.0 KiB
JavaScript
34 lines
2.0 KiB
JavaScript
/* 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). */
|
||
|
||
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)))
|
||
}
|