...
Anchor | ||||
---|---|---|---|---|
|
Questa è un'applicability rule che viene valutata prima di eseguire altre validazioni.
Se ritorna true allora vengono eseguite le altre validazioni altrimenti no.
Oltre al check previsto da isNotLegacy , verifica anche che il progetto in questione sia relativo ad un anno maggiore o uguale del 2019, altrimenti vengono disattivate le validazioni e le sincronizzazioni.
Questo approccio è stao scelto per evitare lo scatenarsi delle validazioni su vecchi progetti che non rispettano le nuove e più stringenti validazioni, ed evitare quindi di dovere fare una bonifica a tappeto.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
( object.getYear()!=null && object.getYear().compareTo(2019)>=0 ) && ( object.getBooleanMap().get('legacy')==null || Packages.java.lang.Boolean.FALSE.equals(object.getBooleanMap().get('legacy')) ) |
Anchor | ||||
---|---|---|---|---|
|
Questa è una permissions logic che costruisce dinamicamente i permessi per i progetti per i team dipartimentali.
Se la variabile di configurazione ap.project-centralized-bis-flow.headOfDepartment.enable è settata a true o non è valorizzata allora vengono assegnati al team dipartimentale i seguenti permessi:
- draft: rwfd
- added: rwfd
- submitted: rwf
- approvedUnderNegotiation: rwf
...
- draft: none
- added: none
- submitted: r
- approvedUnderNegotiation: r
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
var wfTask=object;
var wfItem=wfService.getWfItem(wfTask.getWfItemId());
var permissions=wfTask.getPermissions();
var headOfDepartmentPreFlowEnableParam = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project-centralized-bis-flow.headOfDepartment.enable");
var headOfDepartmentPreFlowEnable=("true"==headOfDepartmentPreFlowEnableParam||!headOfDepartmentPreFlowEnableParam)?true:false;
switch(String(wfItem.getWfState().getDescription())){
case "draft":
if(headOfDepartmentPreFlowEnable)
permissions="crwfd"
else
permissions="";
break;
case "added":
if(headOfDepartmentPreFlowEnable)
permissions="rwfd"
else
permissions="";
break;
case "submitted":
if(headOfDepartmentPreFlowEnable)
permissions="rwf"
else
permissions="r";
break;
case "approvedUnderNegotiation":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="rwf"
else
permissions="r";
break;
}
wfTask.setPermissions(permissions);
|
Anchor | ||||
---|---|---|---|---|
|
Questa logica viene eseguita in fase di creazione di un nuovo progetto.
Vengono effettuate le seguenti operazioni:
...
Anchor | ||||
---|---|---|---|---|
|
Questa validazione viene triggerata in fase di creazione di un nuovo oggetto solo se l'utente è in visione dipartimentale e la configurazione ap.<tipologia>.owner.internalOrganizationUnit.mandatory è settata a true.
Se questa configurazione non viene trovata la validazione NON viene eseguita.
Verifica che l'utente che sta creando un nuovo oggetto a livello dipartimentale, specifichi come responsabile scientifico una persona che afferisce al proprio dipartimento (alla data specificata).
Il nome del metadato che contiene la data viene estratta dalla configurazione ap.<tipologia>.ownerWithSameDepartmentAsHeadValidator.dateMap.discriminator.
Se questa configurazione NON è presente viene usato il metadato startDate.
Con <tipologia> viene inteso il codice a tre lettere in minuscolo che indica la tipologia radice dell'oggetto in questione come ad esempio : lab, eqp, inm, prj, ...
Per un elenco esaustivo fare riferimento all'"Alberatura tipologie RM/AP"
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
//validator per headofdepartment
//prima controllo che non ci siano stati errori
if(!errors.hasErrors()){
var list=gaAuthorizationService.getAuthoritiesInfoSelectableDisplayList("/DEPARTMENT/ap.profile");
//controllo per verificare se sono in visione dipartimentale o no
if(list.get(0).getIdentifyingValue()!=-1){
if (object.getId()==null){
//gli altri controlli non li faccio, ci pensano gli altri validator
var owner= object.getPersonMap().get("owner");
var ownerPositionSearch = new Packages.it.cilea.ga.command.PositionSearchCommand();
ownerPositionSearch.setPersonId(owner.getId());
var typeForConfig = wfService.getWfItemType(object.getWfItemTypeId());
if (!typeForConfig.getParentWfItemTypeSet().isEmpty()) {
var parentSetIterator = typeForConfig.getParentWfItemTypeSet().iterator();
while (parentSetIterator.hasNext()){
typeForConfig = parentSetIterator.next();
if (!typeForConfig.getParentWfItemTypeSet().isEmpty()) {
var parentParentSetIterator = typeForConfig.getParentWfItemTypeSet().iterator();
while (parentParentSetIterator.hasNext()){
typeForConfig = parentParentSetIterator.next();
break;
}
}
break;
}
}
var dateDiscriminator = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap." + typeForConfig.getIdentifier().toLowerCase() + ".ownerWithSameDepartmentAsHeadValidator.dateMap.discriminator");
if(dateDiscriminator == null){
dateDiscriminator = 'startDate';
}
if (object.getDateMap().get(dateDiscriminator)==null)
throw ("Cannot retrieve "+dateDiscriminator+". Check configuration ap.<type>.ownerWithSameDepartmentAsHeadValidator.dateMap.discriminator");
ownerPositionSearch.setDate(object.getDateMap().get(dateDiscriminator).getTime());
ownerPositionSearch.setOrganizationUnitTypeDescription("department");
ownerPositionSearch.setDiscriminator("research");
var ownerPositionSet = gaService.getPositionSearchList(ownerPositionSearch, 0);
var maxPriority = Packages.it.cilea.ga.util.GaUtil.getMaxPriority(ownerPositionSet, "research", "department");
var mandatory=Packages.it.cilea.wf.util.WfUtil.getMandatory(object,"owner");
if(mandatory){
//ciclo posittion in cerca del dipartimento della person
var department=null;
var ownerPositionSetIterator=ownerPositionSet.iterator();
while (ownerPositionSetIterator.hasNext()){
var position=ownerPositionSetIterator.next();
if (maxPriority == null || maxPriority.equals(position.getPriority())) {
department=position.getOrganizationUnit();
//log.error("department id: "+department.getOrganizationUnitId());
}
}
//uso un flag dato che devo ciclare su tutti i possibili dipartimenti
var flag=false;
var listIterator=list.iterator();
if (department!=null){
while(listIterator.hasNext()){
var selectable=listIterator.next();
//log.error("selectable getIdentifyingValue: "+selectable.getIdentifyingValue());
if(department.getOrganizationUnitId()==selectable.getIdentifyingValue()){
flag=true;
}
}
}
if(!flag){
errors.reject("error.owner.mustBeSameAsHead");
}
}
}
}
}
|
...