Files
Facilitor/APPL/API2/model_mld_opdr.inc
Erik Groener 0b729e020e TWYN#53173 kopieeren contracten
svn path=/Website/branches/v2017.3/; revision=37950
2018-05-22 10:35:44 +00:00

810 lines
33 KiB
C++
Raw Blame History

<% /*
$Revision$
$Id$
File: model_mld_opdr.inc
Description: Model voor mld_opdr
Context:
Notes:
*/
%>
<!-- #include file="../api2/model_fin_factuur.inc" -->
<!-- #include file="./model_custom_fields.inc"-->
<!-- #include file="./model_mld_kenmerk.inc"-->
<!-- #include file="../bgt/bgt_tools.inc" -->
<%
function model_mld_opdr()
{
this.records_name = "orders";
this.record_name = "order";
this.table = "mld_opdr";
this.primary = "mld_opdr_key";
this.autfunction = S("bgt_enabled")==1?"WEB_BGTORD":"WEB_ORDBOF";
this.record_title = L("lcl_fin_mld_opdr");
this.records_title = L("lcl_fin_opdrachten");
var fields_main_1 = {};
var fields_main_2 = {};
var fields_bgt_1 = {};
fields_main_1 = {
"id": {
"dbs": "mld_opdr_key",
"label": L("lcl_key"),
"typ": "key",
"hidden_fld": true,
"required": true,
"filter": "exact",
"seq": "mld_s_mld_opdr_key"
}
};
if (S("bgt_enabled"))
{
fields_bgt_1 = {
"budgetdiscipline": {
"dbs": "bgt_project.ins_discipline_key",
"label": L("bgt_discipline_omschrijving"),
"typ": "key",
"required": true,
"foreign": bgt_budgetdiscipline_foreign(),
"showtransit": true
},
"budgetproject": {
"dbs": "bgt_project.bgt_project_key",
"label": L("bgt_project_omschrijving"),
"typ": "key",
"required": true,
"foreign": bgt_budgetproject_foreign(),
"showtransit": true
},
"budgetcostcategory": {
"dbs": "bgt_kostenrubriek.bgt_kostenrubriek_key",
"label": L("bgt_kostenrubriek_oms"),
"typ": "key",
"required": true,
"foreign": bgt_budgetcostcategory_foreign(),
"showtransit": true
},
"costtypegroup": {
"dbs": "prs_kostensoortgrp.prs_kostensoortgrp_key",
"label": L("prs_kostensoortgrp_key"),
"typ": "key",
"required": true,
"foreign": bgt_costtypegroup_foreign(),
"showtransit": true
},
"costtype": {
"dbs": "prs_kostensoort_key",
"label": L("prs_kostensoort_key"),
"typ": "key",
"required": true,
"foreign": bgt_costtype_foreign(),
"showtransit": true
}
};
}
fields_main_2 = {
"company": {
"dbs": "mld_uitvoerende_keys",
"label": L("lcl_ord_company"),
"typ": "key",
"foreign": bgt_company_foreign()
},
"reference": {
"dbs": "mld_opdr_id",
"label": L("lcl_opdr_id"),
"typ": "varchar"
},
"ordernr_sort": {
"dbs": "mld_opdr_ordernr_int",
"label": L("bgt_opdr_ordernr"),
"sql": "fac.safe_to_number(mld_opdr_ordernr)",
"typ": "number",
"readonly": true
},
"ordernr": {
"dbs": "mld_opdr_ordernr",
"label": L("bgt_opdr_ordernr"),
"typ": "varchar",
"hidden_fld": true
},
"sequence": {
"dbs": "mld_opdr_bedrijfopdr_volgnr",
"label": L("lcl_ins_volgnr"),
"typ": "number",
"defaultvalue": 0
},
"account": {
"dbs": "prs_kostenplaats_key",
"label": L("bgt_budget_account"),
"typ": "key",
"foreign": bgt_account_foreign()
},
"description": {
"dbs": "mld_opdr_omschrijving",
"label": L("lcl_descr"),
"typ": "varchar"
},
"startdate": {
"dbs": "mld_opdr_datumbegin",
"label": L("bgt_contractdatum"),
"typ": "date"
},
"estimate": {
"dbs": "estimate",
"sql": "(BGT.getRaming(mld_opdr.mld_opdr_key, 0, NULL, NULL))",
"sqlshow": true,
"hidden_fld": true,
"label": "Raming",
"typ": "float",
"iscurrency": true,
"total": true
},
"contracted": {
"dbs": "contracted",
"sql": "(BGT.getGecontracteerd(mld_opdr.mld_opdr_key, 0, NULL, NULL))",
"sqlshow": true,
"hidden_fld": true,
"label": L("bgt_gecontracteerd"),
"typ": "float",
"iscurrency": true,
"total": true
},
"amount": {
"dbs": "mld_opdr_kosten",
"label": L("bgt_gecontracteerd"),
"typ": "float",
"iscurrency": true,
"total": true
},
"vat": {
"dbs": "mld_opdr_kosten_btw",
"label": L("lcl_mld_opdr_btw"),
"typ": "float",
"iscurrency": true,
"total": true
},
"amountincl": {
"dbs": "mld_opdr_kosten_incl",
"sql": "mld_opdr_kosten + mld_opdr_kosten_btw",
"label": L("lcl_fin_total_sum"),
"typ": "float",
"readonly": true,
"sqlshow": true,
"iscurrency": true,
"total": true,
"defaultvalue": "0",
"clone": false
},
"invoiced": {
"dbs": "mld_opdr_gefactureerd",
"sql": "(BGT.getGefactureerd(mld_opdr.mld_opdr_key, 0, NULL, NULL))",
"label": L("bgt_facturen"),
"typ": "float",
"readonly": true,
"sqlshow": true,
"iscurrency": true,
"total": true
},
"tobeinvoiced": {
"dbs": "mld_opdr_tefactureren",
"sql": "(BGT.getTefactureren(mld_opdr.mld_opdr_key, 0, NULL, NULL))",
"label": L("bgt_facturentogo"),
"typ": "float",
"readonly": true,
"sqlshow": true,
"iscurrency": true,
"total": true
},
"status": {
"dbs": "mld_statusopdr_key",
"label": L("lcl_mld_opdr_status"),
"typ": "key",
"foreign": bgt_orderstatus_foreign(),
"defaultvalue": 5
},
"owner": {
"dbs": "prs_perslid_key",
"label": L("lcl_obj_owner"),
"typ": "key",
"hidden_fld": true,
"foreign": "PRS_PERSLID"
},
"issueordertype": {
"dbs": "mld_typeopdr_key",
"label": L("mld_typeopdr_typeopdr_key"),
"typ": "key",
"defaultvalue": "5",
"hidden_fld": true
},
"module": {
"dbs": "mld_opdr_module",
"label": "module",
"typ": "varchar",
"defaultvalue": "MLD",
"hidden_fld": true
},
"additional": {
"dbs": "mld_opdr_meerwerk",
"label": L("lcl_mld_opdr_meerwerk"),
"typ": "check0",
"defaultvalue": 0,
"filter": "exact"
},
"remark": {
"dbs": "mld_opdr_opmerking",
"label": L("lcl_remark"),
"typ": "memo"
},
"_is_clone": {
"dbs": "",
"label": "Is kopie",
"typ": "number",
"defaultvalue": 0,
"hidden_fld": true
}
};
this.fields = object_merge({}, fields_main_1, (S("bgt_enabled") ? fields_bgt_1 : {}), fields_main_2);
this.includes= {
"custom_fields" : {
"model": new model_custom_fields(this, new model_mld_kenmerk('O', { internal: true }), { pNiveau: "O" }),
"joinfield": "flexparentkey",
"enable_update": true
}
}
this.hook_pre_edit = function (obj, fld, scf_params)
{
obj._is_clone = getQParamInt("scf_clone", 0);
var mld_opdr_id = (obj._is_clone == 1 ? getQParamInt("id", -1) : obj.id);
var btw_data = {};
if (obj.id > -1 || obj.ordernr_sort)
{
fld.ordernr.hidden_fld = false;
fld.ordernr.readonly = true;
}
if (mld_opdr_id > -1)
{
var sql = "SELECT s.prs_kostensoort_btw"
+ " , f.fin_btwtabelwaarde_perc"
+ " FROM mld_opdr o"
+ " , prs_kostensoort s"
+ " , fin_btwtabelwaarde f"
+ " WHERE s.fin_btwtabelwaarde_key = f.fin_btwtabelwaarde_key"
+ " AND o.prs_kostensoort_key = s.prs_kostensoort_key"
+ " AND o.mld_opdr_key = " + mld_opdr_id;
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
btw_data.btw_inc = oRs("prs_kostensoort_btw").Value;
btw_data.btw_val = oRs("fin_btwtabelwaarde_perc").Value || "0";
}
oRs.Close();
/*
#TWYN#53173
De bestaande knop "Kopi<70>ren" is komen te vervallen. Daarvoor in de plaats zijn twee nieuwe knoppen toegevoegd: "Nieuwe opdracht" en "nieuwe subopdracht".
Bij een nieuwe subopdracht is het opdrachtnummer gelijk aan die van de opdracht van waaruit gekopieerd wordt en is niet te wijzigen. Het volgnummer staat standaard op volgnr(max+1).
if (obj._is_clone == 2)) // nieuw subcontract: bepaal hoogste volgnummer bij dit contract, en vul deze alvast in.
{
var sql = "SELECT COALESCE(MAX(s.mld_opdr_bedrijfopdr_volgnr), 0) + 1 volgnr"
+ " FROM mld_opdr s"
+ " WHERE s.mld_opdr_ordernr ="
+ " (SELECT m.mld_opdr_ordernr"
+ " FROM mld_opdr m"
+ " WHERE m. mld_opdr_key = " + mld_opdr_id
+ " )";
var oRs = Oracle.Execute(sql);
obj.sequence = oRs("volgnr").Value;
oRs.Close();
}
*/
}
%>
<script type="text/javascript">
var btw_data = <%=JSON.stringify(btw_data)%>;
<% if (obj.budgetdiscipline) { %> var budgetdiscipline = "<%=obj.budgetdiscipline.id%>"; <% } %>
<% if (obj.budgetproject) { %> var budgetproject = "<%=obj.budgetproject.id%>"; <% } %>
<% if (obj.budgetcostcategory) { %> var budgetcostcategory = "<%=obj.budgetcostcategory.id%>"; <% } %>
<% if (obj.costtypegroup) { %> var costtypegroup = "<%=obj.costtypegroup.id%>"; <% } %>
<% if (obj.costtype) { %> var costtype = "<%=obj.costtype.id%>"; <% } %>
</script>
<%
}
this.hook_pre_post = function(params, obj)
{
var isclone = (obj._is_clone == 1);
if (!obj.sequence && obj.sequence!=0)
abort_with_warning("Vul een volgnummer voor het contract in.");
var v_costtype = (typeof obj.costtype == "object" ? obj.costtype.id : obj.costtype);
checkAanwezigBudget(v_costtype);
/*
TWYN#53173 : waarschijnlijk pas met 2018.1
obj._is_clone=1 --> nieuwe (hoofd) opdracht
obj._is_clone=2 --> nieuwe sub-opdracht
*/
if (isclone) // Bij kopie van opdracht geen nieuw nummer genereren.
{
var v_project_key = (typeof obj.budgetproject == "object" ? obj.budgetproject.id : obj.budgetproject);
// Vul het contractnummer van het oorspronkelijke contract in.
var parent_key = getQParamInt("id", -1);
var sql = "SELECT o.mld_opdr_ordernr"
+ " FROM mld_opdr o"
+ " WHERE o.mld_opdr_key = " + parent_key;
var oRs = Oracle.Execute(sql);
obj.ordernr = oRs("mld_opdr_ordernr").Value;
oRs.Close();
// Kopie contract. Volgnummer moet uniek zijn binnen dit contractnummer.
checkUniekContractnummer(-1, v_project_key, obj.ordernr, obj.sequence);
}
else
{
// Genereer een uniek volgnummer binnen het project voor een nieuwe opdracht.
var prj_key = (obj.budgetproject ? obj.budgetproject : project_key);
var sql = "SELECT COALESCE(MAX(TO_NUMBER(o.mld_opdr_ordernr)), 0) + 1 new_ordernr"
+ " FROM bgt_project p"
+ " , bgt_kostenrubriek r"
+ " , prs_kostensoortgrp g"
+ " , prs_kostensoort s"
+ " , mld_opdr o"
+ " WHERE p.bgt_project_key = r.bgt_project_key"
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
+ " AND p.bgt_project_key = " + prj_key;
var oRs = Oracle.Execute(sql);
obj.ordernr = oRs("new_ordernr").Value;
oRs.Close();
// Nieuw contract, dus volgnummer is altijd uniek hierbinnen.
}
var v_budget = getBudget(v_costtype);
if (obj.additional == 0)
{
var v_datamutatie = checkBudgetoverschrijding(obj.id, v_budget, obj.amount, obj.vat);
insertMutatie( v_datamutatie, "AO" );
}
else
{
insertMutatie( { budget_res_key: v_budget.budget_res_key
, bedrag_exc: -1 * obj.amount
, bedrag_btw: -1 * obj.vat
, budget_srt_key: v_budget.budget_srt_key
}
, "MW"
);
}
}
this.hook_pre_put = function(params, obj, key)
{
// Is de combinatie opdrachtnummer/volgnummer nog steeds uniek?
var sql = "SELECT p.bgt_project_key"
+ " , o.prs_kostensoort_key"
+ " , o.mld_opdr_ordernr"
+ " , o.mld_opdr_meerwerk"
+ " , o.mld_opdr_kosten"
+ " , o.mld_opdr_kosten_btw"
+ " FROM bgt_project p"
+ " , bgt_kostenrubriek r"
+ " , prs_kostensoortgrp g"
+ " , prs_kostensoort s"
+ " , mld_opdr o"
+ " WHERE p.bgt_project_key = r.bgt_project_key"
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
+ " AND o.mld_opdr_key = " + key;
var oRs = Oracle.Execute(sql);
var v_ordernr = oRs("mld_opdr_ordernr").Value;
var v_meerwerk = oRs("mld_opdr_meerwerk").Value;
var v_project_key = oRs("bgt_project_key").Value;
var v_cur_costtype_key = oRs("prs_kostensoort_key").Value;
var v_cur_bedrag = oRs("mld_opdr_kosten").Value;
var v_cur_btwbedrag = oRs("mld_opdr_kosten_btw").Value;
oRs.Close();
checkUniekContractnummer(key, v_project_key, v_ordernr, obj.sequence);
var v_costtype = (obj.costtype ? obj.costtype : v_cur_costtype_key);
checkAanwezigBudget(v_costtype);
// Budget bijwerken als gevolg van meer-minderwerk.
if (obj.additional == 1 || v_meerwerk == 1)
{
// Boek eerst het oude bedrag terug.
var v_budget_old = getBudget(v_cur_costtype_key);
insertMutatie( { budget_res_key: v_budget_old.budget_res_key
, budget_srt_key: v_budget_old.budget_srt_key
, bedrag_exc: v_cur_bedrag
, bedrag_btw: v_cur_btwbedrag
}
, "MW"
);
if (obj.additional == 1)
{
// Boek het nieuwe bedrag naar het (nieuwe) kostensoort.
var v_budget_new = getBudget(v_costtype);
insertMutatie( { budget_res_key: v_budget_new.budget_res_key
, budget_srt_key: v_budget_new.budget_srt_key
, bedrag_exc: -1 * obj.amount
, bedrag_btw: -1 * obj.vat
}
, "MW"
);
}
}
// Controle op overschrijden van budget.
if (obj.additional == 0)
{
if (v_cur_costtype_key != v_costtype)
{ // Heeft dit contract ook nog subcontracten
/*
var sql = "SELECT COUNT(*) aantal"
+ " so.mld_opdr_key"
+ " , so.prs_kostensoort_key"
+ " , so.mld_opdr_kosten"
+ " , so.mld_opdr_kosten_btw"
+ " FROM mld_opdr co"
+ " , mld_opdr so"
+ " , bgt_v_project_full cp"
+ " , bgt_v_project_full sp"
+ " WHERE co.prs_kostensoort_key = cp.prs_kostensoort_key"
+ " AND so.prs_kostensoort_key = sp.prs_kostensoort_key"
+ " AND co.mld_opdr_ordernr = so.mld_opdr_ordernr"
+ " AND cp.bgt_project_key = sp.bgt_project_key"
+ " AND co.mld_opdr_key = " + key;
var oRs = Oracle.Execute(sql);
while (!oRs.eof)
{
var v_cur_opdr_key = oRs("mld_opdr_key").Value;
//
var v_opdr_exc = 0;
var v_opdr_btw = 0;
var v_budget = getBudget(v_cur_costtype_key);
var v_datamutatie = checkBudgetoverschrijding(v_cur_opdr_key, v_budget, v_opdr_exc, v_opdr_btw); // contractbedrag van deze kostensoort verwijderen
insertMutatie( v_datamutatie, "AO" );
//
v_opdr_exc = (v_cur_opdr_key == key ? obj.amount : oRs("mld_opdr_kosten").Value);
v_opdr_btw = (v_cur_opdr_key == key ? obj.vat : oRs("mld_opdr_kosten_btw").Value);
v_budget = getBudget(v_costtype);
v_datamutatie = checkBudgetoverschrijding(-1, v_budget, v_opdr_exc, v_opdr_btw); // (aangepast) bedrag aan nieuwe kostensoort toevoegen
insertMutatie( v_datamutatie, "AO" );
//
// facturen krijgen ook nieuwe kostensoort.
var sql = "UPDATE fin_factuur"
+ " SET prs_kostensoort_key = " + v_costtype
+ " WHERE mld_opdr_key = " + v_cur_opdr_key;
Oracle.Execute(sql);
//
oRs.MoveNext();
}
oRs.Close();
*/
/* dit is het originele stuk voor alleen het huidige contract */
// contract verplaatsen naar ander kostensoort
var v_budget_old = getBudget(v_cur_costtype_key);
var v_datamutatie = checkBudgetoverschrijding(obj.id, v_budget_old, 0, 0); // bedrag van deze kostensoort verwijderen
insertMutatie( v_datamutatie, "AO" );
var v_budget_new = getBudget(v_costtype);
var v_datamutatie = checkBudgetoverschrijding(-1, v_budget_new, obj.amount, obj.vat); // (aangepast) bedrag aan nieuwe kostensoort toevoegen
insertMutatie( v_datamutatie, "AO" );
// facturen krijgen ook nieuwe kostensoort.
var sql = "UPDATE fin_factuur"
+ " SET prs_kostensoort_key = " + v_costtype
+ " WHERE mld_opdr_key = " + key;
Oracle.Execute(sql);
/* einde */
}
else
{
var v_budget_new = getBudget(v_costtype);
var v_datamutatie = checkBudgetoverschrijding(obj.id, v_budget_new, obj.amount, obj.vat);
insertMutatie( v_datamutatie, "AO" );
}
}
}
this.hook_pre_delete = function(params, key)
{
var sql = "SELECT MAX(o.prs_kostensoort_key) kostensoort"
+ " , MAX(o.mld_opdr_meerwerk) meerwerk"
+ " , MAX(mld_opdr_kosten) contract_exc"
+ " , MAX(mld_opdr_kosten_btw) contract_btw"
+ " , COUNT(f.fin_factuur_key) aantal"
+ " FROM mld_opdr o"
+ " , fin_factuur f"
+ " WHERE o.mld_opdr_key = f.mld_opdr_key(+)"
+ " AND o.mld_opdr_key = " + key;
var oRs = Oracle.Execute(sql);
var aantal_facturen = oRs("aantal").Value;
var prs_kostensoort = oRs("kostensoort").Value;
var meerwerk = oRs("meerwerk").Value == 1;
var contract_exc = oRs("contract_exc").Value;
var contract_btw = oRs("contract_btw").Value;
oRs.Close();
if (aantal_facturen > 0)
abort_with_warning("Verwijder eerst de facturen bij dit contract.");
// Eerst proberen of er automatisch terug geboekt moet worden door bedrag te muteren naar 0.
var v_budget_old = getBudget(prs_kostensoort);
if (meerwerk)
{
insertMutatie( { budget_res_key: v_budget_old.budget_res_key
, bedrag_exc: contract_exc
, bedrag_btw: contract_btw
, budget_srt_key: v_budget_old.budget_srt_key
}
, "MW"
);
}
else
{
var v_datamutatie = checkBudgetoverschrijding(key, v_budget_old, 0, 0);
insertMutatie( v_datamutatie, "AO" );
}
}
var gparams = {};
if (S("bgt_enabled") == 1)
{
gparams = {
GET: {
tables: [
"prs_kostensoort",
"prs_kostensoortgrp",
"bgt_kostenrubriek",
"bgt_project"
],
wheres: [
"mld_opdr.prs_kostensoort_key = prs_kostensoort.prs_kostensoort_key",
"prs_kostensoort.prs_kostensoortgrp_key = prs_kostensoortgrp.prs_kostensoortgrp_key",
"prs_kostensoortgrp.bgt_kostenrubriek_key = bgt_kostenrubriek.bgt_kostenrubriek_key",
"bgt_kostenrubriek.bgt_project_key = bgt_project.bgt_project_key"
]
}
};
var v_budgetdiscipline = getQParamInt("budgetdiscipline", -1);
if (v_budgetdiscipline == -1)
{
gparams.GET.tables.push("ins_tab_discipline");
gparams.GET.wheres.push("bgt_project.ins_discipline_key = ins_tab_discipline.ins_discipline_key");
gparams.GET.wheres.push(
"bgt_project.ins_discipline_key IN"
+ " (SELECT w.ins_discipline_key"
+ " FROM fac_v_webgebruiker w"
+ " , ins_tab_discipline d"
+ " WHERE w.ins_discipline_key = d.ins_discipline_key"
+ " AND w.prs_perslid_key = " + user_key
+ " AND (w.fac_gebruiker_prs_level_read<9 OR w.fac_gebruiker_alg_level_read<9)"
+ " AND d.ins_discipline_module = 'BGT'"
+ " AND d.ins_discipline_verwijder IS NULL"
+ " )"
);
}
}
function getBudget(data_costtype)
{
var sql = "SELECT MAX(b.bgt_budget_key) budget_s"
+ " , MAX(c.bgt_budget_key) budget_r"
+ " , MAX(COALESCE(b.bgt_budget_bedrag, 0)) budget_exc"
+ " , MAX(COALESCE(b.bgt_budget_btwbedrag, 0)) budget_btw"
+ " FROM bgt_budget b"
+ " , bgt_budgetmutatie m"
+ " , (SELECT r.bgt_project_key"
+ " , bgt_budget_key"
+ " FROM bgt_budget r"
+ " WHERE r.bgt_budget_isreserve = 1"
+ " ) c"
+ " WHERE b.bgt_project_key = c.bgt_project_key(+)"
+ " AND b.prs_kostensoort_key = " + data_costtype;
var oRs = Oracle.Execute(sql);
var budget_key_res = oRs("budget_r").Value;
var budget_key_srt = oRs("budget_s").Value;
var budget_exc = oRs("budget_exc").Value;
var budget_btw = oRs("budget_btw").Value;
oRs.Close();
if (budget_key_res == null)
abort_with_warning("Er is geen budget met kenmerk 'reserve' aanwezig voor dit project");
else
return { budget_res_key: budget_key_res
, budget_srt_key: budget_key_srt
, costtype_key: data_costtype
, bedrag_exc: budget_exc
, bedrag_btw: budget_btw
};
}
function checkUniekContractnummer(p_contract_key, p_project_key, p_contractnr, p_volgnr)
{
var sql = "SELECT count(*) aantal"
+ " FROM bgt_project p"
+ " , bgt_kostenrubriek r"
+ " , prs_kostensoortgrp g"
+ " , prs_kostensoort s"
+ " , mld_opdr o"
+ " WHERE p.bgt_project_key = r.bgt_project_key"
+ " AND r.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key"
+ " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key"
+ " AND s.prs_kostensoort_key = o.prs_kostensoort_key"
+ " AND p.bgt_project_key = " + p_project_key
+ " AND o.mld_opdr_ordernr = " + safe.quoted_sql(p_contractnr)
+ " AND o.mld_opdr_bedrijfopdr_volgnr = " + p_volgnr
+ (p_contract_key != -1 ? " AND o.mld_opdr_key <> " + p_contract_key : "");
var oRs = Oracle.Execute(sql);
var uniek_contractnr = (oRs("aantal").Value == 0);
oRs.Close();
if (!uniek_contractnr)
abort_with_warning("Contractnummer {0}.{1} bestaat al in dit project.".format(p_contractnr, p_volgnr));
}
function checkAanwezigBudget(p_kostensoort_key)
{
// kostensoort moet een budget hebben, anders mag er geen contract aan gekoppeld worden.
var sql = "SELECT count(*) aantal"
+ " FROM bgt_budget"
+ " WHERE prs_kostensoort_key = " + p_kostensoort_key;
var oRs = Oracle.Execute(sql);
var heeft_budget = oRs("aantal").Value == 1;
oRs.Close();
if (!heeft_budget)
abort_with_warning("Maak eerst een budget aan voor deze kostensoort voordat er contracten aan gekoppeld worden.");
}
function checkBudgetoverschrijding(data_id, data_budget, data_amount, data_vat)
{
var amount_old_exc = 0;
var amount_old_btw = 0;
if (data_id > -1)
{
var sql = "SELECT COALESCE(t.mld_opdr_kosten, 0) amount_old_exc"
+ " , COALESCE(t.mld_opdr_kosten_btw, 0) amount_old_btw"
+ " FROM mld_opdr t"
+ " WHERE t.prs_kostensoort_key = " + data_budget.costtype_key
+ " AND t.mld_opdr_key = " + data_id;
var oRs = Oracle.Execute(sql);
amount_old_exc = oRs("amount_old_exc").Value;
amount_old_btw = oRs("amount_old_btw").Value;
oRs.Close();
}
var sql = "SELECT SUM(o.mld_opdr_kosten) amount_total_exc"
+ " , SUM(o.mld_opdr_kosten_btw) amount_total_btw"
+ " FROM mld_opdr o"
+ " WHERE o.prs_kostensoort_key = " + data_budget.costtype_key;
var oRs = Oracle.Execute(sql);
var amount_sum_exc = oRs("amount_total_exc").Value;
var amount_sum_btw = oRs("amount_total_btw").Value;
oRs.Close();
var sql = "SELECT SUM(m1.bgt_budget_bedrag_van) reserve_exc"
+ " , SUM(m1.bgt_budget_btwbedrag_van) reserve_btw"
+ " FROM bgt_budget b1"
+ " , bgt_budget b2"
+ " , bgt_budgetmutatie m1"
+ " WHERE b2.bgt_budget_isreserve = 1"
+ " AND b1.bgt_project_key = b2.bgt_project_key"
+ " AND m1.bgt_budget_key_van = b2.bgt_budget_key"
+ " AND m1.bgt_budget_Key_naar = b1.bgt_budget_key"
+ " AND b1.prs_kostensoort_key = " + data_budget.costtype_key;
var oRs = Oracle.Execute(sql);
var reserve_exc = oRs("reserve_exc").Value;
var reserve_btw = oRs("reserve_btw").Value;
oRs.Close();
//
var bedrag_exc = 0;
var bedrag_btw = 0;
if (amount_old_exc < data_amount)
{
// verhoging contractwaarde exc
var overschot_exc = data_budget.bedrag_exc - amount_sum_exc - (data_amount - amount_old_exc);
bedrag_exc = (overschot_exc < 0 ? overschot_exc : 0);
}
else
{
// verlaging contractwaarde exc
var overschot_exc = reserve_exc - (data_amount - amount_old_exc);
bedrag_exc = -1 * (overschot_exc > 0 ? reserve_exc : (data_amount - amount_old_exc) );
}
//
if (amount_old_btw < data_vat)
{
// verhoging contractwaarde btw
var overschot_btw = data_budget.bedrag_btw - amount_sum_btw - (data_vat - amount_old_btw);
bedrag_btw = (overschot_btw < 0 ? overschot_btw : 0);
}
else
{
// verlaging contractwaarde btw
var overschot_btw = reserve_btw - (data_vat - amount_old_btw);
bedrag_btw = -1 * (overschot_btw > 0 ? reserve_btw : (data_vat - amount_old_btw) );
}
return { budget_res_key: data_budget.budget_res_key
, bedrag_exc: bedrag_exc
, bedrag_btw: bedrag_btw
, budget_srt_key: data_budget.budget_srt_key
};
}
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"; 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);
}
}
this.REST_GET = generic_REST_GET(this, gparams);
this.REST_PUT = generic_REST_PUT(this);
var autparams = user.checkAutorisation(this.autfunction);
var canWrite = (autparams.PRSwritelevel < 9 && autparams.ALGwritelevel < 9);
if (canWrite)
{
this.REST_POST = generic_REST_POST(this);
this.REST_DELETE = generic_REST_DELETE(this);
}
}
%>