Files
Facilitor/APPL/PDA/fin_list.asp
Erik Groener 8988fbd7b2 SZDB#74054 Tonen in lijst van flexkenmerken ook in mobile ondersteunen
svn path=/Website/trunk/; revision=70255
2025-09-09 13:22:30 +00:00

395 lines
23 KiB
Plaintext
Raw Blame History

<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: fin-list.asp
Description: List of invoices 2 be approved (Mobile version)
Parameters:
Statsus: opzetje
Note: Since Mobile is limited to actual actions, only invoices that need approval by me are shown
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/discx3d.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->
<%
var qrc = getQParamInt("qrc", 0) != 0;
var urole = "bo"; // urole nodig om opdracht/contract/bestelling in te zien. Dummie waarde.
// Geen autfunction bepaald. Je komt bij FIN niet binnen met een bepaalde rol (urole).
// Nieuw/versimpeld: fac_functie_min_level = 3 (lezen en schrijven)
var authparamsEXTFIN = user.checkAutorisation("WEB_EXTFIN", true);
var authparamsFINFOF = user.checkAutorisation("WEB_FINFOF", true);
var authparamsFINBOF = user.checkAutorisation("WEB_FINBOF", true);
var authparamsMLDFIN = user.checkAutorisation("WEB_MLDFIN", true);
var canReadAnyFIN = (user.iamContact() && authparamsEXTFIN) ||
authparamsFINFOF ||
authparamsFINBOF ||
user.isBudgethouder();
var canReadAny = canReadAnyFIN || authparamsMLDFIN;
user.auth_required_or_abort(canReadAny);
%>
<html>
<head>
<% FCLTMHeader.Generate({}); %>
</head>
<body>
<% // Lijst van vervangers + user_key opvragen.
var prsKeys = user.collegakeylist(); // "user_key, vervangers"
PAGE_START()
HEADER({title: L("lcl_mobile_goedtekeuren_facturen"), back: false, home:!qrc});
CONTENT_START();
function fncolLink(oRs)
{
var url = "";
url = "../pda/factuur.asp?fin_key=" + safe.url(oRs("factuurnr_intern").Value);
return url;
};
function fncolHeader(oRs)
{
return safe.html(oRs("opdrachtnr").Value || "");
};
function fnAside(oRs)
{
return safe.html(S("currency_pref")+(oRs("bedrag_excl_BTW").value).toFixed(2));
}
function fncolSubheader(oRs)
{
var v_date = toDateTimeString(oRs("factuur_datum").Value);
var flexkenmerken = LIST_KENMERK_COL(oRs, {kmcol: "flex"});
return v_date + flexkenmerken;
}
function fncolDetail(oRs)
{
var uitvoerende = oRs("uitvoerende").Value;
return safe.html(uitvoerende);
}
// PF: als opzetje ff een kopietje van fin_list om mee te beginnen
sql = "SELECT f.fin_factuur_key factuurnr_intern"
+ " , fin_factuur_verwijder"
+ " , f.fin_factuur_datum factuur_datum"
+ " , COALESCE((SELECT b.prs_bedrijf_naam FROM prs_bedrijf b WHERE prs_bedrijf_key = COALESCE (o.mld_uitvoerende_keys, c.cnt_prs_bedrijf_key, bo.prs_bedrijf_key)),"
+ " (SELECT " + S("prs_dep_string") + " FROM prs_v_afdeling d WHERE d.prs_afdeling_key = c.cnt_prs_afdeling_key),"
+ " (SELECT " + S("prs_pers_string") + " FROM prs_perslid p WHERE p.prs_perslid_key = c.cnt_prs_perslid_key)) uitvoerende"
+ " , (SELECT b.prs_leverancier_nr from prs_bedrijf b where prs_bedrijf_key = coalesce (o.mld_uitvoerende_keys, c.cnt_prs_bedrijf_key, bo.prs_bedrijf_key)) leverancier_nr"
+ " , fin_factuur_nr factuurnr_extern"
+ " , f.mld_opdr_key "
+ " , f.cnt_contract_key "
+ " , f.bes_bestelopdr_key"
+ " , " + S("prs_kpn_string") + " kostenplaats"
+ " , cd.ins_discipline_omschrijving" // als melding
+ " , (SELECT MIN(ins_discipline_omschrijving)"
+ " FROM bes_discipline bd, bes_srtgroep bg, bes_srtdeel bs, bes_bestelling_item bi, bes_bestelopdr_item boi"
+ " WHERE boi.bes_bestelopdr_key = bo.bes_bestelopdr_key"
+ " AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key"
+ " AND bs.bes_srtdeel_key = bi.bes_srtdeel_key"
+ " AND bg.bes_srtgroep_key = bs.bes_srtgroep_key"
+ " AND bd.ins_discipline_key = bg.ins_discipline_key) bes_discipline_omschrijving"
+ " , mld_stdmelding_omschrijving" // als opdracht
+ " , COALESCE(NVL2(f.mld_opdr_key, "
+ " ins_srtdiscipline_prefix "
+ " || TO_CHAR(o.mld_melding_key)"
+ " || '/' || o.mld_opdr_bedrijfopdr_volgnr"
+ " , NULL),"
+ " NVL2(f.cnt_contract_key, 'C' || cnt_contract_nummer_intern || NVL2(cnt_contract_versie, '.' || cnt_contract_versie, '')"
+ " , NULL), "
+ " NVL2(f.bes_bestelopdr_key, bo.bes_bestelopdr_id, NULL), "
+ " ' ') opdrachtnr"
+ " , f.fin_factuur_totaal + f.fin_factuur_totaal_btw bedrag_incl_BTW"
+ " , f.fin_factuur_totaal bedrag_excl_BTW"
+ " , f.fin_factuur_statuses_key"
+ " , f.fin_factuur_opmerking"
+ " , fin.matchfactuur(f.fin_factuur_key) roodgroen"
+ " , budgethouder"
+ " , (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE prs_perslid_key = budgethouder) budgethoudernaam"
+ " , c.prs_perslid_key_eig"
+ " , (SELECT max(fin_factuur_note_aanmaak)"
+ " FROM fin_factuur_note fn"
+ " WHERE fn.fin_factuur_key = f.fin_factuur_key) notitie";
// merk op: als budgethouder==user_key dan wordt bes_fiat_write later genegeerd.
if (!authparamsFINBOF)
sql += ", 0 bes_fiat_write"
else if (authparamsFINBOF.ALGwritelevel == -1)
sql += ", 1 bes_fiat_write"
else sql +=
", COALESCE((SELECT 1"
+ " FROM mld_v_afleveradres m"
+ " WHERE bo.mld_adres_key_lev = m.mld_adres_key"
+ " AND m.alg_locatie_key IN (SELECT alg_locatie_key"
+ " FROM fac_v_my_locations"
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + authparamsFINBOF.ALGwritelevel + ")),"
+ " 0) bes_fiat_write";
if (!authparamsFINBOF)
sql += ", 0 mld_fiat_write"
else if (authparamsFINBOF.ALGwritelevel == -1)
sql += ", 1 mld_fiat_write"
else sql +=
", (SELECT CASE WHEN onrg.alg_type = 'R'"
+ " AND m.mld_alg_onroerendgoed_keys IN (SELECT alg_ruimte_key"
+ " FROM fac_v_my_rooms"
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + authparamsFINBOF.ALGwritelevel + ")"
+ " THEN 1"
+ " WHEN onrg.alg_type = 'V'"
+ " AND m.mld_alg_onroerendgoed_keys IN (SELECT alg_verdieping_key"
+ " FROM fac_v_my_floors"
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + authparamsFINBOF.ALGwritelevel + ")"
+ " THEN 1"
+ " WHEN onrg.alg_type = 'G'"
+ " AND m.mld_alg_onroerendgoed_keys IN (SELECT alg_gebouw_key"
+ " FROM fac_v_my_buildings"
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + authparamsFINBOF.ALGwritelevel + ")"
+ " THEN 1"
+ " WHEN onrg.alg_type = 'T'"
+ " AND m.mld_alg_onroerendgoed_keys IN (SELECT t.alg_terreinsector_key"
+ " FROM fac_v_my_locations l, alg_terreinsector t"
+ " WHERE t.alg_locatie_key = l.alg_locatie_key"
+ " AND l.prs_perslid_key = " + user_key
+ " AND l.niveau = " + authparamsFINBOF.ALGwritelevel + ")"
+ " THEN 1"
+ " WHEN m.mld_alg_onroerendgoed_keys IS NULL"
+ " AND m.mld_alg_locatie_key IN (SELECT alg_locatie_key"
+ " FROM fac_v_my_locations"
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + authparamsFINBOF.ALGwritelevel + ")"
+ " THEN 1"
+ " ELSE 0"
+ " END"
+ " FROM alg_v_onroerendgoed onrg"
+ " WHERE m.mld_alg_onroerendgoed_keys = onrg.alg_onroerendgoed_keys(+)) mld_fiat_write";
// kenmerken van de factuur
sql += ", (SELECT LISTAGG(" + "fin_kenmerk_omschrijving || ':' || CHR(160) || "
+ " CASE WHEN km.fin_kenmerk_kenmerktype IN ('R', 'r', 'S')"
+ " THEN flx.getdomeinwaarde (km.fac_kenmerkdomein_key, fk.fin_kenmerkfactuur_waarde)"
+ " WHEN ( km.fin_kenmerk_kenmerktype = 'N'"
+ " AND km.fin_kenmerk_lengte = 1"
+ " AND km.fin_kenmerk_nmin = 0"
+ " AND km.fin_kenmerk_nmax = 1"
+ " AND (km.fin_kenmerk_dec = 0 OR km.fin_kenmerk_dec IS NULL)"
+ " )"
+ " THEN DECODE (fk.fin_kenmerkfactuur_waarde, "
+ " 0, "+safe.qL("lcl_check_0")+", "
+ " 1, "+safe.qL("lcl_check_1")+", "
+ " fk.fin_kenmerkfactuur_waarde)"
+ " ELSE fk.fin_kenmerkfactuur_waarde"
+ " END"
+ ", CHR(13)"
+ ")"
+ " WITHIN GROUP (ORDER BY fin_kenmerk_volgnr)"
+ " FROM fin_kenmerk km, fin_kenmerkfactuur fk"
+ " WHERE km.fin_kenmerk_key = fk.fin_kenmerk_key"
+ " AND fk.fin_factuur_key = f.fin_factuur_key"
+ " AND BITAND(km.fin_kenmerk_inlijst, 1) = 1"
+ " AND km.fin_kenmerk_verwijder IS NULL"
+ " AND fk.fin_kenmerkfactuur_verwijder IS NULL"
+ " ) flex";
sql += " FROM (SELECT fin.getfiatteur(f.fin_factuur_key) budgethouder, f.* from fin_factuur f) f"
+ " , prs_kostenplaats k"
+ " , mld_opdr o"
+ " , mld_melding m"
+ (authparamsMLDFIN && authparamsMLDFIN.PRSreadlevel > -1
? " , prs_perslid p"
: "")
+ " , mld_discipline d"
+ " , mld_stdmelding sm"
+ " , ins_srtdiscipline sd"
+ " , cnt_contract c"
+ " , cnt_discipline cd"
+ " , bes_bestelopdr bo";
sql += " WHERE fin.getfactuurkostenplaats(f.fin_factuur_key) = k.prs_kostenplaats_key(+)" // JGL: Erg veel outer joins omdat niet
+ " AND f.mld_opdr_key = o.mld_opdr_key(+)" // vast staat in welke tak we zitten
+ " AND o.mld_melding_key = m.mld_melding_key(+)"
+ (authparamsMLDFIN && authparamsMLDFIN.PRSreadlevel > -1
? " AND m.prs_perslid_key = p.prs_perslid_key(+)"
: "")
+ " AND m.mld_stdmelding_key = sm.mld_stdmelding_key(+)"
+ " AND sm.mld_ins_discipline_key = d.ins_discipline_key(+)"
+ " AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)"
+ " AND f.cnt_contract_key = c.cnt_contract_key(+)"
+ " AND c.ins_discipline_key = cd.ins_discipline_key(+)"
+ " AND f.fin_factuur_verwijder IS NULL"
+ " AND (f.mld_opdr_key IS NOT NULL OR f.cnt_contract_key IS NOT NULL OR f.bes_bestelopdr_key IS NOT NULL)" // alleen gekoppelde
+ " AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+)";
sql += " AND f.fin_factuur_datum > SYSDATE-100"; // geen ouwe meuk (vooral voor test)
sql += " AND f.fin_factuur_statuses_key = 2"; // goed te keuren
// Beperkte FINBOF en/of MLDFIN rechten.
if (!authparamsFINFOF && ((authparamsFINBOF && authparamsFINBOF.ALGreadlevel > -1) || (authparamsMLDFIN && authparamsMLDFIN.PRSreadlevel > -1)))
{
// Ik mag in het factuuroverzicht een factuur zien als:
// 1) Ik heb ALG write rechten (WEB_FINBOF) op
// a) het afleveradres van de locatie van de bestelling
// b) de plaats van de bijbehorende melding van de opdracht OF
// 2) Ik ben contracteigenaar van het contract OF
// 3) Ik ben budgethouder van de BrOC-kostenplaats OF
// 4) Terzijde als type (mld-cnt-bes) niet bekend/gekozen is, dan moet ik volledig rechten hebben
// 5) Ik PRS read (WEB_MLDFIN) rechten (authparamsMLDFIN) heb om de financi<63>le (factuur) gegevens te zien die bij een eigen melding of opdracht horen?
var sqlArr = [];
// Als geen FINFOF maar wel FINBOF moet ik ook de alg-scope controleren
if (authparamsFINBOF && authparamsFINBOF.ALGreadlevel > -1)
{
// 1a) Heb ik ALG write rechten (WEB_FINBOF) op het afleveradres van de locatie van de bestelling?
sql1a = " (f.bes_bestelopdr_key IS NOT NULL "
+ " AND bo.mld_adres_key_lev IN ("
+ "SELECT m.mld_adres_key"
+ " FROM mld_v_afleveradres m"
+ " WHERE m.alg_locatie_key IN (SELECT alg_locatie_key"
+ " FROM fac_v_my_locations"
+ " WHERE prs_perslid_key IN (" + prsKeys + ")"
+ " AND niveau = " + authparamsFINBOF.ALGreadlevel + ")))";
sqlArr.push(sql1a);
// 1b) Heb ik ALG write rechten (WEB_FINBOF) op de plaats van de bijbehorende melding van de opdracht?
sql1b = " (f.mld_opdr_key IS NOT NULL "
+ " AND EXISTS (SELECT m.mld_melding_key"
+ " FROM alg_v_onroerendgoed onrg"
+ " WHERE m.mld_alg_onroerendgoed_keys = onrg.alg_onroerendgoed_keys(+)"
+ " AND ( (onrg.alg_type = 'R' "
+ " AND m.mld_alg_onroerendgoed_keys IN (SELECT alg_ruimte_key"
+ " FROM fac_v_my_rooms"
+ " WHERE prs_perslid_key IN (" + prsKeys + ")"
+ " AND niveau = " + authparamsFINBOF.ALGreadlevel + "))"
+ " OR (onrg.alg_type = 'V'"
+ " AND m.mld_alg_onroerendgoed_keys IN (SELECT alg_verdieping_key"
+ " FROM fac_v_my_floors"
+ " WHERE prs_perslid_key IN (" + prsKeys + ")"
+ " AND niveau = " + authparamsFINBOF.ALGreadlevel + "))"
+ " OR (onrg.alg_type = 'G'"
+ " AND m.mld_alg_onroerendgoed_keys IN (SELECT alg_gebouw_key"
+ " FROM fac_v_my_buildings"
+ " WHERE prs_perslid_key IN (" + prsKeys + ")"
+ " AND niveau = " + authparamsFINBOF.ALGreadlevel + "))"
+ " OR (onrg.alg_type = 'T'"
+ " AND m.mld_alg_onroerendgoed_keys IN (SELECT t.alg_terreinsector_key"
+ " FROM fac_v_my_locations l, alg_terreinsector t"
+ " WHERE t.alg_locatie_key = l.alg_locatie_key"
+ " AND l.prs_perslid_key IN (" + prsKeys + ")"
+ " AND l.niveau = " + authparamsFINBOF.ALGreadlevel + "))"
+ " OR (m.mld_alg_onroerendgoed_keys IS NULL"
+ " AND m.mld_alg_locatie_key IN (SELECT alg_locatie_key"
+ " FROM fac_v_my_locations"
+ " WHERE prs_perslid_key IN (" + prsKeys + ")"
+ " AND niveau = " + authparamsFINBOF.ALGreadlevel + "))"
+ " ))"
+ ")";
sqlArr.push(sql1b);
// 1c) Heb ik ALG write rechten (WEB_FINBOF) op de plaats van het bijbehorende contract?
sql1c = " (f.cnt_contract_key IS NOT NULL"
+ " AND EXISTS"
+ " (SELECT cp.CNT_ALG_PLAATS_KEY, cp.CNT_ALG_PLAATS_CODE"
+ " FROM cnt_v_aanwezigcontract_plaats cp"
+ " WHERE cp.cnt_contract_key = f.cnt_contract_key"
+ " AND cp.cnt_contract_plaats_key = COALESCE(f.cnt_contract_plaats_key, cp.cnt_contract_plaats_key)"
+ " AND ((cp.cnt_alg_plaats_code = 'G'"
+ " AND cp.cnt_alg_plaats_key IN (SELECT alg_gebouw_key"
+ " FROM fac_v_my_buildings"
+ " WHERE prs_perslid_key IN (" + prsKeys + ")"
+ " AND niveau = " + authparamsFINBOF.ALGreadlevel + "))"
+ " OR (cp.cnt_alg_plaats_code = 'L'"
+ " AND cp.cnt_alg_plaats_key IN (SELECT alg_locatie_key"
+ " FROM fac_v_my_locations"
+ " WHERE prs_perslid_key IN (" + prsKeys + ")"
+ " AND niveau = " + authparamsFINBOF.ALGreadlevel + "))"
+ " ))"
+ " )";
sqlArr.push(sql1c);
}
// 2) Ben ik contracteigenaar van het contract?
sql2 = " (f.cnt_contract_key IS NOT NULL "
+ " AND c.prs_perslid_key_eig IN (" + prsKeys + "))";
sqlArr.push(sql2);
// 3) Ben ik budgethouder van de BrOC-kostenplaats?
sql3 = " (budgethouder IN (" + prsKeys + "))";
sqlArr.push(sql3);
// 4) Als type (mld-cnt-bes) niet bekend/gekozen is, dan moet ik volledig rechten hebben
// sql4 = " (f.mld_opdr_key IS NOT NULL OR f.cnt_contract_key IS NOT NULL OR f.bes_bestelopdr_key IS NOT NULL)";
//sqlArr.push(sql4);
// 5) Heb ik PRS read (WEB_MLDFIN) rechten (authparamsMLDFIN) om de financi<63>le (factuur) gegevens te zien die bij een eigen melding of opdracht horen?
// Ik mag de factuur zien als:
// 1) Ik WEB_MLDFIN rechten heb en
// 2) Ik de melder van de melding ben
// WEB_MLDFIN rechten: PRS-scope op facturen waarbij de "eigenaar" bepaald wordt via factuur-->opdracht-->melding-->melder-->afdeling(-->bedrijf_key)
if (authparamsMLDFIN && authparamsMLDFIN.PRSreadlevel == 0) // WEB_MLDFIN rechten(1).
{
sql5 = " (m.prs_perslid_key IN (" + prsKeys + ")" // Melder ben van de melding(2).
+ " OR p.prs_afdeling_key IN"
+ " (SELECT a.prs_afdeling_key FROM prs_v_afdeling a"
+ " WHERE a.prs_bedrijf_key = " + user.afdeling().prs_bedrijf_key() + ")"
+ " )";
sqlArr.push(sql5);
}
else if (authparamsMLDFIN && authparamsMLDFIN.PRSreadlevel > 0) // WEB_MLDFIN rechten(1).
{
sql5 = " (m.prs_perslid_key IN (" + prsKeys + ")" // Melder ben van de melding(2).
+ " OR p.prs_afdeling_key IN"
+ " (SELECT prs_afdeling_key FROM prs_v_afdeling_familie a"
+ " WHERE a.prs_afdeling_elder_key IN"
+ " (SELECT aa.prs_afdeling_elder_key"
+ " FROM prs_v_afdeling_familie aa"
+ " WHERE aa.prs_afdeling_key = " + user.prs_afdeling_key()
+ " AND aa.niveau = " + authparamsMLDFIN.PRSreadlevel + "))"
+ " )";
sqlArr.push(sql5);
}
sql += " AND (" + sqlArr.join(" OR ") + ")";
}
sql += " ORDER BY f.fin_factuur_datum";
var rst = new ResultsetTable({sql: sql,
linkColumn: fncolLink,
headerColumn: fncolHeader,
detailColumn: fncolDetail,
asideColumn: fnAside,
subheaderColumn: fncolSubheader,
ID: "factuurtable",
showAll: true
});
var cnt = rst.processResultset();
CONTENT_END();
FOOTER();
PAGE_END();
PDA_PAGE_END(); %>
</body>
</html>
<% ASPPAGE_END(); %>