Files
Facilitor/APPL/Shared/budget.inc
Maykel Geerdink d00ed75f1f FSN#35253: Kostenplaats budget (zakgeld) en Investeringsbudget niet mixen.
svn path=/Website/trunk/; revision=28103
2016-02-10 09:18:33 +00:00

240 lines
13 KiB
C++

<% /*
$Revision$
$Id$
File: budget.inc
Description: Generieke functies die door BES en MLD module gebruikt worden.
Parameters:
Context: Vanuit asp bestand
Note:
*/ %>
<%
var budget = {
// Geeft true als het bestelde bedrag boven de profiel-limiet van prs_key komt
// en dus goedkeuring vereist zal zijn.
exceeds_profiel: function(bestelbedrag, prs_key, dis_key)
{
var exceed = true; // geen profiel is altijd te hoog.
var sql = "SELECT prs.getprofiellimiet(" + prs_key + ", " + dis_key + ") limiet FROM DUAL";
var oRs = Oracle.Execute(sql);
if (oRs("limiet").value != null)
{
exceed = (oRs("limiet").value < bestelbedrag);
}
oRs.Close();
return exceed;
},
// Geeft true als het bestelde bedrag boven de profiel-limiet van prs_key komt
// en dus goedkeuring vereist zal zijn.
exceeds_limietagb: function(bestelbedrag, kp_key, dis_key)
{
var exceed = true; // geen profiel is altijd te hoog.
var sql = "SELECT prs.getlimietagb(" + kp_key + ", " + S("prs_approvemethod") + ", " + dis_key + ") limiet FROM DUAL";
var oRs = Oracle.Execute(sql);
if (oRs("limiet").value != null)
{
exceed = (oRs("limiet").value < bestelbedrag);
}
oRs.Close();
return exceed;
},
besteed_budget_pgb: function (prs_key, dis_key, params)
{ // Besteed budget van meegegeven persoon dit jaar voor de meegegeven discipline i.v.m. Persoons Gebonden Budget (PGB).
// Eventueel uitgezonderd (huidige) bestellingkey bes_key en meldingopdrachtkey opdr_key.
var budgetbesteld = 0;
// De discipline instelling disc_params_pgb moet 1 of 3 zijn. Afhankelijk van deze instelling roep je de pgb of agb versie aan. Hier opnieuw controleren is niet nodig.
// Totaalbedrag van eerdere bestellingen en meldingopdrachten dit jaar van de besteller en behandelaar i.v.m. Persoons Gebonden Budget (PGB).
var sql = "SELECT SUM(totaalbedrag) totaalbedrag"
+ " , SUM(b.bes_bestelling_korting) korting"
+ " , SUM(b.bes_bestelling_levkosten) levkosten"
+ " FROM (SELECT SUM (boi.bes_bestelopdr_item_aantal * boi.bes_bestelopdr_item_prijs) totaalbedrag"
+ " , b.bes_bestelling_key"
+ " FROM bes_bestelling b"
+ " , bes_bestelling_item bi"
+ " , bes_bestelopdr_item boi"
+ " , bes_bestelopdr bo"
+ " , bes_srtdeel isd"
+ " , bes_srtgroep isg"
+ " WHERE b.bes_bestelling_key = bi.bes_bestelling_key"
+ " AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key"
+ " AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key"
+ " AND bi.bes_srtdeel_key = isd.bes_srtdeel_key"
+ " AND isd.bes_srtgroep_key = isg.bes_srtgroep_key"
+ " AND b.prs_perslid_key = " + prs_key
+ " AND isg.ins_discipline_key = " + dis_key
// Alleen bestellingopdrachten in de behandelings fase (In bestelling (Bevestigd)(4)) en in de gereed fase (Geleverd(6) en Verwerkt(7)).
// Afgewezen(1), In behandeling(3), Ter bevestiging(5) en Geannuleerd(8) doen niet mee in de bepaling van geraamde en definitieve kosten.
+ " AND bo.bes_bestelopdr_status IN (4, 6, 7)"
+ (params && params.bes_key > -1
? " AND b.bes_bestelling_key <> " + params.bes_key
: "")
+ " AND b.bes_bestelling_datum >= TRUNC (SYSDATE, 'YEAR')"
+ " GROUP BY b.bes_bestelling_key) tot"
+ " , bes_bestelling b"
+ " WHERE b.bes_bestelling_key = tot.bes_bestelling_key"
+ " UNION "
+ "SELECT SUM (totaalbedrag) totaalbedrag"
+ " , 0 korting"
+ " , 0 levkosten"
+ " FROM (SELECT SUM (o.mld_opdr_kosten) totaalbedrag"
+ " , o.mld_opdr_key"
+ " FROM mld_opdr o"
+ " , mld_melding m"
+ " , mld_stdmelding sm"
+ " WHERE o.mld_melding_key = m.mld_melding_key"
+ " AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " AND o.prs_perslid_key = " + prs_key
+ " AND sm.mld_ins_discipline_key = " + dis_key
// Alleen meldingopdrachten in de actieve opdracht fase (Uitgegeven(5) en Geaccepteerd(8)),
// in de afhandelings fase (Technisch voltooid(6) en Kosten voltooid(9)) en in de gereed fase (Verwerkt(7)).
+ " AND o.mld_statusopdr_key IN (5, 6, 7, 8, 9)"
+ (params && params.opdr_key > -1
? " AND o.mld_opdr_key <> " + params.opdr_key
: "")
+ " AND o.mld_opdr_datumbegin >= TRUNC (SYSDATE, 'YEAR')"
+ " GROUP BY o.mld_opdr_key) tot"
+ " , mld_opdr o"
+ " WHERE o.mld_opdr_key = tot.mld_opdr_key";
sql = "SELECT SUM(totaalbedrag) totaalbedrag"
+ " , SUM(korting) korting"
+ " , SUM(levkosten) levkosten"
+ " FROM (" + sql + ")";
oRs = Oracle.Execute(sql);
var prstotaalbesteld = oRs("totaalbedrag").Value || 0;
var korting = oRs("korting").Value || 0;
var levkosten = oRs("levkosten").Value || 0;
var budgetbesteld = prstotaalbesteld - korting + levkosten;
oRs.close();
return budgetbesteld;
},
besteed_budget_agb: function (kp_key, params)
{ // Besteed budget van meegegeven persoon afgelopen periode i.v.m. Afdelings Gebonden Budget (AGB).
// Eventueel uitgezonderd (huidige) bestellingkey bes_key en meldingopdrachtkey opdr_key.
var budgetbesteld = 0;
// De discipline instelling disc_params_pgb moet 1 of 3 zijn. Afhankelijk van deze instelling roep je de pgb of agb versie aan. Hier opnieuw controleren is niet nodig.
// Totaalbedrag van eerdere bestellingen en meldingopdrachten van afgelopen periode van de besteller en behandeaar i.v.m. Afdelings Gebonden Budget (AGB).
// Limietperiode kostenplaats (prs_kostenplaats_limietperiode): 0(of NULL)=geen(oneindig) (default), 1=maand, 2=jaar.
if (kp_key > 0)
{ // Er is een kostenplaats gevonden.
// De limiet periode van de kostenplaatsgroep overruled die van de kostenplaats indien ingevuld.
sql = "SELECT CASE COALESCE(kg.prs_kostenplaatsgrp_limperiode, 0)" // Indien kostenplaats geen kostenplaatsgroep heeft dan ook "Geen" en eigen limietperiode van de kostenplaats nemen.
+ " WHEN 0" // Geen.
+ " THEN k.prs_kostenplaats_limietperiode"
+ " ELSE kg.prs_kostenplaatsgrp_limperiode" // Maand of Jaar.
+ " END limietperiode"
+ " FROM prs_kostenplaats k"
+ " , prs_kostenplaatsgrp kg"
+ " WHERE k.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key(+)"
+ " AND k.prs_kostenplaats_key = " + kp_key;
oRs = Oracle.Execute(sql);
var kp_limietperiode = oRs("limietperiode").Value;
var periode;
if (kp_limietperiode == 1)
periode = "MM"; // Maandelijks budget.
else if (kp_limietperiode == 2)
periode = "YYYY"; // Jaarlijks budget.
sql = "SELECT SUM(totaalbedrag) totaalbedrag"
+ " , SUM(b.bes_bestelling_korting) korting"
+ " , SUM(b.bes_bestelling_levkosten) levkosten"
+ " FROM (SELECT SUM (boi.bes_bestelopdr_item_aantal * boi.bes_bestelopdr_item_prijs) totaalbedrag"
+ " , b.bes_bestelling_key"
+ " FROM bes_bestelling b"
+ " , bes_bestelling_item bi"
+ " , bes_bestelopdr_item boi"
+ " , bes_bestelopdr bo"
+ " , bes_srtdeel bsd"
+ " , bes_srtgroep bsg"
+ " , bes_discipline bd"
+ " , bes_disc_params bdp"
+ " WHERE b.bes_bestelling_key = bi.bes_bestelling_key"
+ " AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key"
+ " AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key"
+ " AND bi.bes_srtdeel_key = bsd.bes_srtdeel_key"
+ " AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key"
+ " AND bsg.ins_discipline_key = bd.ins_discipline_key"
+ " AND bsg.ins_discipline_key = bdp.bes_ins_discipline_key"
+ " AND bdp.bes_disc_params_pgb IN (2, 3)" // Alleenn agb meetellen: 2 = Alleen agb, 3 = Beiden, pgb en agb.
+ " AND b.prs_kostenplaats_key = " + kp_key
// Alleen bestellingopdrachten in de behandelings fase (In bestelling (Bevestigd)(4)) en in de gereed fase (Geleverd(6) en Verwerkt(7)).
// Afgewezen(1), In behandeling(3), Ter bevestiging(5) en Geannuleerd(8) doen niet mee in de bepaling van geraamde en definitieve kosten.
+ " AND bo.bes_bestelopdr_status IN (4, 6, 7)"
+ (params && params.bes_key > -1
? " AND b.bes_bestelling_key <> " + params.bes_key
: "")
+ (kp_limietperiode && kp_limietperiode > 0
? " AND b.bes_bestelling_datum >= TRUNC (SYSDATE, " + safe.quoted_sql(periode) + ")" // De eerste van de deze maand of 1 januari dit jaar
: "")
+ " GROUP BY b.bes_bestelling_key) tot"
+ " , bes_bestelling b"
+ " WHERE b.bes_bestelling_key = tot.bes_bestelling_key"
+ " UNION "
+ "SELECT SUM (totaalbedrag) totaalbedrag"
+ " , 0 korting"
+ " , 0 levkosten"
+ " FROM (SELECT SUM (o.mld_opdr_kosten) totaalbedrag"
+ " , o.mld_opdr_key"
+ " FROM mld_opdr o"
+ " , mld_melding m"
+ " , mld_stdmelding sm"
+ " , mld_discipline md"
+ " , mld_disc_params mdp"
+ " WHERE o.mld_melding_key = m.mld_melding_key"
+ " AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " AND sm.mld_ins_discipline_key = md.ins_discipline_key"
+ " AND md.ins_discipline_key = mdp.mld_ins_discipline_key"
+ " AND mdp.mld_disc_params_pgb IN (2,3)" // Alleenn agb meetellen: 2 = Alleen agb, 3 = Beiden, pgb en agb.
+ " AND o.prs_kostenplaats_key = " + kp_key
// Alleen meldingopdrachten in de actieve opdracht fase (Uitgegeven(5) en Geaccepteerd(8)),
// in de afhandelings fase (Technisch voltooid(6) en Kosten voltooid(9)) en in de gereed fase (Verwerkt(7)).
+ " AND o.mld_statusopdr_key IN (5, 6, 7, 8, 9)"
+ (params && params.opdr_key > -1
? " AND o.mld_opdr_key <> " + params.opdr_key
: "")
+ (kp_limietperiode && kp_limietperiode > 0
? " AND o.mld_opdr_datumbegin >= TRUNC (SYSDATE, " + safe.quoted_sql(periode) + ")" // De eerste van de deze maand of 1 januari dit jaar
: "")
+ " GROUP BY o.mld_opdr_key) tot"
+ " , mld_opdr o "
+ " WHERE o.mld_opdr_key = tot.mld_opdr_key";
sql = "SELECT SUM(totaalbedrag) totaalbedrag"
+ " , SUM(korting) korting"
+ " , SUM(levkosten) levkosten"
+ " FROM (" + sql + ")";
oRs = Oracle.Execute(sql);
var prstotaalbesteld = oRs("totaalbedrag").Value || 0;
var korting = oRs("korting").Value || 0;
var levkosten = oRs("levkosten").Value || 0;
var budgetbesteld = prstotaalbesteld - korting + levkosten;
oRs.close();
}
return budgetbesteld;
},
get_pgblimiet: function(prs_key, dis_key)
{ // Bepaal PGB limiet
var sql = "SELECT prs.getprofiellimiet(" + prs_key + ", " + dis_key + ") pgblimiet FROM DUAL";
var oRs = Oracle.Execute(sql);
var pgblimiet = oRs("pgblimiet").Value;
oRs.close();
return pgblimiet;
},
get_agblimiet: function(kp_key, dis_key)
{ // Bepaal AGB limiet
var sql = "SELECT prs.getlimietagb(" + kp_key + ", " + S("prs_approvemethod") + ", " + dis_key + ") agblimiet FROM DUAL";
var oRs = Oracle.Execute(sql);
var agblimiet = oRs("agblimiet").Value;
oRs.close();
return agblimiet;
}
}
%>