diff --git a/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250129094019.java b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250129094019.java new file mode 100644 index 0000000000..b42d0582b5 --- /dev/null +++ b/ems-core/src/main/java/it/integry/ems/migration/model/Migration_20250129094019.java @@ -0,0 +1,23 @@ +package it.integry.ems.migration.model; + +import it.integry.ems.migration._base.BaseMigration; +import it.integry.ems.migration._base.MigrationModelInterface; + +public class Migration_20250129094019 extends BaseMigration implements MigrationModelInterface { + + @Override + public void up() throws Exception { + if (isHistoryDB()) + return; + + createSetup("IMPORT_DOCUMENTI ACQUISTO", "CONSORTILE", "NEW_VERSION", "N", +"Se impostato a S parte la nuova versione che gestisce la produzione sulla consortile", false, null, false, false, +false, false, false, null, false, null); + } + + @Override + public void down() throws Exception { + + } + +} diff --git a/ems-engine/src/main/java/it/integry/ems/document/Import/DocumentiImporter.java b/ems-engine/src/main/java/it/integry/ems/document/Import/DocumentiImporter.java index 2a6803cfb8..536681e36c 100644 --- a/ems-engine/src/main/java/it/integry/ems/document/Import/DocumentiImporter.java +++ b/ems-engine/src/main/java/it/integry/ems/document/Import/DocumentiImporter.java @@ -122,8 +122,14 @@ public class DocumentiImporter extends BaseEntityImporter> impl .importDocWeb(type, format, requestDto.getWhereCond(), anomalie); break; case CONSORTILE: - entities = getContextBean(DocumentiConsortileService.class) - .trasferimentoDocumentiAcquisto(type, format, mapJsonToDTO(requestDto.getRawContent(), ConsortileFilterDTO.class), anomalie); + ConsortileFilterDTO filter = mapJsonToDTO(requestDto.getRawContent(), ConsortileFilterDTO.class); + if (filter.getNewVersion().compareTo("S") == 0){ + entities = getContextBean(DocumentiConsortileService.class) + .trasferimentoDocumentiAcquistoNew(type, format, mapJsonToDTO(requestDto.getRawContent(), ConsortileFilterDTO.class), anomalie); + }else { + entities = getContextBean(DocumentiConsortileService.class) + .trasferimentoDocumentiAcquistoOld(type, format, mapJsonToDTO(requestDto.getRawContent(), ConsortileFilterDTO.class), anomalie); + } break; case SCAR_MP_DA_DIST: diff --git a/ems-engine/src/main/java/it/integry/ems/document/Import/dto/ConsortileFilterDTO.java b/ems-engine/src/main/java/it/integry/ems/document/Import/dto/ConsortileFilterDTO.java index 1e91e29c3f..5a68dd8ba1 100644 --- a/ems-engine/src/main/java/it/integry/ems/document/Import/dto/ConsortileFilterDTO.java +++ b/ems-engine/src/main/java/it/integry/ems/document/Import/dto/ConsortileFilterDTO.java @@ -16,6 +16,16 @@ public class ConsortileFilterDTO implements Serializable { @JsonProperty(value = "cod_anag") private String codAnag; + @DtoField(format = formatDate) + @JsonProperty(value = "data_doc_fine") + private Date dataDocFine; + + @JsonProperty(value = "new_version") + private String newVersion; + + @JsonProperty(value = "conto_lavoro") + private String contoLavoro; + public Date getDataDoc() { return dataDoc; } @@ -33,4 +43,28 @@ public class ConsortileFilterDTO implements Serializable { this.codAnag = codAnag; return this; } + + public Date getDataDocFine() { + return dataDocFine; + } + + public void setDataDocFine(Date dataDocFine) { + this.dataDocFine = dataDocFine; + } + + public String getNewVersion() { + return newVersion; + } + + public void setNewVersion(String newVersion) { + this.newVersion = newVersion; + } + + public String getContoLavoro() { + return contoLavoro; + } + + public void setContoLavoro(String contoLavoro) { + this.contoLavoro = contoLavoro; + } } diff --git a/ems-engine/src/main/java/it/integry/ems/document/Import/service/DocumentiConsortileService.java b/ems-engine/src/main/java/it/integry/ems/document/Import/service/DocumentiConsortileService.java index 12e47f7b70..bf90732021 100644 --- a/ems-engine/src/main/java/it/integry/ems/document/Import/service/DocumentiConsortileService.java +++ b/ems-engine/src/main/java/it/integry/ems/document/Import/service/DocumentiConsortileService.java @@ -30,6 +30,8 @@ import java.util.Date; import java.util.HashMap; import java.util.List; +import static it.integry.ems.rules.completing.QueryRules.getSingleValue; + @Service @Scope(value = "request") public class DocumentiConsortileService { @@ -148,8 +150,7 @@ public class DocumentiConsortileService { return passaporto; } - - public List trasferimentoDocumentiAcquisto(String type, String format, ConsortileFilterDTO filter, List anomalie) throws Exception { + public List trasferimentoDocumentiAcquistoNew(String type, String format, ConsortileFilterDTO filter, List anomalie) throws Exception { MultiDBTransactionManager multiDBTransactionManagerAzAgr = new MultiDBTransactionManager(); List docAConsortile = new ArrayList(); List docVAzAgr = new ArrayList(); @@ -158,11 +159,195 @@ public class DocumentiConsortileService { String codAnag = filter.getCodAnag(); Date dataDoc = filter.getDataDoc(); + Date dataDocFine = filter.getDataDocFine(); + String contoLavoro = filter.getContoLavoro(); + String dataDocString = new SimpleDateFormat("yyyy-MM-dd").format(dataDoc); + dataDoc = UtilityDate.StringToDate(dataDocString, CommonConstants.DATE_FORMAT_YMD); + String codDtip = null, serDocAcq = null; + String whereCond = "gruppo = " + UtilityDB.valueToString(contoLavoro); + + query = "select DATEDIFF(day, " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ", " + + UtilityDB.valueDateToString(dataDocFine, CommonConstants.DATE_FORMAT_YMD) + ")"; + Integer ggPeriodo = (Integer) getSingleValue(multiDBTransactionManager.getPrimaryConnection(), query); + + query = "select * from dbo.getFLDocAcqForTrasf(" + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + "," + + UtilityDB.valueDateToString(dataDocFine, CommonConstants.DATE_FORMAT_YMD) + "," + + UtilityDB.valueToString(codAnag) + ")doc "; + query = UtilityDB.addwhereCond(query, whereCond, true); + + List> results = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); + for (int j = 0; j < results.size(); j++) { + HashMap result = results.get(j); + codDtip = UtilityHashMap.getValueIfExists(result, "cod_dtip"); + serDocAcq = UtilityHashMap.getValueIfExists(result, "ser_doc"); + String codMart = UtilityHashMap.getValueIfExists(result, "cod_mart"); + String descrizione = UtilityHashMap.getValueIfExists(result, "descrizione"); + String descrizioneEstesa = UtilityHashMap.getValueIfExists(result, "descrizione_estesa"); + String codAlis = UtilityHashMap.getValueIfExists(result, "cod_alis"); + String passaporto = UtilityHashMap.getValueIfExists(result, "passaporto"); + String origine = UtilityHashMap.getValueIfExists(result, "origine"); + String untDoc = UtilityHashMap.getValueIfExists(result, "unt_doc"); + BigDecimal przAcq = UtilityHashMap.getValueIfExists(result, "prz_acq"); + BigDecimal rapConv = UtilityHashMap.getValueIfExists(result, "rap_conv"); + String profileDB = UtilityHashMap.getValueIfExists(result, "profileDB"); + BigDecimal qtaVend = UtilityHashMap.getValueIfExists(result, "qta_vend"); + Integer rowID = UtilityHashMap.getValueIfExists(result, "rowID"); + String codDtipVend = UtilityHashMap.getValueIfExists(result, "cod_dtip_vend"); + String codMdep = UtilityHashMap.getValueIfExists(result, "cod_mdep"); + String codVlis = UtilityHashMap.getValueIfExists(result, "cod_vlis"); + String codAnagVend = UtilityHashMap.getValueIfExists(result, "cod_anag_vend"); + + // Connessione al database dell'azienda agricola + if (j == 0) { + DataSource dsSync = new DataSource(); + dsSync.initialize(profileDB); + multiDBTransactionManagerAzAgr.setPrimaryDs(profileDB); + } + + // Creazione documento vendita per azienda agricola + String serDocVend = null; + String codIreg = null; + Integer numIreg = null; + Integer numDocVend = 0; + if (rowID == 1) { + // Acquisizione numero documento di vendita azienda agricola che diventerà documenti di acquisto della consortile + query = "select cod_ireg, num_ireg, ISNULL(serie, '/') from dtb_tipi where cod_dtip = " + UtilityDB.valueToString(codDtipVend); + PreparedStatement stmDati = multiDBTransactionManagerAzAgr.getPrimaryConnection().prepareStatement(query); + ResultSet rsDati = stmDati.executeQuery(); + while (rsDati.next()) { + codIreg = rsDati.getString(1); + numIreg = rsDati.getInt(2); + serDocVend = rsDati.getString(3); + } + rsDati.close(); + stmDati.close(); + numDocVend = DocumentRules.nextNumDoc(multiDBTransactionManagerAzAgr.getPrimaryConnection(), dataDoc, codIreg, serDocVend, numIreg, numDocVend); + + // Creazione testata documento + docV = new DtbDoct(); + docV.setOperation(OperationType.INSERT); + docV.setCodDtip(codDtipVend); + docV.setCodAnag(codAnagVend); + docV.setDataDoc(dataDoc); + docV.setSerDoc(serDocVend); + docV.setNumDoc(numDocVend); + docV.setCodMdep(codMdep); + docV.setListino(codVlis); + docVAzAgr.add(docV); + } + DtbDocr docrV = new DtbDocr(); + docrV.setOperation(OperationType.INSERT); + docrV.setCodMart(codMart); + docrV.setDescrizione(descrizione); + docrV.setDescrizioneEstesa(descrizioneEstesa); + docrV.setUntDoc(untDoc); + docrV.setRapConv(rapConv); + docrV.setQtaDoc(qtaVend); + docrV.setPartitaMag(origine); + String passaportoAzAgricola = getPassaportoAzAgricola(multiDBTransactionManager, multiDBTransactionManagerAzAgr, codAlis, codMart, origine, dataDoc); + docrV.setCodArtFor(passaportoAzAgricola); + docrV.setCodAlis(codAlis); + docrV.setValUnt(przAcq); + docV.getDtbDocr().add(docrV); + + // Creazione documento di acquisto per consortile + if (rowID == 1) { + docA = new DtbDoct(); + docA.setOperation(OperationType.INSERT); + docA.setCodDtip(codDtip); + docA.setCodAnag(codAnag); + docA.setDataDoc(dataDoc); + docA.setSerDoc(serDocAcq); + docA.setNumDoc(numDocVend); + docA.setCodMdep(codMdep); + docA.setListino(codAlis); + docAConsortile.add(docA); + } + DtbDocr docrA = new DtbDocr(); + docrA.setOperation(OperationType.INSERT); + docrA.setCodMart(codMart); + docrA.setDescrizione(descrizione); + docrA.setDescrizioneEstesa(descrizioneEstesa); + docrA.setUntDoc(untDoc); + docrA.setRapConv(rapConv); + docrA.setQtaDoc(qtaVend); + docrA.setPartitaMag(origine); + docrA.setCodArtFor(passaporto); + docrA.setCodAlis(codAlis); + docrA.setValUnt(przAcq); + docA.getDtbDocr().add(docrA); + } + + /*Nella tabella del log dei documenti importati non possiamo inserire il documento di vendita, perchè in un documento + ci sono più listini di acquisto e quindi più documenti di acquisto da creare e se impostiamo tutto il documento come importato, + per il fornitore successivo non creerebbe gli altri documenti di acquisto, quindi creo un documento fittizio con tipo_doc, cod_anag e data_doc*/ + if (!docAConsortile.isEmpty()) { + ggPeriodo = ggPeriodo + 1; + for (int i = 0; i < ggPeriodo; i++) { + Date dataDocDett = UtilityDate.dateAdd(dataDoc, i); + + DtbDocuLog docuLog = new DtbDocuLog(); + docuLog.setOperation(OperationType.INSERT_OR_UPDATE); + docuLog.setCodAnag(codAnag); + docuLog.setCodDtip(codDtip); + docuLog.setSerDoc(serDocAcq); + docuLog.setDataDoc(dataDocDett); + docuLog.setNumDoc(0); + docuLog.setNote(contoLavoro); + docuLog.setFlagType("I"); + docuLog.setFormatFile(format); + docuLog.setDocType(type); + docuLog.setDateTimeLog(new Date()); + docuLog.setUserName(requestDataDTO.getUsername()); + docAConsortile.add(docuLog); + } + } + + // Registrazione documenti acquisto consortile + for (int i = 0; i < docAConsortile.size(); i++) { + entityProcessor.processEntity(docAConsortile.get(i), true, true, multiDBTransactionManager.getPrimaryDatasource().getProfile(), multiDBTransactionManager); + if (docAConsortile.get(i).getException() != null) { + multiDBTransactionManager.rollbackAll(); + multiDBTransactionManagerAzAgr.rollbackAll(); + throw new Exception(docAConsortile.get(i).getException().getMessage()); + } + } + + // Registrazione documenti vendita azienda agricola + for (int i = 0; i < docVAzAgr.size(); i++) { + entityProcessor.processEntity(docVAzAgr.get(i), true, true, multiDBTransactionManagerAzAgr.getPrimaryDatasource().getProfile(), multiDBTransactionManagerAzAgr); + if (docVAzAgr.get(i).getException() != null) { + multiDBTransactionManager.rollbackAll(); + multiDBTransactionManagerAzAgr.rollbackAll(); + throw new Exception(docVAzAgr.get(i).getException().getMessage()); + } + } + + if (docAConsortile.isEmpty()) { + throw new Exception("Non ci sono documenti da importare"); + } else { + multiDBTransactionManagerAzAgr.commitAll(); + multiDBTransactionManager.commitAll(); + } + + return docAConsortile; + } + + public List trasferimentoDocumentiAcquistoOld(String type, String format, ConsortileFilterDTO filter, List anomalie) throws Exception { + MultiDBTransactionManager multiDBTransactionManagerAzAgr = new MultiDBTransactionManager(); + List docAConsortile = new ArrayList(); + List docVAzAgr = new ArrayList(); + DtbDoct docA = new DtbDoct(); + DtbDoct docV = new DtbDoct(); + + String codAnag = filter.getCodAnag(); + Date dataDoc = filter.getDataDoc(); + Date dataDocFine = filter.getDataDocFine(); String dataDocString = new SimpleDateFormat("yyyy-MM-dd").format(dataDoc); dataDoc = UtilityDate.StringToDate(dataDocString, CommonConstants.DATE_FORMAT_YMD); String codDtip = null, serDocAcq = null; - query = "select * from dbo.getFLDocAcqForTrasf(" + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + "," + UtilityDB.valueToString(codAnag) + ")doc "; + query = "select * from dbo.getFLDocAcqForTrasf(" + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ", " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + "," + UtilityDB.valueToString(codAnag) + ")doc "; List> results = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), query); for (int j = 0; j < results.size(); j++) { HashMap result = results.get(j); @@ -277,6 +462,7 @@ public class DocumentiConsortileService { docuLog.setSerDoc(serDocAcq); docuLog.setDataDoc(dataDoc); docuLog.setNumDoc(0); + docuLog.setNote("A"); docuLog.setFlagType("I"); docuLog.setFormatFile(format); docuLog.setDocType(type); diff --git a/ems-engine/src/main/java/it/integry/ems/production/controller/FLProductionController.java b/ems-engine/src/main/java/it/integry/ems/production/controller/FLProductionController.java index 99b1a92637..0e7b063695 100644 --- a/ems-engine/src/main/java/it/integry/ems/production/controller/FLProductionController.java +++ b/ems-engine/src/main/java/it/integry/ems/production/controller/FLProductionController.java @@ -1,5 +1,6 @@ package it.integry.ems.production.controller; +import it.integry.ems.javabeans.RequestDataDTO; import it.integry.ems.production.dto.FLAggListinoProdDTO; import it.integry.ems.production.dto.FLDatiProdDTO; import it.integry.ems.production.service.FLProductionService; @@ -28,6 +29,9 @@ public class FLProductionController { @Autowired private FLProductionService MLProductionService; + @Autowired + RequestDataDTO requestDataDTO; + @RequestMapping(value = EmsRestConstants.PATH_FL_AGGIORNA_LISTINO_PROD, method = RequestMethod.POST) public @ResponseBody ServiceRestResponse FLAggiornaListinoProd(HttpServletRequest request, @@ -35,7 +39,7 @@ public class FLProductionController { ServiceRestResponse response; try { - MLProductionService.FLAggiornaListinoProd(flAggListinoProdDTO); + MLProductionService.FLAggiornaListinoProd(flAggListinoProdDTO, requestDataDTO.getProfileDB()); response = new ServiceRestResponse(EsitoType.OK); } catch (Exception e) { logger.error(request.getRequestURI(), e); diff --git a/ems-engine/src/main/java/it/integry/ems/production/service/FLProductionService.java b/ems-engine/src/main/java/it/integry/ems/production/service/FLProductionService.java index 66845d7d89..5ac668f5b9 100644 --- a/ems-engine/src/main/java/it/integry/ems/production/service/FLProductionService.java +++ b/ems-engine/src/main/java/it/integry/ems/production/service/FLProductionService.java @@ -337,7 +337,7 @@ public class FLProductionService { ps.close(); } - public void FLAggiornaListinoProd(FLAggListinoProdDTO flAggListinoProdDTO) throws Exception { + public void FLAggiornaListinoProd(FLAggListinoProdDTO flAggListinoProdDTO, String profileDB) throws Exception { String passaporto = null, passaportoDBCentrale = null; Integer versione = 0; OperationType operationType = null; @@ -398,10 +398,8 @@ public class FLProductionService { if ("S".compareTo(isDBcentrale) == 0) { -/* passaporto = getNextNumPassaporto(connDBCentrale, codCentroAziDBCentrale, flAggListinoProdDTO.getDataProd()); - passaportoDBCentrale = passaporto;*/ - - passaporto = flAggListinoProdDTO.getPassaporto(); + passaporto = getNextNumPassaporto(connDBCentrale, codCentroAziDBCentrale, flAggListinoProdDTO.getDataProd()); + passaportoDBCentrale = passaporto; } if (!UtilityString.isNullOrEmpty(flAggListinoProdDTO.getCodAlis())) { @@ -440,7 +438,7 @@ public class FLProductionService { String erroreMessage = mtbListData.getException().getMessage(); throw new Exception(erroreMessage); } else { - if ("N".compareTo(contoLavoro) == 0 && isDBcentrale.compareTo("N") == 0) { + if ("N".compareTo(contoLavoro) == 0 && !profileDBCentrale.equalsIgnoreCase(profileDB)) { /******************************************************* * AGGIORNAMENTO LISTINO FORNITORE DATABASE CENTRALE * ******************************************************/ @@ -535,5 +533,4 @@ public class FLProductionService { } else throw new Exception("Listino non presente in anagrafica o non valorizzato"); } - } \ No newline at end of file