Versions Compared

Key

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

...

Anchor
ethicCommiteeAuthorizationOrganizationValidatorProject-anchor
ethicCommiteeAuthorizationOrganizationValidatorProject-anchor
ethicCommiteeAuthorizationOrganizationValidatorProject
Questa validazione controlla che Se l'autorizzazione è stata concessa, deve essere presente l'ente che l'ha concessa nel tab "Comitato Etico".
Dal punto di vista del modello dati si tratta degli elementi di tipo ethicCommiteeTopic
Per maggiori dettagli cfr. excel modello dati dell'entità Progetto
Code Block
languagejs
linenumberstrue
collapsetrue
	
			//log.error("Sono nel ethicCommiteeAuthorizationOrganizationValidatorProject");
			if (!Packages.java.lang.Boolean.TRUE.equals(wfItem.getBooleanMap().get("legacy"))){	
				var ethicCommiteeApplicability = object.getBooleanMap().get("ethicCommiteeApplicability");
				//prima di tutto si deve attivare solo se ethicCommiteeApplicability è su true
				if (ethicCommiteeApplicability==true){
					
					var ethicCommiteeSubmitted = object.getBooleanMap().get("ethicCommiteeSubmitted");
					//poi solo se ethicCommiteeSubmitted è su true
					if(ethicCommiteeSubmitted==true){
					
						var ethicCommiteeAuthorizationDictionary= object.getWfDictionaryMap().get("ethicCommiteeAuthorization");
						
						if(ethicCommiteeAuthorizationDictionary!=null){
						
							var ethicCommiteeAuthorizationDictionaryDescription= wfService.getWfDictionary(ethicCommiteeAuthorizationDictionary.getId()).getDescription();
							
							if (ethicCommiteeAuthorizationDictionaryDescription.equals("Concessa")){
								//se concessa allora il validator si deve attivare
								var ethicCommiteeAuthorizationOrganization = object.getOrganizationUnitMap().get("ethicCommiteeAuthorizationOrganization");
								if(ethicCommiteeAuthorizationOrganization==null){
									errors.reject("error.project.ethicCommiteeAuthorizationOrganization.requiredIfGranted");
								}
							}
						}
					}
				}
			}
		

Anchor
expenditureStartDateAndExpenditureEndDateValidator-anchor
expenditureStartDateAndExpenditureEndDateValidator-anchor
expenditureStartDateAndExpenditureEndDateValidator
Questa validazione controlla che la data di ammissibilità delle spese preceda la data di fine validità del progetto
Dal punto di vista del modello dati si tratta degli attributi expenditureStartDate e expenditureEndDate
Per maggiori dettagli cfr. modello dati dell'entità in questione
Code Block
languagejs
linenumberstrue
collapsetrue
		
			if (!Packages.java.lang.Boolean.TRUE.equals(object.getBooleanMap().get("legacy"))){
				if(object.getDateMap().get("expenditureEndDate") != null && object.getDateMap().get("expenditureStartDate") != null){
					if(object.getDateMap().get("expenditureStartDate").getTime().after(object.getDateMap().get("expenditureEndDate").getTime())){
						errors.reject("error.date.expenditureStartDateEndDateNotCompatible");					
					}			
				}
			}
		

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.project.internalOrganizationUnit.role.main");
					if (!internalOrganizationUnitCoordinatorRole){
						throw "Configuration variable ap.project.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("ouRole");
						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
wfActionLogicTransitionLogger-anchor
wfActionLogicTransitionLogger-anchor
wfActionLogicTransitionLogger
Questa logica serve per la gestione del logging delle transizioni di stato nel metadato transitionLog.
Se il metadato NON è presente nel modello dati, non sarà visibile nell'interfaccia web.
Questa logica viene inserita come enter action logic per tutti gli stati nei flussi per i quali si vuole abilitare il logging delle transizioni di stato.
Se necessario, è possibile richiedere all'utente che sta effettuando la transizione di stato di inserire un messaggio che giustifichi la transizione di stato: questo messaggio verrà conservato nel log.
La gestione del messaggio opzionale è gestito con il metadato transitionComment che deve essere configurato come metadato @Required. per la validazione di enter.
Code Block
languagejs
linenumberstrue
collapsetrue
			var formatter=new Packages.java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
			var currentDate="["+formatter.format(new Packages.java.util.Date())+"]";
			var user=Packages.it.cilea.ga.authorization.context.GaAuthorizationUserHolder.getUser();
			
			if (user!=null){
				var message="";
				if(Packages.org.apache.commons.lang.StringUtils.isNotBlank(wfItem.getClobMap().get("transitionsLog"))){
					message+="_______________________________________________________________"+ "

";
				} else {				
					wfItem.getClobMap().put("transitionsLog", "");
				}}
			if (user!=null){
				message+=currentDate+" <strong>"+user.getLastName()+" "+user.getFirstName()+"</strong> ("+user.getUsername()+")"+"
";
			} else {
				message+=currentDate+" <strong>system</strong>
";
			}
			
			message+="Transizione verso "<strong>"+wfItem.getWfState().getDisplayValue()+"</strong>" ("+wfItem.getWfState().getDescription()+")";
				if (Packages.org.apache.commons.lang.StringUtils.isNotBlank(wfItem.getStringMap().get("transitionComment"))){			
					message+="
<strong>Motivazione transizione di stato</strong>
";
					message+="<i>"+wfItem.getStringMap().get("transitionComment")+"</i>";				
				}
				message+="
";			
				wfItem.getClobMap().put("transitionsLog", wfItem.getClobMap().get("transitionsLog")+message);
				wfItem.getStringMap().put("transitionComment", null);
			}
		

Anchor
wfActionLogicWarningHandler-anchor
wfActionLogicWarningHandler-anchor
wfActionLogicWarningHandler
Questa logica serve per la gestione dei messaggi di warning.
E' necessario inserirla come enter action logic per tutti gli stati di tutti i flussi che prevedono messaggi di warning.
La gestione dei warning è pilotata dall'attributo booleano warningAcknowlegement che deve essere configurato come validazione di enter con il validator @Boolean.TRUE specificando di volta in volta il messaggio di warning da presentare. Per maggiori dettagli cfr. modello dati dell'entità in oggetto
Code Block
languagejs
linenumberstrue
collapsetrue
			wfItem.getBooleanMap().put("warningAcknowlegement", null);
		

...