TWYN#52774 tlv/tgv reserve automatische correctie
svn path=/Website/branches/v2017.3/; revision=37527
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -38,8 +38,8 @@ scaffolding(this_model,
|
||||
"name",
|
||||
"budgetfrom",
|
||||
"budgetto",
|
||||
"amountto",
|
||||
"vatto",
|
||||
"amountexc",
|
||||
"amountvat",
|
||||
"amountdifference"
|
||||
],
|
||||
"orderby": [
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user