...
Anchor | ||||
---|---|---|---|---|
|
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
//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 | ||||
---|---|---|---|---|
|
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
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 | ||||
---|---|---|---|---|
|
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
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 | ||||
---|---|---|---|---|
|
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
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 | ||||
---|---|---|---|---|
|
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
wfItem.getBooleanMap().put("warningAcknowlegement", null); |
...