TWYN#52774 tlv/tgv reserve automatische correctie

svn path=/Website/branches/v2017.3/; revision=37527
This commit is contained in:
Erik Groener
2018-03-30 09:24:04 +00:00
parent f2b1db6956
commit 3b2562dacd
3 changed files with 219 additions and 2 deletions

View File

@@ -164,6 +164,22 @@ function model_bgt_budgetmutatie()
"iscurrency": true,
"defaultvalue": "0"
},
"amountexc": {
"dbs": "bgt_budget_bedrag_naar_exc",
"sql": "CASE WHEN bgt_budget_key_naar IS NULL THEN bgt_budget_bedrag_van ELSE bgt_budget_bedrag_naar END",
"label": L("bgt_budgetmutatie_bedrag"),
"typ": "float",
"iscurrency": true,
"total": true
},
"amountvat": {
"dbs": "bgt_budget_bedrag_naar_btw",
"sql": "CASE WHEN bgt_budget_key_naar IS NULL THEN bgt_budget_btwbedrag_van ELSE bgt_budget_btwbedrag_naar END",
"label": L("bgt_budgetmutatie_btwbedrag"),
"typ": "float",
"iscurrency": true,
"total": true
},
"mutbudgetexc": {
"dbs": "bgt_budget_mutatie_exc",
"sql": "BGT.getMutatieOpBudget("+p_budget_key+", bgt_budgetmutatie_key, 0)",
@@ -226,6 +242,8 @@ function model_bgt_budgetmutatie()
"budgetto",
"amountto",
"vatto",
"amountexc",
"amountvat",
"amountdifference"
]
};
@@ -294,6 +312,22 @@ function model_bgt_budgetmutatie()
jsondata.vatfrom = -1 * jsondata.vatto;
}
this.hook_post_post = function (params, jsondata, key)
{
// Haal de budget-keys voor correctie uit het mutatierecord.
var sql = "SELECT bgt_budget_key_van"
+ " , bgt_budget_key_naar"
+ " FROM bgt_budgetmutatie"
+ " WHERE bgt_budgetmutatie_key = " + key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
mutatie_correctie(oRs("bgt_budget_key_van").Value);
mutatie_correctie(oRs("bgt_budget_key_naar").Value);
}
oRs.Close();
}
this.hook_pre_put = function (params, jsondata, key)
{
if ((!jsondata.amountto || jsondata.amountto == 0) && (!jsondata.vatto || jsondata.vatto == 0))
@@ -302,6 +336,187 @@ function model_bgt_budgetmutatie()
jsondata.vatfrom = -1 * jsondata.vatto;
}
this.hook_post_put = function(params, jsondata, key)
{
// Haal de budget-keys voor correctie uit het mutatierecord.
var sql = "SELECT bgt_budget_key_van"
+ " , bgt_budget_key_naar"
+ " FROM bgt_budgetmutatie"
+ " WHERE bgt_budgetmutatie_key = " + key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
mutatie_correctie(oRs("bgt_budget_key_van").Value);
mutatie_correctie(oRs("bgt_budget_key_naar").Value);
}
oRs.Close();
}
function contract_waarde(p_budget_key)
{
var v_contract = { bedrag_exc: 0
, bedrag_btw: 0
};
var sql = "SELECT SUM(COALESCE(o.mld_opdr_kosten, 0)) contract_exc"
+ " , SUM(COALESCE(o.mld_opdr_kosten_btw, 0)) contract_btw"
+ " FROM bgt_budget b"
+ " , mld_opdr o"
+ " WHERE b.prs_kostensoort_key = o.prs_kostensoort_key(+)"
+ " AND b.bgt_budget_key = " + p_budget_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
v_contract.bedrag_exc = oRs("contract_exc").Value;
v_contract.bedrag_btw = oRs("contract_btw").Value;
}
oRs.Close();
return v_contract;
}
function budget_waarde(p_budget_key)
{
var v_budget = { bedrag_exc: 0
, bedrag_btw: 0
, isreserve: 1
, reserve_key: -1
};
var sql = "SELECT b.bgt_budget_isreserve"
+ " , COALESCE(b.bgt_budget_bedrag, 0) bgt_budget_exc"
+ " , COALESCE(b.bgt_budget_btwbedrag, 0) bgt_budget_btw"
+ " , r.bgt_budget_key"
+ " FROM bgt_budget r"
+ " , bgt_budget b"
+ " WHERE r.bgt_project_key = b.bgt_project_key"
+ " AND r.prs_kostensoort_key IS NULL"
+ " AND r.prs_kostensoortgrp_key IS NULL"
+ " AND b.bgt_budget_key = " + p_budget_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
v_budget.bedrag_exc = oRs("bgt_budget_exc").Value;
v_budget.bedrag_btw = oRs("bgt_budget_btw").Value;
v_budget.isreserve = oRs("bgt_budget_isreserve").Value == 1;
v_budget.reserve_key = oRs("bgt_budget_key").Value;
}
oRs.Close();
return v_budget;
}
function mutatie_waarde(p_budget_key, p_reserve)
{
var van_reserve = { bedrag_exc: 0
, bedrag_btw: 0
};
switch (p_reserve)
{
case "A": sql_res = " AND m.bgt_budgetmutatie_reserve = 1"; break; // alleen automatische overboekingen
case "M": sql_res = " AND m.bgt_budgetmutatie_reserve = 0"; break; // alleen mutaties
case "T": sql_res = ""; break; // totaal alle mutaties
default: "";
}
var sql = "SELECT SUM(COALESCE(bedrag_exc, 0)) bedrag_exc"
+ " , SUM(COALESCE(bedrag_btw, 0)) bedrag_btw"
+ " FROM (SELECT SUM(COALESCE(m.bgt_budget_bedrag_van, 0)) bedrag_exc"
+ " , SUM(COALESCE(m.bgt_budget_btwbedrag_van, 0)) bedrag_btw"
+ " FROM bgt_budgetmutatie m"
+ " WHERE bgt_budget_key_van = " + p_budget_key
+ sql_res
+ " UNION"
+ " SELECT SUM(COALESCE(m.bgt_budget_bedrag_naar, 0)) bedrag_exc"
+ " , SUM(COALESCE(m.bgt_budget_btwbedrag_naar, 0)) bedrag_btw"
+ " FROM bgt_budgetmutatie m"
+ " WHERE bgt_budget_key_naar = " + p_budget_key
+ sql_res
+ ")";
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
van_reserve.bedrag_exc = oRs("bedrag_exc").Value;
van_reserve.bedrag_btw = oRs("bedrag_btw").Value;
}
oRs.Close();
return van_reserve;
}
function mutatie_correctie(p_budget_key)
{
function een_correctie(p_budget_key, p_budget_bedrag, p_uitreserve_bedrag, p_contract_bedrag)
{
// Als een deel van het budgetbedrag uit automatische overboeking bestaat kan het budgetbedrag nooit groter zijn dan het contractbedrag.
var te_contracteren = p_budget_bedrag - p_contract_bedrag;
var naar_reserve = ( (te_contracteren > p_uitreserve_bedrag) ? p_uitreserve_bedrag : te_contracteren);
return naar_reserve;
}
var v_budget = budget_waarde(p_budget_key);
var v_uitreserve = mutatie_waarde(p_budget_key, "A");
var v_contracten = contract_waarde(p_budget_key);
if (!v_budget.isreserve)
{ // Correctie is alleen voor budgetten op kostensoort, niet het reserve.
var v_correctie_bedrag_exc = een_correctie(p_budget_key, v_budget.bedrag_exc, v_uitreserve.bedrag_exc, v_contracten.bedrag_exc);
var v_correctie_bedrag_btw = een_correctie(p_budget_key, v_budget.bedrag_btw, v_uitreserve.bedrag_btw, v_contracten.bedrag_btw);
var data_correctie = { budget_res_key: v_budget.reserve_key
, budget_srt_key: p_budget_key
, bedrag_exc: v_correctie_bedrag_exc
, bedrag_btw: v_correctie_bedrag_btw
};
insertMutatie(data_correctie, "AO");
}
}
function insertMutatie(data_mutatie, mutatie_code)
{
if (data_mutatie.bedrag_exc != 0 || data_mutatie.bedrag_btw != 0)
{
var sql = "SELECT prs_kostensoort_altcode"
+ " FROM prs_kostensoort"
+ " WHERE prs_kostensoort_key = "
+ " (SELECT MIN(prs_kostensoort_key)"
+ " FROM bgt_budget"
+ " WHERE bgt_budget_key = " + data_mutatie.budget_srt_key
+ " )";
var oRs = Oracle.Execute(sql);
var v_costtype_code = oRs("prs_kostensoort_altcode").Value;
oRs.Close();
var mutatie_omschr = "";
switch (mutatie_code)
{
case "AO": mutatie_omschr = "AO Automatische overboeking correctie"; break;
case "MW": mutatie_omschr = "MW Meer-, minderwerk van " + v_costtype_code; break;
}
var sql_m = "INSERT INTO bgt_budgetmutatie"
+ "( bgt_budgetmutatie_datum"
+ ", bgt_budgetmutatie_omschrijving"
+ ", prs_perslid_key" // not null!
+ ", bgt_budget_key_van"
+ ", bgt_budget_bedrag_van"
+ ", bgt_budget_btwbedrag_van"
+ ", bgt_budget_key_naar"
+ ", bgt_budget_bedrag_naar"
+ ", bgt_budget_btwbedrag_naar"
+ ", bgt_budgetmutatie_reserve"
+ ") VALUES"
+ "( SYSDATE"
+ ", " + safe.quoted_sql(mutatie_omschr)
+ ", " + user_key
+ ", " + data_mutatie.budget_res_key
+ ", " + data_mutatie.bedrag_exc
+ ", " + data_mutatie.bedrag_btw
+ ", " + data_mutatie.budget_srt_key
+ ", " + (-1 * data_mutatie.bedrag_exc)
+ ", " + (-1 * data_mutatie.bedrag_btw)
+ ", 1"
+ ")";
Oracle.Execute(sql_m);
}
}
var budget_key = getQParamInt("budgetcommon", -1);
var mutatie_key = getQParamInt("id", -1);

View File

@@ -38,8 +38,8 @@ scaffolding(this_model,
"name",
"budgetfrom",
"budgetto",
"amountto",
"vatto",
"amountexc",
"amountvat",
"amountdifference"
],
"orderby": [

View File

@@ -106,6 +106,8 @@ function scaffolding_save(model, scf_params)
if ("hook_pre_put" in model)
model.hook_pre_put(params, jsondata, key);
var restresult = model.REST_PUT(params, jsondata, key);
if ("hook_post_put" in model)
model.hook_post_put(params, jsondata, key);
}
else
{