Files
CRM_Scripts_NVKH/code-current/configs/2020-12-04 - script-bereken-nascholingstotaal-voor-jaar.js
2026-08-28 12:28:39 +02:00

276 lines
14 KiB
JavaScript

///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Initialiseren
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
$na_reg_dt = record\attribute('Contact', $contact_id, 'datumRegistratie');
$na_dispensatie = record\attribute('Contact', $contact_id, 'dispensatie');
$na_reg_jr = datetime\year($na_reg_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, handmatig, dagenVrijstelling, nascholingsnormId',
'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');
// 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');
,
// Totalen op 0
$na_totaal_dagen = 0;
$na_totaal_medisch = 0;
$na_totaal_homeopathie = 0;
$na_totaal_werkgroep = 0;
// Eerst de geaccrediteerde nascholingen voor zover van toepassing
// kan nog steeds met methode 1.
$na_rows = record\fetchRelatedMany(
'Contact', $contact_id, 'nascholingen',
'jaar, aantalDagen, aantalDagenMedisch, dagenHomeopathie',
'jaar', 'asc',
'jaar=', $year
);
$na_i = 0;
$na_n = array\length($na_rows);
while($na_i < $na_n,
$na_row = array\at($na_rows, $na_i);
$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);
$na_i = $na_i + 1;
);
// Dan de goedgekeurde handmatige nascholingen
// kan nog steeds met methode 1.
$na_rows = record\fetchRelatedMany(
'Contact', $contact_id, 'handmatigeNascholingen',
'jaar, dagen, dagenMedisch, dagenHomeopathie, status',
'jaar', 'asc',
'jaar=', $year
);
$na_i = 0;
$na_n = array\length($na_rows);
while($na_i < $na_n,
$na_row = array\at($na_rows, $na_i);
$status = array\at($na_row, 4);
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 vermeerderd: ', $na_totaal_dagen, ', en ', $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_verlagen = 0;
$na_i = 0;
$na_n = array\length($na_werkgroepen_ids_1);
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, ' datumVanaf:', $na_datumVanaf, ' year begin:', $na_year_begin);
$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', 'count=', $na_count);
$na_i = $na_i + 1;
);
// Oke en nu voor de jaren waarin er een einddatum is gezet.
$na_i = 0;
$na_n = array\length($na_werkgroepen_ids_2);
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, ' datumVanaf:', $na_datumVanaf, ' year begin:', $na_year_begin);
log('warning', 'datum t/m: ', $na_end, ' datumT/M:', $na_datumTotEnMet, ' year end:', $na_year_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', 'count=', $na_count);
$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_totaal_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
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
$na_dagen_norm_formeel = hash\get(hash\get($na_norm, $year), 'dagen');
$na_medisch_norm = hash\get(hash\get($na_norm, $year), 'dagenMedisch');
$na_homeopathie_norm = hash\get(hash\get($na_norm, $year), 'dagenHomeopathie');
log('warning', 'nascholingsnorm: jaar: ', $year, ', dagen: ', $na_dagen_norm_formeel,
', medisch: ', $na_medisch_norm,
', homeopathie: ', $na_homeopathie_norm
);
// $na_vrijstelling is op zich al bekend, maar misschien is er nog dispensatie of registratie jaar
$na_registration = ($year <= $na_reg_jr);
ifThenElse($na_dispensatie,
$na_vrijstelling = $na_dagen_norm_formeel;
,
ifThen($na_registration,
$na_vrijstelling = $na_dagen_norm_formeel;
);
);
$na_dagen_norm = $na_dagen_norm_formeel - $na_vrijstelling;
log('warning', 'dispensatie=', $na_dispensatie, ', regjr=', $na_registration, ', norm=', $na_dagen_norm);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Bereken het saldo aan dagen
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
$na_totaal_alle_dagen = $na_totaal_dagen + $na_totaal_medisch + $na_totaal_homeopathie;
$na_saldo = $na_totaal_alle_dagen - $na_dagen_norm;
$na_saldo_homeopathie = $na_totaal_homeopathie - $na_homeopathie_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);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Nascholingstotaal updaten (alleen van belang als we niet al aan het updaten zijn!)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
ifThen(!$no_db_update && $na_id != '<none>',
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
);
ifThen(!$oke, log('error', 'Update ging niet goed!'));
);