diff --git a/APPL/API2/model_bgt_budget.inc b/APPL/API2/model_bgt_budget.inc index 580e7ae029..691aa831dd 100644 --- a/APPL/API2/model_bgt_budget.inc +++ b/APPL/API2/model_bgt_budget.inc @@ -85,7 +85,7 @@ function model_bgt_budget() }, "amountoriginal": { "dbs": "bgt_budget_bedrag_origineel", - "sql": "(BGT.getBudgetOpDatum(bgt_budget.bgt_budget_key, NULL))", + "sql": "(BGT.getBudgetOpDatum(bgt_budget.bgt_budget_key, 0, NULL))", "label": L("bgt_budget_origineel"), "typ": "float", "iscurrency": true, @@ -93,7 +93,7 @@ function model_bgt_budget() }, "amountmutation": { "dbs": "bgt_budget_bedrag_mutatie", - "sql": "(BGT.getBudgetMutaties(bgt_budget.bgt_budget_key, NULL, NULL))", + "sql": "(BGT.getBudgetMutaties(bgt_budget.bgt_budget_key, 0, NULL, NULL))", "label": L("bgt_budget_mutaties"), "typ": "float", "iscurrency": true, diff --git a/APPL/API2/model_bgt_discipline.inc b/APPL/API2/model_bgt_discipline.inc index 80b4d04d31..f527390805 100644 --- a/APPL/API2/model_bgt_discipline.inc +++ b/APPL/API2/model_bgt_discipline.inc @@ -79,7 +79,8 @@ function _model_bgt_discipline() "dbs": "ins_discipline_btw", "label": L("bgt_discipline_btw"), "typ": "check", - "default": "false" + "default": "false", + "hidden_fld": true } }; diff --git a/APPL/API2/model_ctr_scenario.inc b/APPL/API2/model_ctr_scenario.inc index dd7220f480..808f15f0bb 100644 --- a/APPL/API2/model_ctr_scenario.inc +++ b/APPL/API2/model_ctr_scenario.inc @@ -20,7 +20,7 @@ function model_ctr_scenario() this.record_name = "scenario"; this.table = "ins_scenario"; this.primary = "ins_scenario_key"; - this.autfunction = "WEB_BEZMGT"; + this.autfunction = "WEB_CTRMGT"; this.record_title = L("ctr_scenario"); this.records_title = L("ctr_scenario_m"); diff --git a/APPL/API2/model_fin_factuur.inc b/APPL/API2/model_fin_factuur.inc index 6e5d9151f6..331a2f9d86 100644 --- a/APPL/API2/model_fin_factuur.inc +++ b/APPL/API2/model_fin_factuur.inc @@ -49,6 +49,13 @@ function model_fin_factuur() "foreign": bgt_budgetproject_foreign(), "showtransit": true }, + "costtype": { + "dbs": "prs_kostensoort_key", + "label": L("prs_kostensoort_key"), + "typ": "key", + "foreign": bgt_costtype_foreign(), + "required": false + }, "company": { "dbs": "mld_opdr.mld_uitvoerende_keys", "label": L("lcl_ord_company"), @@ -65,14 +72,6 @@ function model_fin_factuur() "showtransit": true, "clone": false }, - "costtype": { - "dbs": "prs_kostensoort_key", - "label": L("prs_kostensoort_key"), - "typ": "key", - "foreign": bgt_costtype_foreign(), - "required": false, - "hidden_fld": true - }, "additional": { "dbs": "mld_opdr.mld_opdr_meerwerk", "label": L("lcl_mld_opdr_meerwerk"), @@ -94,6 +93,13 @@ function model_fin_factuur() "typ": "varchar", "hidden_fld": true }, + "account": { + "dbs": "mld_opdr.prs_kostenplaats_key", + "label": L("bgt_budget_account"), + "typ": "key", + "foreign": bgt_account_foreign(), + "readonly": true + }, "invoice": { "dbs": "fin_factuur_nr", "label": L("lcl_fin_invoice_number"), @@ -209,13 +215,33 @@ function model_fin_factuur() <% - // Bij klonen: id=-1, invoice=niet leeg. Dan een (volgende) volgnummer erachter zetten. - if (obj.invoice) + if (!obj.id && obj.invoice) { + // Bij klonen: id=(bestaat niet), invoice=niet leeg. Dan een (volgende) volgnummer erachter zetten. var invoice = obj.invoice; var cur_inv = (invoice.indexOf("/") > -1 ? invoice.substring(0,invoice.indexOf("/")-1) : invoice); var cur_seq = (invoice.indexOf("/") > -1 ? invoice.substring(invoice.indexOf("/")+1) : 0); - cur_seq = (cur_seq ? cur_seq : 0); + cur_seq = parseInt(cur_seq ? cur_seq : 0); + + var sql = "SELECT MAX(CASE WHEN INSTR(f.fin_factuur_nr, '/') > 0" + + " THEN TO_NUMBER(SUBSTR(f.fin_factuur_nr, INSTR(f.fin_factuur_nr, '/')+1))" + + " ELSE 0" + + " END) max_seq" + + " FROM bgt_kostenrubriek r" + + " , prs_kostensoortgrp g" + + " , prs_kostensoort s" + + " , mld_opdr o" + + " , fin_factuur f" + + " WHERE 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 = f.mld_opdr_key" + + " AND r.bgt_project_key = " + obj.budgetproject.id + + " AND f.fin_factuur_nr LIKE " + safe.quoted_sql(cur_inv + "%"); + var oRs = Oracle.Execute(sql); + cur_seq = oRs("max_seq").Value; + oRs.Close(); + var new_inv = cur_inv + "/" + (cur_seq + 1); obj.invoice = new_inv; } @@ -223,10 +249,12 @@ function model_fin_factuur() { var mld_opdr_key = getQParamInt("opdrachtcommon", -1); if (obj.id == -1 && mld_opdr_key > -1) - { + { // Nieuwe factuur bij bekende opdracht. var sql = "SELECT p.ins_discipline_key" + " , p.bgt_project_key" + " , o.mld_uitvoerende_keys" + + " , s.prs_kostensoort_key" + + " , s.prs_kostensoort_oms" + " FROM mld_opdr o" + " , prs_kostensoort s" + " , prs_kostensoortgrp g" @@ -241,14 +269,19 @@ function model_fin_factuur() var v_order = mld_opdr_key; var v_discipline = oRs("ins_discipline_key").Value; var v_project = oRs("bgt_project_key").Value; + var v_soort = oRs("prs_kostensoort_key").Value; + var v_srtoms = oRs("prs_kostensoort_oms").Value; var v_company = oRs("mld_uitvoerende_keys").Value; oRs.Close(); + // Er is geen QParam voor costtype gezet, dus deze zelf vullen. + obj.costtype = {id: v_soort, name: v_srtoms}; } else { var v_order = null; var v_discipline = (obj.budgetdiscipline ? obj.budgetdiscipline.id : null); var v_project = (obj.budgetproject ? obj.budgetproject.id : null); + var v_soort = (obj.costtype ? obj.costtype.id : null); var v_company = (obj.company ? obj.company.id : null); } %> @@ -257,6 +290,7 @@ function model_fin_factuur() <% if (v_order) { %> var mldopdracht = "<%=v_order%>"; <% } %> <% if (v_discipline) { %> var budgetdiscipline = "<%=v_discipline%>"; <% } %> <% if (v_project) { %> var budgetproject = "<%=v_project%>"; <% } %> + <% if (v_soort) { %> var costtype = "<%=v_soort%>"; <% } %> <% if (v_company) { %> var company = "<%=v_company%>"; <% } %> <% @@ -268,32 +302,53 @@ function model_fin_factuur() this.hook_pre_post = function(params, obj) { - // Bij toevoegen van een factuur wordt prs_kostensoort_key automatisch gevuld met die van mld_opdr. -/* -*/ -__Log(obj); - // Als er niet genoeg budget op het kostensoort van de factuur/contract is moet er uit budget rubriek Reserve - // overgeboekt worden naar het budget kostensoort. - var sql = "SELECT NVL(MAX(b.bgt_budget_bedrag) - SUM(f.fin_factuur_totaal), 0) budget_exc_over" - + " , NVL(MAX(b.bgt_budget_btwbedrag) - SUM(f.fin_factuur_totaal_btw), 0) budget_btw_over" - + " FROM bgt_budget b" - + " , fin_factuur f" - + " WHERE b.prs_kostensoort_key = f.prs_kostensoort_key" - + " AND f.prs_kostensoort_key = " + obj.costtype; - var oRs = Oracle.Execute(sql); - var budget_exc_over = oRs("budget_exc_over").Value; - var budget_btw_over = oRs("budget_btw_over").Value; - oRs.Close(); -// if (budget_exc_over < 0) -// - + // Bij toevoegen van een factuur moet prs_kostensoort_key nog gevuld worden. + // Gebruik daarvoor die van mld_opdr. + setKostensoort(obj); + // Is het factuurnummer/volgnummer uniek binnen het project? + checkUniekFactuurnummer(-1, obj.budgetproject, obj.invoice); } this.hook_pre_put = function(params, obj, key) { - // Bij wijzigen van factuur wordt prs_kostensoort_key automatisch overgenomen van mld_opdr. - // Als er niet genoeg budget op het kostensoort van de factuur/contract is moet er uit budget rubriek Reserve - // overgeboekt worden naar het budget kostensoort. + // Bij wijzigen van factuur moet prs_kostensoort_key nog gevuld worden. + // Gebruik daarvoor die van mld_opdr. + setKostensoort(obj); + // Is de combinatie factuurnummer/volgnummer nog steeds uniek? + checkUniekFactuurnummer(key, obj.budgetproject, obj.invoice); + } + + function setKostensoort(obj) + { + var sql = "SELECT o.prs_kostensoort_key" + + " FROM mld_opdr o" + + " WHERE mld_opdr_key = " + obj.order; + var oRs = Oracle.Execute(sql); + if (!oRs.eof) + obj.costtype = (!oRs.eof ? oRs("prs_kostensoort_key").Value : NULL); + oRs.Close(); + } + + function checkUniekFactuurnummer(p_factuur_key, p_project_key, p_factuurnr) + { + var sql = "SELECT count(*) aantal" + + " FROM bgt_kostenrubriek r" + + " , prs_kostensoortgrp g" + + " , prs_kostensoort s" + + " , mld_opdr o" + + " , fin_factuur f" + + " WHERE 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 = f.mld_opdr_key" + + " AND r.bgt_project_key = " + p_project_key + + " AND f.fin_factuur_nr = " + safe.quoted_sql(p_factuurnr) + + (p_factuur_key != -1 ? " AND f.fin_factuur_key <> " + p_factuur_key : ""); + var oRs = Oracle.Execute(sql); + var uniek_factuurnr = (oRs("aantal").Value == 0); + oRs.Close(); + if (!uniek_factuurnr) + abort_with_warning("Factuurnummer {0} bestaat al in dit project.".format(p_factuurnr)); } diff --git a/APPL/API2/model_mld_opdr.inc b/APPL/API2/model_mld_opdr.inc index 22820ebeef..09f302ba76 100644 --- a/APPL/API2/model_mld_opdr.inc +++ b/APPL/API2/model_mld_opdr.inc @@ -247,15 +247,20 @@ function model_mld_opdr() this.hook_pre_post = function(params, obj) { var parent_key = getQParamInt("id", -1); + if (!obj.sequence && obj.sequence!=0) + abort_with_warning("Vul een volgnummer voor het contract in."); if (parent_key > -1) // Bij kopie van opdracht geen nieuw nummer genereren. { + // Vul het contractnummer van het oorspronkelijke contract in. 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, obj.budgetproject.id, obj.ordernr, obj.sequence); } else { @@ -275,9 +280,31 @@ function model_mld_opdr() var oRs = Oracle.Execute(sql); obj.ordernr = oRs("new_ordernr").Value; oRs.Close(); + // Nieuw contract, dus volgnummer is altijd uniek hierbinnen. } } + this.hook_pre_put = function(params, obj, key) + { + // Is de combinatie projectnummer/volgnummer nog steeds uniek? + var sql = "SELECT p.bgt_project_key" + + " , o.mld_opdr_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 o.mld_opdr_key = " + key; + var oRs = Oracle.Execute(sql); + var v_ordernr = oRs("mld_opdr_ordernr").Value; + var v_project_key = oRs("bgt_project_key").Value; + oRs.Close(); + checkUniekContractnummer(key, v_project_key, v_ordernr, obj.sequence); + } var gparams = { GET: { @@ -296,6 +323,29 @@ function model_mld_opdr() } }; + 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)); + } + this.REST_GET = generic_REST_GET(this, gparams); this.REST_POST = generic_REST_POST(this); diff --git a/APPL/API2/model_prs_kostensoort.inc b/APPL/API2/model_prs_kostensoort.inc index 66be6f5097..83fe89ae8e 100644 --- a/APPL/API2/model_prs_kostensoort.inc +++ b/APPL/API2/model_prs_kostensoort.inc @@ -62,7 +62,7 @@ function model_prs_kostensoort() }, "name": { "dbs": "prs_kostensoort_oms", - "label": L("prs_kostensoort_oms"), + "label": (S("bgt_enabled") ? L("prs_kostensoort_opmerking") : L("prs_kostensoort_oms")), "typ": "varchar", "required": true, /* proberen */ "translate": true, @@ -71,7 +71,7 @@ function model_prs_kostensoort() }, "remark": { "dbs": "prs_kostensoort_opmerking", - "label": L("prs_kostensoort_opmerking"), + "label": (S("bgt_enabled") ? L("prs_kostensoort_oms") : L("prs_kostensoort_opmerking")), "typ": "varchar", "required": (S("bgt_enabled") ? false : true), "filter": "like" @@ -140,12 +140,18 @@ function model_prs_kostensoort() "showtransit": true }, "budgetcostcategory": { - "dbs" : "bgt_kostenrubriek.bgt_kostenrubriek_key", + "dbs": "bgt_kostenrubriek.bgt_kostenrubriek_key", "label": L("bgt_kostenrubriek"), "typ": "key", "required": true, "foreign": bgt_budgetcostcategory_foreign(), "showtransit": true + }, + "costcategorycode": { + "dbs": "bgt_kostenrubriek.bgt_kostenrubriek_code", + "label": L("bgt_kostenrubriek_code"), + "typ": "varchar", + "readonly": true } }; this.fields = object_merge({}, fields_ext, fields_main); @@ -163,6 +169,11 @@ function model_prs_kostensoort() }; // this.print = { xmlnode: "budget", where: "kostensoort"}; + this.hook_pre_show = function (obj, fld) + { + delete this.fields.costcategorycode; + } + this.hook_pre_edit = function (obj, fld) { if ((obj.id > -1) || (obj.costtypegroup && obj.costtypegroup.id > -1)) @@ -173,6 +184,8 @@ function model_prs_kostensoort() this.fields.budgetproject.readonly = true; this.fields.budgetcostcategory.hidden_fld = false; this.fields.budgetcostcategory.readonly = true; + + delete this.fields.costcategorycode; } if (obj.costtypegroup && obj.costtypegroup.id != -1) diff --git a/APPL/AUT/LogOff.asp b/APPL/AUT/LogOff.asp index 09650330a3..b58108d320 100644 --- a/APPL/AUT/LogOff.asp +++ b/APPL/AUT/LogOff.asp @@ -37,6 +37,7 @@ if (Session("org_user_key") > 0) else { result.return_url = S("logoff_return_url"); + var allow_auto_sso = false; if (Session("idp_key") > 0) { var sql = "SELECT aut_idp_remote_logouturl" @@ -44,11 +45,14 @@ else + " WHERE aut_idp_key = " + Session("idp_key"); var oRs = Oracle.Execute(sql); if (oRs("aut_idp_remote_logouturl").Value) + { result.return_url = oRs("aut_idp_remote_logouturl").Value; + allow_auto_sso = true; + } oRs.Close(); } - doLogoff(); + doLogoff(allow_auto_sso); } Response.Write(JSON.stringify(result)); Response.End; diff --git a/APPL/AUT/Login.inc b/APPL/AUT/Login.inc index acac78ae79..bf9f147a9a 100644 --- a/APPL/AUT/Login.inc +++ b/APPL/AUT/Login.inc @@ -197,9 +197,10 @@ function doLoginStateless(prs_key, params) // Session.Abondon is gevaarlijk: dan verlies je ook CustomerID etc. // Bovendien krijg je met IIS dan nog steeds geen nieuwe ASPSESSIONID -function doLogoff() +function doLogoff(allow_auto_sso) { - Session("no_sso") = 1; // Voorkom autosso + if (!allow_auto_sso) + Session("no_sso") = 1; // Voorkom auto_sso Session.Contents.Remove("user_key"); Session.Contents.Remove("ASPFIXATION"); Session.Contents.Remove("must_reset_password"); @@ -390,14 +391,19 @@ function testpassword(prs_key, wachtwoord, pmobile) var oslogin = oRs("prs_perslid_oslogin").Value; oRs.Close(); - if (pmobile==1 && mobauth) // Mobile 'verzonnen' wachtwoord + if (mobauth && mobauthexp && new Date() <= mobauthexp) // Mobile 'verzonnen' wachtwoord nog niet verlopen? { var mobww = wachtwoord.toLowerCase(); // wij sturen lowercase base32 mobww = mobww.replace(/0/i, 'o'); // 0 / 1 / 8 komen daar niet in voor mobww = mobww.replace(/1/i, 'l'); mobww = mobww.replace(/8/i, 'b'); - if (mobauth == mobww && mobauthexp && new Date() <= mobauthexp) + if (mobauth == mobww) { + var sql = "UPDATE prs_perslid" // geen hergebruik + + " SET prs_perslid_authenticatie = NULL" + + " WHERE prs_perslid_key = " + prs_key; + Oracle.Execute(sql); + return true; // Goed } __Log("Mobile token check failed"); diff --git a/APPL/AUT/loginTry.asp b/APPL/AUT/loginTry.asp index 2ec4e50dfe..6ec7724eae 100644 --- a/APPL/AUT/loginTry.asp +++ b/APPL/AUT/loginTry.asp @@ -87,7 +87,7 @@ if (user_key < 0) if (user_key < 0) { var auth = String(Request.ServerVariables("HTTP_AUTHORIZATION")); - if (auth.match(/^Basic /)) + if (auth.match(/^Basic /i)) { var b64 = auth.substring(6); var plain = decode_b64(b64); @@ -333,8 +333,31 @@ if (user_key < 0 && S("os_logon") IntegratedSSO(); // Voor licentieklanten } -//if (user_key < 0) -// trySSO("DEFAULT"); // zal je standaard naar het loginscherm sturen +// Tenslotte proberen we automatische iDP's +if (user_key < 0 + && typeof Session("no_sso") == "undefined" + && !Request.ServerVariables("HTTP_X_FACILITOR_API_KEY").Count + && !Request.QueryString("APIKEY").Count) +{ + var ip = String(Request.ServerVariables("REMOTE_ADDR")); + var sql = "SELECT aut_idp_code" + + " , aut_idp_ipfilter" + + " FROM aut_idp" + + " WHERE aut_idp_internal = 0" + + " AND aut_idp_ipauto = 1" + + " AND aut_idp_ipfilter IS NOT NULL" + + " ORDER BY aut_idp_ipfilter"; // liefst wil ik sorteren met CIDR met de meeste significante bits (specifiekste) eerst? + var oRs = Oracle.Execute(sql); + while (user_key < 0 && !oRs.Eof) + { + var ip_restrict = oRs("aut_idp_ipfilter").Value; + var ip_ok = IP.inAnySubnet(ip, ip_restrict); + if (IP.inAnySubnet(ip, ip_restrict)) + trySSO(oRs("aut_idp_code").Value); + oRs.MoveNext(); + } + oRs.Close(); +} if (user_key > 0) // dan hebben we (nu) een nieuwe user { diff --git a/APPL/BGT/bgt_budget.js b/APPL/BGT/bgt_budget.js index 1b68097bcf..c1f6933488 100644 --- a/APPL/BGT/bgt_budget.js +++ b/APPL/BGT/bgt_budget.js @@ -69,6 +69,7 @@ function init_budget() { req_info: "initsearch", niveau: init_niveau, parent_key: (v_budgetproject ? v_budgetproject : -1), + child_key: v_costtype, init_key: init_key }, re_init_plaats); @@ -85,7 +86,7 @@ function re_init_soort(data) function re_init_plaats(data) { - var init_key = ($("#account").val() != -1 ? $("#account").val() : -1); + var init_key = ($("#account").val() != -1 ? $("#account").val() : data.parents.K); var project_key = $("#budgetproject").val() || data.parents.P; fill_plaatsselector("KP", project_key, init_key); } @@ -132,7 +133,16 @@ function change_groep() } function change_soort() { - var btw_perc = parseFloat($("#costtype option:selected").attr("perc_btw").replace(/,/g,".")); + var project_key = $("#budgetproject").val(); + var kplaats_key = -1; + var btw_perc = 0; + if ($("#costtype").val() != -1 ) + { + kplaats_key = $("#costtype option:selected").attr("kpn_key"); + btw_perc = parseFloat($("#costtype option:selected").attr("perc_btw").replace(/,/g,".")); + } + fill_plaatsselector("KP", project_key, kplaats_key); + if ($("#amount").val() && btw_perc != kostensoort_btw) { FcltMgr.confirm(L("bgt_confirm_recalc_vat"), function() { change_amount(); } ); @@ -232,7 +242,7 @@ function fill_plaatsselector(niveau, parent_key, init_key) { req_info: "plaatssearch", niveau: niveau, parent_key: parent_key, - init_key: init_key //(init_key ? init_key : -1); + init_key: (init_key ? init_key : -1) }, process_info); } @@ -274,12 +284,14 @@ function process_info(data) var opt = data.lov[i]; if (data.niveau == "KP") { - add_data = ' par_key="' + opt.atr.par_key + '"'; + add_data = ' par_key="' + opt.atr.par_key + '"' + + ' kpn_key="' + opt.atr.kpn_key + '"'; } else { add_data = ' incl_btw="' + opt.atr.btw_inc + '"' - + ' perc_btw="' + opt.atr.btw_val + '"'; + + ' perc_btw="' + opt.atr.btw_val + '"' + + ' kpn_key="' + opt.atr.kpn_key + '"'; } new_lov += ''; if (opt.sel) diff --git a/APPL/BGT/bgt_search.asp b/APPL/BGT/bgt_search.asp index 9016353ac3..ba97f059c8 100644 --- a/APPL/BGT/bgt_search.asp +++ b/APPL/BGT/bgt_search.asp @@ -206,7 +206,7 @@ var authparamsBGTUSE = user.checkAutorisation("WEB_BGTUSE"); { label: L("lcl_period_to"), initEmpty: true }); - CHECKBOXTR(L("lcl_fin_total_sum"), "fldbgtinclbtw", "bgt_inclbtw", false); + CHECKBOXTR(L("lcl_fin_total_sum"), "fldbgtinclbtw", "bgt_inclbtw", true); %> diff --git a/APPL/BGT/bgt_search_list.asp b/APPL/BGT/bgt_search_list.asp index 3bcda98a82..8d7e34858b 100644 --- a/APPL/BGT/bgt_search_list.asp +++ b/APPL/BGT/bgt_search_list.asp @@ -180,7 +180,7 @@ var transitParam = buildTransitParam([]); + " GROUP BY m2.bgt_budget_key_naar" + ") mutatie" + " GROUP BY mutatie.bgt_budget_key" - + " ) mut"; + + " ) "; // zoiets moet het dan gaan worden. Vast nog wat verfijnder. UNIONs met reserve e.d. nodig? if (groupby == 1) // facturen @@ -313,163 +313,197 @@ var transitParam = buildTransitParam([]); // Die worden afzonderlijk bijgevoegd (UNION) om wel het totaal te krijgen qua budget // Eerst de budgetten direct bij kostensoort - var sql1 = "SELECT ins_discipline_omschrijving project," - + " bgt_project_omschrijving deelproject," + var sql1 = "SELECT id.ins_discipline_omschrijving project," + + " pr.bgt_project_omschrijving deelproject," + " kr.bgt_kostenrubriek_oms rubriek," - + " ksg.prs_kostensoortgrp_oms groep," - + " bud.prs_kostensoortgrp_key," - + " bud.bgt_kostenrubriek_key," + + " kg.prs_kostensoortgrp_oms groep," + + " bd.prs_kostensoortgrp_key," + + " bd.bgt_kostenrubriek_key," + " ks.prs_kostensoort_key," + " ks.prs_kostensoort_oms onderdeel," + " ks.prs_kostensoort_altcode rcode," + " ks.prs_kostensoort_altcode sortcode," - + " 0 budget_reserve," - + " SUM(COALESCE(bud.bgt_budget_bedrag, 0)) budget_actueel," + + " BGT.getBudgetOverschrijding(ks.prs_kostensoort_key, 0, NULL) budget_reserve," + + " SUM(COALESCE(bd.bgt_budget_bedrag, 0)) budget_actueel," + " SUM(COALESCE(mut.bedrag_naar, 0) + COALESCE(mut.bedrag_van, 0)) budget_mutatie" + " FROM prs_kostensoort ks," - + " prs_kostensoortgrp ksg," + + " prs_kostensoortgrp kg," + " bgt_kostenrubriek kr," - + " bgt_budget bud," + + " bgt_budget bd," + " bgt_project pr," + " ins_tab_discipline id," - + mutatie_sql - + " WHERE ksg.bgt_kostenrubriek_key = kr.bgt_kostenrubriek_key" - + " AND ks.prs_kostensoort_key = bud.prs_kostensoort_key" + + mutatie_sql + "mut" + + " WHERE kg.bgt_kostenrubriek_key = kr.bgt_kostenrubriek_key" + + " AND ks.prs_kostensoort_key = bd.prs_kostensoort_key(+)" + " AND pr.bgt_project_key = kr.bgt_project_key" - + " AND ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key" + + " AND kg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key" + " AND id.ins_discipline_key = pr.ins_discipline_key" - + " AND mut.bgt_budget_key(+) = bud.bgt_budget_key" + + " AND mut.bgt_budget_key(+) = bd.bgt_budget_key" + (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "") + (bgtrubr_key > 0 ? "AND kr.bgt_kostenrubriek_key = " + bgtrubr_key : "") - + (bgtgrp_key > 0 ? " AND ksg.prs_kostensoortgrp_key = " + bgtgrp_key : "") + + (bgtgrp_key > 0 ? " AND kg.prs_kostensoortgrp_key = " + bgtgrp_key : "") + " AND pr.ins_discipline_key =" + bgtdisc_key; - sql1 += " GROUP BY ksg.prs_kostensoortgrp_oms," + sql1 += " GROUP BY kg.prs_kostensoortgrp_oms," + " ks.prs_kostensoort_key," + " ks.prs_kostensoort_opmerking ," + " ks.prs_kostensoort_oms," + " ks.prs_kostensoort_altcode," - + " bud.prs_kostensoortgrp_key," + + " bd.prs_kostensoortgrp_key," + " kr.bgt_kostenrubriek_oms," - + " bud.bgt_kostenrubriek_key," + + " bd.bgt_kostenrubriek_key," + " pr.bgt_project_key," - + " bgt_project_omschrijving ," - + " ins_discipline_omschrijving"; + + " pr.bgt_project_omschrijving ," + + " id.ins_discipline_omschrijving"; } if (groupby == 4) // 4. kostensoortgrp { - var sql1 = "SELECT ins_discipline_omschrijving project," - + " bgt_project_omschrijving deelproject," + var sql1 = "SELECT id.ins_discipline_omschrijving project," + + " pr.bgt_project_omschrijving deelproject," + " kr.bgt_kostenrubriek_oms rubriek," - + " ksg.prs_kostensoortgrp_altcode rcode," - + " ksg.prs_kostensoortgrp_altcode sortcode," - + " ksg.prs_kostensoortgrp_oms groep," - + " bud.prs_kostensoortgrp_key," - + " bud.bgt_kostenrubriek_key," - + " 0 budget_reserve," - + " SUM(COALESCE(bud.bgt_budget_bedrag, 0)) budget_actueel," + + " kg.prs_kostensoortgrp_altcode rcode," + + " kg.prs_kostensoortgrp_altcode sortcode," + + " kg.prs_kostensoortgrp_oms groep," + + " bd.prs_kostensoortgrp_key," + + " bd.bgt_kostenrubriek_key," + + " MAX(COALESCE(vn.reserve_bedrag, 0)) budget_reserve," + + " SUM(COALESCE(bd.bgt_budget_bedrag, 0)) budget_actueel," + " SUM(COALESCE(mut.bedrag_naar, 0) + COALESCE(mut.bedrag_van, 0)) budget_mutatie" - + " FROM prs_kostensoortgrp ksg," + + " FROM prs_kostensoortgrp kg," + " bgt_kostenrubriek kr," - + " bgt_budget bud," + + " bgt_budget bd," + " bgt_project pr," + " ins_tab_discipline id," - + mutatie_sql - + " WHERE ksg.bgt_kostenrubriek_key = kr.bgt_kostenrubriek_key" - + " AND bud.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key" + + " (SELECT ks_1.prs_kostensoortgrp_key" + + " , SUM(BGT.getBudgetOverschrijding(ks_1.prs_kostensoort_key, 0, NULL)) reserve_bedrag" + + " FROM prs_kostensoort ks_1" + + " GROUP BY ks_1.prs_kostensoortgrp_key" + + " ) vn," + + mutatie_sql + "mut" + + " WHERE kg.bgt_kostenrubriek_key = kr.bgt_kostenrubriek_key" + + " AND kg.prs_kostensoortgrp_key = bd.prs_kostensoortgrp_key(+)" + + " AND kg.prs_kostensoortgrp_key = vn.prs_kostensoortgrp_key" + " AND pr.bgt_project_key = kr.bgt_project_key" + " AND id.ins_discipline_key = pr.ins_discipline_key" - + " AND mut.bgt_budget_key(+) = bud.bgt_budget_key" - + " AND bud.bgt_budget_isreserve = 0" // reserve afzonderlijk + + " AND mut.bgt_budget_key(+) = bd.bgt_budget_key" + + " AND bd.bgt_budget_isreserve = 0" // reserve afzonderlijk + (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "") + (bgtrubr_key > 0 ? " AND kr.bgt_kostenrubriek_key = " + bgtrubr_key : "") + " AND pr.ins_discipline_key =" + bgtdisc_key; sql1 += " GROUP BY kr.bgt_kostenrubriek_oms," - + " ksg.prs_kostensoortgrp_altcode," - + " ksg.prs_kostensoortgrp_oms," - + " bud.prs_kostensoortgrp_key," - + " bud.bgt_kostenrubriek_key," + + " kg.prs_kostensoortgrp_altcode," + + " kg.prs_kostensoortgrp_oms," + + " bd.prs_kostensoortgrp_key," + + " bd.bgt_kostenrubriek_key," + " pr.bgt_project_key," - + " bgt_project_omschrijving ," - + " ins_discipline_omschrijving"; + + " pr.bgt_project_omschrijving ," + + " id.ins_discipline_omschrijving"; } if (groupby == 5) // 5. kostenrubriek { - var sql1 = "SELECT ins_discipline_omschrijving project," - + " bgt_project_omschrijving deelproject," + var sql1 = "SELECT id.ins_discipline_omschrijving project," + + " pr.bgt_project_omschrijving deelproject," + " kr.bgt_kostenrubriek_oms rubriek," + " kr.bgt_kostenrubriek_code rcode," + " kr.bgt_kostenrubriek_code sortcode," + " kr.bgt_kostenrubriek_key," - + " 0 budget_reserve," - + " SUM(COALESCE(bud.bgt_budget_bedrag, 0)) budget_actueel," + + " MAX(COALESCE(vn.reserve_bedrag, 0)) budget_reserve," + + " SUM(COALESCE(bd.bgt_budget_bedrag, 0)) budget_actueel," + " SUM(COALESCE(mut.bedrag_naar, 0) + COALESCE(mut.bedrag_van, 0)) budget_mutatie" + " FROM bgt_kostenrubriek kr," - + " bgt_budget bud," + + " bgt_budget bd," + " bgt_project pr," + " ins_tab_discipline id," - + mutatie_sql - + " WHERE bud.bgt_kostenrubriek_key = kr.bgt_kostenrubriek_key" + + " (SELECT kg_1.bgt_kostenrubriek_key" + + " , SUM(BGT.getBudgetOverschrijding(ks_1.prs_kostensoort_key, 0, NULL)) reserve_bedrag" + + " FROM prs_kostensoort ks_1" + + " , prs_kostensoortgrp kg_1" + + " WHERE ks_1.prs_kostensoortgrp_key = kg_1.prs_kostensoortgrp_key" + + " GROUP BY kg_1.bgt_kostenrubriek_key" + + " ) vn," + + mutatie_sql + "mut" + + " WHERE kr.bgt_kostenrubriek_key = bd.bgt_kostenrubriek_key(+)" + + " AND kr.bgt_kostenrubriek_key = vn.bgt_kostenrubriek_key" + " AND pr.bgt_project_key = kr.bgt_project_key" + " AND id.ins_discipline_key = pr.ins_discipline_key" - + " AND mut.bgt_budget_key(+) = bud.bgt_budget_key" + + " AND bd.bgt_budget_key = mut.bgt_budget_key(+)" + (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "") + " AND pr.ins_discipline_key =" + bgtdisc_key + " GROUP BY kr.bgt_kostenrubriek_oms," + " kr.bgt_kostenrubriek_key," - + " bgt_project_omschrijving ," - + " bgt_kostenrubriek_code ," - + " ins_discipline_omschrijving"; + + " pr.bgt_project_omschrijving ," + + " kr.bgt_kostenrubriek_code ," + + " id.ins_discipline_omschrijving"; if (bgt_inclbtw) { //BTW - sql1 += " UNION SELECT ins_discipline_omschrijving project," - + " bgt_project_omschrijving deelproject," + sql1 += " UNION SELECT id.ins_discipline_omschrijving project," + + " pr.bgt_project_omschrijving deelproject," + " 'BTW' rubriek," + " 'B' rcode," + " '92' sortcode," + " -3 bgt_kostenrubriek_key," - + " 0 budget_reserve," - + " SUM(COALESCE(bud.bgt_budget_btwbedrag, 0)) budget_actueel," + + " MAX(COALESCE(vn.reserve_bedrag, 0)) budget_reserve," + + " SUM(COALESCE(bd.bgt_budget_btwbedrag, 0)) budget_actueel," + " SUM(COALESCE(mut.btwbedrag_naar, 0) + COALESCE(mut.btwbedrag_van, 0)) budget_mutatie" - + " FROM bgt_budget bud," + + " FROM bgt_budget bd," + " bgt_project pr," + " ins_tab_discipline id," - + mutatie_sql - + " WHERE pr.bgt_project_key = bud.bgt_project_key" + + " (SELECT kr_1.bgt_project_key" + + " , SUM(BGT.getBudgetOverschrijding(ks_1.prs_kostensoort_key, 1, NULL)) reserve_bedrag" + + " FROM prs_kostensoort ks_1" + + " , prs_kostensoortgrp kg_1" + + " , bgt_kostenrubriek kr_1" + + " WHERE ks_1.prs_kostensoortgrp_key = kg_1.prs_kostensoortgrp_key" + + " AND kg_1.bgt_kostenrubriek_key = kr_1.bgt_kostenrubriek_key" + + " GROUP BY kr_1.bgt_project_key" + + " ) vn," + + mutatie_sql + "mut" + + " WHERE pr.bgt_project_key = bd.bgt_project_key(+)" + + " AND pr.bgt_project_key = vn.bgt_project_key" + " AND id.ins_discipline_key = pr.ins_discipline_key" - + " AND mut.bgt_budget_key(+) = bud.bgt_budget_key" + + " AND mut.bgt_budget_key(+) = bd.bgt_budget_key" + (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"; + + " GROUP BY pr.bgt_project_omschrijving ," + + " id.ins_discipline_omschrijving"; } } if (groupby == 6) // 6. deelproject { - var sql1 = "SELECT ins_discipline_omschrijving project," - + " bgt_project_omschrijving deelproject," + var sql1 = "SELECT id.ins_discipline_omschrijving project," + + " pr.bgt_project_omschrijving deelproject," + " pr.bgt_project_key," - + " 0 budget_reserve," - + " SUM(COALESCE(bud.bgt_budget_bedrag, 0)" - + (bgt_inclbtw ? " + COALESCE(bud.bgt_budget_btwbedrag, 0)" : "") + + " MAX(COALESCE(vn.reserve_bedrag, 0)) budget_reserve," + + " SUM(COALESCE(bd.bgt_budget_bedrag, 0)" + + (bgt_inclbtw ? " + COALESCE(bd.bgt_budget_btwbedrag, 0)" : "") + ") budget_actueel," + " SUM(COALESCE(mut.bedrag_naar, 0) + COALESCE(mut.bedrag_van,0)) budget_mutatie" - + " FROM bgt_budget bud," + + " FROM bgt_budget bd," + " bgt_project pr," + " ins_tab_discipline id," - + mutatie_sql - + " WHERE bud.bgt_project_key = pr.bgt_project_key" + + " (SELECT kr_1.bgt_project_key" + + " , SUM(BGT.getBudgetOverschrijding(ks_1.prs_kostensoort_key, 0, NULL)) reserve_bedrag" + + " FROM prs_kostensoort ks_1" + + " , prs_kostensoortgrp kg_1" + + " , bgt_kostenrubriek kr_1" + + " WHERE ks_1.prs_kostensoortgrp_key = kg_1.prs_kostensoortgrp_key" + + " AND kg_1.bgt_kostenrubriek_key = kr_1.bgt_kostenrubriek_key" + + " GROUP BY kr_1.bgt_project_key" + + " ) vn," + + mutatie_sql + "mut" + + " WHERE pr.bgt_project_key = bd.bgt_project_key(+)" + + " AND pr.bgt_project_key = vn.bgt_project_key" + " AND id.ins_discipline_key = pr.ins_discipline_key" - + " AND mut.bgt_budget_key(+) = bud.bgt_budget_key" + + " AND bd.bgt_budget_key = mut.bgt_budget_key(+)" + (bgtproj_key_arr.length > 0 ? " AND pr.bgt_project_key IN (" + bgtproj_key_arr.join(",") + ")" : "") + " AND pr.ins_discipline_key =" + bgtdisc_key; sql1 += " GROUP BY pr.bgt_project_key," - + " bgt_project_omschrijving ," - + " ins_discipline_omschrijving"; + + " pr.bgt_project_omschrijving ," + + " id.ins_discipline_omschrijving"; } @@ -573,11 +607,11 @@ var transitParam = buildTransitParam([]); + (groupby <= 4 ? " bud.groep groep, bud.prs_kostensoortgrp_key," : "") + (groupby <= 3 ? " bud.onderdeel onderdeel, besteding.prs_kostensoort_key," : "") + " MAX(bud.budget_reserve) budget_reserve," - + " MAX(bud.budget_actueel) budget_actueel," - + " MAX(bud.budget_actueel - bud.budget_mutatie + bud.budget_reserve) budget_origineel," + + " MAX(bud.budget_actueel + bud.budget_reserve) budget_actueel," + + " MAX(bud.budget_actueel - bud.budget_mutatie) budget_origineel," + " MAX(bud.budget_mutatie) budget_mutatie," + " SUM(besteding.gecontracteerd) gecontracteerd," - + " MAX(COALESCE(bud.budget_actueel, 0)) - SUM(COALESCE(besteding.gecontracteerd, 0)) tecontracteren," + + " MAX(COALESCE(bud.budget_actueel + bud.budget_reserve, 0)) - SUM(COALESCE(besteding.gecontracteerd, 0)) tecontracteren," + " SUM(besteding.gefactureerd) gefactureerd," + " SUM(besteding.tefactureren) tefactureren" + " FROM (" + sql1 + ") bud," @@ -888,8 +922,7 @@ var transitParam = buildTransitParam([]); if (groupby > 2) // denk ik { rst.addColumn(new Column({caption: "Origineel", content: budgetOrigineelShow, fnAmount: budgetOrigineelAmount, datatype: "currency", total: true})); -// if (groupby == 5) -// rst.addColumn(new Column({caption: "Reserve", content: budgetReserveShow, fnAmount: budgetReserveAmount, datatype: "currency", total: true})); + rst.addColumn(new Column({caption: "Van/naar Reserve", content: budgetReserveShow, fnAmount: budgetReserveAmount, datatype: "currency", total: true})); rst.addColumn(new Column({caption: "Mutatie", content: budgetMutatieShow, fnAmount: budgetMutatieAmount, datatype: "currency", total: true})); rst.addColumn(new Column({caption: L("bgt_budget_bedrag"), content: budgetActueelShow, fnAmount: budgetActueelAmount, datatype: "currency", total: true})); } diff --git a/APPL/BGT/fin_factuur.js b/APPL/BGT/fin_factuur.js index 32eaf56008..d7dece7724 100644 --- a/APPL/BGT/fin_factuur.js +++ b/APPL/BGT/fin_factuur.js @@ -67,8 +67,9 @@ function re_init_soort(data) { fill_rubriekselector("D", -1 , -1, data.parents.D); fill_rubriekselector("P", data.parents.D, -1, data.parents.P); - fill_rubriekselector("B", data.parents.P, -1, data.parents.B); + fill_rubriekselector("B", -1 , data.parents.P, data.parents.B); fill_rubriekselector("O", data.parents.P, data.parents.B, data.parents.O); + fill_rubriekselector("S", data.parents.G, data.parents.S, data.parents.S); } function change_discipline() @@ -93,6 +94,7 @@ function change_bedrijf() var project_key = (typeof $("#budgetproject").val() == "undefined" ? (typeof budgetproject == "undefined" ? -1 : budgetproject) : $("#budgetproject").val() ); var bedrijf_key = (typeof $("#company").val() == "undefined" ? (typeof company == "undefined" ? -1 : company) : $("#company").val() ); fill_rubriekselector("O", project_key, bedrijf_key); + fill_rubriekselector("S", -1, -1, -1); } function change_opdracht() @@ -100,10 +102,12 @@ function change_opdracht() // Als opdracht bekend is kan het bedrag ingevuld worden: // we weten dan de btw-percentage dat gebruikt moet worden, // en sla de key voor kostensoort bij deze opdracht op. + var kostengroep_key = $("#order option:selected").attr("grp_key"); var kostensoort_key = $("#order option:selected").attr("cost_key"); if (kostensoort_key) - $("#costtype").val(kostensoort_key); - + { + fill_rubriekselector("S", kostengroep_key, kostensoort_key, kostensoort_key); + } var btw_perc = parseFloat($("#order option:selected").attr("perc_btw").replace(/,/g,".")); if ($("#total").val() && btw_perc != kostensoort_btw) { @@ -158,13 +162,14 @@ function fill_rubriekselector(niveau, parent_key, child_key, init_key) function process_info(data) { var select; + var readonly = false; switch(data.niveau) { case "D": select = $("#budgetdiscipline"); break; case "P": select = $("#budgetproject"); break; case "R": select = $("#budgetcostcategory"); break; case "G": select = $("#costtypegroup"); break; - case "S": select = $("#costtype"); break; + case "S": select = $("#costtype"); readonly = true; break; case "B": select = $("#company"); break; case "O": select = $("#order"); break; case "KP": select = $("#account"); break; @@ -187,13 +192,14 @@ function process_info(data) { add_data = ' incl_btw="' + opt.atr.btw_inc + '"' + ' perc_btw="' + opt.atr.btw_val + '"' + + ' grp_key="' + opt.atr.grp_key + '"' + ' cost_key="' + opt.atr.srt_key + '"'; } new_lov += ''; if (opt.sel) sel_key = opt.key; } - select.prop("disabled", false); + select.prop("disabled", readonly); } else { diff --git a/APPL/BGT/get_bgt_info_ajax.asp b/APPL/BGT/get_bgt_info_ajax.asp index e35003c7bb..a42dbe3833 100644 --- a/APPL/BGT/get_bgt_info_ajax.asp +++ b/APPL/BGT/get_bgt_info_ajax.asp @@ -45,6 +45,7 @@ switch (req_info) + " , -1 soort_key" + " , -1 opdracht_key" + " , -1 bedrijf_key" + + " , NULL kostenplaats_key" + " FROM bgt_disc_params d" + " , ins_tab_discipline t" + " WHERE t.ins_discipline_key = d.bgt_ins_discipline_key" @@ -62,6 +63,7 @@ switch (req_info) + " , -1 soort_key" + " , -1 opdracht_key" + " , -1 bedrijf_key" + + " , NULL kostenplaats_key" + " FROM bgt_disc_params d" + " , bgt_project p" + " WHERE d.bgt_ins_discipline_key = p.ins_discipline_key" @@ -75,10 +77,11 @@ switch (req_info) + " d.bgt_ins_discipline_key disc_key" + " , p.bgt_project_key project_key" + " , -1 rubriek_key" - + " , -1 groep_key" - + " , -1 soort_key" + + " , g.prs_kostensoortgrp_key groep_key" + + " , s.prs_kostensoort_key soort_key" + " , o.mld_opdr_key opdracht_key" + " , b.prs_bedrijf_key bedrijf_key" + + " , NULL kostenplaats_key" + " FROM bgt_disc_params d" + " , bgt_project p" + " , bgt_kostenrubriek r" @@ -105,6 +108,7 @@ switch (req_info) + " , -1 soort_key" + " , -1 opdracht_key" + " , b.prs_bedrijf_key bedrijf_key" + + " , NULL kostenplaats_key" + " FROM bgt_disc_params d" + " , bgt_project p" + " , bgt_kostenrubriek r" @@ -130,6 +134,7 @@ switch (req_info) + " , -1 soort_key" + " , NULL opdracht_key" + " , NULL bedrijf_key" + + " , NULL kostenplaats_key" + " FROM bgt_disc_params d" + " , bgt_project p" + " , bgt_kostenrubriek r" @@ -147,6 +152,7 @@ switch (req_info) + " , -1 soort_key" + " , NULL opdracht_key" + " , NULL bedrijf_key" + + " , NULL kostenplaats_key" + " FROM bgt_disc_params d" + " , bgt_project p" + " , bgt_kostenrubriek r" @@ -166,6 +172,7 @@ switch (req_info) + " , s.prs_kostensoort_key soort_key" + " , NULL opdracht_key" + " , NULL bedrijf_key" + + " , -1 kostenplaats_key" + " FROM bgt_disc_params d" + " , bgt_project p" + " , bgt_kostenrubriek r" @@ -188,6 +195,10 @@ switch (req_info) + " , NULL soort_key" + " , NULL opdracht_key" + " , NULL bedrijf_key" + + ( (init_key == -1 && child_key) + ? " , (SELECT prs_kostenplaats_key FROM prs_kostensoort WHERE prs_kostensoort_key = "+ child_key +")" + : " , -1" + ) + " kostenplaats_key" + " FROM bgt_disc_params d" + " , bgt_project p" + " , prs_kostenplaatsgrp g" @@ -210,7 +221,8 @@ switch (req_info) "G": oRs("groep_key").Value, "S": oRs("soort_key").Value, "O": oRs("opdracht_key").Value, - "B": oRs("bedrijf_key").Value + "B": oRs("bedrijf_key").Value, + "K": oRs("kostenplaats_key").Value } } oRs.Close(); @@ -227,7 +239,9 @@ switch (req_info) + " , p.bgt_disc_params_code ||' - '||d.ins_discipline_omschrijving sel_oms" + " , d.ins_discipline_btw btw_inc" + " , NULL btw_val" + + " , NULL grp_key" + " , NULL srt_key" + + " , NULL kpn_key" + " FROM ins_tab_discipline d" + " , bgt_disc_params p" + " WHERE p.bgt_ins_discipline_key = d.ins_discipline_key" @@ -249,7 +263,9 @@ switch (req_info) + " WHERE d1.ins_discipline_key = p.ins_discipline_key" + ") btw_inc" + " , NULL btw_val" + + " , NULL grp_key" + " , NULL srt_key" + + " , NULL kpn_key" + " FROM bgt_project p" + " WHERE p.bgt_project_verwijder IS NULL" + " AND p.ins_discipline_key = " + parent_key; @@ -266,7 +282,9 @@ switch (req_info) + " AND p1.bgt_project_key = r.bgt_project_key" + ") btw_inc" + " , NULL btw_val" + + " , NULL grp_key" + " , NULL srt_key" + + " , NULL kpn_key" + " FROM bgt_kostenrubriek r" + " WHERE r.bgt_project_key = " + parent_key; break; @@ -284,7 +302,9 @@ switch (req_info) + " AND r1.bgt_kostenrubriek_key = g.bgt_kostenrubriek_key" + ") btw_inc" + " , NULL btw_val" + + " , NULL grp_key" + " , NULL srt_key" + + " , NULL kpn_key" + " FROM prs_kostensoortgrp g" + " WHERE g.bgt_kostenrubriek_key = " + parent_key; break; @@ -298,7 +318,9 @@ switch (req_info) + " FROM fin_btwtabelwaarde f1" + " WHERE f1.fin_btwtabelwaarde_key = s.fin_btwtabelwaarde_key" + ") btw_val" + + " , NULL grp_key" + " , NULL srt_key" + + " , NVL(prs_kostenplaats_key, -1) kpn_key" + " FROM prs_kostensoort s" + " WHERE s.prs_kostensoortgrp_key = " + parent_key + ( sel_mode == "budget_edit" @@ -313,7 +335,9 @@ switch (req_info) + " , kp.prs_kostenplaats_nr ||' - '|| kp.prs_kostenplaats_omschrijving sel_oms" + " , NULL btw_inc" + " , NULL btw_val" + + " , NULL grp_key" + " , NULL srt_key" + + " , NULL kpn_key" + " FROM prs_kostenplaats kp" + " , prs_kostenplaatsgrp kg" + " WHERE kp.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key" @@ -327,7 +351,9 @@ switch (req_info) + " , b.prs_leverancier_nr ||' - '|| b.prs_bedrijf_naam sel_oms" + " , NULL btw_inc" + " , NULL btw_val" + + " , NULL grp_key" + " , NULL srt_key" + + " , NULL kpn_key" + " FROM bgt_project p" + " , bgt_kostenrubriek r" + " , prs_kostensoortgrp g" @@ -339,8 +365,8 @@ switch (req_info) + " AND g.prs_kostensoortgrp_key = s.prs_kostensoortgrp_key" + " AND s.prs_kostensoort_key = o.prs_kostensoort_key" + " AND o.mld_uitvoerende_keys = b.prs_bedrijf_key" - + " AND p.ins_discipline_key = " + parent_key - + (child_key > 0 ? " AND p.bgt_project_key = " + child_key : ""); + + (parent_key > 0 ? " AND p.ins_discipline_key = " + parent_key : "") + + (child_key > 0 ? " AND p.bgt_project_key = " + child_key : ""); break; } case "O": @@ -353,7 +379,9 @@ switch (req_info) + " FROM fin_btwtabelwaarde f1" + " WHERE f1.fin_btwtabelwaarde_key = s.fin_btwtabelwaarde_key" + ") btw_val" + + " , s.prs_kostensoortgrp_key grp_key" + " , o.prs_kostensoort_key srt_key" + + " , NULL kpn_key" + " FROM bgt_project p" + " , bgt_kostenrubriek r" + " , prs_kostensoortgrp g" @@ -378,7 +406,9 @@ switch (req_info) sel: oRs("sel_key").Value == init_key, atr: { btw_inc: oRs("btw_inc").Value, btw_val: oRs("btw_val").Value, - srt_key: oRs("srt_key").Value + grp_key: oRs("grp_key").Value, + srt_key: oRs("srt_key").Value, + kpn_key: oRs("kpn_key").Value } }); oRs.MoveNext(); @@ -412,26 +442,37 @@ switch (req_info) + " , kp.prs_kostenplaatsgrp_key par_key" + " , NULL btw_inc" + " , NULL btw_val" - + " , p.prs_kostenplaats_key" + + " , NULL kpn_key" + + " , ks.prs_kostensoort_key" + " FROM prs_kostenplaats kp" + " , prs_kostenplaatsgrp kg" - + " , bgt_project p" + + " , prs_kostensoort ks" + " WHERE kp.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key" - + " AND kg.bgt_project_key = p.bgt_project_key" + + " AND kp.prs_kostenplaats_key = ks.prs_kostenplaats_key(+)" + " AND kp.prs_kostenplaats_verwijder IS NULL" + " AND kg.bgt_project_key = " + parent_key; } } sql += " ORDER BY 2"; var new_lov = []; + var last_lov = ""; var oRs = Oracle.Execute(sql); while(!oRs.eof) { - new_lov.push({key: oRs("sel_key").Value, - oms: oRs("sel_oms").Value, - sel: oRs("sel_key").Value == (init_key == -1 ? oRs("prs_kostenplaats_key").Value : init_key), - atr: { par_key: oRs("par_key").Value} - }); + if (last_lov != oRs("sel_oms").Value) + { + new_lov.push({key: oRs("sel_key").Value, + oms: oRs("sel_oms").Value, + sel: oRs("sel_key").Value == (init_key == -1 ? oRs("prs_kostensoort_key").Value : init_key), + atr: { par_key: oRs("par_key").Value} + }); + last_lov = oRs("sel_oms").Value; + } + else + { + var opt = new_lov[new_lov.length-1]; + opt.sel = opt.sel || (oRs("sel_key").Value == (init_key == -1 ? oRs("prs_kostensoort_key").Value : init_key)); + } oRs.MoveNext(); } oRs.Close(); diff --git a/APPL/FAC/fac_session.asp b/APPL/FAC/fac_session.asp index 24f0104797..aeb89ce787 100644 --- a/APPL/FAC/fac_session.asp +++ b/APPL/FAC/fac_session.asp @@ -10,9 +10,9 @@ model.search = { autosearch : true }; // Zijn nooit echt veel records var scf_params = { search: { filters: [ "user" ] }, - list: { columns: [ "user", "data", "creation", "expire", "ip", "useragent"], + list: { columns: [ "user", "data", "created", "expire", "ip", "useragent"], orderby: [ - "creation" + "created" ] }} scaffolding(model, scf_params); %> diff --git a/APPL/FAC/prodsearch.asp b/APPL/FAC/prodsearch.asp index 9eb1e1ffc8..8fa8f5fc8c 100644 --- a/APPL/FAC/prodsearch.asp +++ b/APPL/FAC/prodsearch.asp @@ -54,7 +54,7 @@ var filter = { s: { val: getQParam("s",""), lcl: L("lcl_search //if (filter.s.val.indexOf(':') == 1) // of: format is A99999 (Jos?) if (filter.s.val.match(/^[mcMC][a-z,A-Z]*[0-9]+/)) // Meldingen en contracten kunnen extra letters hebben Server.Transfer("itemsearch.asp"); // die doet dat maar -if (filter.s.val.match(/^[braBRA]*[0-9]+/)) // BES, RES en Afspraak alleen numeriek +if (filter.s.val.match(/^[braBRA][0-9]+/)) // BES, RES en Afspraak alleen numeriek Server.Transfer("itemsearch.asp"); if (filter.s.val.match(/^#+/)) // objecten Server.Transfer("itemsearch.asp"); diff --git a/APPL/INS/ins.inc b/APPL/INS/ins.inc index 5350e7b477..30cc76b400 100644 --- a/APPL/INS/ins.inc +++ b/APPL/INS/ins.inc @@ -541,7 +541,8 @@ ins = {checkAutLevel: iresult.writeslebof = writeslebof; iresult.writeslefof = writeslefof; iresult.canDelete = writeslebof; // Verwijderen - iresult.canChange = writeslebof || objectbeheerder; // Wijzigen + iresult.canChange = writeslebof; // Wijzigen + iresult.canChangeOwn = objectbeheerder; iresult.canChangeAlg = iresult.canChange; // Wijzigen algemene gegevens iresult.canCopy = writeslebof; // Kopiëren iresult.isSleCil = true; @@ -557,7 +558,7 @@ ins = {checkAutLevel: // Daarom niet al te hard er uit klappen hier. iresult.canReadAny = true; iresult.canChange = iresult.canChange; - iresult.canChangeOwn = iresult.canChange || ((iresult.readuse || iresult.readman) && objectbeheerder); + iresult.canChangeOwn = (iresult.readuse || iresult.readman) && objectbeheerder; if (params && params.srtcont_key > 0) { @@ -2274,7 +2275,11 @@ ins = {checkAutLevel: var mjbMoved = params.mjbMoved; var mjbFreezed = params.mjbFreezed; var mjbXcped = params.mjbXcped; + var sel_controlemode123 = params.sel_controlemode123; var jaren = params.jaren; + var freeze = params.freeze; + var finish = params.finish; + var getsumtypes = params.getsumtypes; // De datum (jaar) van de *eerstvolgende* onderhoudsbeurt volgt uit: // Datum laatste (/laatste geplande) inspectie @@ -2772,7 +2777,7 @@ ins = {checkAutLevel: + " , cy.ins_deelsrtcontrole_status" + " , cy.hascontroles" + " FROM (" + sql_yearcost + ") cy" - + " , ins_v_aanwezigdeel dl" + + " , ins_deel dl" // I.v.m. ORA-03113 fout: ins_v_aanwezigdeel vervangen door ins_deel en verder uitgeschreven (FSN#51212). + " , ins_srtdeel isd" + " , ins_srtgroep isg" + " , ins_discipline dd" @@ -2782,6 +2787,8 @@ ins = {checkAutLevel: + " , alg_verdieping v" + " , alg_ruimte r" + " WHERE cy.ins_deel_key = dl.ins_deel_key" + + " AND dl.ins_deel_verwijder IS NULL" + + " AND dl.ins_deel_parent_key IS NULL" + " AND dl.ins_srtdeel_key = isd.ins_srtdeel_key" + " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key" + " AND isg.ins_discipline_key = dd.ins_discipline_key" @@ -2791,7 +2798,7 @@ ins = {checkAutLevel: + " AND g.alg_locatie_key = l.alg_locatie_key" + " AND d.alg_district_key = l.alg_district_key"; - if (keys != null && keys.length > 0 && niveau != null && niveau > 0) + if (keys != null && keys.length > 0 && niveau != null && niveau > 0 && (freeze || finish)) { switch (niveau) { @@ -2983,6 +2990,192 @@ ins = {checkAutLevel: sql += "," + String(i) } + // Bulkactie accorderen (freeze) of voltooien/afronden (finish). + // Ik moet nog de juiste insert waarden ophalen voor alle objecten die de sql oplevert. + if (niveau >= 1 && niveau <= 6 && (freeze || finish)) + { // Accorderen (Freeze) of Voltooien/Afronden (Finish). + if (freeze) + { + var mjblist_sql_select = "SELECT xcp.ins_deel_key" + + " , xcp.ins_srtcontrole_key" + + " , CASE" + + " WHEN result.ins_deelsrtcontrole_status IS NOT NULL" + + " THEN (SELECT ins.nextcyclusdate (xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 1) FROM DUAL)" + + " ELSE NULL" + + " END nextdate" + + " , result.ins_deelsrtcontrole_status" + + " , result.\"" + mjb_freeze_year + "\" freeze_bedrag" + + " , CASE" + + " WHEN result.\"" + mjb_freeze_year + "\" = 0 AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" IS NOT NULL AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" > 0" + + " THEN " + safe.quoted_sql(L("lcl_mjb_performed_high")) + + " ELSE ''" + + " END opm_has_higherprio"; // Opmerking als het een hogere prio heeft (has_higherprio) + } + else // finish + { + if (getsumtypes) + { + var mjblist_sql_select = "SELECT SUM(CASE" + + " WHEN xcp.ctr_controle_type = 1" + + " THEN 1" + + " ELSE 0" + + " END) sumtype1" + + " , SUM(CASE" + + " WHEN xcp.ctr_controle_type = 2" + + " THEN 1" + + " ELSE 0" + + " END) sumtype2" + + " , SUM(CASE" + + " WHEN xcp.ctr_controle_type = 3" + + " THEN 1" + + " ELSE 0" + + " END) sumtype3"; + } + else + { + var mjblist_sql_select = "SELECT xcp.ins_deel_key" + + " , xcp.ins_srtcontrole_key" + + " , result.ctr_controle_type" + + " , CASE" + + " WHEN (SELECT MAX(idsc2.ins_deelsrtcontrole_key)" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE idsc2.ins_deel_key = xcp.ins_deel_key" + + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + + " AND idsc2.ins_scenario_key = xcp.ins_scenario_key" + + " AND idsc2.ins_deelsrtcontrole_status = 6) IS NOT NULL" // Er is al een inspectie geweest. + + " THEN (SELECT ins.nextcyclusdate (xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 1) FROM DUAL)" + + " ELSE SYSDATE" // Er is nog geen inspectie geweest. De org date wordt nu. + + " END nextdate" + + " , (SELECT MAX(idsc2.ins_deelsrtcontrole_key)" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE idsc2.ins_deel_key = xcp.ins_deel_key" + + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + + " AND idsc2.ins_scenario_key = xcp.ins_scenario_key) ins_deelsrtcontrole_key" + + " , (SELECT cm.ins_controlemode_oms" + + " FROM ins_controlemode cm" + + " WHERE cm.ins_controlemode_key IN (" + sel_controlemode123.join(",") + ")" + + " AND cm.ins_srtcontrole_type = result.ctr_controle_type) cm_oms" + + " , (SELECT cd.ins_discipline_omschrijving" + + " FROM ctr_discipline cd" + + " WHERE cd.ins_discipline_key = xcp.ctr_discipline_key) ctr_disc_oms" + + " , (SELECT idsc2.ins_deelsrtcontrole_opmerking" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE idsc2.ins_deel_key = xcp.ins_deel_key" + + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + + " AND idsc2.ins_scenario_key = xcp.ins_scenario_key)) ins_deelsrtcontrole_opmerking"; + } + } + + + var mjblist_sql = mjblist_sql_select + + " FROM ins_v_defined_inspect_xcp xcp" + + " , ins_deel dl" // I.v.m. ORA-03113 fout: ins_v_aanwezigdeel vervangen door ins_deel en verder uitgeschreven (FSN#51212). + + " , ins_srtdeel isd" + + " , ins_srtgroep isg" + + " , ins_discipline dd" + + " , alg_district d" + + " , alg_locatie l" + + " , alg_gebouw g" + + " , alg_verdieping v" + + " , alg_ruimte r" + + " , (" + sql + ") result" + + " WHERE xcp.ins_deel_key = dl.ins_deel_key" + + " AND dl.ins_deel_verwijder IS NULL" + + " AND dl.ins_deel_parent_key IS NULL" + + " AND dl.ins_srtdeel_key = isd.ins_srtdeel_key" + + " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key" + + " AND isg.ins_discipline_key = dd.ins_discipline_key" + + " AND dl.ins_alg_ruimte_key = r.alg_ruimte_key" + + " AND r.alg_verdieping_key = v.alg_verdieping_key" + + " AND v.alg_gebouw_key = g.alg_gebouw_key" + + " AND g.alg_locatie_key = l.alg_locatie_key" + + " AND d.alg_district_key = l.alg_district_key" + + " AND xcp.ins_deel_key = result.ins_deel_key" + + " AND xcp.ins_srtcontrole_key = result.ins_srtcontrole_key" + // Inspectie mag niet op dezelfde dag plaatsvinden + // Als er nog geen inspectie is geweest neem dan gisteren (sysdate - 1). + + " AND COALESCE((SELECT TRUNC(idsc2.ins_deelsrtcontrole_datum)" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE idsc2.ins_deel_key = xcp.ins_deel_key" + + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + + " AND idsc2.ins_scenario_key = xcp.ins_scenario_key" + + " AND idsc2.ins_deelsrtcontrole_status = 6)), (TRUNC(SYSDATE-1))) != TRUNC(SYSDATE)" + // Autorisatie controleren i.p.v. canInspStartReq (Accorderen (Freeze)) en canInspFinishReq (Voltooien/Afronden (Finish)): + // 0) invoerAfterNext is voor mjob (interval modus) altijd waar. + // 1) Alleen voor Accorderen (Freeze): niet vervallen. + // 2) Freeze: status <= 0 of status == 6 + // Finish: status == 2 + // 3) actief object + // 4) hasCTRwrite + // 5) Freeze: bij instelling "Actieve acties" het vinkje "Starten" aangevinkt. + // Finish: bij instelling "Actieve acties" het vinkje "Afronden" aangevinkt. + // 6) geen scenario (scenario_key is 1) + // 7) ismjob + // 8) isFreezeYear + // 9) readuse rechten. + + (freeze + ? " AND (xcp.ins_srtcontroledl_xcp_eind IS NULL OR xcp.ins_srtcontroledl_xcp_eind >= SYSDATE)" // 1) Freeze: Niet vervallen. + : "") // Finish: Maakt niet uit. + + (freeze + ? " AND (EXISTS" // 2) Freeze: Geen controles of laatste controle status 0 of 6. + + " (SELECT idsc1.ins_deelsrtcontrole_status" + + " FROM ins_deelsrtcontrole idsc1" + + " WHERE idsc1.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE idsc2.ins_deel_key = xcp.ins_deel_key" + + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + + " AND idsc2.ins_scenario_key = xcp.ins_scenario_key)" + + " AND idsc1.ins_deelsrtcontrole_status IN (0, 6))" + + " OR NOT EXISTS" + + " (SELECT idsc2.ins_deelsrtcontrole_key" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE idsc2.ins_deel_key = xcp.ins_deel_key" + + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + + " AND idsc2.ins_scenario_key = xcp.ins_scenario_key))" + : " AND EXISTS" // Finish: Laatste controle status 2. + + " (SELECT idsc1.ins_deelsrtcontrole_status" + + " FROM ins_deelsrtcontrole idsc1" + + " WHERE idsc1.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE idsc2.ins_deel_key = xcp.ins_deel_key" + + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + + " AND idsc2.ins_scenario_key = xcp.ins_scenario_key)" + + " AND idsc1.ins_deelsrtcontrole_status IN (2))") + + " AND ins_deel_actief = 1" // 3) Actief object. + + " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // 4) hasCTRwrite. + + " FROM fac_v_webgebruiker w" + + " , fac_functie f" + + " WHERE w.fac_functie_key = f.fac_functie_key" + + " AND f.fac_functie_code = 'WEB_CTRUSE'" + + " AND w.fac_gebruiker_prs_level_write < 9" + + " AND w.fac_gebruiker_alg_level_write < 9" + + " AND w.prs_perslid_key = " + user_key + ")" + + (freeze + ? " AND BITAND(xcp.ins_srtcontrole_options, 2) = 2" // 5) Freeze: Het vinkje "Starten" aangevinkt. + : " AND BITAND(xcp.ins_srtcontrole_options, 8) = 8") // Finish: Het vinkje "Afronden" aangevinkt. + + " AND xcp.ins_scenario_key = 1" // 6) Geen scenario. + + " AND xcp.ctr_ismjob = 1" // 7) ismjob. + + " AND result.\"" + mjb_freeze_year + "\" IS NOT NULL"; // 8) isFreezeYear, bedrag in mjb_freeze_year is niet NULL. + + sql = discxalg3d(mjblist_sql, // 9) 3D-readuse rechten. + "dd.ins_discipline_key", + "d.alg_regio_key", + "d.alg_district_key", + "l.alg_locatie_key", + "g.alg_gebouw_key", + "v.alg_verdieping_key", + "r.alg_ruimte_key", + "WEB_INSUSE", //autfunction, + "", + false); // forwrite => read + + sql += " ORDER BY xcp.ins_deel_key" + + " , xcp.ins_srtcontrole_key"; + } return sql; }, diff --git a/APPL/INS/ins_edit_deel.asp b/APPL/INS/ins_edit_deel.asp index 3e1841af24..a5ea825785 100644 --- a/APPL/INS/ins_edit_deel.asp +++ b/APPL/INS/ins_edit_deel.asp @@ -642,7 +642,7 @@ var ins_deel_aantal = 1; extraParamField: "autonum", extracode: "A", onChange: "onChangeDiscipline", // disgroepChanged - readonly: (disc_key > 0 || ins_key > 0 || copy) || (!this_ins.canChangeAlg && !this_ins.canChangeOwn), + readonly: (disc_key > 0 || ins_key > 0 || copy) || (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)), required: true }); @@ -653,7 +653,7 @@ var ins_deel_aantal = 1; autfunction: autfunction, onChange: "onChangeSrtgroep", urlAdd: [{urlParam: "disc_key", field: "disc"}], - readonly: (ins_key > 0 || copy || module == "SLE") || (!this_ins.canChangeAlg && !this_ins.canChangeOwn), + readonly: (ins_key > 0 || copy || module == "SLE") || (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)), required: true }); @@ -669,7 +669,7 @@ var ins_deel_aantal = 1; extraParamField: "binding", extracode: "B", module: module, - readonly: (ins_key > 0 || copy || module == "SLE") || (!this_ins.canChangeAlg && !this_ins.canChangeOwn), + readonly: (ins_key > 0 || copy || module == "SLE") || (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)), required: true }); @@ -697,15 +697,15 @@ var ins_deel_aantal = 1; (ins_key > 0 || copy) && isNext < 0? desc : new_desc, { maxlength: 60, required: true, - readonly: (!this_ins.canChangeAlg && !this_ins.canChangeOwn) || !(autonum & 2) + readonly: (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)) || !(autonum & 2) }); if (S("ins_explode_objects") == 0) - RWFIELDTR("count", "fldshort", L("lcl_amount") + (srtdeel_eenheid ? " (" + srtdeel_eenheid+")" : ""), ins_deel_aantal, {datatype: "float", readonly: (!this_ins.canChangeAlg && !this_ins.canChangeOwn), required: true}); + RWFIELDTR("count", "fldshort", L("lcl_amount") + (srtdeel_eenheid ? " (" + srtdeel_eenheid+")" : ""), ins_deel_aantal, {datatype: "float", readonly: (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)), required: true}); else if(ins_key < 0 || isNext > 0 ) { - RWFIELDTR("count", "fldshort", L("lcl_count"), 1, {datatype: "number", readonly: (!this_ins.canChangeAlg && !this_ins.canChangeOwn)}); + RWFIELDTR("count", "fldshort", L("lcl_count"), 1, {datatype: "number", readonly: (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn))}); } - RWFIELDTR("opmerk", "fld", L("lcl_ins_opmerking"), opmerk, {maxlength: 320, readonly: (!this_ins.canChangeAlg && !this_ins.canChangeOwn)}); %> + RWFIELDTR("opmerk", "fld", L("lcl_ins_opmerking"), opmerk, {maxlength: 320, readonly: (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn))}); %> @@ -745,17 +745,17 @@ var ins_deel_aantal = 1; { datum: aanmaak, label: L("lcl_last_action"), required: true, - readonly: (!this_ins.canChangeAlg && !this_ins.canChangeOwn), + readonly: (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)), volgnr: 1 }); FCLTcalendar("vervaldatum", { datum: vervaldatum, initEmpty: vervaldatum==null, label: L("lcl_ins_vervaldatum"), - readonly: (!this_ins.canChangeAlg && !this_ins.canChangeOwn), + readonly: (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)), volgnr: 2 }); - RWCHECKBOXTR("ins_actief", "fldcheck", L("lcl_ins_active"), actief, {readonly: (!this_ins.canChangeAlg && !this_ins.canChangeOwn)}); + RWCHECKBOXTR("ins_actief", "fldcheck", L("lcl_ins_active"), actief, {readonly: (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn))}); FCLTpersoonselector("ins_manager", // beheerder "sgins_manager", { perslidKey: perslid_key_beh, @@ -794,7 +794,7 @@ var ins_deel_aantal = 1; label: L("lcl_prs_organisatie"), autlevel: authparams.PRSwritelevel, onChange: "onChangeDept", - readonly: (parent_key > 0 || isLendOut) || (!this_ins.canChangeAlg && !this_ins.canChangeOwn) + readonly: (parent_key > 0 || isLendOut) || (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)) }); } @@ -806,7 +806,7 @@ var ins_deel_aantal = 1; label: L("lcl_name"), autlevel: authparams.PRSwritelevel, onChange: "onChangePerson", - readonly: (parent_key > 0 || isLendOut) || (!this_ins.canChangeAlg && !this_ins.canChangeOwn) + readonly: (parent_key > 0 || isLendOut) || (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)) }); } @@ -864,7 +864,7 @@ var ins_deel_aantal = 1; cadSelect: true, cadShowdiscfn: "cadShowdiscfn", escalateOnChUp: true, // ook onLocChange als je gebouw wijzigt - readonly: (parent_key > 0 || isLendOut) || (!this_ins.canChangeAlg && !this_ins.canChangeOwn) + readonly: (parent_key > 0 || isLendOut) || (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)) }); } BLOCK_END(); @@ -878,13 +878,13 @@ var ins_deel_aantal = 1; sql: sql, params: { id: "dayshours", initKey: uitvoertijd_eenheid, - readonly: (!this_ins.canChangeAlg && !this_ins.canChangeOwn) && uitvoertijd < 0, + readonly: (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn)) && uitvoertijd < 0, disable: !uitvoertijd } } RWFIELDTR("uitvoertijd", "fldins_uitvtijd", L("lcl_ins_uitvoertijd"), uitvoertijd? Math.round(uitvoertijd * 100000) / 100000 : "" , {maxlength: 8, datatype: "float", html: "onChange='onChangeUitvoertijd();'", selector: selectparams - , readonly: (!this_ins.canChangeAlg && !this_ins.canChangeOwn)}); + , readonly: (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn))}); BLOCK_END(); if (urole != "fo" || uitleen_flex_present) // FO ziet ze alleen als er uitleen flex zijn? diff --git a/APPL/INS/ins_edit_inspect.asp b/APPL/INS/ins_edit_inspect.asp index 4c4f5cace3..69bb1534bc 100644 --- a/APPL/INS/ins_edit_inspect.asp +++ b/APPL/INS/ins_edit_inspect.asp @@ -21,6 +21,7 @@ + <% @@ -37,6 +38,7 @@ var insPlan = getQParamInt("plan", 0) == 1; // Inplannen inspectie. var insClose = getQParamInt("close", 0) == 1; // Afmelden of afronden inspectie. var insEdit = !insPlan && !insClose; // Wijzigen inspectie. var fromfinish = getQParamInt("fromfinish", 0) == 1; // Alleen Voltooien bij bulkactie (multi). +var groupby = getQParamInt("groupby", 7); if (insEdit && multi) abort_with_warning(L("lcl_ins_allow_multi_edit")); @@ -54,83 +56,165 @@ var ctrdisc_key = -1; var canClose = true; var canFinish = true; var nrCanFinishAfterClose = 0; -for (var i = 0; i < ins_key_arr.length; i++) + +var inflatiepct = S("mjb_inflation"); +var inflatiefactor = 1 + (inflatiepct / 100); +var mjb_start_year = S("mjb_start_year"); +var mjb_freeze_year = S("mjb_freeze_year"); + +var transitParam = ""; +if (groupby < 7) + // Bulk closen per categorie. + transitParam = buildTransitParam(["close", "ins_keys", "srtcont_keys", "deelsrtcont_keys", "fromfinish", + "dist_key", "loc_key", "bld_key", "disc_key", "srtgroep_kye", "srtdeel_key", + "groep", "categori_key", "srtcontrole", "frequentie", "incbtw", "groupby", + "deel", "mjbMoved", "mjbFreezed", "mjbXcped"]); + +if (groupby < 7) { - var this_ins = ins.func_enabled_deel(ins_key_arr[i], - {srtcont_key: srtcont_key_arr[i], - deelsrtcont_key: (deelsrtcont_arr[i] > 0? deelsrtcont_arr[i] : -1) - }); - canMsuEdit = insEdit && this_ins.canMsuEdit; + var dist_key = getQParamInt("dist_key", -1); // District + var loc_key = getQParamInt("loc_key", -1); // Locatie + var bld_key = getQParamInt("bld_key", -1); // Gebouw + var disc_key = getQParamInt("disc_key", -1); + var srtgroep_key = getQParamInt("srtgroep_key", -1); + var srtdeel_key = getQParamInt("srtdeel_key", -1); + var groep = getQParam("groep", ""); // Groep + var categorie_key = getQParamInt("categorie_key", -1); // Categorie + var srtcontrole = getQParamIntArray("srtcontrole", []); // Taak + var frequentie = getQParamIntArray("frequentie", []); // Array met frequenties. + var incbtw = getQParamInt("incbtw", 0) == 1; // Lijst inclusief BTW weergeven. + var deel = getQParam("deel", ""); // Identieficatie + var mjbMoved = getQParamInt("mjbMoved", 0) == 1; // Verschoven. + var mjbFreezed = getQParamInt("mjbFreezed", 0) == 1; // In behandeling. + var mjbXcped = getQParamInt("mjbXcped", 0) == 1; // Aangepast. - var sql = "SELECT idsc.ins_deelsrtcontrole_key" - + " , idsc.ins_deelsrtcontrole_status" - + " , xcp.ins_srtcontroledl_xcp_eind vervaldatum" - + " , isc.ctr_discipline_key" - + " , isc.ins_srtcontrole_options options" - + " FROM ins_srtcontrole isc" - + " , ins_deelsrtcontrole idsc" - + " , ins_srtcontroledl_xcp xcp" - + " WHERE isc.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden. - + " AND isc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)" - + " AND xcp.ins_deel_key(+) = " + ins_key_arr[i] - + " AND idsc.ins_deel_key(+) = " + ins_key_arr[i] - + " AND isc.ins_srtcontrole_key = " + srtcont_key_arr[i] - + (deelsrtcont_arr[i] > 0 - ? " AND idsc.ins_deelsrtcontrole_key = " + deelsrtcont_arr[i] - : " AND idsc.ins_deelsrtcontrole_status(+) != 6") - + " AND idsc.ins_scenario_key(+) = 1" - + " AND xcp.ins_scenario_key(+) = 1" - + " ORDER BY ins_deelsrtcontrole_datum DESC"; - var oRs = Oracle.Execute(sql); - ctrdisc_key = oRs("ctr_discipline_key").Value; + // Start building the query to fetch all objects satisfying + var mjbparams = { scenario: 1, + fulldetails: true, + toyear: mjb_freeze_year, + jaren: [mjb_freeze_year], + //actsit: actsit, + keys: ins_key_arr, + niveau: groupby, // Het niveau (betekenis) van de keys (district(1), gebouw(2), discipline(3), groep(4), objectsoort(5), object(6)) + dist_key: dist_key, + loc_key: loc_key, + bld_key: bld_key, + disc_key: disc_key, + srtgroep_key: srtgroep_key, + srtdeel_key: srtdeel_key, + groep: groep, + categorie_key: categorie_key, + srtcontrole: srtcontrole, + frequentie: frequentie, + incbtw: incbtw, + deel: deel, + mjbMoved: mjbMoved, + mjbFreezed: mjbFreezed, + mjbXcped: mjbXcped, + groupby: 7, // Ik wil alle objecten opvragen. + finish: true, + getsumtypes: true + }; - // Waarden moeten aanwezig zijn. Mocht dat niet zo zijn dan is er iets fout. - // Als de laatste inspectie is afgerond is, wordt er null opgeleverd voor de ins_deelsrtcontrole_key en ins_deelsrtcontrole_status. - // Er moet dan een nieuwe inspectie worden ingeland/gestart/afgemeld of afgerond. - var ins_deelsrtcontrole_key = oRs("ins_deelsrtcontrole_key").Value != null? oRs("ins_deelsrtcontrole_key").Value : -1; - var ins_deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1; - var vervaldatum = oRs("vervaldatum").Value != null? new Date(oRs("vervaldatum").Value) : null; - var vervallen = vervaldatum != null && vervaldatum < new Date(); - var isc_options = oRs("options").Value; - oRs.Close(); + var mjblist_sql = ins.getmjblist_sql(mjbparams); + // De mjblist_sql bevat nu alle objecten (ins_deel_key) van de aangevinkte regels uit het mjb overzicht en levert voor elk object de waarden voor de insert op. - // Het is de eerste inspectie of de laatste inspectie moet verwerkt(6) zijn, anders kan de inspectie niet ingepland worden. - if (insPlan && !this_ins.canInspPlan) // Inplannen. Inplan scherm n.v.t. voor MJOB. - { // Het is niet de eerste inspectie of de laatste inspectie is niet verwerkt. Overslaan. - continue; - } + var oRs = Oracle.Execute(mjblist_sql); + user.anything_todo_or_abort(!oRs.eof); // We klagen niet over enkele wel en enkele niet - // Kan de inspectie gereed gemeld/afgemeld of afgerond worden? - if (insClose) - { // Bij bulkacties (multi) alleen kijken naar de bulkactie die uitgevoerd moet worden. - if (insClose && ((multi && ((!fromfinish && !this_ins.canInspClose) || (fromfinish && !(this_ins.canInspFinish || this_ins.canInspFinishMjb)))) || - (!multi && !this_ins.canInspClose && !(this_ins.canInspFinish || this_ins.canInspFinishMjb)))) - // De inspectie kan niet afgemeld/afgerond worden. Overslaan. + var sumtype1 = oRs("sumtype1").Value || 0; + var sumtype2 = oRs("sumtype2").Value || 0; + var sumtype3 = oRs("sumtype3").Value || 0; + tobehandled = sumtype1 + sumtype2 + sumtype3; + + var sumtyp = []; + sumtyp[0] = tobehandled; + sumtyp[1] = oRs("sumtype1").Value; + sumtyp[2] = oRs("sumtype2").Value; + sumtyp[3] = oRs("sumtype3").Value; + + ingesloten = ins_key_arr; +} +else +{ + for (var i = 0; i < ins_key_arr.length; i++) + { + var this_ins = ins.func_enabled_deel(ins_key_arr[i], + {srtcont_key: srtcont_key_arr[i], + deelsrtcont_key: (deelsrtcont_arr[i] > 0? deelsrtcont_arr[i] : -1) + }); + canMsuEdit = insEdit && this_ins.canMsuEdit; + + var sql = "SELECT idsc.ins_deelsrtcontrole_key" + + " , idsc.ins_deelsrtcontrole_status" + + " , xcp.ins_srtcontroledl_xcp_eind vervaldatum" + + " , isc.ctr_discipline_key" + + " , isc.ins_srtcontrole_options options" + + " FROM ins_srtcontrole isc" + + " , ins_deelsrtcontrole idsc" + + " , ins_srtcontroledl_xcp xcp" + + " WHERE isc.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden. + + " AND isc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)" + + " AND xcp.ins_deel_key(+) = " + ins_key_arr[i] + + " AND idsc.ins_deel_key(+) = " + ins_key_arr[i] + + " AND isc.ins_srtcontrole_key = " + srtcont_key_arr[i] + + (deelsrtcont_arr[i] > 0 + ? " AND idsc.ins_deelsrtcontrole_key = " + deelsrtcont_arr[i] + : " AND idsc.ins_deelsrtcontrole_status(+) != 6") + + " AND idsc.ins_scenario_key(+) = 1" + + " AND xcp.ins_scenario_key(+) = 1" + + " ORDER BY ins_deelsrtcontrole_datum DESC"; + var oRs = Oracle.Execute(sql); + ctrdisc_key = oRs("ctr_discipline_key").Value; + + // Waarden moeten aanwezig zijn. Mocht dat niet zo zijn dan is er iets fout. + // Als de laatste inspectie is afgerond is, wordt er null opgeleverd voor de ins_deelsrtcontrole_key en ins_deelsrtcontrole_status. + // Er moet dan een nieuwe inspectie worden ingeland/gestart/afgemeld of afgerond. + var ins_deelsrtcontrole_key = oRs("ins_deelsrtcontrole_key").Value != null? oRs("ins_deelsrtcontrole_key").Value : -1; + var ins_deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1; + var vervaldatum = oRs("vervaldatum").Value != null? new Date(oRs("vervaldatum").Value) : null; + var vervallen = vervaldatum != null && vervaldatum < new Date(); + var isc_options = oRs("options").Value; + oRs.Close(); + + // Het is de eerste inspectie of de laatste inspectie moet verwerkt(6) zijn, anders kan de inspectie niet ingepland worden. + if (insPlan && !this_ins.canInspPlan) // Inplannen. Inplan scherm n.v.t. voor MJOB. + { // Het is niet de eerste inspectie of de laatste inspectie is niet verwerkt. Overslaan. continue; - } + } - // Het mag niet de eerste inspectie zijn en de laatste inspectie mag niet verwerkt zijn. - if (insEdit && !this_ins.canInspEdit) - { // Eerste inspectoe of verwerkte inspectie kan niet gewijzigd worden. Overslaan. - continue; - } + // Kan de inspectie gereed gemeld/afgemeld of afgerond worden? + if (insClose) + { // Bij bulkacties (multi) alleen kijken naar de bulkactie die uitgevoerd moet worden. + if (insClose && ((multi && ((!fromfinish && !this_ins.canInspClose) || (fromfinish && !(this_ins.canInspFinish || this_ins.canInspFinishMjb)))) || + (!multi && !this_ins.canInspClose && !(this_ins.canInspFinish || this_ins.canInspFinishMjb)))) + // De inspectie kan niet afgemeld/afgerond worden. Overslaan. + continue; + } - // Ik mag inplannen, gereed melden of wijzigen. - // De vervallen LOPENDE inspecties zitten hier ook nog tussen. - // De rest van de vervallen inspecties zijn er door canInspPlan, canInspClose en canInspEdit uitgefilterd. - // Vervallen LOPENDE inspecties kunnen nu behandeld worden als gewone inspecties. - // Alle Arrays zijn even groot. - ingesloten.push(ins_key_arr[i]); - ingeslotensc.push(srtcont_key_arr[i]); - ingeslotendsc.push(ins_deelsrtcontrole_key); - // Als 1 van de srtcontroles niet gereed te melden is, dan kan er niet gereed gemeld worden en moet de button niet getoond worden. - canClose = canClose && this_ins.canInspClose; - // Als 1 van de srtcontroles niet af te ronden is, dan kan er niet afgerond worden en moet de button niet getoond worden. - canFinish = canFinish && (this_ins.canInspFinish || this_ins.canInspFinishMjb); - // Kan 1 van de srtcontroles na het gereed melden worden afgerond? Dan kan ook de afrond button getoond worden. N.v.t. voor mjob. - if (this_ins.canInspClose && this_ins.canInspFinish) - nrCanFinishAfterClose++; - tobehandled++; + // Het mag niet de eerste inspectie zijn en de laatste inspectie mag niet verwerkt zijn. + if (insEdit && !this_ins.canInspEdit) + { // Eerste inspectoe of verwerkte inspectie kan niet gewijzigd worden. Overslaan. + continue; + } + + // Ik mag inplannen, gereed melden of wijzigen. + // De vervallen LOPENDE inspecties zitten hier ook nog tussen. + // De rest van de vervallen inspecties zijn er door canInspPlan, canInspClose en canInspEdit uitgefilterd. + // Vervallen LOPENDE inspecties kunnen nu behandeld worden als gewone inspecties. + // Alle Arrays zijn even groot. + ingesloten.push(ins_key_arr[i]); + ingeslotensc.push(srtcont_key_arr[i]); + ingeslotendsc.push(ins_deelsrtcontrole_key); + // Als 1 van de srtcontroles niet gereed te melden is, dan kan er niet gereed gemeld worden en moet de button niet getoond worden. + canClose = canClose && this_ins.canInspClose; + // Als 1 van de srtcontroles niet af te ronden is, dan kan er niet afgerond worden en moet de button niet getoond worden. + canFinish = canFinish && (this_ins.canInspFinish || this_ins.canInspFinishMjb); + // Kan 1 van de srtcontroles na het gereed melden worden afgerond? Dan kan ook de afrond button getoond worden. N.v.t. voor mjob. + if (this_ins.canInspClose && this_ins.canInspFinish) + nrCanFinishAfterClose++; + tobehandled++; + } } if (insClose && !canClose && !canFinish) // Als de buttons niet zichtbaar zijn heb ik niets te doen. @@ -139,7 +223,7 @@ lcl.set_dialect(ctrdisc_key, "INS_TAB_DISCIPLINE_KEY"); user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel en enkele niet var desc = ""; -if (ins_key_arr.length == 1) +if (groupby == 7 && ins_key_arr.length == 1) { sql = "SELECT d.ins_deel_omschrijving" // identificatie + " , s.ins_srtdeel_code" @@ -156,10 +240,7 @@ if (ins_key_arr.length == 1) + " AND g.ins_discipline_key = dis.ins_discipline_key"; oRs = Oracle.Execute(sql); var desc = oRs("ins_deel_omschrijving").Value; - var srtcode = oRs("ins_srtdeel_code").Value; var sort = oRs("ins_srtdeel_omschrijving").Value; - var group = oRs("ins_srtgroep_omschrijving").Value; - var disc = oRs("ins_discipline_omschrijving").Value; oRs.Close(); } %> @@ -176,62 +257,65 @@ if (ins_key_arr.length == 1) var startdatum; var eersteinspectie; var info = ""; - sql = "SELECT *" - + " FROM (SELECT DISTINCT xcp.ins_srtcontrole_eenheid eenheid" - + " , xcp.ins_srtcontrole_info info" - + " , xcp.ins_srtcontrole_mode scmode" - + " , xcp.ctr_controle_type sctype" - + " , xcp.ins_deel_aanmaak" - + " , xcp.ins_srtcontroledl_xcp_startdat startdatum" - + " , xcp.ctr_ismjob ismjob" - + " , (SELECT COUNT (idsc.ins_deelsrtcontrole_key)" - + " FROM ins_deelsrtcontrole idsc1" - + " WHERE idsc1.ins_deel_key = xcp.ins_deel_key" - + " AND idsc1.ins_srtcontrole_key = xcp.ins_srtcontrole_key" - + " AND idsc1.ins_scenario_key = 1) aantal" - + " FROM ins_v_defined_inspect_xcp xcp" - + " , ins_deelsrtcontrole idsc" - + " WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden. - + " AND idsc.ins_scenario_key(+) = 1" - + " AND xcp.ins_scenario_key = 1" - + " AND xcp.ins_deel_key IN (" + ingesloten.join(",") + ")" - + " AND idsc.ins_deel_key(+) IN (" + ingesloten.join(",") + ")" - + " AND xcp.ins_srtcontrole_periode > 0" - + " AND xcp.ins_srtcontrole_key IN (" + ingeslotensc.join(",") + ")" - + " )"; - var oRs = Oracle.Execute(sql); - eenheid = oRs("eenheid").Value; - info = oRs("info").Value; - scmode = oRs("scmode").Value; - sctype = oRs("sctype").Value; - aanmaakdatum = new Date(oRs("ins_deel_aanmaak").Value); - startdatum = oRs("startdatum").Value != null? new Date(oRs("startdatum").Value) : null; - mjob = oRs("ismjob").Value == 1; - eersteinspectie = oRs("aantal").Value == 0; - oRs.MoveNext(); - while (!oRs.eof) + if (groupby == 7) { - if (eenheid != oRs("eenheid").Value) - eenheid = -1; - if (scmode != oRs("scmode").Value) - scmode = -1; - if (sctype != oRs("sctype").Value) - { - info = ""; - sctype = -1; // Er zijn inspecties met verschillende soort ocntroles. Dan maar -1. - } - if (aanmaakdatum.getTime() < new Date(oRs("ins_deel_aanmaak").Value).getTime()) - aanmaakdatum = new Date(oRs("ins_deel_aanmaak").Value); + sql = "SELECT *" + + " FROM (SELECT DISTINCT xcp.ins_srtcontrole_eenheid eenheid" + + " , xcp.ins_srtcontrole_info info" + + " , xcp.ins_srtcontrole_mode scmode" + + " , xcp.ctr_controle_type sctype" + + " , xcp.ins_deel_aanmaak" + + " , xcp.ins_srtcontroledl_xcp_startdat startdatum" + + " , xcp.ctr_ismjob ismjob" + + " , (SELECT COUNT (idsc.ins_deelsrtcontrole_key)" + + " FROM ins_deelsrtcontrole idsc1" + + " WHERE idsc1.ins_deel_key = xcp.ins_deel_key" + + " AND idsc1.ins_srtcontrole_key = xcp.ins_srtcontrole_key" + + " AND idsc1.ins_scenario_key = 1) aantal" + + " FROM ins_v_defined_inspect_xcp xcp" + + " , ins_deelsrtcontrole idsc" + + " WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden. + + " AND idsc.ins_scenario_key(+) = 1" + + " AND xcp.ins_scenario_key = 1" + + " AND xcp.ins_deel_key IN (" + ingesloten.join(",") + ")" + + " AND idsc.ins_deel_key(+) IN (" + ingesloten.join(",") + ")" + + " AND xcp.ins_srtcontrole_periode > 0" + + " AND xcp.ins_srtcontrole_key IN (" + ingeslotensc.join(",") + ")" + + " )"; + var oRs = Oracle.Execute(sql); + eenheid = oRs("eenheid").Value; + info = oRs("info").Value; + scmode = oRs("scmode").Value; + sctype = oRs("sctype").Value; + aanmaakdatum = new Date(oRs("ins_deel_aanmaak").Value); + startdatum = oRs("startdatum").Value != null? new Date(oRs("startdatum").Value) : null; + mjob = oRs("ismjob").Value == 1; + eersteinspectie = oRs("aantal").Value == 0; oRs.MoveNext(); + while (!oRs.eof) + { + if (eenheid != oRs("eenheid").Value) + eenheid = -1; + if (scmode != oRs("scmode").Value) + scmode = -1; + if (sctype != oRs("sctype").Value) + { + info = ""; + sctype = -1; // Er zijn inspecties met verschillende soort ocntroles. Dan maar -1. + } + if (aanmaakdatum.getTime() < new Date(oRs("ins_deel_aanmaak").Value).getTime()) + aanmaakdatum = new Date(oRs("ins_deel_aanmaak").Value); + oRs.MoveNext(); + } + oRs.Close(); + // Als er meerdere inspecties zijn dan hebben bovenstaande variablen alleen een geldige waarde als het voor alle inspecties hetzelfde is. } - oRs.Close(); - // Als er meerdere inspecties zijn dan hebben bovenstaande variablen alleen een geldige waarde als het voor alle inspecties hetzelfde is. %> -<% - } - else - { -%> - -<% - } - oRs.Close(); - - var dsc_is_afgemeld = false; - var multidsc_has_afgemeld = false; - if (!multi && ingeslotendsc[0] > 0) - { // Bestaande inspectie. - var sql = "SELECT ins_deelsrtcontrole_datum" - + " , ins_controlemode_key" - + " , ins_deelsrtcontrole_opmerking" - + " , ins_deelsrtcontrole_plandatum" - + " , ins_deelsrtcontrole_status" - + " FROM ins_deelsrtcontrole" - + " WHERE ins_deelsrtcontrole_key = " + ingeslotendsc[0]; + // Men mag alleen een inspectie-uitvoerdatum invoeren die later is dan de laatste inspectie-uitvoerdatum. + // Bij multi ook de laatste uitvoerdatum bepalen. + sql = "SELECT MAX(idsc.ins_deelsrtcontrole_datum) lastinspectdatum" + + " , MAX(idsc.ins_deelsrtcontrole_datum + 1) dag_na_lastinspectdatum" + + " , SUM (CASE" + + " WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar. + + " THEN 1" // Dag, maand of jaar. + + " ELSE 0" // Tijd. + + " END) aantal_dmj_eenheid" + + " , isc.ins_srtcontrole_mode" + + " FROM ins_deelsrtcontrole idsc" + + " , ins_srtcontrole isc" + + " , ins_srtcontroledl_xcp xcp" + + " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key" + + " AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)" + + " AND idsc.ins_deel_key = xcp.ins_deel_key(+)" + + " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0" + + " AND idsc.ins_deel_key IN (" + ingesloten.join(",") + ")" + + " AND idsc.ins_srtcontrole_key IN (" + ingeslotensc.join(",") + ")" + + " AND idsc.ins_scenario_key = 1" + + " AND xcp.ins_scenario_key(+) = 1" + + " GROUP BY isc.ins_srtcontrole_mode"; var oRs = Oracle.Execute(sql); - inspect_data = {deelsrtcontrole_datum: oRs("ins_deelsrtcontrole_datum").Value != null? new Date(oRs("ins_deelsrtcontrole_datum").Value): null, - controlemode_key: oRs("ins_controlemode_key").Value, - deelsrtcontrole_opmerking: oRs("ins_deelsrtcontrole_opmerking").Value, - deelsrtcontrole_plandatum: oRs("ins_deelsrtcontrole_plandatum").Value != null? new Date(oRs("ins_deelsrtcontrole_plandatum").Value) : null, - deelsrtcontrole_status: oRs("ins_deelsrtcontrole_status").Value, - deelsrtcontrole_status_str: ins.getinspectstatustext(oRs("ins_deelsrtcontrole_status").Value)} - // Als de tijd van de datum NIET middennacht (00:00) is dan mag je de datum niet wijzigen. Daarom tijd bepalen voor FCLTcalendar. - // Wijzigen zet datum op middennacht wat problemen met een constraint kan geven. - var hours = inspect_data.deelsrtcontrole_datum != null? inspect_data.deelsrtcontrole_datum.getHours() : new Date().getHours(); - var minutes = inspect_data.deelsrtcontrole_datum != null? inspect_data.deelsrtcontrole_datum.getMinutes() : new Date().getMinutes(); - dsc_is_afgemeld = inspect_data.deelsrtcontrole_status >= 5; - oRs.Close(); - } - else - { // Nieuwe inspectie of multi. - // Inplannen: Als niet multi en het is de eerste inspectie en de startdatum heeft een waarde dan deze waarde invullen als PLANDATUM. - // De minimum datum is dan gelijk de startdatum. - // Gereed melden/Afronden: Als niet multi en het is de eerste inspectie en de startdatum heeft een waarde dan deze waarde invullen als CONTROLEDATUM. - inspect_data = {deelsrtcontrole_datum: insClose && !multi && startdatum != null && eersteinspectie? startdatum : null, - controlemode_key: -1, - deelsrtcontrole_plandatum: insPlan? (!multi && startdatum != null && eersteinspectie? startdatum : new Date()): null, - deelsrtcontrole_opmerking: "", - deelsrtcontrole_status: insstatus, - deelsrtcontrole_status_str: status_str}; - if (insPlan && !multi && startdatum != null && eersteinspectie) + var lastinspectdatum; + var dag_na_lastinspectdatum; + var aantal_dmj_eenheid; + var mode; + var minDate = aanmaakdatum; // Als er nog geen inspecties zijn geweest dan is de aanmaakdatum de minimale datum. + if (!oRs.eof && oRs("lastinspectdatum").Value != null) { - if (mjob) - minDate = new Date(startdatum.getFullYear() + 1, 0, 1); + lastinspectdatum = new Date(oRs("lastinspectdatum").Value); // Kan uiterlijk vandaag zijn. + dag_na_lastinspectdatum = new Date(oRs("dag_na_lastinspectdatum").Value); // Kan uiterlijk morgen zijn. + aantal_dmj_eenheid = oRs("aantal_dmj_eenheid").Value; + mode = oRs("ins_srtcontrole_mode").Value; + if (mode == 0) + // Momentmode. + minDate = aantal_dmj_eenheid > 0? dag_na_lastinspectdatum : lastinspectdatum; else - minDate = startdatum; + // Intervalmode. + minDate = lastinspectdatum; +%> + +<% + } + else + { +%> + +<% + } + oRs.Close(); + + var dsc_is_afgemeld = false; + var multidsc_has_afgemeld = false; + if (!multi && ingeslotendsc[0] > 0) + { // Bestaande inspectie. + var sql = "SELECT ins_deelsrtcontrole_datum" + + " , ins_controlemode_key" + + " , ins_deelsrtcontrole_opmerking" + + " , ins_deelsrtcontrole_plandatum" + + " , ins_deelsrtcontrole_status" + + " FROM ins_deelsrtcontrole" + + " WHERE ins_deelsrtcontrole_key = " + ingeslotendsc[0]; + var oRs = Oracle.Execute(sql); + inspect_data = {deelsrtcontrole_datum: oRs("ins_deelsrtcontrole_datum").Value != null? new Date(oRs("ins_deelsrtcontrole_datum").Value): null, + controlemode_key: oRs("ins_controlemode_key").Value, + deelsrtcontrole_opmerking: oRs("ins_deelsrtcontrole_opmerking").Value, + deelsrtcontrole_plandatum: oRs("ins_deelsrtcontrole_plandatum").Value != null? new Date(oRs("ins_deelsrtcontrole_plandatum").Value) : null, + deelsrtcontrole_status: oRs("ins_deelsrtcontrole_status").Value, + deelsrtcontrole_status_str: ins.getinspectstatustext(oRs("ins_deelsrtcontrole_status").Value)} + // Als de tijd van de datum NIET middennacht (00:00) is dan mag je de datum niet wijzigen. Daarom tijd bepalen voor FCLTcalendar. + // Wijzigen zet datum op middennacht wat problemen met een constraint kan geven. + var hours = inspect_data.deelsrtcontrole_datum != null? inspect_data.deelsrtcontrole_datum.getHours() : new Date().getHours(); + var minutes = inspect_data.deelsrtcontrole_datum != null? inspect_data.deelsrtcontrole_datum.getMinutes() : new Date().getMinutes(); + dsc_is_afgemeld = inspect_data.deelsrtcontrole_status >= 5; + oRs.Close(); + } + else + { // Nieuwe inspectie of multi. + // Inplannen: Als niet multi en het is de eerste inspectie en de startdatum heeft een waarde dan deze waarde invullen als PLANDATUM. + // De minimum datum is dan gelijk de startdatum. + // Gereed melden/Afronden: Als niet multi en het is de eerste inspectie en de startdatum heeft een waarde dan deze waarde invullen als CONTROLEDATUM. + inspect_data = {deelsrtcontrole_datum: insClose && !multi && startdatum != null && eersteinspectie? startdatum : null, + controlemode_key: -1, + deelsrtcontrole_plandatum: insPlan? (!multi && startdatum != null && eersteinspectie? startdatum : new Date()): null, + deelsrtcontrole_opmerking: "", + deelsrtcontrole_status: insstatus, + deelsrtcontrole_status_str: status_str}; + if (insPlan && !multi && startdatum != null && eersteinspectie) + { + if (mjob) + minDate = new Date(startdatum.getFullYear() + 1, 0, 1); + else + minDate = startdatum; + } } } - if (insPlan || (insEdit && (insstatus == 0 || insstatus == 2))) + if (groupby == 7 && (insPlan || (insEdit && (insstatus == 0 || insstatus == 2)))) FCLTcalendar("plandatum", { label: L("lcl_ins_controle_plandate"), datum: minDate > inspect_data.deelsrtcontrole_plandatum? minDate : inspect_data.deelsrtcontrole_plandatum, @@ -693,7 +783,7 @@ if (ins_key_arr.length == 1) suppressEmpty: true }); - if (insClose || (insEdit && insstatus >= 5)) + if (groupby == 7 && (insClose || (insEdit && insstatus >= 5))) { FCLTcalendar("deelsrtcontrole_plandatum", { label: L("lcl_ins_controle_plandate"), @@ -824,7 +914,29 @@ if (ins_key_arr.length == 1) ) }); } + } + else (groupby != 7) + { + FCLTcalendar("deelsrtcontrole_datum", + { label: L("lcl_ins_controle_datum"), + datum: new Date(), + minDate: new Date(), + maxDate: new Date(), + required: true, + trclass: "invoerinsp", + timeField: true, + timeStep: 60, + startTime: 0, + endTime: 23.75, + //onChangeDate: "onChangeDeelsrtcdatum('D')", + //onChangeTime: "onChangeDeelsrtcdatum('T')", + readonly: true + }); +%> +<% } + if (groupby == 7) + { sql = "SELECT ins_controlemode_key" + " , " + lcl.xsqla('ins_controlemode_oms', 'ins_controlemode_key') + " FROM ins_controlemode" @@ -841,6 +953,49 @@ if (ins_key_arr.length == 1) readonly: (insEdit && !canMsuEdit) // Er geldt al (insEdit && insstatus >= 5). In status 5 en 6 met INSMSU rechten mag ik de methode aanpassen (canMsuEdit). }); } + else + { +%> + <%=L("lcl_ins_controle_mode")%>: +<% + for (var i = 1; i <= 3; i++) + { + if (sumtyp[i] > 0) + { + var typeoms = ""; + switch (i) + { + case 1: { + typeoms = L("lcl_ins_srtcontrole_insp"); + break; + } + case 2: { + typeoms = L("lcl_ins_srtcontrole_repl"); + break; + } + case 3: { + typeoms = L("lcl_ins_srtcontrole_cert"); + break; + } + } + + sql = "SELECT ins_controlemode_key" + + " , " + lcl.xsqla('ins_controlemode_oms', 'ins_controlemode_key') + + " FROM ins_controlemode" + + " WHERE ins_srtcontrole_type = " + i + + " ORDER BY 2"; + + // Methode is voor de status Afgemeld(5) en Historie/Verwerkt(6) altijd ingevuld. + FCLTselector("sel_controlemode" + i, + sql, + { label: "     " + typeoms + " (" + L("lcl_count") + ":" + sumtyp[i] + ")", + initKey: -1, + emptyOption: L("lcl_select_controlemode"), + required: true + }); + } + } + } %> -<% +<% } BLOCK_END(); %> @@ -876,7 +1032,7 @@ if (ins_key_arr.length == 1) <% - if (!multi) + if (groupby == 7 && !multi) { BLOCK_START("insFlex2", ""); //block over gehele breedte %>
<% // Wrapper div voor dynamisch herladen diff --git a/APPL/INS/ins_flexkenmerk.inc b/APPL/INS/ins_flexkenmerk.inc index 293bc8d089..d420401a28 100644 --- a/APPL/INS/ins_flexkenmerk.inc +++ b/APPL/INS/ins_flexkenmerk.inc @@ -112,7 +112,7 @@ function generateFlexKenmerkBlock(params) function isReadonly (volgnummer, oRs) { // Zonder WEB_INSMAN of WEB_SLEBOF rechten zijn flexkenmerken met volgnummer <= 100 readonly. - if (volgnummer <= 100 && ins_key > 0 && ( (!writeman && !writeslebof) && (!this_ins.canChangeAlg && !this_ins.canChangeOwn)) ) + if (volgnummer <= 100 && ins_key > 0 && ( (!writeman && !writeslebof) && (!this_ins.canChangeAlg && !(this_ins.canChange || this_ins.canChangeOwn))) ) return true; if (volgnummer >= 900 && lendout && fronto) // Fronto mag uitleenkenmerken altijd bewerken diff --git a/APPL/INS/ins_inspect_list.inc b/APPL/INS/ins_inspect_list.inc index 39a23060ce..0d2bc159cf 100644 --- a/APPL/INS/ins_inspect_list.inc +++ b/APPL/INS/ins_inspect_list.inc @@ -78,7 +78,7 @@ insp = { + " , NULL ins_deelsrtcontrole_key" + " , di.ins_srtcontrole_periode periode" + " , di.ins_srtcontrole_eenheid eenheid" - + " , di.ins_srtcontrole_kosten kosten" + + " , (COALESCE(di.ins_srtcontrole_kosten, 0) + COALESCE(di.ins_srtcontrole_kosten2, 0) + COALESCE(di.ins_srtcontrole_kosten3, 0)) kosten" + " , di.ins_srtcontrole_mode isc_mode" + " , NULL plandatum" + " , '' ins_deelsrtcontrole_opmerking" @@ -172,7 +172,7 @@ insp = { + " , idsc.ins_deelsrtcontrole_key" + " , di.ins_srtcontrole_periode periode" + " , di.ins_srtcontrole_eenheid eenheid" - + " , di.ins_srtcontrole_kosten kosten" + + " , (COALESCE(di.ins_srtcontrole_kosten, 0) + COALESCE(di.ins_srtcontrole_kosten2, 0) + COALESCE(di.ins_srtcontrole_kosten3, 0)) kosten" + " , di.ins_srtcontrole_mode isc_mode" + " , idsc.ins_deelsrtcontrole_plandatum plandatum" + " , idsc.ins_deelsrtcontrole_opmerking" diff --git a/APPL/INS/ins_inspect_save.asp b/APPL/INS/ins_inspect_save.asp index 98361c4778..169290e1c2 100644 --- a/APPL/INS/ins_inspect_save.asp +++ b/APPL/INS/ins_inspect_save.asp @@ -21,6 +21,7 @@ var JSON_Result = true; + <% @@ -38,9 +39,11 @@ var scen_key_arr = getFParamIntArray("scen_key_arr", []); var savemode = getFParam("savemode"); var finish = getFParamInt("finish", 0) == 1; // Inspectie direct afronden. +var groupby = getFParamInt("groupby", 7); var mjob = getFParamInt("mjob", 0) == 1; + // Als multi dan moet de ins_deel array even groot zijn als de srtcontrole array en deelsrtcontrole array. -user.auth_required_or_abort(!multi || (ins_key_arr.length == srtcont_key_arr.length)); +user.auth_required_or_abort(groupby < 7 || !multi || (ins_key_arr.length == srtcont_key_arr.length)); var deelsrtcontrole_datum; var plandatum, moveyears; @@ -75,7 +78,7 @@ else if (savemode == "R") { Response.Clear(); Response.Write(JSON.stringify({ success: false, savemode: "R", warning: "" })); - Response.End(); + Response.End; } deelsrtcont_key = getFParamInt("deelsrtcont_key", -1); // Specifieke inspectie die gewijzigd is. var silent = true; @@ -86,533 +89,736 @@ var result = {}; var tobehandled = 0; var ingesloten = []; var canMsuEdit = false; // Alleen voor het wijzigen van inspectie (insEdit). Er geldt dan altijd !multi. -// Bepaal de objecten in de selectie die ook echt geinspecteerd kunnen of mogen worden. -for (var i = 0; i < ins_key_arr.length; i++) + +var inflatiepct = S("mjb_inflation"); +var inflatiefactor = 1 + (inflatiepct / 100); +var mjb_start_year = S("mjb_start_year"); +var mjb_freeze_year = S("mjb_freeze_year"); + +if (groupby < 7) { - var dlsrtcont_key = -1; - var sql = "SELECT *" - + " FROM (SELECT xcp.ins_srtcontrole_key" - + " , idsc.ins_deelsrtcontrole_key" - + " , (SELECT MAX (idsc2.ins_deelsrtcontrole_datum)" - + " FROM ins_deelsrtcontrole idsc2" - + " WHERE idsc2.ins_deel_key = idsc.ins_deel_key" - + " AND idsc2.ins_srtcontrole_key = idsc.ins_srtcontrole_key" - + (scen_key_arr.length > 0 && scen_key_arr[i] > 1 - ? " AND idsc2.ins_scenario_key = " + scen_key_arr[i] - : " AND idsc2.ins_scenario_key = 1") - + " ) ins_deelsrtcontrole_datum" - + (deelsrtcont_key > 0 - ? " , idsc.ins_deelsrtcontrole_plandatum" - : "") - + " , xcp.ins_srtcontrole_eenheid eenheid" - + " , xcp.ins_srtcontrole_mode" - + " , idsc.ins_deelsrtcontrole_status" - + " , xcp.ins_deel_aanmaak" - + " , xcp.ctr_discipline_key" - + " , xcp.ins_srtcontrole_options options" - + " , cd.ins_discipline_omschrijving" - + " , xcp.ins_srtcontroledl_xcp_startdat" - + " , CASE" - + " WHEN (SELECT COUNT(sdc.ins_deelsrtcontrole_key)" - + " FROM ins_deelsrtcontrole sdc" - + " WHERE sdc.ins_deel_key = idsc.ins_deel_key" - + " AND sdc.ins_srtcontrole_key = idsc.ins_srtcontrole_key" - + " AND sdc.ins_deelsrtcontrole_status = 6" - + " AND sdc.ins_scenario_key = 1) > 0" - + " THEN 1" - + " ELSE 0" - + " END hascontroles" - + " FROM ins_v_defined_inspect_xcp xcp" - + " , ins_deelsrtcontrole idsc" - + " , ctr_v_aanwezigdiscipline cd" - + " WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden. - + " AND xcp.ctr_discipline_key = cd.ins_discipline_key" - + " AND xcp.ins_deel_key = " + ins_key_arr[i] - + " AND idsc.ins_deel_key(+) = " + ins_key_arr[i] - + " AND xcp.ins_srtcontrole_periode > 0" - + " AND xcp.ins_srtcontrole_key = " + srtcont_key_arr[i] - + (deelsrtcont_key > 0 - ? " AND idsc.ins_deelsrtcontrole_key = " + deelsrtcont_key - : "") - + (scen_key_arr.length > 0 && scen_key_arr[i] > 1 - ? " AND xcp.ins_scenario_key(+) = " + scen_key_arr[i] - + " AND idsc.ins_scenario_key(+) = " + scen_key_arr[i] - : " AND xcp.ins_scenario_key(+) = 1" - + " AND idsc.ins_scenario_key(+) = 1") - + " )" - + " ORDER BY ins_deelsrtcontrole_key DESC"; - var oRs = Oracle.Execute(sql); - lcl.set_dialect(oRs("ctr_discipline_key").Value, "INS_TAB_DISCIPLINE_KEY"); + var dist_key = getFParamInt("dist_key", -1); // District + var loc_key = getFParamInt("loc_key", -1); // Locatie + var bld_key = getFParamInt("bld_key", -1); // Gebouw + var disc_key = getFParamInt("disc_key", -1); + var srtgroep_key = getFParamInt("srtgroep_key", -1); + var srtdeel_key = getFParamInt("srtdeel_key", -1); + var groep = getFParam("groep", ""); // Groep + var categorie_key = getFParamInt("categorie_key", -1); // Categorie + var srtcontrole = getFParamIntArray("srtcontrole", []); // Taak + var frequentie = getFParamIntArray("frequentie", []); // Array met frequenties. + var incbtw = getFParamInt("incbtw", 0) == 1; // Lijst inclusief BTW weergeven. + var deel = getFParam("deel", ""); // Identieficatie + var mjbMoved = getFParamInt("mjbMoved", 0) == 1; // Verschoven. + var mjbFreezed = getFParamInt("mjbFreezed", 0) == 1; // In behandeling. + var mjbXcped = getFParamInt("mjbXcped", 0) == 1; // Aangepast. - // Waarden moeten aanwezig zijn. Mocht dat niet zo zijn dan is er iets fout. - var ins_srtcontrole_mode = oRs("ins_srtcontrole_mode").Value; - var ins_deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1; // Als er nog geen inspectie is geweest is de status -1. - var ins_deel_aanmaak = new Date(oRs("ins_deel_aanmaak").Value); - var eenheid = oRs("eenheid").Value; - var ins_deelsrtcontrole_datum_max = oRs("ins_deelsrtcontrole_datum").Value; - var ins_deelsrtcontrole_key = oRs("ins_deelsrtcontrole_key").Value; - var isc_options = oRs("options").Value; - var disc_oms = oRs("ins_discipline_omschrijving").Value; - var deelsrtcontrole_plandatum = (deelsrtcont_key > 0 ? oRs("ins_deelsrtcontrole_plandatum").Value : -1); - var ins_startdatum = oRs("ins_srtcontroledl_xcp_startdat").Value != null? new Date(oRs("ins_srtcontroledl_xcp_startdat").Value) : -1; - var hascontroles = oRs("hascontroles").Value == 1; + var sel_controlemode123 = []; + var sel_controlemode1 = getFParamIntArray("sel_controlemode1", -1); // Taakafhandeling 1. + var sel_controlemode2 = getFParamIntArray("sel_controlemode2", -1); // Taakafhandeling 2. + var sel_controlemode3 = getFParamIntArray("sel_controlemode3", -1); // Taakafhandeling 3. + if (sel_controlemode1 > 0) + sel_controlemode123.push(sel_controlemode1); + if (sel_controlemode2 > 0) + sel_controlemode123.push(sel_controlemode2); + if (sel_controlemode3 > 0) + sel_controlemode123.push(sel_controlemode3); - var this_ins = ins.func_enabled_deel(ins_key_arr[i], - {srtcont_key: srtcont_key_arr[i], - deelsrtcont_key: (ins_deelsrtcontrole_key != null? ins_deelsrtcontrole_key : -1), - scen_key: (scen_key_arr.length > 0? scen_key_arr[i] : 1) - }); - canMsuEdit = savemode == "E" && this_ins.canMsuEdit; - oRs.Close(); + var opmerk = getFParam("opmerk", ""); // Opmerking. - if (savemode == "R") + // Start building the query to fetch all objects satisfying + var mjbparams = { scenario: 1, + fulldetails: true, + toyear: mjb_freeze_year, + jaren: [mjb_freeze_year], + //actsit: actsit, + keys: ins_key_arr, + niveau: groupby, // Het niveau (betekenis) van de keys (district(1), gebouw(2), discipline(3), groep(4), objectsoort(5), object(6)) + dist_key: dist_key, + loc_key: loc_key, + bld_key: bld_key, + disc_key: disc_key, + srtgroep_key: srtgroep_key, + srtdeel_key: srtdeel_key, + groep: groep, + categorie_key: categorie_key, + srtcontrole: srtcontrole, + frequentie: frequentie, + incbtw: incbtw, + deel: deel, + mjbMoved: mjbMoved, + mjbFreezed: mjbFreezed, + mjbXcped: mjbXcped, + groupby: 7, // Ik wil alle objecten opvragen. + sel_controlemode123: sel_controlemode123, + finish: true + }; + + var mjblist_sql = ins.getmjblist_sql(mjbparams); + // De mjblist_sql bevat nu alle objecten (ins_deel_key) van de aangevinkte regels uit het mjb overzicht en levert voor elk object de waarden voor de insert op. + + var result = { success: true, deelsrtcontrole_datum: deelsrtcontrole_datum, savemode: savemode, warning: "" }; + + var oRs = Oracle.Execute(mjblist_sql); + user.anything_todo_or_abort(!oRs.eof); // We klagen niet over enkele wel en enkele niet + + var dlsrtcont_key_array = []; + var trackarray = []; + var update_sql = "BEGIN "; + while (!oRs.eof) { - var minyear = S("mjb_freeze_year") || (new Date()).getFullYear(); - if (ins_deelsrtcontrole_status == 0) // Er is nog geen inspectie geweest. + var ins_key = oRs("ins_deel_key").Value; + var srtcont_key = oRs("ins_srtcontrole_key").Value; + var dlsrtcont_key = oRs("ins_deelsrtcontrole_key").Value; + var sctype = oRs("ctr_controle_type").Value; + var nextdate = new Date(oRs("nextdate").Value); + var cm_oms = oRs("cm_oms").Value; + var ctr_disc_oms = oRs("ctr_disc_oms").Value; + var dlsrtcont_opm = oRs("ins_deelsrtcontrole_opmerking").Value; + var sel_controlemode; + var dlsrtcontr_trackarray = []; + switch(sctype) { - if (deelsrtcontrole_plandatum != -1) - plandatum = new Date(deelsrtcontrole_plandatum); - else - continue; - savemode = "E"; // bestaat al dus 'edit' + case 1: sel_controlemode = sel_controlemode1; break; + case 2: sel_controlemode = sel_controlemode2; break; + case 3: sel_controlemode = sel_controlemode3; break; } - else - { - sql = "SELECT ins.nextcyclusdate (" + ins_key_arr[i] + ", " + srtcont_key_arr[i] + ", 1) nextdate FROM DUAL"; - oRs_nextdate = Oracle.Execute(sql); - plandatum = new Date(oRs_nextdate("nextdate").Value); - oRs_nextdate.Close(); + var nextdate = oRs("nextdate").Value != null? new Date(oRs("nextdate").Value) : null; - if (ins_deelsrtcontrole_status == -1) - { - var aanmaakyear = ins_deel_aanmaak.getFullYear(); - minyear = Math.max(minyear, aanmaakyear); - } - else if (ins_deelsrtcontrole_status == 5 || ins_deelsrtcontrole_status == 6) - { - var lastinsdate = new Date(ins_deelsrtcontrole_datum_max); - var lastinsyear = lastinsdate.getFullYear(); - minyear = Math.max(minyear, lastinsyear); - } - else // ins_deelsrtcontrole_status == 2 - continue; + update_sql += "UPDATE ins_deelsrtcontrole" + + " SET ins_deelsrtcontrole_opmerking = " + safe.quoted_sql((dlsrtcont_opm != ""? dlsrtcont_opm + "\n" : "") + opmerk) + + " , prs_perslid_key = " + user_key + + " , ins_deelsrtcontrole_datum = SYSDATE" + + " , ins_deelsrtcontrole_datum_org = " + nextdate.toSQL(true) + + " , ins_controlemode_key = " + sel_controlemode + + " WHERE ins_deelsrtcontrole_key = " + dlsrtcont_key + + ";"; + if (opmerk != "") + dlsrtcontr_trackarray.push(L("lcl_remark") + ": " + (dlsrtcont_opm != ""? dlsrtcont_opm : L("lcl_trackfromempty")) + L("lcl_trackto") + (dlsrtcont_opm != ""? dlsrtcont_opm + "\n" : "") + opmerk); + dlsrtcontr_trackarray.push(L("lcl_ins_controle_datum") + ": " + L("lcl_trackfromempty") + L("lcl_trackto") + toDateTimeString(new Date())); + dlsrtcontr_trackarray.push(L("lcl_ins_controle_mode") + ": " + L("lcl_trackfromempty") + L("lcl_trackto") + cm_oms); - savemode = "P"; // moet nog ingepland worden - } - var newyear = plandatum.getFullYear() + moveyears; - if (moveyears === 0 || newyear < minyear) - continue; + dlsrtcont_key_array.push(dlsrtcont_key); + trackarray.push(dlsrtcontr_trackarray) - plandatum = new Date(newyear, 11, 31); + oRs.MoveNext(); } - // Inplannen (dlsrtcont_key = -1). - // Het is de eerste inspectie of de laatste inspectie moet verwerkt(6) zijn, anders kan de inspectie niet ingepland worden. + update_sql += " END;" - // Het planjaar moet na het startjaar ligggen. - // Als er al een inspectie is geweest dan niet meer naar startdatum kijken. - // Als er nog geen inspectie is geweest en er is een startdatum ingevuld, dan moet de plandatum verwijderd worden afhankelijk van mjob. - // Voor mjob = false: als de plandatum eerder is als de startdatum (kan eigenlijk niet ingevoerd worden in edit scherm). - // mjob = true: als de plandatum in hetzelfde jaar of eerder is als de startdatum. - if (savemode == "P" && !(this_ins.canInspPlan || this_ins.canInspPlanMjb)) // Inplannen. - { // Ik heb geen Plan (inplannen) rechten of er was al een planrecord. - if (ins_deelsrtcontrole_status == 0 && !multi) - savemode = "E"; - else - continue; + var err = Oracle.Execute(update_sql, true); + if (err.friendlyMsg) + result.message = err.friendlyMsg; + + for (var i = 0; i < dlsrtcont_key_array.length; i++) + { + // Nu nog de status zetten, tracking genereren en notificaties sturen. + ins.setinspectstatus(dlsrtcont_key_array[i], 6); // History/Verwerkt(6). + + ins.trackinspectupdate(dlsrtcont_key_array[i], L("lcl_ins_controle_is_upd").format(ctr_disc_oms) + "\n" + trackarray[i].join("\n")); } - else if (savemode == "P" && !hascontroles && ins_startdatum != -1) - { // Eerste controle en er is een startdatum ingevuld. - if ((mjob && plandatum.getFullYear() <= ins_startdatum.getFullYear()) || (!mjob && plandatum.getTime() <= ins_startdatum.getTime())) - continue; // Plandatum is gelijk voor de startdatum. Plandatum niet opslaan. - } - - - if (savemode == "C") // Afmelden/Afronden. - { // Is er op de inspectiedatum of op het inspectieuur al geinspecteerd voor dit object en het objectsoort? - // Voor niet multi is dit al gecontroleerd in ins_edit_inspect.asp. Hier voor de veiligheid opnieuw controleren is niet verkeerd. - var deelsrtcontrole_midnighttime = deelsrtcontrole_datum.midnight().getTime(); - var deelsrtcontrole_hourtime = deelsrtcontrole_datum; // deelsrtcontrole_datum moet niet worden aangepast door setMinutes(0,0,0). - var deelsrtcontrole_hourtime = new Date(new Date(parseInt(deelsrtcontrole_hourtime.getTime())).setMinutes(0,0,0)).getTime(); - // Controle of er op de inspectiedatum of op het inspectieuur al inspecties zijn geweest - // TODO: Wat te doen met extra inspecties. En per week/maand/jaar enz. - if ((eenheid > 0) && ins_srtcontrole_mode == 0 && // Geldt alleen voor momentmodus. - (deelsrtcontrole_midnighttime == new Date(ins_deelsrtcontrole_datum_max).midnight().getTime())) - { // Op dezelfde dag mag niet. Overslaan. - continue; - } - else if ((eenheid == 0) && ins_srtcontrole_mode == 0 && // Geldt alleen voor momentmodus. - (deelsrtcontrole_hourtime == new Date(new Date(ins_deelsrtcontrole_datum_max).setMinutes(0,0,0)).getTime())) - { // In dezelfde minuut (tijdstip) mag niet. Overslaan. - continue; - } - else if (new Date(deelsrtcontrole_datum.setSeconds(0, 0)).getTime() == new Date(new Date(ins_deelsrtcontrole_datum_max)).getTime() && - ins_srtcontrole_mode == 1) - { // Een inspectie doen op dezelfde datumtijd (controledatum hetzelfde) mag niet omdat je daarna dan niet meer de volgende inspectie kunt doen. - // De geplande _org tijd is dan hetzelfde als de laatste inspectie omdat de volgende inspectie dan niet opgeschoven is. - // Inspecties op dezelfde datumtijd moeten dus afgevangen worden. - // Dit kan alleen voorkomen in de interval mode. - continue; - } - - if (!this_ins.canInspClose && !(this_ins.canInspFinish || this_ins.canInspFinishMjb)) - { // Ik heb geen Close (gereedmelden/afronden) rechten of laatste inspectie is niet verwerkt (dan moet ins_inspect_finish.asp aangeroepen worden). Overslaan. - continue; - } - else if (ins_deelsrtcontrole_status >= 0 && ins_deelsrtcontrole_status != 6) - dlsrtcont_key = ins_deelsrtcontrole_key; - } - - if (savemode == "E") // Wijzigen. - { // Dit is al gecontroleerd in ins_edit_inspect.asp. Hier voor de veiligheid opnieuw controleren is niet verkeerd. - if (!this_ins.canInspEdit) - { // Ik heb geen Edit rechten. - continue; - } - else - dlsrtcont_key = ins_deelsrtcontrole_key; - - // De uitvoerdatum/inspectiedatum moet vallen tussen de uitvoerdatum/inspectiedatum van de vorige en volgende inspectie. - // De edit mode zorgt ervoor dat er alleen juiste inspectiedatums gekozen kunnen worden, maar het is goed dat het hier ook nog getest wordt. - var aanmaakdatum = ins_deel_aanmaak; - var minDate = new Date(); - var maxDate = new Date(); - if (ins_deelsrtcontrole_status >= 5 && getDeelsrtcontroleDate) - { - // Vooralsnog kan inspectiedatum niet aangepast worden als de eenheid uren(0) is (readonly). - sql = "SELECT MAX(idsc.ins_deelsrtcontrole_datum) lastinspectdatum" - + " , MAX(idsc.ins_deelsrtcontrole_datum + 1) dag_na_lastinspectdatum" - + " , CASE" - + " WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar. - + " THEN 1" // Dag, maand of jaar. - + " ELSE 0" // Tijd. - + " END dmj_eenheid" - + " , isc.ins_srtcontrole_mode" - + " FROM ins_deelsrtcontrole idsc" - + " , ins_srtcontrole isc" - + " , ins_srtcontroledl_xcp xcp" - + " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key" - + " AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)" - + " AND idsc.ins_deel_key = xcp.ins_deel_key(+)" - + " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0" - + " AND idsc.ins_deel_key IN (" + ins_key_arr[i] + ")" - + " AND idsc.ins_srtcontrole_key IN (" + srtcont_key_arr[i] + ")" - + " AND ins_deelsrtcontrole_key < " + dlsrtcont_key - + " AND idsc.ins_scenario_key = 1" // Status >= 0 dus kan geen scenario zijn. - + " AND xcp.ins_scenario_key(+) = 1" // Status >= 0 dus kan geen scenario zijn. - + " GROUP BY isc.ins_srtcontrole_mode" - + " , xcp.ins_srtcontroledl_xcp_eenheid" - + " , isc.ins_srtcontrole_eenheid"; - var oRs = Oracle.Execute(sql); - if (!oRs.eof && oRs("lastinspectdatum").Value != null) - { - lastinspectdatum = new Date(oRs("lastinspectdatum").Value); // Kan uiterlijk vandaag zijn. - dag_na_lastinspectdatum = new Date(oRs("dag_na_lastinspectdatum").Value); // Kan uiterlijk morgen zijn. - dmj_eenheid = oRs("dmj_eenheid").Value; - mode = oRs("ins_srtcontrole_mode").Value; - if (mode == 0) - // Momentmode. - minDate = dmj_eenheid == 1? new Date(dag_na_lastinspectdatum.midnight()) : lastinspectdatum; - else - // Intervalmode. - minDate = lastinspectdatum; - } - else - minDate = aanmaakdatum; - - // Vooralsnog kan inspectiedatum niet aangepast worden als de eenheid uren(0) is (readonly). - sql = "SELECT MIN(COALESCE(idsc.ins_deelsrtcontrole_datum, ins_deelsrtcontrole_plandatum)) firstinspectdatum" - + " , MIN(COALESCE(idsc.ins_deelsrtcontrole_datum, ins_deelsrtcontrole_plandatum) - 1) dag_voor_firstinspectdatum" - + " , CASE" - + " WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar. - + " THEN 1" // Dag, maand of jaar. - + " ELSE 0" // Tijd. - + " END dmj_eenheid" - + " , isc.ins_srtcontrole_mode" - + " FROM ins_deelsrtcontrole idsc" - + " , ins_srtcontrole isc" - + " , ins_srtcontroledl_xcp xcp" - + " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key" - + " AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)" - + " AND idsc.ins_deel_key = xcp.ins_deel_key(+)" - + " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0" - + " AND idsc.ins_deel_key IN (" + ins_key_arr[i] + ")" - + " AND idsc.ins_srtcontrole_key IN (" + srtcont_key_arr[i] + ")" - + " AND ins_deelsrtcontrole_key > " + dlsrtcont_key - + " AND idsc.ins_scenario_key = 1" // Status >= 0 dus kan geen scenario zijn. - + " AND xcp.ins_scenario_key(+) = 1" // Status >= 0 dus kan geen scenario zijn. - + " GROUP BY isc.ins_srtcontrole_mode" - + " , xcp.ins_srtcontroledl_xcp_eenheid" - + " , isc.ins_srtcontrole_eenheid"; - oRs = Oracle.Execute(sql); - if (!oRs.eof) - { - firstinspectdatum = new Date(oRs("firstinspectdatum").Value); // Kan uiterlijk vandaag zijn. - dag_voor_firstinspectdatum = new Date(oRs("dag_voor_firstinspectdatum").Value); // Kan uiterlijk morgen zijn. - dmj_eenheid = oRs("dmj_eenheid").Value; - mode = oRs("ins_srtcontrole_mode").Value; - if (mode == 0) - // Momentmode. - maxDate = dmj_eenheid == 1? new Date(dag_voor_firstinspectdatum.setHours(23,59,59,99)) : firstinspectdatum; - else - // Intervalmode. - maxDate = firstinspectdatum; - } - //else //maxDate = new Date(); - oRs.Close(); - - // Huidige inspectie moet tussen voorgaande en volgende inspectie inliggen. - if (deelsrtcontrole_datum.getTime() <= minDate.getTime() || deelsrtcontrole_datum.getTime() >= maxDate.getTime()) - { // De uitvoerdatum/inspectiedatum valt niet tussen de uitvoerdatum/inspectiedatum van de vorige en volgende inspectie. - continue; - } - } - } - - ingesloten.push({ins_key: ins_key_arr[i], srtcont_key: srtcont_key_arr[i], dlsrtcont_key: dlsrtcont_key, scen_key: (scen_key_arr.length > 0? scen_key_arr[i] : 1), - inspectiemode: ins_srtcontrole_mode, inspectiestatus: ins_deelsrtcontrole_status, ins_deel_aanmaak: ins_deel_aanmaak, - disc_oms: disc_oms, startdatum: ins_startdatum, hascontroles: hascontroles}); - tobehandled++; -} - -if (tobehandled == 0 && silent) -{ - Response.Clear(); - Response.Write(JSON.stringify({ success: false, savemode: savemode, warning: "" })); - Response.End(); } else - user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel en enkele niet - -function saveFlexKenmerkenInspection(pdlsrtcont_key, pinsPresent, pdelete) { - // HIER WORDEN DE SAVEFLEXKENMERKEN GEREGELD - if (pdelete) - currentKenmerkenSQL = "SELECT 1 FROM DUAL WHERE 1 = 0"; // Geen flexkenmerken opslaan en alle waarden verwijderen. - else - currentKenmerkenSQL = " SELECT kd.ins_kenmerk_key" - + " , kd.ins_kmdeelsrtcontr_waarde" - + " FROM ins_kmdeelsrtcontr kd" - + " , ins_kenmerk k" - + " WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key" - + " AND kd.ins_kmdeelsrtcontr_verwijder IS NULL" - + " AND kd.ins_deelsrtcontrole_key = " + pdlsrtcont_key; - - var ftrack = saveFlexKenmerken( pdlsrtcont_key - , { kenmerkTable: "ins_kmdeelsrtcontr" - , kenmerkParentKey : "ins_deelsrtcontrole_key" - , kenmerkWaarde: "ins_kmdeelsrtcontr_waarde" - , kenmerkKey: "ins_kenmerk_key" - , currentKenmerkenSQL: currentKenmerkenSQL - , requestQF: Request.Form - , isNew: !pinsPresent - , flexPath: "INS/I" - , module: "INS" - } - ); - return ftrack; -} - - -if (savemode == "P") -{ // Inplannen inspectie. Er is nog geen inspectierecord aanwezig. - var result = { success: true, plandatum: plandatum, savemode: savemode, warning: "" }; - - if (ingesloten.length == 1) - { // Vindt het ins_srtcontrole_type. - var sql = "SELECT ctr_disc_params_controle_type" - + " FROM ins_srtcontrole isc," - + " ctr_disc_params cdp" - + " WHERE ins_srtcontrole_key = " + ingesloten[0].srtcont_key - + " AND isc.ctr_discipline_key = cdp.ctr_ins_discipline_key"; + // Bepaal de objecten in de selectie die ook echt geinspecteerd kunnen of mogen worden. + for (var i = 0; i < ins_key_arr.length; i++) + { + var dlsrtcont_key = -1; + var sql = "SELECT *" + + " FROM (SELECT xcp.ins_srtcontrole_key" + + " , idsc.ins_deelsrtcontrole_key" + + " , (SELECT MAX (idsc2.ins_deelsrtcontrole_datum)" + + " FROM ins_deelsrtcontrole idsc2" + + " WHERE idsc2.ins_deel_key = idsc.ins_deel_key" + + " AND idsc2.ins_srtcontrole_key = idsc.ins_srtcontrole_key" + + (scen_key_arr.length > 0 && scen_key_arr[i] > 1 + ? " AND idsc2.ins_scenario_key = " + scen_key_arr[i] + : " AND idsc2.ins_scenario_key = 1") + + " ) ins_deelsrtcontrole_datum" + + (deelsrtcont_key > 0 + ? " , idsc.ins_deelsrtcontrole_plandatum" + : "") + + " , xcp.ins_srtcontrole_eenheid eenheid" + + " , xcp.ins_srtcontrole_mode" + + " , idsc.ins_deelsrtcontrole_status" + + " , xcp.ins_deel_aanmaak" + + " , xcp.ctr_discipline_key" + + " , xcp.ins_srtcontrole_options options" + + " , cd.ins_discipline_omschrijving" + + " , xcp.ins_srtcontroledl_xcp_startdat" + + " , CASE" + + " WHEN (SELECT COUNT(sdc.ins_deelsrtcontrole_key)" + + " FROM ins_deelsrtcontrole sdc" + + " WHERE sdc.ins_deel_key = idsc.ins_deel_key" + + " AND sdc.ins_srtcontrole_key = idsc.ins_srtcontrole_key" + + " AND sdc.ins_deelsrtcontrole_status = 6" + + " AND sdc.ins_scenario_key = 1) > 0" + + " THEN 1" + + " ELSE 0" + + " END hascontroles" + + " FROM ins_v_defined_inspect_xcp xcp" + + " , ins_deelsrtcontrole idsc" + + " , ctr_v_aanwezigdiscipline cd" + + " WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden. + + " AND xcp.ctr_discipline_key = cd.ins_discipline_key" + + " AND xcp.ins_deel_key = " + ins_key_arr[i] + + " AND idsc.ins_deel_key(+) = " + ins_key_arr[i] + + " AND xcp.ins_srtcontrole_periode > 0" + + " AND xcp.ins_srtcontrole_key = " + srtcont_key_arr[i] + + (deelsrtcont_key > 0 + ? " AND idsc.ins_deelsrtcontrole_key = " + deelsrtcont_key + : "") + + (scen_key_arr.length > 0 && scen_key_arr[i] > 1 + ? " AND xcp.ins_scenario_key(+) = " + scen_key_arr[i] + + " AND idsc.ins_scenario_key(+) = " + scen_key_arr[i] + : " AND xcp.ins_scenario_key(+) = 1" + + " AND idsc.ins_scenario_key(+) = 1") + + " )" + + " ORDER BY ins_deelsrtcontrole_key DESC"; var oRs = Oracle.Execute(sql); - result.srtcontrole_type = oRs("ctr_disc_params_controle_type").Value; + lcl.set_dialect(oRs("ctr_discipline_key").Value, "INS_TAB_DISCIPLINE_KEY"); + // Waarden moeten aanwezig zijn. Mocht dat niet zo zijn dan is er iets fout. + var ins_srtcontrole_mode = oRs("ins_srtcontrole_mode").Value; + var ins_deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1; // Als er nog geen inspectie is geweest is de status -1. + var ins_deel_aanmaak = new Date(oRs("ins_deel_aanmaak").Value); + var eenheid = oRs("eenheid").Value; + var ins_deelsrtcontrole_datum_max = oRs("ins_deelsrtcontrole_datum").Value; + var ins_deelsrtcontrole_key = oRs("ins_deelsrtcontrole_key").Value; + var isc_options = oRs("options").Value; + var disc_oms = oRs("ins_discipline_omschrijving").Value; + var deelsrtcontrole_plandatum = (deelsrtcont_key > 0 ? oRs("ins_deelsrtcontrole_plandatum").Value : -1); + var ins_startdatum = oRs("ins_srtcontroledl_xcp_startdat").Value != null? new Date(oRs("ins_srtcontroledl_xcp_startdat").Value) : -1; + var hascontroles = oRs("hascontroles").Value == 1; + + var this_ins = ins.func_enabled_deel(ins_key_arr[i], + {srtcont_key: srtcont_key_arr[i], + deelsrtcont_key: (ins_deelsrtcontrole_key != null? ins_deelsrtcontrole_key : -1), + scen_key: (scen_key_arr.length > 0? scen_key_arr[i] : 1) + }); + canMsuEdit = savemode == "E" && this_ins.canMsuEdit; oRs.Close(); + + if (savemode == "R") + { + var minyear = S("mjb_freeze_year") || (new Date()).getFullYear(); + if (ins_deelsrtcontrole_status == 0) // Er is nog geen inspectie geweest. + { + if (deelsrtcontrole_plandatum != -1) + plandatum = new Date(deelsrtcontrole_plandatum); + else + continue; + savemode = "E"; // bestaat al dus 'edit' + } + else + { + sql = "SELECT ins.nextcyclusdate (" + ins_key_arr[i] + ", " + srtcont_key_arr[i] + ", 1) nextdate FROM DUAL"; + oRs_nextdate = Oracle.Execute(sql); + plandatum = new Date(oRs_nextdate("nextdate").Value); + oRs_nextdate.Close(); + + if (ins_deelsrtcontrole_status == -1) + { + var aanmaakyear = ins_deel_aanmaak.getFullYear(); + minyear = Math.max(minyear, aanmaakyear); + } + else if (ins_deelsrtcontrole_status == 5 || ins_deelsrtcontrole_status == 6) + { + var lastinsdate = new Date(ins_deelsrtcontrole_datum_max); + var lastinsyear = lastinsdate.getFullYear(); + minyear = Math.max(minyear, lastinsyear); + } + else // ins_deelsrtcontrole_status == 2 + continue; + + savemode = "P"; // moet nog ingepland worden + } + var newyear = plandatum.getFullYear() + moveyears; + if (moveyears === 0 || newyear < minyear) + continue; + + plandatum = new Date(newyear, 11, 31); + } + + // Inplannen (dlsrtcont_key = -1). + // Het is de eerste inspectie of de laatste inspectie moet verwerkt(6) zijn, anders kan de inspectie niet ingepland worden. + + // Het planjaar moet na het startjaar ligggen. + // Als er al een inspectie is geweest dan niet meer naar startdatum kijken. + // Als er nog geen inspectie is geweest en er is een startdatum ingevuld, dan moet de plandatum verwijderd worden afhankelijk van mjob. + // Voor mjob = false: als de plandatum eerder is als de startdatum (kan eigenlijk niet ingevoerd worden in edit scherm). + // mjob = true: als de plandatum in hetzelfde jaar of eerder is als de startdatum. + if (savemode == "P" && !(this_ins.canInspPlan || this_ins.canInspPlanMjb)) // Inplannen. + { // Ik heb geen Plan (inplannen) rechten of er was al een planrecord. + if (ins_deelsrtcontrole_status == 0 && !multi) + savemode = "E"; + else + continue; + } + else if (savemode == "P" && !hascontroles && ins_startdatum != -1) + { // Eerste controle en er is een startdatum ingevuld. + if ((mjob && plandatum.getFullYear() <= ins_startdatum.getFullYear()) || (!mjob && plandatum.getTime() <= ins_startdatum.getTime())) + continue; // Plandatum is gelijk voor de startdatum. Plandatum niet opslaan. + } + + + if (savemode == "C") // Afmelden/Afronden. + { // Is er op de inspectiedatum of op het inspectieuur al geinspecteerd voor dit object en het objectsoort? + // Voor niet multi is dit al gecontroleerd in ins_edit_inspect.asp. Hier voor de veiligheid opnieuw controleren is niet verkeerd. + var deelsrtcontrole_midnighttime = deelsrtcontrole_datum.midnight().getTime(); + var deelsrtcontrole_hourtime = deelsrtcontrole_datum; // deelsrtcontrole_datum moet niet worden aangepast door setMinutes(0,0,0). + var deelsrtcontrole_hourtime = new Date(new Date(parseInt(deelsrtcontrole_hourtime.getTime())).setMinutes(0,0,0)).getTime(); + // Controle of er op de inspectiedatum of op het inspectieuur al inspecties zijn geweest + // TODO: Wat te doen met extra inspecties. En per week/maand/jaar enz. + if ((eenheid > 0) && ins_srtcontrole_mode == 0 && // Geldt alleen voor momentmodus. + (deelsrtcontrole_midnighttime == new Date(ins_deelsrtcontrole_datum_max).midnight().getTime())) + { // Op dezelfde dag mag niet. Overslaan. + continue; + } + else if ((eenheid == 0) && ins_srtcontrole_mode == 0 && // Geldt alleen voor momentmodus. + (deelsrtcontrole_hourtime == new Date(new Date(ins_deelsrtcontrole_datum_max).setMinutes(0,0,0)).getTime())) + { // In dezelfde minuut (tijdstip) mag niet. Overslaan. + continue; + } + else if (new Date(deelsrtcontrole_datum.setSeconds(0, 0)).getTime() == new Date(new Date(ins_deelsrtcontrole_datum_max)).getTime() && + ins_srtcontrole_mode == 1) + { // Een inspectie doen op dezelfde datumtijd (controledatum hetzelfde) mag niet omdat je daarna dan niet meer de volgende inspectie kunt doen. + // De geplande _org tijd is dan hetzelfde als de laatste inspectie omdat de volgende inspectie dan niet opgeschoven is. + // Inspecties op dezelfde datumtijd moeten dus afgevangen worden. + // Dit kan alleen voorkomen in de interval mode. + continue; + } + + if (!this_ins.canInspClose && !(this_ins.canInspFinish || this_ins.canInspFinishMjb)) + { // Ik heb geen Close (gereedmelden/afronden) rechten of laatste inspectie is niet verwerkt (dan moet ins_inspect_finish.asp aangeroepen worden). Overslaan. + continue; + } + else if (ins_deelsrtcontrole_status >= 0 && ins_deelsrtcontrole_status != 6) + dlsrtcont_key = ins_deelsrtcontrole_key; + } + + if (savemode == "E") // Wijzigen. + { // Dit is al gecontroleerd in ins_edit_inspect.asp. Hier voor de veiligheid opnieuw controleren is niet verkeerd. + if (!this_ins.canInspEdit) + { // Ik heb geen Edit rechten. + continue; + } + else + dlsrtcont_key = ins_deelsrtcontrole_key; + + // De uitvoerdatum/inspectiedatum moet vallen tussen de uitvoerdatum/inspectiedatum van de vorige en volgende inspectie. + // De edit mode zorgt ervoor dat er alleen juiste inspectiedatums gekozen kunnen worden, maar het is goed dat het hier ook nog getest wordt. + var aanmaakdatum = ins_deel_aanmaak; + var minDate = new Date(); + var maxDate = new Date(); + if (ins_deelsrtcontrole_status >= 5 && getDeelsrtcontroleDate) + { + // Vooralsnog kan inspectiedatum niet aangepast worden als de eenheid uren(0) is (readonly). + sql = "SELECT MAX(idsc.ins_deelsrtcontrole_datum) lastinspectdatum" + + " , MAX(idsc.ins_deelsrtcontrole_datum + 1) dag_na_lastinspectdatum" + + " , CASE" + + " WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar. + + " THEN 1" // Dag, maand of jaar. + + " ELSE 0" // Tijd. + + " END dmj_eenheid" + + " , isc.ins_srtcontrole_mode" + + " FROM ins_deelsrtcontrole idsc" + + " , ins_srtcontrole isc" + + " , ins_srtcontroledl_xcp xcp" + + " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key" + + " AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)" + + " AND idsc.ins_deel_key = xcp.ins_deel_key(+)" + + " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0" + + " AND idsc.ins_deel_key IN (" + ins_key_arr[i] + ")" + + " AND idsc.ins_srtcontrole_key IN (" + srtcont_key_arr[i] + ")" + + " AND ins_deelsrtcontrole_key < " + dlsrtcont_key + + " AND idsc.ins_scenario_key = 1" // Status >= 0 dus kan geen scenario zijn. + + " AND xcp.ins_scenario_key(+) = 1" // Status >= 0 dus kan geen scenario zijn. + + " GROUP BY isc.ins_srtcontrole_mode" + + " , xcp.ins_srtcontroledl_xcp_eenheid" + + " , isc.ins_srtcontrole_eenheid"; + var oRs = Oracle.Execute(sql); + if (!oRs.eof && oRs("lastinspectdatum").Value != null) + { + lastinspectdatum = new Date(oRs("lastinspectdatum").Value); // Kan uiterlijk vandaag zijn. + dag_na_lastinspectdatum = new Date(oRs("dag_na_lastinspectdatum").Value); // Kan uiterlijk morgen zijn. + dmj_eenheid = oRs("dmj_eenheid").Value; + mode = oRs("ins_srtcontrole_mode").Value; + if (mode == 0) + // Momentmode. + minDate = dmj_eenheid == 1? new Date(dag_na_lastinspectdatum.midnight()) : lastinspectdatum; + else + // Intervalmode. + minDate = lastinspectdatum; + } + else + minDate = aanmaakdatum; + + // Vooralsnog kan inspectiedatum niet aangepast worden als de eenheid uren(0) is (readonly). + sql = "SELECT MIN(COALESCE(idsc.ins_deelsrtcontrole_datum, ins_deelsrtcontrole_plandatum)) firstinspectdatum" + + " , MIN(COALESCE(idsc.ins_deelsrtcontrole_datum, ins_deelsrtcontrole_plandatum) - 1) dag_voor_firstinspectdatum" + + " , CASE" + + " WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar. + + " THEN 1" // Dag, maand of jaar. + + " ELSE 0" // Tijd. + + " END dmj_eenheid" + + " , isc.ins_srtcontrole_mode" + + " FROM ins_deelsrtcontrole idsc" + + " , ins_srtcontrole isc" + + " , ins_srtcontroledl_xcp xcp" + + " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key" + + " AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)" + + " AND idsc.ins_deel_key = xcp.ins_deel_key(+)" + + " AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0" + + " AND idsc.ins_deel_key IN (" + ins_key_arr[i] + ")" + + " AND idsc.ins_srtcontrole_key IN (" + srtcont_key_arr[i] + ")" + + " AND ins_deelsrtcontrole_key > " + dlsrtcont_key + + " AND idsc.ins_scenario_key = 1" // Status >= 0 dus kan geen scenario zijn. + + " AND xcp.ins_scenario_key(+) = 1" // Status >= 0 dus kan geen scenario zijn. + + " GROUP BY isc.ins_srtcontrole_mode" + + " , xcp.ins_srtcontroledl_xcp_eenheid" + + " , isc.ins_srtcontrole_eenheid"; + oRs = Oracle.Execute(sql); + if (!oRs.eof) + { + firstinspectdatum = new Date(oRs("firstinspectdatum").Value); // Kan uiterlijk vandaag zijn. + dag_voor_firstinspectdatum = new Date(oRs("dag_voor_firstinspectdatum").Value); // Kan uiterlijk morgen zijn. + dmj_eenheid = oRs("dmj_eenheid").Value; + mode = oRs("ins_srtcontrole_mode").Value; + if (mode == 0) + // Momentmode. + maxDate = dmj_eenheid == 1? new Date(dag_voor_firstinspectdatum.setHours(23,59,59,99)) : firstinspectdatum; + else + // Intervalmode. + maxDate = firstinspectdatum; + } + //else //maxDate = new Date(); + oRs.Close(); + + // Huidige inspectie moet tussen voorgaande en volgende inspectie inliggen. + if (deelsrtcontrole_datum.getTime() <= minDate.getTime() || deelsrtcontrole_datum.getTime() >= maxDate.getTime()) + { // De uitvoerdatum/inspectiedatum valt niet tussen de uitvoerdatum/inspectiedatum van de vorige en volgende inspectie. + continue; + } + } + } + + ingesloten.push({ins_key: ins_key_arr[i], srtcont_key: srtcont_key_arr[i], dlsrtcont_key: dlsrtcont_key, scen_key: (scen_key_arr.length > 0? scen_key_arr[i] : 1), + inspectiemode: ins_srtcontrole_mode, inspectiestatus: ins_deelsrtcontrole_status, ins_deel_aanmaak: ins_deel_aanmaak, + disc_oms: disc_oms, startdatum: ins_startdatum, hascontroles: hascontroles}); + tobehandled++; } - for (var i = 0; i < ingesloten.length; i++) - { // Ik mag een planrecord aanmaken anders was het object niet toegevoegd aan ingesloten (hierboven getest). - // Zetten van de status en afhandelen van de tracking van het starten. - // Eerst maar eens een inspectie record aanmaken. - // Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen? - var sql = "SELECT ins_deelsrtcontrole_datum" + if (tobehandled == 0 && silent) + { + Response.Clear(); + Response.Write(JSON.stringify({ success: false, savemode: savemode, warning: "" })); + Response.End; + } + else + user.anything_todo_or_abort(tobehandled > 0); // We klagen niet over enkele wel en enkele niet + + function saveFlexKenmerkenInspection(pdlsrtcont_key, pinsPresent, pdelete) + { + // HIER WORDEN DE SAVEFLEXKENMERKEN GEREGELD + if (pdelete) + currentKenmerkenSQL = "SELECT 1 FROM DUAL WHERE 1 = 0"; // Geen flexkenmerken opslaan en alle waarden verwijderen. + else + currentKenmerkenSQL = " SELECT kd.ins_kenmerk_key" + + " , kd.ins_kmdeelsrtcontr_waarde" + + " FROM ins_kmdeelsrtcontr kd" + + " , ins_kenmerk k" + + " WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key" + + " AND kd.ins_kmdeelsrtcontr_verwijder IS NULL" + + " AND kd.ins_deelsrtcontrole_key = " + pdlsrtcont_key; + + var ftrack = saveFlexKenmerken( pdlsrtcont_key + , { kenmerkTable: "ins_kmdeelsrtcontr" + , kenmerkParentKey : "ins_deelsrtcontrole_key" + , kenmerkWaarde: "ins_kmdeelsrtcontr_waarde" + , kenmerkKey: "ins_kenmerk_key" + , currentKenmerkenSQL: currentKenmerkenSQL + , requestQF: Request.Form + , isNew: !pinsPresent + , flexPath: "INS/I" + , module: "INS" + } + ); + return ftrack; + } + + + if (savemode == "P") + { // Inplannen inspectie. Er is nog geen inspectierecord aanwezig. + var result = { success: true, plandatum: plandatum, savemode: savemode, warning: "" }; + + if (ingesloten.length == 1) + { // Vindt het ins_srtcontrole_type. + var sql = "SELECT ctr_disc_params_controle_type" + + " FROM ins_srtcontrole isc," + + " ctr_disc_params cdp" + + " WHERE ins_srtcontrole_key = " + ingesloten[0].srtcont_key + + " AND isc.ctr_discipline_key = cdp.ctr_ins_discipline_key"; + var oRs = Oracle.Execute(sql); + result.srtcontrole_type = oRs("ctr_disc_params_controle_type").Value; + + oRs.Close(); + } + + for (var i = 0; i < ingesloten.length; i++) + { // Ik mag een planrecord aanmaken anders was het object niet toegevoegd aan ingesloten (hierboven getest). + // Zetten van de status en afhandelen van de tracking van het starten. + // Eerst maar eens een inspectie record aanmaken. + // Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen? + var sql = "SELECT ins_deelsrtcontrole_datum" + + " FROM ins_deelsrtcontrole idsc" + + " WHERE idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key + + " AND idsc.ins_deel_key = " + ingesloten[i].ins_key + + " AND idsc.ins_scenario_key = " + ingesloten[i].scen_key + + " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL"; + var oRs = Oracle.Execute(sql); + var nextdate = null; + if (!oRs.eof) + { // Bereken de volgende inspectiedatum. Het object is minstens 1 keer geinspecteerd. + sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + + ", " + ingesloten[i].srtcont_key + + ", " + (mjob? ingesloten[i].scen_key : "1") + + ", 1) nextdate FROM DUAL"; + oRsN = Oracle.Execute(sql); + nextdate = new Date(oRsN("nextdate").Value); + oRsN.Close(); + } + oRs.Close(); + //else Er zijn nog geen inspecties geweest voor dit object en er is nog geen plandatum voor dit object ingevuld. + // Volgende inspectiedatum kun je niet berekenen en is dus onbekend (leeg) + + var fields = [{dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key"}, + {dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key}, + {dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key}, + {dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 }, + {dbs: "ins_deelsrtcontrole_status", typ: "key", val: 0}, + {dbs: "prs_perslid_key", typ: "key", val: user_key}, + {dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: plandatum}, + {dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: nextdate} + ]; + + if (mjob && ingesloten[i].scen_key > 1) + fields.push({dbs: "ins_scenario_key", typ: "key", val: ingesloten[i].scen_key}); + + var insIns = buildInsert("ins_deelsrtcontrole", fields); + ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"]; + var err = Oracle.Execute(insIns.sql, true); + if (ingesloten.length == 1) + result.deelsrtcontrole_key = ingesloten[i].dlsrtcont_key; + + if (err.friendlyMsg) + { + result.warning = err.friendlyMsg; + result.success = false; + } + + // Nu nog de status zetten, tracking genereren en notificaties sturen. + ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 0); // Gepland(0). + } + } + else if (savemode == "C") + { // Afmelden inspectie. + var result = { success: true, deelsrtcontrole_datum: deelsrtcontrole_datum, savemode: savemode, warning: "" }; + + for (var i = 0; i < ingesloten.length; i++) + { + // Nieuwe inspectie: de ins_deelsrtcontrole_key is NULL of als deze een waarde heeft dan is de status 0 of 2. + var isNew = ingesloten[i].dlsrtcont_key < 0 || ingesloten[i].inspectiestatus < 5; + // Is er een inspectie (ins_deelsrtcontrole) record aanwezig (ins_deelsrtcontrole_key is NULL). + var insPresent = ingesloten[i].dlsrtcont_key > 0; + + if (isNew) // Nieuwe inspectie: de ins_deelsrtcontrole_key is NULL of als deze een waarde heeft dan is de status 0 of 2. + { // Bepaal de eerste niet successvolle controle methode. Is deze er niet dan kies maar de eerste successvolle controlemode. + sql = "SELECT ins_controlemode_key" + + " , 1" + + " FROM ins_controlemode" + + " WHERE ins_controlemode_success IS NULL" + + " UNION " + + "SELECT ins_controlemode_key" + + " , 2" + + " FROM ins_controlemode" + + " WHERE ins_controlemode_success = 1" + + " ORDER BY 2, 1"; + oRs = Oracle.Execute(sql); + var controlemode = oRs("ins_controlemode_key").Value; + oRs.Close(); + + // Bepaal eenheid van de soort controle. + sql = "SELECT COALESCE((SELECT xcp.ins_srtcontroledl_xcp_eenheid" + + " FROM ins_srtcontroledl_xcp xcp" + + " WHERE ins_deel_key = " + ingesloten[i].ins_key + + " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key + + " AND ins_scenario_key = 1" + + " )" + + " , (SELECT isc.ins_srtcontrole_eenheid" + + " FROM ins_srtcontrole isc" + + " WHERE ins_srtcontrole_key = " + ingesloten[i].srtcont_key + ")) eenheid" + + " FROM DUAL"; + oRs = Oracle.Execute(sql); + var eenheid = oRs("eenheid").Value; + oRs.Close(); + + var firstinspect = false; + // Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen? + sql = "SELECT ins_deelsrtcontrole_datum" + " FROM ins_deelsrtcontrole idsc" + " WHERE idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key + " AND idsc.ins_deel_key = " + ingesloten[i].ins_key - + " AND idsc.ins_scenario_key = " + ingesloten[i].scen_key - + " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL"; - var oRs = Oracle.Execute(sql); - var nextdate = null; - if (!oRs.eof) - { // Bereken de volgende inspectiedatum. Het object is minstens 1 keer geinspecteerd. - sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key - + ", " + ingesloten[i].srtcont_key - + ", " + (mjob? ingesloten[i].scen_key : "1") - + ", 1) nextdate FROM DUAL"; - oRsN = Oracle.Execute(sql); - nextdate = new Date(oRsN("nextdate").Value); - oRsN.Close(); - } - oRs.Close(); - //else Er zijn nog geen inspecties geweest voor dit object en er is nog geen plandatum voor dit object ingevuld. - // Volgende inspectiedatum kun je niet berekenen en is dus onbekend (leeg) - - var fields = [{dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key"}, - {dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key}, - {dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key}, - {dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 }, - {dbs: "ins_deelsrtcontrole_status", typ: "key", val: 0}, - {dbs: "prs_perslid_key", typ: "key", val: user_key}, - {dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: plandatum}, - {dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: nextdate} - ]; - - if (mjob && ingesloten[i].scen_key > 1) - fields.push({dbs: "ins_scenario_key", typ: "key", val: ingesloten[i].scen_key}); - - var insIns = buildInsert("ins_deelsrtcontrole", fields); - ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"]; - var err = Oracle.Execute(insIns.sql, true); - if (ingesloten.length == 1) - result.deelsrtcontrole_key = ingesloten[i].dlsrtcont_key; - - if (err.friendlyMsg) - { - result.warning = err.friendlyMsg; - result.success = false; - } - - // Nu nog de status zetten, tracking genereren en notificaties sturen. - ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 0); // Gepland(0). - } -} -else if (savemode == "C") -{ // Afmelden inspectie. - var result = { success: true, deelsrtcontrole_datum: deelsrtcontrole_datum, savemode: savemode, warning: "" }; - - for (var i = 0; i < ingesloten.length; i++) - { - // Nieuwe inspectie: de ins_deelsrtcontrole_key is NULL of als deze een waarde heeft dan is de status 0 of 2. - var isNew = ingesloten[i].dlsrtcont_key < 0 || ingesloten[i].inspectiestatus < 5; - // Is er een inspectie (ins_deelsrtcontrole) record aanwezig (ins_deelsrtcontrole_key is NULL). - var insPresent = ingesloten[i].dlsrtcont_key > 0; - - if (isNew) // Nieuwe inspectie: de ins_deelsrtcontrole_key is NULL of als deze een waarde heeft dan is de status 0 of 2. - { // Bepaal de eerste niet successvolle controle methode. Is deze er niet dan kies maar de eerste successvolle controlemode. - sql = "SELECT ins_controlemode_key" - + " , 1" - + " FROM ins_controlemode" - + " WHERE ins_controlemode_success IS NULL" - + " UNION " - + "SELECT ins_controlemode_key" - + " , 2" - + " FROM ins_controlemode" - + " WHERE ins_controlemode_success = 1" - + " ORDER BY 2, 1"; - oRs = Oracle.Execute(sql); - var controlemode = oRs("ins_controlemode_key").Value; - oRs.Close(); - - // Bepaal eenheid van de soort controle. - sql = "SELECT COALESCE((SELECT xcp.ins_srtcontroledl_xcp_eenheid" - + " FROM ins_srtcontroledl_xcp xcp" - + " WHERE ins_deel_key = " + ingesloten[i].ins_key - + " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key - + " AND ins_scenario_key = 1" - + " )" - + " , (SELECT isc.ins_srtcontrole_eenheid" - + " FROM ins_srtcontrole isc" - + " WHERE ins_srtcontrole_key = " + ingesloten[i].srtcont_key + ")) eenheid" - + " FROM DUAL"; - oRs = Oracle.Execute(sql); - var eenheid = oRs("eenheid").Value; - oRs.Close(); - - var firstinspect = false; - // Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen? - sql = "SELECT ins_deelsrtcontrole_datum" - + " FROM ins_deelsrtcontrole idsc" - + " WHERE idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key - + " AND idsc.ins_deel_key = " + ingesloten[i].ins_key - + " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL" - + " AND idsc.ins_scenario_key = 1"; // Afmelden inspectie. - oRs = Oracle.Execute(sql); - if (oRs.eof) - { // Er zijn nog geen inspecties geweest voor dit object. - // Volgende inspectiedatum kun je niet berekenen - // De eerstvolgende inspectiedatum gelijk aan de controledatum stellen. - firstinspect = true; - nextdate = new Date(deelsrtcontrole_datum); - oRs.Close(); - } - else - { // Bereken de volgende inspectiedatum. - // Alleen Active Situatie (AS) soort controle's kunnen afgemeld worden dus voor scenario key moet "null" genomen worden. - sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1, 1) nextdate FROM DUAL" + + " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL" + + " AND idsc.ins_scenario_key = 1"; // Afmelden inspectie. oRs = Oracle.Execute(sql); - nextdate = new Date(oRs("nextdate").Value); - oRs.Close(); - } - - var isPlanned = false; - if (insPresent) - { - // Is er een plandatum? Dan is dit de volgende inspectiedatum. - sql = "SELECT ins_deelsrtcontrole_plandatum" - + " FROM ins_deelsrtcontrole idsc" - + " WHERE idsc.ins_deelsrtcontrole_status <= 5" - + " AND idsc.ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key - + " AND idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key - + " AND idsc.ins_deel_key = " + ingesloten[i].ins_key; - oRs = Oracle.Execute(sql); - - if (!oRs.eof && oRs("ins_deelsrtcontrole_plandatum").Value != null) - { - // De plandatum is de volgende inspectiedatum - // Als het de allereerste inspectie is dan is er nooit sprake van isPlanned. - isPlanned = !firstinspect; + if (oRs.eof) + { // Er zijn nog geen inspecties geweest voor dit object. + // Volgende inspectiedatum kun je niet berekenen + // De eerstvolgende inspectiedatum gelijk aan de controledatum stellen. + firstinspect = true; + nextdate = new Date(deelsrtcontrole_datum); + oRs.Close(); + } + else + { // Bereken de volgende inspectiedatum. + // Alleen Active Situatie (AS) soort controle's kunnen afgemeld worden dus voor scenario key moet "null" genomen worden. + sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1, 1) nextdate FROM DUAL" + oRs = Oracle.Execute(sql); + nextdate = new Date(oRs("nextdate").Value); + oRs.Close(); } - oRs.Close(); - } - // Truncate datums op de dag of het uur afhankelijk van de eenheid. - if (eenheid == 0) - { - var nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0)); - var deelsrtcontrole_datum_trunc = new Date(new Date(deelsrtcontrole_datum).setMinutes(0, 0, 0)); - } - else - { - var nextdate_trunc = new Date(nextdate.midnight()); - var deelsrtcontrole_datum_trunc = new Date(deelsrtcontrole_datum.midnight()); - } - - // De periodieke taken direct afronden indien mogelijk. - var hasActionFinish = false; - if (finish) - { // Wel even checken of de actie "Afronden" is ingeschakeld voor de periodiek taak of dat het een mjob taak is. - ingesloten[i].srtcont_key - sql = "SELECT ins_srtcontrole_options" - + " , ctr_ismjob" - + " FROM ins_v_defined_inspect_xcp" - + " WHERE ins_deel_key = " + ingesloten[i].ins_key - + " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key - + " AND ins_scenario_key = " + ingesloten[i].scen_key; - oRs = Oracle.Execute(sql); - hasActionFinish = (oRs("ins_srtcontrole_options").Value & 8) == 8 || oRs("ctr_ismjob").Value == 1; - } - - // Afhankelijk van de modus de inspectie(s) opslaan. - if (ingesloten[i].inspectiemode == 0) - { // Moment modus - // De laatste datum die opgeslagen wordt is uiterlijk de opgegeven controledatum - // De trunc waarde van de controle datum gebruiken. - var firstone = true; - while (isPlanned || (!isPlanned && nextdate_trunc <= deelsrtcontrole_datum_trunc)) + var isPlanned = false; + if (insPresent) { - var fields = [ { dbs: "prs_perslid_key", typ: "key", val: user_key, track: L("lcl_name"), foreign: "prs_perslid" }, + // Is er een plandatum? Dan is dit de volgende inspectiedatum. + sql = "SELECT ins_deelsrtcontrole_plandatum" + + " FROM ins_deelsrtcontrole idsc" + + " WHERE idsc.ins_deelsrtcontrole_status <= 5" + + " AND idsc.ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key + + " AND idsc.ins_srtcontrole_key = " + ingesloten[i].srtcont_key + + " AND idsc.ins_deel_key = " + ingesloten[i].ins_key; + oRs = Oracle.Execute(sql); + + if (!oRs.eof && oRs("ins_deelsrtcontrole_plandatum").Value != null) + { + // De plandatum is de volgende inspectiedatum + // Als het de allereerste inspectie is dan is er nooit sprake van isPlanned. + isPlanned = !firstinspect; + } + oRs.Close(); + } + + // Truncate datums op de dag of het uur afhankelijk van de eenheid. + if (eenheid == 0) + { + var nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0)); + var deelsrtcontrole_datum_trunc = new Date(new Date(deelsrtcontrole_datum).setMinutes(0, 0, 0)); + } + else + { + var nextdate_trunc = new Date(nextdate.midnight()); + var deelsrtcontrole_datum_trunc = new Date(deelsrtcontrole_datum.midnight()); + } + + // De periodieke taken direct afronden indien mogelijk. + var hasActionFinish = false; + if (finish) + { // Wel even checken of de actie "Afronden" is ingeschakeld voor de periodiek taak of dat het een mjob taak is. + ingesloten[i].srtcont_key + sql = "SELECT ins_srtcontrole_options" + + " , ctr_ismjob" + + " FROM ins_v_defined_inspect_xcp" + + " WHERE ins_deel_key = " + ingesloten[i].ins_key + + " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key + + " AND ins_scenario_key = " + ingesloten[i].scen_key; + oRs = Oracle.Execute(sql); + hasActionFinish = (oRs("ins_srtcontrole_options").Value & 8) == 8 || oRs("ctr_ismjob").Value == 1; + } + + // Afhankelijk van de modus de inspectie(s) opslaan. + if (ingesloten[i].inspectiemode == 0) + { // Moment modus + // De laatste datum die opgeslagen wordt is uiterlijk de opgegeven controledatum + // De trunc waarde van de controle datum gebruiken. + var firstone = true; + while (isPlanned || (!isPlanned && nextdate_trunc <= deelsrtcontrole_datum_trunc)) + { + var fields = [ { dbs: "prs_perslid_key", typ: "key", val: user_key, track: L("lcl_name"), foreign: "prs_perslid" }, + { dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") }, // De controledatum met tijd opslaan. + { dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: nextdate } // De orginele controledatum met tijd opslaan. Kan al gevuld zijn met dezelfde waarde. + ]; + if (!insPresent) + { // Er is nog geen inspectie record aangemaakt. De volgende velden dienen dan nog ingevuld te worden. + fields.push({ dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key }); + fields.push({ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key }); + fields.push({ dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" }); + } + + // Kan moeilijk bepalen of dit de laatste inspectie is in de reeks omdat huidige inspectie nog niet opgeslagen is (Veel uitrekenwerk). + // Gemakkelijker is om altijd de niet succesvolle controlemode op te slaan. + // Na afloop van de while lus kan dan de controlemode van de laatst opgeslagen inspectie goed gezet worden. + fields.push({ dbs: "ins_controlemode_key", typ: "key", val: controlemode, track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" } ); // Controlemode die niet succesvol is + + if (insPresent && firstone) // Alleen voor de alle eerste inspectie kan een inspectie record aanwezig zijn. + { // Er is al een inspectie record (ins_deelsrtcontrole) aangemaakt. De status is Gepland(0) of In behandeling(2). + // Plandatum kan gevuld blijven met de huidige waarde. + var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields); + var err = Oracle.Execute(insUpd.sql, true); + } + else + { // Er is nog geen inspectie record aangemaakt. + if (!firstone) + ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 6); // Vorige inspectie record Afronden(6). + fields.push({dbs: "ins_deelsrtcontrole_status", typ: "key", val: (finish && hasActionFinish? 6: 5)}); + var insIns = buildInsert("ins_deelsrtcontrole", fields); + ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"]; + var err = Oracle.Execute(insIns.sql, true); + } + result.deelsrtcontrole_key = ingesloten[i].dlsrtcont_key; + + if (err.friendlyMsg) + { + result.warning = err.friendlyMsg; + result.success = false; + break; + } + + // Nu nog de status zetten, tracking genereren en notificaties sturen. + ins.setinspectstatus(ingesloten[i].dlsrtcont_key, (finish && hasActionFinish? 6: 5)); // Afgemeld(5), History/Verwerkt(6). + + isPlanned = false; + insPresent = false; // Als er terug in de while lus wordt gesprongen is er geen inspectie record aanwezig. + firstone = false; + + // Bereken de volgende inspectiedatum. + // De functie ins.nextcyclusdate levert de volgende inspectie datum met tijd op onafhankelijk van de eenheid. + // Alleen Active Situatie (AS) soort controle's kunnen afgemeld worden dus voor scenario key moet "null" genomen worden. + sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1, 1) nextdate FROM DUAL" + var oRs = Oracle.Execute(sql); + nextdate = new Date(oRs("nextdate").Value); + oRs.Close(); + + if (eenheid == 0) + nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0)); + else + nextdate_trunc = new Date(nextdate.midnight()); + } + if (!firstone) + { // De controlemode en de opmerking van de laatste inspectie nog even op de aangegeven waarde zetten (i.p.v. niet succes waarde (controlemode) en lege waarde (opmerking)). + var fields = [ { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" }, + { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 } ]; + var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + result.deelsrtcontrole_key, fields); + var err = Oracle.Execute(insUpd.sql, true); + } + } + else + { // Interval modus + var fields = [ { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 }, + { dbs: "prs_perslid_key", typ: "key", val: user_key, track: L("lcl_name"), foreign: "prs_perslid" }, { dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") }, // De controledatum met tijd opslaan. + { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" }, { dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: nextdate } // De orginele controledatum met tijd opslaan. Kan al gevuld zijn met dezelfde waarde. ]; if (!insPresent) @@ -620,24 +826,17 @@ else if (savemode == "C") fields.push({ dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key }); fields.push({ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key }); fields.push({ dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" }); + fields.push({ dbs: "ins_deelsrtcontrole_status", typ: "key", val: (finish && hasActionFinish? 6: 5) }); } - // Kan moeilijk bepalen of dit de laatste inspectie is in de reeks omdat huidige inspectie nog niet opgeslagen is (Veel uitrekenwerk). - // Gemakkelijker is om altijd de niet succesvolle controlemode op te slaan. - // Na afloop van de while lus kan dan de controlemode van de laatst opgeslagen inspectie goed gezet worden. - fields.push({ dbs: "ins_controlemode_key", typ: "key", val: controlemode, track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" } ); // Controlemode die niet succesvol is - - if (insPresent && firstone) // Alleen voor de alle eerste inspectie kan een inspectie record aanwezig zijn. - { // Er is al een inspectie record (ins_deelsrtcontrole) aangemaakt. De status is Gepland(0) of In behandeling(2). + if (insPresent) + { // Er is al een inspectie record (ins_deelsrtcontrole) aangemaakt. De status is Gepland(0) of In behandeling(2) // Plandatum kan gevuld blijven met de huidige waarde. var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields); var err = Oracle.Execute(insUpd.sql, true); } else { // Er is nog geen inspectie record aangemaakt. - if (!firstone) - ins.setinspectstatus(ingesloten[i].dlsrtcont_key, 6); // Vorige inspectie record Afronden(6). - fields.push({dbs: "ins_deelsrtcontrole_status", typ: "key", val: (finish && hasActionFinish? 6: 5)}); var insIns = buildInsert("ins_deelsrtcontrole", fields); ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"]; var err = Oracle.Execute(insIns.sql, true); @@ -655,294 +854,229 @@ else if (savemode == "C") ins.setinspectstatus(ingesloten[i].dlsrtcont_key, (finish && hasActionFinish? 6: 5)); // Afgemeld(5), History/Verwerkt(6). isPlanned = false; - insPresent = false; // Als er terug in de while lus wordt gesprongen is er geen inspectie record aanwezig. - firstone = false; - - // Bereken de volgende inspectiedatum. - // De functie ins.nextcyclusdate levert de volgende inspectie datum met tijd op onafhankelijk van de eenheid. - // Alleen Active Situatie (AS) soort controle's kunnen afgemeld worden dus voor scenario key moet "null" genomen worden. - sql = "SELECT ins.nextcyclusdate (" + ingesloten[i].ins_key + ", " + ingesloten[i].srtcont_key + ", 1, 1) nextdate FROM DUAL" - var oRs = Oracle.Execute(sql); - nextdate = new Date(oRs("nextdate").Value); - oRs.Close(); - - if (eenheid == 0) - nextdate_trunc = new Date(new Date(nextdate).setMinutes(0, 0, 0)); - else - nextdate_trunc = new Date(nextdate.midnight()); - } - if (!firstone) - { // De controlemode en de opmerking van de laatste inspectie nog even op de aangegeven waarde zetten (i.p.v. niet succes waarde (controlemode) en lege waarde (opmerking)). - var fields = [ { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" }, - { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 } ]; - var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + result.deelsrtcontrole_key, fields); - var err = Oracle.Execute(insUpd.sql, true); } } else - { // Interval modus - var fields = [ { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 }, - { dbs: "prs_perslid_key", typ: "key", val: user_key, track: L("lcl_name"), foreign: "prs_perslid" }, - { dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") }, // De controledatum met tijd opslaan. + { // uitgevoerde inspectie. + // Datum kan niet meer aangepast worden. + var fields = [ { dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key }, + { dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key }, { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" }, - { dbs: "ins_deelsrtcontrole_datum_org", typ: "datetime", val: nextdate } // De orginele controledatum met tijd opslaan. Kan al gevuld zijn met dezelfde waarde. + { dbs: "prs_perslid_key", typ: "key", val: user_key } ]; - if (!insPresent) - { // Er is nog geen inspectie record aangemaakt. De volgende velden dienen dan nog ingevuld te worden. - fields.push({ dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key }); - fields.push({ dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key }); - fields.push({ dbs: "ins_deelsrtcontrole_key", typ: "key", seq: "ins_s_ins_deelsrtcontrole_key" }); - fields.push({ dbs: "ins_deelsrtcontrole_status", typ: "key", val: (finish && hasActionFinish? 6: 5) }); - } - if (insPresent) - { // Er is al een inspectie record (ins_deelsrtcontrole) aangemaakt. De status is Gepland(0) of In behandeling(2) - // Plandatum kan gevuld blijven met de huidige waarde. - var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields); - var err = Oracle.Execute(insUpd.sql, true); - } - else - { // Er is nog geen inspectie record aangemaakt. - var insIns = buildInsert("ins_deelsrtcontrole", fields); - ingesloten[i].dlsrtcont_key = insIns.sequences["ins_deelsrtcontrole_key"]; - var err = Oracle.Execute(insIns.sql, true); - } - result.deelsrtcontrole_key = ingesloten[i].dlsrtcont_key; + if (!multi) // Bij multi de opmerking niet opslaan. De opmerking kon ook niet ingevuld worden. + fields.push({ dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 }); + + var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields); + var err = Oracle.Execute(insUpd.sql, true); if (err.friendlyMsg) { result.warning = err.friendlyMsg; result.success = false; - break; } + } - // Nu nog de status zetten, tracking genereren en notificaties sturen. - ins.setinspectstatus(ingesloten[i].dlsrtcont_key, (finish && hasActionFinish? 6: 5)); // Afgemeld(5), History/Verwerkt(6). + var flextrack = []; + // Alleen bij multi worden geen kenmerken opgeslagen. Verder altijd aangeroepen om wijzigingen op te slaan. + if (!multi) + flextrack = saveFlexKenmerkenInspection(ingesloten[0].dlsrtcont_key, insPresent); - isPlanned = false; + if (insPresent && ((insUpd && insUpd.trackarray.length) || flextrack.length)) + ins.trackinspectupdate(ingesloten[i].dlsrtcont_key, L("lcl_ins_controle_is_upd").format(ingesloten[0].disc_oms) + "\n" + insUpd.trackarray.concat(flextrack).join("\n")); + } + } + else if (savemode == "E") + { // Wijzigen inspectie (Edit). Update van de gegevens (plandatum, opmerking en flexkenmerken). + var result = { success: true, plandatum: plandatum, deelsrtcontrole_key: ingesloten[0].dlsrtcont_key, savemode: savemode, warning: "" }; + var isScenario = ingesloten[0].scen_key > 1; + + var mjobdelete = false; + // Kunnen we het plan record verwijderen? + // Het plan record van een scenario mogen we nooit verwijderen. Daar dan de plandatum leeg maken. + if (mjob) + { // Nieuwe plandatum vanuit het mjob scherm ontvangen. + // Als er nog geen controles zijn en de plandatum is in hetzelfde jaar of eerder als de startdatum, dan moet het planrecord verwijderd worden. + if (!hascontroles && ingesloten[0].startdatum != -1 && plandatum.getFullYear() <= ingesloten[0].startdatum.getFullYear()) + mjobdelete = true; + else + { // Als het jaar van de plandatum hetzelfde is als het jaar van de orginele datum, dan kan het plan record verwijderd worden. + + // Is het een mjob discipline en is de eenheid jaarlijks? + sql = "SELECT cdp.ctr_disc_params_ismjob" + + " , cdp.ctr_disc_params_controle_type" + + " , isc.ins_srtcontrole_eenheid" + + " FROM ins_srtcontrole isc" + + " , ctr_disc_params cdp" + + " WHERE isc.ctr_discipline_key = cdp.ctr_ins_discipline_key" + + " AND isc.ins_srtcontrole_key = " + ingesloten[0].srtcont_key; + oRs = Oracle.Execute(sql); + var ismjob = !oRs.eof && oRs("ctr_disc_params_ismjob").Value == 1; + var ctrcontroletype = oRs("ctr_disc_params_controle_type").Value; // Controle(1), Vervanging(2) en Certificering(3). + var isjaarlijks = oRs("ins_srtcontrole_eenheid").Value == 4; + oRs.Close(); + + // Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen? + var sql = "SELECT ins_deelsrtcontrole_datum" + + " FROM ins_deelsrtcontrole idsc" + + " WHERE idsc.ins_srtcontrole_key = " + ingesloten[0].srtcont_key + + " AND idsc.ins_deel_key = " + ingesloten[0].ins_key + + " AND idsc.ins_scenario_key = " + ingesloten[0].scen_key + + " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL"; // Er is geinspecteerd. + var oRs = Oracle.Execute(sql); + var nextdate = null; + if (!oRs.eof) + { // Bereken de volgende orginele inspectiedatum (nextdate). + sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key + + ", " + ingesloten[0].srtcont_key + + ", " + ingesloten[0].scen_key + + ", 1) nextdate FROM DUAL" + var oRsN = Oracle.Execute(sql); + nextdate = new Date(oRsN("nextdate").Value); + oRsN.Close(); + + // Is jaar plandatum gelijk aan jaar orginele datum? + var plandatum_jaar = plandatum.getFullYear(); + var nextdate_jaar = nextdate.getFullYear(); + + if (ismjob && isjaarlijks && plandatum_jaar == nextdate_jaar) + { // Verwijder het inspectie record en ga verder met het volgende object. + mjobdelete = true; + } + } + //else Er zijn nog geen inspecties geweest voor dit object en er is nog geen plandatum voor dit object ingevuld. + // Volgende inspectiedatum kun je niet berekenen met de functie ins.nextcyclusdate() en is dus onbekend (leeg) + else + { // Vindt het ins_srtcontrole_type. + var sql = "SELECT ctr_disc_params_controle_type" + + " FROM ins_srtcontrole isc," + + " ctr_disc_params cdp" + + " WHERE ins_srtcontrole_key = " + ingesloten[0].srtcont_key + + " AND isc.ctr_discipline_key = cdp.ctr_ins_discipline_key"; + var oRsN = Oracle.Execute(sql); + var srtcontrole_type = oRsN("ctr_disc_params_controle_type").Value; + + var plandatum_jaar = plandatum.getFullYear(); + // De inspectiedatums voor taken die nog nooit een inspectie hebben gehad is voor een Vervanging(2) of Certificering(3) + // n periodes verder dan de registratie/aanmaak datum van het object. + // Voor een controle is er geen inspectiedatum en wordt er dan altijd "Eerste controle" in beeld getoond. + // Ofwel een controle inspectie kun je direct vanaf het aanmaken van het object doen. + // Voor controles(1): + // - Als de planning in het mjb_freeze_year jaar is dan kan het inspectierecord verwijderd worden. + // Voor Vervanging(2) en Certificering(3): + // - Valt de laatste niet gedane inspectiedatum tussen of in het mjb_start_year en het mjb_freeze_year, + // dan is mjb_freeze_year het inspectie jaar. + // Als de planning dan in het inspectie jaar (mjb_freeze_year) is, dan kan het inspectierecord verwijderd worden. + // - Valt de laatste niet gedane inspectiedatum NIET tussen of in het mjb_start_year en het mjb_freeze_year, + // dan is de laatste niet gedane inspectiedatum + periode het inspectie jaar. + // Als de planning dan in hetzelfde jaar als het inspectie jaar (laatste + periode) is, dan kan het inspectierecord verwijderd worden. + if (ismjob && isjaarlijks) + { + if (srtcontrole_type == 1 && plandatum_jaar == S("mjb_freeze_year")) // Controles(1). + mjobdelete = true; + else if (srtcontrole_type == 2 || srtcontrole_type == 3) // Vervanging(2) of Certificering(3). + { // Bereken de volgende inspectiedatum. + // Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet 1 (of null) genomen worden. + sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key + + " , " + ingesloten[0].srtcont_key + + " , " + ingesloten[0].scen_key + + " , 0) nextdate" // 1-ste vandaag of in de toekomst(0). + + " , xcp.ins_srtcontrole_periode" + + " FROM ins_v_defined_inspect_xcp xcp" + + " WHERE xcp.ins_deel_key = " + ingesloten[0].ins_key + + " AND xcp.ins_srtcontrole_key = " + ingesloten[0].srtcont_key + + " AND xcp.ins_scenario_key = " + ingesloten[0].scen_key + oRsN = Oracle.Execute(sql); + var nextdate = new Date(oRsN("nextdate").Value); + var nextdate_jaar = nextdate.getFullYear(); + var periode = oRsN("ins_srtcontrole_periode").Value + var nextdate_jaar_before = nextdate_jaar - periode + + // Als nextdate_jaar_before of nextdate_jaar binnen mjb_start_year en mjb_freeze_year valt en de planning in het mjb_freeze_year jaar is + // of + // als nextdate_jaar_before voor het mjb_start_year jaar valt en nextdate_jaar na het mjb_freeze_year jaar + // dan kan het inspectie record verwijderd worden. + if ((((nextdate_jaar_before >= S("mjb_start_year") && nextdate_jaar_before <= S("mjb_freeze_year")) || + (nextdate_jaar >= S("mjb_start_year") && nextdate_jaar <= S("mjb_freeze_year"))) && + plandatum_jaar == S("mjb_freeze_year")) || + ((nextdate_jaar_before < S("mjb_start_year") && nextdate_jaar > S("mjb_freeze_year")) && + plandatum_jaar == nextdate_jaar) + ) + mjobdelete = true; + } + } + oRsN.Close(); + } + oRs.Close(); } } + + if (mjobdelete && !isScenario) + { // Verwijder het inspectie record. + var sql = "DELETE FROM ins_deelsrtcontrole" + + " WHERE ins_deel_key = " + ingesloten[0].ins_key + + " AND ins_srtcontrole_key = " + ingesloten[0].srtcont_key + + " AND ins_deelsrtcontrole_status = 0" + + " AND ins_scenario_key = " + ingesloten[0].scen_key; + var err = Oracle.Execute(sql, true); + } else - { // uitgevoerde inspectie. - // Datum kan niet meer aangepast worden. - var fields = [ { dbs: "ins_deel_key", typ: "key", val: ingesloten[i].ins_key }, - { dbs: "ins_srtcontrole_key", typ: "key", val: ingesloten[i].srtcont_key }, - { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" }, - { dbs: "prs_perslid_key", typ: "key", val: user_key } - ]; + { + var fields = [ { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 } + ]; - if (!multi) // Bij multi de opmerking niet opslaan. De opmerking kon ook niet ingevuld worden. - fields.push({ dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 }); + if (isScenario && mjobdelete) + fields.push( { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: "", track: L("lcl_opdr_plandate") } ); + else if (mjob) + fields.push( { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: plandatum, track: L("lcl_opdr_plandate") } ); + else // Periodieke taken. + fields.push( { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", frm: "plandatum", track: L("lcl_opdr_plandate") } ); - var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[i].dlsrtcont_key, fields); + if (getDeelsrtcontroleDate) + fields.push( { dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") } ); + + if (canMsuEdit) + fields.push( { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" } ); + + var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[0].dlsrtcont_key, fields); var err = Oracle.Execute(insUpd.sql, true); + } - if (err.friendlyMsg) + if (err.friendlyMsg) + { + result.warning = err.friendlyMsg; + result.success = false; + } + + var flextrack = saveFlexKenmerkenInspection(ingesloten[0].dlsrtcont_key, insPresent, mjobdelete); + + if ((!mjobdelete || (isScenario && mjobdelete)) && (insUpd.trackarray.length || flextrack.length)) + ins.trackinspectupdate(ingesloten[0].dlsrtcont_key, L("lcl_ins_controle_is_upd").format(ingesloten[0].disc_oms) + "\n" + insUpd.trackarray.concat(flextrack).join("\n")); + } + else if (savemode == "D") + { + var result = { success: true, savemode: savemode, warning: "" }; + var sql = ""; + var err; + for (var i = 0; i < ingesloten.length; i++) + { + sql = "DELETE FROM ins_deelsrtcontrole" + + " WHERE ins_deel_key = " + ingesloten[i].ins_key + + " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key + + " AND ins_deelsrtcontrole_status = 0" + + " AND ins_scenario_key = " + ingesloten[i].scen_key; + + err = Oracle.Execute(sql, true); + + if (err.friendlyMsg && result.success !== false) { result.warning = err.friendlyMsg; result.success = false; } } - - var flextrack = []; - // Alleen bij multi worden geen kenmerken opgeslagen. Verder altijd aangeroepen om wijzigingen op te slaan. - if (!multi) - flextrack = saveFlexKenmerkenInspection(ingesloten[0].dlsrtcont_key, insPresent); - - if (insPresent && ((insUpd && insUpd.trackarray.length) || flextrack.length)) - ins.trackinspectupdate(ingesloten[i].dlsrtcont_key, L("lcl_ins_controle_is_upd").format(ingesloten[0].disc_oms) + "\n" + insUpd.trackarray.concat(flextrack).join("\n")); - } -} -else if (savemode == "E") -{ // Wijzigen inspectie (Edit). Update van de gegevens (plandatum, opmerking en flexkenmerken). - var result = { success: true, plandatum: plandatum, deelsrtcontrole_key: ingesloten[0].dlsrtcont_key, savemode: savemode, warning: "" }; - var isScenario = ingesloten[0].scen_key > 1; - - var mjobdelete = false; - // Kunnen we het plan record verwijderen? - // Het plan record van een scenario mogen we nooit verwijderen. Daar dan de plandatum leeg maken. - if (mjob) - { // Nieuwe plandatum vanuit het mjob scherm ontvangen. - // Als er nog geen controles zijn en de plandatum is in hetzelfde jaar of eerder als de startdatum, dan moet het planrecord verwijderd worden. - if (!hascontroles && ingesloten[0].startdatum != -1 && plandatum.getFullYear() <= ingesloten[0].startdatum.getFullYear()) - mjobdelete = true; - else - { // Als het jaar van de plandatum hetzelfde is als het jaar van de orginele datum, dan kan het plan record verwijderd worden. - - // Is het een mjob discipline en is de eenheid jaarlijks? - sql = "SELECT cdp.ctr_disc_params_ismjob" - + " , cdp.ctr_disc_params_controle_type" - + " , isc.ins_srtcontrole_eenheid" - + " FROM ins_srtcontrole isc" - + " , ctr_disc_params cdp" - + " WHERE isc.ctr_discipline_key = cdp.ctr_ins_discipline_key" - + " AND isc.ins_srtcontrole_key = " + ingesloten[0].srtcont_key; - oRs = Oracle.Execute(sql); - var ismjob = !oRs.eof && oRs("ctr_disc_params_ismjob").Value == 1; - var ctrcontroletype = oRs("ctr_disc_params_controle_type").Value; // Controle(1), Vervanging(2) en Certificering(3). - var isjaarlijks = oRs("ins_srtcontrole_eenheid").Value == 4; - oRs.Close(); - - // Zijn er inspecties geweest voor dit object of is er een plandatum voor dit object ingevuld zodat we de volgende inspectiedatum kunnen berekenen? - var sql = "SELECT ins_deelsrtcontrole_datum" - + " FROM ins_deelsrtcontrole idsc" - + " WHERE idsc.ins_srtcontrole_key = " + ingesloten[0].srtcont_key - + " AND idsc.ins_deel_key = " + ingesloten[0].ins_key - + " AND idsc.ins_scenario_key = " + ingesloten[0].scen_key - + " AND idsc.ins_deelsrtcontrole_datum IS NOT NULL"; // Er is geinspecteerd. - var oRs = Oracle.Execute(sql); - var nextdate = null; - if (!oRs.eof) - { // Bereken de volgende orginele inspectiedatum (nextdate). - sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key - + ", " + ingesloten[0].srtcont_key - + ", " + ingesloten[0].scen_key - + ", 1) nextdate FROM DUAL" - var oRsN = Oracle.Execute(sql); - nextdate = new Date(oRsN("nextdate").Value); - oRsN.Close(); - - // Is jaar plandatum gelijk aan jaar orginele datum? - var plandatum_jaar = plandatum.getFullYear(); - var nextdate_jaar = nextdate.getFullYear(); - - if (ismjob && isjaarlijks && plandatum_jaar == nextdate_jaar) - { // Verwijder het inspectie record en ga verder met het volgende object. - mjobdelete = true; - } - } - //else Er zijn nog geen inspecties geweest voor dit object en er is nog geen plandatum voor dit object ingevuld. - // Volgende inspectiedatum kun je niet berekenen met de functie ins.nextcyclusdate() en is dus onbekend (leeg) - else - { // Vindt het ins_srtcontrole_type. - var sql = "SELECT ctr_disc_params_controle_type" - + " FROM ins_srtcontrole isc," - + " ctr_disc_params cdp" - + " WHERE ins_srtcontrole_key = " + ingesloten[0].srtcont_key - + " AND isc.ctr_discipline_key = cdp.ctr_ins_discipline_key"; - var oRsN = Oracle.Execute(sql); - var srtcontrole_type = oRsN("ctr_disc_params_controle_type").Value; - - var plandatum_jaar = plandatum.getFullYear(); - // De inspectiedatums voor taken die nog nooit een inspectie hebben gehad is voor een Vervanging(2) of Certificering(3) - // n periodes verder dan de registratie/aanmaak datum van het object. - // Voor een controle is er geen inspectiedatum en wordt er dan altijd "Eerste controle" in beeld getoond. - // Ofwel een controle inspectie kun je direct vanaf het aanmaken van het object doen. - // Voor controles(1): - // - Als de planning in het mjb_freeze_year jaar is dan kan het inspectierecord verwijderd worden. - // Voor Vervanging(2) en Certificering(3): - // - Valt de laatste niet gedane inspectiedatum tussen of in het mjb_start_year en het mjb_freeze_year, - // dan is mjb_freeze_year het inspectie jaar. - // Als de planning dan in het inspectie jaar (mjb_freeze_year) is, dan kan het inspectierecord verwijderd worden. - // - Valt de laatste niet gedane inspectiedatum NIET tussen of in het mjb_start_year en het mjb_freeze_year, - // dan is de laatste niet gedane inspectiedatum + periode het inspectie jaar. - // Als de planning dan in hetzelfde jaar als het inspectie jaar (laatste + periode) is, dan kan het inspectierecord verwijderd worden. - if (ismjob && isjaarlijks) - { - if (srtcontrole_type == 1 && plandatum_jaar == S("mjb_freeze_year")) // Controles(1). - mjobdelete = true; - else if (srtcontrole_type == 2 || srtcontrole_type == 3) // Vervanging(2) of Certificering(3). - { // Bereken de volgende inspectiedatum. - // Alleen Active Situatie (AS) soort controle's kunnen gewijzigd worden dus voor scenario key moet 1 (of null) genomen worden. - sql = "SELECT ins.nextcyclusdate (" + ingesloten[0].ins_key - + " , " + ingesloten[0].srtcont_key - + " , " + ingesloten[0].scen_key - + " , 0) nextdate" // 1-ste vandaag of in de toekomst(0). - + " , xcp.ins_srtcontrole_periode" - + " FROM ins_v_defined_inspect_xcp xcp" - + " WHERE xcp.ins_deel_key = " + ingesloten[0].ins_key - + " AND xcp.ins_srtcontrole_key = " + ingesloten[0].srtcont_key - + " AND xcp.ins_scenario_key = " + ingesloten[0].scen_key - oRsN = Oracle.Execute(sql); - var nextdate = new Date(oRsN("nextdate").Value); - var nextdate_jaar = nextdate.getFullYear(); - var periode = oRsN("ins_srtcontrole_periode").Value - var nextdate_jaar_before = nextdate_jaar - periode - - // Als nextdate_jaar_before of nextdate_jaar binnen mjb_start_year en mjb_freeze_year valt en de planning in het mjb_freeze_year jaar is - // of - // als nextdate_jaar_before voor het mjb_start_year jaar valt en nextdate_jaar na het mjb_freeze_year jaar - // dan kan het inspectie record verwijderd worden. - if ((((nextdate_jaar_before >= S("mjb_start_year") && nextdate_jaar_before <= S("mjb_freeze_year")) || - (nextdate_jaar >= S("mjb_start_year") && nextdate_jaar <= S("mjb_freeze_year"))) && - plandatum_jaar == S("mjb_freeze_year")) || - ((nextdate_jaar_before < S("mjb_start_year") && nextdate_jaar > S("mjb_freeze_year")) && - plandatum_jaar == nextdate_jaar) - ) - mjobdelete = true; - } - } - oRsN.Close(); - } - oRs.Close(); - } - } - - if (mjobdelete && !isScenario) - { // Verwijder het inspectie record. - var sql = "DELETE FROM ins_deelsrtcontrole" - + " WHERE ins_deel_key = " + ingesloten[0].ins_key - + " AND ins_srtcontrole_key = " + ingesloten[0].srtcont_key - + " AND ins_deelsrtcontrole_status = 0" - + " AND ins_scenario_key = " + ingesloten[0].scen_key; - var err = Oracle.Execute(sql, true); - } - else - { - var fields = [ { dbs: "ins_deelsrtcontrole_opmerking", typ: "varchar", frm: "opmerk", track: L("lcl_remark"), len: 4000 } - ]; - - if (isScenario && mjobdelete) - fields.push( { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: "", track: L("lcl_opdr_plandate") } ); - else if (mjob) - fields.push( { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", val: plandatum, track: L("lcl_opdr_plandate") } ); - else // Periodieke taken. - fields.push( { dbs: "ins_deelsrtcontrole_plandatum", typ: "datetime", frm: "plandatum", track: L("lcl_opdr_plandate") } ); - - if (getDeelsrtcontroleDate) - fields.push( { dbs: "ins_deelsrtcontrole_datum", typ: "datetime", val: deelsrtcontrole_datum, track: L("lcl_ins_controle_datum") } ); - - if (canMsuEdit) - fields.push( { dbs: "ins_controlemode_key", typ: "key", frm: "sel_controlemode", track: L("lcl_ins_controle_mode"), foreign: "ins_controlemode" } ); - - var insUpd = buildTrackingUpdate("ins_deelsrtcontrole", " ins_deelsrtcontrole_key = " + ingesloten[0].dlsrtcont_key, fields); - var err = Oracle.Execute(insUpd.sql, true); - } - - if (err.friendlyMsg) - { - result.warning = err.friendlyMsg; - result.success = false; - } - - var flextrack = saveFlexKenmerkenInspection(ingesloten[0].dlsrtcont_key, insPresent, mjobdelete); - - if ((!mjobdelete || (isScenario && mjobdelete)) && (insUpd.trackarray.length || flextrack.length)) - ins.trackinspectupdate(ingesloten[0].dlsrtcont_key, L("lcl_ins_controle_is_upd").format(ingesloten[0].disc_oms) + "\n" + insUpd.trackarray.concat(flextrack).join("\n")); -} -else if (savemode == "D") -{ - var result = { success: true, savemode: savemode, warning: "" }; - var sql = ""; - var err; - for (var i = 0; i < ingesloten.length; i++) - { - sql = "DELETE FROM ins_deelsrtcontrole" - + " WHERE ins_deel_key = " + ingesloten[i].ins_key - + " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key - + " AND ins_deelsrtcontrole_status = 0" - + " AND ins_scenario_key = " + ingesloten[i].scen_key; - - err = Oracle.Execute(sql, true); - - if (err.friendlyMsg && result.success !== false) - { - result.warning = err.friendlyMsg; - result.success = false; - } } } Response.Write(JSON.stringify(result)); -Response.End(); %> \ No newline at end of file diff --git a/APPL/INS/ins_inspect_start.asp b/APPL/INS/ins_inspect_start.asp index 48bf8ec10c..ae96e0970f 100644 --- a/APPL/INS/ins_inspect_start.asp +++ b/APPL/INS/ins_inspect_start.asp @@ -61,7 +61,7 @@ if (groupby < 7) var mjbXcped = getFParamInt("mjbXcped", 0) == 1; // Aangepast. // Start building the query to fetch all objects satisfying - var mjbparams = { niveau: groupby, + var mjbparams = { niveau: groupby, // Het niveau (betekenis) van de keys (district(1), gebouw(2), discipline(3), groep(4), objectsoort(5), object(6)) keys: ins_key_arr, scenario: 1, fulldetails: true, @@ -78,114 +78,20 @@ if (groupby < 7) frequentie: frequentie, incbtw: incbtw, toyear: mjb_freeze_year, - groupby: 7, + groupby: 7, // Ik wil alle objecten opvragen. deel: deel, mjbMoved: mjbMoved, mjbFreezed: mjbFreezed, mjbXcped: mjbXcped, - jaren: [mjb_freeze_year] + jaren: [mjb_freeze_year], + freeze: true }; var mjblist_sql = ins.getmjblist_sql(mjbparams); - // De mjblist_sql bevat nu alle objecten (ins_deel_key) van de aangevink regels uit het mjb overzicht. - - var sql = "SELECT xcp.ins_deel_key" - + " , xcp.ins_srtcontrole_key" - + " , result.ins_deelsrtcontrole_status" - + " , " + user_key - + " , CASE" - + " WHEN result.ins_deelsrtcontrole_status IS NOT NULL" - + " THEN (SELECT ins.nextcyclusdate (xcp.ins_deel_key, xcp.ins_srtcontrole_key, 1, 1) FROM DUAL)" - + " ELSE NULL" - + " END nextdate" - + " , result.\"" + mjb_freeze_year + "\" bedrag" - + " , TRUNC(TO_DATE(TO_CHAR(SYSDATE, 'DD-MON') || '-" + mjb_freeze_year + "', 'DD-MON-YYYY'), 'YEAR') freez_date" - + " , CASE" - + " WHEN result.\"" + mjb_freeze_year + "\" = 0 AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" IS NOT NULL AND result.\"" + mjb_freeze_year + "_ORGBEDRAG\" > 0" - + " THEN " + safe.quoted_sql(L("lcl_mjb_performed_high")) - + " ELSE ''" - + " END opm_has_higherprio" // Opmerking als het een hogere prio heeft (has_higherprio) - + " FROM ins_v_defined_inspect_xcp xcp" - + " , ins_v_aanwezigdeel dl" - + " , ins_srtdeel isd" - + " , ins_srtgroep isg" - + " , ins_discipline dd" - + " , alg_district d" - + " , alg_locatie l" - + " , alg_gebouw g" - + " , alg_verdieping v" - + " , alg_ruimte r" - + " , (" + mjblist_sql + ") result" - + " WHERE xcp.ins_deel_key = dl.ins_deel_key" - + " AND dl.ins_srtdeel_key = isd.ins_srtdeel_key" - + " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key" - + " AND isg.ins_discipline_key = dd.ins_discipline_key" - + " AND dl.ins_alg_ruimte_key = r.alg_ruimte_key" - + " AND r.alg_verdieping_key = v.alg_verdieping_key" - + " AND v.alg_gebouw_key = g.alg_gebouw_key" - + " AND g.alg_locatie_key = l.alg_locatie_key" - + " AND d.alg_district_key = l.alg_district_key" - + " AND xcp.ins_deel_key = result.ins_deel_key" - + " AND xcp.ins_srtcontrole_key = result.ins_srtcontrole_key" - // Autorisatie: - // Nu nog even checken of je mag accoderen (Freeze). Stuk voor stuk duurt veel te lang. - // 0) invoerAfterNext is voor mjob (interval modus) altijd waar. - // 1) niet vervallen. - // 2) status <= 0 of status == 6 - // 3) actief object - // 4) hasCTRwrite - // 5) bij instelling "Actieve acties" het vinkje "Starten" aangevinkt. - // 6) geen scenario (scenario_key is 1) - // 7) ismjob - // 8) isFreezeYear - // 9) readuse rechten. - + " AND (xcp.ins_srtcontroledl_xcp_eind IS NULL OR xcp.ins_srtcontroledl_xcp_eind >= SYSDATE)" // 1) Niet vervallen. - + " AND (EXISTS" // 2) Geen controles of laatste controle status 6. - + " (SELECT idsc1.ins_deelsrtcontrole_status" - + " FROM ins_deelsrtcontrole idsc1" - + " WHERE idsc1.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)" - + " FROM ins_deelsrtcontrole idsc2" - + " WHERE idsc2.ins_deel_key = xcp.ins_deel_key" - + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" - + " AND idsc2.ins_scenario_key = xcp.ins_scenario_key)" - + " AND idsc1.ins_deelsrtcontrole_status IN (0, 6))" - + " OR NOT EXISTS" - + " (SELECT idsc2.ins_deelsrtcontrole_key" - + " FROM ins_deelsrtcontrole idsc2" - + " WHERE idsc2.ins_deel_key = xcp.ins_deel_key" - + " AND idsc2.ins_srtcontrole_key = xcp.ins_srtcontrole_key" - + " AND idsc2.ins_scenario_key = xcp.ins_scenario_key))" - + " AND ins_deel_actief = 1" // 3) Actief object. - + " AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key" // 4) hasCTRwrite. - + " FROM fac_v_webgebruiker w" - + " , fac_functie f" - + " WHERE w.fac_functie_key = f.fac_functie_key" - + " AND f.fac_functie_code = 'WEB_CTRUSE'" - + " AND w.fac_gebruiker_prs_level_write < 9" - + " AND w.fac_gebruiker_alg_level_write < 9" - + " AND w.prs_perslid_key = " + user_key + ")" - + " AND BITAND(xcp.ins_srtcontrole_options, 2) = 2" // 5) Het vinkje "Starten" aangevinkt. - + " AND xcp.ins_scenario_key = 1" // 6) Geen scenario. - + " AND xcp.ctr_ismjob = 1" // 7) ismjob. - + " AND result.\"" + mjb_freeze_year + "\" IS NOT NULL"; // 8) isFreezeYear, bedrag in mjb_freeze_year is niet NULL. - - sql = discxalg3d(sql, // 9) 3D-readuse rechten. - "dd.ins_discipline_key", - "d.alg_regio_key", - "d.alg_district_key", - "l.alg_locatie_key", - "g.alg_gebouw_key", - "v.alg_verdieping_key", - "r.alg_ruimte_key", - "WEB_INSUSE", //autfunction, - "", - false); // forwrite => read - - sql += " ORDER BY xcp.ins_deel_key" - + " , xcp.ins_srtcontrole_key"; + // De mjblist_sql bevat nu alle objecten (ins_deel_key) van de aangevinkte regels uit het mjb overzicht en levert voor elk object de waarden voor de insert op. var result = {success: true, multi: multi, start: true }; - var oRs = Oracle.Execute(sql); + var oRs = Oracle.Execute(mjblist_sql); user.anything_todo_or_abort(!oRs.eof); // We klagen niet over enkele wel en enkele niet var insert_sql = "BEGIN "; @@ -195,7 +101,7 @@ if (groupby < 7) var srtcont_key = oRs("ins_srtcontrole_key").Value; var nextdate = oRs("nextdate").Value != null? new Date(oRs("nextdate").Value) : null; var inspstatus = oRs("ins_deelsrtcontrole_status").Value; - var kosten = oRs("bedrag").Value; + var kosten = oRs("freeze_bedrag").Value; var opm_has_higherprio = oRs("opm_has_higherprio").Value; ingesloten.push({ins_key: ins_key, srtcont_key: srtcont_key, dlsrtcont_key: -1, inspectiestatus: inspstatus, kosten: kosten, ismjob: true}); @@ -229,7 +135,7 @@ if (groupby < 7) var err = Oracle.Execute(insert_sql, true); if (err.friendlyMsg) - result.message = err.friendlyMsg + result.message = err.friendlyMsg; for (var i = 0; i < ingesloten.length; i++) { diff --git a/APPL/INS/ins_list.js b/APPL/INS/ins_list.js index 6855db384b..2f013fe791 100644 --- a/APPL/INS/ins_list.js +++ b/APPL/INS/ins_list.js @@ -314,8 +314,11 @@ function insClose(rowArray, isMulti, fromfinish) // Scenario's kunnen niet gestart worden. Hier de scenario's er al uit filteren. if (!rowdata.insScenKey || rowdata.insScenKey == 1) { // Het is geen scenario. De periodieke taak kan gestart worden. De inspectie aan het array toevoegen. - srtcontrolekeyArray[i - deleted] = rowdata.insSrtControleKey; - deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey; + if (groupby == 7) + { + srtcontrolekeyArray[i - deleted] = rowdata.insSrtControleKey; + deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey; + } } else { // Het is een scenario. De ins_key verwijderen uit de lijst. @@ -336,7 +339,24 @@ function insClose(rowArray, isMulti, fromfinish) + "&deelsrtcont_keys=" + deelsrtcontrkeyArray.join(",") + (fromfinish ? "&fromfinish=1" - : ""); + : "") + + "&dist_key=" + dist_key + + "&loc_key=" + loc_key + + "&bld_key=" + bld_key + + "&disc_key=" + disc_key + + "&srtgroep_key=" + srtgroep_key + + "&srtdeel_key=" + srtdeel_key + + "&groep=" + groep + + "&categorie_key=" + categorie_key + + "&srtcontrole=" + srtcontrole + + "&frequentie=" + frequentie + + "&incbtw=" + incbtw + + "&groupby=" + groupby + + "&deel=" + deel + + "&actsit=" + + + "&mjbMoved=" + mjbMoved + + "&mjbFreezed=" + mjbFreezed + + "&mjbXcped=" + mjbXcped; FcltMgr.openDetail(url, L("lcl_ins_stop")); } @@ -358,7 +378,8 @@ function insFinish(rowArray, isMulti) // Scenario's kunnen niet gestart worden. Hier de scenario's er al uit filteren. if (!rowdata.insScenKey || rowdata.insScenKey == 1) { // Het is geen scenario. De periodieke taak kan gestart worden. De inspectie aan het array toevoegen. - deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey; + if (groupby == 7) + deelsrtcontrkeyArray[i - deleted] = rowdata.insDeelSrtContrKey; isc_status = rowdata.ins_status; mustClose = mustClose || (isc_status != 5); } diff --git a/APPL/INS/ins_search.asp b/APPL/INS/ins_search.asp index 4099bdb550..8bc1f2c45f 100644 --- a/APPL/INS/ins_search.asp +++ b/APPL/INS/ins_search.asp @@ -117,7 +117,7 @@ var authparams = user.checkAutorisation(autfunction); $("form[name=u2]").attr("action", "ins_search_list.asp"); } <% } %> -<% if (backo) +<% if (fronto || backo) { %> // Submitten met kenmerken doSubmitWithKenmerken(); @@ -140,7 +140,7 @@ var authparams = user.checkAutorisation(autfunction); return -1; }; -<% if (backo) +<% if (fronto || backo) { %> function myModal() { @@ -664,10 +664,11 @@ var authparams = user.checkAutorisation(autfunction); var buttons = [{title: L("lcl_search"), action: "doSubmit()" }]; if (backo) - { buttons.push ( {title: L("lcl_shared_more"), action:"iface_toggleSecondarySearchblock()", id : "btnMoreLess" } ); + + if (fronto || backo) buttons.push ( {title: L("lcl_obj_advanced"), action:"myModal()", id: "btnAdvanced", xclass: "noxd" } ); - } + CreateButtons(buttons, { entersubmit: true} ); %> diff --git a/APPL/INS/ins_show_deel.asp b/APPL/INS/ins_show_deel.asp index 0aa1fdc926..c90b76e943 100644 --- a/APPL/INS/ins_show_deel.asp +++ b/APPL/INS/ins_show_deel.asp @@ -281,7 +281,7 @@ oRs.Close(); } var buttons = [ ]; - if (this_ins.canChangeOwn) + if (this_ins.canChange || this_ins.canChangeOwn) buttons.push({title: L("lcl_change"), action: "ins_change()", icon: "wijzigen.png" }); if (canMelding) diff --git a/APPL/MGT/ctr_scenario.asp b/APPL/MGT/ctr_scenario.asp index fb54bf3038..7f3bb7b286 100644 --- a/APPL/MGT/ctr_scenario.asp +++ b/APPL/MGT/ctr_scenario.asp @@ -36,8 +36,8 @@ scaffolding(this_model, "modal": true, requires: { js: ["./ctr_scenario.js"] }, no_clone: S("fac_usrrap_mode") != 1, - buttons: [{ title: L("lcl_mjb_inst_scen"), action: "commit_scenario", icon: "plus.png" }, - { title: L("lcl_mjb_copy_current"), action: "copy_current", icon: "delete.png" }] + buttons: [{ title: L("lcl_mjb_inst_scen"), action: "commit_scenario", icon: "doorvoeren.png" }, + { title: L("lcl_mjb_copy_current"), action: "copy_current", icon: "copy.png" }] } }); %> diff --git a/APPL/MJB/mjb_incl_scen_save.asp b/APPL/MJB/mjb_incl_scen_save.asp index 52a76feb36..e516b4b9a4 100644 --- a/APPL/MJB/mjb_incl_scen_save.asp +++ b/APPL/MJB/mjb_incl_scen_save.asp @@ -30,9 +30,21 @@ var scen_key = getFParamInt("scenario"); var totalcopy = getFParamInt("totalcopy", 0) == 1; if (totalcopy) { // 1 Willekeurig object en controle ophalen om straks 1 maal de rechten te checken en in 1 keer een copie te maken van alle controles. + // Alleen kijken naar 1) MJOB objecten. + // 2) de taakcategorieën die CTRUSE schrijf rechten hebben. + // Level of 3D authorization is 3: 3 = Read and Write separately authorizable (Ja/Nee). var sql = "SELECT ins_deel_key" + " , ins_srtcontrole_key" + " FROM ins_v_defined_inspect di" + + " WHERE di.ctr_ismjob = 1" + + " AND EXISTS (SELECT 1" + + " FROM fac_v_webgebruiker w" + + " , fac_functie f" + + " WHERE w.prs_perslid_key = " + user_key + + " AND w.fac_functie_key = f.fac_functie_key" + + " AND ins_discipline_key = di.ctr_discipline_key" + + " AND fac_gebruiker_alg_level_write = -1" + + " AND fac_functie_code = 'WEB_CTRUSE')" + " ORDER BY ins_deel_key DESC" var oRs = Oracle.Execute(sql); var ins_key_arr = [oRs("ins_deel_key").Value]; @@ -107,7 +119,11 @@ result.scen_key = scen_key; for (var i = 0; i < ingesloten.length; i++) { // Toevoegen van de taak voor het object aan het (nieuwe) scenario. - // Als totalcopy dan wordt de for lus 1 maal doorlopen en worden alle controles in 1 keer aangemaakt. + // Alleen MJOB objecten. + // Als totalcopy: + // - dan wordt de for lus 1 maal doorlopen en worden alle controles in 1 keer aangemaakt. + // - dan alleen kijken naar de taakcategorieën die CTRUSE schrijf rechten hebben. + // Level of 3D authorization is 3: 3 = Read and Write separately authorizable (Ja/Nee). sql = "INSERT INTO ins_srtcontroledl_xcp (ins_srtcontroledl_xcp_key" + " , ins_deel_key" + " , ins_srtcontrole_key" @@ -151,7 +167,14 @@ for (var i = 0; i < ingesloten.length; i++) + (!totalcopy ? " AND ins_deel_key = " + ingesloten[i].ins_key + " AND ins_srtcontrole_key = " + ingesloten[i].srtcont_key - : "") + : " AND EXISTS (SELECT 1" + + " FROM fac_v_webgebruiker w" + + " , fac_functie f" + + " WHERE w.prs_perslid_key = " + user_key + + " AND w.fac_functie_key = f.fac_functie_key" + + " AND ins_discipline_key = ctr_discipline_key" + + " AND fac_gebruiker_alg_level_write = -1" + + " AND fac_functie_code = 'WEB_CTRUSE')") + " AND ins_scenario_key = 1" + " AND ctr_ismjob = 1" diff --git a/APPL/MJB/mjb_search_list.asp b/APPL/MJB/mjb_search_list.asp index 247ec3103c..c046eea608 100644 --- a/APPL/MJB/mjb_search_list.asp +++ b/APPL/MJB/mjb_search_list.asp @@ -122,6 +122,7 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol %> diff --git a/APPL/RES/res_search_plan_room.asp b/APPL/RES/res_search_plan_room.asp index 4a47c205d7..23dd0da4f0 100644 --- a/APPL/RES/res_search_plan_room.asp +++ b/APPL/RES/res_search_plan_room.asp @@ -234,7 +234,10 @@ hour_px = res.hour_px(width_px - 400, nr_days); //axis: "xy" }); }); - $("#btnchange").html(L("lcl_res_edit_inplanbord")); + $("#btnchange").html(L("lcl_res_edit_inplanbord")) + .addClass("noHover") + .removeClass("btn_disabled"); // Remove disabled CSS + return true; // But keep button onClick disabled } <% if (autosearch && samedate) { %> diff --git a/APPL/SCF/scaffolding_show.inc b/APPL/SCF/scaffolding_show.inc index 21e1f9f234..a8e43034aa 100644 --- a/APPL/SCF/scaffolding_show.inc +++ b/APPL/SCF/scaffolding_show.inc @@ -144,6 +144,8 @@ function scaffolding_show(model, scf_params) var cnt = oRs(0).Value; oRs.Close(); } + if ("hook_pre_show" in model) + model.hook_pre_show(xxx_data, model.fields); if ("hook_pre_show" in model) model.hook_pre_show(xxx_data, model.fields, scf_params); diff --git a/APPL/Shared/default.csx b/APPL/Shared/default.csx index f0dd8be572..7a7a4c416c 100644 --- a/APPL/Shared/default.csx +++ b/APPL/Shared/default.csx @@ -1355,6 +1355,12 @@ div.buttoncontainer { text-decoration: none; } +#buttons ul li.hasIcon.noHover:hover { + cursor: default; + color: ==buttoncolor==; + background-color:==iconbackgroundcolor==; +} + .btn_disabled { opacity: 0.6; diff --git a/APPL/Shared/default.inc b/APPL/Shared/default.inc index 413e951ab6..e618038b4a 100644 --- a/APPL/Shared/default.inc +++ b/APPL/Shared/default.inc @@ -9,7 +9,7 @@ Note: Sinds 5.2.2 zitten de settings in de database */ -var FCLTVersion="2017.2a"; +var FCLTVersion="2017.2b"; var FCLTMinDatabaseSchema="32"; var custpath = rooturl + "/cust/" + customerId; // path to customer files diff --git a/APPL/Shared/empty.asp b/APPL/Shared/empty.asp index c13938d371..593da373a3 100644 --- a/APPL/Shared/empty.asp +++ b/APPL/Shared/empty.asp @@ -9,6 +9,7 @@ <% if (Request.QueryString.Count == 0) { + var ANONYMOUS_Allowed = 1; FCLTEXPIRES = 8*60; // geen database interactie tenslotte LCL_Disable = 1; } diff --git a/APPL/Shared/resultset_table_v2.inc b/APPL/Shared/resultset_table_v2.inc index 12862d1a12..d9cccc6813 100644 --- a/APPL/Shared/resultset_table_v2.inc +++ b/APPL/Shared/resultset_table_v2.inc @@ -797,6 +797,12 @@ function __rsProcessResultset(processParams) // processParams wordt blind aan al (cnt < S("qp_maxrows2") || isExcel) && // Naar excel altijd alle regels (meer dan S("qp_maxrows2")) weergeven. !oRs.EOF; cnt++) { + if (!Response.IsClientConnected) + { + __Log("Response.IsClientConnected false, Resultset aborted.", "#00FF00"); + Response.End; + } + var oRsFlex = null; if ((isPrinting || isExcel || showProperties) && this.printFlex) { diff --git a/CUST/AAIT/xsl/AAIT.xsl b/CUST/AAIT/xsl/AAIT.xsl index 90e231d8d4..238cbdd3c1 100644 --- a/CUST/AAIT/xsl/AAIT.xsl +++ b/CUST/AAIT/xsl/AAIT.xsl @@ -35,7 +35,7 @@ - + @@ -285,17 +285,17 @@ + Afhandeling melding : + +
- Afhandeling melding : - -
-
+ @@ -326,11 +326,11 @@ - + diff --git a/CUST/MARX/xsl/REMS_GetOpdrachten.xsl b/CUST/MARX/xsl/REMS_GetOpdrachten.xsl new file mode 100644 index 0000000000..f2451c7c32 --- /dev/null +++ b/CUST/MARX/xsl/REMS_GetOpdrachten.xsl @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + +exec_code;ax_supplier_id;mld_melding_externnr;mld_melding_omschrijving;prs_afdeling_externnr;mld_opdr_po_companyid;mld_opdr_opzichter;mld_melding_cust_name;mld_melding_cust_straat;mld_melding_cust_huisnr;mld_melding_cust_huisnr2;mld_melding_cust_postcode;mld_melding_cust_plaats;mld_melding_cust_telefoonnr;mld_melding_cust_mobielnr;mld_melding_cust_email;mld_melding_cust_object_omschr;complexnummer;pandnummer;VGEnummer;mld_melding_memo;mld_opdr_externnr;mld_opdr_ordernr;mld_opdr_datumbegin;mld_opdr_datum_plan;mld_opdr_einddatum;mld_opdr_mat_linenr;mld_opdr_mat_code;mld_opdr_mat_naam;mld_opdr_mat_eenheidcode;mld_opdr_mat_eenheid;mld_opdr_mat_prijs;mld_opdr_mat_aantal;mld_opdr_mat_btwperc;mld_opdr_mat_totaal +1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + + + + + + + + + + + +"" + + + + + "" + + + + + + + + + + @@ + + + + + + + + + + @@ + + + + + + @@ + 3000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + __ + + + + + + + + + + + + + + + + -1 + + + + + + + + + + + + + + 21 + 6 + 0 + + + + + + \ No newline at end of file diff --git a/CUST/NYBU/xsl/verhuur.xsl b/CUST/NYBU/xsl/verhuur.xsl index fe64241683..cfaccae1de 100644 --- a/CUST/NYBU/xsl/verhuur.xsl +++ b/CUST/NYBU/xsl/verhuur.xsl @@ -143,7 +143,7 @@ You need to be present at this time to personally hand in your keys to our Services team.

- When certain data is incorrect or has not reached us yet (possible blanks above) or you would like to change the date/time of the room check, please inform us as soon as possible. Also don’t forget to submit your new address to program management. + When certain data is incorrect or has not reached us yet (possible blanks above) or you would like to change the date/time of the room check, please inform us as soon as possible. Also don’t forget to submit your new address to program management.

Ten weeks after the room check you will receive a final invoice at the forwarding address. On this invoice we will calculate rent, deposit, final cleaning and damages if applicable. @@ -195,8 +195,8 @@ The room is , and is located in the building on floor . The postal address is Nieuw Nyenrode - - , Breukelen. + + , Breukelen. Attached to this e-mail you will find more information about the room that can help you prepare for your stay.

@@ -244,7 +244,7 @@
- + @@ -560,11 +560,22 @@ + + Bijkomende leveringen (incl BTW) + €  + + + + + + + Bijkomende leveringen (incl BTW) €  + @@ -575,15 +586,7 @@ - - - Partner Charge (incl BTW) - €  - - - - - + Totaal @@ -1006,7 +1009,7 @@
  • De huurprijs wordt jaarlijks op 1 juli verhoogd volgens een percentage dat wordt vastgesteld door het ministerie. De verhuurder zal de huurprijsverhoging in de maand mei, direct voorafgaande aan de indexering op 1 juli, schriftelijk aan de medewerker kenbaar maken.
  • Wanneer er wijzigingen optreden (in de kosten) van de huur en of bijkomende leveringen en diensten als bedoeld in artikel 4 lid 2 van deze overeenkomst, zal de verhuurder de in dit artikel bedoelde vergoeding voor faciliteiten overeenkomstig aanpassen, en wel op de eerste van de maand volgend op de maand waarin de wijziging in de kosten zich heeft voorgedaan. Het nieuwe totaalbedrag door de medewerker te voldoen zal, voorafgaande aan de aanpassing van de in lid 2 bedoelde vergoeding en zo spoedig mogelijk nadat de verhuurder met de wijziging bekend is geworden, door de verhuurder schriftelijk aan de medewerker worden medegedeeld.
  • Bij ondertekening van deze overeenkomst is medewerker aan verhuurder een waarborgsom verschuldigd van € 0,00; de waarborgsom dient aan verhuurder te zijn betaald voordat het gehuurde door medewerker wordt betrokken. Bij verlenging van de overeenkomst blijft deze gehandhaafd. Verhuurder zal over dit bedrag aan medewerker geen rente vergoeden.
  • -
  • Bij het verlaten van het gehuurde zal er een eindschoonmaak worden verricht, dit zal verrekend worden met de borg. Dit geldt ook bij verhuizen op de Campus.
  • +
  • Bij het verlaten van het gehuurde zal er een eindschoonmaak worden verricht, dit zal verrekend worden met de borg. Dit geldt ook bij verhuizen op de Campus.
  • diff --git a/CUST/OFWD/oracle.udl b/CUST/OFWD/oracle.udl index 28726dcc93..c31ed2c0c8 100644 Binary files a/CUST/OFWD/oracle.udl and b/CUST/OFWD/oracle.udl differ diff --git a/CUST/PCHA/iDNova.gif b/CUST/PCHA/iDNova.gif new file mode 100644 index 0000000000..4688e9d0b4 Binary files /dev/null and b/CUST/PCHA/iDNova.gif differ diff --git a/CUST/PCHA/tmpl_logo.gif b/CUST/PCHA/tmpl_logo.gif index 7c4b68786b..15fe76ec1c 100644 Binary files a/CUST/PCHA/tmpl_logo.gif and b/CUST/PCHA/tmpl_logo.gif differ diff --git a/CUST/PCHA/xsl/PCHA.xsl b/CUST/PCHA/xsl/PCHA.xsl index 61f220a879..21808fb5be 100644 --- a/CUST/PCHA/xsl/PCHA.xsl +++ b/CUST/PCHA/xsl/PCHA.xsl @@ -3,6 +3,71 @@ + + + + + + + + +
    + + + + + + + flogoimg + ../../cust//idnova.gif + + + + + + +
    +
    + + + + + + + ================================ MELDINGEN ============================== + FACILITOR default XSL template for melding + + + + + + + + + + + + + +
    + + + https://?SSO=1& + + + + + + +
    + +
    + +
    +
    +
    + + @@ -117,10 +182,97 @@ + + + + + - - + + + + + + + + + + + Melding + Omschrijving + Marge + THT tijdstip + THT + Basiskorting + Variabele korting + + + + + + + + + + + + + + text-align:center; background-color: #cc0000; color: white; font-weight: bold + + + text-align:center; background-color: orange; font-weight: bold + + + text-align:center; background-color: yellow; font-weight: bold + + + text-align:center; + + + + +  Min. + + +   + Uren + Dagen + + + + +   + + + + +  Min. + + +   + Uren + Dagen + + + + + + + + + + + + + + + + + + + @@ -148,26 +300,33 @@ - text-align:center; background-color: red; color: white; font-weight: bold + text-align:center; background-color: #cc0000; color: white; font-weight: bold - Kwartier text-align:center; background-color: orange; font-weight: bold - Half uur text-align:center; background-color: yellow; font-weight: bold text-align:center; - + + +  Min. + + +   + Uren + Dagen + + - text-align:center; background-color: red; color: white; font-weight: bold + text-align:center; background-color: #cc0000;; color: white; font-weight: bold text-align:center; @@ -178,7 +337,7 @@ - +   @@ -194,8 +353,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + Geen gegevens gevonden +
    +
    MeldingMelderDatumOmschrijvingVakgroep
    + + +   + + + + +
    + + + \ No newline at end of file diff --git a/CUST/PCHD/tmpl_logo.gif b/CUST/PCHD/tmpl_logo.gif index 7c4b68786b..15fe76ec1c 100644 Binary files a/CUST/PCHD/tmpl_logo.gif and b/CUST/PCHD/tmpl_logo.gif differ diff --git a/CUST/PCHH/tmpl_logo.gif b/CUST/PCHH/tmpl_logo.gif index 7c4b68786b..15fe76ec1c 100644 Binary files a/CUST/PCHH/tmpl_logo.gif and b/CUST/PCHH/tmpl_logo.gif differ diff --git a/CUST/PCHP/tmpl_logo.gif b/CUST/PCHP/tmpl_logo.gif index 7c4b68786b..15fe76ec1c 100644 Binary files a/CUST/PCHP/tmpl_logo.gif and b/CUST/PCHP/tmpl_logo.gif differ diff --git a/CUST/PCHS/tmpl_logo.gif b/CUST/PCHS/tmpl_logo.gif index 7c4b68786b..15fe76ec1c 100644 Binary files a/CUST/PCHS/tmpl_logo.gif and b/CUST/PCHS/tmpl_logo.gif differ diff --git a/CUST/PCHW/DGS.gif b/CUST/PCHW/DGS.gif new file mode 100644 index 0000000000..e31c587d3e Binary files /dev/null and b/CUST/PCHW/DGS.gif differ diff --git a/CUST/PCHW/tmpl_logo.gif b/CUST/PCHW/tmpl_logo.gif index 7c4b68786b..15fe76ec1c 100644 Binary files a/CUST/PCHW/tmpl_logo.gif and b/CUST/PCHW/tmpl_logo.gif differ diff --git a/CUST/PCHW/xsl/PCHW.xsl b/CUST/PCHW/xsl/PCHW.xsl index 2ed39470ba..a7e2d975b2 100644 --- a/CUST/PCHW/xsl/PCHW.xsl +++ b/CUST/PCHW/xsl/PCHW.xsl @@ -608,6 +608,69 @@ + + + + + + + +
    + + + + + + + flogoimg + ../../cust//dgs.gif + + + + + + +
    +
    + + + + + + + ================================ MELDINGEN ============================== + FACILITOR default XSL template for melding + + + + + + + + + + + + + +
    + + + https://?SSO=1& + + + + + + +
    + +
    + +
    +
    +
    + +
    @@ -56,27 +57,27 @@ - +
    -
    +
    - - - -
    -
    -
    - + + + +
    +
    +
    +
    -
    - + +
    @@ -128,14 +129,17 @@
    - + + @@ -391,20 +403,22 @@ + + () + - - - - + + + + - - - - - - - - +
    Beste collega,

    - WELKOM bij het Klanttevredenheidsonderzoek (KTO).

    - De melding () is onlangs verwerkt.
    - Om je in de toekomst nog beter van dienst te zijn is je mening omtrent de uitgevoerde werkzaamheden van belang.
    - Wij verzoeken je m te volgen en je reactie te geven. Het invullen van dit formulier duurt ongeveer 2 minuten.

    - Bij voorbaat hartelijk dank voor je medewerking!

    - Service Center Facilitair Bedrijf


    - Onderstaand tref je de gegevens van deze melding nogmaals aan.
    +Beste collega,

    +WELKOM bij het Klanttevredenheidsonderzoek (KTO).

    +De melding () is onlangs verwerkt.
    +Om je in de toekomst nog beter van dienst te zijn is je mening omtrent de uitgevoerde werkzaamheden van belang.
    +Wij verzoeken je m te volgen en je reactie te geven. Het invullen van dit formulier duurt ongeveer 2 minuten.

    +Bij voorbaat hartelijk dank voor je medewerking!

    +Service Center Facilitair Bedrijf


    +Onderstaand tref je de gegevens van deze melding nogmaals aan. +
    Overzicht melding
    @@ -199,7 +203,6 @@
    - + -- + - + @@ -288,32 +291,35 @@
    @@ -249,11 +252,11 @@
    - --
    -
    - - - - +Beste collega,

    +Jouw reeds gedane melding is afgesloten. +Onderstaand tref je een beknopte beschrijving daarvan aan. +Wij gaan ervan uit dat de dienst en/of het product geleverd is.

    +Met vriendelijke groet,
    +Inkoop Supportbureau

    +N.B.
    +Dit bericht werd automatisch aangemaakt. +Wil je hierop reageren, dan graag per mail via isb@uwv.nl. + - + - + @@ -321,18 +327,23 @@ - - - + + + + @@ -342,14 +353,14 @@ +   + @@ -373,7 +384,8 @@ + - +
    - Beste collega,

    - Jouw reeds gedane melding is afgesloten. Onderstaand tref je een beknopte beschrijving daarvan aan. Wij gaan ervan uit dat de dienst en/of het product geleverd is.

    - Met vriendelijke groet,
    - Inkoop Supportbureau -
    N.B.
    Dit bericht werd automatisch aangemaakt. Wil je hierop reageren, dan graag per mail via isb@uwv.nl.
    Onderwerp
    Afhandeling melding

    - Onderstaande melding betreffende je boeking bij Worldmeetings is automatisch afgemeld.

    - Het boekingsnummer van Worldmeetings staat hieronder in de omschrijving genoemd als referentie. Klik op de URL om de boeking in de webshop van Worldmeetings te openen. -
    +Afhandeling melding

    +Onderstaande melding betreffende je boeking bij Worldmeetings is automatisch afgemeld.

    +Het boekingsnummer van Worldmeetings staat hieronder in de omschrijving genoemd als referentie. +Klik op de URL om de boeking in de webshop van Worldmeetings te openen. +
    Onderwerp
    Afhandeling melding

    - Beste collega,

    - Wij hebben van jou een melding ontvangen. - Onderstaand tref je een beknopte beschrijving daarvan aan. - Wij gaan ervan uit dat deze melding naar tevredenheid is afgehandeld. - Mocht je vragen en/of opmerkingen hebben, dan horen wij dat graag van je.

    - Met vriendelijke groet,
    - Service Center Facilitair Bedrijf

    - N.B.
    Dit bericht werd automatisch aangemaakt. Wil je hierop reageren, dan graag telefonisch via .
    - Onderstaand het overzicht van de melding die je hebt gedaan bij het Service Center.
    +Afhandeling melding

    +Beste collega,

    +Wij hebben van jou een melding ontvangen. +Onderstaand tref je een beknopte beschrijving daarvan aan. +Wij gaan ervan uit dat deze melding naar tevredenheid is afgehandeld. +Mocht je vragen en/of opmerkingen hebben, dan horen wij dat graag van je.

    +Met vriendelijke groet,
    +Service Center Facilitair Bedrijf

    +N.B.
    +Dit bericht werd automatisch aangemaakt. +Wil je hierop reageren, dan graag telefonisch via .
    +Onderstaand het overzicht van de melding die je hebt gedaan bij het Service Center. +
    Overzicht melding
    Nummer - - +
    Meldingstijdstip -  
    - -
    - -  () ()
    Soort melding - ()
    Einddatum
    Einddatum + +
    Omschrijving @@ -422,44 +436,46 @@
    Aanvullende gegevens
    - + + + + + + + + - +
    Aanvullende gegevens
    + - + - + - + - - + + - + -
    - - + + - +
    - - + + + +
    -
    +
    @@ -478,7 +494,6 @@ - + -- + @@ -551,24 +567,27 @@
    @@ -531,7 +546,8 @@
    - --
    Van
    - +Informatie over de afhandeling van jouw melding

    +Beste collega,

    +Jouw melding is door het Service Center Facilitair Bedrijf ontvangen op . +Wij hebben de melding geregistreerd onder nummer .

    +De melding is als volgt omschreven:



    +Wil je reageren op deze omschrijving, neem dan telefonisch contact met ons op.

    +Wij streven ernaar de melding zo spoedig mogelijk af te handelen en zullen je tijdens de afhandeling van jouw melding op de hoogte houden.
    +Onderaan deze mail vind je de status van je melding.

    +Wij streven ernaar jouw melding naar tevredenheid af te handelen.


    +Hoogachtend,
    +Service Center Facilitair Bedrijf


    +N.B.
    +Dit bericht werd automatisch aangemaakt. +Wil je hierop reageren, dan graag telefonisch via . +
    @@ -587,430 +606,6 @@
    Onderwerp
    - Informatie over de afhandeling van jouw melding

    - Beste collega,

    - Jouw melding is door het Service Center Facilitair Bedrijf ontvangen op . Wij hebben de melding geregistreerd onder nummer .

    - De melding is als volgt omschreven:



    - Wil je reageren op deze omschrijving, neem dan telefonisch contact met ons op.

    - Wij streven ernaar de melding zo spoedig mogelijk af te handelen en zullen je tijdens de afhandeling van jouw melding op de hoogte houden.
    - Onderaan deze mail vind je de status van je melding.

    - Wij streven ernaar jouw melding naar tevredenheid af te handelen.


    - Hoogachtend,
    - Service Center Facilitair Bedrijf


    - N.B.
    Dit bericht werd automatisch aangemaakt. Wil je hierop reageren, dan graag telefonisch via .
    Status van de melding
    - - - - - - - - -
    - - mld - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Melding  -   - SPOED! - -
    Aan: - -
    E-mail adres: - -
    Telefoonnummer: - -
    Locatie: - - - -
    Afdeling: - - - -
    Kostenplaats: - - -  / 
    -
    Onderstaand tref je een overzicht van de aanvraag voor het boeken van een externe vergaderlocatie. - Wij zetten jouw aanvraag door naar de locatie van jouw keuze, als wij de bevestiging hebben ontvangen zullen wij je daarover informeren.
    -
    Met vriendelijke groet, Service Center Facilitair Bedrijf
    -
    Meldingstijdstip: - - -
    Locatie - - - - - -
    : - - - - - - - - - - - - - -
    - -
    - -
    - -
    - -
    -
    -
    Object(en): -  () -   -  ()
    Melding: - -
    Backoffice: - -
    Omschrijving: - - - -
    Status: - - - -
    Aanvullende gegevens
    - - - - - - - - - - - -
    - - :
    -
    -
    -
    Als je vragen hebt over de status van de melding, neem dan contact met ons op via telefoonnummer . Houd het meldingsnummer bij de hand, zodat wij je snel van dienst kunnen zijn.
    -
    Met vriendelijke groet,
    -
    - -
    -
    -
    - - - - - - - - -
    - - mld - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Melding  -   - SPOED! - -
    Aan: - -
    E-mail adres: - -
    Telefoonnummer: - -
    Locatie: - - - -
    Afdeling: - - - -
    Kostenplaats: - - -  / 
    -
    Onderstaand tref je een overzicht aan van de melding die je hebt gedaan. - Het Service Center vraagt één of, indien door jou aangegeven, meerdere offertes voor je aan. - Je ontvangt die binnen 3 dagen."
    Meldingstijdstip: - - -
    Locatie - - - - - -
    : - - - - - - - - - - - - - -
    - -
    - -
    - -
    - -
    -
    -
    Object(en): -  () -   -  ()
    Melding: - -
    Backoffice: - -
    Omschrijving: - - - -
    Status: - - - -
    Aanvullende gegevens
    - - - - - - - - - - - -
    - - :
    -
    -
    -
    Als je vragen hebt over de status van de melding, neem dan contact met ons op via telefoonnummer . Houd het meldingsnummer bij de hand, zodat wij je snel van dienst kunnen zijn.
    -
    Met vriendelijke groet,
    -
    - -
    -
    -
    @@ -1055,7 +650,7 @@

    Het boekingsnummer van Worldmeetings staat hieronder in de omschrijving genoemd als referentie. Je medewerker beheert de details van de boeking in de webshop van Worldmeetings. - + @@ -1115,27 +710,26 @@ - + - +
    Aan:
    : - - - - + + + +
    -
    - + @@ -1144,8 +738,6 @@ mld - -
    +  /  + @@ -1235,7 +828,8 @@ + - +
    Melding  @@ -1190,7 +782,8 @@ Kostenplaats : - -  / 
    - -
    @@ -1251,12 +845,14 @@ Object(en) : -  () +  () +   -  () +  () + @@ -1286,21 +882,20 @@ - - - - - - - - - : - - - - - - + + +
    + + + + + : + + + + + + Status @@ -1311,11 +906,11 @@ - - - Aanvullende gegevens - - + + + Aanvullende gegevens + + @@ -1335,7 +930,6 @@ - @@ -1357,7 +951,7 @@ - + @@ -2834,1182 +2428,7 @@ Wij verzoeken je b<
    Als je vragen hebt over de status van de door jou gedane melding, neem dan contact met ons op via telefoonnummer . Houd het meldingsnummer bij de hand, zodat wij je snel van dienst kunnen zijn.
    - - - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan Leverancier
    - -
    - -
    -    -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - -
    Klacht
    /
    -
    - - - - - - - - - - - - -
    -
    OnderwerpDatum
    Klacht--
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Mevrouw, mijnheer,
    -
    Bij het Service Center Facilitair Bedrijf is onderstaande melding binnengekomen. - Wij verzoeken u deze uiting van ongenoegen direct ter hand te nemen en ons zo snel mogelijk over de behanding/afhandeling op de hoogte te stellen.
    -
    Uw reactie of oplossing kunt u, onder vermelding van /, zenden aan:
    -
    Omschrijving van de klacht
    - - - -

    Service Centergegevens
    Behandeld door:
    Telefoon:
    E-mail:
    -
    Contactgegevens
    Melder: - -
    E-mail: - -
    Telefoon: - -
    Kostenplaats: - -
    Werkplek: - -
    -
    Meldingsgegevens
    Opdrachtdatum:
    Locatie:
    -     
    -   
    -
    Gebouw:
    Verdieping:
    Ruimte:
    -
    -
    - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan Leverancier
    - -
    - -
    -    -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - -
    Gegronde klacht
    /
    -
    - - - - - - - - - - - - -
    -
    OnderwerpDatum
    Gegronde klacht--
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Mevrouw, mijnheer,
    -
    Bij het Service Center Facilitair Bedrijf is onderstaande melding binnengekomen. - Wij verzoeken u deze gegronde klacht direct ter hand te nemen en ons zo snel mogelijk over de behanding/afhandeling op de hoogte te stellen.
    -
    Uw reactie of oplossing kunt u, onder vermelding van /, zenden aan:
    -
    Omschrijving van de klacht
    - - - -

    Service Centergegevens
    Behandeld door:
    Telefoon:
    E-mail:
    -
    Contactgegevens
    Melder: - -
    E-mail: - -
    Telefoon: - -
    Kostenplaats: - -
    Werkplek: - -
    -
    Meldingsgegevens
    Opdrachtdatum:
    Locatie:
    -     
    -   
    -
    Gebouw:
    Verdieping:
    Ruimte:
    -
    -
    - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan Leverancier
    - -
    - -
    -    -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - -
    Opdracht
    /
    -
    - - - - - - - - - - - - -
    -
    OnderwerpDatum
    Verzoek tot het leveren van extra diensten--
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Mevrouw, mijnheer,
    -
    Bij het Service Center Facilitair Bedrijf is onderstaande melding binnengekomen. - Wij verzoeken u de gevraagde werkzaamheden te verrichten en indien nodig, contact met ons op te nemen voor het maken van een afspraak. - Wilt u er voor zorgen dat bij een bezoek aan ons kantoor een kopie van deze opdrachtbon wordt meegenomen of in ieder geval het opdrachtnummer bekend is. -
    -
    - Uw gereedmelding kunt u, onder vermelding van /, sturen aan: en uw verzamelfactuur naar het hieronder - vermelde factuuradres.
    -
    Omschrijving van de opdracht
    - - - -

    Service Centergegevens
    Behandeld door:
    Telefoon:
    E-mail:
    -
    Contactgegevens
    Melder: - -
    E-mail: - -
    Telefoon: - -
    Kostenplaats: - -
    Werkplek: - -
    -
    Meldingsgegevens
    Opdrachtdatum:
    Locatie:
    -     
    -   
    -
    Gebouw:
    Verdieping:
    Ruimte:
    Factuur versturen naar het UWV
    - Mail uw factuur als pdf-bestand naar - mailto:pdf.crediteuren@uwv.nlpdf.crediteuren@uwv.nl. - Meer informatie over e-factureren bij het UWV kunt u terugvinden via deze link:

    - - http://www.uwv.nl/zakelijk/leveranciers/leveranciers-diensten-en-producten/e-facturerenhttp://www.uwv.nl/zakelijk/leveranciers/leveranciers-diensten-en-producten/e-factureren - -
    - - - - - - - - - - -
    Uw factuur is gericht aan:
    - UWV
    - FEZ - Accounting House - Crediteuren
    - Postbus 57025
    - 1040 CZ Amsterdam -
    - o.v.v de hierboven genoemde kostenplaats of het reeds bij u bekende ordernummer.

    - Zonder kostenplaats of ordernummer kunnen wij de factuur niet in behandeling nemen. -
    -
    - Op leveringen die gedaan zijn op basis van dit formulier zijn de inkoopvoorwaarden van UWV van toepassing. - Indien er sprake is van een mantelovereenkomst tussen de leverancier en UWV geschiedt deze order onder de bepaling uit de mantelovereenkomst. -
    -
    -
    - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan Leverancier -
    - -
    - -
    -    -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - -
    Verzoek tot het leveren van diensten onder contract
    /
    -
    - - - - - - - - - - - - -
    -
    OnderwerpDatum
    Verzoek tot het leveren van diensten overeenkomstig contract--
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Mevrouw, mijnheer,
    -
    Bij het Service Center Facilitair Bedrijf is onderstaande melding binnengekomen. - Wij verzoeken u de gevraagde werkzaamheden te verrichten en, indien nodig, contact met ons op te nemen voor het maken van een afspraak. Wilt u er voor zorgen dat bij een - bezoek aan ons kantoor een kopie van deze opdrachtbon wordt meegenomen of in ieder geval het opdrachtnummer bekend is.
    -
    Uw gereedmelding kunt u, onder vermelding van /, zenden aan:
    -
    Omschrijving van de afroep
    - - - -

    Service Centergegevens
    Behandeld door:
    Telefoon:
    E-mail:
    -
    Contactgegevens
    Melder: - -
    E-mail: - -
    Telefoon: - -
    Kostenplaats: - -
    Werkplek: - -
    -
    Meldingsgegevens
    Opdrachtdatum:
    Locatie:
    -     
    -   
    -
    Gebouw:
    Verdieping:
    Ruimte:
    -
    - Op leveringen die gedaan zijn op basis van dit formulier zijn de inkoopvoorwaarden van UWV van toepassing. - Indien sprake is van een mantelovereenkomst tussen de leverancier en UWV geschiedt deze order onder de bepaling uit de mantelovereenkomst. -
    -
    -
    - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan Leverancier -
    - -
    - -
    -    -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - -
    Abonnement / Repeteer
    /
    -
    - - - - - - - - - - - - -
    -
    OnderwerpDatum
    Verzoek tot het leveren van een terugkerende dienstverlening / abonnement--
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Mevrouw, mijnheer,
    -
    Bij het Service Center Facilitair Bedrijf is onderstaande melding binnengekomen. - Deze melding heeft een repeterend karakter of abonnementsvorm. Wij verzoeken u deze activiteit uit te voeren.
    -
    Uw gereedmelding kunt u, onder vermelding van /, zenden aan: en uw verzamelfactuur naar het hieronder vermelde factuuradres.
    -
    Omschrijving van de terugkerende dienstverlening of de abonnementsvorm
    - - - -

    Service Centergegevens
    Behandeld door:
    Telefoon:
    E-mail:
    -
    Contactgegevens
    Melder: - -
    E-mail: - -
    Telefoon: - -
    Kostenplaats: - -
    Werkplek: - -
    -
    Meldingsgegevens
    Opdrachtdatum:
    Locatie:
    -     
    -   
    -
    Gebouw:
    Verdieping:
    Ruimte:
    Factuur versturen naar het UWV
    - Mail uw factuur als pdf-bestand naar - mailto:pdf.crediteuren@uwv.nlpdf.crediteuren@uwv.nl. - Meer informatie over e-factureren bij het UWV kunt u terugvinden via deze link:

    - - http://www.uwv.nl/zakelijk/leveranciers/leveranciers-diensten-en-producten/e-facturerenhttp://www.uwv.nl/zakelijk/leveranciers/leveranciers-diensten-en-producten/e-factureren - -
    - - - - - - - - - - -
    Uw factuur is gericht aan:
    - UWV
    - FEZ - Accounting House - Crediteuren
    - Postbus 57025
    - 1040 CZ Amsterdam -
    - o.v.v de hierboven genoemde kostenplaats of het reeds bij u bekende ordernummer.

    - Zonder kostenplaats of ordernummer kunnen wij de factuur niet in behandeling nemen. -
    -
    - Op leveringen die gedaan zijn op basis van dit formulier zijn de inkoopvoorwaarden van UWV van toepassing. - Indien er sprake is van een mantelovereenkomst tussen de leverancier en UWV geschiedt deze order onder de bepaling uit de mantelovereenkomst. -
    -
    -
    - - + @@ -4253,1543 +2672,8 @@ Wij verzoeken je b<
    - - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan Leverancier
    - -
    - -
    -    -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - -
    Informatieverzoek
    /
    -
    - - - - - - - - - - - - -
    -
    OnderwerpDatum
    Verzoek tot het leveren van informatie--
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Mevrouw, mijnheer,
    -
    Bij het Service Center Facilitair Bedrijf is onderstaande melding binnengekomen. - Wij verzoeken u de gevraagde informatie aan ons te verstrekken. -
    -
    Uw informatie kunt u, onder vermelding van /, zenden aan:
    -
    Omschrijving van het informatieverzoek
    - - - -

    Service Centergegevens
    Behandeld door:
    Telefoon:
    E-mail:
    -
    Contactgegevens
    Melder: - -
    E-mail: - -
    Telefoon: - -
    Kostenplaats: - -
    Werkplek: - -
    -
    Meldingsgegevens
    Opdrachtdatum:
    Locatie:
    -     
    -   
    -
    Gebouw:
    Verdieping:
    Ruimte:
    -
    -
    - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan
    - -
    - -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    Memo
    -
    Datum
    - --
    Van
    - -
    Telefoon:
    E-mail:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - In geval van klachten worden er geen meldergegevens naar de leverancier verzonden. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Onderwerp
    Verzoek tot het leveren van 3 offertes
    -
    Mevrouw, mijnheer,
    -
    Het Service Center Facilitair Bedrijf heeft onderstaande offerteaanvraag ontvangen. - Wij verzoeken u, binnen 2 werkdagen, 3 offertes aan te bieden; 1 offerte van de aangegeven (voorkeur)locatie en 2 offertes van - vergelijkbare locaties.
    -
    In afwachting van de offerte,
    -
    Service Center Facilitair Bedrijf
    Behandeld door:
    Datum: --
    -
    Contactgegevens
    Melder: - -
    Kostenplaats: - -
    -
    Meldingsgegevens
    Meldingnummer: /
    Kostenplaats:  / 
    Melding:
    Meldingstijdstip:  
    Locatie - - - - - -
    : - - - - - - - - - - - - - -
    - -
    - -
    - -
    - -
    -
    -
    Object(en): -  () -   -  ()
    Melder: - -
    Afdeling: - - - -
    Telefoonnr: - -
    -
    Activiteit
    Opdrachtdatum: - -
    -
    Omschrijving van de melding
    - - - -
    - - - - - - - - - - - - - - - - -
    - - : - -
    -
    -
    Facturen aan:
    - -
    - - - -
    -   - -
    - - -
    -   - -
    -
    -
    -
    -
    - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan
    - -
    - -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    Memo
    -
    Datum
    - --
    Van
    - -
    Telefoon:
    E-mail:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - In geval van klachten worden er geen meldergegevens naar de leverancier verzonden. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Onderwerp
    Opdracht tot het maken van een definitieve boeking
    -
    Mevrouw, mijnheer,
    -
    Het Service Center Facilitair Bedrijf heeft een akkoord op onderstaande offerte ontvangen. - Wij verzoeken u deze offerte om te zetten in een definitieve boeking.
    -
    In afwachting van uw bevestiging,
    -
    Service Center Facilitair Bedrijf
    Behandeld door:
    Datum: --
    -
    Contactgegevens
    Melder: - -
    Kostenplaats: - -
    -
    Meldingsgegevens
    Meldingnummer: /
    Kostenplaats:  / 
    Melding:
    Meldingstijdstip:  
    Locatie - - - - - -
    : - - - - - - - - - - - - - -
    - -
    - -
    - -
    - -
    -
    -
    Object(en): -  () -   -  ()
    Melder: - -
    Afdeling: - - - -
    Telefoonnr: - -
    -
    Activiteit
    Opdrachtdatum: - -
    -
    Omschrijving van de melding
    Offertebedrag: €
    - - - -
    - - - - - - - - - - - - - - - - -
    - - : - -
    -
    -
    Facturen aan:
    - -
    - - - -
    -   - -
    - - -
    -   - -
    -
    -
    -
    -
    - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan
    - -
    - -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    Memo
    -
    Datum
    - --
    Van
    - -
    Telefoon:
    E-mail:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - In geval van klachten worden er geen meldergegevens naar de leverancier verzonden. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Onderwerp
    Verzoek tot het leveren van een offerte
    -
    Mevrouw, mijnheer,
    -
    Bij het Service Center Facilitair Bedrijf is onderstaande melding binnengekomen. - Wij verzoeken u op basis van onderstaande gegevens een offerte te maken. Indien nodig kunt u contact met ons opnemen, - wilt u er dan wel voor zorgen dat u het meldingnummer van deze offerteaanvraag bij de hand heeft.
    -
    In afwachting van uw reactie,
    -
    Service Center Facilitair Bedrijf
    Behandeld door:
    Datum: --
    -
    Contactgegevens
    Melder: - -
    Kostenplaats: - -
    -
    Meldingsgegevens
    Meldingnummer: /
    Kostenplaats:  / 
    Melding:
    Meldingstijdstip:  
    Locatie - - - - - -
    : - - - - - - - - - - - - - -
    - -
    - -
    - -
    - -
    -
    -
    Object(en): -  () -   -  ()
    Melder: - -
    Afdeling: - - - -
    Telefoonnr: - -
    -
    Activiteit
    Opdrachtdatum: - -
    -
    Omschrijving van de melding
    - - - -
    - - - - - - - - - - - - - - - - -
    - - : - -
    -
    -
    Facturen aan:
    - -
    - - - -
    -   - -
    - - -
    -   - -
    -
    -
    -
    -
    - - - - - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - ../../cust//uwv_teken.gif - -
    Aan
    - -
    - -
    -
    - -

    SPOED!

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    Memo
    -
    Datum
    - --
    Van
    - -
    Telefoon:
    E-mail:
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - In geval van klachten worden er geen meldergegevens naar de leverancier verzonden. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    Onderwerp
    Verzoek tot het boeken van een vergaderarrangement
    -
    Mevrouw, mijnheer,
    -
    Bij het Service Center Facilitair Bedrijf is onderstaande melding binnengekomen. - Wij verzoeken u deze melding om te zetten in een reservering. - Indien nodig kunt u contact met ons opnemen, wilt u er dan wel voor zorgen dat u het meldingnummer van deze opdracht bij de hand heeft.
    -
    In afwachting van uw reactie,
    -
    Service Center Facilitair Bedrijf
    Behandeld door:
    Datum: --
    -
    Contactgegevens
    Melder: - -
    Kostenplaats: - -
    -
    Meldingsgegevens
    Meldingnummer: /
    Kostenplaats:  / 
    Melding:
    Meldingstijdstip:  
    Locatie - - - - - -
    : - - - - - - - - - - - - - -
    - -
    - -
    - -
    - -
    -
    -
    Object(en): -  () -   -  ()
    Melder: - -
    Afdeling: - - - -
    Telefoonnr: - -
    -
    Activiteit
    Opdrachtdatum: - -
    -
    Omschrijving van de melding
    Offertebedrag: €
    - - - -
    - - - - - - - - - - - - - - - - -
    - - : - -
    -
    -
    Facturen aan:
    - -
    - - - -
    -   - -
    - - -
    -   - -
    -
    -
    -
    -
    - - - + + @@ -6057,9 +2941,9 @@ Wij verzoeken je b< @@ -6073,7 +2957,7 @@ Wij verzoeken je b< @@ -6083,6 +2967,7 @@ Wij verzoeken je b<
    UWV -
    FEZ - Accounting House - Crediteuren +
    FEZ - Accounting House - Crediteuren
    Postbus 57025 -
    1040 CZ Amsterdam +
    1040 CZ Amsterdam
    - Op leveringen die gedaan zijn op basis van dit formulier zijn de inkoopvoorwaarden van UWV van toepassing. + Op leveringen die gedaan zijn op basis van dit formulier zijn de inkoopvoorwaarden van UWV van toepassing. Indien er sprake is van een mantelovereenkomst tussen de leverancier en UWV geschiedt deze order onder de bepaling uit de mantelovereenkomst.
    + @@ -6218,7 +3103,7 @@ Wij verzoeken je b< + @@ -6254,8 +3139,8 @@ Wij verzoeken je b< + + @@ -6419,7 +3304,6 @@ Wij verzoeken je b<
    Wilt u er voor zorgen dat bij een bezoek aan ons kantoor een kopie van deze opdrachtbon wordt meegenomen of in ieder geval het meldingsnummer bekend is. -
    :
    - @@ -6461,7 +3345,8 @@ Wij verzoeken je b< +  /  + - + +   + @@ -6514,7 +3398,8 @@ Wij verzoeken je b< + - +
    Kostenplaats : -  / 
    @@ -6481,13 +3366,12 @@ Wij verzoeken je b<
    Meldingstijdstip : -  
    Locatie
    - -
    @@ -6530,12 +3415,14 @@ Wij verzoeken je b< Object(en) : -  () +  () +   -  () +  () + @@ -7787,7 +4674,7 @@ Wij verzoeken je r< Het gaat om de volgende medewerker: - + Naam @@ -7810,7 +4697,7 @@ Wij verzoeken je r<
    Deze e-mail wordt eenmaal per twee weken automatisch verzonden. Je medewerker ontvangt zelf ook een kopie.

    N.B. Het kan voorkomen dat je deze e-mail meerdere keren ontvangt, namelijk eenmaal voor elk van je medewerkers waarvoor dit geldt.

    - + Vriendelijke groeten,
    @@ -7830,7 +4717,7 @@ Wij verzoeken je r< Bij deze een actueel overzicht van je gegevens: - + Naam @@ -9270,7 +6157,7 @@ function startAutoRefreshTim() { - + @@ -9286,13 +6173,13 @@ function startAutoRefreshTim() { - + - + @@ -11095,3 +7982,8 @@ function startAutoRefreshTim() { + \ No newline at end of file diff --git a/CUST/VENR/VENR.css b/CUST/VENR/VENR.css index 6beeab94d2..511081aec1 100644 --- a/CUST/VENR/VENR.css +++ b/CUST/VENR/VENR.css @@ -11,3 +11,13 @@ span.menukop { background-image: none; padding-left: 2px; } + +.fixedfaqquestion +{ + background-color: #ee0000; + color: #fff; +} + +.fixedfaqquestion { + font-weight: bold; +} \ No newline at end of file diff --git a/CUST/VGLD/xsl/VGLD.xsl b/CUST/VGLD/xsl/VGLD.xsl index 6db67abc50..87518ca01e 100644 --- a/CUST/VGLD/xsl/VGLD.xsl +++ b/CUST/VGLD/xsl/VGLD.xsl @@ -27,7 +27,7 @@ : - + @@ -38,7 +38,7 @@
    - + @@ -53,7 +53,7 @@ Opdrachtnummer  / verplicht vermelden op factuur - + @@ -233,7 +233,7 @@
    - + 0 @@ -250,7 +250,7 @@ - + 0 @@ -258,7 +258,7 @@ - + 0 @@ -266,7 +266,7 @@ - + 0 @@ -274,7 +274,7 @@ - + @@ -296,7 +296,7 @@ - + €  @@ -306,7 +306,7 @@ - + €  @@ -316,7 +316,7 @@ - + €  @@ -326,7 +326,7 @@ - + €  @@ -336,17 +336,17 @@ - + €  - + - + €  @@ -356,37 +356,37 @@ - + €  - + - + €  - + - + €  - + - + €  @@ -395,9 +395,9 @@ - - - + + + @@ -411,14 +411,14 @@ €  - + Korting €  - + @@ -474,7 +474,7 @@ : - + @@ -485,8 +485,8 @@
    - - + + @@ -670,6 +670,7 @@ + @@ -681,39 +682,43 @@ + + + - @@ -721,43 +726,18 @@ - + @@ -768,30 +748,25 @@ : - - - + + + + @@ -799,11 +774,11 @@ @@ -873,6 +848,58 @@ + + + + + + ================================ BESTELOPDRACHTEN ============================== + FACILITOR default XSL template for bestelopdracht + + + + window.print(); + + + + + + + + + + + +
    + Geachte heer / mevrouw,

    + Hierbij verstrekken wij u onderstaande opdracht voor uw product(en) en/of dienst(en). Graag ontvangen wij een ontvangstbevestiging voorzien van de verwachte + levertijd. Vriendelijk verzoek om de pakbon en factuur te voorzien van het volgende referentienummer: (). De factuur kunt u digitaal sturen naar crediteurenadministratie@vogellanden.nl.

    + Bij vragen en/of onduidelijkheden kunt u contact opnemen met het Facilitair bedrijfsbureau. +
    +
    - : + Contactgegevens
    + Afdeling:Facilitair bedrijfsbureau
    + Telefoon: 038-4981460
    + E-mail: inkoop@vogellanden.nl
    - : + :  +

    + Aanvraagnummer:
    + Opdrachtnummer:
    + Orderdatum:
    + Gewenste afleverdatum:
    +
    - -
    - -
    -   - -
    - +
    - -
    - -
    -   - -
    - + +
    - : + - +
    - : - -
    - : - -
    - : - -
    - : - -
    - : - -
    - : - -
    - : - -
    - : - -
    - : - +
    - - -
    - -
    - -
    -   - -
    - -
    - - + :
     
    + Goederenontvangst
    + Hyacinthstraat 66a
    + 8013 XZ Zwolle
    + Nederland
    +
    + +
    - + - + - + @@ -811,7 +786,7 @@ + + @@ -863,7 +838,7 @@ - +
    (Excl. BTW)
    -   @@ -820,7 +795,7 @@ -
    Op leveringen die gedaan zijn op basis van dit formulier zijn de algemene inkoopvoorwaarden van het NVZ van toepassing. Indien sprake is van een mantelovereenkomst geschiedt deze order onder de bepalingen uit de mantelovereenkomst. Facturen zonder vermelding van het opdrachtnummer ()Op leveringen die gedaan zijn op basis van dit formulier zijn de meest recente algemene inkoopvoorwaarden gezondheidszorg (AIVG) van toepassing. Indien sprake is van een mantelovereenkomst geschiedt deze order onder de bepalingen uit de mantelovereenkomst. Facturen zonder vermelding van het opdrachtnummer ()worden niet in behandeling genomen.
    + + + + + +
    + + + + + + + flogoimg + ../../cust//tmpl_logo.gif + + + + + +
    + KvK-nummer: 41022329
    + Btw-identificatienummer: NL002933457B01
    + Bankindentificatiecode (BIC): INGBNL2A
    + IBAN: NL27INGB0681635800
    +
    +
    +
    + + diff --git a/CUST/WZUV/import/gen_import_einvoice_liander.bat b/CUST/WZUV/import/gen_import_einvoice_liander.bat new file mode 100644 index 0000000000..9309d3dfc1 --- /dev/null +++ b/CUST/WZUV/import/gen_import_einvoice_liander.bat @@ -0,0 +1 @@ +cscript ..\..\..\utils\gen_import\gen_import.wsf WZUV FIN_FACT_LIANDER >>%0.log 2>>&1 diff --git a/CUST/WZUV/import/gen_import_einvoice_randstad.bat b/CUST/WZUV/import/gen_import_einvoice_randstad.bat new file mode 100644 index 0000000000..a0f7c8ea94 --- /dev/null +++ b/CUST/WZUV/import/gen_import_einvoice_randstad.bat @@ -0,0 +1 @@ +cscript ..\..\..\utils\gen_import\gen_import.wsf WZUV FIN_FACT_RANDSTAD >>%0.log 2>>&1 \ No newline at end of file diff --git a/CUST/WZUV/xsl/TU.xsl b/CUST/WZUV/xsl/TU.xsl new file mode 100644 index 0000000000..f62a274b2d --- /dev/null +++ b/CUST/WZUV/xsl/TU.xsl @@ -0,0 +1,84 @@ + + + + + + + + + + + + + 220 + + -- + :00 + + X2 + + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + + -- + + + + WZU Veluwe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + + + + + + + + + + + + + + + + xml + + + + + + + + + \ No newline at end of file diff --git a/CUST/WZUV/xsl/fin_factuur_liander.xsl b/CUST/WZUV/xsl/fin_factuur_liander.xsl new file mode 100644 index 0000000000..348da1477a --- /dev/null +++ b/CUST/WZUV/xsl/fin_factuur_liander.xsl @@ -0,0 +1,16 @@ + + + + + + + factuurnr;factuurdatum;opdrachtnr;omschrijving;bedrag;btwperc;btwbedrag;pdf + + ;;;"";;;;; + + + + diff --git a/CUST/WZUV/xsl/fin_factuur_randstad.xsl b/CUST/WZUV/xsl/fin_factuur_randstad.xsl new file mode 100644 index 0000000000..98d0afa441 --- /dev/null +++ b/CUST/WZUV/xsl/fin_factuur_randstad.xsl @@ -0,0 +1,30 @@ + + + + + + factuurnr;factuurdatum;externe partij id;kostenplaats;omschrijving;bedrag;btwperc;btwbedrag + + ; + ; + ; + ; + ; + ; + ; + ; + + + + + + + + + + + \ No newline at end of file diff --git a/CUST/YKPN/xsl/csun.xsl b/CUST/YKPN/xsl/csun.xsl index cd1af2b27d..f7cb97195e 100644 --- a/CUST/YKPN/xsl/csun.xsl +++ b/CUST/YKPN/xsl/csun.xsl @@ -11,7 +11,7 @@ / - insert + insert -- :00 @@ -35,7 +35,7 @@ Opdrachttype: Melder: Email: Telefoon: - -Vakgroep: +Vakgroep: Melding: Prioriteit: KritiekHoogNormaalLaag Einddatum: @@ -49,6 +49,8 @@ Omschrijving: Melding: / + + :00 @@ -96,7 +98,7 @@ Melding: - + @@ -135,7 +137,7 @@ Melding: - diff --git a/CUST/YKPN/xsl/ykpn.xsl b/CUST/YKPN/xsl/ykpn.xsl index 4270c610eb..fb708b0cd3 100644 --- a/CUST/YKPN/xsl/ykpn.xsl +++ b/CUST/YKPN/xsl/ykpn.xsl @@ -463,7 +463,271 @@ END:VCALENDAR + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + :  + + + :  + + +   + + / +
    Let op: Indien de kosten voor het uitvoeren van de werkzaamheden meer dan €500 excl BTW bedragen, dan moet u voor aanvang van de werkzaamheden contact opnemen met de contactpersoon die hierbeneden staat beschreven.
    Let op: Op basis van deze melding kunt u geen kosten factureren aan Yask. Indien dit uw inziens wel noodzakelijk is, dan moet u voor aanvang van de werkzaamheden contact opnemen met de contactpersoon die hierbeneden staat beschreven.
    + : + + + + +
    +
    +
    + + + + : + + + +
    + + : + + +
    + + : + + +
    + + : + + +
    + + : + + +
    + : + + + +
    + : + + + + + : + + +
    + + : + + +
    + + : + + +
    + + : + + +
    + + : + + +
    + : + + + + +
    +
    +
    + + + + +
    + +
    +
    +
    +
    + : + + +  Ã  €  + + (  +  Ã  € ) + + + : + €  + + ( € ) + +
    + + : + €  + + ( € ) + +
    + + : + €  + + ( € ) + +
    + + : + + €  + + + ( € ) + +
    +
    diff --git a/CUST/YKPN/ykpn.css b/CUST/YKPN/ykpn.css index 19e3697a75..503fa5e662 100644 --- a/CUST/YKPN/ykpn.css +++ b/CUST/YKPN/ykpn.css @@ -43,10 +43,10 @@ input[type=text], select { background-color: #fff; } -.res_optie_eigen { background-color: #ece874; color: #fff; } /* Optie eigen reservering: lichtblauw */ -.res_definitief_eigen { background-color: #91c574; color: #fff; } /* Definitief eigen reservering: lichtrood */ -.res_optie { background-color: #cbc401; color: #fff; } /* Optie: blauw ORANJE */ -.res_definitief { background-color: #009900; color: #fff; } /* Definitief: rood GROEN */ +.res_optie_eigen { background-color: #E6E6FA; color: #fff; } /* Optie eigen reservering: lichtblauw */ +.res_definitief_eigen { background-color: #ADD8E6; color: #fff; } /* Definitief eigen reservering: lichtrood */ +.res_optie { background-color: #800080; color: #fff; } /* Optie: blauw ORANJE */ +.res_definitief { background-color: #0000FF; color: #fff; } /* Definitief: rood GROEN */ .res_blok { background-color: #747578; color: #fff;} /* Blokkade: zwart GRIJS */ .res_vervallen { background-color: #AB1455; color: #fff;} /* Vervallen: paars */ .res_nietvrij { background-color: #B1B3B4; color: #fff; } /* Niet beschikbaar: oranje LICHTGROEN */ diff --git a/UTILS/PutOrders/puo_notifications.js b/UTILS/PutOrders/puo_notifications.js index e6b1054464..5ecd94db43 100644 --- a/UTILS/PutOrders/puo_notifications.js +++ b/UTILS/PutOrders/puo_notifications.js @@ -275,6 +275,8 @@ function notificationMail(rec, p_notificationXSL, params) , attachSubFolder: attach_kenmerk_folder , attachments: attach_obj , attachics: icsResult + , notimode: "email" + , srtnotificatie: rec("fac_srtnotificatie_code").value } ); } @@ -310,6 +312,8 @@ function notificationMail(rec, p_notificationXSL, params) , attachFolder: attach_folder , attachSubFolder: attach_kenmerk_folder , attachments: [] + , notimode: "email" + , srtnotificatie: rec("fac_srtnotificatie_code").value } ); } diff --git a/UTILS/PutOrders/puo_sendfile.js b/UTILS/PutOrders/puo_sendfile.js index daa9ba41b3..ed643d8b98 100644 --- a/UTILS/PutOrders/puo_sendfile.js +++ b/UTILS/PutOrders/puo_sendfile.js @@ -261,6 +261,7 @@ function connectMail( p_connect , "email" , p_bedrijfadres ); + params.notimode = "email"; params.attachFileName = p_filename; //JGL Volgens mij don't care parameter mailResult = sendMail( p_sender , mail_to diff --git a/UTILS/PutOrders/puo_sendmail.js b/UTILS/PutOrders/puo_sendmail.js index adc6e952e8..020eaba1bd 100644 --- a/UTILS/PutOrders/puo_sendmail.js +++ b/UTILS/PutOrders/puo_sendmail.js @@ -459,6 +459,11 @@ function sendMail( p_mailfrom // Handig voor intern gebruik. Komt in de e-mail headers terecht objMail.Fields("urn:schemas:mailheader:X-FCLT-cust").Value = customerId; + if ("srtnotificatie" in params) + objMail.Fields("urn:schemas:mailheader:X-FCLT-noticode").Value = params.srtnotificatie; + if ("notimode" in params) + objMail.Fields("urn:schemas:mailheader:X-FCLT-notimode").Value = params.notimode; + objMail.Fields.Update(); // //