FSN#39054 Budgetcontrole uitbreiding: BGT module - savepoint

svn path=/Website/trunk/; revision=33403
This commit is contained in:
Peter Feij
2017-04-04 13:43:37 +00:00
parent d466d16a7e
commit b80bcd2111
2 changed files with 87 additions and 31 deletions

View File

@@ -17,6 +17,7 @@
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/disciplineselector.inc" -->
@@ -100,6 +101,20 @@ var authparamsBGTUSE = user.checkAutorisation("WEB_BGTUSE");
<!-- Second column -->
<td>
<table>
<%
FCLTcalendar("date_from",
{ label: L("lcl_period_from"), /* TODO default startdatum project? */
initEmpty: true
});
FCLTcalendar("date_to",
{ label: L("lcl_period_to"),
initEmpty: true
});
CHECKBOXTR(L("lcl_fin_total_sum"), "fldbgtinclbtw", "bgt_inclbtw", false);
%>
</table>
</td><!-- end column 2-->
</tr>

View File

@@ -4,12 +4,12 @@
$Id$
File: bgt_search_list.asp
Description:
Description: Presents an interactive overview of budgets and spents
Parameters:
Context:
Note: UNDER CONSTRUCTION !
Note: UNDER CONSTRUCTION !!
- actions op kolommen:
- budget > budgetmutaties (tbd)
@@ -45,6 +45,10 @@ var bgtproj_key_arr = getQParamIntArray("bgtproj_key", []);
if (bgtdisc_key > 0)
lcl.set_dialect(bgtdisc_key, "INS_TAB_DISCIPLINE_KEY"); // TBD. Nodig?
var bgt_inclbtw = getQParam("bgt_inclbtw", "off") == "on";
var date_from = getQParamDate("date_from", null);
var date_to = getQParamDate("date_to", null);
var groupby = getQParamInt("groupby");
// -1. niks
// 1. facturen
@@ -158,6 +162,8 @@ var transitParam = buildTransitParam([]);
+ " AND b.prs_bedrijf_key = o.mld_uitvoerende_keys"
+ " AND f.mld_opdr_key = o.mld_opdr_key"
+ " AND id.ins_discipline_key = pr.ins_discipline_key"
+ (date_from ? " AND f.fin_factuur_datum >= "+ date_from.beginToSQL() : "")
+ (date_to ? " AND f.fin_factuur_datum < "+ date_to.endToSQL() : "")
+ (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "")
+ " AND pr.ins_discipline_key =" + bgtdisc_key;
@@ -205,6 +211,8 @@ var transitParam = buildTransitParam([]);
+ " AND b.prs_bedrijf_key = o.mld_uitvoerende_keys"
+ " AND f.mld_opdr_key(+) = o.mld_opdr_key"
+ " AND id.ins_discipline_key = pr.ins_discipline_key"
+ (date_from ? " AND o.mld_opdr_datumbegin >= "+ date_from.beginToSQL() : "")
+ (date_to ? " AND o.mld_opdr_datumbegin < "+ date_to.endToSQL() : "")
+ (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "")
+ " AND pr.ins_discipline_key =" + bgtdisc_key;
sql += " GROUP BY "
@@ -470,26 +478,29 @@ var transitParam = buildTransitParam([]);
+ " GROUP BY "
+ " bgt_project_omschrijving ,"
+ " ins_discipline_omschrijving";
//BTW
sql1 +=" UNION SELECT"
+ " ins_discipline_omschrijving project,"
+ " bgt_project_omschrijving deelproject,"
+ " 'BTW' rubriek,"
+ " 'B' rcode,"
+ " '92' sortcode,"
+ " -3 bgt_kostenrubriek_key,"
+ " SUM(bud.bgt_budget_btwbedrag) budget"
+ " FROM bgt_budget bud,"
+ " bgt_project pr,"
+ " ins_tab_discipline id"
+ " WHERE pr.bgt_project_key = bud.bgt_project_key"
+ " AND id.ins_discipline_key = pr.ins_discipline_key"
// ongeacht reserve
+ (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "")
+ " AND pr.ins_discipline_key =" + bgtdisc_key
+ " GROUP BY "
+ " bgt_project_omschrijving ,"
+ " ins_discipline_omschrijving";
if (bgt_inclbtw)
{
//BTW
sql1 +=" UNION SELECT"
+ " ins_discipline_omschrijving project,"
+ " bgt_project_omschrijving deelproject,"
+ " 'BTW' rubriek,"
+ " 'B' rcode,"
+ " '92' sortcode,"
+ " -3 bgt_kostenrubriek_key,"
+ " SUM(bud.bgt_budget_btwbedrag) budget"
+ " FROM bgt_budget bud,"
+ " bgt_project pr,"
+ " ins_tab_discipline id"
+ " WHERE pr.bgt_project_key = bud.bgt_project_key"
+ " AND id.ins_discipline_key = pr.ins_discipline_key"
// ongeacht reserve
+ (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "")
+ " AND pr.ins_discipline_key =" + bgtdisc_key
+ " GROUP BY "
+ " bgt_project_omschrijving ,"
+ " ins_discipline_omschrijving";
}
}
if (groupby == 6) // 6. deelproject
@@ -498,7 +509,7 @@ var transitParam = buildTransitParam([]);
+ " ins_discipline_omschrijving project,"
+ " bgt_project_omschrijving deelproject,"
+ " pr.bgt_project_key,"
+ " SUM(bud.bgt_budget_bedrag) budget"
+ " SUM(bud.bgt_budget_bedrag" + (bgt_inclbtw ? "+ bud.bgt_budget_btwbedrag" : "") + ") budget"
+ " FROM bgt_budget bud,"
+ " bgt_project pr,"
+ " ins_tab_discipline id"
@@ -518,7 +529,10 @@ var transitParam = buildTransitParam([]);
// MERK OP: hier zouden in het algemeen ook andere verplichtingen bij moeten (bestellingen, contracten, reserveringen)
// zoals die via de kostensoort kunnen worden bijgevonden. Dat is voor een latere versie.
// TODO: de besteding van de BTW moet er op een of andere manier bijgejoined worden.
// TODO: de besteding van de BTW (bgt_inclbtw) moet er op een of andere manier bijgejoined worden.
// Dat moet dan op de aparte BTW-regel (rubriek -3) gepresenteerd worden, dus niet in de reguliere besteding
// Opdrachten: BTW obv ??? Die weten we nog niet!
// Facturen: BTW obv fin_factuur_totaal_btw
// Eerst maar de OPDRACHTEN PER KOSTENSOORT
var sql2a ="SELECT"
@@ -528,7 +542,7 @@ var transitParam = buildTransitParam([]);
+ " ksg.prs_kostensoortgrp_key,"
+ " ks.prs_kostensoort_key,"
+ " SUM (o.mld_opdr_kosten) gecontracteerd,"
+ " NULL gefactureerd"
+ " SUM (o.mld_opdr_kosten*0.21) gecontracteerdbtw" // TODO!
+ " FROM mld_opdr o," /* zonder de facturen, anders wordt verdubbeld */
+ " prs_kostensoort ks,"
+ " prs_kostensoortgrp ksg,"
@@ -540,6 +554,8 @@ var transitParam = buildTransitParam([]);
+ " AND ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key"
+ " AND pr.bgt_project_key = kr.bgt_project_key"
+ " AND id.ins_discipline_key = pr.ins_discipline_key"
+ (date_from ? " AND o.mld_opdr_datumbegin >= "+ date_from.beginToSQL() : "")
+ (date_to ? " AND o.mld_opdr_datumbegin < "+ date_to.endToSQL() : "")
+ (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "")
+ " AND pr.ins_discipline_key =" + bgtdisc_key;
sql2a+= " GROUP BY "
@@ -556,8 +572,8 @@ var transitParam = buildTransitParam([]);
+ " kr.bgt_kostenrubriek_key,"
+ " ksg.prs_kostensoortgrp_key,"
+ " ks.prs_kostensoort_key,"
+ " NULL gecontracteerd,"
+ " SUM (f.fin_factuur_totaal) gefactureerd"
+ " SUM (f.fin_factuur_totaal) gefactureerd,"
+ " SUM (f.fin_factuur_totaal_btw) gefactureerdbtw"
+ " FROM fin_factuur f,"
+ " mld_opdr o,"
+ " prs_kostensoort ks,"
@@ -571,6 +587,8 @@ var transitParam = buildTransitParam([]);
+ " AND ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key"
+ " AND pr.bgt_project_key = kr.bgt_project_key"
+ " AND id.ins_discipline_key = pr.ins_discipline_key"
+ (date_from ? " AND f.fin_factuur_datum >= "+ date_from.beginToSQL() : "")
+ (date_to ? " AND f.fin_factuur_datum < "+ date_to.endToSQL() : "")
+ (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "")
+ " AND pr.ins_discipline_key =" + bgtdisc_key;
sql2b+= " GROUP BY "
@@ -588,7 +606,9 @@ var transitParam = buildTransitParam([]);
+ " opdr.prs_kostensoortgrp_key,"
+ " opdr.prs_kostensoort_key prs_kostensoort_key,"
+ " SUM(opdr.gecontracteerd) gecontracteerd,"
+ " SUM(opdr.gecontracteerdbtw) gecontracteerdbtw,"
+ " SUM (fact.gefactureerd) gefactureerd,"
+ " SUM (fact.gefactureerdbtw) gefactureerdbtw,"
+ " SUM(COALESCE(opdr.gecontracteerd,0)) - SUM (COALESCE(fact.gefactureerd,0)) tefactureren"
+ " FROM (" + sql2a + ") opdr, (" + sql2b + ") fact "
+ " WHERE opdr.prs_kostensoort_key(+) = fact.prs_kostensoort_key"
@@ -603,11 +623,11 @@ var transitParam = buildTransitParam([]);
// Hier komen ze bij elkaar: de budgetten en de besteding, met de respectievelijke groeperingen
// sql1 heeft de benamingen en de budgetten met kostensoort_key (die NULL kan zijn!), sql2 de kostensoort_key en de bestedingen
//
var sql ="SELECT"
var sql ="SELECT * FROM (SELECT"
+ " bud.project project,"
+ " bud.deelproject deelproject,"
+ " besteding.bgt_project_key,"
+ (groupby <= 5 ? " bud.rubriek rubriek, bud.rcode rcode, bud.bgt_kostenrubriek_key," : "")
+ (groupby <= 5 ? " bud.sortcode, bud.rubriek rubriek, bud.rcode rcode, bud.bgt_kostenrubriek_key," : "")
+ (groupby <= 4 ? " bud.groep groep, bud.prs_kostensoortgrp_key," : "")
+ (groupby <= 3 ? " bud.onderdeel onderdeel, besteding.prs_kostensoort_key," : "")
+ " MAX(bud.budget) budget," /* is voor alle regels hetzelfde, kies er maar eentje, als je maar niet optelt */
@@ -620,13 +640,34 @@ var transitParam = buildTransitParam([]);
+ (groupby == 4 ? " WHERE bud.prs_kostensoortgrp_key = besteding.prs_kostensoortgrp_key " : "")
+ (groupby == 5 ? " WHERE bud.bgt_kostenrubriek_key = besteding.bgt_kostenrubriek_key(+) " : "") // de reserve en BTW hebben geen echte rubriek_key
+ (groupby == 6 ? " WHERE bud.bgt_project_key = besteding.bgt_project_key " : "")
+ "GROUP BY "
// + " AND COALESCE(besteding.bgt_kostenrubriek_key, 99) <> -3"
+ " GROUP BY "
+ " bud.project, bud.deelproject, besteding.bgt_project_key"
+ (groupby <= 5 ? " ,bud.rubriek, bud.rcode, bud.sortcode, bud.bgt_kostenrubriek_key" : "")
+ (groupby <= 4 ? " ,bud.groep, bud.prs_kostensoortgrp_key" : "")
+ (groupby <= 3 ? " ,bud.onderdeel, besteding.prs_kostensoort_key" : "");
sql += " ORDER BY "
if (false && bgt_inclbtw && groupby==5) // In rubriekoverzicht eventueel een BTW-regel
{
sql +=" UNION SELECT"
+ " bud.project project,"
+ " bud.deelproject deelproject,"
+ " besteding.bgt_project_key,"
+ " bud.sortcode,"
+ " bud.rubriek rubriek, bud.rcode rcode, bud.bgt_kostenrubriek_key,"
+ " MAX(bud.budget) budget,"
+ " SUM(besteding.gecontracteerdbtw) gecontracteerd,"
+ " MAX(bud.budget) - SUM(COALESCE(besteding.gecontracteerdbtw,0)) tecontracteren,"
+ " SUM(besteding.gefactureerdbtw) gefactureerd,"
+ " SUM(besteding.tefactureren) tefactureren"
+ " FROM (" + sql1 + ") bud, (" + sql2 + ") besteding "
+ " WHERE bud.bgt_kostenrubriek_key = -3 "
+ "GROUP BY "
+ " bud.project, bud.deelproject, besteding.bgt_project_key"
+ " ,bud.rubriek, bud.rcode, bud.sortcode, bud.bgt_kostenrubriek_key";
}
sql += ") ORDER BY "
+ "project"
+ (groupby < 6 ? ",sortcode, rubriek" : "")
+ (groupby < 5 ? ",groep" : "")