Versions Compared

Key

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

...

  • Codice progetto: identifier
  • Nome progetto
    Viene valutata la variabile di configurazione ap.prj.descriptionAndGrantNumberConcatenationEnabled.
    Se valorizzata a true allora vengono usati gli attributi concatenati stringMap[grantNumber]-description. Se stringMap[grantNumber] è nullo allora viene usato solo l'attributo description (senza nemmeno il trattino), se description è nullo allora viene usato solo l'attributo stringMap[grantNumber] (senza nemmeno il trattino).
    Se NON valorizzata a true allora viene usato l'attributo description.
    In ogni caso la stringa verrà troncata a 255 caratteri per limitazioni lato UGOV PJ (se il numero di caratteri sarà maggiore).
  • Importo progetto
    Viene valutata la variabile di configurazione ap.project.financing.internalCost.send2ugov.forced.
    Se valorizzata a true allora viene usato l'attributo internalCost
    Se NON valorizzata a true allora
    • Se l'ateneo è capofila allora viene inviato il risultato della seguente formula globalCost-(globalCost-globalContribution-internalCofinancing-manHoursCofinancing). E' possibile disabilitare questa verifica su una determinata tipologia di progetti (itemType), e di conseguenza non verrà inviato il risultato della seguente formula globalCost-(globalCost-globalContribution-internalCofinancing-manHoursCofinancing) (per la Ricerca non competitiva), settando a false la variabile di configurazione ap.PARAMETRIC_TYPE_LOWER_CASE.partner.main.required.
      Esempio variabile: ap.prj.research.int.partner.main.required. In tutti gli altri casi il controllo verrà fatto.
    • Se l'ateneo NON è capofila allora viene inviato internalCost
    L'invio viene effettuato se l'importo è non nullo e maggiore di zero.
  • Data inizio validità:
    Viene usato l'attributo startDate.
  • Data fine validità:
    Viene usato l'attributo endDate se non sono prensenti delle proroghe (elementi di tipo extension).
    Viene usato l'attributo originalEndDate se sono prensenti delle proroghe (elementi di tipo extension).
  • Data inizio validità del progetto dal punto di vista contabile:
    Viene usato l'attributo expenditureStartDate.
  • Data fine validità del progetto dal punto di vista contabile:
    Viene usato l'attributo expenditureEndDate.
  • Data proroga uffciale:
    Viene usato l'attributo endDate se sono prensenti delle proroghe (elementi di tipo extension).
    Viene inviato null se non sono prensenti delle proroghe (elementi di tipo extension).
  • CUP: cup
    Inviato se valorizzata a true la variabile di configurazione ap.project.cup.send2ugov.enable.
  • Riferimento Data Management System (Sistema Documentale): externalDmsIdentifier
    Inviato l'identifier del progetto se valorizzata a true la variabile di configurazione ap.prj.externalDmsIdentifier.autogenerated, in tutti gli altri casi viene inviato externalDmsIdentifier.
  • Responsabili scientifici: owner
    Inviate anche date di inizio e fine se valorizzata a true la variabile di configurazione ap.project.owner.starDate.required.
    La data di fine viene inviata SOLO se minore della data recuperata dalla configurazione ap.<wfItemType>.contributorAndOwner.validator.date.end.discriminator.
    Per i Responsabili scientifici, nella scheda, può essere visibile il Ruolo (visibilità pilotata da configuration ap.prj.owner.role.enabled con default false)
    E' buona cosa inserire prima nel flusso, in caso di attivazione dei ruoli, la validazione ownerRoleSend2UgovValidatorProject, a cui è delegata la correttezza dei dati.
  • Partecipanti: contributor
    Inviate anche date di inizio e fine se valorizzata a true la variabile di configurazione ap.project.contributor.starDate.required.
    La data di fine viene inviata SOLO se minore della data recuperata dalla configurazione ap.<wfItemType>.contributorAndOwner.validator.date.end.discriminator.
  • Unità organizzative interne: internalOrganizationUnit
  • Finanziatori: grantor
    Inviato se valorizzata a true la variabile di configurazione ap.project.grantor.send2ugov.enable.
    Se valorizzata a true la configurazione ap.prj.grantor.financingQuota.enabled nel form è possibile inserire anche le quote di finanziamento associate, che vengono inviate a PJ
  • Partner: partner
    Inviato se valorizzata a true la variabile di configurazione ap.project.partner.send2ugov.enable.
  • Tipo progetto: come da mappatura tassonomia ap-item-type.xls
  • Schema di finanziamento: come da mappatura tassonomia ap-item-type.xls
  • Stato progetto: come da mappatura tassonomia ap-item-type.xls

...

Code Block
languagejs
linenumberstrue
collapsetrue
			var Logic = function(wfItem, dtoPj, superLogic, errors, messageUtil, request, gaService, wfService, wfTaskService, searchBuilderTemplate, log) {
			this.wfItem=wfItem;
			this.dtoPj=dtoPj;
			this.superLogic=superLogic;
			this.errors=errors;
			this.messageUtil=messageUtil;
			this.request=request;
			this.gaService=gaService;
			this.wfService=wfService;
			this.wfTaskService=wfTaskService;
			this.searchBuilderTemplate=searchBuilderTemplate;
			this.log=log;
			this.setInternalOrgUnitList = function() {
				var internalOrganizationUnitSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(wfItem, "it.cilea.wf.model.WfItemElement","internalOrganizationUnit", wfService);
				var internalOrganizationUnitSetIterator=internalOrganizationUnitSet.iterator();
				while (internalOrganizationUnitSetIterator.hasNext()){
					var element = internalOrganizationUnitSetIterator.next();
					var orgUnit = element.getOrganizationUnitMap().get("ouId");
					var orgUnitRole = element.getWfDictionaryMap().get("roleId");
					dtoPj.getDTOUoPjs().add(superLogic.getOrganizationUnit(orgUnit, orgUnitRole, errors));
				}
			};			
			this.setFinanciers = function() {
				var sendGrantor2Ugov = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.grantor.send2ugov.enable");
				if (sendGrantor2Ugov && sendGrantor2Ugov.trim().equalsIgnoreCase("true")){
					var contractorSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(wfItem, "it.cilea.wf.model.WfItemElement", "grantor",wfService);
					var contractorSetIterator = contractorSet.iterator();
					while (contractorSetIterator.hasNext()){
						var element = contractorSetIterator.next();
						//var organizationUnit = element.getOrganizationUnitMap().get("grantorId");
						var enteFinanziatore = superLogic.getEnteFinanziatore(element, this.getFinancing(), contractorSet.size(), errors);
						dtoPj.getDTOEfPjs().add(enteFinanziatore);
					}
				}
			};
			this.setPartners = function() {
				var sendPartner2Ugov = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.partner.send2ugov.enable");
				if (sendPartner2Ugov && sendPartner2Ugov.trim().equalsIgnoreCase("true")){
					var partnerSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(wfItem, "it.cilea.wf.model.WfItemElement", "partner",wfService);
					var partnerSetIterator=partnerSet.iterator();
					while (partnerSetIterator.hasNext()){
						var element=partnerSetIterator.next();
						var organizationUnit = element.getOrganizationUnitMap().get("partnerId");
						var partnerRole = element.getWfDictionaryMap().get("partnerRole");
						var partecipante = superLogic.getPartecipante(organizationUnit,  partnerRole, errors);
						dtoPj.getDTOPartPjs().add(partecipante)
					}
				}			
			};
			this.getContribution = function() {
				return wfItem.getNumberMap().get("internalContribution");
			};
			this.getCofinancing = function() {
				return wfItem.getNumberMap().get("internalCofinancing");
			};
			this.getFinancing = function() {
				        var coordinatorRoleId = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.partner.role.main");
				        var myOrganization = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("rm.orgunit.external.myOrganization");
				        var forcedPjInternalCost = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.financing.internalCost.send2ugov.forced");
				        if (forcedPjInternalCost == null)
					            forcedPjInternalCost = false;
				        else if (forcedPjInternalCost.equalsIgnoreCase("true")) {				
					forcedPjInternalCost=            forcedPjInternalCost = true;
				        } else {
					forcedPjInternalCost=            forcedPjInternalCost = false;
				        }
				
				        if (!forcedPjInternalCost) {
					            if (coordinatorRoleId == null || myOrganization == null) {
						                throw "Configuration variables ap.project.partner.role.main and rm.orgunit.external.myOrganization MUST BE DEFINED";
					            } else {
						coordinatorRoleId=                coordinatorRoleId = new Packages.java.lang.Integer(coordinatorRoleId);
						myOrganization=                myOrganization = new Packages.java.lang.Integer(myOrganization);
					}		
					            }
		            var partnerSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(wfItem, "it.cilea.wf.model.WfItemElement", "partner", wfService);
					            var partnerSetIterator = partnerSet.iterator();
					            while (partnerSetIterator.hasNext()) {
						                var element = partnerSetIterator.next();
			 
						                var orgUnitRole = element.getWfDictionaryMap().get("partnerRole");
						                if (orgUnitRole == null) {
							                    errors.reject("error.project.partner.missingRole");
							                    throw "Detected partner without role";
						                }
						                var confVal = Packages.it.cilea.wf.util.WfUtil.getParametricConfiguration("ap.<itemType>.partner.main.required", object.getWfItemType());			
						                if (!Packages.org.apache.commons.lang.StringUtils.equalsIgnoreCase("false", confVal)) {
							                    var orgUnit = element.getOrganizationUnitMap().get("partnerId");
							if                    if (myOrganization.equals(orgUnit.getId()) && coordinatorRoleId.equals(orgUnitRole.getId())) {				
								                        var globalCost = wfItem.getNumberMap().get("globalCost");
								                        if (globalCost == null)
									globalCost=                            globalCost = Packages.java.math.BigDecimal.ZERO;
								
								                        var globalContribution = wfItem.getNumberMap().get("globalContribution");
								                        if (globalContribution == null)
									globalContribution=                            globalContribution = Packages.java.math.BigDecimal.ZERO;
		
		                        var internalCofinancing = wfItem.getNumberMap().get("internalCofinancing");
		                        if (internalCofinancing == null)
		
								var internalCofinancing=                            internalCofinancing = Packages.java.math.BigDecimal.ZERO;
		                        var manHoursCofinancing = wfItem.getNumberMap().get("internalCofinancingmanHoursCofinancing");
								                        if (internalCofinancingmanHoursCofinancing == null)
									internalCofinancing=                            manHoursCofinancing = Packages.java.math.BigDecimal.ZERO;
						
		
								                        return globalCost.subtract(globalCost.subtract(globalContribution).subtract(internalCofinancing).subtract(manHoursCofinancing));
							                    }
						}		
					}
				}				
				                }
		            }
		        }
		        return wfItem.getNumberMap().get("internalCost");
			    };
			this.getStartDate = function() {
				return wfItem.getDateMap().get("startDate");				    	
			};
			this.getEndDate = function() {
				return wfItem.getDateMap().get("endDate");
			};
						
			this.getExpenditureStartDate = function() {
				return wfItem.getDateMap().get("expenditureStartDate");			    	
			};
			this.getExpenditureEndDate = function() {
				return wfItem.getDateMap().get("expenditureEndDate");
			};
			this.getCurrentEndDate = function() {
				var extensionSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(wfItem, "it.cilea.wf.model.WfItemElement", "extension", wfService);
				if(extensionSet.isEmpty()){	  
					return null;
				}  else {
					return wfItem.getDateMap().get("endDate");
				}			
			};			
			this.getIdentifier = function() {	
				return wfItem.getIdentifier();
			};
			this.getIdPj = function() {     
 	 			if(wfItem.getIntegerMap().get("ugovId") != null){
 	 	        	return wfItem.getIntegerMap().get("ugovId");
 	            } else {
 	                return null;
 	            }
 	 	    };
			this.getDescription = function() {
				var descriptionAndGrantNumberConcatenationEnabled = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.prj.descriptionAndGrantNumberConcatenationEnabled");
				if (descriptionAndGrantNumberConcatenationEnabled && descriptionAndGrantNumberConcatenationEnabled.trim().equalsIgnoreCase("true")){
					var stringBuilder = new Packages.java.lang.StringBuilder("");
					var descriptionAndGrantNumberConcatenation;
					if(wfItem.getStringMap().get("grantNumber") != null){
						stringBuilder.append(wfItem.getStringMap().get("grantNumber"));
					} 
					
					if(wfItem.getDescription() != null){
						if(stringBuilder.toString() == "") {
							stringBuilder.append(wfItem.getDescription());
						} else {
							stringBuilder.append('-'); 
           					stringBuilder.append(wfItem.getDescription()); 	
						}
					}
					
					descriptionAndGrantNumberConcatenation = stringBuilder.toString();
					
					if(descriptionAndGrantNumberConcatenation == ""){
						return null;
					} else {
						var length=descriptionAndGrantNumberConcatenation.length();
						return descriptionAndGrantNumberConcatenation.substring(0,(length>255)?255:length);
					}
					
				} else {
					if(wfItem.getDescription() != null){
						var length=wfItem.getDescription().length();
						return wfItem.getDescription().substring(0,(length>255)?255:length);
					} else {
						return null;
					}
				}
			};
			this.getCup = function() {
				var sendCup2Ugov = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.cup.send2ugov.enable");
				if (sendCup2Ugov && sendCup2Ugov.trim().equalsIgnoreCase("true")){
					return wfItem.getStringMap().get("cup");
				} else {
					return null;
				}				
			};
			this.getAcronym = function() {
				if(wfItem.getStringMap().get("acronym") != null){
					var length = wfItem.getStringMap().get("acronym").length();
					return wfItem.getStringMap().get("acronym").substring(0,(length>50)?50:length);
				} else {
					return null;
				}
			};
			this.getExternalDmsIdentifier = function() {
				var externalDmsIdentifierAutogenerated = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.prj.externalDmsIdentifier.autogenerated");
				if("true".equals(externalDmsIdentifierAutogenerated)){
					return wfItem.getIdentifier();
				}else {
					return wfItem.getStringMap().get("externalDmsIdentifier");
				}
			};
			this.isSynchronizable = function() {
				var legacy = wfItem.getBooleanMap().get("legacy");
				var financing = this.getFinancing();				
				if (Packages.java.lang.Boolean.TRUE.equals(legacy) || financing==null || Packages.java.math.BigDecimal.ZERO.equals(financing))
					return Packages.java.lang.Boolean.FALSE;
				else			    
					return Packages.java.lang.Boolean.TRUE;
			};
			this.getResearchNature = function() {
				if(wfItem.getWfDictionaryMap().get("researchNature") == null){
					return null;
				} else {
					return wfItem.getWfDictionaryMap().get("researchNature").getStringMap().get("sourceId");
				}			
			};			
			this.getProjectType = function() {
				return superLogic.getProjectType(wfItem);
			};
			this.getFinanceSchema = function() {
				return this.getProjectType();
			};
			this.getPjInternalCode = function() {
				return null;
			};
			this.getGrantNumber = function() {
				if(wfItem.getStringMap().get("grantNumber") == null){
					return null;
				} else {
					return wfItem.getStringMap().get("grantNumber");
				}		
			};
			this.getManHoursCofinancing = function() {
				return wfItem.getIntegerMapgetNumberMap().get("manHoursCofinancing");
			};
			this.isContributorStartDateRequired = function() {						
				var contributorStartDateRequired=Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.contributor.starDate.required");
				if (contributorStartDateRequired){
					if (contributorStartDateRequired.trim().equalsIgnoreCase("true")){
						return Packages.java.lang.Boolean.TRUE;
					} else if (contributorStartDateRequired.trim().equalsIgnoreCase("false")){
						return Packages.java.lang.Boolean.FALSE;
					} else {
						throw "ap.project.contributor.starDate.required MUST BE true or false";
					}
				} else {
					return Packages.java.lang.Boolean.TRUE;
				}							    
			};				
			this.isOwnerStartDateRequired = function() {
				var ownerStartDateRequired = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project.owner.starDate.required");
				if (ownerStartDateRequired){
					if (ownerStartDateRequired.trim().equalsIgnoreCase("true")){
						return Packages.java.lang.Boolean.TRUE;
					} else if (ownerStartDateRequired.trim().equalsIgnoreCase("false")){
						return Packages.java.lang.Boolean.FALSE;
					} else {
						throw "ap.project.owner.starDate.required MUST BE true or false";
					}
				} else {
					return Packages.java.lang.Boolean.TRUE;
				}
			};
		};
		new Logic(wfItem, dtoPj, superLogic, errors, messageUtil, request, gaService, wfService, wfTaskService, searchBuilderTemplate, log);
		

...

Anchor
financingSumProjectValidator-anchor
financingSumProjectValidator-anchor
financingSumProjectValidator
Questa validazione controlla che la somma dei campi Contributo totale Ateneo, Cofinanziamento Ateneo e Cofinanziamento Ateneo in personale coincida con il valore del Costo totale del progetto per l'Ateneo.
Viene attivata dalla configurazione ap.prj.financing.sum.validation.enabled
Code Block
languagejs
linenumberstrue
collapsetrue
	
			if (ConfigurationUtil.getConfigValue("ap.prj.financing.sum.validation.enabled").equalsIgnoreCase("true")) {
				    var cost = wfItem.getNumberMap().get("internalCost") != null ? wfItem.getNumberMap().get("internalCost") : BigDecimal.ZERO; 
				    var contribution = wfItem.getNumberMap().get("internalContribution") != null ? wfItem.getNumberMap().get("internalContribution") : BigDecimal.ZERO; 
				    var cofinancinginternalCofinancing = wfItem.getNumberMap().get("internalCofinancing") != null ? wfItem.getNumberMap().get("internalCofinancing") : BigDecimal.ZERO; 
			    var manHoursCofinancing = wfItem.getNumberMap().get("manHoursCofinancing") != null ? wfItem.getNumberMap().get("manHoursCofinancing") : BigDecimal.ZERO;
			  
				    if (!cost.stripTrailingZeros().equals(contribution.add(cofinancinginternalCofinancing).add(manHoursCofinancing).stripTrailingZeros())) {
					        errors.reject("error.project.financing.sum");	
				}				    }
			}				
		

Anchor
internalOrganizationUnitEditValidator-anchor
internalOrganizationUnitEditValidator-anchor
internalOrganizationUnitEditValidator
Questa validazione impedisce la modifica della Struttura in internalOganizationUnit
se tale Struttura è presente in internalOganizationUnitCost (finanziamenti associati a unità organizzative interne).
Agisce in caso di modifica dei valori del fragment.
Code Block
languagejs
linenumberstrue
collapsetrue
			if (!Packages.java.lang.Boolean.TRUE.equals(object.getWfItem().getBooleanMap().get("legacy"))){  	
				var iouSet= Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object.getWfItem(), "getWfItemElementSet", "it.cilea.wf.model.WfItemElement", "internalOrganizationUnit", wfService);				
				var iouCostSet= Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object.getWfItem(), "getWfItemElementSet", "it.cilea.wf.model.WfItemElement", "internalOrganizationUnitCost", wfService);				
				var iouSetIterator=iouSet.iterator();
				var iouCostSetIterator=iouCostSet.iterator();
				var ouSet = new Packages.java.util.HashSet();
				while (iouSetIterator.hasNext()){
					var element = iouSetIterator.next();
					ouSet.add(element.getOrganizationUnitMap().get("ouId"));
				}
				var ouCostSet = new Packages.java.util.HashSet();
				while (iouCostSetIterator.hasNext()){
					var element = iouCostSetIterator.next();
					ouCostSet.add(element.getOrganizationUnitMap().get("ouId"));
				}
				if(!ouSet.containsAll(ouCostSet)){
					errors.reject("error.project.internalOrganizationUnit.editOrDelete");
				}
			}
		

...