b8761740d7
Dit is wel een probleempje. Aangezien een lid voor een gegeven jaar van regiocode X -> 8 zou kunnen veranderen. Hier nog overleg over plegen met Annemieke & Monique.
352 lines
17 KiB
JavaScript
352 lines
17 KiB
JavaScript
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||
// 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);
|
||
ifThen($na_regiocode == 8,
|
||
$na_totaal_werkgroep = 0;
|
||
logAdd(log, 'info', 'regiocode = 8, werkgroepdagen tellen niet mee');
|
||
);
|
||
);
|
||
);
|
||
,
|
||
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!'));
|
||
);
|
||
|