feat(nemhandel): live Peppol-netværks-kort — slår CVR op i Peppol Directory (/api/peppol/smp) og viser modtagne dokumenttyper
Build & Deploy / deploy (push) Successful in 1m50s
Build & Deploy / deploy (push) Successful in 1m50s
This commit is contained in:
@@ -27,6 +27,7 @@ import Base from '../layouts/Base.astro';
|
||||
</div>
|
||||
</div>
|
||||
<p id="pep-error" class="mt-8 text-sm text-muted" hidden></p>
|
||||
<div id="peppol-net" class="mt-4" hidden></div>
|
||||
|
||||
<script is:inline>
|
||||
(function () {
|
||||
@@ -34,12 +35,49 @@ import Base from '../layouts/Base.astro';
|
||||
if (!form || form.__wired) return; form.__wired = true;
|
||||
var esc = function (s) { return String(s).replace(/[&<>"]/g, function (c) {
|
||||
return { '&': '&', '<': '<', '>': '>', '"': '"' }[c]; }); };
|
||||
var PROF = {
|
||||
'urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0': 'Peppol BIS Billing 3.0',
|
||||
'urn:fdc:peppol.eu:poacc:trns:order:3': 'Ordering (Order)',
|
||||
'urn:fdc:peppol.eu:poacc:trns:order_response:3': 'Order Response',
|
||||
'urn:fdc:peppol.eu:poacc:trns:despatch_advice:3': 'Despatch Advice',
|
||||
'urn:fdc:peppol.eu:poacc:trns:catalogue:3': 'Catalogue',
|
||||
'urn:fdc:peppol.eu:poacc:trns:invoice_response:3': 'Invoice Response',
|
||||
'urn:fdc:peppol.eu:poacc:trns:mlr:3': 'Message Level Response',
|
||||
};
|
||||
async function loadPeppol(cvr) {
|
||||
var box = document.getElementById('peppol-net'); box.hidden = false;
|
||||
box.innerHTML = '<div class="rounded-2xl border border-border bg-surface/60 p-5"><p class="text-sm text-muted">Slår op i Peppol-netværket…</p></div>';
|
||||
try {
|
||||
var r = await fetch('/api/peppol/smp/' + encodeURIComponent(cvr));
|
||||
var d = await r.json();
|
||||
if (!r.ok) { box.innerHTML = '<div class="rounded-2xl border border-border bg-surface/60 p-5"><p class="text-sm text-muted">Peppol-opslag ikke tilgængeligt lige nu.</p></div>'; return; }
|
||||
if (!d.on_peppol) {
|
||||
box.innerHTML = '<div class="rounded-2xl border border-border bg-surface/60 p-5"><div class="flex items-baseline justify-between gap-2"><h2 class="text-xl font-semibold tracking-tight">Peppol-netværk</h2><span class="rounded-full border border-border px-3 py-1 text-sm text-muted">Ikke fundet</span></div><p class="mt-2 text-sm text-muted">Virksomheden blev ikke fundet i Peppol Directory via CVR-opslag (kan stadig være på Peppol under et andet identifikator-scheme).</p></div>';
|
||||
return;
|
||||
}
|
||||
var docs = (d.doctypes || []).map(function (dt) {
|
||||
var label = PROF[dt.customization] || dt.customization;
|
||||
return '<span class="rounded-full border border-border bg-surface-2 px-2.5 py-1 text-sm">' + esc(dt.document) + ' · ' + esc(label) + '</span>';
|
||||
}).join('');
|
||||
box.innerHTML = '<div class="rounded-2xl border border-border bg-surface/60 p-5">' +
|
||||
'<div class="flex flex-wrap items-baseline justify-between gap-2"><h2 class="text-xl font-semibold tracking-tight">Peppol-netværk</h2>' +
|
||||
'<span class="rounded-full bg-accent/15 px-3 py-1 text-sm font-medium text-accent">På Peppol</span></div>' +
|
||||
'<p class="mt-1 text-sm text-muted">' + esc(d.name || '') + (d.country ? ' · ' + esc(d.country) : '') +
|
||||
' · <span class="font-mono text-xs">' + esc(d.participant_id || '') + '</span>' + (d.reg_date ? ' · reg. ' + esc(d.reg_date) : '') + '</p>' +
|
||||
'<p class="mt-4 text-xs font-semibold uppercase tracking-widest text-accent">Kan modtage</p>' +
|
||||
'<div class="mt-2 flex flex-wrap gap-2">' + (docs || '<span class="text-sm text-muted">ingen dokumenttyper</span>') + '</div>' +
|
||||
'<p class="mt-3 text-xs text-muted/80">Live fra Peppol Directory via egen proxy — intet gemt.</p></div>';
|
||||
} catch (_) {
|
||||
box.innerHTML = '<div class="rounded-2xl border border-border bg-surface/60 p-5"><p class="text-sm text-muted">Kunne ikke nå Peppol-opslaget.</p></div>';
|
||||
}
|
||||
}
|
||||
form.addEventListener('submit', async function (e) {
|
||||
e.preventDefault();
|
||||
var res = document.getElementById('pep-result'), err = document.getElementById('pep-error');
|
||||
res.hidden = true; err.hidden = true;
|
||||
var cvr = document.getElementById('pep-cvr').value.trim();
|
||||
var btn = form.querySelector('button'); btn.disabled = true; btn.textContent = 'Slår op…';
|
||||
loadPeppol(cvr);
|
||||
try {
|
||||
var r = await fetch('/api/nemhandel/' + encodeURIComponent(cvr));
|
||||
var data = await r.json();
|
||||
|
||||
Reference in New Issue
Block a user