...
Anchor |
---|
| grantorValidatorCall-anchor |
---|
| grantorValidatorCall-anchor |
---|
|
grantorValidatorCall Questa validazione controlla che esista almeno un ente finanziatore nel tab "Dati generali".
Dal punto di vista del modello dati si tratta degli elementi di tipo
grantor Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var grantorSet = FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "getWfItemElementSet", "it.cilea.wf.model.WfItemElement", "grantor", wfService);
if (grantorSet.size()<1){
errors.rejectAndLocate("error.project.grantor.atLeast1", "grantor");
}
|
Anchor |
---|
| uniqueCodeValidator-anchor |
---|
| uniqueCodeValidator-anchor |
---|
|
uniqueCodeValidator Questa validazione controlla l'unicità del campo Codice bando. Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
if(object.getStringMap().get("code") != null){
var paramMap = new Packages.java.util.HashMap();
paramMap.put("code", object.getStringMap().get("code"));
paramMap.put("wfItemIdNot", object.getId());
var count=searchBuilderTemplate.getSingleObject("getAllCallByCode", paramMap);
if (count>=1)
errors.rejectValue("stringMap[code]", "error.call.code.notUnique");
}
|
Anchor |
---|
| wfStartLogicContinuousTraining-anchor |
---|
| wfStartLogicContinuousTraining-anchor |
---|
|
wfStartLogicContinuousTraining Questa logica viene eseguita in fase di creazione di un nuovo oggetto.
In base alla visione in cui è stato creato l'oggetto, viene effettuato un setup diverso:
-Visione completa:
-Viene estratto il dipartimento dal Direttore del Corso e viene inserito tra i Dipartimenti con ruolo di Organizzatore
-Viene estratto l'Ateneo dalla configurazione OBBLIGATORIA rm.orgunit.external.myOrganization e viene inserito tra i Soggetti terzi, con ruolo di Coordinatore
Visione dipartimentale:
-Viene estratto il dipartimento dal Direttore del Corso e viene inserito tra i Dipartimenti, con ruolo di Coordinatore
Per maggiori dettagli cfr. modello dati dell'entità continuousTraining
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var ownerWfElementSet = FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "it.cilea.wf.model.WfItemElement","owner", wfService);
if(!ownerWfElementSet.isEmpty()){
var ownerWfElement = ownerWfElementSet.iterator().next();
var owner = ownerWfElement.getPersonMap().get("ownerId");
if(owner != null){
var checkDate = WfUtil.getCheckDate(object, wfService);
var positionContext = WfUtil.getPositionContext(object, wfService);
var ownerPositionSet = WfUtil.getPositionSet(owner, checkDate, positionContext, "department", gaService);
var department = GaUtil.getPriorityOrganizationUnit(ownerPositionSet, positionContext, "department");
wfItem.getNumberMap().put("receivedFinancing", Packages.java.math.BigDecimal.valueOf(0));
wfItem.getNumberMap().put("totalSubscriptionFees", Packages.java.math.BigDecimal.valueOf(0));
wfItem.getNumberMap().put("otherFinancing", Packages.java.math.BigDecimal.valueOf(0));
wfItem.getNumberMap().put("totalIncome", Packages.java.math.BigDecimal.valueOf(0));
wfItem.getNumberMap().put("percentageOfEUFinacing", Packages.java.math.BigDecimal.valueOf(0));
wfItem.getNumberMap().put("percentageOfNationalFinacing", Packages.java.math.BigDecimal.valueOf(0));
//in teoria inutile, ma comportamento strano su cint
wfItem.getIntegerMap().put("numberOfInternalTeachers", Packages.java.lang.Integer.valueOf(1));
var coordinatorDictionaryId = WfUtil.getDictionaryByCode(wfService, "ouRoleContinuousTraining.coordinator");
var coordinatorDictionary = wfService.getWfDictionary(coordinatorDictionaryId);
//syso.println("coordinatorDictionaryId: "+ coordinatorDictionaryId);
//syso.println("coordinatorDictionary: "+ coordinatorDictionary);
if(Packages.java.lang.Boolean.FALSE.equals(GaUtil.isCurrentUserInDepartmentView(gaAuthorizationService))){
//syso.println("visione completa");
/*
var myOrganizationIdString = ConfigurationUtil.getConfigValue("rm.orgunit.external.myOrganization");
if(myOrganizationIdString != null){
//syso.println("myOrganizationIdString: "+ myOrganizationIdString);
//syso.println("wfItem.getId(): "+ wfItem.getId());
var myOrganizationId = Packages.java.lang.Integer.parseInt(myOrganizationIdString);
//syso.println("myOrganizationId: "+ myOrganizationId);
var myOrganization = gaService.getOrganizationUnit(myOrganizationId);
var externalOrganizationUnitElement = new Packages.it.cilea.wf.model.WfItemElement();
externalOrganizationUnitElement.setDiscriminator("externalOrganization");
externalOrganizationUnitElement.setWfItemId(wfItem.getId());
externalOrganizationUnitElement.getOrganizationUnitMap().put("ouId", myOrganization);
externalOrganizationUnitElement.getWfDictionaryMap().put("roleId", coordinatorDictionary);
wfService.saveOrUpdate(externalOrganizationUnitElement);
wfItem.getWfItemElementSet().add(externalOrganizationUnitElement);
wfService.saveOrUpdate(wfItem);
if(department != null){
var organizatorDictionaryId = WfUtil.getDictionaryByCode(wfService, "ouRoleContinuousTraining.organizator");
var organizatorDictionary = wfService.getWfDictionary(organizatorDictionaryId);
//syso.println("organizatorDictionaryId: "+ organizatorDictionaryId);
//syso.println("organizatorDictionary: "+ organizatorDictionary);
var internalOrganizationUnitWfElementSet = FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "it.cilea.wf.model.WfItemElement","internalOrganizationUnit", wfService);
var internalOrganizationUnitWfElement = internalOrganizationUnitWfElementSet.iterator().next();
internalOrganizationUnitWfElement.getWfDictionaryMap().put("roleId", organizatorDictionary);
wfService.saveOrUpdate(internalOrganizationUnitWfElement);
wfService.saveOrUpdate(wfItem);
}
}else{
throw "Per creare un nuovo corso di Formazione Continua in visione completa è necessario che sia impostata correttamente la configuration rm.orgunit.external.myOrganization.Contattare Helpdesk";
}
*/
}else{
//syso.println("visione dipartimentale");
if(department != null){
var internalOrganizationUnitWfElementSet = FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "it.cilea.wf.model.WfItemElement","internalOrganizationUnit", wfService);
var internalOrganizationUnitWfElement = internalOrganizationUnitWfElementSet.iterator().next();
internalOrganizationUnitWfElement.getWfDictionaryMap().put("roleId", coordinatorDictionary);
wfService.saveOrUpdate(internalOrganizationUnitWfElement);
wfService.saveOrUpdate(wfItem);
}
}
}
}
true;
|
...
Anchor |
---|
| wfIdentityLogicResearchDivisionProjectPermissionsJs-anchor |
---|
| wfIdentityLogicResearchDivisionProjectPermissionsJs-anchor |
---|
|
wfIdentityLogicResearchDivisionProjectPermissionsJs Questa è una permissions logic che costruisce dinamicamente i permessi per i contratti per il team Divisione Ricerca.
Se l'utente che sta effettuando la creazione del contratto appartiene alla Divisione Ricerca, vengono assegnati i permessi di scrittura a questo team e quelli di sola lettura a livello dipartimentale.
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var wfTask = object;
var wfItem = wfService.getWfItem(wfTask.getWfItemId());
var permissions = "r";
var hasPowerPermissions = Packages.it.cilea.wf.util.WfUtil.isAnyItemCreatorIdentityMatchingThisTaskIdentity(wfTask, wfService);
if (Packages.java.lang.Boolean.TRUE.equals(hasPowerPermissions))
hasPowerPermissions=true;
else
hasPowerPermissions=false;
var hasHelpdeskStartedFlow=Packages.it.cilea.wf.util.WfUtil.isAnyItemCreatorIdentityMatchingAuthoritiesWithThisResource(wfTask, "/HELPDESK/ap/contract.profile", wfService, gaAuthorizationService);
if (Packages.java.lang.Boolean.TRUE.equals(hasHelpdeskStartedFlow))
hasHelpdeskStartedFlow=true;
else
hasHelpdeskStartedFlow=false;
switch("" + String(wfItem.getWfState().getDescription())){
case "draft":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="crwfd"
else
permissions="r";
break;
case "inquiry":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="rwfd"
else
permissions="r";
break;
case "fiscalCheck":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="r"
else
permissions="r";
break;
case "revisionAfterFiscalCheck":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="rwf"
else
permissions="r";
break;
case "approval":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="rwf"
else
permissions="r";
break;
case "approvedAwaitingCountersignedContract":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="rwf"
else
permissions="r";
break;
case "signed":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="rwf"
else
permissions="r";
break;
case "closed":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="rwf"
else
permissions="r";
break;
case "suspended":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="rwf"
else
permissions="r";
break;
}
wfTask.setPermissions(permissions);
|
Anchor |
---|
| wfIdentityLogicMultipleHeadOfDepartmentProjectPermissionsJs-anchor |
---|
| wfIdentityLogicMultipleHeadOfDepartmentProjectPermissionsJs-anchor |
---|
|
wfIdentityLogicMultipleHeadOfDepartmentProjectPermissionsJs Questa è una permissions logic che costruisce dinamicamente i permessi per i contratti per il team dipartimentali
Se l'utente che sta effettuando la creazione del contratto è in visione dipartimentale e appartiene ad un team dipartimentale, vengono assegnati i permessi di scrittura a questo team e quelli di sola lettura a livello Divisione Ricerca.
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var wfTask = object;
var wfItem = wfService.getWfItem(wfTask.getWfItemId());
var permissions = "r";
var formViews = object.getFormViews();
var isOnlyRead=true;
//recupero l'unità organizzativa associata (dipartimento) all'identity/team di questo task
var organizationUnitFromIdentity=Packages.it.cilea.ga.util.GaUtil.getOrganizationUnitFromIdentyForDepartment(gaAuthorizationService.getIdentity(wfTask.getIdentityId()), gaService);
//recupero dall'item la lista dei dipartimenti
var internalOrganizationUnitList=Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(wfItem,
"it.cilea.wf.model.WfItemElement", "internalOrganizationUnit", wfService);
var internalOrganizationUnitListIterator = internalOrganizationUnitList.iterator();
//controllo il ruolo del dipartimento
//isOnlyRead è false se il dipartimento è principale
//isOnlyRead è true se il dipartimento è aggregato
while(internalOrganizationUnitListIterator.hasNext()){
var internalOrganizationUnit=internalOrganizationUnitListIterator.next();
var ou = internalOrganizationUnit.getOrganizationUnitMap().get("ouId");
if (ou.getId().equals(organizationUnitFromIdentity.getId())){
//cerco prima roleId che è il ruolo standard.
//se non lo trovo ricado in ouRole che è quello legacy
var role=internalOrganizationUnit.getWfDictionaryMap().get("roleId");
//if (role==null)
// role=internalOrganizationUnit.getWfDictionaryMap().get("ouRole");
isOnlyRead=Packages.it.cilea.wf.util.WfUtil.isOnlyReadPermission(role, wfItem, "wfIdentityLogicMultipleHeadOfDepartment");
if (Packages.java.lang.Boolean.TRUE.equals(isOnlyRead))
isOnlyRead=true;
else
isOnlyRead=false;
break;
}
}
//verifico se c'è match tra le identity di chi ha creato l'item e l'identity di questo task
//serve per capire se il contratto in questione è stato creato da Divisione Ricerca o da Dipartimento
//e per dare "power permissions" solo al team che ha fatto la creazione.
var hasPowerPermissions=Packages.it.cilea.wf.util.WfUtil.isAnyItemCreatorIdentityMatchingThisTaskIdentity(wfTask, wfService);
if (Packages.java.lang.Boolean.TRUE.equals(hasPowerPermissions))
hasPowerPermissions=true;
else {
//se hasPowerPermissions è false allora dovrebbe essere stato creato dalla Divisione Ricerca
//se però viene cambiato in corso d'opera il dipartimento, non ci sarà più match tra il team dipartimentale che ha creato l'item e il team dipartimentale che dovrebbe accederci.
//per gestire questo scenario controllo se le identity di chi ha effettuao la creazione sono quelle dipartimentali.
var isItemCreatedByDepartmentAuthority=Packages.it.cilea.wf.util.WfUtil.isAllItemCreatorIdentityOfGivenAuthority(wfTask, wfService, gaAuthorizationService, "ROLE_DEPARTMENT");
//se chi ha creato aveva identity dipartimentali...
if (Packages.java.lang.Boolean.TRUE.equals(isItemCreatedByDepartmentAuthority)){
if (isOnlyRead)
hasPowerPermissions=false;
else
hasPowerPermissions=true;
} else {
//se chi ha creato NON aveva identity dipartimentali (Helpdesk o Divisione Ricerca)...
hasPowerPermissions=false;
}
}
switch("" + String(wfItem.getWfState().getDescription())){
case "draft":
if(hasPowerPermissions && !isOnlyRead)
permissions="crwfd"
else if(!hasPowerPermissions && !isOnlyRead){
permissions = "rw";
formViews = "contract/form1.display,contract/form2.display,contract/form3.display,contract/form4.display,contract/form5.display,contract/form6.display,contract/form7";
} else
permissions="r";
break;
case "inquiry":
if(hasPowerPermissions && !isOnlyRead)
permissions="rwfd"
else if(!hasPowerPermissions && !isOnlyRead){
permissions = "rw";
formViews = "contract/form1.display,contract/form2.display,contract/form3.display,contract/form4.display,contract/form5.display,contract/form6.display,contract/form7";
} else
permissions="r";
break;
case "fiscalCheck":
if(hasPowerPermissions && !isOnlyRead)
permissions="r"
else if(!hasPowerPermissions && !isOnlyRead){
permissions = "rw";
formViews = "contract/form1.display,contract/form2.display,contract/form3.display,contract/form4.display,contract/form5.display,contract/form6.display,contract/form7";
} else
permissions="r";
break;
case "revisionAfterFiscalCheck":
if(hasPowerPermissions && !isOnlyRead)
permissions="rwf"
else if(!hasPowerPermissions && !isOnlyRead){
permissions = "rw";
formViews = "contract/form1.display,contract/form2.display,contract/form3.display,contract/form4.display,contract/form5.display,contract/form6.display,contract/form7";
} else
permissions="r";
break;
case "approval":
if(hasPowerPermissions && !isOnlyRead)
permissions="rwf"
else if(!hasPowerPermissions && !isOnlyRead){
permissions = "rw";
formViews = "contract/form1.display,contract/form2.display,contract/form3.display,contract/form4.display,contract/form5.display,contract/form6.display,contract/form7";
} else
permissions="r";
break;
case "approvedAwaitingCountersignedContract":
if(hasPowerPermissions && !isOnlyRead)
permissions="rwf"
else if(!hasPowerPermissions && !isOnlyRead){
permissions = "rw";
formViews = "contract/form1.display,contract/form2.display,contract/form3.display,contract/form4.display,contract/form5.display,contract/form6.display,contract/form7";
} else
permissions="r";
break;
case "signed":
if(hasPowerPermissions && !isOnlyRead)
permissions="rwf"
else if(!hasPowerPermissions && !isOnlyRead){
permissions = "rw";
formViews = "contract/form1.display,contract/form2.display,contract/form3.display,contract/form4.display,contract/form5.display,contract/form6.display,contract/form7";
} else
permissions="r";
break;
case "closed":
if(hasPowerPermissions && !isOnlyRead)
permissions="rwf"
else if(!hasPowerPermissions && !isOnlyRead){
permissions = "rw";
formViews = "contract/form1.display,contract/form2.display,contract/form3.display,contract/form4.display,contract/form5.display,contract/form6.display,contract/form7";
} else
permissions="r";
break;
case "suspended":
if(hasPowerPermissions && !isOnlyRead)
permissions="rwf"
else if(!hasPowerPermissions && !isOnlyRead){
permissions = "rw";
formViews = "contract/form1.display,contract/form2.display,contract/form3.display,contract/form4.display,contract/form5.display,contract/form6.display,contract/form7";
} else
permissions="r";
break;
}
wfTask.setPermissions(permissions);
wfTask.setFormViews(formViews);
|
...
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var wfTask=object;
var wfItem=wfService.getWfItem(wfTask.getWfItemId());
var permissions=wfTask.getPermissions();
var headOfDepartmentPreFlowEnableParam = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.project-centralized-bis-flow.headOfDepartment.enable");
var headOfDepartmentPreFlowEnable=("true"==headOfDepartmentPreFlowEnableParam||!headOfDepartmentPreFlowEnableParam)?true:false;
switch("" + String(wfItem.getWfState().getDescription())){
case "draft":
if(headOfDepartmentPreFlowEnable)
permissions="crwfd"
else
permissions="";
break;
case "added":
if(headOfDepartmentPreFlowEnable)
permissions="rwfd"
else
permissions="";
break;
case "submitted":
if(headOfDepartmentPreFlowEnable)
permissions="rwf"
else
permissions="r";
break;
case "approvedUnderNegotiation":
if(hasPowerPermissions||hasHelpdeskStartedFlow)
permissions="rwf"
else
permissions="r";
break;
}
wfTask.setPermissions(permissions);
|
...
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var requestedIouCostValidationList=[
{"totalValueDiscriminator":"requestedInternalCost", "elementDiscriminator":"internalOrganizationUnitCost", "elementValueDiscriminator":"ouRequestedCost"},
{"totalValueDiscriminator":"requestedInternalContribution", "elementDiscriminator":"internalOrganizationUnitCost", "elementValueDiscriminator":"ouRequestedContribution"},
{"totalValueDiscriminator":"requestedInternalCofinancing", "elementDiscriminator":"internalOrganizationUnitCost", "elementValueDiscriminator":"ouRequestedCofinancing"}
];
var requestedPartnerCostValidationList=[
{"totalValueDiscriminator":"requestedGlobalCost", "elementDiscriminator":"partnerCost", "elementValueDiscriminator":"partnerRequestedCost"},
{"totalValueDiscriminator":"requestedGlobalContribution", "elementDiscriminator":"partnerCost", "elementValueDiscriminator":"partnerRequestedContribution"}
];
var assignedIouCostValidationList=[
{"totalValueDiscriminator":"internalCost", "elementDiscriminator":"internalOrganizationUnitCost", "elementValueDiscriminator":"ouCost"},
{"totalValueDiscriminator":"internalContribution", "elementDiscriminator":"internalOrganizationUnitCost", "elementValueDiscriminator":"ouContribution"},
{"totalValueDiscriminator":"internalCofinancing", "elementDiscriminator":"internalOrganizationUnitCost", "elementValueDiscriminator":"ouCofinancing"}
];
var assignedPartnerCostValidationList=[
{"totalValueDiscriminator":"globalCost", "elementDiscriminator":"partnerCost", "elementValueDiscriminator":"partnerCost"},
{"totalValueDiscriminator":"globalContribution", "elementDiscriminator":"partnerCost", "elementValueDiscriminator":"partnerContribution"}
];
var allValidations=[];
var globalRequestedEnabled=ConfigurationUtil.getLenientBoolean("ap.project.financing.requested.enabled");
var iouCostRequestedEnabled=ConfigurationUtil.getLenientBoolean("ap.project.financing.internalOrganizationUnitCost.requested.enabled");
var iouCostRequestedValidationEnabled=ConfigurationUtil.getLenientBoolean("ap.project.financing.internalOrganizationUnitCost.consistence.requested.validation.enabled");
var iouCostAssignedValidationEnabled=ConfigurationUtil.getLenientBoolean("ap.project.financing.internalOrganizationUnitCost.consistence.assigned.validation.enabled");
var partnerCostRequestedEnabled=ConfigurationUtil.getLenientBoolean("ap.project.financing.partnerCost.requested.enabled");
var partnerCostRequestedValidationEnabled=ConfigurationUtil.getLenientBoolean("ap.project.financing.partnerCost.consistence.requested.validation.enabled");
var partnerCostAssignedValidationEnabled=ConfigurationUtil.getLenientBoolean("ap.project.financing.partnerCost.consistence.assigned.validation.enabled");
if (iouCostAssignedValidationEnabled)
for(var i=0; i<assignedIouCostValidationList.length; i++)
allValidations.push(assignedIouCostValidationList[i]);
if (partnerCostAssignedValidationEnabled)
for(var i=0; i<assignedPartnerCostValidationList.length; i++)
allValidations.push(assignedPartnerCostValidationList[i]);
if (globalRequestedEnabled && iouCostRequestedEnabled && iouCostRequestedValidationEnabled)
for(var i=0; i<requestedIouCostValidationList.length; i++)
allValidations.push(requestedIouCostValidationList[i]);
if (globalRequestedEnabled && partnerCostRequestedEnabled && partnerCostAssignedValidationEnabled)
for(var i=0; i<requestedPartnerCostValidationList.length; i++)
allValidations.push(requestedPartnerCostValidationList[i]);
for(var i=0; i<allValidations.length; i++) {
var validation=allValidations[i];
WfUtil.totalCheckerRejecter(wfItem, new Packages.java.lang.String(validation.totalValueDiscriminator), new Packages.java.lang.String(validation.elementDiscriminator), new Packages.java.lang.String(validation.elementValueDiscriminator), wfService, errors);
}
|
Anchor |
---|
| uniqueIdentifierProject-anchor |
---|
| uniqueIdentifierProject-anchor |
---|
|
uniqueIdentifierProject Questa validazione controlla l'unicità dell'identificativo dell'oggetto.
Questa verifica viene fatta per i casi di generazione di codice "parlante" con possibile collisione con identificativi già presenti.
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var paramMap = new Packages.java.util.HashMap();
paramMap.put("identifier", object.getIdentifier());
var count=searchBuilderTemplate.getSingleObject("getWfItemCount", paramMap);
if (count>1)
errors.reject("error.project.identifier.notUnique");
|
...
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var creationByCallEnabled = ConfigurationUtil.getConfigValue("ap.prj.create-by-call.enabled");
var onlyApprovedCallEnabled = ConfigurationUtil.getConfigValue("ap.prj.create-by-call.only-approved-call.enabled");
var onlyCallWithGrantorEnabled = ConfigurationUtil.getConfigValue("ap.prj.create-by-call.grantor.required.enabled");
var isCreationByCall=wfItem.getBooleanMap().get("isCreationByCall");
if (creationByCallEnabled=="true" && Packages.java.lang.Boolean.TRUE.equals(isCreationByCall)){
var callId=wfItem.getIntegerMap().get("callId");
if (callId==null)
errors.rejectValue("integerMap[callId]","error.prj.start.callId.required");
else {
var call=wfService.getWfItem(callId);
if (call==null)
errors.rejectValue("integerMap[callId]","error.prj.callId.malformed");
else {
if ("true"==onlyApprovedCallEnabled && "approved"!=call.getWfState().getDescription())
errors.rejectValue("integerMap[callId]","error.prj.callId.notApproved");
else {
var projectTypeIdentifier=call.getStringMap().get("linkedProjectType");
if (projectTypeIdentifier==null)
errors.rejectValue("integerMap[callId]","error.prj.callId.defaultProjectType.required");
else {
var wfItemTypeList=wfService.getWfItemTypeByIdentifier(projectTypeIdentifier, 0);
if (CollectionUtils.isEmpty(wfItemTypeList) || wfItemTypeList.size()>1)
errors.rejectValue("integerMap[callId]","error.prj.callId.defaultProjectType.malformed");
}
var grantorIdFromCallgrantorFromCallSet=call.getOrganizationUnitMap().getgetWfItemElementSet("grantor");
if ("true"==onlyCallWithGrantorEnabled && grantorIdFromCall(grantorFromCallSet==null || grantorFromCallSet.size()==0))
errors.rejectValue("integerMap[callId]","error.prj.callId.grantor.required");
}
}
}
}
|
...
Anchor |
---|
| publicInvolvedAtLeastOneValidatorPublicEngagement-anchor |
---|
| publicInvolvedAtLeastOneValidatorPublicEngagement-anchor |
---|
|
publicInvolvedAtLeastOneValidatorPublicEngagement Questa validazione controlla che esista almeno un elemento
publicInvolved, se la tipologia dell'iniziativa è "PEN.FORMAZIONE-COMUNICAZIONE" ("Giornate organizzate di formazione alla comunicazione - rivolta a PTA o docenti")
Dal punto di vista del modello dati si tratta degli elementi
publicInvolved Per maggiori dettagli cfr. modello dati dell'entità publicEngagement
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var itemTypeIdentifier = object.getWfItemType().getIdentifier();
if (Packages.org.apache.commons.lang.StringUtils.equals("PEN.FORMAZIONE-COMUNICAZIONE", itemTypeIdentifier)) {
var publicInvolvedSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(object, "getWfItemElementSet", "it.cilea.wf.model.WfItemElement", "publicInvolved", wfService);
if (publicInvolvedSet.isEmpty()) {
errors.reject("error.publicEngagement.publicInvolved.atLeast1");
} else {
var publicInvolvedSetIterator = publicInvolvedSet.iterator();
while (publicInvolvedSetIterator.hasNext()) {
var publicInvolved = publicInvolvedSetIterator.next();
var dictionary = publicInvolved.getWfDictionaryMap().get("dictionary");
var code = dictionary.getStringMap().get("code");
if (new String("publicInvolvedPublicEngagement.other-professors").valueOftoString() != new String(code).valueOftoString() && new String("publicInvolvedPublicEngagement.other-administratives").valueOftoString() != new String(code).valueOftoString() && new String("publicInvolvedPublicEngagement.other-unstructored-research-staff").valueOftoString() != new String(code).valueOftoString() && new String("publicInvolvedPublicEngagement.other-students-phd").valueOftoString() != new String(code).valueOftoString()) {
errors.reject("error.publicEngagement.publicInvolved.consistent");
}
}
}
}
|
...
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var wfTask = object;
var wfItem = wfService.getWfItem(wfTask.getWfItemId());
var permissions = "r";
var isOnlyRead = true;
var internalOrganizationUnitWfItemElementSet = Packages.it.cilea.core.fragment.util.FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(wfItem,
"it.cilea.wf.model.WfItemElement", "internalOrganizationUnit", wfService);
//log.error("xxx got ouSet");
//recupero l'unità organizzativa associata (dipartimento) all'identity/team di questo task
var organizationUnitFromIdentity = Packages.it.cilea.ga.util.GaUtil.getOrganizationUnitFromIdentyForDepartment(gaAuthorizationService.getIdentity(wfTask.getIdentityId()), gaService);
//log.error("xxx got organizationUnitFromIdentity: " + organizationUnitFromIdentity.getDescription());
var isManagerPresent = Packages.it.cilea.wf.util.WfUtil.isRoleIdPresent(wfService, "roleId", "ouRolePublicEngagement.manager", internalOrganizationUnitWfItemElementSet);
var hasOrgUnitPowerPermissions = false;
if(Packages.java.lang.Boolean.FALSE.equals(isManagerPresent)){
var isPartecipantPresent = Packages.it.cilea.wf.util.WfUtil.isRoleIdPresent(wfService, "roleId", "ouRolePublicEngagement.participant", internalOrganizationUnitWfItemElementSet);
if(Packages.java.lang.Boolean.FALSE.equals(isPartecipantPresent)){
var isAfferentPresent = Packages.it.cilea.wf.util.WfUtil.isRoleIdPresent(wfService, "roleId", "ouRolePublicEngagement.afferent", internalOrganizationUnitWfItemElementSet);
if(Packages.java.lang.Boolean.FALSE.equals(isAfferentPresent)){
//log.error("xxx nothing is present");
//altri ruoli non previsti
hasOrgUnitPowerPermissions = false;
}else{
//log.error("xxx isAfferentPresent");
hasOrgUnitPowerPermissions = Packages.it.cilea.wf.util.WfUtil.hasOrgUnitPowerPermissions(wfService, "ouId", organizationUnitFromIdentity.getId(), "roleId", "ouRolePublicEngagement.afferent", internalOrganizationUnitWfItemElementSet);
}
}else{
//log.error("xxx isPartecipantPresent");
hasOrgUnitPowerPermissions = Packages.it.cilea.wf.util.WfUtil.hasOrgUnitPowerPermissions(wfService, "ouId", organizationUnitFromIdentity.getId(), "roleId", "ouRolePublicEngagement.participant", internalOrganizationUnitWfItemElementSet);
}
}else{
//log.error("xxx isManagerPresent");
hasOrgUnitPowerPermissions = Packages.it.cilea.wf.util.WfUtil.hasOrgUnitPowerPermissions(wfService, "ouId", organizationUnitFromIdentity.getId(), "roleId", "ouRolePublicEngagement.manager", internalOrganizationUnitWfItemElementSet);
}
//log.error("xxx hasOrgUnitPowerPermissions: " + hasOrgUnitPowerPermissions);
/*
draft crwfd
approved rf
submitted rwf
reopened rwfd
rejected rfd
preapproval r
concluded r
*/
switch("" + String(wfItem.getWfState().getDescription())){
case "draft":
if(Packages.java.lang.Boolean.TRUE.equals(hasOrgUnitPowerPermissions))
permissions="crwfd";
else
permissions="r";
break;
case "approved":
if(Packages.java.lang.Boolean.TRUE.equals(hasOrgUnitPowerPermissions))
permissions="rf";
else
permissions="r";
break;
case "submitted":
if(Packages.java.lang.Boolean.TRUE.equals(hasOrgUnitPowerPermissions))
permissions="rwf";
else
permissions="r";
break;
case "reopened":
if(Packages.java.lang.Boolean.TRUE.equals(hasOrgUnitPowerPermissions))
permissions="rwfd";
else
permissions="r";
break;
case "rejected":
if(Packages.java.lang.Boolean.TRUE.equals(hasOrgUnitPowerPermissions))
permissions="rfd";
else
permissions="r";
break;
/*
case "preapproval":
if(Packages.java.lang.Boolean.TRUE.equals(hasOrgUnitPowerPermissions))
permissions="rwf";
else
permissions="r";
break;
case "concluded":
if(Packages.java.lang.Boolean.TRUE.equals(hasOrgUnitPowerPermissions))
permissions="rwf";
else
permissions="r";
break;
*/
default:
permissions="r";
break;
}
//log.error("xxx permissions: " + permissions);
wfTask.setPermissions(permissions);
|
...
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var departmentIdConf = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.prj.identifier.logic.department-id");
departmentIdConf=(!departmentIdConf)?"csa":departmentIdConf;
var departmentId = null;
var ownerWfElementSet = FragmentUtil.getCurrentFragmentSetByParentAndDiscriminator(wfItem, "it.cilea.wf.model.WfItemElement", "owner", wfService);
var person = Packages.it.cilea.wf.util.WfUtil.getOwnerForIdentifier(ownerWfElementSet, wfService);
if (person != null) {
var checkDate = WfUtil.getCheckDate(wfItem, wfService);
var positionContext = WfUtil.getPositionContext(wfItem, wfService);
var ownerPositionSet = WfUtil.getPositionSet(person, checkDate, positionContext, "department", gaService);
var department = GaUtil.getPriorityOrganizationUnit(ownerPositionSet, positionContext, "department");
if (department == null) {
throw "To use wfStartLogicDepartmentAndOwnerDependentIdentifier you MUST specify department for that person ";
}
} else {
throw "To use wfStartLogicDepartmentAndOwnerDependentIdentifier you MUST specify department";
}
switch("" + String(departmentIdConf)){
case "csa":
departmentId = department.getStringMap().get("idCsa");
if (departmentId == null) {
throw "To use wfStartLogicDepartmentAndOwnerDependentIdentifier you MUST specify code department [idCsa]";
}
break;
case "ugov":
departmentId = department.getStringMap().get("idAb");
if (departmentId == null) {
throw "To use wfStartLogicDepartmentAndOwnerDependentIdentifier you MUST specify code department [idAb]";
}
break;
case "iris":
departmentId = String(department.getId());
break;
case "acronym":
departmentId = department.getStringMap().get("acronym");
if (departmentId == null) {
throw "To use wfStartLogicDepartmentAndOwnerDependentIdentifier you MUST specify code department [acronym]";
}
break;
default:
departmentId = department.getStringMap().get("idCsa");
if (departmentId == null) {
throw "To use wfStartLogicDepartmentAndOwnerDependentIdentifier you MUST specify code department [idCsa]";
}
}
var lastName = person.getLastName().replaceAll("\s", "");
lastName = lastName.replaceAll("'", "");
lastName = (lastName.length() >= 4) ? lastName.substring(0, 5) : lastName.substring(0, lastName.length());
lastName = lastName.toUpperCase();
var dateDiscriminators = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.identifier.logic.date.discriminators");
var discriminator = "proposalStartDate";
if (dateDiscriminators != null) {
var discriminatorArray = dateDiscriminators.split(",");
for (i in discriminatorArray) {
if (wfItem.getDateMap().get(discriminatorArray[i]) != null) {
discriminator = discriminatorArray[i];
break;
}
}
}
var startDate = wfItem.getDateMap().get(discriminator);
var year = startDate.get(Packages.java.util.Calendar.YEAR);
var yearString = new Packages.java.lang.Integer(year).toString();
yearString = yearString.substring(2);
var sourceItemTypeCode = wfService.getWfItemType(wfItem.getWfItemTypeId()).getCode();
var stringBuilder = new Packages.java.lang.StringBuilder(departmentId);
stringBuilder.append(sourceItemTypeCode);
stringBuilder.append(yearString);
stringBuilder.append(lastName);
var identifier = stringBuilder.toString();
if (wfItem.getIdentifier() == null || !(wfItem.getIdentifier().substring(0, wfItem.getIdentifier().lastIndexOf("_"))).equals(identifier)) {
var paramMap = new Packages.java.util.HashMap();
paramMap.put("identifier", identifier);
paramMap.put("excludeIdentifier", identifier+"M");
var count = searchBuilderTemplate.getSingleObject("getMaxItemCountForGivenIdentifier", paramMap);
var countString = "";
if (count < 9)
countString += "0";
countString += (count.intValue()+1);
identifier += "_" + countString;
wfItem.setIdentifier(identifier);
}
|
...
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var wfTask=object;
var wfItem=wfService.getWfItem(wfTask.getWfItemId());
var permissions=wfTask.getPermissions();
var headOfDepartmentContractCentralizedEnableParam = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap.contract-centralized-flow.headOfDepartment.enable");
var headOfDepartmentContractCentralizedEnable=("true"==headOfDepartmentContractCentralizedEnableParam||!headOfDepartmentContractCentralizedEnableParam)?true:false;
switch("" + String(wfItem.getWfState().getDescription())){
case "draft":
if(headOfDepartmentContractCentralizedEnable)
permissions="crwfd"
else
permissions="";
break;
case "validated":
if(headOfDepartmentContractCentralizedEnable)
permissions="rwf"
else
permissions="";
break;
case "signed":
if(headOfDepartmentContractCentralizedEnable)
permissions="rwf"
else
permissions="r";
break;
case "archived":
if(headOfDepartmentContractCentralizedEnable)
permissions="rwfd"
else
permissions="";
break;
case "closed":
if(headOfDepartmentContractCentralizedEnable)
permissions="rwf"
else
permissions="r";
break;
}
wfTask.setPermissions(permissions);
|
...
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var wfTask=object;
var wfItem=wfService.getWfItem(wfTask.getWfItemId());
var permissions=wfTask.getPermissions();
var definition = wfItem.getWfItemType().getWfDefaultDefinition().getDescription();
var ownerCreateConf = Packages.it.cilea.core.configuration.util.ConfigurationUtil.getConfigValue("ap."+definition+".owner.create");
var ownerCreateConfBoolean=("true"==ownerCreateConf||!ownerCreateConf)?true:false;
switch("" + String(wfItem.getWfState().getDescription())){
case "draft":
if(ownerCreateConfBoolean)
permissions="crwfd"
else
permissions="rwf";
break;
case "reopened":
if(ownerCreateConfBoolean)
permissions="rwfd"
else
permissions="rwf";
break;
}
wfTask.setPermissions(permissions);
|
...
Anchor |
---|
| checkEffectiveDepartmentAccess-anchor |
---|
| checkEffectiveDepartmentAccess-anchor |
---|
|
checkEffectiveDepartmentAccess Questa validazione serve per verificare che i referenti dipartimentali, che possono effettuare modifiche, siano i referenti dipartimentali SOLO per quella specifica entità (es: Progetti, Contratti, etc).
Nella configurazione va inserito l'
ID del team a cui afferiscono i referenti.
Questa validazione cerca la configurazione
ap.ANCESTOR_TYPE.headOfDepartment.additionalTeamCheck,
se la configurazione non è popolata allora: NON viene fatto nessun altro controllo,
se la configurazione è popolata, viene controllato, se l'utente è in visione dipartimentale, se questa condizione è vera viene controllato,
se tra i suoi team, compare il team indicato nella configurazione, se non è presente viene sollevato un messaggio di errore.
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var ancestorType = wfItem.getWfItemType().getRootWfItemType().getIdentifier();
var additionalTeamCheck = ConfigurationUtil.getConfigValue("ap." + ancestorType.toLowerCase() + ".headOfDepartment.additionalTeamCheck");
if (additionalTeamCheck != null) {
var isCurrentUserInDepartmentView = Packages.it.cilea.ga.util.GaUtil.isCurrentUserInDepartmentView(gaAuthorizationService);
if (Packages.java.lang.Boolean.TRUE.equals(isCurrentUserInDepartmentView)) {
var user = Packages.it.cilea.ga.authorization.context.GaAuthorizationUserHolder.getUser();
var userId = user.getUserId();
var teamSearchCommand = new Packages.it.cilea.ga.command.TeamSearchCommand();
teamSearchCommand.setUserId(userId);
var teamUserList = gaService.getTeamSearchList(teamSearchCommand, 0);
var teamUserListIterator = teamUserList.iterator();
var foundTeam = false;
while (teamUserListIterator.hasNext()) {
var team = teamUserListIterator.next();
if (new String(team.getId()).valueOftoString() == new String(additionalTeamCheck).valueOftoString()) {
foundTeam = true;
}
}
if (foundTeam == false) {
errors.reject("error." + ancestorType.toLowerCase() + ".headOfDepartment.additionalTeamCheck");
}
}
}
|
...
Anchor |
---|
| childAndParentDetectorDeleteValidator-anchor |
---|
| childAndParentDetectorDeleteValidator-anchor |
---|
|
childAndParentDetectorDeleteValidator Questa è una validazione che viene chiamata in ogni flusso di Laboratori, Grupppi di Ricerca, Grandi Attrezzature, Public-Engagement e Progetti quando si prova ad eliminare l'oggetto.
Essa impedisce che si possa eliminare l'oggetto in questione se è collegato (sia da parte di padre sia da parte di figlio) ad un qualsiasi altro oggetto.
In caso trovasse questi collegamenti, verrà presentato un messaggio di errore che mostrerà un elenco con tutti gli oggetti trovati.
Il messaggio di errore viene ricavato dall'etichetta con chiave
error.delete.link.childAndParentDetected Per maggiori dettagli cfr. modello dati dell'entità in questione
Code Block |
---|
language | js |
---|
linenumbers | true |
---|
collapse | true |
---|
|
var wfItemFull = wfService.getWfItem(wfItem.getWfItemId());
var listOfLinksDetected = '<ul>';
var myList=" ";
var childWfItemLinkSet = wfItemFull.getChildWfItemLinkSet();
var childWfItemLinkSetIterator = childWfItemLinkSet.iterator();
while (childWfItemLinkSetIterator.hasNext()){
var childLink = childWfItemLinkSetIterator.next();
//considero solo quelli che non sono version
if(!childLink.getDiscriminator().equals('version')){
var childWfItem = childLink.getChild();
myList+=" "+childWfItem.getIdentifier()+" ";
listOfLinksDetected += '<li>' + childWfItem.getIdentifier() + ' - ' + childWfItem.getDescription() + '</li>';
}
}
var parentWfItemLinkSet = wfItemFull.getParentWfItemLinkSet();
var parentWfItemLinkSetIterator = parentWfItemLinkSet.iterator();
while (parentWfItemLinkSetIterator.hasNext()){
var parentLink = parentWfItemLinkSetIterator.next();
//considero solo quelli che non sono version
if(!parentLink.getDiscriminator().equals('version')){
var parentWfItem = parentLink.getParent();
myList+=" "+parentWfItem.getIdentifier()+" ";
listOfLinksDetected += '<li>' + parentWfItem.getIdentifier() + ' - ' + parentWfItem.getDescription() + '</li>';
}
}
listOfLinksDetected += '</ul>';
if(listOfLinksDetected != '<ul></ul>'){
//var messageContainer = [listOfLinksDetected];
var messageContainer = [myList];
errors.reject("error.delete.link.childAndParentDetected", messageContainer, "error.delete.link.childAndParentDetected.default");
}
|