Files
Facilitor/APPL/MLD/mld_edit_opdr.asp
Jos Groot Lipman ab3608dfcc Merge 2015.3 patches
svn path=/Website/trunk/; revision=28084
2016-02-09 09:09:12 +00:00

974 lines
48 KiB
Plaintext
Raw Blame History

<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: mld_edit_opdr.asp (formerly order_input.asp;142)
Description: Muteerscherm voor opdrachten bij meldingen
Ook vanuit BES/rfo_approve.asp
Parameters:
urole : fe | fo |bo | mi REQUIRED
opdr_key: opdrachtkey (optioneel, anders nieuwe opdracht. Dan mld_key verplicht)
opdr_type: opdrachttype key, alleen bij nieuwe opdrachten die gekozen wordt in popup scherm
mld_key: meldingkey (optioneel, anders bestaande opdracht)
close:
..etc
Context:
Note: Submit naar mld_edit_opdr_save.asp
Sinds FSN#20132 kan type_opdr niet meer hier getoggled worden.
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/status.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/contactpersoonselector.inc" -->
<!-- #include file="../Shared/uitvoerendeselector.inc" -->
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
<!-- #include file="../Shared/kostensoortselector.inc" -->
<!-- #include file="../Shared/get_objecten_sql.inc" -->
<!-- #include file="mld_flexkenmerk.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="mld.inc" -->
<%
FCLTHeader.Requires({ plugins:["jQuery", "kenmerk"],
js: ["../mld/mld_edit_opdr.js", "num2curr.js", "jquery.timepicker-table.js"],
css: ["timePicker-table.css"] });
/***** Get webform parameters *****/
// Indien geen urole is meegegeven dan bo als ORDBOF rechten anders fe.
var authparamsORDBOF = user.checkAutorisation("WEB_ORDBOF", true);
var urole = getQParamSafe("urole", (authparamsORDBOF && (authparamsORDBOF.PRSwritelevel < 9 && authparamsORDBOF.ALGwritelevel < 9))? "bo" : "fe");
var fronto = urole == "fo";
var backo = urole == "bo";
var minfo = urole == "mi";
var frontend = (urole == "fe" || (!fronto & !backo & !minfo)); // NOT APPLICABLE?
// Ik wil een opdrachtnummer weten, anders verplicht een melding_key (= toevoegen opdracht)
var opdr_key = getQParamInt("opdr_key", -1);
var copy = (getQParamInt("opdr_copy", 0) == 1);
var finish = (getQParamInt("finish", 0) == 1);
var opdr_copy_key = -1;
if (copy)
{
opdr_copy_key = opdr_key;
if (opdr_copy_key == -1) Response.End;
opdr_key = -1; // Bij kopieren wordt er een nieuwe opdracht aangemaakt, waarbij de initiele waarden van de invoervelden de waarden van de te kopieren opdracht moeten zijn.
}
var this_opdr;
if (opdr_key > 0)
{
var cnt_key = -1;
this_opdr = mld.func_enabled_opdracht(opdr_key); // wat mag ik zoal op deze opdracht
user.auth_required_or_abort(this_opdr.canChange);
// Haal de opdrachtgegevens op van de opdracht
mld_opdr = mld.mld_opdr_info(opdr_key);
mld_key = mld_opdr.mld_key;
mld_opdr.opdr_type_org = mld_opdr.opdr_type; // As in/from database
if (mld_opdr.contactpersuitv_key == null)
mld_opdr.contactpersuitv_key = -1;
}
else
{ // Nieuwe opdracht en dus ook bij copy (opdr_key == -1)
// MGE: NU wordt voor copy de cnt_key uit de gecopieerde opdracht gebruikt!
var cnt_key = getQParamInt("cnt_key", -1); //TODO: CONN#16529
var mld_key = getQParamInt("mld_key");
var opdr_type = getQParamInt("opdr_type");
var uitvoerende_key = getQParamInt("uitvoerende_key", -1);
var act_key = getQParamInt("act_key", -1);
// Haal gegevens van de opdracht op van waaruit je kopieert,
// of wat je weet voor een nieuwe opdracht.
var params = { uitvoerende_key: uitvoerende_key
, cnt_key: cnt_key
, opdr_copy_key: opdr_copy_key
, act_key: act_key
};
var mld_opdr = mld.mld_opdr_info_new(mld_key, opdr_type, params);
if (copy)
{
mld_key = mld_opdr.mld_key;
if (mld_opdr.contactpersuitv_key == null)
mld_opdr.contactpersuitv_key = -1;
}
//else // echt nieuw
// Bepaal discipline
sql = "SELECT sm.mld_ins_discipline_key"
+ " FROM mld_melding m"
+ " , mld_stdmelding sm"
+ " WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " AND m.mld_melding_key = " + mld_key;
var oRs = Oracle.Execute(sql);
var this_opdr = mld.func_enabled_mld(oRs("mld_ins_discipline_key").Value, "D"); // wat mag ik zoal op een melding
}
var this_mld = mld.func_enabled_melding(mld_key); // wat mag ik zoal op de bijbehorende melding.
lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");
// Kijk naar de totale rechten die ik heb.
var autfunction = ["WEB_ORDBOF", "WEB_ORDBO2", "WEB_MLDORD", "WEB_ORDOAP", "WEB_ORDSUP"];
/***** End get webform parameters *****/
var authparams = user.checkAutorisation(autfunction);
// Kan zijn dat ik niet precies de juiste role heb meegekregen, bijvoorbeeld als leverancier met read op ORDBOF
// en write op ORDBO2/ORDOAP binnenkomt (FSN#16737/AASA#22871). Dan schakelen we naar ORDBO2/ORDOAP
if (autfunction == "WEB_ORDBOF" && !(authparams.PRSwritelevel < 9 || authparams.ALGwritelevel < 9))
{
autfunction = "WEB_ORDBO2";
authparams1 = user.checkAutorisation(autfunction, true);
autfunction = "WEB_ORDOAP";
authparams2 = user.checkAutorisation(autfunction, true);
if (authparams1)
{
urole = "b2"; // voor evt. propagatie
}
else if (authparams2)
{
urole = "bo"; // voor wijzigen kenmerken met volgnummer > 900
}
else // allerlaatste kans
{
autfunction = "WEB_ORDSUP";
authparams = user.checkAutorisation(autfunction);
}
}
// JGL Het omgekeerde, write op ORDBOF maar read ORDBO2 kwam bij ATCH voor: FSN#17306
// Haal gerelateerde melding gegevens op
var mld_melding = mld.mld_melding_info(mld_key); // Globale variabele met alle mld_melding informatie
sql = "SELECT s.prs_dienst_key"
+ " , CASE"
+ " WHEN COALESCE (kp.prs_kostenplaats_eind, SYSDATE + 1) > SYSDATE"
+ " THEN 1"
+ " ELSE 0"
+ " END kpgeldig"
+ " , s.alg_onrgoed_obj_niveau"
+ " , m.prs_kostenplaats_key"
+ " FROM mld_melding m"
+ " , mld_stdmelding s"
+ " , prs_kostenplaats kp"
+ " WHERE m.mld_melding_key = " + mld_key
+ " AND m.mld_stdmelding_key = s.mld_stdmelding_key"
+ " AND m.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)";
oRs = Oracle.Execute(sql);
var stdm_prs_dienst_key = oRs("prs_dienst_key").Value || -1; // default volgens stdm
var defkp_key = oRs("kpgeldig").Value == 1? (oRs("prs_kostenplaats_key").Value || -1) : -1; // de defaultwaarde komt van de melding en moet nog wel geldig zijn.
var alg_onrgoed_obj_niveau = oRs("alg_onrgoed_obj_niveau").Value || "";
oRs.close();
if (opdr_key < 0 && !copy) // Nu default omschrijving van de opdracht vullen met flexkenmerken
{
mld_opdr.opdr_omschr = mld_melding.mld_omschr? mld_melding.mld_omschr : ""; // initieel melding omschrijving overnemen
if (S("mld_ord_flexsummary") == 1)
mld_opdr.opdr_omschr += mld.getFlexSummary(mld_key);
}
if (opdr_key > 0)
{ // Voor bestaande melding is wellicht andere dienst dan default gekozen
sql = "SELECT prs_dienst_key"
+ " FROM prs_bedrijfdienstlocatie"
+ " WHERE prs_bedrijf_key = " + mld_opdr.uitvoerende_key
+ " AND (alg_locatie_key = " + mld_melding.loc_key + " OR alg_locatie_key IS NULL)"
+ " AND (alg_gebouw_key = " + mld_melding.bld_key + " OR alg_gebouw_key IS NULL)"
oRs = Oracle.Execute(sql);
if (!oRs.eof)
stdm_prs_dienst_key = oRs("prs_dienst_key").Value;
// Registratiedatum opdracht bepalen.
sql = "SELECT fac.gettrackingdate('ORDNEW', " + opdr_key + ") registratiedatum FROM DUAL"
oRs = Oracle.Execute(sql);
var registratiedatum = new Date(oRs("registratiedatum").Value);
oRs.Close();
}
else
var registratiedatum = new Date();
if (opdr_key < 0)
{
// Voor nieuwe opdrachten is de default Startdatum *vandaag*,
// tenzij de meldingdatum in de toekomst ligt, dan is het die datum
mld_opdr.mld_opdr_datumbegin = new Date();
if (mld_opdr.mld_opdr_datumbegin.midnight() < mld_melding.melddatum.midnight() || S("mld_enforce_orderdates") == 1)
mld_opdr.mld_opdr_datumbegin = mld_melding.melddatum;
// Voor nieuwe opdrachten is de default Einddatum gelijk aan de einddatum van de melding
// tenzij die in het verleden ligt, dan is het de opdrachtstartdatum
mld_opdr.mld_opdr_einddatum = mld_melding.einddatum;
if (S("mld_enforce_orderdates") != 1 && mld_opdr.mld_opdr_einddatum.midnight() < mld_opdr.mld_opdr_datumbegin.midnight())
mld_opdr.mld_opdr_einddatum = mld_opdr.mld_opdr_datumbegin;
}
// Bepaal het aantal werkdagen
// De melding_einddatum kan afwijken van melding_datum + uitvoertijd.
// Dus niet m.mld_melding_t_uitvoertijd nemen als uitvoertijd (Is alleen standaard waarde).
var ora_date1 = mld_opdr.mld_opdr_datumbegin.toSQL(true);
var ora_date2 = mld_opdr.mld_opdr_einddatum.toSQL(true);
sql = "SELECT fac.count_work_days(" + ora_date1 + ", " + ora_date2 + ") work_days FROM DUAL";
oRs = Oracle.Execute(sql);
if (oRs("work_days").Value > 0)
mld_opdr.period = oRs("work_days").Value;
oRs.close();
if (opdr_key < 0) mld_opdr.mld_opdr_ordernr = mld_melding.mld_ordernr;
// Bepaal de initi<74>le kostenplaats
if (!mld_opdr.kp_key || mld_opdr.kp_key == -1) mld_opdr.kp_key = defkp_key; // initialiseer op de mld_melding-kostenplaats
if (!mld_opdr.kp_key) mld_opdr.kp_key = -1; // dan was die er dus niet
if (mld_opdr.kp_key == -1)
{ // Kijk dan of er wellicht niks te kiezen valt, d.i. slechts 1 keuze is.
// Dan is het namelijk gewenst om die als default te nemen.
// Code/controle gebaseerd op SuggestKostenplaats.asp
// Check if person is authorized for all accounts
all_kostenplaats = false;
sql = " SELECT pk.prs_perslidkostenplaats_key"
+ " FROM prs_perslidkostenplaats pk"
+ " WHERE pk.prs_perslid_key = " + user_key
+ " AND pk.prs_perslidkostenplaats_boeken = 1"
+ " AND pk.prs_kostenplaats_key IS NULL";
oRs = Oracle.Execute(sql);
if (!oRs.eof)
all_kostenplaats = true;
oRs.Close();
if (!all_kostenplaats)
{ // Er is geen autorisatie bij kostenplaatsen (prs_kostenplaats)
// Niet persoon of plaats afhankelijk
sql = "SELECT k.prs_kostenplaats_key "
+ " FROM prs_perslidkostenplaats pk"
+ ", prs_v_aanwezigkostenplaats k"
+ " WHERE pk.prs_kostenplaats_key = k.prs_kostenplaats_key"
+ " AND pk.prs_perslidkostenplaats_boeken = 1"
+ " AND pk.prs_perslid_key = " + user_key
+ ((S("prs_dep_default_kpn") == 1)
? " UNION"
+ " SELECT k.prs_kostenplaats_key "
+ " FROM prs_perslid p"
+ ", prs_afdeling a"
+ ", prs_v_aanwezigkostenplaats k"
+ " WHERE p.prs_afdeling_key = a.prs_afdeling_key"
+ " AND p.prs_perslid_key = " + user_key
+ " AND a.prs_kostenplaats_key = k.prs_kostenplaats_key"
: "");
oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
mld_opdr.kp_key = oRs("prs_kostenplaats_key").Value;
oRs.MoveNext();
// Als er toch meerdere zijn, dan hebben we dus alsnog geen goede default
if (!oRs.eof) mld_opdr.kp_key = -1;
}
oRs.Close();
}
var autoGebouwKp = false;
if (mld_opdr.kp_key == -1 && mld_melding.mld_kk == 0 && mld_melding.bld_key > 0)
{ // Is er een gebouw kostenplaats die ingevuld kan worden.
sql = "SELECT COALESCE(prs_kostenplaats_key, -1) prs_kostenplaats_key"
+ " FROM alg_gebouw"
+ " WHERE alg_gebouw_key = " + mld_melding.bld_key;
oRs = Oracle.Execute(sql);
mld_opdr.kp_key = oRs("prs_kostenplaats_key").Value;
autoGebouwKp = true;
}
}
// Aantal lopende opdrachten.
sql = "SELECT COUNT(mld_opdr_key) nrOpen"
+ " FROM mld_opdr o"
+ " WHERE mld_melding_key = " + mld_key
+ " AND o.mld_statusopdr_key NOT IN (1, 2, 6, 7, 9)"
+ " AND o.mld_opdr_key != " + opdr_key;
oRs = Oracle.Execute(sql);
var nrOpenOpdr = oRs("nrOpen").Value;
oRs.Close();
%>
<html>
<head>
<% FCLTHeader.Generate(); %>
<script type="text/javascript">
var urole = "<%=urole%>";
var frontend = "<%=frontend%>";
var opdr_key = <%=opdr_key%>;
var mld_key = <%=mld_key%>;
var prefix = "<%=mld_melding.prefix%>";
var volgnr = "<%=mld_opdr.volgnr%>";
var cnt_key = <%=cnt_key%>;
var act_key = <%=mld_opdr.act_key%>;
var kp_key = <%=mld_opdr.kp_key%>;
var defkp_key = <%=defkp_key%>;
var kpnverplicht = (<%=mld_melding.kpnverplicht? 1 : 0%> == 1);
var opdr_status = <%=mld_opdr.opdr_status%>;
var typeopdr_matchtype = <%=mld_opdr.typeopdr_matchtype || -1%>; // voor als readonly
var typeopdr_offertelimiet = <%=mld_opdr.typeopdr_offertelimiet%>;
var typeopdr_isofferte = <%=mld_opdr.typeopdr_isofferte%>;
var opdr_type = <%=mld_opdr.opdr_type%>;
var mld_ord_show_cost = <%=S("mld_ord_show_cost")? 1 : 0%> == 1;
var mld_enforce_orderdates = <%=S("mld_enforce_orderdates")? 1 : 0%> == 1;
var copy = (<%=copy? 1 : 0%> == 1);
var srtdiscbes = <%=mld_opdr.srtdiscbes? 1 : 0%> == 1;
var autlevel = <%=authparams.PRSwritelevel%>;
var loc_key = <%=mld_melding.loc_key || -1%>;
var onrgoed_key = <%=mld_melding.place||-1%>;
var bld_key = <%=mld_melding.bld_key||-1%>;
var flr_key = <%=mld_melding.flr_key || -1%>;
var room_key = <%=mld_melding.room_key || -1%>;
var disckey = <%=mld_melding.disc%>;
var typeopdr_contract = <%=mld_opdr.typeopdr_contract%>;
var canDatesChange = (<%=this_opdr.canDatesChange? 1 : 0%> == 1);
var canWriteDatumsMld = (<%=this_mld.canWriteDatums? 1 : 0%> == 1);
var mld_startdatum = new Date(<%=mld_melding.melddatum.getTime()%>);
var mld_einddatum = new Date(<%=mld_melding.einddatum.getTime()%>);
var mld_opdr_datumbegin = new Date(<%=mld_opdr.mld_opdr_datumbegin.getTime()%>);
var mld_opdr_einddatum = new Date(<%=mld_opdr.mld_opdr_einddatum.getTime()%>);
var registratiedatum = new Date(<%=registratiedatum.getTime()%>);
var kosten_verplicht_afr = <%=mld_opdr.typeopdr_matchtype != 4 && (mld_opdr.typeopdr_kosten_verplicht & 4 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 4))? 1 : 0%> == 1;
var nrOpenOpdr = <%=nrOpenOpdr%>;
var opdrachtid = "<%=(mld_opdr.srtdiscprefix||"") + mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
var alg_onrgoed_obj_niveau = "<%=alg_onrgoed_obj_niveau%>";
var melder_key = <%=mld_melding.melder_key%>;
var perslid_key_voor = <%=mld_melding.perslid_key_voor || -1%>;
var stdm = <%=mld_melding.stdm%>;
jQuery(document).ready(function()
{
$('textarea').resize(function () { FcltMgr.resized(window) });
$('textarea').autogrow();
});
</script>
</head>
<body id="editbody">
<%
var buttons = [];
if (finish && this_opdr.canFinish)
buttons.push({ title: L("lcl_opdr_closekosten"), icon: "finish.png", action: "opdr_edit_finish()" });
buttons.push({title: L("lcl_submit"), icon: "opslaan.png", action:"mld_submit()", singlepress: true, id:"btn_mld_submit"});
buttons.push({title: L("lcl_cancel"), icon: "undo.png", action:"mld_cancel()"});
IFRAMER_HEADER((mld_opdr.act_key > 0? L("lcl_opdr_frame_algemeen_actie") : L("lcl_opdr_frame_algemeen")), buttons);
%>
<div id="edit">
<form name="u2" method="post"
action="mld_edit_opdr_save.asp?opdr_key=<%=opdr_key%>"
method="post">
<input type="hidden" id="mld_key" name="mld_key" value="<%=mld_key%>">
<%
BLOCK_START("opdrOpdracht", L("lcl_opdr_info"), true);
//<!-- OPDRACHTTYPE -->
ROFIELDTR("fld", L("lcl_mld_typeopdr"), mld_opdr.opdr_type_omschr); // Opdrachttype
%> <input type="hidden" id="t_opdr" name="t_opdr" value="<%=mld_opdr.opdr_type%>">
<% //<!-- UITVOERENDE -->
FCLTselector("dienstfilt",
"SELECT prs_dienst_key, "
+ lcl.xsqla('prs_dienst_omschrijving', 'prs_dienst_key')
+ " FROM prs_dienst ORDER BY UPPER(" + lcl.xsql('prs_dienst_omschrijving', 'prs_dienst_key') + ")",
{ initKey: stdm_prs_dienst_key || -1,
label: L("lcl_prs_companies_dienst"),
onChange: "onChangedDienst()",
suppressEmpty: true,
emptyOption: L("lcl_select_dienst_filter"),
readonly: (opdr_key > 0 && !this_opdr.canUitvChange) // TODO: authparamsMLDBO3?? UWVA#13876
});
if (opdr_key > 0 || copy || mld_opdr.typeopdr_isofferte == 0) // !(opdr_key < 0 && !copy && mld_opdr.typeopdr_isofferte == 1)
{
FCLTuitvoerendeselector("uitvoerende",
"sgUitv",
{ uitvoerendekey: mld_opdr.uitvoerende_key,
label: mld_opdr.srtdiscbes? L("lcl_bes_Supplier") : L("lcl_ord_company_uit"),
autlevel: authparams.PRSwritelevel,
whenEmpty: mld_opdr.srtdiscbes? L("lcl_select_bedrijf") : null,
locatiekey: mld_melding.loc_key,
onrgoedkey: mld_melding.place,
gebouwkey: mld_melding.bld_key,
disciplinekey: mld_melding.disc,
lutype: mld_opdr.srtdiscbes? "L" : "U", // leverancier of uitvoerende
urlAdd: [{urlParam: "dienst", field: "dienstfilt"}],
onChange: "onChangeUitv",
moreinfo: !frontend,
required: true,
readonly: (opdr_key > 0 && !this_opdr.canUitvChange) // TODO: authparamsMLDBO3?? UWVA#13876
});
// <!-- (UITVOERENDE) CONTACTPERSOON -->
FCLTcontactpersoonselector("contactpers",
"sgCntPersUitv",
{ contactpersoonKey: mld_opdr.contactpersuitv_key,
label: L("lcl_contact_pers"),
suppressEmpty: true,
locatiekey: mld_melding.loc_key,
filtercode: "U",
urlAdd: [{urlParam: "uitv_key", field: "uitvoerende"}],
moreinfo: !frontend,
readonly: (opdr_key > 0 && !this_opdr.canVeldChange)
});
// Veld mld_typeopdr_contract met codering
// &0 = geen contract te kiezen bij opdrachten van dit type
// &1 = contract verplicht bij opdrachten van dit type
// &2 = wel contract te kiezen bij opdrachten van dit type (=default)
if (mld_opdr.typeopdr_contract & 2)
{
// <!-- CONTRACT UITVOERENDE -->
var sql_contract = " SELECT cnt.cnt_contract_key cnt_key"
+ " , '* ' || cnt.cnt_contract_nummer_intern"
+ " || CASE WHEN cnt.cnt_contract_versie IS NOT NULL THEN '.'||cnt.cnt_contract_versie END"
+ " || '-' || cnt.cnt_contract_omschrijving cnt_name"
+ " , cnt.cnt_prs_bedrijf_key bedrijf_key"
+ " , (SELECT b.prs_bedrijf_naam naam FROM prs_bedrijf b WHERE b.prs_bedrijf_key = cnt.cnt_prs_bedrijf_key) bedrijf_naam"
+ " , 1"
+ " , cnt.cnt_contract_nummer_intern"
+ " , cnt.cnt_contract_versie"
+ " FROM cnt_v_aanwezigcontract cnt"
+ " , cnt_contract_object co"
+ " , mld_melding_object mo "
+ " WHERE cnt.cnt_contract_key = co.cnt_contract_key"
+ " AND co.cnt_ins_deel_key = mo.ins_deel_key"
+ " AND mo.mld_melding_key = " + mld_key
+ " AND (cnt.cnt_contract_status IN (0, 1) OR cnt.cnt_contract_key = {0})".format(mld_opdr.contract_key||-1)
+ (mld_opdr.uitvoerende_key > 0
? " AND cnt_prs_bedrijf_key = " + mld_opdr.uitvoerende_key
: "")
+ " UNION"
+ " SELECT cnt.cnt_contract_key cnt_key"
+ " , cnt.cnt_contract_nummer_intern"
+ " || CASE WHEN cnt.cnt_contract_versie IS NOT NULL THEN '.'||cnt.cnt_contract_versie END"
+ " || '-' || cnt.cnt_contract_omschrijving cnt_name"
+ " , cnt.cnt_prs_bedrijf_key bedrijf_key"
+ " , (SELECT b.prs_bedrijf_naam naam FROM prs_bedrijf b WHERE b.prs_bedrijf_key = cnt.cnt_prs_bedrijf_key) bedrijf_naam"
+ " , 2"
+ " , cnt.cnt_contract_nummer_intern"
+ " , cnt.cnt_contract_versie"
+ " FROM cnt_v_aanwezigcontract cnt"
+ " , cnt_contract_plaats cp"
+ " , mld_melding me"
+ " , cnt_disc_params cpa "
+ " WHERE cnt.cnt_contract_key = cp.cnt_contract_key"
+ " AND cnt.ins_discipline_key = cpa.cnt_ins_discipline_key"
+ " AND (cnt_contract_status = 0 OR cnt.cnt_contract_key = {0})".format(mld_opdr.contract_key||-1) // actief
+ " AND ((cp.cnt_alg_plaats_key = me.mld_alg_locatie_key"
+ " AND cp.cnt_alg_plaats_code = 'L')"
+ " OR (cp.cnt_alg_plaats_key = (SELECT alg_gebouw_key FROM alg_v_onroerendgoed og"
+ " WHERE og.alg_onroerendgoed_keys = me.mld_alg_onroerendgoed_keys)"
+ " AND cp.cnt_alg_plaats_code = 'G'))"
+ " AND cnt.cnt_contract_status IN (0, 1)"
+ " AND me.mld_melding_key = " + mld_key
+ (mld_opdr.uitvoerende_key > 0
? " AND cnt_prs_bedrijf_key = " + mld_opdr.uitvoerende_key
: "")
+ " ORDER BY 4, 6, 7 DESC";
FCLTselector("contract",
sql_contract,
{ initKey: mld_opdr.contract_key,
label: L("lcl_contract"),
moreinfo: (!frontend? "showCnt()" : ""),
emptyOption: "",
extraParamValue: "bedrijf_key, bedrijf_naam",
onChange: "onChangeContract()",
suppressEmpty: true,
required: mld_opdr.typeopdr_contract & 1,
readonly: (opdr_key > 0 && !this_opdr.canVeldChange)
});
}
}
else
{ // Uitvoerendelijst
var params = { type: "button",
html: "title='" + L("lcl_mld_opdr_uitvoerenden_select") + "' onclick='mld_melding_uitvoerenden()'",
opdr_key: opdr_key
}
var uitvkeystr = "";
var uitvcpersstr = "";
var uitvcntstr = "";
RWFIELDTR("uitvoerendelist_button",
"details uitvoerenden required",
mld_opdr.srtdiscbes? L("lcl_bes_Supplier") : L("lcl_mld_opdr_bedrijf"),
"(0) " + (mld_opdr.srtdiscbes? L("lcl_bes_Suppliers") : L("lcl_mld_opdr_bedrijven")),
params);
%>
<tr>
<td>
<input type="hidden" name="uitvkeystr" id="uitvkeystr" value="<%=uitvkeystr%>">
<input type="hidden" name="uitvcpersstr" id="uitvcpersstr" value="<%=uitvcpersstr%>">
<input type="hidden" name="uitvcntstr" id="uitvcntstr" value="<%=uitvcntstr%>">
</td>
</tr>
<%
}
// OMSCHRIJVING
RWTEXTAREATR("opdr_omschr",
"fldomschr",
L("lcl_mld_opdr_description"),
mld_opdr.opdr_omschr,
{html: "rows='3'" + (opdr_key > 0 && !this_opdr.canVeldChange? "readonly" : "")});
// OPDRACHT DATUM
// Volgorde in tijd: maxPast, minPast, sysdate, minFuture, maxFuture
FCLTcalendar("orderdate",
{ datum: mld_opdr.mld_opdr_datumbegin,
minDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.melddatum : registratiedatum),
maxDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.einddatum : null),
label: L("lcl_orderdate"),
onChange: "DateChanged()",
readonly: (opdr_key > 0 && !this_opdr.canDatesChange),
saveValue: (opdr_key > 0 && !this_opdr.canDatesChange), // Ondanks readonly moet de waarde toch opgeslagen worden.
volgnr: 1,
required: true
});
%>
<!-- EIND DATUM -->
<tr><td class="label"><label><%=L("lcl_opdr_enddate")%></label></td>
<td>
<span id="span_date_done">
<% FCLTcalendar("date_done",
{ //label : handmatig want period komt nog
datum: mld_opdr.mld_opdr_einddatum,
minDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.melddatum : registratiedatum),
maxDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.einddatum : null),
timeField: mld_melding.uitvoertijd_eenheid == "U",
timeStep : 15, // TODO: Is nog wel erg hard. Zie ook mld_edit_opdr.js
startTime: 8,
endTime : 18,
onChange: "DateChanged()",
readonly: (opdr_key > 0 && !this_opdr.canDatesChange),
volgnr: 2,
addClass: (mld_melding.einddatum.getTime() < mld_opdr.mld_opdr_einddatum.getTime()? "expired2" : null), // Als de eindatum van de opdracht na de einddatum van de melding valt dan addClass toevoegen.
required: true
} );
%>
</span>
=<input style="text-align:right;" type="text" id="period" size="4" name="period" readonly value="<%=mld_opdr.period%>"> <%=L("lcl_period_wd")%>
</td>
</tr>
<% // <!-- (INTERN) BEHANDELAAR -->
FCLTpersoonselector("behandelaar",
"sgPerson",
{ perslidKey: mld_opdr.contactpers_key,
label: L("lcl_mld_behandelaar"),
autlevel: authparams.PRSwritelevel,
moreinfo: true,
filtercode: "OCP",
disc_key: mld_melding.disc,
readonly: (opdr_key > 0 && !this_opdr.canVeldChange),
suppressEmpty: true
});
// TODO: deze invulbaar maken (FSN#30171) [nog overwegen: afhankelijk van de typeopdr-vinkje doen? iig niet als IsOfferte]
if (!mld_opdr.typeopdr_isofferte)
{
FCLTcalendar("date_plan",
{ label: L("lcl_opdr_plandate"),
datum: mld_opdr.mld_opdr_plandatum,
timeField: true,
timeStep: 15,
startTime: 8,
endTime: 18,
initEmpty: !mld_opdr.mld_opdr_plandatum, // initieel leeg, maar als plandatum aanwezig deze ook tonen.
initTimeEmpty: !mld_opdr.mld_opdr_plandatum, // idem.
required: false
} );
}
// AFHANDELING
RWTEXTAREATR("opdr_opm",
"fldomschr",
L("lcl_mld_inf_Opmerking"),
mld_opdr.opdr_opmerking,
{html: "rows='3' maxlength='4000'" + (opdr_key > 0 && !this_opdr.canOpmChange? " readonly" : "")});
BLOCK_END();
BLOCK_START("opdrMelding", L("lcl_opdr_info") + " " + (mld_opdr.srtdiscprefix != null? mld_opdr.srtdiscprefix : "") + mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr, true);
//<!-- OPDRACHT STATUS -->
if (opdr_key > 0)
{ // Alleen bij bestaande opdrachten de status van de opdracht tonen
params = { infoPointer: { Url: "appl/shared/status_info.asp?opdr_key=" + opdr_key + "&urole=" + urole,
Title: L("lcl_status_details") + " " + (mld_opdr.srtdiscprefix||"") + mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr
}
}
ROFIELDTR("fld" + (mld_opdr.opdr_status == 2? " notapproved" : ""), L("lcl_mld_status"), status.getopdrstatustext(mld_opdr.opdr_status), params); // Opdrachtstatus omschrijving
if (mld_opdr.opdr_status == 2)
{ // Opdracht Niet akkoord
ROTEXTAREATR("fldtxt", L("lcl_mld_inf_opmerking_fiat"), mld_opdr.mld_opdr_opmerking_fiat, {suppressEmpty: true}); // Afhandeling, reden niet akkoord
}
var fiat_key = mld_opdr.mld_opdr_fiat_user;
if (mld_opdr.opdr_status == 3) // (nog) ter fiattering
{
if (fiat_key)
fiat_key = mld_opdr.fiatteur_kpg_key; // 1e is geweest
else
fiat_key = mld_opdr.fiatteur_kp_key;
}
if (fiat_key)
{
FCLTpersoonselector(
"Fiatteur",
"sgFiatteur",
{ perslidKey: fiat_key,
label: (mld_opdr.opdr_status == 3? L("lcl_mld_toapprove"): L("lcl_mld_approver")),
readonly: true,
moreinfo: !frontend
});
}
}
// Het opdr_id is een extern gevuld nummer en hoeft IMHO niet wijzigbaar te zijn. Kijken hoe houdbaar dat is
// ongewenste mutaties kunnen tot problemen bij facturatie leiden, daarom eerst maar safe readonly
ROFIELDTR("fld", L("lcl_opdr_id"), mld_opdr.mld_opdr_id, {suppressEmpty: true}); // Evt. te gebruiken factuurkenmerk
//RWFIELDTR("opdr_id", "fldordernr", L("lcl_opdr_id"), mld_opdr.mld_opdr_id); // Evt. te gebruiken factuurkenmerk
// <!-- MELDING -->
var params = { infoPointer: { Url: "appl/mld/mld_melding.asp?urole=" + urole + "&mld_key=" + mld_key
}
}
ROFIELDTR("fld", L("lcl_call_number"), (mld_opdr.srtdiscprefix != null? mld_opdr.srtdiscprefix : "") + mld_key, params); // Melding
// <!-- MELDER -->
FCLTpersoonselector("sgCaller",
"sgCaller",
{ perslidKey: mld_melding.melder_key,
label: L("lcl_caller"),
readonly: true,
moreinfo: true
});
ROFIELDTR ("fld", L("lcl_complain"), mld_opdr.vakgroep + "/" + mld_melding.mld_stdmelding_omschrijving); // Melding
// Locatie, gebouw, verdieping, ruimte
// NB: is nu nog van de melding, maar binnenkort van de opdracht zelf
FCLTplaatsselector (authparams.ALGwritelevel,
{ locatiekey: mld_melding.loc_key,
gebouwkey: mld_melding.bld_key,
verdiepingkey: mld_melding.flr_key,
ruimtekey: mld_melding.room_key,
moreinfo: (backo || fronto),
readonly: true,
suppressEmpty: true,
no_table: true
});
BLOCK_END();
if (mld_melding.show_ins)
{ // Zijn er objecten te tonen?
var sql = "SELECT m.ins_deel_key"
+ " FROM mld_melding_object m"
+ " WHERE m.mld_melding_key = " + mld_key
+ " ORDER BY m.ins_deel_key";
oRs = Oracle.Execute(sql);
var thereAreObjects = !oRs.Eof;
oRs.close();
// Als de objecten knop aanwezig is bij meldingen of er zijn geselecteerde objecten te tonen dan objectenblok tonen.
if (this_opdr.canChange || thereAreObjects)
{
BLOCK_START("mldIns", L("lcl_gerelateerdeobjecten"));
// Als de objecten knop aanwezig is bij meldingen dan hier ook de knop tonen.
// De object button grijs weergeven als de plaats niet is ingevuld tot en met het alg_onrgoed_obj_niveau niveau.
var disableobjects = ((alg_onrgoed_obj_niveau == "L" && mld_melding.loc_key < 0) ||
(alg_onrgoed_obj_niveau == "G" && mld_melding.bld_key < 0) ||
(alg_onrgoed_obj_niveau == "V" && mld_melding.flr_key < 0) ||
(alg_onrgoed_obj_niveau == "R" && mld_melding.room_key < 0) ||
(alg_onrgoed_obj_niveau == "A" && mld_melding.melder_key < 0) ||
(alg_onrgoed_obj_niveau == ""));
//$("#r_objs_button").attr('disabled', disableobjects);
var alg_key = -1;
var aantalobj = 0;
if (!disableobjects)
{
switch(alg_onrgoed_obj_niveau)
{
case "L": alg_key = mld_melding.loc_key;
break;
case "G": alg_key = mld_melding.bld_key;
break;
case "V": alg_key = mld_melding.flr_key;
break;
case "R": alg_key = mld_melding.room_key;
break;
case "A": alg_key = mld_melding.melder_key;
break;
}
var prs_key = mld_melding.perslid_key_voor;
var sql = get_objecten_sql(alg_key, alg_onrgoed_obj_niveau, prs_key, null, mld_melding.stdm);
var oRs = Oracle.Execute(sql);
while(!oRs.eof)
{
aantalobj++;
oRs.MoveNext();
}
}
// Als de objecte knop aanwezig is of er zijn geselecteerde objecten te tonen dan objectenblok tonen.
var objparams = {ins_key: -1,
canChange: this_opdr.canChange,
verplicht: mld_melding.srtinst_verplicht,
disableobjects: disableobjects,
aantalobj: aantalobj,
onclickobj: "mld_opdracht_object()"};
mld.generate_relobject_editblock(mld_key, objparams);
BLOCK_END();
}
} // if (mld_melding.show_ins)
// de kostenvelden zijn nogal afhankelijk van mld_opdr.typeopdr_matchtype
// 1,2 --> alle kosten velden
// 3 --> alleen uren velden/uurtarief en wel kostenplaats
// 4 --> geen kosten of kostenplaats en wel uren
// 5 --> Alleen meerdere materialen invullen en kostenplaats
// globale setting: S("mld_ord_show_cost")==0 Alleen kostenplaats en (readonly?) totaal
var ttl = L("lcl_opdr_kosten");
if (mld_opdr.typeopdr_matchtype != 3 && mld_opdr.typeopdr_matchtype != 4)
ttl += " " + (mld_opdr.inclBTW? L("lcl_shared_inclBTW") : L("lcl_shared_exclBTW"));
BLOCK_START("opdrKosten", ttl, true);
// <!-- KOSTENPLAATS -->
if (S("mld_ord_show_kostenplaats") >= 1 && (mld_opdr.typeopdr_matchtype != 4 || (mld_opdr.typeopdr_matchtype == 4 && S("mld_use_order_approval") == 1)))
{ // Als kostenplaat readonly is, dan kostenplaats niet tonen
FCLTkostenplaatsselector("account",
"sgAccount",
user_key,
{ kostenplaatsKey: mld_opdr.kp_key,
readonly: ((opdr_key > 0 && (!this_opdr.canKostChange || mld_opdr.typeopdr_matchtype == 4)) || S("mld_ord_show_kostenplaats") == 2),
onChange: "onChangeAccount",
filtercode: "AA", // Alleen actieve kostenplaatsen kunnen selecteren "All Active". Huidige waarde als initi<74>le waarde kan bij kostenplaatsen altijd.
extraParamField: "budgeth",
extracode: "B", // extra informatie is budgethouder (B)
required: mld_melding.kpnverplicht || (mld_opdr.typeopdr_kosten == 1 && mld_opdr.typeopdr_matchtype != 4),
label: L("lcl_mld_kosten"),
suppressEmpty: true,
checkInit: opdr_key < 0 && autoGebouwKp // Alleen bij nieuwe opdracht checken of kostenplaats wel mag worden ingevuld en als het een gebouw kostenplaats is.
});
}
else if (mld_opdr.typeopdr_matchtype != 4)
{
if (defkp_key > 0)
{ // dan kostenplaats van de melding nemen
%>
<input type="hidden" name="account" value="<%=defkp_key%>">
<% }
}
FCLTkostensoortselector("srtkosten",
"sgSrtkosten",
{ kostensoortKey: mld_melding.stdm_ksrt_key,
readonly: true,
label: L("lcl_charge_type"),
suppressEmpty: true
});
// <!-- VRIJWILLIG VERZOEK FIATTERING -->
if (S("mld_use_order_approval") == 1 &&
(S("mld_ord_show_kostenplaats") == 1 || (S("mld_ord_show_kostenplaats") == 0 && defkp_key > 0) || (S("mld_ord_show_kostenplaats") == 2 && mld_opdr.kp_key > 0)))
{ // Niet als je geen kostenplaats in kunt vullen en als de melding ook geen kostenplaats heeft.
if (opdr_key < 0)
{
// Alleen bij nieuwe opdrachten en dus ook bij copy.
if (mld_melding.kpnverplicht || (mld_opdr.typeopdr_kosten == 1 && mld_opdr.typeopdr_matchtype != 4))
var html = null;
else
var html = "onClick='onChangeFiat();'"
CHECKBOXTR(L("lcl_mld_appr_req"), "fldmldfiat", "fiat", false, {html: html });
}
else
{ // Readonly tonen.
// Alleen als het vrijwillig vinkje is ingevuld.
ROCHECKBOXTR("fldmldfiat", L("lcl_mld_appr_req"), mld_opdr.opdr_handfiat, {suppressEmpty: true});
}
}
if (S("mld_ord_show_ordernr") == 1) // <!-- ORDERNR -->
{
RWFIELDTR("opdr_ordernr", "fldordernr", L("lcl_mld_inf_Ordernr"), mld_opdr.mld_opdr_ordernr,
{ html: "onBlur='calcTotal()'",
readonly: (opdr_key > 0 && !this_opdr.canVeldChange)
}
);
}
if (mld_opdr.typeopdr_matchtype == 5)
{
// Materiaallijst
var params = { type: "button",
html: "title='" + L("lcl_mld_opdr_materials_select") + "' onclick='mld_melding_materiaal()'",
opdr_key: opdr_key
}
var matexistarr = [];
var matopdrkeyarr = [];
var matkeyarr = [];
var matamountarr = [];
var matpricearr = [];
var matdescriptarr = [];
var mataantal = 0;
if (opdr_key > 0)
{
sql = "SELECT fac_usrdata_key"
+ " , mld_opdr_materiaal_key"
+ " , mld_opdr_materiaal_aantal"
+ " , mld_opdr_materiaal_prijs"
+ " , mld_opdr_materiaal_omschr"
+ " FROM mld_opdr_materiaal ud"
+ " WHERE mld_opdr_key = " + opdr_key;
oRs = Oracle.Execute(sql);
while(!oRs.eof)
{
mataantal++;
matexistarr.push(oRs("fac_usrdata_key").Value ? "1" : "0");
matopdrkeyarr.push(oRs("mld_opdr_materiaal_key").Value);
matkeyarr.push( oRs("fac_usrdata_key").Value || -1 );
matamountarr.push(oRs("mld_opdr_materiaal_aantal").Value);
matpricearr.push(safe.jsfloat(oRs("mld_opdr_materiaal_prijs").Value));
matdescriptarr.push(oRs("mld_opdr_materiaal_omschr").Value || "Dummy"); // Voor vaste materialen 'Dummy' gebruiken
oRs.MoveNext();
}
oRs.Close();
}
RWFIELDTR("materiallist_button", "button materiaal", L("lcl_mld_material"), L("lcl_mld_materialen") + " (" + mataantal + ")", params);
%>
<tr>
<td>
<input type="hidden" name="matexiststr" id="matexiststr" value="<%=matexistarr.join(",")%>">
<input type="hidden" name="matopdrkeystr" id="matopdrkeystr" value="<%=matopdrkeyarr.join(",")%>">
<input type="hidden" name="matkeystr" id="matkeystr" value="<%=matkeyarr.join(",")%>">
<input type="hidden" name="matamountstr" id="matamountstr" value="<%=matamountarr.join(",")%>">
<input type="hidden" name="matpricestr" id="matpricestr" value="<%=matpricearr.join(",")%>">
<input type="hidden" name="mat_kosten" id="mat_kosten" value="<%=safe.jsfloat(mld_opdr.m_cost)%>">
<script type='text/javascript'>
var JSONdata = '(<%=safe.jsstring(JSON.stringify(matdescriptarr))%>)';
var matdescriptarr = eval('(' + JSONdata + ')')
</script>
</td>
</tr>
<%
}
if (S("mld_ord_show_cost") == 1 &&
// mld_opdr.typeopdr_matchtype != 4 && zonder kosten wil AADS nog steeds de uren
mld_opdr.typeopdr_matchtype != 5) // UREN
{
var flduren_label = L("lcl_mld_nrhours");
switch (mld_opdr.typeopdr_matchtype)
{
case 3: {flduren_label = L("lcl_mld_hoursperweek"); break;}
case 6: {flduren_label = L("lcl_mld_hours_to_spent"); break;}
case 7: {flduren_label = L("lcl_mlduren_max"); break;}
}
RWFIELDTR("uren"
, "flduren" + (mld_opdr.typeopdr_matchtype == 3? " required" : "")
, flduren_label
, safe.curreditable(mld_opdr.hours)
, { datatype: "float"
, html: "onBlur='calcTotal()' step='0.01'"
, readonly: (opdr_key > 0 && !this_opdr.canUrenMatChange)
}
);
}
if (mld_opdr.typeopdr_matchtype == 6 || mld_opdr.typeopdr_matchtype == 7)
ROFIELDTR("fldgeboekt", L("lcl_mlduren_booked"), safe.curr(mld_opdr.booked), {suppressEmpty: true}); // Geboekte uren
if (S("mld_ord_show_cost") == 1 &&
mld_opdr.typeopdr_matchtype != 3 &&
mld_opdr.typeopdr_matchtype != 4 &&
mld_opdr.typeopdr_matchtype != 5)
{ // UURTARIEF
RWFIELDTR("uurtarief", "flduurtarief", L("lcl_hour_rate") + "&nbsp;" + L("lcl_valutasign"),
safe.curreditable(mld_opdr.h_rate),
{ datatype: "currency",
html: "onBlur='calcTotal()'",
readonly: (opdr_key > 0 && !this_opdr.canUrenMatChange)
}
);
// MATERIAAL
RWFIELDTR("mat_kosten", "fldmatkosten", L("lcl_mater_cost") + "&nbsp;" + L("lcl_valutasign"),
safe.curreditable(mld_opdr.m_cost),
{ datatype: "currency",
html: "onBlur='calcTotal()'",
readonly: (opdr_key > 0 && !this_opdr.canUrenMatChange)
}
);
// CORRECTIE
RWFIELDTR("corr_kosten", "fldcorrkosten", L("lcl_correct") + "&nbsp;" + L("lcl_valutasign"),
safe.curreditable(mld_opdr.corr_cost),
{ datatype: "currency",
html: "onBlur='calcTotal()'",
readonly: (opdr_key > 0 && !this_opdr.canUrenMatChange)
}
);
}
// TOTAAL
if (mld_opdr.typeopdr_matchtype != 4)
{
// 0 = niet verplicht, 1 = save + 2 = afmelden, 4 = afronden.
isRequired = (mld_opdr.typeopdr_kosten_verplicht & 1 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 1)) ||
((mld_opdr.typeopdr_kosten_verplicht & 2 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 2)) &&
(mld_opdr.opdr_status == 5 || mld_opdr.opdr_status == 8)) ||
((mld_opdr.typeopdr_kosten_verplicht & 4 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 4)) &&
mld_opdr.opdr_status == 6)
RWFIELDTR("tot_kosten", "fldtotkosten" + (isRequired? " required" : ""),
L("lcl_total_cost") + "&nbsp;" + L("lcl_valutasign"),
safe.curreditable(mld_opdr.t_cost),
{ datatype: "currency",
html: (mld_opdr.typeopdr_matchtype != 5? "onBlur='calcTotal()'" : null),
readonly: true
}
);
}
BLOCK_END();
generateFlexKenmerkBlock({ opdr_key: (copy? opdr_copy_key : opdr_key),
opdr_type: mld_opdr.opdr_type,
opdr_type_org: mld_opdr.opdr_type_org,
opdr_status: mld_opdr.opdr_status,
mld_key: mld_key,
stdm_arr: [],
showClose: (opdr_key > 0 && this_opdr && (this_opdr.canClose || this_opdr.canSeeARFlex)),
copy: copy,
reado: (opdr_key > 0 && !(this_opdr.canFlexChange || this_opdr.canChangeARFlex)),
flexcolumns: S("mld_flexcolumns")
});
%>
<input type=hidden name="copyorder_key" value="<%=copy?opdr_copy_key:'-1'%>">
<input type=hidden name="act_key" value="<%=mld_opdr.act_key%>">
<input type=hidden name="volgnr" value="<%=mld_opdr.mld_opdr_bedrijfopdr_volgnr%>">
<%
// if the mode is copy the original order is used as template but the order will be saved
// like it was a new added order
if (opdr_key > 0) // Bij bestaande meldingen, dus ook niet bij copy.
{ %>
<input type=hidden name=opdr_key value=<%=opdr_key%>>
<% } %>
<% IFACE.FORM_END(); %>
</form>
</div>
</body>
</html>