diff --git a/APPL/CNT/cnt.inc b/APPL/CNT/cnt.inc index a6e063520f..39753b4f67 100644 --- a/APPL/CNT/cnt.inc +++ b/APPL/CNT/cnt.inc @@ -1056,6 +1056,9 @@ cnt = { setcontractstatus: cresult.canChange = (cresult.canChangeFlex && !cnt_info.isAbonnement) || (haveCNTMSUrights && (S("cnt_inactivate_mode") == 0 || (S("cnt_inactivate_mode") == 1 && cresult.canMANwrite))) || canChangeAbonnement; + + cresult.canCopy = (cresult.canMANwrite && cresult.canMANread) || (S("cnt_contract_approval") == 1 && cresult.canUSEwrite && cresult.canUSEread); + cresult.canChangeAlg = cresult.canChange && !(actief && cresult.canUSEwrite && !cresult.canMANwrite && !haveCNTMSUrights); // Alleen nog status Actief(0) uitsluiten bij ALLEEN CNTUSE rechten (zie overzicht hierboven). cresult.canChangeKosten = (cresult.canMANwrite || @@ -1109,6 +1112,7 @@ cnt = { setcontractstatus: cresult.canUSEread = cresult.canRead("WEB_CNTUSE") || cresult.mijncontract; cresult.canUSEwrite = cresult.canWrite("WEB_CNTUSE"); cresult.canReadAny = cresult.canUSEread || cresult.canMANread; + cresult.canCopy = (cresult.canMANwrite && cresult.canMANread) || (S("cnt_contract_approval") == 1 && cresult.canUSEwrite && cresult.canUSEread); return cresult; }, diff --git a/APPL/CNT/cnt_contract.asp b/APPL/CNT/cnt_contract.asp index 8fd6db5644..d63e8462a6 100644 --- a/APPL/CNT/cnt_contract.asp +++ b/APPL/CNT/cnt_contract.asp @@ -31,6 +31,7 @@ FCLTHeader.Requires({ plugins: ["suggest","jQuery"], var verynew = getQParamInt("verynew", 0) == 1; var cnt_key = getQParamInt("cnt_key", -1); +var copy = (getQParamInt("cnt_copy", 0) == 1); var transitParam = ""; if (verynew) @@ -48,7 +49,10 @@ if (cnt_key > 0) if (oRs.eof) shared.record_not_found(); hasFactuurschema = (oRs("cnt_disc_params_factuurschema").Value == 1); - tabtitle += " "+ oRs("cnt_contract_nummer_intern").Value + (oRs("cnt_contract_versie").Value ? "."+oRs("cnt_contract_versie").Value : ""); + if (copy) + tabtitle = L("lcl_cnt_copy") + " " + tabtitle.toLowerCase(); + else + tabtitle += " "+ oRs("cnt_contract_nummer_intern").Value + (oRs("cnt_contract_versie").Value ? "."+oRs("cnt_contract_versie").Value : ""); oRs.close(); } %> @@ -72,7 +76,7 @@ if (cnt_key > 0) } if (params.keepForm) return; -<% if (cnt_key == -1) +<% if (cnt_key == -1 || copy) { %> if (params.cancel) { @@ -104,7 +108,7 @@ if (cnt_key > 0) <% - if (cnt_key == -1) + if (cnt_key == -1 || copy) { var page="cnt_edit_contract.asp"; // Maak een nieuw @@ -189,6 +193,8 @@ if (cnt_key > 0) <% } } + if (copy) + transitParam += "&cnt_copy=1"; } else { @@ -200,7 +206,7 @@ if (cnt_key > 0) initHeight: "450px", FcltClose: "contractClose" } ); - if (cnt_key > 0) + if (cnt_key > 0 && !copy) { // ===================== CONTRACTNOTES FRAME ============================ // Future extension kan zijn hiervoor WEB_CNTUSE te vereisen, diff --git a/APPL/CNT/cnt_edit_contract.asp b/APPL/CNT/cnt_edit_contract.asp index 6c716b5ea0..d565e77859 100644 --- a/APPL/CNT/cnt_edit_contract.asp +++ b/APPL/CNT/cnt_edit_contract.asp @@ -30,11 +30,22 @@ FCLTHeader.Requires({plugins:["jQuery"], var cnt_key = getQParamInt("cnt_key"); var l_cnt_srt = getQParamInt("srtdisc", -1); +var copy = (getQParamInt("cnt_copy", 0) == 1); +var transitParam = "&cnt_key="+cnt_key; +var cnt_copy_key = -1; +if (copy) +{ + cnt_copy_key = cnt_key; + cnt_key = -1; + transitParam = "&cnt_key="+cnt_copy_key+"&cnt_copy=1"; +} +__DoLog("Koen: " + transitParam); if (cnt_key > -1) { var cnt_info = cnt.cnt_contract_info(cnt_key); // nog heel beperkt var this_cnt = cnt.func_enabled_contract(cnt_key, cnt_info); // Wat heb ik zoal aan rechten op dit contract? + user.auth_required_or_abort(this_cnt.canChange); if (!cnt_info.locked_user_key || cnt_info.locked_user_key == user_key) @@ -45,17 +56,41 @@ if (cnt_key > -1) } else // nieuw contract { - if (S("cnt_contract_approval") == 1) - { // Als het approval mechanisme actief is mag ik met WEB_CNTUSE rechten ook een contract aanmaken. - var autfunction = ["WEB_CNTUSE", "WEB_CNTMAN"]; - var authparams = user.checkAutorisation(autfunction); + if (copy) + { + var cnt_info = cnt.cnt_contract_info(cnt_copy_key); + var this_cnt = cnt.func_enabled_contract(cnt_copy_key, cnt_info); + user.auth_required_or_abort(this_cnt.canCopy); + cnt_info.cnt_key = -1; + cnt_info.nummer_intern = null; + l_cnt_srt = getQParam("srtdisc", -1); } else { - var autfunction = "WEB_CNTMAN"; - var authparams = user.checkAutorisation(autfunction); - } + var cnt_info = {contract_status: S("cnt_contract_approval") == 1 ? 2 : 0}; + if (S("cnt_contract_approval") == 1) + { // Als het approval mechanisme actief is mag ik met WEB_CNTUSE rechten ook een contract aanmaken. + var autfunction = ["WEB_CNTUSE", "WEB_CNTMAN"]; + var authparams = user.checkAutorisation(autfunction); + } + else + { + var autfunction = "WEB_CNTMAN"; + var authparams = user.checkAutorisation(autfunction); + } + + var authparamsUSE = user.checkAutorisation("WEB_CNTUSE", true) || {PRSreadlevel: 9, PRSwritelevel: 9}; + + var this_cnt = {canChangeKosten: true, + canChangeAlg: true, + isAbonnement: false, + // Volgende 4 worden voor de flex gebruikt + canMANread : authparams.PRSreadlevel < 9, + canUSEread : authparamsUSE.PRSreadlevel < 9, + canMANwrite : authparams.PRSwritelevel < 9, + canUSEwrite : authparamsUSE.PRSwritelevel < 9 }; + } var sql = "SELECT dp.cnt_srtcontract_type," + " dp.cnt_disc_params_factuurschema," @@ -69,25 +104,15 @@ else // nieuw contract + " AND cs.ins_discipline_key = " + l_cnt_srt; var oRs = Oracle.Execute( sql ); - var authparamsUSE = user.checkAutorisation("WEB_CNTUSE", true) || {PRSreadlevel: 9, PRSwritelevel: 9}; + cnt_info.srtcontract_type = oRs("cnt_srtcontract_type").value; + cnt_info.discipline_omschrijving = oRs("ins_discipline_omschrijving").value; + cnt_info.discipline_key = l_cnt_srt; + cnt_info.hasfactuurschema = oRs("cnt_disc_params_factuurschema").value == 1; + cnt_info.kostensoort_naam = oRs("kostensoort_naam").value; - var this_cnt = {canChangeKosten: true, - canChangeAlg: true, - isAbonnement: false, - // Volgende4 worden voor de flex gebruikt - canMANread : authparams.PRSreadlevel < 9, - canUSEread : authparamsUSE.PRSreadlevel < 9, - canMANwrite : authparams.PRSwritelevel < 9, - canUSEwrite : authparamsUSE.PRSwritelevel < 9 }; - - var cnt_info = {contract_status: S("cnt_contract_approval") == 1? 2 : 0, - srtcontract_type: oRs("cnt_srtcontract_type").value, - discipline_omschrijving: oRs("ins_discipline_omschrijving").value, - discipline_key: l_cnt_srt, - hasfactuurschema: oRs("cnt_disc_params_factuurschema").Value == 1, - kostensoort_naam: oRs("kostensoort_naam").Value}; oRs.close(); } + %> @@ -99,7 +124,6 @@ else // nieuw contract FcltMgr.resized(window) }); - function cnt_submit() { document.activeElement.blur(); // trigger laatste onChanges @@ -184,7 +208,7 @@ else // nieuw contract
@@ -446,7 +470,7 @@ else // nieuw contract BLOCK_END(); BLOCK_START("cntFlex"+(S("cnt_flexcolumns")!=1?"2":"") , L("lcl_cnt_flexblok")); - generateFlexKenmerkCode ({cnt_key : cnt_key, + generateFlexKenmerkCode ({cnt_key : copy ? cnt_copy_key : cnt_key, disc_key : cnt_info.discipline_key, this_cnt : this_cnt, flexcolumns: S("cnt_flexcolumns") diff --git a/APPL/CNT/cnt_edit_contract_save.asp b/APPL/CNT/cnt_edit_contract_save.asp index 577294c190..caec372781 100644 --- a/APPL/CNT/cnt_edit_contract_save.asp +++ b/APPL/CNT/cnt_edit_contract_save.asp @@ -14,11 +14,17 @@ var JSON_Result = true; - <% protectRequest.validateToken(); var cnt_key = getQParamInt("cnt_key", -1); var srtdisc_key = getQParamInt("srtdisc"); +var copy = (getQParamInt("cnt_copy", 0) == 1); +var cnt_copy_key = -1; +if (copy) +{ + cnt_copy_key = cnt_key; + cnt_key = -1; +} var cnt_kosten = getFParamFloat("cnt_cntkstn", 0); var isNew = (cnt_key < 0); @@ -183,6 +189,35 @@ if (!warning) } ) + if (copy) // copy scope as well + { + var copyPlaatsScopeSql = "INSERT INTO cnt_contract_plaats (cnt_contract_key," + + " cnt_alg_plaats_code," + + " cnt_alg_plaats_key," + + " cnt_contract_plaats_gewicht)" + + " SELECT " + cnt_key + "," + + " cnt_alg_plaats_code," + + " cnt_alg_plaats_key," + + " cnt_contract_plaats_gewicht" + + " FROM cnt_contract_plaats" + + " WHERE cnt_contract_key = " + cnt_copy_key + + " AND cnt_contract_plaats_verwijder IS NULL"; + Oracle.Execute(copyPlaatsScopeSql); + + var copyObjectScopeSql = "INSERT INTO cnt_contract_object (cnt_contract_key," + + " cnt_ins_srtdeel_key," + + " cnt_ins_deel_key)" + + " SELECT " + cnt_key + "," + + " cnt_ins_srtdeel_key," + + " cnt_ins_deel_key" + + " FROM cnt_contract_object" + + " WHERE cnt_contract_key = " + cnt_copy_key + + " AND cnt_contract_object_verwijder IS NULL"; + Oracle.Execute(copyObjectScopeSql); + + + } + if (!isNew && (cntUpd.trackarray.length || flextrack.length)) shared.trackaction("CNTUPD", cnt_key, L("lcl_cnt_is_cntupd") + "\n" + cntUpd.trackarray.concat(flextrack).join("\n")); diff --git a/APPL/CNT/cnt_show_contract.asp b/APPL/CNT/cnt_show_contract.asp index 3757ba7a56..52b1f82747 100644 --- a/APPL/CNT/cnt_show_contract.asp +++ b/APPL/CNT/cnt_show_contract.asp @@ -63,6 +63,7 @@ var urlMail = "../shared/queuemail.asp?pcode=CNTMAI&defemail_key=" + defemail_ke <% FCLTHeader.Generate() %>