FSN#51403 Beheer van contactpersonen door bedrijf savepoint

svn path=/Website/trunk/; revision=36547
This commit is contained in:
Jos Groot Lipman
2018-01-10 16:16:19 +00:00
parent 3e401c9e7e
commit ff244cacf1
11 changed files with 81 additions and 69 deletions

View File

@@ -3602,11 +3602,11 @@ mld = {setmeldingstatus:
// -- CONTROLE LEESRECHTEN --
// Al ik een contactpersoon ben dan heb ik alleen rechten om mijn eigen opdrachten van mijn eigen bedrijf te zien/wijzigen
mresult.iamContact = mld.iamContact(); // Ben ik een contactpersoon?
mresult.iamContact = user.iamContact(); // Ben ik een contactpersoon?
mresult.iamBedrijfContact = false; // Aan bedrijf toegekend en ik ben contactpersoon van dat bedrijf? Bijv. vertaaldiensten UWVA
if (mresult.iamContact && !mld_opdr.uitv_intern) // Extern Bedrijf.
{ // Ik ga er van uit dat je NIET als vervanger van een contactpersoon van een ander bedrijf wordt aangewezen.
mresult.iamBedrijfContact = mld.iamContact(mld_opdr.uitvoerende_key); // Ben ik contactpersoon van het uitvoerende bedrijf?
mresult.iamBedrijfContact = user.iamContact(mld_opdr.uitvoerende_key); // Ben ik contactpersoon van het uitvoerende bedrijf?
}
mresult.canReadAny = mresult.canRead("WEB_ORDBOF") ||
(mresult.iamContact? (mresult.canRead("WEB_ORDBO2") && mresult.iamBedrijfContact) : mresult.canRead("WEB_ORDBO2")) ||
@@ -4079,28 +4079,6 @@ mld = {setmeldingstatus:
return mld_key;
},
// Ben ik contactpersoon van *een* bedrijf (maakt niet uit welke)
// of specifiek van bedrijf_key
_user_is_contact: null, // Caching versie zonder bedrijf voor performance
iamContact: function _iamContact(bedrijf_key)
{
if (!bedrijf_key && mld._user_is_contact !== null)
return mld._user_is_contact;
var sql = "SELECT prs_bedrijf_key"
+ " FROM prs_contactpersoon"
+ " WHERE prs_perslid_key = " + user_key
+ " AND prs_contactpersoon_verwijder IS NULL";
if (bedrijf_key)
sql += " AND prs_bedrijf_key = " + bedrijf_key;
var oRs = Oracle.Execute(sql);
var isEof = oRs.Eof;
oRs.Close();
if (!bedrijf_key)
mld._user_is_contact = !isEof;
return !isEof;
},
// levert een te tonen berichtstring op
sendNeedApprovalNotification: function (opdr_key, approver_key)
{
@@ -5398,7 +5376,7 @@ mld = {setmeldingstatus:
// 2) de opdracht toegekend is aan het eigen bedrijf. Opdrachten van het eigen bedrijf mag ik altijd zien.
// 3) ik de contactpersoon ben van het uitvoerende externe bedrijf. Opdrachten van eigen bedrijf mag ik altijd zien.
// Let op!!! Deze voorwaarde geldt dus alleen voor de WEB_ORDBO2 rechten.
var exhandler = mld.iamContact(); // Later nodig voor bepaling eClose.
var exhandler = user.iamContact(); // Later nodig voor bepaling eClose.
if (exhandler) // Dan mag ik *echt* alleen opdrachten toegekend aan mijn bedrijf zien
{ // De andere helft van deze if is dan niet genoeg en bovendien *extreem* traag (FSN#29867)

View File

@@ -317,7 +317,7 @@ function opdr_list(params)
var hasAddFactuurRights = ((authparamsFINUSE && authparamsFINUSE.PRSwritelevel < 9) || (authparamsFINFOF && authparamsFINFOF.PRSwritelevel));
var hasListFactuurRights = (authparamsFINUSE || authparamsFINFOF || authparamsFINBOF || user.isBudgethouder());
var exhandler = mld.iamContact(); // Later nodig voor bepaling eClose.
var exhandler = user.iamContact(); // Later nodig voor bepaling eClose.
function fnrowActionEnabler(oRs)
{
var o_stat = oRs("mld_statusopdr_key").Value;

View File

@@ -308,7 +308,7 @@ oRs.close();
// <!-- Uitvoerende -->
// Ben ik toevallig een contactpersoon van een extern bedrijf? Dan mag ik automatisch
// alleen de opdrachten van mijn bedrijf/bedrijven zien (AADS#)
var exhandler = mld.iamContact();
var exhandler = user.iamContact();
if (FreezeHandler)
{ // Uitvoerende is vast

View File

@@ -70,7 +70,7 @@ var verdieping_key = getQParamInt("verdieping_key", user.alg_verdieping_key({wit
else
{
// a. ben ik een contactpersoon van een extern bedrijf? Dan mag ik opdrachten van mijn bedrijf zien.
var exhandler = mld.iamContact();
var exhandler = user.iamContact();
if (exhandler)
{
listmode = 1;

View File

@@ -33,7 +33,7 @@ function bedrijf_list (pautfunction, params)
var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc.
var isIntern= params.isIntern;
var showall = params.showall;
var naam = params.naam.toUpperCase();
var naam = params.naam;
var levNr = params.levNr;
var postcode = params.postcode;
var contactpersoon = params.contactpersoon;
@@ -132,6 +132,10 @@ function bedrijf_list (pautfunction, params)
if (contactpersoon)
sql+= " AND UPPER(b.prs_bedrijf_contact_persoon) LIKE "+safe.quoted_sql_wild("%"+contactpersoon+"%");
if (params.cps_prs_key > 0)
sql+= " AND EXISTS (SELECT 1 FROM prs_contactpersoon pcp WHERE pcp.prs_bedrijf_key = b.prs_bedrijf_key AND pcp.prs_perslid_key = {0})".format(params.cps_prs_key);
if (postcode)
sql+= " AND (UPPER(b.prs_bedrijf_bezoek_postcode) LIKE "+safe.quoted_sql_wild("%"+postcode+"%")
+ " OR UPPER(b.prs_bedrijf_post_postcode) LIKE "+safe.quoted_sql_wild("%"+postcode+"%") +")";

View File

@@ -28,7 +28,8 @@ var companyName = getQParam("companyName", -1);
var companyNr = getQParam("companyNr", -1);
var bezoekPostcode = getQParam("bezoekPostcode", -1);
var bezoekPlaats = getQParam("bezoekPlaats", -1);
var contactpersoon = getQParam("contactPrs", -1);
var contactpersoon = getQParam("contactPrs", -1); // naam zoals ingevuld van een prs_bedrijf_contact_persoon
var cps_prs_key = getQParamInt("cps_prs_key", -1); // perslidkey van een prs_contactpersoon.prs_perslid_key
var locatiekey = getQParamInt("locatiekey", -1);
var gebouwkey = getQParamInt("gebouwkey", -1);
var dienstkey = getQParamInt("dienstkey", -1);
@@ -50,6 +51,7 @@ bedrijf_list ( autfunction,
postcode: (bezoekPostcode != -1 ? bezoekPostcode : null),
plaats: (bezoekPlaats != -1 ? bezoekPlaats : null),
contactpersoon: (contactpersoon != -1 ? contactpersoon : null),
cps_prs_key: cps_prs_key,
locatiekey: (locatiekey != -1 ? locatiekey : null),
gebouwkey: (gebouwkey != -1 ? gebouwkey : null),
dienstkey: (dienstkey != -1 ? dienstkey : null),

View File

@@ -15,7 +15,6 @@
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/getkenmerksql.inc" -->
<!-- #include file="./prs.inc" -->
<%
FCLTHeader.Requires({ plugins:["jQuery"],
@@ -42,8 +41,6 @@ function contactpersoon_list (params)
{
var authparams = user.checkAutorisation('WEB_RELUSE', true)
user.auth_required_or_abort(authparams);
if (prs.iamContact()) // Als ik contactpersoon ben dan moet ik het ook van dit bedrijf zijn
user.auth_required_or_abort(prs.iamContact(params.bedrijf_key));
var canAdd = (authparams && authparams.ALGwritelevel < 9); // Alleen met WEB_RELUSE rechten mag ik contactpersonen toevoegen en wijzigen.
}
@@ -127,6 +124,13 @@ function contactpersoon_list (params)
if (bedrijf_key > 0)
sql += " AND b.prs_bedrijf_key = " + bedrijf_key;
if (user.iamContact()) // een stukje autorisatie, als ik contactpersoon ben dan moet ik het ook van dit bedrijf zijn
sql += " AND b.prs_bedrijf_key IN"
+ " (SELECT prs_bedrijf_key"
+ " FROM prs_contactpersoon"
+ " WHERE prs_perslid_key = " + user_key
+ " AND prs_contactpersoon_verwijder IS NULL)";
if (!search)
{
if (intern)

View File

@@ -16,7 +16,6 @@
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/bedrijfselector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="./prs.inc" -->
<%
FCLTHeader.Requires({plugins:["jQuery", "kenmerk"] });
@@ -71,9 +70,9 @@ var ALGreadlevel = (authparams? authparams.ALGreadlevel : 9);
<td><input type="text" class="fld wildcard" name="contact_name" <%="value='" + (contact_name != ""? safe.htmlattr(contact_name) : "") + "'"%>></td>
</tr>
<% var filtercode = null;
if (prs.iamContact())
if (user.iamContact())
filtercode = "CP";
FCLTbedrijfselector("bedrijf_key", // company
FCLTbedrijfselector("bedrijf_key",
"sgComp",
{ companyKey: comp_key,
label: L("lcl_prs_company"),

View File

@@ -14,6 +14,7 @@
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/bedrijfselector.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="prs_flexkenmerk.inc" -->
@@ -133,28 +134,33 @@ if (cps_key > -1)
<%
BLOCK_START("prsPerslid", L("lcl_prs_basisblok"));
sql = "SELECT prs_bedrijf_key"
+ ", prs_bedrijf_naam"
+ " FROM prs_v_aanwezigbedrijf"
+ " WHERE prs_bedrijf_intern IS NULL"
+ " ORDER BY prs_bedrijf_naam_upper";
FCLTselector("prs_bdrkey", sql,
{ label: L("lcl_prs_companies_name"),
initKey: prs_bdrkey,
emptyOption: "",
var filtercode = null;
if (user.iamContact())
filtercode = "CP";
FCLTbedrijfselector("prs_bdrkey",
"sgComp",
{ companyKey: prs_bdrkey,
label: L("lcl_prs_company"),
//autlevel: ALGreadlevel, // Was voorheen niet aanwezig
filtercode: filtercode,
readonly: (prs_bdrkey != -1),
required: true
});
// Een readonly selector heeft geen name, en wordt dus niet gesubmit. Bij toevoegen heb ik die wel nodig.
%>
<input type="hidden" name="prs_bdrkey" value="<%=prs_bdrkey%>">
<% FCLTpersoonselector("prs_prskey",
<%
if (!user.iamContact()) // Die heeft daar mee te maken
{
FCLTpersoonselector("prs_prskey",
"sgPerson",
{ label: L("lcl_person"),
perslidKey: prs_prskey,
filtercode: "ORDBO2",
onChange: "onChangeName"
});
}
RWFIELDTR("prs_naam", "fld", L("lcl_prs_companies_contact_naam"), prs_naam, {required: true, maxlength: 30});
RWFIELDTR("prs_tsnvgs", "fldshort", L("lcl_prs_companies_contact_tussenv"), prs_tsnvgs, {maxlength: 15});
RWFIELDTR("prs_voorl", "fldshort", L("lcl_prs_companies_contact_voorl"), prs_voorl, {maxlength: 10});

View File

@@ -4,7 +4,6 @@
Modtime: 06-10-2009 $
File: prs_show_contactpersoon.asp
Status: 60%
Description:
Parameters: cps_key (required)
@@ -14,7 +13,6 @@
<!--#include file="../Shared/iface.inc" -->
<!--#include file="../Shared/persoonselector.inc" -->
<!--#include file="prs_flexkenmerk.inc" -->
<!-- #include file="./prs.inc" -->
<%
FCLTHeader.Requires({plugins:["jQuery"]})
@@ -67,8 +65,8 @@ FCLTHeader.Requires({plugins:["jQuery"]})
oRs.Close();
if (prs.iamContact()) // Als ik contactpersoon ben dan moet ik het ook van dit bedrijf zijn
user.auth_required_or_abort(prs.iamContact(prs_bdrkey));
if (user.iamContact()) // Als ik contactpersoon ben dan moet ik het ook van dit bedrijf zijn
user.auth_required_or_abort(user.iamContact(prs_bdrkey));
%>
<html>

View File

@@ -1437,6 +1437,27 @@ Perslid.prototype.collegakeylist = function ()
return prsKeys.join(", ");
}
// Ben ik contactpersoon van *een* bedrijf (maakt niet uit welke)
// of specifiek van bedrijf_key
Perslid.prototype.iamContact = function _iamContact(bedrijf_key)
{
if (!bedrijf_key && "_user_is_contact" in this) // _user_is_contact caching versie zonder bedrijf voor performance
return this._user_is_contact;
var sql = "SELECT prs_bedrijf_key"
+ " FROM prs_contactpersoon"
+ " WHERE prs_perslid_key = " + user_key
+ " AND prs_contactpersoon_verwijder IS NULL";
if (bedrijf_key)
sql += " AND prs_bedrijf_key = " + bedrijf_key;
var oRs = Oracle.Execute(sql);
var isEof = oRs.Eof;
oRs.Close();
if (!bedrijf_key)
this._user_is_contact = !isEof;
return !isEof;
}
// =================================================================================================
// =================================================================================================