Versions Compared

Key

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

...

Code Block
languagejs
linenumberstrue
collapsetrue
							
				var person = null;
				var startDate = wfItem.getDateMap().get("proposalStartDate");
			    person = wfItem.getPersonMap().get("owner");
				var person2 = gaService.getPerson(person.getId());
				var ownerElement = new Packages.it.cilea.wf.model.WfItemElement();
				ownerElement.setDiscriminator("owner");
				ownerElement.setWfItemId(wfItem.getId());
				ownerElement.getPersonMap().put("ownerId", person);
				
				if (Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.prj.owner.role.enabled").equalsIgnoreCase("true")){
				 	var myRole = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.prj.owner.role.main");
					if (myRole == null){
						throw "Configuration variables ap.prj.owner.role.main MUST BE DEFINED";
					} else {
						var ownerRole = wfService.getWfDictionary(new Packages.java.lang.Integer(myRole));
						ownerElement.getWfDictionaryMap().put("roleId", ownerRole);
					}
				}
				
				var ownerStartDateDefault = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.ownerStartDate.default");
				if(ownerStartDateDefault != null && "true".equals(ownerStartDateDefault)){
					ownerElement.getDateMap().put("startDate", startDate);
				}
				
				wfService.saveOrUpdate(ownerElement);
				wfItem.getWfItemElementSet().add(ownerElement);
				
				var positionLastSet = person2.getPositionLastSet();
				var maxPriority = Packages.it.cilea.ga.util.GaUtil.getMaxPriority(positionLastSet, "research", "department");
				//var maxPriority2 = Packages.it.cilea.ga.util.GaUtil.getMaxPriority(positionSet, "research", "academicField2000");
				
				
				positionLastSetIterator = positionLastSet.iterator();
				while (positionLastSetIterator.hasNext()){
					var position = positionLastSetIterator.next();
					if (maxPriority == null || maxPriority.equals(position.getPriority())) {
						if ("research".equals(position.getDiscriminator()) && "department"
									.equals(position.getOrganizationUnit().getOrganizationUnitType().getDescription())) {
							var internalOrganizationUnitElement = new Packages.it.cilea.wf.model.WfItemElement();
							internalOrganizationUnitElement.setDiscriminator("internalOrganizationUnit");
							internalOrganizationUnitElement.setWfItemId(wfItem.getId());
							var internalOrganizationUnitRoleId = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.internalOrganizationUnit.role.main");
							var internalOrganizationUnitRole = wfService.getWfDictionary(new Packages.java.lang.Integer(internalOrganizationUnitRoleId));
							internalOrganizationUnitElement.getOrganizationUnitMap().put("ouId", position.getOrganizationUnit());
							internalOrganizationUnitElement.getWfDictionaryMap().put("ouRole", internalOrganizationUnitRole);
							wfService.saveOrUpdate(internalOrganizationUnitElement);
							wfItem.getWfItemElementSet().add(internalOrganizationUnitElement);
							break;
						}
					}
				}
				
				//partner
				var uniquePartnerRoleId = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.partner.role.uniquePartner");
				var myOrganization = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.partner.myOrganization");
				if (uniquePartnerRoleId == null || myOrganization == null){
					throw "Configuration variables ap.project.partner.role.uniquePartner and ap.project.partner.myOrganization MUST BE DEFINED";
				} else {
					uniquePartnerRoleId = wfService.getWfDictionary(new Packages.java.lang.Integer(uniquePartnerRoleId));
					myOrganization = gaService.getOrganizationUnit(new Packages.java.lang.Integer(myOrganization));
					var partnerElement = new Packages.it.cilea.wf.model.WfItemElement();
					partnerElement.setDiscriminator("partner");
					partnerElement.setWfItemId(wfItem.getId());
					partnerElement.getOrganizationUnitMap().put("partnerId", myOrganization);
					partnerElement.getWfDictionaryMap().put("partnerRole", uniquePartnerRoleId);
					wfService.saveOrUpdate(partnerElement);
				}
				
				
				wfItem.getPersonMap().put("owner", null);
				var year = startDate.get(Packages.java.util.Calendar.YEAR);
				wfItem.setYear(new Packages.java.lang.Integer(year));
				true;
			

Anchor
wfActionLogicEnterRecalculateIdentifier-anchorwfActionLogicEnterRecalculateIdentifier-anchor
wfActionLogicEnterRecalculateIdentifier
Questa logica viene eseguita in ingresso allo stato Operativo di un progetto per ricalcolare l'indentifico che viene poi inviato a Ugov PJ.
Richiama la logica di ricalcolo dell'identificativo opportuno solo nel caso in cui questa operazione non sià già stata eseguita (salvataggio di un flag apposito).
Code Block
languagejs
linenumberstrue
collapsetrue

				if(object.getIntegerMap().get("syncCounter").equals(new Integer(1))){
					var startLogic = Packages.it.cilea.wf.WfConstant.START_LOGIC_MAP.get("wfStartLogicIdentifier");
					startLogic.start(object, request);
				}
		
Anchor
isYearGreaterOrEqualThanConfigurationProject-anchor
isYearGreaterOrEqualThanConfigurationProject-anchor
isYearGreaterOrEqualThanConfigurationProject
Questa è un'applicability rule che viene valutata prima di eseguire altre validazioni.
Se ritorna true allora vengono eseguite le altre validazioni altrimenti no.
Verifica anche che il progetto in questione sia relativo ad un anno maggiore o uguale a quello definito nella configurazione ap.prj.year.validation.threashold.
Se la configurazione NON è definita o non può essere convertita in un numero intero valido viene settato uguale a 0.
Questo approccio serve per evitare lo scatenarsi delle validazioni su vecchi progetti che non rispettano nuove e più stringenti validazioni, ed evitare quindi di dovere fare una bonifica a tappeto.
Code Block
languagejs
linenumberstrue
collapsetrue
			var yearTreasholdConf=Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.prj.year.validation.threashold");			
			var year=new Packages.java.lang.Integer(0);			
			if (yearTreasholdConf!=null){
				try{
				year=new Packages.java.lang.Integer(Packages.org.apache.commons.lang.StringUtils.trim(yearTreasholdConf));
				}catch (e){}
			}
			
			(
				object.getYear()!=null 
				&&
				object.getYear().compareTo(year)>=0
			)			
		

...

Anchor
startDateAndEndDateValidator-anchor
startDateAndEndDateValidator-anchor
startDateAndEndDateValidator
Questa validazione controlla che la date di inizio preceda la data di fine
Dal punto di vista del modello dati si tratta degli attributi startDate e endDate
Per maggiori dettagli cfr. modello dati dell'entità in questione
Code Block
languagejs
linenumberstrue
collapsetrue
		
			if(object.getDateMap().get("endDate") != null && object.getDateMap().get("startDate") != null){
				if(object.getDateMap().get("startDate").getTime().after(object.getDateMap().get("endDate").getTime())){
					errors.reject("error.date.startDateEndDateNotCompatible");					
				}			
			}
		

Anchor
startDateOfElementAfterStartDateOfItemValidatorcheckElementDateBetweenItemDateValidator-anchorstartDateOfElementAfterStartDateOfItemValidator
checkElementDateBetweenItemDateValidator-anchor
startDateOfElementAfterStartDateOfItemValidator checkElementDateBetweenItemDateValidator
Code Block
languagejs
linenumberstrue
collapsetrue
			var wfItemElementStartDate = object.getDateMap().get("startDate");
			var wfItemElementEndDate = object.getDateMap().get("endDate");
			var wfItemStartDate = object.getWfItem().getDateMap().get("startDate");
			var wfItemEndDate = object.getWfItem().getDateMap().get("endDate");
			
			var formatter =  Packages.org.apache.commons.lang.time.FastDateFormat.getInstance("dd/MM/yyyy");						
			
			if( wfItemElementStartDate!= null && wfItemStartDate && (wfItemElementStartDate.before(wfItemStartDate) || (wfItemEndDate!=null && wfItemElementStartDate.after(wfItemEndDate)))  ){
				var suffixMessage=" - ";
				if (wfItemEndDate!=null){
					suffixMessage+=formatter.format(wfItemEndDate.getTime());
				} else 
					suffixMessage+="<QUALSIASI DATA MAGGIORE DELLA DATA DI INIZIO>";
				errors.rejectValue("dateMap[startDate]", "error.date.startDateOfElementAfterStartDateOfItemValidator", [formatter.format(wfItemStartDate.getTime()) + suffixMessage], null);					
			}		
			
			if( wfItemElementEndDate != null && wfItemStartDate && (wfItemElementEndDate.before(wfItemStartDate) || (wfItemEndDate != null && wfItemElementEndDate.after(wfItemEndDate)))  ){
				var suffixMessage=" - ";
				if (wfItemEndDate != null){
					suffixMessage += formatter.format(wfItemEndDate.getTime());
				} else 
					suffixMessage += "<QUALSIASI DATA MAGGIORE DELLA DATA DI INIZIO>";
				errors.rejectValue("dateMap[endDate]", "error.date.checkElementDateBetweenItemDateValidator.endDate", [formatter.format(wfItemStartDate.getTime()) + suffixMessage], null);					
			}	
		

Anchor
internalOrganizationUnitValidator-anchor
internalOrganizationUnitValidator-anchor
internalOrganizationUnitValidator
Questa validazione controlla che esista almeno una unità organizzativa responsabile (internalOrganizationUnit)
Per maggiori dettagli cfr. modello dati dell'entità in questione.
Code Block
languagejs
linenumberstrue
collapsetrue
			
			var internalOrganizationUnitWfElementSet=FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "it.cilea.wf.model.WfItemElement","internalOrganizationUnit", wfService);
			if(internalOrganizationUnitWfElementSet.isEmpty()){
				errors.reject("error.internalOrganizationUnit.required");
			}
		

...

Code Block
languagejs
linenumberstrue
collapsetrue
				
			if (!errors.hasErrors() && object.getId()==null){
				var isInternalOrganizationMandatory=WfUtil.getMandatory(object,"owner");
				if (isInternalOrganizationMandatory){
					var checkDate = WfUtil.getCheckDate(object, wfService);
					var positionContext = WfUtil.getPositionContext(object, wfService);					
					var owner = object.getPersonMap().get("owner");		
					var ownerPositionSet = WfUtil.getPositionSet(owner, checkDate, positionContext, "department", gaService);										
					if(ownerPositionSet.isEmpty()){
						var positionContextDescription="";
						var checkDateDescription="";						
						if ("research"==positionContext){
							positionContextDescription="di ricerca";
						}
						if (checkDate==null){
							checkDateDescription="corrente o ultima disponibile"
						} else {
							checkDateDescription="alla data " + FastDateFormat.getInstance("dd/MM/yyyy").format(checkDate);
						}
						errors.reject("error.owner.position", [positionContextDescription,checkDateDescription], null);				
					}
				}
			}
		

...