Files
CRM_Scripts_NVKH/code-current/script-bereken-nascholingstotaal-voor-jaar.js
T
2026-08-28 11:27:49 +02:00

348 lines
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Initialiseren
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
$na_diploma_dt = record\attribute('Contact', $contact_id, 'vakopleidingDatumDiploma');
$na_dispensatie = record\attribute('Contact', $contact_id, 'dispensatie');
$na_regiocode = record\attribute('Contact', $contact_id, 'regiocode');
$na_regiocode_str = $na_regiocode;
$na_regiocode = toInt($na_regiocode); // regiocode numeriek maken
$na_diploma_jr = datetime\year($na_diploma_dt);
ifThen(!global\isset('nascholingsnorm-hash'),
$na_script = configGet('script-lees-nascholingsnorm-hash');
Exec($na_script);
);
$na_norm = global\get('nascholingsnorm-hash');
$na_id = '<none>';
$na_methode_1_tot_en_met = configGet('berekening-methode-1-tot-en-met');
$na_werkgroep_div = configGet('werkgroep-dagen-deel-factor');
$na_werkgroep_max = configGet('werkgroep-dagen-max');
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Bereken de totalen dagen en dagenMedisch.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
ifThen(!$no_db_update,
$na_recs = record\fetchManyHash('Nascholingstotaal',
'id, dagen, dagenMedisch, dagenHomeopathie, dagenWerkgroep, handmatig, dagenVrijstelling, nascholingsnormId, startSurplus',
'createdAt', 'asc',
'contactId=', $contact_id,
'jaar=', $year
);
$na_nrecs = array\length($na_recs);
ifThenElse($na_nrecs > 0,
$na_rec = array\at($na_recs, 0);
$na_id = hash\get($na_rec, 'id');
$na_handmatig = hash\get($na_rec, 'handmatig');
$na_vrijstelling = hash\get($na_rec, 'dagenVrijstelling');
$na_start_surplus = hash\get($na_rec, 'startSurplus');
$na_current_norm_id = hash\get($na_rec, 'nascholingsnormId');
log('warning', 'Berekenen nascholingen voor jaar: ', $year, ', na_id = ', $na_id);
// Zolang de totalen handmatig zijn, wordt er niets berekend.
ifThenElse($na_handmatig,
$na_totaal_dagen = hash\get($na_rec, 'dagen');
$na_totaal_medisch = hash\get($na_rec, 'dagenMedisch');
$na_totaal_homeopathie = hash\get($na_rec, 'dagenHomeopathie');
$na_totaal_werkgroep = hash\get($na_rec, 'dagenWerkgroep');
log('warning', 'Handmatige nascholing, er wordt niets berekend');
log('warning', 'medisch:', $na_totaal_medisch, ', hom:', $na_totaal_homeopathie,
', werkgr:', $na_totaal_werkgroep, ', homoverig:', $na_totaal_dagen);
,
// Totalen op 0, dit is een te berekenen nascholing
$na_totaal_dagen = 0;
$na_totaal_medisch = 0;
$na_totaal_homeopathie = 0;
$na_totaal_werkgroep = 0;
// De goedgekeurde handmatige en geaccrediteerde nascholingen
// kan nog steeds met methode 1.
$na_rows = record\fetchRelatedMany(
'Nascholingstotaal', $na_id, 'nascholingen1',
'jaar, dagen, dagenMedisch, dagenHomeopathie, status, name',
'jaar', 'asc',
'jaar=', $year
);
$na_i = 0;
$na_n = array\length($na_rows);
log('warning', '#nascholingen gerelateerd aan nascholingstotaal:', $na_n);
while($na_i < $na_n,
$na_row = array\at($na_rows, $na_i);
$status = array\at($na_row, 4);
$name = array\at($na_row, 5);
log('warning', 'i = ', $na_i, ', status = ', $status);
ifThen($status != '-' && $status != 'afgekeurd',
$na_totaal_dagen = $na_totaal_dagen + array\at($na_row, 1);
$na_totaal_medisch = $na_totaal_medisch + array\at($na_row, 2);
$na_totaal_homeopathie = $na_totaal_homeopathie + array\at($na_row, 3);
log('warning', 'Dagen: hom:', $na_totaal_homeopathie, ', dagen: ', $na_totaal_dagen, ', medisch:', $na_totaal_medisch);
);
$na_i = $na_i + 1;
);
// Dan het aantal notulen voor de werkgroepen van dit contact voor het gegeven jaar
// Eerst kijken we of we al groter dan het grensjaar zitten.
// Dit is niet meer voor methode 1.
ifThen($year > $na_methode_1_tot_en_met,
// Nu kunnen we ons best doen.
// Haal de werkgroep lidmaatschappen op die geldig zijn voor dit jaar.
$na_today = datetime\now();
$na_werkgroepen_ids_1 = record\fetchRelatedManyHash('Contact', $contact_id,
'werkgroeplidmaatschappen',
'werkgroepId, datumVanaf',
'name', 'asc',
'lidmaatschapBeeindigd=', 0,
'jaarVanaf<=', $year,
);
$na_werkgroepen_ids_2 = record\fetchRelatedManyHash('Contact', $contact_id,
'werkgroeplidmaatschappen',
'werkgroepId, datumVanaf, datumTotEnMet',
'name', 'asc',
'lidmaatschapBeeindigd=', 1,
'jaarVanaf<=', $year,
'jaarTotEnMet>=', $year
);
// Oke, nu hebben we de werkgroep ids.
// En dan kijken naar het aantal verslagen over dit jaar.
// En afkappen op een maximaal aantal dagen.
$na_werkgroep_verslagen = 0;
$na_n = array\length($na_werkgroepen_ids_1);
log('warning', 'Werkgroepen die niet beëindigd zijn :', $na_n);
$na_i = 0;
while($na_i < $na_n,
// Verkrijg het aantal notulen >= max(datumVanaf,begin dit jaar) en kleiner einde dit jaar.
$na_row = array\at($na_werkgroepen_ids_1, $na_i);
$na_werkgroep_id = hash\get($na_row, 'werkgroepId');
$na_datumVanaf = hash\get($na_row, 'datumVanaf');
$na_year_begin = string\concatenate($year, '-01-01');
$na_end = string\concatenate($year, '-12-31');
ifThenElse($na_datumVanaf > $na_year_begin,
$na_begin = $na_datumVanaf,
$na_begin = $na_year_begin);
log('warning', 'werkgroepid = ', $na_werkgroep_id);
log('warning', 'datum vanaf: ', $na_begin, ', datum eind:', $na_end);
$na_count = record\countRel('Werkgroep', $na_werkgroep_id,
'werkgroepverslagen',
'datum>=', $na_begin,
'datum<=', $na_end
);
$na_werkgroep_verslagen = $na_werkgroep_verslagen + $na_count;
log('warning', 'notulen count=', $na_count, ', werkgroep verslagen=', $na_werkgroep_verslagen);
$na_i = $na_i + 1;
);
// Oke en nu voor de jaren waarin er een einddatum is gezet.
$na_n = array\length($na_werkgroepen_ids_2);
log('warning', 'Werkgroepen met een einddatum:', $na_n);
$na_i = 0;
while($na_i < $na_n,
// Verkrijg het aantal notulen >= max(datumVanaf,begin dit jaar) en kleiner MIN(datumTotEnMet, einde dit jaar).
$na_row = array\at($na_werkgroepen_ids_2, $na_i);
$na_werkgroep_id = hash\get($na_row, 'werkgroepId');
$na_datumVanaf = hash\get($na_row, 'datumVanaf');
$na_year_begin = string\concatenate($year, '-01-01');
ifThenElse($na_datumVanaf > $na_year_begin,
$na_begin = $na_datumVanaf,
$na_begin = $na_year_begin);
$na_datumTotEnMet = hash\get($na_row, 'datumTotEnMet');
$na_year_end = string\concatenate($year, '-12-31');
ifThenElse($na_datumTotEnMet < $na_year_end,
$na_end = $na_datumTotEnMet,
$na_end = $na_year_end);
log('warning', 'werkgroepid = ', $na_werkgroep_id);
log('warning', 'datum vanaf: ', $na_begin, ', datum einde:', $na_end);
$na_count = record\countRel('Werkgroep', $na_werkgroep_id,
'werkgroepverslagen',
'datum>=', $na_begin,
'datum<=', $na_end
);
$na_werkgroep_verslagen = $na_werkgroep_verslagen + $na_count;
log('warning', 'notulen count=', $na_count, ', werkgroep verslagen=', $na_werkgroep_verslagen);
$na_i = $na_i + 1;
);
log('warning', 'totaal aantal werkgroep verslagen voor ', $year, ' = ', $na_werkgroep_verslagen);
// Bereken de zooi.
$na_totaal_werkgroep = number\floor($na_werkgroep_verslagen / $na_werkgroep_div);
ifThen($na_totaal_werkgroep > $na_werkgroep_max, $na_totaal_werkgroep = $na_werkgroep_max);
);
);
,
log('error', 'Geen nascholingstotaal voor contact_id ', $contact_id, ' en jaar ', $year);
$na_totaal_dagen = 0;
$na_totaal_medisch = 0;
$na_vrijstelling = 0;
$na_totaal_homeopathie = 0;
$na_totaal_werkgroep = 0;
);
);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Bereken de norm & vrijstelling
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
$norm_key = $year;
ifThen($na_regiocode == 8,
log('warning', 'Afwijkende norm key');
$norm_key = string\concatenate($year, '-', $na_regiocode_str);
);
log('warning', 'Regiocode=', $na_regiocode, ', str=', $na_regiocode_str, ', Norm key = ', $norm_key);
$na_dagen_norm_formeel = hash\get(hash\get($na_norm, $norm_key), 'dagen');
$na_medisch_norm = hash\get(hash\get($na_norm, $norm_key), 'dagenMedisch');
$na_homeopathie_norm = hash\get(hash\get($na_norm, $norm_key), 'dagenHomeopathie');
$na_max_meenemen = hash\get(hash\get($na_norm, $norm_key), 'meeneemNorm');
$na_norm_id = hash\get(hash\get($na_norm, $norm_key), 'id');
$na_norm_name = hash\get(hash\get($na_norm, $norm_key), 'name');
log('warning', 'nascholingsnorm: jaar: ', $year, ', dagen: ', $na_dagen_norm_formeel,
', medisch: ', $na_medisch_norm,
', homeopathie: ', $na_homeopathie_norm,
', max meenemen: ', $na_max_meenemen,
', start surplus: ', $na_start_surplus,
', norm_id:', $na_norm_id,
', norm_name:', $na_norm_name
);
//
// $na_vrijstelling is op zich al bekend, maar misschien is er nog dispensatie of registratie jaar
// $na_vrijstelling = MIN($na_vrijstelling, $na_dagen_norm_formeel $na_homeopahie_norm $na_medisch_norm)
//
$na_registration = ($year <= $na_diploma_jr);
$na_examenjaar = false;
ifThenElse($year <= $na_methode_1_tot_en_met,
$na_max_vrijstelling = $na_dagen_norm_formeel;
,
$na_max_vrijstelling = $na_dagen_norm_formeel - $na_homeopathie_norm - $na_medisch_norm;
);
ifThen($na_vrijstelling > $na_max_vrijstelling, $na_vrijstelling = $na_max_vrijstelling);
ifThenElse($na_dispensatie,
$na_vrijstelling = $na_max_vrijstelling;
,
ifThen($na_registration,
$na_dagen_norm_formeel = 0;
$na_medisch_norm = 0;
$na_homeopathie_norm = 0;
$na_examenjaar = true;
);
);
$na_dagen_norm = $na_dagen_norm_formeel;
// Het aantal start dagen surplus kan nooit de norm overschrijden.
// startSurplus wordt alleen bij het 2013 record gebruikt, m.a.w. voor mensen die daarvoor
// al lid waren. In alle andere gevallen is $na_start_surplus gelijk aan 0.
ifThen($na_start_surplus > $na_dagen_norm_formeel, $na_start_surplus = $na_dagen_norm_formeel);
log('warning', 'dispensatie=', $na_dispensatie, ', regjr=', $na_registration,
', norm=', $na_dagen_norm, ', start surplus=', $na_start_surplus, ', dagen vrijstelling=', $na_vrijstelling, ', max vrijstelling=', $na_max_vrijstelling);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Bereken het saldo aan dagen
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
log('warning', 'medisch:', $na_totaal_medisch, ', hom:', $na_totaal_homeopathie,
', werkgr:', $na_totaal_werkgroep, ', homoverig:', $na_totaal_dagen);
log('warning', 'year=', $year, ', na_methode_1_tot_en_met=', $na_methode_1_tot_en_met);
/*
ifThenElse($year < $na_methode_1_tot_en_met,
$na_totaal_homeopathie = $na_totaal_homeopathie + $na_start_surplus + $na_vrijstelling;
$na_totaal_alle_dagen = $na_totaal_homeopathie;
,
ifThenElse($year == $na_methode_1_tot_en_met,
$na_totaal_homeopathie = $na_totaal_homemopathie + $na_start_surplus + $na_vrijstelling;
$na_totaal_alle_dagen = $na_totaal_dagen + $na_totaal_medisch + $na_totaal_homeopathie + $na_totaal_werkgroep;
,
$na_totaal_homeopathie = $na_totaal_homeopathie + $na_start_surplus;
$na_totaal_alle_dagen = $na_totaal_dagen + $na_totaal_medisch + $na_totaal_homeopathie + $na_totaal_werkgroep + $na_vrijstelling;
);
);
*/
ifThenElse($year < $na_methode_1_tot_en_met,
$na_saldo_homeopathie = $na_totaal_homeopathie + $na_start_surplus + $na_vrijstelling;
$na_saldo = $na_saldo_homeopathie;
$na_totaal_alle_dagen = $na_saldo_homemopathie;
,
ifThenElse($year == $na_methode_1_tot_en_met,
$na_saldo_homeopathie = $na_totaal_homeopathie + $na_start_surplus + $na_vrijstelling;
$na_saldo = $na_saldo_homeopathie + $na_totaal_medisch;
$na_totaal_alle_dagen = $na_saldo;
,
$na_saldo_homeopathie = $na_totaal_homeopathie + $na_start_surplus;
$na_saldo = $na_saldo_homeopathie + $na_totaal_medisch + $na_totaal_dagen + $na_vrijstelling + $na_totaal_werkgroep;
$na_totaal_alle_dagen = $na_saldo;
);
);
$na_saldo_homeopathie = $na_saldo_homeopathie - $na_homeopathie_norm;
$na_saldo = $na_saldo - $na_dagen_norm;
$na_saldo_medisch = $na_totaal_medisch - $na_medisch_norm;
log('warning', 'totaal alle:', $na_totaal_alle_dagen,
', saldo:', $na_saldo,
', saldo hom:', $na_saldo_homeopathie,
', saldo medisch:', $na_saldo_medisch);
log('warning', 'no db update = ', $no_db_update, ', na_id = ', $na_id);
log('warning', 'na_examenjaar = ', $na_examenjaar);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Nascholingstotaal updaten (alleen van belang als we niet al aan het updaten zijn!)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
ifThen(!$no_db_update && $na_id != '<none>',
// Updaten van het record leidt tot herberekening
// Het relateren van de nascholingsnorm gebeurt bij de record herberekening.
// Dus dat moeten we hier niet willen doen...
// Updaten van het record leidt tot herberekening, dus we moeten even oppassen.
log('warning', 'Updaten nascholingstotaal: ', $na_id, ' jaar=', $year);
$oke = record\update('Nascholingstotaal', $na_id,
'dagen', $na_totaal_dagen,
'dagenMedisch', $na_totaal_medisch,
'dagenHomeopathie', $na_totaal_homeopathie,
'dagenWerkgroep', $na_totaal_werkgroep,
'dagenTotaal', $na_totaal_alle_dagen,
'dagenSaldo', $na_saldo,
'homeopathieSaldo', $na_saldo_homeopathie,
'medischSaldo', $na_saldo_medisch,
'dagenFormeleNorm', $na_dagen_norm_formeel,
'medischFormeleNorm', $na_medisch_norm,
'homeopathieFormeleNorm', $na_homeopathie_norm,
'maxMeenemen', $na_max_meenemen,
'examenjaar', $na_examenjaar
);
ifThen(!$oke, log('error', 'Update ging niet goed!'));
);