Skip to content

Commit

Permalink
feat: add support for fusie IVs
Browse files Browse the repository at this point in the history
  • Loading branch information
elpoelma committed Dec 3, 2024
1 parent 4bdc01a commit 7985754
Show file tree
Hide file tree
Showing 4 changed files with 149 additions and 67 deletions.
5 changes: 5 additions & 0 deletions .changeset/cuddly-bags-hang.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'frontend-gelinkt-notuleren': patch
---

Rework installatievergadering API a bit for clarity
5 changes: 5 additions & 0 deletions .changeset/popular-ghosts-listen.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'frontend-gelinkt-notuleren': minor
---

Add fusietemplates to installatievergadering-api configuration
168 changes: 101 additions & 67 deletions app/api/installatievergadering.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

import { RAAD_VOOR_MAATSCHAPPELIJK_WELZIJN } from '../utils/classification-utils';
import templateUuidInstantiator from '@lblod/template-uuid-instantiator';
import { MapWithDefault } from '../utils/map-with-default';

/**
* @typedef {Object} CreateInstallatievergaderingOptions
Expand Down Expand Up @@ -89,7 +90,7 @@ async function getMunicipality(bestuursorgaan) {
async function getSpec(bestuursorgaan) {
const municipality = await getMunicipality(bestuursorgaan);

const spec = MUNICIPALITY_CONFIG[municipality] ?? DEFAULT_MUNICIPALITY_SPEC;
const spec = MUNICIPALITY_CONFIG.get(municipality);

if (await isRMW(bestuursorgaan)) {
return spec.rmw;
Expand Down Expand Up @@ -141,10 +142,39 @@ const IVGR_MAP = [

/** @type {TemplateSpec[]} */
const IVGR_FUSIE_MAP = [
{
templateTitle: 'IVFUSIE1 Kennisname van de definitieve verkiezingsuitslag',
apTitle: 'Kennisname van de definitieve verkiezingsuitslag',
},
{
templateTitle: 'IVFUSIE2 Onderzoek van de geloofsbrieven',
apTitle: 'Onderzoek van de geloofsbrieven',
},
{
templateTitle: 'IVFUSIE3 Eedaflegging van de verkozen gemeenteraadsleden',
apTitle: 'Eedaflegging van de verkozen gemeenteraadsleden',
},
{
templateTitle:
'IVGRFusie1 Kennisname van de definitieve verkiezingsuitslag DUMMY',
apTitle: 'Kennisname van de definitieve verkiezingsuitslag fusie',
'IVFUSIE4 Bepaling van de rangorde van de gemeenteraadsleden',
apTitle: 'Bepaling van de rangorde van de gemeenteraadsleden',
},
{
templateTitle: 'IVFUSIE5 Vaststelling van de fracties',
apTitle: 'Vaststelling van de fracties',
},
{
templateTitle: 'IVFUSIE6 Verkiezing van de voorzitter van de gemeenteraad',
apTitle: 'Verkiezing van de voorzitter van de gemeenteraad',
},
{
templateTitle: 'IVFUSIE7 Verkiezing van de schepenen',
apTitle: 'Verkiezing van de schepenen',
},
{
templateTitle:
'IVFUSIE8 Aanduiding en eedaflegging van de aangewezen-burgemeester',
apTitle: 'Aanduiding en eedaflegging van de aangewezen-burgemeester',
},
];
/** @type {TemplateSpec[]} */
Expand All @@ -156,6 +186,16 @@ const IVGR_POLITIERAAD_MAP = [
},
];

/** @type {TemplateSpec[]} */
const IVGR_FUSIE_POLITIERAAD_MAP = [
...IVGR_FUSIE_MAP,
{
templateTitle:
'IVFUSIE9 Verkiezing van de vertegenwoordigers van de politieraad',
apTitle: 'Verkiezing van de vertegenwoordigers van de politieraad',
},
];

/** @type {TemplateSpec[]} */
const IVRMW_MAP = [
{
Expand All @@ -171,72 +211,66 @@ const IVRMW_MAP = [
'Verkiezing van de leden van het bijzonder comité voor de sociale dienst',
},
];
/** @type {TemplateSpec[]} */
const IVRMW_FUSIE_MAP = IVRMW_MAP;

/**
* @typedef {Object} MunicipalitySpec
* @property {TemplateSpec[]} gemeenteraad
* @property {TemplateSpec[]} rmw
*/

const FUSION_SPEC = { gemeenteraad: IVGR_FUSIE_MAP, rmw: IVRMW_FUSIE_MAP };

/**
* municipalities without the 9th agenda item about the police zone
* @type {MunicipalitySpec}
*/
const NO_POLITIERAAD_SPEC = {
gemeenteraad: IVGR_MAP,
rmw: IVRMW_MAP,
};

/**
* Most municipalities will have the 9th agenda item
* @type {MunicipalitySpec} */
const DEFAULT_MUNICIPALITY_SPEC = {
const MUNICIPALITY_CONFIG = new MapWithDefault({
gemeenteraad: IVGR_POLITIERAAD_MAP,
rmw: IVRMW_MAP,
};
});

/** @type { Record<string, MunicipalitySpec> } */
const MUNICIPALITY_CONFIG = {
// fusions
'Merelbeke-Melle': FUSION_SPEC,
'Nazareth-De Pinte': FUSION_SPEC,
Pajottegem: FUSION_SPEC,
'Tessenderlo-Ham': FUSION_SPEC,
Tielt: FUSION_SPEC,
Lochristi: FUSION_SPEC,
Hasselt: FUSION_SPEC,
'Beveren-Kruibeke-Zwijndrecht': FUSION_SPEC,
Wingene: FUSION_SPEC,
'Tongeren-Borgloon': FUSION_SPEC,
'Bilzen-Hoeselt': FUSION_SPEC,
//TODO: NO Politieraad for lokeren
Lokeren: FUSION_SPEC,
// Set-up 'gemeenten' that do not have a 'politieraad'
MUNICIPALITY_CONFIG.batchSet(
[
'Voeren',
'Ronse',
'Brasschaat',
'Schoten',
'Lier',
'Heist-op-den-Berg',
'Lommel',
'Heusden-Zolder',
'Leuven',
'Aarschot',
'Zaventem',
'Dilbeek',
'Grimbergen',
'Gent',
'Sint-Niklaas',
'Aalst',
'Ninove',
'Dendermonde',
'Brugge',
'Oostende',
'Middelkerke',
],
{
gemeenteraad: IVGR_MAP,
rmw: IVRMW_MAP,
},
);

// municipalities without the 9th agenda item
Voeren: NO_POLITIERAAD_SPEC,
Ronse: NO_POLITIERAAD_SPEC,
Antwerpen: NO_POLITIERAAD_SPEC,
Brasschaat: NO_POLITIERAAD_SPEC,
Schoten: NO_POLITIERAAD_SPEC,
Lier: NO_POLITIERAAD_SPEC,
'Heist-op-den-Berg': NO_POLITIERAAD_SPEC,
Lommel: NO_POLITIERAAD_SPEC,
'Heusden-Zolder': NO_POLITIERAAD_SPEC,
Leuven: NO_POLITIERAAD_SPEC,
Aarschot: NO_POLITIERAAD_SPEC,
Zaventem: NO_POLITIERAAD_SPEC,
Dilbeek: NO_POLITIERAAD_SPEC,
Grimbergen: NO_POLITIERAAD_SPEC,
Gent: NO_POLITIERAAD_SPEC,
'Sint-Niklaas': NO_POLITIERAAD_SPEC,
Aalst: NO_POLITIERAAD_SPEC,
Ninove: NO_POLITIERAAD_SPEC,
Dendermonde: NO_POLITIERAAD_SPEC,
Brugge: NO_POLITIERAAD_SPEC,
Oostende: NO_POLITIERAAD_SPEC,
Middelkerke: NO_POLITIERAAD_SPEC,
};
// Set-up 'fusiegemeenten' that have a 'politieraad'
MUNICIPALITY_CONFIG.batchSet(
[
'Merelbeke-Melle',
'Nazareth-De Pinte',
'Pajottegem',
'Tessenderlo-Ham',
'Tielt',
'Lochristi',
'Hasselt',
'Beveren-Kruibeke-Zwijndrecht',
'Wingene',
'Tongeren-Borgloon',
'Bilzen-Hoeselt',
],
{
gemeenteraad: IVGR_FUSIE_POLITIERAAD_MAP,
rmw: IVRMW_MAP,
},
);

// Set-up 'fusiegemeenten' without a 'politieraad'
MUNICIPALITY_CONFIG.batchSet(['Lokeren', 'Antwerpen'], {
gemeenteraad: IVGR_FUSIE_MAP,
rmw: IVRMW_MAP,
});
38 changes: 38 additions & 0 deletions app/utils/map-with-default.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/**
* @template K, V
* @extends {Map<K, V>}
*/
export class MapWithDefault extends Map {
defaultValue;

/**
* @param {V} defaultValue
* @param {readonly (readonly [K, V])[] | null} [entries]
*/
constructor(defaultValue, entries) {
super(entries);
this.defaultValue = defaultValue;
}

/**
* @returns {V}
*/
get(key) {
if (!this.has(key)) {
return this.defaultValue;
}
return super.get(key);
}

/**
* Method which maps each of the keys given to the passed value
* @param {K[]} keys
* @param {V} value
*/
batchSet(keys, value) {
for (const key of keys) {
// eslint-disable-next-line ember/classic-decorator-no-classic-methods
this.set(key, value);
}
}
}

0 comments on commit 7985754

Please sign in to comment.