From 4e99719f3425f87045818c4771d68ca52691d6e7 Mon Sep 17 00:00:00 2001 From: Koen Reefman Date: Wed, 29 Aug 2018 11:42:51 +0000 Subject: [PATCH] TWYN#52149 De multi-edit voert nu ook de pre_put hook uit, hiermee is de verwerking van een multi-edit gelijk gesteld aan de verwerking van een wijziging van 1 record svn path=/Website/branches/v2018.1/; revision=38981 --- APPL/API2/model_mld_opdr.inc | 52 +++++++++++++++++++++++------------ APPL/SCF/scaffolding_save.inc | 6 +++- 2 files changed, 40 insertions(+), 18 deletions(-) diff --git a/APPL/API2/model_mld_opdr.inc b/APPL/API2/model_mld_opdr.inc index 4fa9b9691b..34ad845c9d 100644 --- a/APPL/API2/model_mld_opdr.inc +++ b/APPL/API2/model_mld_opdr.inc @@ -460,6 +460,14 @@ obj._is_clone=2 --> nieuwe sub-opdracht } } + // Tijdelijke oplossing tbv TWYN#52149 + // Uiteindelijk moeten alle multiacties via de reguliere "hook_pre" en "hook_post" gaan (FCLT#54487) + this.hook_pre_multi_put = function(params, obj, key) + { + this.hook_pre_put(params, obj, key); + } + + // Deze hook is al multi-ready gemaakt (accepteert een leeg obj) this.hook_pre_put = function(params, obj, key) { // Is de combinatie opdrachtnummer/volgnummer nog steeds uniek? @@ -469,6 +477,7 @@ obj._is_clone=2 --> nieuwe sub-opdracht + " , o.mld_opdr_meerwerk" + " , o.mld_opdr_kosten" + " , o.mld_opdr_kosten_btw" + + " , o.mld_opdr_bedrijfopdr_volgnr" + " FROM bgt_project p" + " , bgt_kostenrubriek r" + " , prs_kostensoortgrp g" @@ -480,20 +489,29 @@ obj._is_clone=2 --> nieuwe sub-opdracht + " 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; + 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; + var v_cur_sequence = oRs("mld_opdr_bedrijfopdr_volgnr").Value; oRs.Close(); - checkUniekContractnummer(key, v_project_key, v_ordernr, obj.sequence); + + // Sommige waarden worden in multiedit niet meegestuurd, deze hier specifiek setten als zijnde de oude waarde + var id = obj.id || key; + var new_sequence = obj.sequence || v_cur_sequence; + var new_additional = obj.additional || v_meerwerk; + var new_amount = obj.amount || v_cur_bedrag; + var new_vat = obj.vat || v_cur_btwbedrag; + + checkUniekContractnummer(key, v_project_key, v_ordernr, new_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) + if (new_additional == 1 || v_meerwerk == 1) { // Boek eerst het oude bedrag terug. var v_budget_old = getBudget(v_cur_costtype_key); @@ -504,14 +522,14 @@ obj._is_clone=2 --> nieuwe sub-opdracht } , "MW" ); - if (obj.additional == 1) + if (new_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 + , bedrag_exc: -1 * new_amount + , bedrag_btw: -1 * new_vat } , "MW" ); @@ -520,7 +538,7 @@ obj._is_clone=2 --> nieuwe sub-opdracht } // Controle op overschrijden van budget. - if (obj.additional == 0) + if (new_additional == 0) { if (v_cur_costtype_key != v_costtype) { // Heeft dit contract ook nog subcontracten @@ -550,8 +568,8 @@ obj._is_clone=2 --> nieuwe sub-opdracht 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_opdr_exc = (v_cur_opdr_key == key ? new_amount : oRs("mld_opdr_kosten").Value); + v_opdr_btw = (v_cur_opdr_key == key ? new_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" ); @@ -570,10 +588,10 @@ obj._is_clone=2 --> nieuwe sub-opdracht // 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 + var v_datamutatie = checkBudgetoverschrijding(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 + var v_datamutatie = checkBudgetoverschrijding(-1, v_budget_new, new_amount, new_vat); // (aangepast) bedrag aan nieuwe kostensoort toevoegen insertMutatie( v_datamutatie, "AO" ); // facturen krijgen ook nieuwe kostensoort. var sql = "UPDATE fin_factuur" @@ -586,7 +604,7 @@ obj._is_clone=2 --> nieuwe sub-opdracht else { var v_budget_new = getBudget(v_costtype); - var v_datamutatie = checkBudgetoverschrijding(obj.id, v_budget_new, obj.amount, obj.vat); + var v_datamutatie = checkBudgetoverschrijding(id, v_budget_new, new_amount, new_vat); insertMutatie( v_datamutatie, "AO" ); } } diff --git a/APPL/SCF/scaffolding_save.inc b/APPL/SCF/scaffolding_save.inc index 20ca0c928d..1ec064246a 100644 --- a/APPL/SCF/scaffolding_save.inc +++ b/APPL/SCF/scaffolding_save.inc @@ -95,7 +95,11 @@ function scaffolding_save(model, scf_params) var keys = getFParamIntArray("scf_multi_id"); for (var i = 0; i < keys.length; i++) { - var restresult = model.REST_PUT(params, jsondata, keys [i]); + // Tijdelijke oplossing tbv TWYN#52149 + // Uiteindelijk moeten hier de "hook_pre_put" & "hook_post_put" komen (FCLT#54487) + if ("hook_pre_multi_put" in model) + model.hook_pre_multi_put(params, jsondata, keys[i]); + var restresult = model.REST_PUT(params, jsondata, keys[i]); } } else