<%@ 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 */ %> <% 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); %>
<% FCLTMHeader.Generate({}); %>
<% // 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ë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ë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(); %>
<% ASPPAGE_END(); %>