356 lines
19 KiB
JavaScript
356 lines
19 KiB
JavaScript
//exec last execution: Fri Jan 20 2023 15:56:21 GMT+0100 (Midden-Europese standaardtijd)
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Initialisatie
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
log('warning', 'Doorrekenen voor contact ', $contact_id);
|
|
|
|
$na_reg_dt = record\attribute('Contact', $contact_id, 'datumRegistratie');
|
|
$na_reg_jr = datetime\year($na_reg_dt);
|
|
|
|
$na_methode_1_max_jaar = configGet('berekening-methode-1-tot-en-met');
|
|
$na_methode_1_max_surplus = configGet('berekening-methode-1-max-surplus');
|
|
$na_style_rubric = configGet('nascholingstotaal-rapport-jaar-rubric-style');
|
|
$na_style_dagen = configGet('nascholingstotaal-rapport-jaar-dagen-style');
|
|
$na_style_dagen_inspr = configGet('nascholingstotaal-rapport-jaar-dagen-style-inspr');
|
|
$na_style_nstd_goed = configGet('nascholingstotaal-rapport-jaar-nstd-goed-style');
|
|
$na_style_nstd_goed_report = configGet('nascholingstotaal-rapport-jaar-nstd-goed-report-style');
|
|
$na_style_nstd_tekort = configGet('nascholingstotaal-rapport-jaar-nstd-tekort-style');
|
|
$na_style_nstd_tekort_report = configGet('nascholingstotaal-rapport-jaar-nstd-tekort-report-style');
|
|
$na_style_nstd_nvt = configGet('nascholingstotaal-rapport-jaar-nstd-nvt-style');
|
|
$na_style_bepaald = configGet('nascholingstotaal-rapport-jaar-nstd-bepaald-style');
|
|
$na_style_bepaald_report = configGet('nascholingstotaal-rapport-jaar-nstd-bepaald-report-style');
|
|
$na_style_onbepaald = configGet('nascholingstotaal-rapport-jaar-nstd-onbepaald-style');
|
|
$na_style_onbepaald_report = configGet('nascholingstotaal-rapport-jaar-nstd-onbepaald-report-style');
|
|
$na_style_kop = configGet('nascholingstotaal-rapport-jaar-kop-style');
|
|
$na_style_probleem = configGet('nascholingstotaal-rapport-probleem-style');
|
|
$na_style_waarschuwing = configGet('nascholingstotaal-rapport-waarschuwing-style');
|
|
$na_style_sub_rubric = configGet('nascholingstotaal-rapport-sub-rubriek-style');
|
|
|
|
$na_nascholing_onvoldoende = false;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Haal eerst alle nascholingstotalen voor een contact op, in volgorde van jaar.
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
$na_geen_status_vanaf_jaar = datetime\year(datetime\now()) - 1;
|
|
|
|
$na_in_calc_key = string\concatenate('nascholingstotalen-in-berekening-voor', $contact_id);
|
|
global\set($na_in_calc_key, true);
|
|
|
|
$na_rows = record\fetchManyHash('Nascholingstotaal',
|
|
'id, jaar, dagen, dagenMedisch, dagenHomeopathie, dagenTotaal, medischSaldo, homeopathieSaldo, dagenSaldo, saldoNaCorrectie, dagenWerkgroep, dagenVrijstelling, status, berekeningsUitleg, startSurplus, dagenFormeleNorm, homeopathieFormeleNorm, medischFormeleNorm, maxMeenemen, examenjaar, handmatig, surplus, surplusHomeopathie, surplusMedisch',
|
|
'jaar', 'asc',
|
|
'contactId=', $contact_id,
|
|
);
|
|
|
|
$na_n = array\length($na_rows);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Initialiseer om te beginnen alle surplussen op de saldo's van een jaar.
|
|
// Daarna gaan we de zaak verdelen.
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
$na_i = 0;
|
|
while($na_i < $na_n,
|
|
$na_row = array\at($na_rows, $na_i);
|
|
$na_surplus = hash\get($na_row, 'dagenSaldo');
|
|
$na_surplus_med = hash\get($na_row, 'medischSaldo');
|
|
$na_surplus_hom = hash\get($na_row, 'homeopathieSaldo');
|
|
ifThen($na_i == 0,
|
|
$na_start_surplus = hash\get($na_row, 'startSurplus');
|
|
$surplus = $surplus + $na_start_surplus;
|
|
);
|
|
$na_row = hash\set($na_row, 'surplus', 0);
|
|
$na_row = hash\set($na_row, 'surplusMedisch', 0);
|
|
$na_row = hash\set($na_row, 'surplusHomeopathie', 0);
|
|
$na_rows = array\set($na_rows, $na_i, $na_row);
|
|
$na_i = $na_i + 1;
|
|
);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Pas de eenvoudige berekeningsmethode toe. Eerst tellen we gewoon door, zonder te corrigeren
|
|
// Behalve dan dat we maximaal de norm aan dagen meenemen naar het volgende jaar.
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
$na_i = 0;
|
|
while($na_i < $na_n,
|
|
|
|
$na_uitleg = '';
|
|
|
|
$na_row = array\at($na_rows, $na_i);
|
|
ifThenElse($na_i > 0,
|
|
$na_row_prev = array\at($na_rows, $na_i - 1);
|
|
,
|
|
$na_row_prev = null;
|
|
);
|
|
|
|
$na_id = hash\get($na_row, 'id');
|
|
$na_jaar = hash\get($na_row, 'jaar');
|
|
|
|
$na_surplus_tot = hash\get($na_row, 'surplus');
|
|
$na_surplus_med = hash\get($na_row, 'surplusMedisch');
|
|
$na_surplus_hom = hash\get($na_row, 'surplusHomeopathie');
|
|
|
|
$na_max_meenemen = hash\get($na_row, 'maxMeenemen');
|
|
log('warning', 'na_max_meenemen=', $na_max_meenemen);
|
|
|
|
$do_adding = true;
|
|
|
|
ifThenElse($na_i == 0,
|
|
log('warning', '1e jaar');
|
|
log('warning', 'jaar=', $na_jaar, ', surplus_hom=', $na_surplus_hom, ', surplus_med=', $na_surplus_med, ', surplus_tot=', $na_surplus_tot);
|
|
,
|
|
// Bereken het opvolgende jaar
|
|
// Initialiseer de situatie van vorig jaar en dit jaar.
|
|
$na_surplus_hom_prev = hash\get($na_row_prev, 'surplusHomeopathie');
|
|
$na_surplus_med_prev = hash\get($na_row_prev, 'surplusMedisch');
|
|
$na_surplus_tot_prev = hash\get($na_row_prev, 'surplus');
|
|
|
|
log('warning', 'previous: jaar=', $na_jaar - 1, ', surplus_hom=', $na_surplus_hom_prev, ', surplus_med=', $na_surplus_med_prev, ', surplus_tot=', $na_surplus_tot_prev);
|
|
log('warning', 'current : jaar=', $na_jaar, ', surplus_hom=', $na_surplus_hom, ', surplus_med=', $na_surplus_med, ', surplus_tot=', $na_surplus_tot);
|
|
|
|
// Check eerst of er nog tekorten van het voorgaande jaar zijn om op te lossen.
|
|
// Stel dat er voldoende saldo is in het huidige jaar en een tekort in het voorgaande jaar,
|
|
// dan gaan we dat van het huidige jaar afsnoepen en terugbrengen naar het laatste voorgaande
|
|
// jaar dat een tekort heeft. Nu is het zo, dat dit tekort cumulatief is voor alle voorgaande
|
|
// jaren met tekorten. We gaan dan terug naar het 1e jaar met een tekort voor een gegeven
|
|
// soort en fixen het daar. Daarna zetten we na_i terug naar dat jaar + 1 en rekenen
|
|
// opnieuw door.
|
|
|
|
ifThen($na_surplus_hom_prev < 0 || $na_surplus_med_prev < 0 || $na_surplus_tot_prev < 0,
|
|
// Is er überhaupt iets aan te vullen?
|
|
ifThen($na_surplus_tot > 0,
|
|
// Bepaal tot waar het tekort voor medisch ligt
|
|
// Als de medische surplus > 0.
|
|
ifThenElse($na_surplus_med > 0 && $na_surplus_med_prev < 0,
|
|
// Corrigeer medisch
|
|
$na_j = $na_i - 1;
|
|
$na_row_j = array\at($na_rows, $na_j);
|
|
$na_surplus_med_j = hash\get($na_row_j, 'surplusMedisch');
|
|
while($na_surplus_med_j < 0 && $na_j >= 0
|
|
$na_j = $na_j - 1;
|
|
ifThen($na_j > 0,
|
|
$na_row_j = array\at($na_rows, $na_j);
|
|
$na_surplus_med_j = hash\get($na_row_j, 'surplusMedisch');
|
|
);
|
|
);
|
|
$na_j = $na_j + 1;
|
|
$na_row_j = array\at($na_rows, $na_j);
|
|
$na_surplus_med_j = hash\get($na_row_j, 'surplusMedisch');
|
|
$na_surplus_j = hash\get($na_row_j, 'surplus');
|
|
|
|
$na_max_corectie = -1 * $na_surplus_med_j;
|
|
ifThen($na_max_correctie > $na_surplus_med, $na_max_correctie = $na_surplus_med);
|
|
ifThen($na_max_correctie > $na_surplus_tot, $na_max_correctie = $na_surplus_tot);
|
|
|
|
$na_surplus_med_j = $na_surplus_med_j + $na_max_correctie;
|
|
$na_surplus_j = $na_surplus_j + $na_max_correctie;
|
|
$na_suplus_med = $na_suplus_med - $na_max_correctie;
|
|
$na_surplus_tot = $na_surplus_tot - $na_max_correctie;
|
|
|
|
$na_row_j = hash\set($na_row_j, 'surplusMedisch', $na_surplus_med_j);
|
|
$na_row_j = hash\set($na_row_j, 'surplus', $na_surplus_j);
|
|
$na_rows = array\set($na_rows, $na_j, $na_row_j);
|
|
|
|
$do_adding = false;
|
|
,
|
|
ifThenElse($na_surplus_hom > 0 && $na_surplus_hom_prev < 0,
|
|
// Corrigeer homeopathie
|
|
$na_j = $na_i - 1;
|
|
$na_row_j = array\at($na_rows, $na_j);
|
|
$na_surplus_hom_j = hash\get($na_row_j, 'surplusHomeopathie');
|
|
while($na_surplus_hom_j < 0 && $na_j >= 0
|
|
$na_j = $na_j - 1;
|
|
ifThen($na_j > 0,
|
|
$na_row_j = array\at($na_rows, $na_j);
|
|
$na_surplus_hom_j = hash\get($na_row_j, 'surplusHomeopathie');
|
|
);
|
|
);
|
|
$na_j = $na_j + 1;
|
|
$na_row_j = array\at($na_rows, $na_j);
|
|
$na_surplus_hom_j = hash\get($na_row_j, 'surplusHomeopathie');
|
|
$na_surplus_j = hash\get($na_row_j, 'surplus');
|
|
|
|
$na_max_corectie = -1 * $na_surplus_hom_j;
|
|
ifThen($na_max_correctie > $na_surplus_hom, $na_max_correctie = $na_surplus_hom);
|
|
ifThen($na_max_correctie > $na_surplus_tot, $na_max_correctie = $na_surplus_tot);
|
|
|
|
$na_surplus_hom_j = $na_surplus_hom_j + $na_max_correctie;
|
|
$na_surplus_j = $na_surplus_j + $na_max_correctie;
|
|
$na_suplus_hom = $na_suplus_hom - $na_max_correctie;
|
|
$na_surplus_tot = $na_surplus_tot - $na_max_correctie;
|
|
|
|
$na_row_j = hash\set($na_row_j, 'surplusHomeopathie', $na_surplus_hom_j);
|
|
$na_row_j = hash\set($na_row_j, 'surplus', $na_surplus_j);
|
|
$na_rows = array\set($na_rows, $na_j, $na_row_j);
|
|
|
|
$do_adding = false;
|
|
,
|
|
// Corrigeer overig indien nodig
|
|
ifThen($na_surplus_tot > 0 && $na_surplus_tot_prev < 0
|
|
$na_j = $na_i - 1;
|
|
$na_row_j = array\at($na_rows, $na_j);
|
|
$na_surplus_j = hash\get($na_row_j, 'surplus');
|
|
while($na_surplus_j < 0 && $na_j >= 0
|
|
$na_j = $na_j - 1;
|
|
ifThen($na_j > 0,
|
|
$na_row_j = array\at($na_rows, $na_j);
|
|
$na_surplus_j = hash\get($na_row_j, 'surplus');
|
|
);
|
|
);
|
|
$na_j = $na_j + 1;
|
|
$na_row_j = array\at($na_rows, $na_j);
|
|
$na_surplus_j = hash\get($na_row_j, 'surplus');
|
|
|
|
$na_max_corectie = -1 * $na_surplus_j;
|
|
ifThen($na_max_correctie > $na_surplus_tot, $na_max_correctie = $na_surplus_tot);
|
|
|
|
$na_surplus_j = $na_surplus_j + $na_max_correctie;
|
|
$na_surplus_tot = $na_surplus_tot - $na_max_correctie;
|
|
|
|
$na_row_j = hash\set($na_row_j, 'surplus', $na_surplus_j);
|
|
$na_rows = array\set($na_rows, $na_j, $na_row_j);
|
|
|
|
$do_adding = false;
|
|
),
|
|
);
|
|
);
|
|
);
|
|
);
|
|
|
|
ifThen($do_adding,
|
|
// Pak maximaal de maxMeenemen norm aan dagen over van het voorgaande jaar, als er voldoende dagen zijn.
|
|
ifThen($na_surplus_tot_prev > 0,
|
|
log('warning', 'Surplus meenemen voor zover mogelijk, max_meenemen=', $na_max_meenemen);
|
|
// Oke, we kunnen überhaupt dagen meenemen.
|
|
$na_max_mee = $na_max_meenemen;
|
|
// Verdeel de dagen tussen medisch en homeopatisch, tenzij de
|
|
// voorgaande surplussen niet voldoende zijn, vul dan verder aantal
|
|
// met overig
|
|
while($na_surplus_tot_prev > 0 && $na_max_mee > 0,
|
|
// Zo lang huidig medisch surplus < 0 en previous medisch surplus > 0, kies voor medisch
|
|
// Anders, zo lang huidig homeopathie surplus < 0 en previous homeopathie surplus > 0, kies voor homeopathie
|
|
// Anders, zo lang previous homeopathie surplus / medisch surplus > 0, kies voor med, hom alternerend.
|
|
// Anders, zo lang previous homeopathie surplus > 0, kies voor homeopathie
|
|
// Anders, zo lang previous medisch surplus > 0, kies voor medisch
|
|
// Anders, kies voor overig
|
|
ifThenElse($na_surplus_med < 0 && $na_surplus_med_prev > 0,
|
|
$na_hom_med_overig = 'med';
|
|
,
|
|
ifThenElse($na_surplus_hom < 0 && $na_surplus_hom_prev > 0,
|
|
$na_hom_med_overig = 'hom';
|
|
,
|
|
ifThenElse($na_surplus_hom_prev > 0 && $na_surplus_med_prev > 0,
|
|
ifThenElse($na_hom_med_overig == 'med',
|
|
$na_hom_med_overig = 'hom';
|
|
,
|
|
$na_hom_med_overig = 'med';
|
|
);
|
|
,
|
|
ifThenElse($na_surplus_hom_prev > 0,
|
|
$na_hom_med_overig = 'hom';
|
|
,
|
|
ifThenElse($na_surplus_med_prev > 0,
|
|
$na_hom_med_overig = 'med';
|
|
,
|
|
$na_hom_med_overig = 'overig';
|
|
);
|
|
);
|
|
);
|
|
);
|
|
);
|
|
|
|
log('warning', 'na_hom_med_overig=', $na_hom_med_overig, ', surplus_tot_prev=', $na_surplus_tot_prev, ', na_max_mee=', $na_max_mee);
|
|
|
|
ifThen($na_hom_med_overig == 'med',
|
|
ifThen($na_surplus_med_prev > 0,
|
|
$na_take = 1;
|
|
ifThen($na_surplus_med_prev < $na_take, $na_take = $na_surplus_med_prev);
|
|
ifThen($na_surplus_tot_prev < $na_take, $na_take = $na_surplus_tot_prev);
|
|
$na_surplus_med = $na_surplus_med + $na_take;
|
|
$na_surplus_med_prev = $na_surplus_med_prev - $na_take;
|
|
$na_surplus_tot = $na_surplus_tot + $na_take;
|
|
$na_surplus_tot_prev = $na_surplus_tot_prev - $na_take;
|
|
$na_max_mee = $na_max_mee - $na_take;
|
|
);
|
|
);
|
|
ifThen($na_hom_med_overig == 'hom',
|
|
ifThen($na_surplus_hom_prev > 0,
|
|
$na_take = 1;
|
|
ifThen($na_surplus_hom_prev < $na_take, $na_take = $na_surplus_hom_prev);
|
|
ifThen($na_surplus_tot_prev < $na_take, $na_take = $na_surplus_tot_prev);
|
|
$na_surplus_hom = $na_surplus_hom + $na_take;
|
|
$na_surplus_hom_prev = $na_surplus_hom_prev - $na_take;
|
|
$na_surplus_tot = $na_surplus_tot + $na_take;
|
|
$na_surplus_tot_prev = $na_surplus_tot_prev - $na_take;
|
|
$na_max_mee = $na_max_mee - $na_take;
|
|
);
|
|
);
|
|
ifThen($na_hom_med_overig == 'overig',
|
|
// We weten nu al dat na_surplus_tot_prev > 0
|
|
$na_take = 1;
|
|
ifThen($na_surplus_tot_prev < $na_take, $na_take = $na_surplus_tot_prev);
|
|
$na_surplus_tot = $na_surplus_tot + $na_take;
|
|
$na_surplus_tot_prev = $na_surplus_tot_prev - $na_take;
|
|
$na_max_mee = $na_max_mee - $na_take;
|
|
);
|
|
|
|
);
|
|
);
|
|
|
|
log('warning', 'previous: jaar=', $na_jaar - 1, ', surplus_hom=', $na_surplus_hom_prev, ', surplus_med=', $na_surplus_med_prev, ', surplus_tot=', $na_surplus_tot_prev);
|
|
log('warning', 'current : jaar=', $na_jaar, ', surplus_hom=', $na_surplus_hom, ', surplus_med=', $na_surplus_med, ', surplus_tot=', $na_surplus_tot);
|
|
|
|
$na_row_prev = hash\set($na_row_prev, 'surplusHomeopathie', $na_surplus_hom_prev);
|
|
$na_row_prev = hash\set($na_row_prev, 'surplusMedisch', $na_surplus_med_prev);
|
|
$na_row_prev = hash\set($na_row_prev, 'surplus', $na_surplus_tot_prev);
|
|
|
|
$na_rows = array\set($na_rows, $na_i - 1, $na_row_prev);
|
|
);
|
|
);
|
|
|
|
$na_row = hash\set($na_row, 'surplusHomeopathie', $na_surplus_hom);
|
|
$na_row = hash\set($na_row, 'surplusMedisch', $na_surplus_med);
|
|
$na_row = hash\set($na_row, 'surplus', $na_surplus_tot);
|
|
$na_rows = array\set($na_rows, $na_i, $na_row);
|
|
|
|
ifThenElse($do_adding,
|
|
$na_i = $na_i + 1;
|
|
,
|
|
$na_i = $na_j;
|
|
);
|
|
);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Zet al die totalen weer in de database
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
$na_i = 0;
|
|
while($na_i < $na_n,
|
|
$na_row = array\at($na_rows, $na_i);
|
|
$na_id = hash\get($na_row, 'id');
|
|
$na_surplus = hash\get($na_row, 'surplus');
|
|
$na_surplus_hom = hash\get($na_row, 'surplusHomeopathie');
|
|
$na_surplus_med = hash\get($na_row, 'surplusMedisch');
|
|
$na_dashboard = '';
|
|
$na_berekeningsuitleg = '';
|
|
|
|
record\update('Nascholingstotaal', $na_id,
|
|
'surplus', $na_surplus,
|
|
'surplusMedisch', $na_surplus_med,
|
|
'surplusHomeopathie', $na_surplus_hom,
|
|
'dashboard', $na_dashboard,
|
|
'berekeningsuitleg', $na_report
|
|
);
|
|
|
|
$na_i = $na_i + 1;
|
|
);
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Klaar.
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
global\unset($na_in_calc_key, true);
|