Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Anchor
organizationUnitRoleValidatorProject-anchor
organizationUnitRoleValidatorProject-anchor
organizationUnitRoleValidatorProject
Questa validazione controlla che esista almeno una unità organizzativa interna, se esiste un ruolo principale deve essere definito.
Ci deve essere uno e un solo ruolo Principale (Main)
Dal punto di vista del modello dati si tratta degli elementi di tipo internalOrganizationUnit
Per maggiori dettagli cfr. excel modello dati dell'entità Progetto
Code Block
languagejs
linenumberstrue
collapsetrue
			
			if (!Packages.java.lang.Boolean.TRUE.equals(wfItem.getBooleanMap().get("legacy"))){				
				var orgUnitSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "getWfItemElementSet", "it.cilea.wf.model.WfItemElement", "internalOrganizationUnit", wfService);
				if (orgUnitSet.size()<1){
					errors.reject("error.project.multipleInternalOrganization.atLeast1");
				} else {
					var internalOrganizationUnitCoordinatorRole=Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.prj.internalOrganizationUnit.role.main");
					if (!internalOrganizationUnitCoordinatorRole){
						throw "Configuration variable ap.prj.internalOrganizationUnit.role.main MUST BE DEFINED"; 								
					} else {
						internalOrganizationUnitCoordinatorRole=new Packages.java.lang.Integer(internalOrganizationUnitCoordinatorRole);
					}
					var orgUnitSetIterator=orgUnitSet.iterator();
					var count=0;											
					while (orgUnitSetIterator.hasNext()){											
						var element=orgUnitSetIterator.next();												
						var ouRole=element.getWfDictionaryMap().get("roleId");
						if (ouRole!=null && internalOrganizationUnitCoordinatorRole.equals(ouRole.getId())){
							count++;	
						}												
					}
					if (count==0){
						errors.reject("error.project.multipleInternalOrganization.missingMain");
					}
					else if (count>1) {
						errors.reject("error.project.multipleInternalOrganization.tooManyMain");
					}
			} 		
		}
		

Anchor
ownerRoleForIdentifierValidatorProject-anchor
ownerRoleForIdentifierValidatorProject-anchor
ownerRoleForIdentifierValidatorProject
Questa validazione controlla che esista almeno un responsabile con il ruolo che è configurato fra quelli utili
al calcolo del codice del Progetto.
Dal punto di vista del modello dati si tratta degli elementi di tipo owner
Per maggiori dettagli cfr. excel modello dati dell'entità Progetto
Code Block
languagejs
linenumberstrue
collapsetrue
			
			if (!Packages.java.lang.Boolean.TRUE.equals(wfItem.getBooleanMap().get("legacy"))){		
				if (WfUtil.getParametricConfiguration("ap.<itemType>.owner.role.enabled", object.getWfItemType()).equalsIgnoreCase("true")){
					var ownerSet = FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "getWfItemElementSet", "it.cilea.wf.model.WfItemElement", "owner", wfService);
					var ownerRolesForIdentifier = WfUtil.getParametricConfiguration("ap.<itemType>.owner.identifier.roles", wfService.getWfItemType(wfItem.getWfItemTypeId()));
					if (ownerRolesForIdentifier != null) {
						var rolesArray = ownerRolesForIdentifier.split(",");
						var ownerSetIterator = ownerSet.iterator();
						var count = 0;								
						while (ownerSetIterator.hasNext()){											
							var element = ownerSetIterator.next();												
							var role = element.getWfDictionaryMap().get("roleId").getInternalSourceIdentifier();
							if (Packages.java.util.Arrays.asList(rolesArray).contains(role)){
								count++;
								break;	
							}												
						}
						if (count == 0){
							var rolesError = rolesArray.join(",");
							errors.reject("error.project.owner.missingRoleForIdentifier");
						}
					} else {
						throw "Configuration variable ap.<itemType>.owner.identifier.roles MUST BE DEFINED";
					}
				} 		
			}
		

Anchor
ownerAndOrganizationUnitMatchValidatorProject-anchor
ownerAndOrganizationUnitMatchValidatorProject-anchor
ownerAndOrganizationUnitMatchValidatorProject
Questa validazione controlla che esista per ogni responsabile scientifico del progetto, una unità organizzativa che sia interna nel momento della data di avvio del progetto (startDate) oppure se non c'è questa data in questo momento.
dal punto di vista del modello sono dei dati di tipo: internalOrganizationUnit, owner
Per maggiori dettagli cfr. excel modello dati dell'entità Progetto
Code Block
languagejs
linenumberstrue
collapsetrue
			
			if (!Packages.java.lang.Boolean.TRUE.equals(wfItem.getBooleanMap().get("legacy"))){				
				var orgUnitSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "getWfItemElementSet", "it.cilea.wf.model.WfItemElement", "internalOrganizationUnit", wfService);
				var ownerSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "getWfItemElementSet", "it.cilea.wf.model.WfItemElement", "owner", wfService);				
				var ownerDepartmentSet=new Packages.java.util.HashSet();				
				var internalOrganizationUnitSet=new Packages.java.util.HashSet();
				
				var startDateFromWfItem=wfItem.getDateMap().get("startDate");
				if (startDateFromWfItem!=null){
					startDateFromWfItem=startDateFromWfItem.getTime();	
					if (ownerSet.size()>0){
						var ownerSetIterator=ownerSet.iterator();			
						while (ownerSetIterator.hasNext()){
							var ownerElement=ownerSetIterator.next();			
							var person=ownerElement.getPersonMap().get("ownerId");
							
							var ownerDepartmentPositionSearch = new Packages.it.cilea.ga.command.PositionSearchCommand();
							ownerDepartmentPositionSearch.setPersonId(person.getId());
							ownerDepartmentPositionSearch.setDate(startDateFromWfItem);
							ownerDepartmentPositionSearch.setOrganizationUnitTypeDescription("department");
							ownerDepartmentPositionSearch.setDiscriminator("research");							
							var ownerDepartmentPositionSet = gaService.getPositionSearchList(ownerDepartmentPositionSearch, 0);
							var maxPriority = Packages.it.cilea.ga.util.GaUtil.getMaxPriority(ownerDepartmentPositionSet, "research", "department");
							
							var ownerDepartmentPositionSetIterator=ownerDepartmentPositionSet.iterator();							
							while (ownerDepartmentPositionSetIterator.hasNext()){
								var position=ownerDepartmentPositionSetIterator.next();
								if (maxPriority == null || maxPriority.equals(position.getPriority())) {
									ownerDepartmentSet.add(position.getOrganizationUnit());														
									break;
								}
							}
						}
					}
					if (ownerDepartmentSet.size()>0){
						if (orgUnitSet.size()>0){
				 			var orgUnitSetIterator=orgUnitSet.iterator();			
							while (orgUnitSetIterator.hasNext()){											
								var wfItemElement=orgUnitSetIterator.next();												
								var orgUnit=wfItemElement.getOrganizationUnitMap().get("ouId");
								internalOrganizationUnitSet.add(orgUnit);
							}
						}
					}
					
					if(!internalOrganizationUnitSet.containsAll(ownerDepartmentSet)){
						var nonMatchedDepartmentCollection=Packages.org.apache.commons.collections.CollectionUtils.subtract(ownerDepartmentSet, internalOrganizationUnitSet);
						var nonMatchedDepartmentCollectionIterator=nonMatchedDepartmentCollection.iterator();
						var nonMatchedDepartmentString="";
						var counter=0;
						while(nonMatchedDepartmentCollectionIterator.hasNext()){
							var nonMatchedDepartment=nonMatchedDepartmentCollectionIterator.next();
							if (counter++>0)
								nonMatchedDepartmentString+=", ";
							nonMatchedDepartmentString+=nonMatchedDepartment.getDescription();
						}
						var df =  Packages.org.apache.commons.lang.time.FastDateFormat.getInstance("dd/MM/yyyy");
						var dateAsString=df.format(startDateFromWfItem);
						errors.reject("error.project.multipleInternalOrganization.matchWithDepartmentOwnerNotFound", [dateAsString, nonMatchedDepartmentString], null);
					}
				}
			}
		

...

Anchor
ownerRoleValidator-anchor
ownerRoleValidator-anchor
ownerRoleValidator
Questa validazione opera sugli elementi owner (responsabile scientifico) figli dell'oggetto radice.
Viene verificato che per ogni owner, sia specificato il ruolo (attributo roleId) se attivato dalla configuration "ap.prj.owner.role.enabled"
Per maggiori dettagli cfr. modello dati dell'entità in questione
Code Block
languagejs
linenumberstrue
collapsetrue
	
			if (!Packages.java.lang.Boolean.TRUE.equals(wfItem.getBooleanMap().get("legacy"))){		
				if (Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValueWfUtil.getParametricConfiguration("ap.prj<itemType>.owner.role.enabled", wfService.getWfItemType(wfItem.getWfItemTypeId())).equalsIgnoreCase("true")){
					var elementSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "getWfItemElementSet", "it.cilea.wf.model.WfItemElement", "owner", wfService);
					if (elementSet.size() > 0){
						var elementSetIterator = elementSet.iterator();				
						var elementToEdit = [];
									
						while (elementSetIterator.hasNext()){										
							var element = elementSetIterator.next();												
							var wfItemElementRoleId = element.getWfDictionaryMap().get("roleId");
							
							if(wfItemElementRoleId == null && !wfItemElementRoleId){
								var discriminator = element.getDiscriminator();
								if(element.getDiscriminator().contains(".")){
								 	discriminator = element.getDiscriminator().substring(0, element.getDiscriminator().indexOf("."))
								}
								elementToEdit.push(element.getPersonMap().get("ownerId").getDisplayValue());
							}								
						}
						
						if (elementToEdit.length > 0){
							errors.reject("error.owner.role.required", [elementToEdit.toString()], "error.owner.role.required");
						}			
					}			
				}				
			}
		

...