diff --git a/src/main/java/it/cnr/si/flows/ng/utils/Utils.java b/src/main/java/it/cnr/si/flows/ng/utils/Utils.java index 5894b42a3..483b1995c 100644 --- a/src/main/java/it/cnr/si/flows/ng/utils/Utils.java +++ b/src/main/java/it/cnr/si/flows/ng/utils/Utils.java @@ -263,6 +263,38 @@ public String getLabel() { } + public static class associazioneRuoloPersonaCDSUO { + String ruolo; + String persona; + String cdsuo; + + + + public String getRuolo() { + return ruolo; + } + + public String getPersona() { + return persona; + } + + public String getCdsuo() { + return cdsuo; + } + + public void setRuolo(String ruolo) { + this.ruolo = ruolo; + } + + public void setCdsuo(String cdsuo) { + this.cdsuo = cdsuo; + } + + public void setPersona(String persona) { + this.persona = persona; + } + } + public String getString(Map params, String paramName, String defaultValue) { String value = params.get(paramName); return value != null ? value : defaultValue; diff --git a/src/test/java/it/cnr/si/flows/ng/batch/GenerazioneJsonperPDF.java b/src/test/java/it/cnr/si/flows/ng/batch/GenerazioneJsonperPDF.java new file mode 100644 index 000000000..ee6dbebd0 --- /dev/null +++ b/src/test/java/it/cnr/si/flows/ng/batch/GenerazioneJsonperPDF.java @@ -0,0 +1,163 @@ +package it.cnr.si.flows.ng.batch; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; +import java.util.stream.Stream; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import java.time.LocalDate; + +import it.cnr.si.FlowsApp; + +import org.activiti.engine.HistoryService; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.history.HistoricProcessInstance; +import org.activiti.engine.impl.persistence.entity.VariableInstance; +import org.activiti.engine.impl.persistence.entity.VariableInstanceEntity; +import org.activiti.engine.impl.variable.LongStringType; +import org.activiti.engine.impl.variable.SerializableType; +import org.activiti.spring.boot.AbstractProcessEngineAutoConfiguration; +import org.activiti.spring.boot.DataSourceProcessEngineAutoConfiguration; +import org.activiti.spring.boot.EndpointAutoConfiguration; +import org.activiti.spring.boot.JpaProcessEngineAutoConfiguration; +import org.activiti.spring.boot.RestApiAutoConfiguration; +import org.activiti.spring.boot.SecurityAutoConfiguration; +import org.activiti.spring.boot.JpaProcessEngineAutoConfiguration.JpaConfiguration; +import org.apache.commons.lang.StringEscapeUtils; +import org.json.JSONObject; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.core.env.Environment; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.servlet.mvc.method.annotation.CompletionStageReturnValueHandler; + +import com.opencsv.CSVParser; + +import feign.FeignException; +import it.cnr.si.SprintApp; +import it.cnr.si.config.Constants; +import it.cnr.si.config.DefaultProfileUtil; +import it.cnr.si.config.JHipsterProperties; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.service.AceService; +import it.cnr.si.service.dto.anagrafica.base.PageDto; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import it.cnr.si.service.dto.anagrafica.letture.PersonaWebDto; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +//@ActiveProfiles(profiles = "dev,cnr") +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class GenerazioneJsonperPDF { + + private static final Logger log = LoggerFactory.getLogger(GenerazioneJsonperPDF.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private HistoryService historyService; + @Inject + private RuntimeService runtimeService; + + + + private final Map errors = new HashMap<>(); + int personNr = 0; + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + String processInstanceId = "25001"; + //Sotituisco la lista di variabili da quelle storiche (historicProcessInstance.getProcessVariables() )a quelle attuali (variableInstanceJson) + JSONObject variableInstanceJson = new JSONObject(); + + HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery() + .includeProcessVariables() + .processInstanceId(processInstanceId) + .singleResult(); + + // Verifico se il workflow sia terminato + if((historicProcessInstance != null) && (historicProcessInstance.getEndTime() != null)){ + //carico le processVariables e rimappo in formato json il campo stringa "valutazioneEsperienze_json" + variableInstanceJson = new JSONObject(historicProcessInstance.getProcessVariables()); + } else { + Map tutteVariabiliMap = runtimeService.getVariableInstances(processInstanceId); + for (Map.Entry entry : tutteVariabiliMap.entrySet()) { + String key = entry.getKey(); + VariableInstance value = entry.getValue(); + //le variabili di tipo serializable (file) non vanno inseriti nel json delle variabili che verranno inseriti nel pdf + //(ho testato valutazioni esperienze_Json fino a 11000 caratteri ed a questo livello appare come longString) + if((!(((VariableInstanceEntity) value).getType() instanceof SerializableType)) || (((VariableInstanceEntity) value).getType() instanceof LongStringType)){ + if(key.toString().equals("startDate")) { + Date startDate = (Date)value.getValue(); + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); + sdf.setTimeZone(TimeZone.getTimeZone("Europe/Rome")); + variableInstanceJson.put(key, sdf.format(startDate)); + } else { + // ... + String valueEscaped = StringEscapeUtils.escapeHtml(value.getValue().toString()); + variableInstanceJson.put(key, valueEscaped); + } + } + } + log.info("variableInstanceJson: {}", variableInstanceJson); + } + } + + +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/java/it/cnr/si/flows/ng/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java b/src/test/java/it/cnr/si/flows/ng/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java new file mode 100644 index 000000000..b52237ccb --- /dev/null +++ b/src/test/java/it/cnr/si/flows/ng/batch/PopolazioneProfiliPerCDSUOAcquistiBatch.java @@ -0,0 +1,259 @@ +package it.cnr.si.flows.ng.batch; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +import javax.annotation.PostConstruct; +import javax.inject.Inject; + +import java.time.LocalDate; + +import it.cnr.si.FlowsApp; +import org.activiti.spring.boot.AbstractProcessEngineAutoConfiguration; +import org.activiti.spring.boot.DataSourceProcessEngineAutoConfiguration; +import org.activiti.spring.boot.EndpointAutoConfiguration; +import org.activiti.spring.boot.JpaProcessEngineAutoConfiguration; +import org.activiti.spring.boot.RestApiAutoConfiguration; +import org.activiti.spring.boot.SecurityAutoConfiguration; +import org.activiti.spring.boot.JpaProcessEngineAutoConfiguration.JpaConfiguration; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.actuate.autoconfigure.MetricFilterAutoConfiguration; +import org.springframework.boot.actuate.autoconfigure.MetricRepositoryAutoConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.liquibase.LiquibaseProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.core.env.Environment; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.servlet.mvc.method.annotation.CompletionStageReturnValueHandler; + +import com.opencsv.CSVParser; + +import feign.FeignException; +import it.cnr.si.SprintApp; +import it.cnr.si.config.Constants; +import it.cnr.si.config.DefaultProfileUtil; +import it.cnr.si.config.JHipsterProperties; +import it.cnr.si.flows.ng.exception.UnexpectedResultException; +import it.cnr.si.flows.ng.service.AceBridgeService; +import it.cnr.si.flows.ng.service.SiperService; +import it.cnr.si.flows.ng.utils.Utils.associazioneRuoloPersonaCDSUO; +import it.cnr.si.service.AceService; +import it.cnr.si.service.MembershipService; +import it.cnr.si.service.RelationshipService; +import it.cnr.si.service.dto.anagrafica.base.PageDto; +import it.cnr.si.service.dto.anagrafica.letture.EntitaOrganizzativaWebDto; +import it.cnr.si.service.dto.anagrafica.letture.PersonaWebDto; + +@SpringBootTest(classes = FlowsApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles(profiles = "dev,cnr") +@RunWith(SpringJUnit4ClassRunner.class) +public class PopolazioneProfiliPerCDSUOAcquistiBatch { + + private static final Logger log = LoggerFactory.getLogger(PopolazioneProfiliPerCDSUOAcquistiBatch.class); + + @Inject + private AceService aceService; + @Inject + private AceBridgeService aceBridgeService; + @Inject + private SiperService siperService; + @Inject + private MembershipService membershipService; + @Inject + private RelationshipService relationshipService; + private final Map errors = new HashMap<>(); + + int i = 0; + + //@Test questa riga non va mai messa su git + //@Test + public void runBatch() throws IOException { + //String[][] persone = getPersoneDaFile(); + + Map persone = new HashMap(); + persone = getPersoneDaFile(); + + + for (int i = 0; i < persone.size(); i++) { + inserisciRuolo(persone.get(i).getPersona(), persone.get(i).getRuolo(), persone.get(i).getCdsuo()); + // fruit is an element of the `fruits` array. + } + + + + + errors.forEach( (tripla, risultato) -> { + log.error(tripla +": "+ risultato); + }); + } + + private void inserisciRuolo(String username, String siglaRuolo, String idCDSUO) { + + //EntitaOrganizzativaWebDto afferenzaUtente = aceBridgeService.getAfferenzaUtente(username); + //String cdsuo = afferenzaUtente.getCdsuo(); + + log.info("****** UTENTE {} ******", username); + + String cdsuoAppartenenzaUtente = null; + try { + cdsuoAppartenenzaUtente = aceBridgeService.getAfferenzaUtente(username).getCdsuo(); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error1) { + log.info("WARNING: L'UTENTE {} NON esiste in anagrafica ACE !!!!!!!!!!!!!!! ", username); + cdsuoAppartenenzaUtente = siperService.getCDSUOAfferenzaUtente(username).get("codice_uo").toString(); + } + finally { + if (cdsuoAppartenenzaUtente.equalsIgnoreCase(idCDSUO)) { + log.info("OK -- ID CDSUO CORRISPONDE {}",idCDSUO); + } else + { + log.info("ERROR -- ID CDSUO trovato {} non CORRISPONDE a quello indicato {}",cdsuoAppartenenzaUtente, idCDSUO); + } + Object insdipResponsabileUo = new Object(); + String usernameResponsabileUO = null; + EntitaOrganizzativaWebDto entitaOrganizzativaRespUo = null; + try { + insdipResponsabileUo = siperService.getResponsabileCDSUO(cdsuoAppartenenzaUtente).get(0).get("codice_sede"); + log.info("getResponsabileCDSUO FUNZIONA "); + usernameResponsabileUO = siperService.getResponsabileCDSUO(cdsuoAppartenenzaUtente).get(0).get("uid").toString(); + try { + entitaOrganizzativaRespUo = aceService.entitaOrganizzativaFindByTerm(insdipResponsabileUo.toString()).get(0); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error3) { + log.info("-------------- WARNING: entitaOrganizzativaRespUo NON RIESCO A TROVARE L'ENTITA' ORGANIZZATIVA per la CDSUO {}", cdsuoAppartenenzaUtente); + try { + entitaOrganizzativaRespUo = aceService.entitaOrganizzativaFindByTerm(insdipResponsabileUo.toString()).get(0); + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error4) { + log.info("-------------- ERROR: entitaOrganizzativaRespUo 2o TENTATIVO NON RIESCO A TROVARE L'ENTITA' ORGANIZZATIVA per la CDSUO {}", cdsuoAppartenenzaUtente); + } + } + finally { + + Integer idEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getId(); + String siglaEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getSigla().toString(); + String denominazioneEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getDenominazione().toString(); + String cdsuoEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getCdsuo().toString(); + String idnsipEntitaorganizzativaResponsabileUtente = entitaOrganizzativaRespUo.getIdnsip().toString(); + log.info("OK: L'utente {} ha come responsabile {} della struttura {} ({}) [ID: {}] [CDSUO: {}] [IDNSIP: {}]", username, usernameResponsabileUO, denominazioneEntitaorganizzativaResponsabileUtente, siglaEntitaorganizzativaResponsabileUtente, idEntitaorganizzativaResponsabileUtente, cdsuoEntitaorganizzativaResponsabileUtente, idnsipEntitaorganizzativaResponsabileUtente); + String gruppoDirigenteRichiedente = "responsabileFirmaAcquisti@" + idEntitaorganizzativaResponsabileUtente; + + Set members = relationshipService.getAllUsersInGroup(gruppoDirigenteRichiedente); + //List members = membershipService.findMembersInGroup(gruppoDirigenteRichiedente); + if (members.size() == 0) { + log.info(" ERROR: Il gruppo RESPONSABILE STRUTTURA: {} NON HA NESSUNO", gruppoDirigenteRichiedente); + } + if (members.size() > 1) { + log.info(" ERROR: Il gruppo RESPONSABILE STRUTTURA: {} HA PIU' MEMBRI", gruppoDirigenteRichiedente); + } + members.forEach(member -> { + log.info("L'utente {} fa parte del gruppo {} ", member.toString(), gruppoDirigenteRichiedente); + }); + + Integer idRuolo = aceService.getRuoloBySigla(siglaRuolo).getId(); + Integer idPersona = aceService.getPersonaByUsername(username).getId(); + + try { + log.info("Associato ruolo {} persona {} eo {}", idRuolo, idPersona, idEntitaorganizzativaResponsabileUtente); + aceService.associaRuoloPersona(idRuolo, idPersona, idEntitaorganizzativaResponsabileUtente); + errors.put(username + " "+ siglaRuolo + " "+ siglaEntitaorganizzativaResponsabileUtente + "("+ idEntitaorganizzativaResponsabileUtente +")", "OK"); + } catch (RuntimeException e) { + if (e.getMessage().contains("Il Ruolo specificato e' gia' presente")) { + errors.put(username + " "+ siglaRuolo + " "+ siglaEntitaorganizzativaResponsabileUtente + "("+ idEntitaorganizzativaResponsabileUtente +")", "PRESENTE"); + } else { + log.error("Errore nella richiesta", e); + errors.put(username + " "+ siglaRuolo + " "+ siglaEntitaorganizzativaResponsabileUtente + "("+ idEntitaorganizzativaResponsabileUtente +")", e.getMessage()); + } + } + + } + } catch(UnexpectedResultException | FeignException | HttpClientErrorException error2) { + log.info("-------------- ERROR: getResponsabileCDSUO NON HA FUNZIONATO!!!!!!!!!!!!!!! l'utente {} non ha RESPONSABILE UO per la CDSUO {}", username, cdsuoAppartenenzaUtente); + } + finally { + log.info("-------------- NEXT"); + + + } + } + +// List eos = aceService.entitaOrganizzativaFind(null, null, cdsuo, LocalDate.now(), null).getItems(); +// PersonaWebDto persona = aceService.personaByUsername(username); +// +// eos.forEach(eo -> { +// + +// }); + + + } + + private Map getPersoneDaFile() throws IOException { + + CSVParser parser = new CSVParser(','); + + Stream lines = Files.lines(Paths.get("./src/test/resources/batch/singoloGruppoUtentiProceduraAcquisti.csv")); + + i = 0; + + Map associazioni = new HashMap(); + + lines + .skip(1). + forEach(l -> { + try { + + String[] values = parser.parseLine(l); + log.info(values[0] + " " + values[1]); + associazioneRuoloPersonaCDSUO asso = new associazioneRuoloPersonaCDSUO(); + asso.setPersona(values[0]); + asso.setRuolo(values[1]); + asso.setCdsuo(values[2]); + associazioni.putIfAbsent(i, asso) ; + i=i+1; + + } catch (IOException e) {e.printStackTrace();} + }); + + return associazioni; + } +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/batch/singoloGruppoUtentiProceduraAcquisti.csv b/src/test/resources/batch/singoloGruppoUtentiProceduraAcquisti.csv new file mode 100644 index 000000000..c9668e396 --- /dev/null +++ b/src/test/resources/batch/singoloGruppoUtentiProceduraAcquisti.csv @@ -0,0 +1,5 @@ +userName,siglaRuolo,cdsuo +mario.incarnato,responsabileFirmaAcquisti,013000 +giorgia.cruciani,staffAmministrativo,013000 +barbara.ognibene,staffAmministrativo,013000 +isabella.monosi,sfd,013000 diff --git a/src/test/resources/batch/utentiDomandeAccordiBilaterali5.csv b/src/test/resources/batch/utentiDomandeAccordiBilaterali5.csv new file mode 100644 index 000000000..4ab6a4714 --- /dev/null +++ b/src/test/resources/batch/utentiDomandeAccordiBilaterali5.csv @@ -0,0 +1,3 @@ +userName,ruolo +luciana.baldoni,initiator +susanna.monti,initiator \ No newline at end of file