News: Zitat § 356 Abs. 5 Nr. 2, Wertersatz-Satz und § 19 UStG statt brutto
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b20d0464c4
commit
3073fffcf5
10 files changed
+277
-26
No files matched your search
@@ -8,6 +8,8 @@ import { HEAT_DEVICES, deviceHtml, heatCaption } from '/geraete.js'
|
||||
import { ZU_VERTRAEGE } from './vertraege-link.js'
|
||||
|
||||
const PRICE = '30 €' // Rueckfall, wenn die Antwort von /api/funktionen kein features.news (Register) enthaelt
|
||||
// Rueckfall fuer den Preishinweis, wenn die Antwort von /api/funktionen kein ustHinweis hat (gleicher Wortlaut wie config.ustHinweis)
|
||||
const UST_HINWEIS = 'ohne Umsatzsteuer gemäß § 19 UStG'
|
||||
const LEISTUNGSBESCHREIBUNG = '/vertragsunterlagen/funktionen-leistungsbeschreibung.html'
|
||||
const PHOTO_ACCEPT = 'image/jpeg,image/png,image/webp' // iOS wandelt HEIC dann selbst in JPEG um
|
||||
const PHOTO_MAX_BYTES = 10 * 1024 * 1024
|
||||
@@ -266,7 +268,7 @@ export async function initFunktionen(root) {
|
||||
export async function initNews(root, { projectId } = {}) {
|
||||
if (!root) return
|
||||
if (projectId) selection.projectId = projectId
|
||||
const { projects = [], setupEstimate = '', consentText = '', features } = await request('/api/funktionen')
|
||||
const { projects = [], setupEstimate = '', consentText = '', features, ustHinweis } = await request('/api/funktionen')
|
||||
if (!projects.length) {
|
||||
root.innerHTML = '<div class="kb-panel kb-empty">Noch keine Website-Projekte zugewiesen.</div>'
|
||||
return
|
||||
@@ -301,7 +303,7 @@ export async function initNews(root, { projectId } = {}) {
|
||||
if (feature.state === 'active') renderEditor(stage, project)
|
||||
else if (isSetup(feature.state)) stage.innerHTML = thanks + statusCard(feature, setupEstimate)
|
||||
else if (feature.state === 'disabled') stage.innerHTML = '<div class="kb-panel"><h3>News-Pinnwand ist abgeschaltet</h3><p>Für diese Website ist die Pinnwand im Moment nicht aktiv. <button type="button" class="kb-link" data-view="chat">Schreib uns im Chat</button>, dann klären wir das.</p></div>'
|
||||
else renderBooking(stage, project, { setupEstimate, offer: newsOffer(features, consentText), thanks })
|
||||
else renderBooking(stage, project, { setupEstimate, offer: { ...newsOffer(features, consentText), ustHinweis: textOr(ustHinweis, UST_HINWEIS) }, thanks })
|
||||
}
|
||||
|
||||
function renderBooking(stage, project, { setupEstimate, offer, thanks }) {
|
||||
@@ -315,7 +317,7 @@ function renderBooking(stage, project, { setupEstimate, offer, thanks }) {
|
||||
<li>Beiträge jederzeit selbst schreiben, ändern und abnehmen</li>
|
||||
<li>Nutzung danach kostenlos, kein Abo</li>
|
||||
</ul>
|
||||
<p class="fn-price"><strong>${esc(offer.price)}</strong> <span>einmalig, inklusive Mehrwertsteuer</span></p>
|
||||
<p class="fn-price"><strong>${esc(offer.price)}</strong> <span>einmalig, <span id="news-ust-hinweis"></span></span></p>
|
||||
${setupEstimate ? `<p class="fn-estimate">Einrichtung: ${esc(setupEstimate)}</p>` : ''}
|
||||
<p class="fn-desc-link"><a href="${LEISTUNGSBESCHREIBUNG}" target="_blank" rel="noopener">Leistungsbeschreibung</a></p>
|
||||
<label class="fn-consent"><input type="checkbox" id="news-consent"><span id="news-consent-text"></span></label>
|
||||
@@ -323,6 +325,7 @@ function renderBooking(stage, project, { setupEstimate, offer, thanks }) {
|
||||
<div class="abo-actions"><button type="button" class="abo-btn" id="news-order" disabled>${esc(offer.knopf)}</button></div>
|
||||
</div>`
|
||||
stage.querySelector('#news-consent-text').textContent = offer.consentText
|
||||
stage.querySelector('#news-ust-hinweis').textContent = offer.ustHinweis
|
||||
const box = stage.querySelector('#news-consent')
|
||||
const button = stage.querySelector('#news-order')
|
||||
const error = stage.querySelector('#news-order-error')
|
||||
|
||||
Reference in new issue
Block a user