Kavel bij lead/klant en relatie: kavelgegevens (m², bestemming, plannen, achtererf, natura, cultuur, monument, bouwjaar) in CRM-stijl boven de kaart; de kaart zelf alleen met de knoppen (kaart-app &weergave=kaart, gegevens via postMessage), geen scroll meer in het blok
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b66d6a6fe6
commit
805448d515
@@ -0,0 +1,73 @@
|
||||
{# Kavel bij een contact of relatie: de kavelgegevens in CRM-stijl, daaronder alleen de kaart (kaart-app,
|
||||
&weergave=kaart). De kaart stuurt de gegevens met postMessage ({type: 'kaveltoets', resultaat | fout}). #}
|
||||
{% macro kaart_block(kaart) %}
|
||||
<div class="card kavel"><div class="card-body">
|
||||
<div class="card-top"><h2>Kavel</h2>
|
||||
<div class="actions"><a class="btn btn-outline-primary btn-sm" href="{{ kaart }}" target="_blank" data-kavel-open>Volledig openen</a></div></div>
|
||||
<p class="muted kavel-status" data-kavel-status style="margin:0 0 1rem">Kavel wordt opgezocht…</p>
|
||||
<div data-kavel-gegevens hidden>
|
||||
<p class="kavel-adres"><strong data-k="adres"></strong> <span class="muted" data-k="perceel"></span></p>
|
||||
<div class="row g-2 mb-3">
|
||||
<div class="col-4"><div class="kpi kavel-kpi"><div class="muted">Kavel</div><div class="value" data-k="kavel_m2"></div></div></div>
|
||||
<div class="col-4"><div class="kpi kavel-kpi"><div class="muted">Bebouwd</div><div class="value" data-k="bebouwd_m2"></div></div></div>
|
||||
<div class="col-4"><div class="kpi kavel-kpi vrij"><div class="muted">Vrije meters</div><div class="value" data-k="vrije_m2"></div></div></div>
|
||||
</div>
|
||||
<dl class="props mb-3">
|
||||
<dt>Bestemming</dt><dd data-k="bestemming"></dd>
|
||||
<dt data-rij="plannen">Geldend plan</dt><dd data-rij="plannen" data-k="plannen"></dd>
|
||||
<dt data-rij="paraplu">Parapluplannen</dt><dd data-rij="paraplu" data-k="paraplu"></dd>
|
||||
<dt>Achtererfgebied</dt><dd data-k="achtererf"></dd>
|
||||
<dt>Natura 2000</dt><dd data-k="natura2000"></dd>
|
||||
<dt>Cultuurgebied</dt><dd data-k="cultuurgebied"></dd>
|
||||
<dt>Rijksmonument</dt><dd data-k="rijksmonument"></dd>
|
||||
<dt>Bouwjaar</dt><dd data-k="bouwjaar"></dd>
|
||||
</dl>
|
||||
<p class="muted" style="font-size:.85rem" data-k="multi" hidden></p>
|
||||
<p style="font-size:.9rem"><a data-k="loket" href="#" target="_blank" rel="noopener noreferrer">Regels in het Omgevingsloket</a> <span class="muted">· indicatieve waarden</span></p>
|
||||
</div>
|
||||
<div class="kaart-frame"><iframe src="{{ kaart }}&weergave=kaart" title="Kaart van de kavel" loading="lazy" data-kavel-frame></iframe></div>
|
||||
</div></div>
|
||||
<script>
|
||||
(() => {
|
||||
const card = document.currentScript.previousElementSibling;
|
||||
const frame = card.querySelector('[data-kavel-frame]'), box = card.querySelector('[data-kavel-gegevens]');
|
||||
const status = card.querySelector('[data-kavel-status]'), open = card.querySelector('[data-kavel-open]');
|
||||
const k = (n) => card.querySelector(`[data-k="${n}"]`);
|
||||
const m2 = (n) => n == null ? '—' : `${Number(n).toLocaleString('nl-NL')} m²`;
|
||||
const janee = (v, ja) => v == null ? 'onbekend' : v ? ja : 'nee';
|
||||
const links = (el, lijst) => {
|
||||
el.replaceChildren(...lijst.flatMap((p, i) => {
|
||||
const a = document.createElement('a');
|
||||
a.href = p.url; a.target = '_blank'; a.rel = 'noopener noreferrer';
|
||||
a.textContent = p.naam + (p.datum ? ` (${p.datum.slice(0, 4)})` : '');
|
||||
return i ? [document.createElement('br'), a] : [a];
|
||||
}));
|
||||
card.querySelectorAll(`[data-rij="${el.dataset.k}"]`).forEach(r => { r.hidden = !lijst.length; });
|
||||
};
|
||||
addEventListener('message', (e) => {
|
||||
if (e.origin !== location.origin || e.source !== frame.contentWindow || !e.data || e.data.type !== 'kaveltoets') return;
|
||||
if (e.data.fout) { status.textContent = e.data.fout; status.hidden = false; box.hidden = true; return; }
|
||||
const r = e.data.resultaat;
|
||||
status.hidden = true; box.hidden = false;
|
||||
k('adres').textContent = r.adres;
|
||||
k('perceel').textContent = [r.kavelnummer && `perceel ${r.kavelnummer}`].filter(Boolean).join(' · ');
|
||||
k('kavel_m2').textContent = m2(r.kavel_m2);
|
||||
k('bebouwd_m2').textContent = m2(r.bebouwd_m2);
|
||||
k('vrije_m2').textContent = m2(r.vrije_m2);
|
||||
k('bestemming').textContent = r.bestemming || '—';
|
||||
links(k('plannen'), r.plannen || []);
|
||||
links(k('paraplu'), r.paraplu || []);
|
||||
k('achtererf').textContent = r.achtererf || '—';
|
||||
k('natura2000').textContent = janee(r.natura2000, 'ja, raakt de kavel');
|
||||
k('cultuurgebied').textContent = janee(r.cultuurgebied, 'ja, ligt erin');
|
||||
k('rijksmonument').textContent = janee(r.rijksmonument, 'ja, op de kavel');
|
||||
k('bouwjaar').textContent = r.bouwjaar || '—';
|
||||
const multi = k('multi');
|
||||
multi.hidden = !(r.adressen_op_kavel > 1);
|
||||
multi.textContent = multi.hidden ? '' : `Let op: op ${r.aantal_percelen > 1 ? 'deze percelen' : 'dit perceel'} liggen ${r.adressen_op_kavel} adressen; kavel en bebouwd gelden voor het hele perceel.`;
|
||||
k('loket').href = r.loket;
|
||||
if (r.link) open.href = r.link;
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
{% endmacro %}
|
||||
Reference in New Issue
Block a user