Files
Facilitor/APPL/FAC/fac_fiattering_list.asp
Ruud Lipper 7c5c1a9c21 PCHD#36752 Factuur goedkeurder verplicht kunnen maken
svn path=/Website/trunk/; revision=30843
2016-09-23 14:48:04 +00:00

586 lines
26 KiB
Plaintext
Raw Blame History

<%@ language = "JavaScript" %>
<%
/*
$Revision$
$Id$
File: fac_fiattering_list.asp
Description: Overzicht fiatteringsverzoeken
Parameters:
Context: Vanuit fac_fiattering_search.asp
Requires: WEB_ORDOAP autorisatie
Ik moet fiatteren als:
BES) bes_bestelling_status == 2 AND
A1) bes_bestelling_fiat_user IS NULL AND
ik ben NVL(kostenplaatsverantwoordelijke, kostenplaatsgroepverantwoordelijke)
A2) of: bes_bestelling_fiat_user IS NOT NULL AND
ik ben de kostenplaatsgroepverantwoordelijke of
CNT) cnt_contract_status == 3 AND
A1) Ik heb WEB_CNTGO1 rechten AND
cnt_info.kosten > S("cnt_contract_limit1") AND // Zijn de kosten hoger als de limiet
cnt_info.approved <= S("cnt_contract_limit1") // Welke goedkeur? 1, 2 of 3?
A2) Ik heb CNTGO2 rechten AND
cnt_info.kosten > S("cnt_contract_limit2") AND
cnt_info.approved <= S("cnt_contract_limit2")
cnt_info.approved > S("cnt_contract_limit1") // Eerste goedkeuring is geweest
A3) Ik heb CNTGO3 rechten AND
cnt_info.kosten > S("cnt_contract_limit3") AND
cnt_info.approved <= S("cnt_contract_limit3")
cnt_info.approved > S("cnt_contract_limit2") // Tweede goedkeuring is geweest
A4) Ik heb CNTGO4 rechten AND
cnt_info.kosten > S("cnt_contract_limit4") AND
cnt_info.approved <= S("cnt_contract_limit4")
cnt_info.approved > S("cnt_contract_limit3") // Derde goedkeuring is geweest
A5) Ik heb CNTGO5 rechten AND
cnt_info.kosten > S("cnt_contract_limit5") AND
cnt_info.approved <= S("cnt_contract_limit5")
cnt_info.approved > S("cnt_contract_limit4")
MLD) Fiatteren opdracht) mld_statusopdr_key == 3 AND
A1) fac.gettrackinguserkey('ORDFOK', op.mld_opdr_key) IS NULL AND
ik ben NVL(kostenplaatsverantwoordelijke, kostenplaatsgroepverantwoordelijke)
A2) of: fac.gettrackinguserkey('ORDFOK', op.mld_opdr_key) IS NOT NULL AND
ik ben de kostenplaatsgroepverantwoordelijke
Goedkeuren opdracht) mld_statusopdr_key == 10 AND (Eisen GOE t/m GO5) AND (PRS/ALG rechten) AND ...
Accepten Opdracht) mld_statusopdr_key == 6 AND (aantal opdrachten IS NULL OR offerte is later als laatste opdracht)
FIN) Fiatteren) fin_factuur_statuses_key == 2 AND (ik ben budgethouder van de BrOC-kostenplaats (in collegakeylist) OR
ik heb write rechten op de locatie van het afleveradres (in collegakeylist) OR
ik heb write rechten op de plaats van de bijbehorende melding (in collegakeylist) OR
ik ben contracteigenaar (in collegakeylist))
Goedkeuren) fin_factuur_statuses_key == 5 AND prs_perslid_key_goedkeur in Collegakeylist (AND S("fin_enable_goedkeuren") != 0 geldt al omdat anders de status niet "Ter goedkeuring(5)" kan zijn)
Ik heb gefiatteerd of afgewezen als er tracking is geweest
BES) gefiateerd: 'BESFIT' (kostenplaatsverantwoordelijke) of 'BESACP'" (kostenplaatsgroepverantwoordelijke)
afgewezen: 'BESREJ'
CNT) gefiateerd: 'CNTFIT'
afgewezen: 'CNTREJ'
MLD) gefiateerd: 'ORDFOK'
afgewezen: 'ORDREJ'
FIN) gefiateerd: 'FINGOE'
afgewezen bij fiatteren: 'FINFNO'
goedgekeurd: 'FINFOK'
afgewezen bij goedkeuren: 'FINGNO'
*/
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/status.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../BES/bes.inc" -->
<!-- #include file="../CNT/cnt.inc" -->
<!-- #include file="fac.inc" -->
<!-- #include file="../MLD/mld.inc" -->
<!-- #include file="../FAC/fac_fiattering_list.inc" -->
<!-- #include file="../FIN/fin.inc" -->
<%
var prsKeys = "" + user_key;
var outputmode = getQParamInt("outputmode", 0); // 0 = screen, 1 = print, 2 = excel etc
var showall = getQParamInt("showall", 0) == 1;
var getOpen = getQParamInt("open", 0) == 1;
var getClosed = getQParamInt("close", 0) == 1;
var getRejected = getQParamInt("reject", 0) == 1;
var opdrtype_key = getQParamInt("opdrtype_key", -1); // Opdrachttype
var dis_key = getQParamInt("districtkey", -1); // District
var loc_key = getQParamInt("locatiekey", -1); // Locatie
var bld_key = getQParamInt("gebouwkey", -1); // Gebouw
var betreft = getQParamArray("betreft", []); // Betreft module BES, CNT, FIN, MLDOF of MLDOP.
if (!getOpen && !getClosed && !getRejected)
getOpen = true;
var loc_key_arr = [];
if (dis_key > -1)
{
if (loc_key > -1)
{ // Een locatie geselecteerd.
loc_key_arr.push(loc_key);
}
else
{ // Zoek alle locaties die bij het gekozen district horen.
sqld = "SELECT alg_locatie_key"
+ " FROM alg_locatie"
+ " WHERE alg_district_key = " + dis_key;
var oRsd = Oracle.Execute(sqld);
while (!oRsd.eof)
{
loc_key_arr.push(oRsd("alg_locatie_key").value);
oRsd.MoveNext();
}
oRsd.Close();
}
}
var params = { getopen: getOpen
, getclosed: getClosed
, getrejected: getRejected
, opdrtype_key: (opdrtype_key != -1? opdrtype_key : null)
, dist_key: (dis_key != -1? dis_key : null)
, loc_key: (loc_key != -1? loc_key : null)
, bld_key: (bld_key != -1? bld_key : null)
, loc_key_arr: (loc_key_arr.length > 0? loc_key_arr : null)
, betreft: (betreft.length? betreft : null)
}
FCLTHeader.Requires({ plugins: ["jQuery"], js: ["jquery-ui.js"] });
%>
<html>
<head>
<% FCLTHeader.Generate({outputmode: outputmode}) %>
<script>
var todo_list = { BES: [],
CNT: [],
MLD: [],
GOED: [],
OFFERTE: [],
FIN: [],
FIN2: []
}
function one_done(module)
{
todo_list[module] = [];
var all_done = true;
for (var m in todo_list)
{
if (todo_list[m].length > 0)
all_done = false;
}
if (all_done)
FcltMgr.reload();
}
function one_post(key_param, data, url, module)
{
if (todo_list[module].length == 0)
{
one_done(module);
return;
}
var data = data || {};
data[key_param] = todo_list[module].join(",")
<% protectRequest.dataToken("data"); %>
$.post(url,
data,
function(json, textStatus)
{
one_done(module);
},
"json");
}
function fac_edit(row)
{
var facData = eval('(' + row.getAttribute("ROWDATA") + ')');
var item_key = row.getAttribute("ROWKEY");
var module = facData.module;
// We geven urole=fe mee omdat dat de lading het best dekt
switch (module)
{
case "BES":
{
FcltMgr.openDetail("appl/bes/bes_bestelling.asp?urole=fe&bes_key=" + item_key);
break;
}
case "CNT":
{
FcltMgr.openDetail("appl/cnt/cnt_contract.asp?urole=fe&cnt_key=" + item_key, L("lcl_cnt_contract") + " " + item_key);
break;
}
case "MLD":
case "GOED":
case "OFFERTE":
{
FcltMgr.openDetail("appl/mld/mld_opdr.asp?opdr_key=" + item_key); // Urole zoekt mld_opdr_edit.asp zelf wel uit.
break;
}
case "FIN":
case "FIN2":
{
FcltMgr.openDetail("appl/fin/fin_factuur.asp?fin_key=" + item_key, L("lcl_fin_invoice") + " " + item_key);
break;
}
default: INTERNAL_ERROR;
}
}
// Knop fiatteer gedrukt
function fac_approve(rowArray, isMulti, goedkeuren)
{
function opdrAcceptOfferCallback(json, textStatus)
{
function showVervolgOpdracht(json1, textStatus1)
{
// Automatisch een vervolg uitvoeringsopdracht (opdr_type is mld_typeopdr_typeopdr_key) aanmaken
// Als er een typeopdr_key is gedefinieerd voor de offerte, wordt er automatisch een opdracht aangemaakt. Anders refresh offerte.
if (json.typeopdr_key > 0)
{
var url = "appl/mld/mld_opdr.asp?urole=bo" // Om een opdracht te kunnen kopie<69>ren heb ik altijd "ORDBOF" rechten voor nodig. Dan kan ik ook urole=bo meegeven.
+ "&opdr_key=" + json.opdr_key
+ "&opdr_type=" + json.typeopdr_key
+ "&opdr_copy=1";
FcltMgr.openDetail(url, L("lcl_mld_opdr_uitvoeringopdracht")); // in nieuw tabje
FcltCallbackRefresh(json, textStatus); // van onzelf
}
else
FcltCallbackRefresh(json, textStatus);
}
one_done("OFFERTE");
if (json.success)
{
if (json.afwijsArray && json.afwijsArray.length > 0)
{
var data = { opdr_key: json.afwijsArray.join(","),
opdr_opm: L("lcl_mld_opdr_alternatief")
};
<% protectRequest.dataToken("data"); %>
$.post("../mld/opdr_reject_offer.asp?submit=1",
data,
function(json1, textStatus1)
{
showVervolgOpdracht(json1, textStatus1)
});
}
else
showVervolgOpdracht(json, textStatus);
}
else
FcltCallback(json, textStatus);
}
function off_accept(off_key_array)
{
// Alleen de eerste accepteren. Multi kan niet.
FcltMgr.openModalDetail("../mld/opdr_accept_offer.asp?opdr_key=" + off_key_array[0],
L("lcl_mld_accept"),
{ callback: opdrAcceptOfferCallback });
}
var theData = eval('(' + rowArray[0].getAttribute("ROWDATA") + ')');
var module = theData.module;
if (isMulti || module == "OFFERTE" ||
(module != "FIN2" && module != "GOED" && confirm(L("lcl_approve") + "?")) ||
((module == "FIN2" || module == "GOED") && goedkeuren))
//if (isMulti || module == "OFFERTE" || confirm(L("lcl_approve") + "?"))
{
for (var i = 0; i < rowArray.length; i++)
{
var item_key = rowArray[i].getAttribute("ROWKEY")
theData = eval('(' + rowArray[i].getAttribute("ROWDATA") + ')');
module = theData.module;
todo_list[module].push(item_key);
}
var data = {};
if (goedkeuren && !(<%=S("mld_opdr_refiat_preference")%> == 0 && isMulti))
{
var fiat = $("#has_sendforapproval").length == 0 || ($("#has_sendforapproval").length && $("#sendforapproval")[0].checked)? 1 : 0;
data.nofiat = (fiat == 1? 0 : 1);
}
// Parallel opstarten
one_post("bes_key", {}, "../bes/bes_approve.asp", "BES");
one_post("cnt_key", {}, "../cnt/cnt_approve.asp", "CNT");
one_post("opdr_key", {}, "../mld/opdr_approve.asp", "MLD");
one_post("opdr_key", data, "../mld/opdr_goedkeur.asp", "GOED");
one_post("fin_key", {}, "../fin/fin_approve.asp?a=1", "FIN");
one_post("fin_key", {}, "../fin/fin_goedkeur.asp?a=1", "FIN2");
if (todo_list["OFFERTE"].length > 0)
off_accept(todo_list["OFFERTE"]);
}
}
// Knop afwijzen gedrukt
function fac_reject(rowArray, isMulti)
{
function bes_reject(bes_key_array)
{
url = "../bes/bes_reject.asp?bes_key=" + bes_key_array.join(",");
FcltMgr.openModalDetail(url,
L("lcl_bes_reject"),
{ callback: function(json, textStatus)
{
one_done("BES");
var data = { opmerk: json.opmerk }; // Reden ook voor de rest gebruiken.
one_post("opdr_key", data, "../mld/opdr_reject_save.asp", "MLD");
one_post("opdr_key", data, "../mld/opdr_reject_save.asp", "GOED");
one_post("cnt_key", data, "../cnt/cnt_reject_save.asp", "CNT");
one_post("fin_key", data, "../fin/fin_approve.asp?r=1", "FIN");
one_post("fin_key", data, "../fin/fin_goedkeur.asp?r=1", "FIN2");
}}
);
}
function opdr_reject(opdr_key_array, module)
{
url = url = "../mld/opdr_reject.asp?opdr_key=" + opdr_key_array.join(",");
FcltMgr.openModalDetail(url,
L("lcl_mld_reject"),
{ callback: function(json, textStatus)
{
one_done(module);
var data = { opmerk: json.opmerk }; // Reden ook voor de rest gebruiken.
if (module != "GOED") // dan moet die nog
one_post("opdr_key", data, "../mld/opdr_reject_save.asp", "GOED");
one_post("cnt_key", data, "../cnt/cnt_reject_save.asp", "CNT");
one_post("fin_key", data, "../fin/fin_approve.asp?r=1", "FIN");
one_post("fin_key", data, "../fin/fin_goedkeur.asp?r=1", "FIN2");
}}
);
}
function cnt_reject(cnt_key_array)
{
url = url = "../cnt/cnt_reject.asp?cnt_key=" + cnt_key_array.join(",");
FcltMgr.openModalDetail(url,
L("lcl_cnt_reject"),
{ callback: function(json, textStatus)
{
one_done(module);
var data = { opmerk: json.opmerk }; // Reden ook voor de rest gebruiken.
one_post("fin_key", data, "../fin/fin_approve.asp?r=1", "FIN");
one_post("fin_key", data, "../fin/fin_goedkeur.asp?r=1", "FIN2");
}}
);
}
function fin_reject(fin_key_array)
{
if (confirm(L("lcl_reject") + "?"))
{
var data = { fin_key: fin_key_array.join(",") };
protectRequest.dataToken(data);
$.post("../fin/fin_approve.asp?r=1",
data,
function(json, textStatus)
{
one_done(module);
},
"json");
}
}
function off_reject(off_key_array)
{ // Alleen de eerste afwijzen. Multi kan niet.
FcltMgr.openModalDetail("../mld/opdr_reject_offer.asp?opdr_key=" + off_key_array[0],
L("lcl_mld_reject"),
{ callback: FcltCallbackRefresh });
}
for (var i = 0; i < rowArray.length; i++)
{
var item_key = rowArray[i].getAttribute("ROWKEY")
var theData = eval('(' + rowArray[i].getAttribute("ROWDATA") + ')');
var module = theData.module;
todo_list[module].push(item_key);
}
// De eerste zal een dialoog tonen met vraag om reden.
// De anderen krijgen allemaal dezelfde reden
if (todo_list["BES"].length > 0)
bes_reject(todo_list["BES"]);
else if (todo_list["MLD"].length > 0)
opdr_reject(todo_list["MLD"], "MLD");
else if (todo_list["GOED"].length > 0)
opdr_reject(todo_list["GOED"], "GOED");
else if (todo_list["CNT"].length > 0)
cnt_reject(todo_list["CNT"]);
else if (todo_list["FIN"].length > 0)
fin_reject(todo_list["FIN"]);
else if (todo_list["FIN2"].length > 0)
fin_reject(todo_list["FIN2"]);
if (todo_list["OFFERTE"].length > 0)
off_reject(todo_list["OFFERTE"]);
}
function mld_show_goedkeurmodal(rowArray, isMulti)
{
if (<%=S("mld_opdr_refiat_preference")%> == 0 && isMulti)
fac_approve(rowArray, isMulti, true);
else
{
$("#sendforapproval").prop('checked', true); // Checkbox weer zetten indien die was uitgeschakeld.
params = { width: "auto",
height: "auto",
modal: true,
resizable: false,
position: { my: "center", at: "center", of: window },
title: L("lcl_message"),
closeText: L("lcl_close_window"),
buttons: { "<%=L("lcl_goedkeur")%>": function () { $("#dmodal").dialog('close'); fac_approve(rowArray, isMulti, true); },
"<%=L("lcl_cancel")%>" : function () { $("#dmodal").dialog('close'); }
}
}
$('div#dmodal').dialog(params).dialog('open');
}
}
</script>
</head>
<body id="listbody">
<% var buttons_rp = [];
buttons_rp.push({ title: L("lcl_goedkeur"), action: "$('div#dmodal').dialog('close').remove();" });
buttons_rp.push({ title: L("lcl_cancel"), action: "$('div#dmodal').dialog('close').remove();" });
%>
<form name="u2" onSubmit="return false;">
<div id="dmodal" style="display:none">
<div>
<% ROFIELDTR("fld", "", L("lcl_goedkeur") + "?", {id: "modalsfatext"}); %>
</div>
<% if (S("mld_opdr_refiat_preference") == 1)
RWCHECKBOXTR("sendforapproval", "fldcheck", L("lcl_mld_sendfor_approval"), 1, {boxfirst: true}); %>
</div>
<%
function fnrowActionEnabler(oRs)
{
//var this_mld = mld.func_enabled_melding(oRs("mld_melding_key").Value);
var eReject = oRs("fiatstatus").Value == "open" && S("fin_enable_afwijzen") == 1; // Afwijzen
var data = { eReject: eReject };
var eApprove = oRs("fiatstatus").Value == "open"; // Fiatteren
if (eApprove)
{
switch (oRs("module").Value)
{
case "BES":
case "CNT":
case "FIN":
case "MLD": data.eApprove = true; break; // Fiatteren bestelling, contract, factuur, melding opdracht.
case "FIN2":
case "GOED": data.eGoedkeur = true; break; // Goedkeuren melding opdracht, factuur.
case "OFFERTE": data.eAccept = true; break; // Accepteren melding offerte.
default: INTERNAL_ERROR;
}
}
return data;
}
function allowFiat(oRs)
{ // op basis van de status geef ik aan of fiatteren/afwijzen mogelijk is (-1) of niet (0)
return (oRs("module") == 'BES'?(oRs("statuskey") != 2? -1 : 0) : (oRs("statuskey") != 3? -1 : 0));
}
function prepareTotal(oRs)
{
return safe.curr(oRs("bedrag").Value);
}
function prepareModule(oRs)
{
switch (oRs("module").Value)
{
case "BES": return L("lcl_bes_bestelling"); break;
case "CNT": return L("lcl_cnt_contract"); break;
case "MLD":
case "GOED": return L("lcl_shared_order") + "<br>" + safe.html(oRs("type").Value); break;
case "OFFERTE": return safe.html(oRs("type").Value) + "<br>" + safe.html(oRs("uitvoerende").Value); break;
case "FIN":
case "FIN2": return L("lcl_fin_factuur_type") + "<br>" + safe.html(oRs("type").Value); break;
default: INTERNAL_ERROR;
}
}
function fnrowData(oRs)
{
var data = { module: oRs("module").Value,
prefix: oRs("prefix").Value,
aanvraagnummer: oRs("aanvraagnummer").Value };
return JSON.stringify(data);
}
function fncolBesNr(oRs)
{ // Eigenlijk wil je een markering bij de parent, niet bij het child TODO
return (oRs("module").Value == "BES"? S("bes_bestelling_prefix") : "") + (oRs.fields("bes_bestelling_parentkey").Value > 0 ? oRs.fields("bes_bestelling_parentkey").Value + "*" : oRs.fields("aanvraagnummer").Value);
}
function fncolStatus(oRs)
{
switch (oRs.fields("module").Value)
{
case "BES": { return bes.getbesbestellingstatustext(oRs.fields("statuskey").Value); break; }
case "CNT": { return cnt.getcntstatustext(oRs.fields("statuskey").Value); break; }
case "MLD":
case "GOED": { return status.getopdrstatustext(oRs.fields("statuskey").Value); break; }
case "OFFERTE": { return L("lcl_mld_ter_acceptatie"); break; }
case "FIN":
case "FIN2": { return fin.getfinstatustext(oRs.fields("statuskey").Value); break; }
}
}
function fncolfiatteur(oRs)
{
switch (oRs.fields("module").Value)
{
case "BES":
case "MLD":
case "GOED":
case "OFFERTE":
case "FIN":
case "FIN2": { return oRs.fields("fiatteur").Value; break; }
case "CNT": { switch (oRs.fields("fiatteur").Value)
{
case "0": { return ''; break; } // Kan eigenlijk niet voorkomen.
case "1": { return L("lcl_cnt_approved_upto").format(S("cnt_contract_limit1")); break; }
case "2": { return L("lcl_cnt_approved_upto").format(S("cnt_contract_limit2")); break; }
case "3": { return L("lcl_cnt_approved_upto").format(S("cnt_contract_limit3")); break; }
}
}
}
}
function fncolGebouwTerrein(oRs)
{
if (oRs.fields("gebouw").Value == " " || oRs.fields("gebouw").Value == null)
if (oRs.fields("terrein").Value == " " || oRs.fields("terrein").Value == null)
return "";
else return oRs.fields("terrein").Value;
else return oRs.fields("gebouw").Value;
}
var sql = fiattering_sql(params);
var rst = new ResultsetTable({keyColumn: "request_key",
ID: "rfoTable",
sql: sql,
rowData: fnrowData,
rowActionEnabler: fnrowActionEnabler,
outputmode: outputmode,
filterParams: params,
showAll: showall,
emptySetString: L("lcl_rfo_no_items_to_approve")});
rst.addColumn(new Column({caption: "dummy", content: allowFiat, hidden: true}));
rst.addColumn(new Column({caption: "dummy", content: "module", hidden: true}));
rst.addColumn(new Column({caption: L("lcl_request_key"), content: fncolBesNr}));
rst.addColumn(new Column({caption: L("lcl_date"), content: "datum", datatype: "date"}));
rst.addColumn(new Column({caption: L("lcl_rfo_requestor"), content: "prs_perslid_naam_full", hasActions: true }));
rst.addColumn(new Column({caption: L("lcl_rfo_total_sum"), content: prepareTotal, datatype: "currency"}));
rst.addColumn(new Column({caption: L("lcl_rfo_type"), content: prepareModule}));
rst.addColumn(new Column({caption: L("lcl_rfo_category"), content: "categorie"}));
rst.addColumn(new Column({caption: L("lcl_bes_RFO_status"), content: fncolStatus}));
if (user.hasCollegas())
rst.addColumn(new Column({caption: L("lcl_bes_approver"), content: fncolfiatteur}));
rst.addColumn(new Column({caption: L("lcl_location"), content: "locatie"}));
rst.addColumn(new Column({caption: L("lcl_bld_terra"), content: fncolGebouwTerrein, combine: true}));
rst.addAction({action: "fac_edit", caption: L("lcl_details"), isDefault: true});
rst.addAction({action: "fac_approve", caption: L("lcl_approve"), enabler: "eApprove", multi: true, multiOnce: true});
rst.addAction({action: "mld_show_goedkeurmodal", caption: L("lcl_goedkeur"), enabler: "eGoedkeur", multi: true, multiOnce: true});
rst.addAction({action: "fac_approve", caption: L("lcl_accept"), enabler: "eAccept", multi: true, multiOnce: true});
rst.addAction({action: "fac_reject", caption: L("lcl_reject"), enabler: "eReject", multi: true, multiOnce: true});
var cnt = rst.processResultset();
%>
</form>
</body>
</html>