Merge branch 'develop'
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
This commit is contained in:
@@ -60,49 +60,6 @@
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>cz.habarta.typescript-generator</groupId>
|
||||
<artifactId>typescript-generator-maven-plugin</artifactId>
|
||||
<version>3.2.1263</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate</id>
|
||||
<goals>
|
||||
<goal>generate</goal>
|
||||
</goals>
|
||||
<phase>process-classes</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<jsonLibrary>jackson2</jsonLibrary>
|
||||
<classPatterns>it.integry.ems_model.entity.*</classPatterns>
|
||||
<classes>
|
||||
<class>it.integry.ems.response.ServiceRestResponse</class>
|
||||
</classes>
|
||||
<excludeClasses>
|
||||
<excludeClass>it.integry.ems_model.base.EntityInterface</excludeClass>
|
||||
</excludeClasses>
|
||||
<outputFile>../ts/ems-core.module.ts</outputFile>
|
||||
<outputKind>module</outputKind>
|
||||
<outputFileType>implementationFile</outputFileType>
|
||||
<customTypeNaming>
|
||||
<naming>it.integry.ems_model.entity.AtbOfft$StatoOfferta:AtbOfftStatoOfferta</naming>
|
||||
<naming>it.integry.ems_model.entity.VtbOfft$StatoOfferta:VtbOfftStatoOfferta</naming>
|
||||
<naming>it.integry.ems_model.entity.GrlAnagJrept$Tipo:GrlAnagJreptTipo</naming>
|
||||
<naming>it.integry.ems_model.entity.WtbJreptSetup$Tipo:WtbJreptSetupTipo</naming>
|
||||
<naming>it.integry.ems_model.entity.MtbColr$Causale:MtbColrCausale</naming>
|
||||
<naming>it.integry.ems_model.entity.MtbCols$Causale:MtbColsCausale</naming>
|
||||
</customTypeNaming>
|
||||
<generateConstructors>true</generateConstructors>
|
||||
<mapClasses>asClasses</mapClasses>
|
||||
<mapEnum>asEnum</mapEnum>
|
||||
<optionalProperties>useLibraryDefinition</optionalProperties>
|
||||
<optionalPropertiesDeclaration>questionMarkAndNullableType</optionalPropertiesDeclaration>
|
||||
<sortDeclarations>true</sortDeclarations>
|
||||
<sortTypeDeclarations>true</sortTypeDeclarations>
|
||||
<tsNoCheck>true</tsNoCheck>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ public class Migration_20250530161424 extends BaseMigration implements Migration
|
||||
if (isHistoryDB())
|
||||
return;
|
||||
|
||||
if (isDMS()) return;
|
||||
|
||||
createOrUpdateFunction("pvm_getassortimentoClientePedane", "CREATE FUNCTION [dbo].[pvm_getassortimentoClientePedane](\n" +
|
||||
" @codAnag VARCHAR(5), @codVlis VARCHAR(5), @codVdes VARCHAR(5), @dataValidita DATETIME, @viewPromo BIT,\n" +
|
||||
" @pedane INT = 0\n" +
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
package it.integry.ems.migration.model;
|
||||
|
||||
import it.integry.ems.migration._base.BaseMigration;
|
||||
import it.integry.ems.migration._base.MigrationModelInterface;
|
||||
|
||||
public class Migration_20250603105803 extends BaseMigration implements MigrationModelInterface {
|
||||
|
||||
@Override
|
||||
public void up() throws Exception {
|
||||
if (isHistoryDB())
|
||||
return;
|
||||
|
||||
executeStatement("ALTER TABLE dtb_tipi\n" +
|
||||
" ADD flag_set_pro bit default 0",
|
||||
"UPDATE dtb_tipi SET flag_set_pro = 0",
|
||||
"ALTER TABLE dtb_tipi ALTER COLUMN flag_set_pro bit NOT NULL;");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void down() throws Exception {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package it.integry.ems.migration.model;
|
||||
|
||||
import it.integry.ems.migration._base.BaseMigration;
|
||||
import it.integry.ems.migration._base.MigrationModelInterface;
|
||||
|
||||
public class Migration_20250603123528 extends BaseMigration implements MigrationModelInterface {
|
||||
|
||||
@Override
|
||||
public void up() throws Exception {
|
||||
if (isHistoryDB())
|
||||
return;
|
||||
|
||||
executeStatement("CREATE TABLE dtb_docp (\n" +
|
||||
"\tid BIGINT IDENTITY NOT NULL, \n" +
|
||||
"\tcod_anag VARCHAR(5) NOT NULL,\n" +
|
||||
"\tcod_dtip VARCHAR(5) NOT NULL,\n" +
|
||||
"\tdata_doc DATETIME NOT NULL,\n" +
|
||||
"\tser_doc VARCHAR(2) NOT NULL,\n" +
|
||||
"\tnum_doc INT NOT NULL,\n" +
|
||||
"\tnum_prot INT NOT NULL DEFAULT 0,\n" +
|
||||
"\n" +
|
||||
"\tUNIQUE (cod_anag, cod_dtip, data_doc, ser_doc, num_doc),\n" +
|
||||
"\tCONSTRAINT PK_dtb_docp PRIMARY KEY (id),\n" +
|
||||
"\tCONSTRAINT FK_dtb_docp_dtb_doct FOREIGN KEY (cod_anag, cod_dtip, data_doc, ser_doc, num_doc)\n" +
|
||||
"\t\tREFERENCES dtb_doct (cod_anag, cod_dtip, data_doc, ser_doc, num_doc)\n" +
|
||||
");");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void down() throws Exception {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package it.integry.ems.migration.model;
|
||||
|
||||
import it.integry.ems.migration._base.BaseMigration;
|
||||
import it.integry.ems.migration._base.MigrationModelInterface;
|
||||
|
||||
public class Migration_20250604121422 extends BaseMigration implements MigrationModelInterface {
|
||||
|
||||
@Override
|
||||
public void up() throws Exception {
|
||||
if (isHistoryDB())
|
||||
return;
|
||||
|
||||
executeStatement("exec sp_rename 'dtb_tipi.flag_set_pro', 'flag_set_num_prot';");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void down() throws Exception {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package it.integry.ems.migration.model;
|
||||
|
||||
import it.integry.ems.migration._base.BaseMigration;
|
||||
import it.integry.ems.migration._base.MigrationModelInterface;
|
||||
|
||||
public class Migration_20250606121111 extends BaseMigration implements MigrationModelInterface {
|
||||
|
||||
@Override
|
||||
public void up() throws Exception {
|
||||
if (isHistoryDB())
|
||||
return;
|
||||
|
||||
|
||||
createSetup("GTB_ANAG", "SETUP", "COD_SDI_OBBLIGATORIO", "S",
|
||||
"Se impostato ad S il codice SDI è obbligatorio al salvataggio dell'anagrafica cliente", false, null, false, false,
|
||||
false, false, false, null, false, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void down() throws Exception {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package it.integry.ems.migration.model;
|
||||
|
||||
import it.integry.ems.migration._base.BaseMigration;
|
||||
import it.integry.ems.migration._base.IntegryCustomer;
|
||||
import it.integry.ems.migration._base.MigrationModelInterface;
|
||||
|
||||
public class Migration_20250606124345 extends BaseMigration implements MigrationModelInterface {
|
||||
|
||||
@Override
|
||||
public void up() throws Exception {
|
||||
if (isHistoryDB())
|
||||
return;
|
||||
|
||||
if (isCustomer(IntegryCustomer.Dulciar)) {
|
||||
|
||||
updateSetupValue("GTB_ANAG", "SETUP", "COD_SDI_OBBLIGATORIO", "N",
|
||||
"Se impostato ad S il codice SDI è obbligatorio al salvataggio dell'anagrafica cliente", false, null, false, false, false,
|
||||
false, false, null, false, null);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void down() throws Exception {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,10 +1,12 @@
|
||||
package it.integry.ems.model;
|
||||
|
||||
public enum IntegryApplicationEnum {
|
||||
//Generato tramite uuid
|
||||
GESTIONALE_BASE("5858a2a0-1188-4edd-8f71-d7da5bfb350d"),
|
||||
PVM("845da2d9-f2f9-4f8d-ad5b-34b65a91eb6d"),
|
||||
WMS("fa3a21af-606b-4129-a22b-aedc2a52c7b6"),
|
||||
TASK("478f3a4c51824ad23cb50c1c60670c0f"),
|
||||
CRM("f0484398-1f8b-42f5-ab79-5282c164e1d8"),
|
||||
CONSEGNA("c012124f-4f11-471c-ae12-81bd4a97626c");
|
||||
|
||||
private String text;
|
||||
|
||||
@@ -580,7 +580,7 @@ public class DocumentBusinessLogic {
|
||||
throw new Exception ("Attenzione nel castelletto iva sono presenti delle righe con imponibile ma senza aliquota, è necessario correggere il castelletto iva prima di procedere con la registrazione");
|
||||
}
|
||||
List<CtbMovi> castelletto = dtbDoct.getCtbMovi().stream().filter(x -> x.getCodAliq() != null).collect(Collectors.toList());
|
||||
for (CtbMovi iva : castelletto) {
|
||||
for (CtbMovi iva : dtbDoct.getCtbMovi()) {
|
||||
BigDecimal impDare = BigDecimal.ZERO;
|
||||
BigDecimal impAvere = BigDecimal.ZERO;
|
||||
if (!iva.getCodAliq().equals(codAliqSplit)) {
|
||||
|
||||
@@ -10,6 +10,7 @@ import it.integry.ems_model.base.EntityBase;
|
||||
import it.integry.ems_model.config.EmsRestConstants;
|
||||
import it.integry.ems_model.db.ResultSetMapper;
|
||||
import it.integry.ems_model.entity.*;
|
||||
import it.integry.ems_model.entity.common.DtbBaseDocR;
|
||||
import it.integry.ems_model.entity.common.DtbDocOrdR;
|
||||
import it.integry.ems_model.entity.common.DtbDocOrdT;
|
||||
import it.integry.ems_model.rules.util.DroolsUtil;
|
||||
@@ -439,7 +440,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
}
|
||||
|
||||
private static boolean checkQtaChange(DtbDocOrdT testata, DtbDocOrdR row) {
|
||||
if (testata instanceof DtbDoct){
|
||||
if (testata instanceof DtbDoct) {
|
||||
Integer idRiga = ((DtbDocr) row).getIdRiga();
|
||||
if (idRiga != null && testata.getOriginalEntity() != null) {
|
||||
DtbDocr dtbDocr = ((DtbDoct) testata.getOriginalEntity())
|
||||
@@ -447,13 +448,13 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
.stream()
|
||||
.filter(x -> Objects.equals(x.getIdRiga(), idRiga)).findFirst().orElse(null);
|
||||
|
||||
if ( dtbDocr != null &&
|
||||
(Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getQta(), dtbDocr.getQta()), dtbDocr.getQta()) &&
|
||||
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getNumCnf(), dtbDocr.getNumCnf()), dtbDocr.getNumCnf()) &&
|
||||
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getPesoLordo(), dtbDocr.getPesoLordo()), dtbDocr.getPesoLordo()) &&
|
||||
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getPesoNetto(), dtbDocr.getPesoNetto()), dtbDocr.getPesoNetto()))) {
|
||||
if (dtbDocr != null &&
|
||||
(Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getQta(), dtbDocr.getQta()), dtbDocr.getQta()) &&
|
||||
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getNumCnf(), dtbDocr.getNumCnf()), dtbDocr.getNumCnf()) &&
|
||||
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getPesoLordo(), dtbDocr.getPesoLordo()), dtbDocr.getPesoLordo()) &&
|
||||
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getPesoNetto(), dtbDocr.getPesoNetto()), dtbDocr.getPesoNetto()))) {
|
||||
return false;
|
||||
} else if ( dtbDocr == null && row.getOperation() == OperationType.SELECT_OBJECT)
|
||||
} else if (dtbDocr == null && row.getOperation() == OperationType.SELECT_OBJECT)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -634,8 +635,33 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
|
||||
if (qta.compareTo(BigDecimal.ZERO) != 0) {
|
||||
boolean ventilazione = false;
|
||||
if ( row instanceof DtbDocr) ventilazione = ((DtbDocr) row).getVentilazione();
|
||||
addCastellettoIva(flagIvaInclusa?impRigaIva:importoRiga, codAliq, ventilazione, castelletto, flagIvaInclusa);
|
||||
if (row instanceof DtbDocr) ventilazione = ((DtbDocr) row).getVentilazione();
|
||||
BigDecimal imponibile = flagIvaInclusa ? impRigaIva : importoRiga;
|
||||
if (!UtilityString.isNullOrEmpty(row.getCodAliq())) {
|
||||
addCastellettoIva(imponibile, codAliq, ventilazione, castelletto, flagIvaInclusa);
|
||||
} else if (UtilityString.isNullOrEmpty(row.getCodAliq()) && imponibile.compareTo(BigDecimal.ZERO) != 0) {
|
||||
Integer riga = 0;
|
||||
if (isOrdine) {
|
||||
if (row instanceof DtbOrdr) {
|
||||
riga = ((DtbOrdr) row).getPosRiga();
|
||||
} else if (row instanceof WdtbOrdr) {
|
||||
riga = ((WdtbOrdr) row).getPosRiga();
|
||||
}
|
||||
throw new Exception(String.format(
|
||||
"Impossibile salvare l'ordine %s del %s n. %s, riga %s senza aliquota IVA",
|
||||
gestione, UtilityDate.formatDate(row.getDataOrd(), CommonConstants.DATE_FORMAT_DMY), row.getNumOrd(), riga));
|
||||
} else {
|
||||
riga = ((DtbBaseDocR) row).getIdRiga();
|
||||
throw new Exception(String.format(
|
||||
"Impossibile salvare il documento %s del %s n. %s/%s, riga %s senza aliquota IVA",
|
||||
((DtbBaseDocR) row).getCodDtip(),
|
||||
UtilityDate.formatDate(((DtbBaseDocR) row).getDataDoc(), CommonConstants.DATE_FORMAT_DMY),
|
||||
((DtbBaseDocR) row).getSerDoc(),
|
||||
((DtbBaseDocR) row).getNumDoc(), riga
|
||||
));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**************************
|
||||
@@ -649,7 +675,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
if (row instanceof DtbDocr && (((DtbDocr) row).getCostoUnt() == null || ((DtbDocr) row).getCostoUnt().compareTo(BigDecimal.ZERO) == 0)) {
|
||||
boolean flagValCosto = ((DtbDoct) testata).getDtbTipi().getFlagCosto().equalsIgnoreCase("S");
|
||||
BigDecimal costo = BigDecimal.ZERO;
|
||||
if ("A".equals(gestione) ) {
|
||||
if ("A".equals(gestione)) {
|
||||
costo = DocumentRules.completeCostoUntDocA(conn, ((DtbDocr) row));
|
||||
} else if ("L".equals(gestione)) {
|
||||
costo = DocumentRules.completeCostoUntDocL(conn, ((DtbDocr) row), flagValCosto);
|
||||
@@ -743,7 +769,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
}
|
||||
|
||||
Boolean ventilazione = false;
|
||||
if ( testata instanceof DtbDoct) {
|
||||
if (testata instanceof DtbDoct) {
|
||||
String sql =
|
||||
Query.format(
|
||||
"SELECT CAST(COUNT(*) AS BIT)\n" +
|
||||
@@ -758,7 +784,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
/******************************************
|
||||
ASSEGNAZIONE NUM_COLLI e PESO A DOCUMENTO
|
||||
******************************************/
|
||||
if ( changeQta)
|
||||
if (changeQta)
|
||||
setNumColliPeso(testata, calcColli, datiTrasp, colli, colliFromDB);
|
||||
|
||||
//CALCOLO TOTALI E CASTELLETTO IVA
|
||||
@@ -766,7 +792,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
|
||||
//Prima di calcolare l'acconto estrerre l'elenco delle bolle agganciate alla fatture differita
|
||||
if (testata instanceof DtbDoct && ((DtbDoct) testata).getDtbTipi().getTipoEmissioneEnum() == TipoEmissione.DIFFERITA) {
|
||||
DocumentRules.setDatiBolla(conn, (DtbDoct) testata);
|
||||
DocumentRules.setDatiBolla(conn, (DtbDoct) testata);
|
||||
}
|
||||
|
||||
/*Calcola acconti*/
|
||||
@@ -917,12 +943,13 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
}
|
||||
}
|
||||
|
||||
castellettoIva.removeIf(x->x.getTipoIva() != null && x.getTipoIva().equalsIgnoreCase("IVA COMPOSTA"));
|
||||
castellettoIva.removeIf(x -> x.getTipoIva() != null && x.getTipoIva().equalsIgnoreCase("IVA COMPOSTA"));
|
||||
|
||||
testata.setTotImponib(totImponib).setTotIva(totImposta);
|
||||
}
|
||||
|
||||
private static void addCastellettoIva(BigDecimal importoRiga, String codAliq, Boolean ventilazione, List<CtbMovi> castelletto, Boolean flagIvaInclusa) {
|
||||
private static void addCastellettoIva(BigDecimal importoRiga, String codAliq, Boolean
|
||||
ventilazione, List<CtbMovi> castelletto, Boolean flagIvaInclusa) {
|
||||
java.util.Optional<CtbMovi> first =
|
||||
castelletto.stream()
|
||||
.filter(x -> UtilityString.equalsIgnoreCase(x.getCodAliq(), codAliq) && x.getVentilazione() == ventilazione &&
|
||||
@@ -943,7 +970,8 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
castelletto.add(ctbMovi);
|
||||
}
|
||||
|
||||
public static BigDecimal calcImposta(Connection conn, BigDecimal totImponib, BigDecimal percAliq, String tipoIva, Integer cifreDec)
|
||||
public static BigDecimal calcImposta(Connection conn, BigDecimal totImponib, BigDecimal percAliq, String
|
||||
tipoIva, Integer cifreDec)
|
||||
throws Exception {
|
||||
BigDecimal totImposta = BigDecimal.ZERO;
|
||||
|
||||
@@ -1026,7 +1054,8 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
datiTrasp.setPesoNetto(pesoNettoKgTot);
|
||||
}
|
||||
|
||||
public static void setNumColliPeso(EntityBase testata, String calcColli, DatiTrasportoDTO datiTrasp, List<MtbColt> colli, List<MtbColt> colliFromDB) throws Exception {
|
||||
public static void setNumColliPeso(EntityBase testata, String calcColli, DatiTrasportoDTO
|
||||
datiTrasp, List<MtbColt> colli, List<MtbColt> colliFromDB) throws Exception {
|
||||
String peso = null, numColli = null;
|
||||
BigDecimal pesoKgTot = datiTrasp.getPesoKg();
|
||||
BigDecimal colliTot = datiTrasp.getColli();
|
||||
@@ -1101,7 +1130,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
((DtbDoct) testata).setPesoNettoKg(pesoNettoKgTot);
|
||||
}
|
||||
|
||||
if (testata instanceof DtbDoct && ((DtbDoct) testata).getPostiPallet() == null) {
|
||||
if (testata instanceof DtbDoct && ((DtbDoct) testata).getPostiPallet() == null) {
|
||||
((DtbDoct) testata).setPostiPallet(datiTrasp.getPedane());
|
||||
} else if (testata instanceof DtbOrdt && ((DtbOrdt) testata).getPostiPallet() == null) {
|
||||
((DtbOrdt) testata).setPostiPallet(datiTrasp.getPedane());
|
||||
@@ -1116,7 +1145,8 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
return calcImportRiga(entity, entity.getValUntIva(), cifreDec);
|
||||
}
|
||||
|
||||
private static BigDecimal calcImportRiga(DtbDocOrdR entity, BigDecimal valUnt, Integer cifreDec) throws Exception {
|
||||
private static BigDecimal calcImportRiga(DtbDocOrdR entity, BigDecimal valUnt, Integer cifreDec) throws
|
||||
Exception {
|
||||
BigDecimal qta = entity.getQta();
|
||||
if (UtilityBigDecimal.isNullOrZero(qta))
|
||||
return BigDecimal.ZERO;
|
||||
@@ -1148,7 +1178,8 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
return CommonRules.roundValue(importoRiga, cifreDec);
|
||||
}
|
||||
|
||||
private static List<CostiDTO> addCosti(final DtbDocr dtbDocr, List<BigDecimal> sconti, List<CostiDTO> listaCosti, String codJfasTestata) throws Exception {
|
||||
private static List<CostiDTO> addCosti(final DtbDocr dtbDocr, List<
|
||||
BigDecimal> sconti, List<CostiDTO> listaCosti, String codJfasTestata) throws Exception {
|
||||
BigDecimal importo = dtbDocr.getImportoRiga();
|
||||
for (BigDecimal sconto : sconti) {
|
||||
if (sconto != null) {
|
||||
@@ -1327,7 +1358,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
(!UtilityString.isNullOrEmpty(testata.getCodPaga()) || !UtilityString.isNullOrEmpty(costoEsenzione) || !UtilityString.isNullOrEmpty(testata.getCodVvet()))) {
|
||||
|
||||
maxRigaSpesa = addAltreSpese(connection, testata, castelletto, speseCalc, maxRigaSpesa, whereCondExcSpese, cifreDec, ventilazione, flagPrzIva);
|
||||
if ( maxRigaSpesa > 0)
|
||||
if (maxRigaSpesa > 0)
|
||||
calcTotImponib(testata, connection, castelletto, cifreDec);
|
||||
}
|
||||
|
||||
@@ -1427,8 +1458,10 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
||||
return maxRigaSpesa;
|
||||
}
|
||||
|
||||
private static Integer addImpostaBollo(Connection connection, DtbDoct testata, List<CtbMovi> castelletto, List<DtbDocs> speseCalc,
|
||||
Integer maxRigaSpesa, String whereCondExcSpese, BigDecimal totDoc, Boolean ventilazione) throws Exception {
|
||||
private static Integer addImpostaBollo(Connection connection, DtbDoct
|
||||
testata, List<CtbMovi> castelletto, List<DtbDocs> speseCalc,
|
||||
Integer maxRigaSpesa, String whereCondExcSpese, BigDecimal totDoc, Boolean ventilazione) throws
|
||||
Exception {
|
||||
final String tipoCalcolo = "BOLLO";
|
||||
String impMinDoc = setupGest.getSetup(connection, "EXPORT_DOCUMENTI VENDITA", "FATTURE_FPR", "DATI_BOLLO_IMP_MIN");
|
||||
|
||||
|
||||
@@ -1009,11 +1009,11 @@ public class DocOrdRules extends QueryRules {
|
||||
.setCodTcolUl(dtbOrdt.getCodTcolUl())
|
||||
.setCodTcolUi(dtbOrdt.getCodTcolUi())
|
||||
.setNumCnf(dtbOrdt.getNumCnfProd());
|
||||
dtbOrdrProd.setOperation(OperationType.UPDATE);
|
||||
|
||||
dtbOrdrProd.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||
}
|
||||
dtbOrdtProd.addDtbOrdr(dtbOrdrProd);
|
||||
|
||||
|
||||
return dtbOrdtProd;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
package it.integry.ems.rules.completing.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
public class CostiDTO /*implements Comparable<CostiDTO> */ {
|
||||
private String codCcon, codJcom, codJfas, codMtip, matricola;
|
||||
private Date dataInizComp, dataFineComp;
|
||||
private BigDecimal importo;
|
||||
|
||||
public String getCodCcon() {
|
||||
return codCcon;
|
||||
}
|
||||
|
||||
public void setCodCcon(String codCcon) {
|
||||
this.codCcon = codCcon;
|
||||
}
|
||||
|
||||
public String getCodJcom() {
|
||||
return codJcom;
|
||||
}
|
||||
|
||||
public void setCodJcom(String codJcom) {
|
||||
this.codJcom = codJcom;
|
||||
}
|
||||
|
||||
public String getCodJfas() {
|
||||
return codJfas;
|
||||
}
|
||||
|
||||
public void setCodJfas(String codJfas) {
|
||||
this.codJfas = codJfas;
|
||||
}
|
||||
|
||||
public String getCodMtip() {
|
||||
return codMtip;
|
||||
}
|
||||
|
||||
public void setCodMtip(String codMtip) {
|
||||
this.codMtip = codMtip;
|
||||
}
|
||||
|
||||
public String getMatricola() {
|
||||
return matricola;
|
||||
}
|
||||
|
||||
public void setMatricola(String matricola) {
|
||||
this.matricola = matricola;
|
||||
}
|
||||
|
||||
public Date getDataInizComp() {
|
||||
return dataInizComp;
|
||||
}
|
||||
|
||||
public void setDataInizComp(Date dataInizComp) {
|
||||
this.dataInizComp = dataInizComp;
|
||||
}
|
||||
|
||||
public Date getDataFineComp() {
|
||||
return dataFineComp;
|
||||
}
|
||||
|
||||
public void setDataFineComp(Date dataFineComp) {
|
||||
this.dataFineComp = dataFineComp;
|
||||
}
|
||||
|
||||
public BigDecimal getImporto() {
|
||||
return importo;
|
||||
}
|
||||
|
||||
public void setImporto(BigDecimal importo) {
|
||||
this.importo = importo;
|
||||
}
|
||||
|
||||
|
||||
public boolean compare(CostiDTO object1, CostiDTO object2) {
|
||||
return object1.getCodCcon().compareTo((object2.getCodCcon())) < 0;
|
||||
}
|
||||
/*
|
||||
@Override
|
||||
public int compareTo(CostiDTO o) {
|
||||
CostiDTO k = (CostiDTO) o;
|
||||
String codCcon = k.getCodCcon();
|
||||
return this.getCodCcon().compareTo(codCcon);
|
||||
|
||||
} */
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package it.integry.ems.service.codice_fiscale.controller;
|
||||
|
||||
import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.service.codice_fiscale.dto.GenerateCodiceFiscaleRequestDTO;
|
||||
import it.integry.ems.service.codice_fiscale.service.CodiceFiscaleService;
|
||||
import it.integry.ems.service.comuni.service.UnitaTerritorialiService;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@Scope("request")
|
||||
@RequestMapping("system/codice-fiscale")
|
||||
public class CodiceFiscaleController {
|
||||
|
||||
@Autowired
|
||||
private CodiceFiscaleService codiceFiscaleService;
|
||||
|
||||
@PostMapping(value = "generate")
|
||||
public ServiceRestResponse generate(@RequestBody GenerateCodiceFiscaleRequestDTO requestDTO) throws Exception {
|
||||
if (requestDTO == null || requestDTO.getNome() == null || requestDTO.getCognome() == null || requestDTO.getDataNascita() == null ||
|
||||
UtilityString.isNull(requestDTO.getCodiceCatastale(), requestDTO.getComuneNascita()) == null) {
|
||||
throw new Exception("Invalid input data");
|
||||
}
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(
|
||||
codiceFiscaleService.generaCodiceFiscale(
|
||||
requestDTO.getNome(),
|
||||
requestDTO.getCognome(),
|
||||
requestDTO.getDataNascita(),
|
||||
requestDTO.getSesso(),
|
||||
requestDTO.getCodiceCatastale(),
|
||||
requestDTO.getComuneNascita()));
|
||||
}
|
||||
|
||||
@PostMapping(value = "reverse")
|
||||
public ServiceRestResponse reverse(@RequestParam String codiceFiscale) throws Exception {
|
||||
return ServiceRestResponse.createPositiveResponse(
|
||||
codiceFiscaleService.reverseCodiceFiscale(codiceFiscale));
|
||||
}
|
||||
|
||||
@GetMapping(value = "validate")
|
||||
public ServiceRestResponse validate(@RequestParam String codiceFiscale) throws Exception {
|
||||
codiceFiscaleService.validate(codiceFiscale);
|
||||
return ServiceRestResponse.createPositiveResponse();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package it.integry.ems.service.codice_fiscale.dto;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class CodiceFiscaleResultDTO {
|
||||
|
||||
private String nome;
|
||||
private String cognome;
|
||||
private LocalDate dataNascita;
|
||||
private String sesso;
|
||||
private String comuneNascita;
|
||||
private String provinciaNascita;
|
||||
private String codiceCatastale;
|
||||
|
||||
public String getNome() {
|
||||
return nome;
|
||||
}
|
||||
|
||||
public CodiceFiscaleResultDTO setNome(String nome) {
|
||||
this.nome = nome;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCognome() {
|
||||
return cognome;
|
||||
}
|
||||
|
||||
public CodiceFiscaleResultDTO setCognome(String cognome) {
|
||||
this.cognome = cognome;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LocalDate getDataNascita() {
|
||||
return dataNascita;
|
||||
}
|
||||
|
||||
public CodiceFiscaleResultDTO setDataNascita(LocalDate dataNascita) {
|
||||
this.dataNascita = dataNascita;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getSesso() {
|
||||
return sesso;
|
||||
}
|
||||
|
||||
public CodiceFiscaleResultDTO setSesso(String sesso) {
|
||||
this.sesso = sesso;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getComuneNascita() {
|
||||
return comuneNascita;
|
||||
}
|
||||
|
||||
public CodiceFiscaleResultDTO setComuneNascita(String comuneNascita) {
|
||||
this.comuneNascita = comuneNascita;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getProvinciaNascita() {
|
||||
return provinciaNascita;
|
||||
}
|
||||
|
||||
public CodiceFiscaleResultDTO setProvinciaNascita(String provinciaNascita) {
|
||||
this.provinciaNascita = provinciaNascita;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodiceCatastale() {
|
||||
return codiceCatastale;
|
||||
}
|
||||
|
||||
public CodiceFiscaleResultDTO setCodiceCatastale(String codiceCatastale) {
|
||||
this.codiceCatastale = codiceCatastale;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package it.integry.ems.service.codice_fiscale.dto;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
public class GenerateCodiceFiscaleRequestDTO {
|
||||
|
||||
private String nome;
|
||||
private String cognome;
|
||||
private LocalDate dataNascita;
|
||||
private char sesso;
|
||||
private String comuneNascita;
|
||||
private String codiceCatastale;
|
||||
|
||||
public String getNome() {
|
||||
return nome;
|
||||
}
|
||||
|
||||
public GenerateCodiceFiscaleRequestDTO setNome(String nome) {
|
||||
this.nome = nome;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCognome() {
|
||||
return cognome;
|
||||
}
|
||||
|
||||
public GenerateCodiceFiscaleRequestDTO setCognome(String cognome) {
|
||||
this.cognome = cognome;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LocalDate getDataNascita() {
|
||||
return dataNascita;
|
||||
}
|
||||
|
||||
public GenerateCodiceFiscaleRequestDTO setDataNascita(LocalDate dataNascita) {
|
||||
this.dataNascita = dataNascita;
|
||||
return this;
|
||||
}
|
||||
|
||||
public char getSesso() {
|
||||
return sesso;
|
||||
}
|
||||
|
||||
public GenerateCodiceFiscaleRequestDTO setSesso(char sesso) {
|
||||
this.sesso = sesso;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodiceCatastale() {
|
||||
return codiceCatastale;
|
||||
}
|
||||
|
||||
public GenerateCodiceFiscaleRequestDTO setCodiceCatastale(String codiceCatastale) {
|
||||
this.codiceCatastale = codiceCatastale;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getComuneNascita() {
|
||||
return comuneNascita;
|
||||
}
|
||||
|
||||
public GenerateCodiceFiscaleRequestDTO setComuneNascita(String comuneNascita) {
|
||||
this.comuneNascita = comuneNascita;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package it.integry.ems.service.codice_fiscale.dto;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class GenerateCodiceFiscaleResultDTO {
|
||||
|
||||
private final String codicePrincipale;
|
||||
private final List<String> codiciAlternativi;
|
||||
|
||||
public GenerateCodiceFiscaleResultDTO(String codicePrincipale, List<String> codiciAlternativi) {
|
||||
if (codicePrincipale == null || codicePrincipale.trim().isEmpty()) {
|
||||
throw new IllegalArgumentException("Il codice fiscale principale non può essere null o vuoto");
|
||||
}
|
||||
|
||||
this.codicePrincipale = codicePrincipale;
|
||||
this.codiciAlternativi = codiciAlternativi != null ?
|
||||
new ArrayList<>(codiciAlternativi) : new ArrayList<>();
|
||||
}
|
||||
|
||||
public String getCodicePrincipale() {
|
||||
return codicePrincipale;
|
||||
}
|
||||
|
||||
public List<String> getCodiciAlternativi() {
|
||||
return new ArrayList<>(codiciAlternativi);
|
||||
}
|
||||
|
||||
public boolean hasAlternativi() {
|
||||
return !codiciAlternativi.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("=== CODICE FISCALE ===\n");
|
||||
sb.append("Codice Fiscale Principale: ").append(codicePrincipale).append("\n");
|
||||
|
||||
if (!codiciAlternativi.isEmpty()) {
|
||||
sb.append("\nCodici Alternativi per Omonimia (").append(codiciAlternativi.size()).append("):\n");
|
||||
for (int i = 0; i < codiciAlternativi.size(); i++) {
|
||||
sb.append(" ").append(i + 1).append(". ").append(codiciAlternativi.get(i)).append("\n");
|
||||
}
|
||||
} else {
|
||||
sb.append("Nessun codice alternativo disponibile\n");
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) return true;
|
||||
if (obj == null || getClass() != obj.getClass()) return false;
|
||||
|
||||
GenerateCodiceFiscaleResultDTO that = (GenerateCodiceFiscaleResultDTO) obj;
|
||||
return Objects.equals(codicePrincipale, that.codicePrincipale) &&
|
||||
Objects.equals(codiciAlternativi, that.codiciAlternativi);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(codicePrincipale, codiciAlternativi);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,624 @@
|
||||
package it.integry.ems.service.codice_fiscale.service;
|
||||
|
||||
import it.integry.ems.service.codice_fiscale.dto.CodiceFiscaleResultDTO;
|
||||
import it.integry.ems.service.codice_fiscale.dto.GenerateCodiceFiscaleResultDTO;
|
||||
import it.integry.ems.service.comuni.entities.Comune;
|
||||
import it.integry.ems.service.comuni.service.UnitaTerritorialiService;
|
||||
import it.integry.ems_model.utility.UtilityDate;
|
||||
import it.integry.ems_model.utility.UtilityLocalDate;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
/**
|
||||
* Generatore di Codice Fiscale Italiano con controlli completi di validazione
|
||||
* Supporta la generazione del codice fiscale standard e dei codici alternativi per casi di omonimia
|
||||
*
|
||||
* @author gscorrano
|
||||
* @version 1.0
|
||||
* @since 2025-06-03
|
||||
*/
|
||||
|
||||
@Service
|
||||
public class CodiceFiscaleService {
|
||||
|
||||
|
||||
private final Logger logger = LogManager.getLogger();
|
||||
|
||||
@Autowired
|
||||
private UnitaTerritorialiService unitaTerritorialiService;
|
||||
|
||||
|
||||
// Costanti per la validazione
|
||||
private static final int MIN_YEAR = 1900;
|
||||
private static final int MAX_YEAR = 2100;
|
||||
private static final int MIN_NAME_LENGTH = 1;
|
||||
private static final int MAX_NAME_LENGTH = 50;
|
||||
private static final Pattern VALID_NAME_PATTERN = Pattern.compile("^[a-zA-ZÀ-ÿ\\s'-]+$");
|
||||
private static final Pattern CODICE_CATASTALE_PATTERN = Pattern.compile("^[A-Z][0-9]{3}$");
|
||||
|
||||
// Tabella dei mesi per il codice fiscale
|
||||
private static final String[] MESI = {"A", "B", "C", "D", "E", "H", "L", "M", "P", "R", "S", "T"};
|
||||
|
||||
// Vocali e consonanti per l'elaborazione di nomi e cognomi
|
||||
private static final String VOCALI = "AEIOU";
|
||||
private static final String CONSONANTI = "BCDFGHJKLMNPQRSTVWXYZ";
|
||||
|
||||
// Tabella per il calcolo del carattere di controllo
|
||||
private static final Map<Character, Integer> CARATTERI_DISPARI = new HashMap<>();
|
||||
private static final Map<Character, Integer> CARATTERI_PARI = new HashMap<>();
|
||||
private static final String CARATTERI_CONTROLLO = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
|
||||
static {
|
||||
inizializzaTabelleControllo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera il codice fiscale principale con validazione completa degli input
|
||||
*
|
||||
* @param nome Nome della persona
|
||||
* @param cognome Cognome della persona
|
||||
* @param dataNascita Data di nascita
|
||||
* @param sesso Sesso ('M' o 'F', case insensitive)
|
||||
* @param codiceCatastale Codice catastale del comune di nascita
|
||||
* @return Risultato contenente codice principale e alternativi
|
||||
* @throws IllegalArgumentException se gli input non sono validi
|
||||
* @throws NullPointerException se uno degli input obbligatori è null
|
||||
*/
|
||||
public GenerateCodiceFiscaleResultDTO generaCodiceFiscale(String nome, String cognome,
|
||||
LocalDate dataNascita, char sesso,
|
||||
String codiceCatastale, String comuneNascita) {
|
||||
|
||||
if (codiceCatastale == null && comuneNascita != null) {
|
||||
// Se il codice catastale non è fornito ma il comune di nascita è specificato, ottieni il codice catastale
|
||||
codiceCatastale = unitaTerritorialiService.getComuni().stream().filter(x -> x.getNome().equalsIgnoreCase(comuneNascita))
|
||||
.findFirst()
|
||||
.map(x -> x.getCodiceCatastale())
|
||||
.orElseThrow(() -> new IllegalArgumentException("Comune di nascita non trovato: " + comuneNascita));
|
||||
}
|
||||
|
||||
// Validazione completa degli input
|
||||
validaInput(nome, cognome, dataNascita, sesso, codiceCatastale);
|
||||
|
||||
// Normalizzazione degli input
|
||||
String nomeNormalizzato = normalizzaNome(nome);
|
||||
String cognomeNormalizzato = normalizzaNome(cognome);
|
||||
char sessoNormalizzato = Character.toUpperCase(sesso);
|
||||
String codiceCatastaleNormalizzato = codiceCatastale.toUpperCase().trim();
|
||||
|
||||
try {
|
||||
String codicePrincipale = calcolaCodiceFiscale(nomeNormalizzato, cognomeNormalizzato,
|
||||
dataNascita, sessoNormalizzato,
|
||||
codiceCatastaleNormalizzato);
|
||||
|
||||
List<String> codiciAlternativi = generaCodiciAlternativi(nomeNormalizzato, cognomeNormalizzato,
|
||||
dataNascita, sessoNormalizzato,
|
||||
codiceCatastaleNormalizzato);
|
||||
|
||||
codiciAlternativi.removeIf(x -> x.equalsIgnoreCase(codicePrincipale));
|
||||
|
||||
return new GenerateCodiceFiscaleResultDTO(codicePrincipale, codiciAlternativi);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Errore durante la generazione del codice fiscale: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Valida tutti gli input forniti
|
||||
*/
|
||||
private void validaInput(String nome, String cognome, LocalDate dataNascita,
|
||||
char sesso, String codiceCatastale) {
|
||||
|
||||
// Controllo null
|
||||
if (nome == null) {
|
||||
throw new NullPointerException("Il nome non può essere null");
|
||||
}
|
||||
if (cognome == null) {
|
||||
throw new NullPointerException("Il cognome non può essere null");
|
||||
}
|
||||
if (dataNascita == null) {
|
||||
throw new NullPointerException("La data di nascita non può essere null");
|
||||
}
|
||||
if (codiceCatastale == null) {
|
||||
throw new NullPointerException("Il codice catastale non può essere null");
|
||||
}
|
||||
|
||||
// Validazione nome
|
||||
validaNome(nome, "nome");
|
||||
validaNome(cognome, "cognome");
|
||||
|
||||
// Validazione data di nascita
|
||||
validaDataNascita(dataNascita);
|
||||
|
||||
// Validazione sesso
|
||||
validaSesso(sesso);
|
||||
|
||||
// Validazione codice catastale
|
||||
validaCodiceCatastale(codiceCatastale);
|
||||
}
|
||||
|
||||
/**
|
||||
* Valida un nome o cognome
|
||||
*/
|
||||
private void validaNome(String nome, String tipo) {
|
||||
String nomeTrimmed = nome.trim();
|
||||
|
||||
if (nomeTrimmed.isEmpty()) {
|
||||
throw new IllegalArgumentException("Il " + tipo + " non può essere vuoto");
|
||||
}
|
||||
|
||||
if (nomeTrimmed.length() < MIN_NAME_LENGTH) {
|
||||
throw new IllegalArgumentException("Il " + tipo + " deve contenere almeno " + MIN_NAME_LENGTH + " carattere");
|
||||
}
|
||||
|
||||
if (nomeTrimmed.length() > MAX_NAME_LENGTH) {
|
||||
throw new IllegalArgumentException("Il " + tipo + " non può superare " + MAX_NAME_LENGTH + " caratteri");
|
||||
}
|
||||
|
||||
if (!VALID_NAME_PATTERN.matcher(nomeTrimmed).matches()) {
|
||||
throw new IllegalArgumentException("Il " + tipo + " contiene caratteri non validi. " +
|
||||
"Sono ammessi solo lettere, spazi, apostrofi e trattini");
|
||||
}
|
||||
|
||||
// Controllo che non sia composto solo da spazi, apostrofi e trattini
|
||||
String nomePulito = nomeTrimmed.replaceAll("[\\s'-]", "");
|
||||
if (nomePulito.isEmpty()) {
|
||||
throw new IllegalArgumentException("Il " + tipo + " deve contenere almeno una lettera");
|
||||
}
|
||||
|
||||
// Controllo sequenze eccessive di caratteri speciali
|
||||
if (nomeTrimmed.contains("--") || nomeTrimmed.contains("''") || nomeTrimmed.contains(" ")) {
|
||||
throw new IllegalArgumentException("Il " + tipo + " contiene sequenze non valide di caratteri speciali");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Valida la data di nascita
|
||||
*/
|
||||
private void validaDataNascita(LocalDate dataNascita) {
|
||||
LocalDate oggi = LocalDate.now();
|
||||
|
||||
if (dataNascita.isAfter(oggi)) {
|
||||
throw new IllegalArgumentException("La data di nascita non può essere futura");
|
||||
}
|
||||
|
||||
if (dataNascita.getYear() < MIN_YEAR) {
|
||||
throw new IllegalArgumentException("La data di nascita non può essere precedente al " + MIN_YEAR);
|
||||
}
|
||||
|
||||
if (dataNascita.getYear() > MAX_YEAR) {
|
||||
throw new IllegalArgumentException("La data di nascita non può essere successiva al " + MAX_YEAR);
|
||||
}
|
||||
|
||||
// Controllo età massima ragionevole (150 anni)
|
||||
if (dataNascita.isBefore(oggi.minusYears(150))) {
|
||||
throw new IllegalArgumentException("La data di nascita indica un'età superiore a 150 anni");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Valida il sesso
|
||||
*/
|
||||
private void validaSesso(char sesso) {
|
||||
char sessoUpper = Character.toUpperCase(sesso);
|
||||
if (sessoUpper != 'M' && sessoUpper != 'F') {
|
||||
throw new IllegalArgumentException("Il sesso deve essere 'M' (maschio) o 'F' (femmina), ricevuto: '" + sesso + "'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Valida il codice catastale
|
||||
*/
|
||||
private void validaCodiceCatastale(String codiceCatastale) {
|
||||
String codiceTrimmed = codiceCatastale.trim().toUpperCase();
|
||||
|
||||
if (codiceTrimmed.isEmpty()) {
|
||||
throw new IllegalArgumentException("Il codice catastale non può essere vuoto");
|
||||
}
|
||||
|
||||
if (!CODICE_CATASTALE_PATTERN.matcher(codiceTrimmed).matches()) {
|
||||
throw new IllegalArgumentException("Il codice catastale deve essere nel formato: 1 lettera seguita da 3 cifre (es: H501). " +
|
||||
"Ricevuto: '" + codiceCatastale + "'");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizza un nome rimuovendo caratteri non necessari e standardizzando il formato
|
||||
*/
|
||||
private String normalizzaNome(String nome) {
|
||||
if (nome == null) return "";
|
||||
|
||||
// Rimuove spazi multipli e trim
|
||||
String normalizzato = nome.trim().replaceAll("\\s+", " ");
|
||||
|
||||
// Rimuove caratteri speciali per il calcolo del CF ma mantiene apostrofi e trattini
|
||||
// che potrebbero essere significativi
|
||||
return normalizzato;
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcola il codice fiscale standard con gestione degli errori
|
||||
*/
|
||||
private String calcolaCodiceFiscale(String nome, String cognome, LocalDate dataNascita,
|
||||
char sesso, String codiceCatastale) {
|
||||
|
||||
try {
|
||||
StringBuilder cf = new StringBuilder();
|
||||
|
||||
// 1. Cognome (3 caratteri)
|
||||
cf.append(elaboraCognome(cognome));
|
||||
|
||||
// 2. Nome (3 caratteri)
|
||||
cf.append(elaboraNome(nome));
|
||||
|
||||
// 3. Anno di nascita (2 caratteri)
|
||||
cf.append(String.format("%02d", dataNascita.getYear() % 100));
|
||||
|
||||
// 4. Mese di nascita (1 carattere)
|
||||
cf.append(MESI[dataNascita.getMonthValue() - 1]);
|
||||
|
||||
// 5. Giorno di nascita e sesso (2 caratteri)
|
||||
int giorno = dataNascita.getDayOfMonth();
|
||||
if (sesso == 'F') {
|
||||
giorno += 40;
|
||||
}
|
||||
cf.append(String.format("%02d", giorno));
|
||||
|
||||
// 6. Codice catastale (4 caratteri)
|
||||
cf.append(codiceCatastale);
|
||||
|
||||
// 7. Carattere di controllo
|
||||
cf.append(calcolaCarattereControllo(cf.toString()));
|
||||
|
||||
return cf.toString();
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Errore nel calcolo del codice fiscale: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera codici fiscali alternativi per casi di omonimia con gestione sicura
|
||||
*/
|
||||
private List<String> generaCodiciAlternativi(String nome, String cognome, LocalDate dataNascita,
|
||||
char sesso, String codiceCatastale) {
|
||||
|
||||
List<String> alternativi = new ArrayList<>();
|
||||
|
||||
try {
|
||||
// Variazioni sicure per il nome e cognome
|
||||
List<String> variazioniNome = generaVariazioniSicure(nome);
|
||||
List<String> variazioniCognome = generaVariazioniSicure(cognome);
|
||||
|
||||
// Genera codici alternativi per variazioni del nome
|
||||
for (String variazione : variazioniNome) {
|
||||
try {
|
||||
String cfAlternativo = calcolaCodiceFiscale(variazione, cognome, dataNascita, sesso, codiceCatastale);
|
||||
if (!alternativi.contains(cfAlternativo)) {
|
||||
alternativi.add(cfAlternativo);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Ignora variazioni che causano errori
|
||||
logger.warn("Warning: Impossibile generare codice alternativo per nome '" + variazione + "': " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Genera codici alternativi per variazioni del cognome
|
||||
for (String variazione : variazioniCognome) {
|
||||
try {
|
||||
String cfAlternativo = calcolaCodiceFiscale(nome, variazione, dataNascita, sesso, codiceCatastale);
|
||||
if (!alternativi.contains(cfAlternativo)) {
|
||||
alternativi.add(cfAlternativo);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Ignora variazioni che causano errori
|
||||
logger.warn("Warning: Impossibile generare codice alternativo per cognome '" + variazione + "': " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.warn("Warning: Errore nella generazione dei codici alternativi: " + e.getMessage());
|
||||
}
|
||||
|
||||
return alternativi.stream().distinct().limit(10).collect(Collectors.toList()); // Limita a 10 alternativi
|
||||
}
|
||||
|
||||
/**
|
||||
* Genera variazioni sicure di un nome per evitare errori
|
||||
*/
|
||||
private List<String> generaVariazioniSicure(String nome) {
|
||||
List<String> variazioni = new ArrayList<>();
|
||||
|
||||
if (nome == null || nome.trim().isEmpty()) {
|
||||
return variazioni;
|
||||
}
|
||||
|
||||
String nomeNormalizzato = nome.trim().toUpperCase();
|
||||
|
||||
// Sostituzioni vocali comuni
|
||||
Map<Character, Character[]> sostituzioniVocali = new HashMap<>();
|
||||
sostituzioniVocali.put('A', new Character[]{'E', 'I'});
|
||||
sostituzioniVocali.put('E', new Character[]{'A', 'I'});
|
||||
sostituzioniVocali.put('I', new Character[]{'E', 'O'});
|
||||
sostituzioniVocali.put('O', new Character[]{'U', 'A'});
|
||||
sostituzioniVocali.put('U', new Character[]{'O', 'I'});
|
||||
|
||||
// Genera variazioni per ogni posizione
|
||||
for (int i = 0; i < Math.min(nomeNormalizzato.length(), 3); i++) {
|
||||
char carattereOriginale = nomeNormalizzato.charAt(i);
|
||||
|
||||
if (sostituzioniVocali.containsKey(carattereOriginale)) {
|
||||
for (Character sostituzione : sostituzioniVocali.get(carattereOriginale)) {
|
||||
try {
|
||||
StringBuilder variazione = new StringBuilder(nomeNormalizzato);
|
||||
variazione.setCharAt(i, sostituzione);
|
||||
String nuovaVariazione = variazione.toString();
|
||||
|
||||
// Verifica che la variazione sia valida
|
||||
if (isVariazioneValida(nuovaVariazione) && !variazioni.contains(nuovaVariazione)) {
|
||||
variazioni.add(nuovaVariazione);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// Ignora variazioni che causano problemi
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return variazioni;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifica se una variazione è valida
|
||||
*/
|
||||
private boolean isVariazioneValida(String variazione) {
|
||||
if (variazione == null || variazione.trim().isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Verifica che contenga almeno una lettera
|
||||
String varPulita = variazione.replaceAll("[^A-Z]", "");
|
||||
return varPulita.length() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Elabora il cognome secondo le regole del codice fiscale con controlli aggiuntivi
|
||||
*/
|
||||
private String elaboraCognome(String cognome) {
|
||||
return elaboraStringa(cognome, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Elabora il nome secondo le regole del codice fiscale con controlli aggiuntivi
|
||||
*/
|
||||
private String elaboraNome(String nome) {
|
||||
return elaboraStringa(nome, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Elabora una stringa (nome o cognome) secondo le regole del CF con validazione
|
||||
*/
|
||||
private String elaboraStringa(String stringa, boolean isNome) {
|
||||
if (stringa == null || stringa.trim().isEmpty()) {
|
||||
return "XXX";
|
||||
}
|
||||
|
||||
// Normalizza la stringa: maiuscolo, rimuove caratteri non alfabetici
|
||||
String normalizzata = stringa.toUpperCase()
|
||||
.replaceAll("[^A-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞŸ]", "")
|
||||
.replaceAll("[ÀÁÂÃÄÅÆ]", "A")
|
||||
.replaceAll("[ÇČĆ]", "C")
|
||||
.replaceAll("[ÈÉÊË]", "E")
|
||||
.replaceAll("[ÌÍÎÏ]", "I")
|
||||
.replaceAll("[ÑŃ]", "N")
|
||||
.replaceAll("[ÒÓÔÕÖØ]", "O")
|
||||
.replaceAll("[ÙÚÛÜ]", "U")
|
||||
.replaceAll("[ÝÞŸ]", "Y");
|
||||
|
||||
if (normalizzata.isEmpty()) {
|
||||
return "XXX";
|
||||
}
|
||||
|
||||
StringBuilder consonanti = new StringBuilder();
|
||||
StringBuilder vocali = new StringBuilder();
|
||||
|
||||
for (char c : normalizzata.toCharArray()) {
|
||||
if (CONSONANTI.indexOf(c) != -1) {
|
||||
consonanti.append(c);
|
||||
} else if (VOCALI.indexOf(c) != -1) {
|
||||
vocali.append(c);
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder risultato = new StringBuilder();
|
||||
|
||||
try {
|
||||
if (isNome && consonanti.length() >= 4) {
|
||||
// Per il nome: se ci sono 4+ consonanti, prendi 1a, 3a, 4a
|
||||
risultato.append(consonanti.charAt(0));
|
||||
risultato.append(consonanti.charAt(2));
|
||||
risultato.append(consonanti.charAt(3));
|
||||
} else {
|
||||
// Regola standard: prima le consonanti, poi le vocali
|
||||
risultato.append(consonanti);
|
||||
risultato.append(vocali);
|
||||
}
|
||||
|
||||
// Completa con X se necessario
|
||||
while (risultato.length() < 3) {
|
||||
risultato.append('X');
|
||||
}
|
||||
|
||||
return risultato.substring(0, 3);
|
||||
|
||||
} catch (Exception e) {
|
||||
// In caso di errore, ritorna XXX
|
||||
return "XXX";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Calcola il carattere di controllo con gestione degli errori
|
||||
*/
|
||||
private char calcolaCarattereControllo(String cf) {
|
||||
if (cf == null || cf.length() != 15) {
|
||||
throw new IllegalArgumentException("Codice fiscale parziale non valido per il calcolo del controllo: " + cf);
|
||||
}
|
||||
|
||||
try {
|
||||
int somma = 0;
|
||||
|
||||
for (int i = 0; i < cf.length(); i++) {
|
||||
char c = cf.charAt(i);
|
||||
|
||||
if (i % 2 == 0) {
|
||||
// Posizione dispari (1, 3, 5, ...)
|
||||
if (!CARATTERI_DISPARI.containsKey(c)) {
|
||||
throw new IllegalArgumentException("Carattere non valido in posizione dispari: " + c);
|
||||
}
|
||||
somma += CARATTERI_DISPARI.get(c);
|
||||
} else {
|
||||
// Posizione pari (2, 4, 6, ...)
|
||||
if (!CARATTERI_PARI.containsKey(c)) {
|
||||
throw new IllegalArgumentException("Carattere non valido in posizione pari: " + c);
|
||||
}
|
||||
somma += CARATTERI_PARI.get(c);
|
||||
}
|
||||
}
|
||||
|
||||
return CARATTERI_CONTROLLO.charAt(somma % 26);
|
||||
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Errore nel calcolo del carattere di controllo: " + e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Inizializza le tabelle per il calcolo del carattere di controllo
|
||||
*/
|
||||
private static void inizializzaTabelleControllo() {
|
||||
// Valori per posizioni dispari
|
||||
String lettereDispari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
int[] valoriDispari = {1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23};
|
||||
|
||||
for (int i = 0; i < lettereDispari.length(); i++) {
|
||||
CARATTERI_DISPARI.put(lettereDispari.charAt(i), valoriDispari[i]);
|
||||
}
|
||||
|
||||
// Valori per numeri in posizioni dispari
|
||||
for (int i = 0; i <= 9; i++) {
|
||||
CARATTERI_DISPARI.put(Character.forDigit(i, 10), valoriDispari[i]);
|
||||
}
|
||||
|
||||
// Valori per posizioni pari (lettere)
|
||||
for (int i = 0; i < 26; i++) {
|
||||
CARATTERI_PARI.put((char) ('A' + i), i);
|
||||
}
|
||||
|
||||
// Valori per numeri in posizioni pari
|
||||
for (int i = 0; i <= 9; i++) {
|
||||
CARATTERI_PARI.put(Character.forDigit(i, 10), i);
|
||||
}
|
||||
}
|
||||
|
||||
public CodiceFiscaleResultDTO reverseCodiceFiscale(String codiceFiscale) throws Exception {
|
||||
|
||||
validate(codiceFiscale);
|
||||
|
||||
CodiceFiscaleResultDTO codiceFiscaleResultDTO = new CodiceFiscaleResultDTO();
|
||||
|
||||
// Anno
|
||||
int anno = Integer.parseInt(codiceFiscale.substring(6, 8));
|
||||
anno += (anno >= 0 && anno <= UtilityLocalDate.getNow().getYear()) ? 2000 : 1900;
|
||||
String meseChar = String.valueOf(codiceFiscale.charAt(8));
|
||||
int mese = 0;
|
||||
for (int i = 1; i <= MESI.length; i++) {
|
||||
if (MESI[i].equalsIgnoreCase(meseChar)) {
|
||||
mese = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Giorno e sesso
|
||||
int giornoNum = Integer.parseInt(codiceFiscale.substring(9, 11));
|
||||
String sesso = giornoNum > 31 ? "F" : "M";
|
||||
int giorno = (sesso.equals("F")) ? giornoNum - 40 : giornoNum;
|
||||
|
||||
String codiceComune = codiceFiscale.substring(11, 15);
|
||||
|
||||
|
||||
Comune comune = unitaTerritorialiService.getComuni().stream().filter(x -> x.getCodiceCatastale().equalsIgnoreCase(codiceComune))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
codiceFiscaleResultDTO
|
||||
.setNome(codiceFiscale.substring(3, 6))
|
||||
.setCognome(codiceFiscale.substring(0, 3))
|
||||
.setDataNascita(LocalDate.of(anno, mese + 1, giorno))
|
||||
.setSesso(sesso)
|
||||
.setCodiceCatastale(codiceComune)
|
||||
.setComuneNascita(comune !=null?comune.getNome():null)
|
||||
.setProvinciaNascita(comune!=null?comune.getSigla():null);
|
||||
|
||||
|
||||
return codiceFiscaleResultDTO;
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void validate(String codiceFiscale) throws Exception {
|
||||
if (codiceFiscale == null || codiceFiscale.length() != 16)
|
||||
throw new Exception("Codice fiscale non valido");
|
||||
|
||||
codiceFiscale = codiceFiscale.toUpperCase();
|
||||
|
||||
// Controllo caratteri ammessi
|
||||
if (!codiceFiscale.matches("^[A-Z0-9]{16}$"))
|
||||
throw new Exception("Codice fiscale contiene caratteri non validi");
|
||||
|
||||
// Controllo anno (posizioni 6-7)
|
||||
String annoStr = codiceFiscale.substring(6, 8);
|
||||
if (!annoStr.matches("\\d{2}"))
|
||||
throw new Exception("Anno di nascita non valido nel codice fiscale");
|
||||
|
||||
// Controllo mese (posizione 8)
|
||||
String meseLettera = codiceFiscale.substring(8, 9);
|
||||
boolean meseValido = false;
|
||||
for (String mese : MESI) {
|
||||
if (mese.equals(meseLettera)) {
|
||||
meseValido = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!meseValido)
|
||||
throw new Exception("Mese di nascita non valido nel codice fiscale");
|
||||
|
||||
// Controllo giorno/sesso (posizioni 9-10)
|
||||
String giornoStr = codiceFiscale.substring(9, 11);
|
||||
int giorno;
|
||||
try {
|
||||
giorno = Integer.parseInt(giornoStr);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new Exception("Giorno di nascita non valido nel codice fiscale");
|
||||
}
|
||||
if (giorno < 1 || (giorno > 31 && giorno < 41) || giorno > 71)
|
||||
throw new Exception("Giorno di nascita non valido nel codice fiscale");
|
||||
|
||||
// Controllo codice catastale (posizioni 11-14)
|
||||
String codiceComune = codiceFiscale.substring(11, 15);
|
||||
if (!codiceComune.matches("^[A-Z]\\d{3}$"))
|
||||
throw new Exception("Codice catastale non valido nel codice fiscale");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package it.integry.ems.service.dto.production;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class AvailableClassMercDTO {
|
||||
|
||||
private String codMgrp;
|
||||
private List<String> codMsgr;
|
||||
|
||||
public String getCodMgrp() {
|
||||
return codMgrp;
|
||||
}
|
||||
|
||||
public AvailableClassMercDTO setCodMgrp(String codMgrp) {
|
||||
this.codMgrp = codMgrp;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<String> getCodMsgr() {
|
||||
return codMsgr;
|
||||
}
|
||||
|
||||
public AvailableClassMercDTO setCodMsgr(List<String> codMsgr) {
|
||||
this.codMsgr = codMsgr;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -1076,28 +1076,4 @@ public class OrdineLavorazioneDTO {
|
||||
this.availableClassMerc = availableClassMerc;
|
||||
return this;
|
||||
}
|
||||
|
||||
public static class AvailableClassMercDTO {
|
||||
|
||||
private String codMgrp;
|
||||
private List<String> codMsgr;
|
||||
|
||||
public String getCodMgrp() {
|
||||
return codMgrp;
|
||||
}
|
||||
|
||||
public AvailableClassMercDTO setCodMgrp(String codMgrp) {
|
||||
this.codMgrp = codMgrp;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<String> getCodMsgr() {
|
||||
return codMsgr;
|
||||
}
|
||||
|
||||
public AvailableClassMercDTO setCodMsgr(List<String> codMsgr) {
|
||||
this.codMsgr = codMsgr;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package it.integry.ems.service.production;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import it.integry.ems.service.dto.production.AvailableClassMercDTO;
|
||||
import it.integry.ems.service.dto.production.OrdineInevasoGroupMercDTO;
|
||||
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
|
||||
import it.integry.ems.settings.Model.AvailableConnectionsModel;
|
||||
@@ -267,7 +268,7 @@ public class ProductionOrderDataHandlerService {
|
||||
|
||||
for (Map.Entry<String, List<OrdineInevasoGroupMercDTO>> entry : groups.entrySet()) {
|
||||
order.getAvailableClassMerc()
|
||||
.add(new OrdineLavorazioneDTO.AvailableClassMercDTO()
|
||||
.add(new AvailableClassMercDTO()
|
||||
.setCodMgrp(entry.getKey())
|
||||
.setCodMsgr(entry.getValue().stream()
|
||||
.map(OrdineInevasoGroupMercDTO::getCodMsgr)
|
||||
|
||||
@@ -4,9 +4,9 @@ import it.integry.ems.response.ServiceRestResponse;
|
||||
import it.integry.ems.sync.service.RemoteSynchronizationService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@@ -17,20 +17,20 @@ public class RemoteSynchronizationController {
|
||||
@Autowired
|
||||
private RemoteSynchronizationService remoteSynchronizationService;
|
||||
|
||||
@RequestMapping(value = "publications/{groupId}/start", method = RequestMethod.GET)
|
||||
@GetMapping(value = "publications/{groupId}/start")
|
||||
public ServiceRestResponse startPublication(@PathVariable long groupId) throws Exception {
|
||||
remoteSynchronizationService.startPublication(groupId);
|
||||
return ServiceRestResponse.createPositiveResponse();
|
||||
}
|
||||
|
||||
@RequestMapping(value = "publications/status", method = RequestMethod.GET)
|
||||
@GetMapping(value = "publications/status")
|
||||
public ServiceRestResponse statusPublication() {
|
||||
return ServiceRestResponse.createPositiveResponse(remoteSynchronizationService.getPublicationStatus());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@RequestMapping(value = "subscription/{subscriptionId}/run", method = RequestMethod.GET)
|
||||
@GetMapping(value = "subscription/{subscriptionId}/run")
|
||||
public ServiceRestResponse runSubscription(@PathVariable long subscriptionId) throws Exception {
|
||||
remoteSynchronizationService.runSubscription(subscriptionId);
|
||||
return ServiceRestResponse.createPositiveResponse();
|
||||
|
||||
@@ -147,6 +147,7 @@ public class UserCacheService {
|
||||
(application == IntegryApplicationEnum.CONSEGNA && x.isWeb()) ||
|
||||
(application == IntegryApplicationEnum.WMS && x.isWeb()) ||
|
||||
(application == IntegryApplicationEnum.TASK && x.isWeb()) ||
|
||||
(application == IntegryApplicationEnum.CRM && x.isWeb()) ||
|
||||
(application == IntegryApplicationEnum.GESTIONALE_BASE && x.isInternal())))
|
||||
.findFirst();
|
||||
|
||||
@@ -173,6 +174,7 @@ public class UserCacheService {
|
||||
(application == IntegryApplicationEnum.CONSEGNA && x.isWeb()) ||
|
||||
(application == IntegryApplicationEnum.WMS && x.isWeb()) ||
|
||||
(application == IntegryApplicationEnum.TASK && x.isWeb()) ||
|
||||
(application == IntegryApplicationEnum.CRM && x.isWeb()) ||
|
||||
(application == IntegryApplicationEnum.GESTIONALE_BASE && x.isInternal())))
|
||||
.findFirst();
|
||||
|
||||
|
||||
118
ems-core/src/main/java/it/integry/ems_model/entity/DtbDocp.java
Normal file
118
ems-core/src/main/java/it/integry/ems_model/entity/DtbDocp.java
Normal file
@@ -0,0 +1,118 @@
|
||||
package it.integry.ems_model.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
||||
import it.integry.ems_model.annotation.*;
|
||||
import it.integry.ems_model.base.EntityBase;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.kie.api.definition.type.PropertyReactive;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Master()
|
||||
@PropertyReactive()
|
||||
@Table(value = DtbDocp.ENTITY)
|
||||
@JsonTypeName(value = DtbDocp.ENTITY)
|
||||
public class DtbDocp extends EntityBase {
|
||||
|
||||
public final static String ENTITY = "dtb_docp";
|
||||
|
||||
private final static Long serialVersionUID = 1L;
|
||||
|
||||
private final static Logger logger = LogManager.getLogger();
|
||||
|
||||
public DtbDocp() {
|
||||
super(logger);
|
||||
}
|
||||
|
||||
@PK()
|
||||
@Identity()
|
||||
@SqlField(value = "id", nullable = false)
|
||||
private Long id;
|
||||
|
||||
@SqlField(value = "cod_anag", maxLength = 5, nullable = false)
|
||||
@FK(tableName = DtbDoct.ENTITY, columnName = "cod_anag")
|
||||
private String codAnag;
|
||||
|
||||
@SqlField(value = "cod_dtip", maxLength = 5, nullable = false)
|
||||
@FK(tableName = DtbDoct.ENTITY, columnName = "cod_dtip")
|
||||
private String codDtip;
|
||||
|
||||
@SqlField(value = "data_doc", nullable = false)
|
||||
@FK(tableName = DtbDoct.ENTITY, columnName = "data_doc")
|
||||
private Date dataDoc;
|
||||
|
||||
@SqlField(value = "ser_doc", maxLength = 2, nullable = false)
|
||||
@FK(tableName = DtbDoct.ENTITY, columnName = "ser_doc")
|
||||
private String serDoc;
|
||||
|
||||
@SqlField(value = "num_doc", nullable = false)
|
||||
@FK(tableName = DtbDoct.ENTITY, columnName = "num_doc")
|
||||
private Integer numDoc;
|
||||
|
||||
@SqlField(value = "num_prot", nullable = false)
|
||||
private Integer numProt;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public DtbDocp setId(Long id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodAnag() {
|
||||
return codAnag;
|
||||
}
|
||||
|
||||
public DtbDocp setCodAnag(String codAnag) {
|
||||
this.codAnag = codAnag;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodDtip() {
|
||||
return codDtip;
|
||||
}
|
||||
|
||||
public DtbDocp setCodDtip(String codDtip) {
|
||||
this.codDtip = codDtip;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Date getDataDoc() {
|
||||
return dataDoc;
|
||||
}
|
||||
|
||||
public DtbDocp setDataDoc(Date dataDoc) {
|
||||
this.dataDoc = dataDoc;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getSerDoc() {
|
||||
return serDoc;
|
||||
}
|
||||
|
||||
public DtbDocp setSerDoc(String serDoc) {
|
||||
this.serDoc = serDoc;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Integer getNumDoc() {
|
||||
return numDoc;
|
||||
}
|
||||
|
||||
public DtbDocp setNumDoc(Integer numDoc) {
|
||||
this.numDoc = numDoc;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Integer getNumProt() {
|
||||
return numProt;
|
||||
}
|
||||
|
||||
public DtbDocp setNumProt(Integer numProt) {
|
||||
this.numProt = numProt;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -213,6 +213,9 @@ public class DtbTipi extends EntityBase {
|
||||
@SqlField(value = "cod_ccau_coan", maxLength = 5)
|
||||
private String codCcauCoan;
|
||||
|
||||
@SqlField(value = "flag_set_num_prot", nullable = false, defaultObjectValue = "0")
|
||||
private Boolean flagSetNumProt;
|
||||
|
||||
@EntityChild
|
||||
private List<DtbTipiAnag> dtbTipiAnag = new ArrayList<>();
|
||||
|
||||
@@ -834,6 +837,15 @@ public class DtbTipi extends EntityBase {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Boolean getFlagSetNumProt() {
|
||||
return flagSetNumProt;
|
||||
}
|
||||
|
||||
public DtbTipi setFlagSetNumProt(Boolean flagSetNumProt) {
|
||||
this.flagSetNumProt = flagSetNumProt;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void deleteChilds() throws Exception {
|
||||
DtbTipiAnag dtbTipiAnag = new DtbTipiAnag();
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package it.integry.ems_model.utility;
|
||||
|
||||
import it.integry.ems.Import.dto.ImportRequestDTO;
|
||||
import it.integry.ems_model.entity.PtbDest;
|
||||
import it.integry.ems_model.entity.VtbDest;
|
||||
import org.apache.commons.codec.binary.Base64;
|
||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
@@ -10,6 +12,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import java.io.*;
|
||||
import java.nio.file.Files;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.Iterator;
|
||||
|
||||
@@ -74,61 +77,99 @@ public class UtilityExcel {
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads an XLSX file from the provided ImportRequestDTO and returns an iterator over the rows.
|
||||
* Reads an XLSX file and returns an iterator over the rows or sheets.
|
||||
*
|
||||
* @param requestDTO the import request containing the base64 encoded content of the XLSX file
|
||||
* @return an iterator over the rows of the first sheet in the XLSX file
|
||||
* @throws Exception if an error occurs while reading the file or if the file is empty
|
||||
* @param requestDTO the import request containing file information
|
||||
* @param clazz the class type to return (Row or Sheet)
|
||||
* @return an iterator over the specified class type ignoring the header row
|
||||
* @throws Exception if there is an error reading the file
|
||||
*/
|
||||
public static Iterator<Row> readXlsxFile(ImportRequestDTO requestDTO) throws Exception {
|
||||
return readXlsxFile(requestDTO, true);
|
||||
public static <T> Iterator<T> readXlsxFile(ImportRequestDTO requestDTO, Class<T> clazz) throws Exception {
|
||||
return readXlsxFile(requestDTO, true, clazz);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads an XLSX file from the provided ImportRequestDTO and returns an iterator over the rows.
|
||||
* Reads an XLSX file and returns an iterator over the rows or sheets.
|
||||
*
|
||||
* @param requestDTO the import request containing the base64 encoded content of the XLSX file
|
||||
* @param ignoreHeader whether to ignore the first row (header) of the sheet
|
||||
* @return an iterator over the rows of the first sheet in the XLSX file
|
||||
* @throws Exception if an error occurs while reading the file or if the file is empty
|
||||
* @param requestDTO the import request containing file information
|
||||
* @param ignoreHeader whether to ignore the header row
|
||||
* @param clazz the class type to return (Row or Sheet)
|
||||
* @return an iterator over the specified class type
|
||||
* @throws Exception if there is an error reading the file
|
||||
*/
|
||||
public static Iterator<Row> readXlsxFile(ImportRequestDTO requestDTO, boolean ignoreHeader) throws Exception {
|
||||
public static <T> Iterator<T> readXlsxFile(ImportRequestDTO requestDTO, boolean ignoreHeader, Class<T> clazz) throws Exception {
|
||||
InputStream stream;
|
||||
|
||||
if (requestDTO.getRawContentB64() != null)
|
||||
stream = new ByteArrayInputStream(Base64.decodeBase64(requestDTO.getRawContentB64()));
|
||||
else if (requestDTO.getPathFile() != null && requestDTO.getFileName() != null) {
|
||||
File file = new File(requestDTO.getPathFile());
|
||||
if ( file.isDirectory()) {
|
||||
if (file.isDirectory()) {
|
||||
file = new File(requestDTO.getPathFile() + "/" + requestDTO.getFileName());
|
||||
}
|
||||
|
||||
stream = Files.newInputStream(file.toPath());
|
||||
} else
|
||||
throw new Exception("Errore nella lettura del file");
|
||||
return readXlsxFile(stream, ignoreHeader);
|
||||
return readXlsxFile(stream, ignoreHeader, clazz);
|
||||
}
|
||||
|
||||
public static Iterator<Row> readXlsxFile(InputStream stream, boolean ignoreHeader) throws Exception {
|
||||
/**
|
||||
* Reads an XLSX file from an InputStream and returns an iterator over the rows or sheets.
|
||||
*
|
||||
* @param stream the InputStream of the XLSX file
|
||||
* @param ignoreHeader whether to ignore the header row
|
||||
* @param clazz the class type to return (Row or Sheet)
|
||||
* @return an iterator over the specified class type
|
||||
* @throws Exception if there is an error reading the file
|
||||
*/
|
||||
public static <T> Iterator<T> readXlsxFile(InputStream stream, boolean ignoreHeader, Class<T> clazz) throws Exception {
|
||||
if (clazz.equals(Row.class)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<T> rowIterator = (Iterator<T>) readXlsxFileReturnRow(stream, ignoreHeader);
|
||||
return rowIterator;
|
||||
} else if (clazz.equals(Sheet.class)) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Iterator<T> rowIterator = (Iterator<T>) readXlsxReturnSheet(stream);
|
||||
return rowIterator;
|
||||
}
|
||||
|
||||
throw new Exception("Tipo di classe non supportato: " + clazz.getName());
|
||||
}
|
||||
|
||||
private static Iterator<Sheet> readXlsxReturnSheet(InputStream stream) throws Exception {
|
||||
OPCPackage pkg = OPCPackage.open(stream);
|
||||
Workbook workbook = new XSSFWorkbook(pkg);
|
||||
Sheet sheet = workbook.getSheetAt(0);
|
||||
Iterator<Sheet> sheetIterator = workbook.sheetIterator();
|
||||
pkg.close();
|
||||
|
||||
return sheetIterator;
|
||||
}
|
||||
|
||||
private static Iterator<Row> readXlsxFileReturnRow(InputStream stream, boolean ignoreHeader) throws Exception {
|
||||
Iterator<Sheet> sheetIterator = readXlsxReturnSheet(stream);
|
||||
return getRowIterator(sheetIterator.next(), ignoreHeader);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an iterator over the rows of a given sheet, optionally ignoring the header row.
|
||||
*
|
||||
* @param sheet the sheet to iterate over
|
||||
* @param ignoreHeader whether to ignore the first row (header)
|
||||
* @return an iterator over the rows of the sheet
|
||||
* @throws Exception if the sheet is empty or there is an error processing it
|
||||
*/
|
||||
public static Iterator<Row> getRowIterator(Sheet sheet, boolean ignoreHeader) throws Exception {
|
||||
Iterator<Row> rowIterator = sheet.iterator();
|
||||
|
||||
// Ignora la prima riga (header)
|
||||
if (ignoreHeader) {
|
||||
if (rowIterator.hasNext()) {
|
||||
if (ignoreHeader)
|
||||
if (rowIterator.hasNext())
|
||||
rowIterator.next();
|
||||
}
|
||||
}
|
||||
|
||||
// Verifica se il foglio di lavoro è vuoto
|
||||
if (!rowIterator.hasNext()) {
|
||||
if (!rowIterator.hasNext())
|
||||
throw new Exception("Il file è vuoto.");
|
||||
}
|
||||
|
||||
return rowIterator;
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package it.integry.firebase.dto;
|
||||
|
||||
import com.google.firebase.messaging.FcmOptions;
|
||||
import com.google.firebase.messaging.Message;
|
||||
import it.integry.ems_model.entity.WtbUserDeviceToken;
|
||||
import it.integry.firebase.dto.android.AndroidConfigDTO;
|
||||
import it.integry.firebase.dto.apns.ApnsConfigDTO;
|
||||
import it.integry.firebase.dto.webpush.WebpushConfigDTO;
|
||||
@@ -19,6 +20,7 @@ public class MessageDTO {
|
||||
private String condition;
|
||||
private String analyticsLabel;
|
||||
private String userName;
|
||||
private WtbUserDeviceToken.AppName appName;
|
||||
|
||||
public Message.Builder toBuilder() {
|
||||
Message.Builder builder = Message.builder();
|
||||
@@ -151,4 +153,13 @@ public class MessageDTO {
|
||||
this.userName = userName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public WtbUserDeviceToken.AppName getAppName() {
|
||||
return appName;
|
||||
}
|
||||
|
||||
public MessageDTO setAppName(WtbUserDeviceToken.AppName appName) {
|
||||
this.appName = appName;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.entity.WtbDeviceTokenTopic;
|
||||
import it.integry.ems_model.entity.WtbUserDeviceToken;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.Query;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityHashMap;
|
||||
import it.integry.firebase.enums.SubscribeOperation;
|
||||
@@ -124,29 +125,21 @@ public class DeviceTokenService {
|
||||
}
|
||||
|
||||
public List<WtbUserDeviceToken> getUserDevices(String userName) throws Exception {
|
||||
String sql = "SELECT * from wtb_user_device_tokens where user_name = " + UtilityDB.valueToString(userName);
|
||||
return getUserDevices(userName, null);
|
||||
}
|
||||
|
||||
Connection connection = multiDBTransactionManager.getPrimaryConnection();
|
||||
PreparedStatement ps = connection.prepareStatement(sql);
|
||||
ResultSet rs = ps.executeQuery();
|
||||
List<WtbUserDeviceToken> devices = new ArrayList<>();
|
||||
public List<WtbUserDeviceToken> getUserDevices(String userName, WtbUserDeviceToken.AppName appName) throws Exception {
|
||||
Integer appnameValue = appName == null ? null : appName.getValue();
|
||||
|
||||
while (rs.next()) {
|
||||
WtbUserDeviceToken device = new WtbUserDeviceToken();
|
||||
String sql = Query.format(
|
||||
"SELECT *\n" +
|
||||
"FROM wtb_user_device_tokens\n" +
|
||||
"WHERE user_name = %s\n" +
|
||||
" AND (%s IS NULL OR app_name = %s)",
|
||||
userName, appnameValue, appnameValue
|
||||
);
|
||||
|
||||
device.setDeviceToken(rs.getString("device_token"));
|
||||
device.setAppName(WtbUserDeviceToken.AppName.from(rs.getInt("app_name")));
|
||||
device.setId(rs.getLong("id"));
|
||||
device.setPlatform(rs.getString("platform"));
|
||||
device.setUserName(rs.getString("user_name"));
|
||||
|
||||
devices.add(device);
|
||||
}
|
||||
|
||||
rs.close();
|
||||
ps.close();
|
||||
|
||||
return devices;
|
||||
return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, WtbUserDeviceToken.class);
|
||||
}
|
||||
|
||||
public List<String> getUserAssociatedTopics(String userName) throws Exception {
|
||||
|
||||
@@ -547,7 +547,7 @@ public class NotificationService {
|
||||
throw new Exception("Username nullo in sendNotificationToUserDevices.");
|
||||
}
|
||||
|
||||
for (WtbUserDeviceToken device : deviceTokenService.getUserDevices(messageDTO.getUserName())) {
|
||||
for (WtbUserDeviceToken device : deviceTokenService.getUserDevices(messageDTO.getUserName(), messageDTO.getAppName())) {
|
||||
try {
|
||||
Message message = messageDTO.toBuilder()
|
||||
.setToken(device.getDeviceToken())
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
<finalName>${ems.war.name}-api</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
@@ -35,14 +36,13 @@
|
||||
<artifactId>maven-war-plugin</artifactId>
|
||||
<version>3.4.0</version>
|
||||
<configuration>
|
||||
<warName>${ems.war.name}-api</warName>
|
||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>cz.habarta.typescript-generator</groupId>
|
||||
<artifactId>typescript-generator-maven-plugin</artifactId>
|
||||
<version>3.2.1263</version>
|
||||
<version>2.37.1128</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>generate</id>
|
||||
@@ -54,22 +54,61 @@
|
||||
</executions>
|
||||
<configuration>
|
||||
<jsonLibrary>jackson2</jsonLibrary>
|
||||
<classes>
|
||||
<class>it.integry.ems.response.ServiceRestResponse</class>
|
||||
</classes>
|
||||
<classPatterns>
|
||||
<classPattern>it.integry.ems.product.dto.*</classPattern>
|
||||
<classPattern>it.integry.ems.production.dto.*</classPattern>
|
||||
<classPattern>it.integry.ems.retail.wms.generic.dto.articolo.*</classPattern>
|
||||
<classPattern>it.integry.ems.logistic.conSegna.dto.*</classPattern>
|
||||
<classPattern>it.integry.**.dto.*</classPattern>
|
||||
<classPattern>it.integry.**DTO**</classPattern>
|
||||
<classPattern>it.integry.ems_model.entity.*</classPattern>
|
||||
</classPatterns>
|
||||
<customTypeNaming>
|
||||
<naming>it.integry.ems_model.entity.AtbOfft$StatoOfferta:AtbOfftStatoOfferta</naming>
|
||||
<naming>it.integry.ems_model.entity.VtbOfft$StatoOfferta:VtbOfftStatoOfferta</naming>
|
||||
<naming>it.integry.ems_model.entity.GrlAnagJrept$Tipo:GrlAnagJreptTipo</naming>
|
||||
<naming>it.integry.ems_model.entity.WtbJreptSetup$Tipo:WtbJreptSetupTipo</naming>
|
||||
<naming>it.integry.ems_model.entity.MtbColr$Causale:MtbColrCausale</naming>
|
||||
<naming>it.integry.ems_model.entity.MtbCols$Causale:MtbColsCausale</naming>
|
||||
<naming>it.integry.ems.response.MessageDTO:ResponseMessageDTO</naming>
|
||||
<naming>it.integry.ems.Import.dto.AnomalieDTO$Type:AnomalieDTOType</naming>
|
||||
<naming>it.integry.ems.customizations.production.dto.CaricoLavorazioneDTO:ProdCaricoLavorazioneDTO</naming>
|
||||
<naming>it.integry.ems.document.dto.FilterDTO:DocFilterDTO</naming>
|
||||
<naming>it.integry.ems.document.farm_mes.dto.ImportLog:FarmMesImportLog</naming>
|
||||
<naming>it.integry.ems.order.puddy.dto.ImportLog:PuddyImportLog</naming>
|
||||
<naming>it.integry.ems.dto.EntityHierarchy$Field:EntityHierarchyField</naming>
|
||||
<naming>it.integry.ems.logistic.dto.ClienteDTO:LogisticClienteDTO</naming>
|
||||
<naming>it.integry.ems.order.conquist.dto.ClienteDTO:ConquistClienteDTO</naming>
|
||||
<naming>it.integry.ems.order.conquist.dto.OrdineDTO:ConquistOrdineDTO</naming>
|
||||
<naming>it.integry.ems.order.Import.dto.DialogoJsonDTO$AnagraficaDTO:DialogoJsonDTOAnagraficaDTO</naming>
|
||||
<naming>it.integry.ems.ordikids.dto.AnagraficaDTO:OrdikidsAnagraficaDTO</naming>
|
||||
<naming>it.integry.ems.ordikids.dto.ArticoliDTO:OrdikidsArticoliDTO</naming>
|
||||
<naming>it.integry.ems.retail.wms.ordini_acquisto.dto.OrdiniAcquistoGrigliaDTO$ArticoliDTO:OrdiniAcquistoGrigliaDTOArticoliDTO</naming>
|
||||
<naming>it.integry.ems.retail.wms.ordini_acquisto.dto.OrdiniAcquistoGrigliaDTO$ListiniDTO:OrdiniAcquistiGrigliaDTOListiniDTO</naming>
|
||||
<naming>it.integry.ems.production.dto.AttachmentDTO:ProdAttachmentDTO</naming>
|
||||
<naming>it.integry.ems.retail.pvmRetail.dto.AccettazioneDTO$Ordine:AccettazioneDTOOrdine</naming>
|
||||
<naming>it.integry.ems.retail.wms.lavorazione.dto.RecuperaMaterialiRequestDTO$Ordine:RecuperaMaterialiRequestDTOOrdine</naming>
|
||||
<naming>it.integry.ems.order.Import.dto.DialogoJsonDTO$IndirizzoDTO:DialogoJsonDTOIndirizzoDTO</naming>
|
||||
<naming>it.integry.ems.sync.MultiDBTransaction.Connection:MultiDBTransactionConnection</naming>
|
||||
<naming>it.integry.WooCommerce.dto.local.ArticoloDTO:WooCommerceArticoloDTO</naming>
|
||||
<naming>it.integry.ems.logistic.dto.ArticoloDTO:LogisticArticoloDTO</naming>
|
||||
<naming>it.integry.ems.document.export.dto.DocumentiDialogoDTO$Export:DocumentiDialogoDTOExport</naming>
|
||||
<naming>it.integry.ems.order.Import.dto.OrdiniDialogoDTO$Export:OrdiniDialogoDTOExport</naming>
|
||||
<naming>it.integry.ems.document.export.dto.DocumentiDialogoDTO$Import:DocumentiDialogoDTOImport</naming>
|
||||
<naming>it.integry.ems.order.Import.dto.OrdiniDialogoDTO$Import:OrdiniDialogoDTOImport</naming>
|
||||
<naming>it.integry.ems.logistic.dto.ColloDTO:LogisticColloDTO</naming>
|
||||
<naming>it.integry.ems.response.AttachmentDTO:ResponseAttachmentDTO</naming>
|
||||
<naming>it.integry.ems.system.imports.dto.OrdineDTO:ImportsOrdineDTO</naming>
|
||||
</customTypeNaming>
|
||||
<excludeClasses>
|
||||
<excludeClass>it.integry.ems_model.base.EntityInterface</excludeClass>
|
||||
</excludeClasses>
|
||||
<excludeClassPatterns>
|
||||
<excludeClassPattern>it.integry.ems.contabil.**</excludeClassPattern>
|
||||
<excludeClassPattern>it.integry.ems.order.amazon.**</excludeClassPattern>
|
||||
</excludeClassPatterns>
|
||||
<outputFile>../ts/ems-engine.module.ts</outputFile>
|
||||
<outputKind>module</outputKind>
|
||||
<outputFileType>implementationFile</outputFileType>
|
||||
<customTypeNaming>
|
||||
<naming>it.integry.ems_model.entity.MtbColr$Causale:MtbColrCausale</naming>
|
||||
<naming>it.integry.ems_model.entity.MtbCols$Causale:MtbColsCausale</naming>
|
||||
</customTypeNaming>
|
||||
<generateConstructors>true</generateConstructors>
|
||||
<mapClasses>asClasses</mapClasses>
|
||||
<mapEnum>asEnum</mapEnum>
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.springframework.stereotype.Service;
|
||||
import java.io.File;
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -247,47 +246,72 @@ public class LogService {
|
||||
PreparedStatement ps = connection.prepareStatement(sql)) {
|
||||
int deletedRows = ps.executeUpdate();
|
||||
logger.trace(String.format("Rimossi %d record dal log_db per obsolescenza", deletedRows));
|
||||
|
||||
vacuumDatabase(connection);
|
||||
}
|
||||
}
|
||||
|
||||
@Scheduled(fixedDelay = 5, timeUnit = TimeUnit.MINUTES, zone = "Europe/Rome")
|
||||
public void checkLogSize() throws Exception {
|
||||
String maxSize = settingsModel.getLoggerConfiguration().getDbMaxSize();
|
||||
if (UtilityString.isNullOrEmpty(maxSize)) {
|
||||
maxSize = "1G"; // Valore predefinito
|
||||
}
|
||||
|
||||
// Trova il valore numerico e l'unità di misura
|
||||
String pattern = "([\\d.]+)\\s*(M|MB|G|GB)?";
|
||||
java.util.regex.Pattern r = java.util.regex.Pattern.compile(pattern);
|
||||
java.util.regex.Matcher m = r.matcher(maxSize);
|
||||
|
||||
BigDecimal numericValue = BigDecimal.ONE;
|
||||
String um = "G";
|
||||
if (!UtilityString.isNullOrEmpty(maxSize)) {
|
||||
um = Arrays.stream(maxSize.split("[0-9-.]")).filter(x -> !UtilityString.isNullOrEmpty(x)).findFirst().orElse(null);
|
||||
if (UtilityString.isNullOrEmpty(um)) {
|
||||
numericValue = new BigDecimal(maxSize);
|
||||
um = "G";
|
||||
} else if (!Arrays.asList("M", "MB", "G", "GB").contains(um.toUpperCase().trim()) || maxSize.indexOf(um) == 0) {
|
||||
um = "G";
|
||||
} else {
|
||||
numericValue = new BigDecimal(maxSize.substring(0, maxSize.indexOf(um)));
|
||||
String um = "G"; // Default
|
||||
|
||||
if (m.find()) {
|
||||
numericValue = new BigDecimal(m.group(1));
|
||||
if (m.group(2) != null) {
|
||||
um = m.group(2).toUpperCase();
|
||||
}
|
||||
}
|
||||
|
||||
int pow = 3;
|
||||
if (Arrays.asList("M", "MB").contains(um.toUpperCase().trim())) {
|
||||
pow = 2;
|
||||
}
|
||||
// Calcola il fattore di moltiplicazione in base all'unità
|
||||
int pow = um.startsWith("M") ? 2 : 3;
|
||||
|
||||
// Calcola il massimo numero di byte
|
||||
long maxBytes = numericValue.multiply(BigDecimal.valueOf(1024).pow(pow)).longValue();
|
||||
|
||||
// Verifica la dimensione del file e pulisci se necessario
|
||||
File logDbFile = new File(UtilityDirs.getConfigPath() + "logs.db");
|
||||
if (logDbFile.length() > maxBytes) {
|
||||
if (logDbFile.exists() && logDbFile.length() > maxBytes) {
|
||||
int deletedRows = cleanOlderLogs();
|
||||
logger.trace(String.format("Rimossi %d record dal log_db per eccesso di spazio", deletedRows));
|
||||
logger.trace("Rimossi {} record dal log_db per eccesso di spazio", deletedRows);
|
||||
}
|
||||
}
|
||||
|
||||
private int cleanOlderLogs() throws Exception {
|
||||
int hours = 6;
|
||||
|
||||
//Cancello 6 ore alla volta
|
||||
String sql = String.format("DELETE FROM app_logs\n" +
|
||||
" WHERE entry_date < (SELECT entry_date FROM app_logs ORDER BY entry_date LIMIT 1) + (%d * 3600000)", hours);
|
||||
try (Connection connection = ConnectionFactory.getDatabaseConnection();
|
||||
PreparedStatement ps = connection.prepareStatement(sql)) {
|
||||
return ps.executeUpdate();
|
||||
|
||||
try (Connection connection = ConnectionFactory.getDatabaseConnection()) {
|
||||
PreparedStatement ps = connection.prepareStatement(sql);
|
||||
int deletedRows = ps.executeUpdate();
|
||||
ps.close();
|
||||
|
||||
vacuumDatabase(connection);
|
||||
|
||||
return deletedRows;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void vacuumDatabase(Connection connection) throws Exception {
|
||||
PreparedStatement ps = connection.prepareStatement("pragma wal_checkpoint(full);");
|
||||
ps.execute();
|
||||
ps.close();
|
||||
|
||||
ps = connection.prepareStatement("VACUUM;");
|
||||
ps.execute();
|
||||
ps.close();
|
||||
}
|
||||
}
|
||||
@@ -70,7 +70,7 @@ public class ActivityController {
|
||||
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||
@RequestParam(required = false) String userCreator,
|
||||
@RequestBody List<PlanActivityDTO> body) throws Exception {
|
||||
activityService.planActivities(userCreator, body);
|
||||
activityService.planActivities(body);
|
||||
return ServiceRestResponse.createPositiveResponse();
|
||||
}
|
||||
|
||||
@@ -220,9 +220,10 @@ public class ActivityController {
|
||||
@RequestMapping(value = EmsRestConstants.PATH_ACTIVITY_COMMESSE, method = RequestMethod.GET)
|
||||
public ServiceRestResponse getCommesse(HttpServletRequest request,
|
||||
@RequestParam(CommonConstants.PROFILE_DB) String config,
|
||||
@RequestParam(required = false) String username) throws Exception {
|
||||
@RequestParam(required = false) String username,
|
||||
@RequestParam(required = false) boolean commesseOrfane) throws Exception {
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse(activityService.getCommesse(username));
|
||||
return ServiceRestResponse.createPositiveResponse(activityService.getCommesse(username, commesseOrfane));
|
||||
}
|
||||
|
||||
@PreAuthorize("isAuthenticated()")
|
||||
|
||||
@@ -6,15 +6,22 @@ public class PersoneRifDTO {
|
||||
|
||||
@SqlField("persona_rif")
|
||||
private String personaRif;
|
||||
|
||||
@SqlField("cod_jcom")
|
||||
private String codJcom;
|
||||
|
||||
@SqlField("persona_cod_jcom")
|
||||
private String personaCodJcom;
|
||||
|
||||
@SqlField("e_mail")
|
||||
private String eMail;
|
||||
|
||||
@SqlField("cod_anag")
|
||||
private String codAnag;
|
||||
|
||||
@SqlField("tipo_indirizzo")
|
||||
private String tipoIndirizzo;
|
||||
|
||||
public String getPersonaRif() {
|
||||
return personaRif;
|
||||
}
|
||||
@@ -59,4 +66,13 @@ public class PersoneRifDTO {
|
||||
this.codAnag = codAnag;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getTipoIndirizzo() {
|
||||
return tipoIndirizzo;
|
||||
}
|
||||
|
||||
public PersoneRifDTO setTipoIndirizzo(String tipoIndirizzo) {
|
||||
this.tipoIndirizzo = tipoIndirizzo;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,10 @@ import it.integry.ems.media.MediaVideoService;
|
||||
import it.integry.ems.media.MimeTypesHandler;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.settings.SettingsController;
|
||||
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.user.UtilityUser;
|
||||
import it.integry.ems.user.service.UserService;
|
||||
import it.integry.ems.utility.UtilityEntity;
|
||||
import it.integry.ems_model.base.EntityBase;
|
||||
import it.integry.ems_model.config.EmsRestConstants;
|
||||
@@ -19,6 +21,14 @@ import it.integry.ems_model.entity.*;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.*;
|
||||
import it.integry.firebase.dto.MessageDTO;
|
||||
import it.integry.firebase.dto.NotificationDTO;
|
||||
import it.integry.firebase.dto.android.AndroidConfigDTO;
|
||||
import it.integry.firebase.dto.android.AndroidNotificationDTO;
|
||||
import it.integry.firebase.dto.apns.ApnsConfigDTO;
|
||||
import it.integry.firebase.dto.apns.ApsDTO;
|
||||
import it.integry.firebase.dto.webpush.WebpushConfigDTO;
|
||||
import it.integry.firebase.service.NotificationService;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -64,6 +74,9 @@ public class ActivityService {
|
||||
@Autowired
|
||||
private SetupGest gestSetup;
|
||||
|
||||
@Autowired
|
||||
private NotificationService notificationService;
|
||||
|
||||
|
||||
public StbActivity uploadAttachment(String activityId, MultipartFile... files) throws Exception {
|
||||
List<StbActivityFile> stbActivityFiles = new ArrayList<>();
|
||||
@@ -555,178 +568,215 @@ public class ActivityService {
|
||||
}
|
||||
|
||||
|
||||
public void planActivities(String userCreator, List<PlanActivityDTO> planActivityDTOList) throws Exception {
|
||||
|
||||
public void planActivities(List<PlanActivityDTO> planActivityDTOList) throws Exception {
|
||||
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
||||
List<EntityBase> entityList = new ArrayList<>();
|
||||
|
||||
for (PlanActivityDTO planActivityDTO : planActivityDTOList) {
|
||||
try {
|
||||
for (PlanActivityDTO planActivityDTO : planActivityDTOList) {
|
||||
|
||||
StbActivity parentStbActivity = new StbActivity();
|
||||
parentStbActivity.setOperation(OperationType.SELECT_OBJECT);
|
||||
parentStbActivity.setActivityId(planActivityDTO.getActivityId());
|
||||
StbActivity parentStbActivity = new StbActivity();
|
||||
parentStbActivity.setOperation(OperationType.SELECT_OBJECT);
|
||||
parentStbActivity.setActivityId(planActivityDTO.getActivityId());
|
||||
|
||||
entityProcessor.processEntity(parentStbActivity, multiDBTransactionManager);
|
||||
entityProcessor.processEntity(parentStbActivity, multiDBTransactionManager);
|
||||
|
||||
if (parentStbActivity == null) {
|
||||
throw new Exception("Nessun obiettivo o ticket trovato con l'ID: " + planActivityDTO.getActivityId());
|
||||
}
|
||||
if (parentStbActivity == null) {
|
||||
throw new Exception("Nessun obiettivo o ticket trovato con l'ID: " + planActivityDTO.getActivityId());
|
||||
}
|
||||
|
||||
Date startDateParent = UtilityDate.getWeekStartDate(planActivityDTO.getAgenda().get(0).getData());
|
||||
Date endDateParent = UtilityDate.getWeekEndDate(planActivityDTO.getAgenda().get(planActivityDTO.getAgenda().size() - 1).getData());
|
||||
Date startDateParent = UtilityDate.getWeekStartDate(planActivityDTO.getAgenda().get(0).getData());
|
||||
Date endDateParent = UtilityDate.getWeekEndDate(planActivityDTO.getAgenda().get(planActivityDTO.getAgenda().size() - 1).getData());
|
||||
|
||||
if (parentStbActivity.getEstimatedDate() == null ||
|
||||
(parentStbActivity.getEstimatedDate() != null && parentStbActivity.getEstimatedDate().after(startDateParent))) {
|
||||
parentStbActivity.setEstimatedDate(startDateParent);
|
||||
}
|
||||
if (parentStbActivity.getEstimatedDate() == null ||
|
||||
(parentStbActivity.getEstimatedDate() != null && parentStbActivity.getEstimatedDate().after(startDateParent))) {
|
||||
parentStbActivity.setEstimatedDate(startDateParent);
|
||||
}
|
||||
|
||||
if (parentStbActivity.getEstimatedEnddate() == null ||
|
||||
(parentStbActivity.getEstimatedEnddate() != null && parentStbActivity.getEstimatedEnddate().before(endDateParent))) {
|
||||
parentStbActivity.setEstimatedEnddate(endDateParent);
|
||||
}
|
||||
if (parentStbActivity.getEstimatedEnddate() == null ||
|
||||
(parentStbActivity.getEstimatedEnddate() != null && parentStbActivity.getEstimatedEnddate().before(endDateParent))) {
|
||||
parentStbActivity.setEstimatedEnddate(endDateParent);
|
||||
}
|
||||
|
||||
String sql = "SELECT user_name FROM stb_activity WHERE activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId());
|
||||
String userNameP = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
String sql = "SELECT user_name FROM stb_activity WHERE activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId());
|
||||
String userNameP = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
|
||||
if ((userNameP.equalsIgnoreCase("DEV") ||
|
||||
userNameP.equalsIgnoreCase("T0001") ||
|
||||
userNameP.equalsIgnoreCase("T0003"))) {
|
||||
parentStbActivity.setUserName(planActivityDTO.getUsers().get(0).getUsername());
|
||||
}
|
||||
if ((userNameP.equalsIgnoreCase("DEV") ||
|
||||
userNameP.equalsIgnoreCase("T0001") ||
|
||||
userNameP.equalsIgnoreCase("T0003"))) {
|
||||
parentStbActivity.setUserName(planActivityDTO.getUsers().get(0).getUsername());
|
||||
}
|
||||
|
||||
parentStbActivity.setOperation(OperationType.UPDATE);
|
||||
entityList.add(parentStbActivity);
|
||||
parentStbActivity.setOperation(OperationType.UPDATE);
|
||||
entityList.add(parentStbActivity);
|
||||
|
||||
//Date startDate = UtilityDate.getWeekStartDate(planActivityDTO.getData());
|
||||
if ("S".equalsIgnoreCase(planActivityDTO.getCreaAttivita())) {
|
||||
boolean modifyUser = !planActivityDTO.getUsers().isEmpty();
|
||||
if (modifyUser) parentStbActivity.setUserName(planActivityDTO.getUsers().get(0).getUsername());
|
||||
for (PlanActivityDTO.User user : planActivityDTO.getUsers()) {
|
||||
for (PlanActivityDTO.Agenda agenda : planActivityDTO.getAgenda()) {
|
||||
Date startDate = agenda.getData();
|
||||
|
||||
if ("S".equalsIgnoreCase(planActivityDTO.getCreaAttivita())) {
|
||||
boolean modifyUser = !planActivityDTO.getUsers().isEmpty();
|
||||
if (modifyUser) parentStbActivity.setUserName(planActivityDTO.getUsers().get(0).getUsername());
|
||||
for (PlanActivityDTO.User user : planActivityDTO.getUsers()) {
|
||||
for (PlanActivityDTO.Agenda agenda : planActivityDTO.getAgenda()) {
|
||||
Date startDate = agenda.getData();
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
||||
Date startHour = null;
|
||||
Date endHour = null;
|
||||
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
|
||||
Date startHour = null;
|
||||
Date endHour = null;
|
||||
if (agenda.getOraInizio() != null) {
|
||||
startHour = sdf.parse(agenda.getOraInizio());
|
||||
}
|
||||
if (agenda.getOraFine() != null) {
|
||||
endHour = sdf.parse(agenda.getOraFine());
|
||||
}
|
||||
|
||||
if (agenda.getOraInizio() != null) {
|
||||
startHour = sdf.parse(agenda.getOraInizio());
|
||||
}
|
||||
if (agenda.getOraFine() != null) {
|
||||
endHour = sdf.parse(agenda.getOraFine());
|
||||
}
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(startDate);
|
||||
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTime(startDate);
|
||||
|
||||
if (startHour != null) {
|
||||
Calendar cStartHour = Calendar.getInstance();
|
||||
cStartHour.setTime(startHour);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, cStartHour.get(Calendar.HOUR_OF_DAY));
|
||||
calendar.set(Calendar.MINUTE, cStartHour.get(Calendar.MINUTE));
|
||||
} else if (calendar.get(Calendar.HOUR) == 0) {
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 9);
|
||||
}
|
||||
startDate = calendar.getTime();
|
||||
if (startHour != null) {
|
||||
Calendar cStartHour = Calendar.getInstance();
|
||||
cStartHour.setTime(startHour);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, cStartHour.get(Calendar.HOUR_OF_DAY));
|
||||
calendar.set(Calendar.MINUTE, cStartHour.get(Calendar.MINUTE));
|
||||
} else if (calendar.get(Calendar.HOUR) == 0) {
|
||||
calendar.set(Calendar.HOUR_OF_DAY, 9);
|
||||
}
|
||||
startDate = calendar.getTime();
|
||||
|
||||
|
||||
if (parentStbActivity.getEffectiveDate() == null) {
|
||||
parentStbActivity.setEffectiveTime(startHour);
|
||||
}
|
||||
if (parentStbActivity.getEffectiveDate() == null) {
|
||||
parentStbActivity.setEffectiveTime(startHour);
|
||||
}
|
||||
|
||||
if (endHour != null) {
|
||||
Calendar cEndHour = Calendar.getInstance();
|
||||
cEndHour.setTime(endHour);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, cEndHour.get(Calendar.HOUR_OF_DAY));
|
||||
calendar.set(Calendar.MINUTE, cEndHour.get(Calendar.MINUTE));
|
||||
} else {
|
||||
calendar.add(Calendar.HOUR_OF_DAY, 1);
|
||||
}
|
||||
if (endHour != null) {
|
||||
Calendar cEndHour = Calendar.getInstance();
|
||||
cEndHour.setTime(endHour);
|
||||
calendar.set(Calendar.HOUR_OF_DAY, cEndHour.get(Calendar.HOUR_OF_DAY));
|
||||
calendar.set(Calendar.MINUTE, cEndHour.get(Calendar.MINUTE));
|
||||
} else {
|
||||
calendar.add(Calendar.HOUR_OF_DAY, 1);
|
||||
}
|
||||
|
||||
|
||||
Date endDate = calendar.getTime();
|
||||
Date endDate = calendar.getTime();
|
||||
|
||||
sql =
|
||||
"SELECT activity_id " +
|
||||
" FROM stb_activity " +
|
||||
" WHERE stb_activity.parent_activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId()) + " AND " +
|
||||
"stb_activity.user_name = " + UtilityDB.valueToString(user.getUsername()) + " AND " +
|
||||
"stb_activity.estimated_time = " + UtilityDB.valueDateToString(startDate, CommonConstants.DATETIME_FORMAT_YMD) +
|
||||
(!UtilityString.isNullOrEmpty(planActivityDTO.getDescription())?
|
||||
" AND " +
|
||||
"stb_activity.activity_description = " + UtilityDB.valueToString(planActivityDTO.getDescription()):"");
|
||||
sql =
|
||||
"SELECT activity_id " +
|
||||
" FROM stb_activity " +
|
||||
" WHERE stb_activity.parent_activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId()) + " AND " +
|
||||
"stb_activity.user_name = " + UtilityDB.valueToString(user.getUsername()) + " AND " +
|
||||
"stb_activity.estimated_time = " + UtilityDB.valueDateToString(startDate, CommonConstants.DATETIME_FORMAT_YMD) +
|
||||
(!UtilityString.isNullOrEmpty(planActivityDTO.getDescription()) ?
|
||||
" AND " +
|
||||
"stb_activity.activity_description = " + UtilityDB.valueToString(planActivityDTO.getDescription()) : "");
|
||||
|
||||
String activityId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
String activityId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
|
||||
if (activityId == null) {
|
||||
String query =
|
||||
"SELECT activity_type_id_next, " +
|
||||
"count(*) over (partition by activity_type_id) as conta " +
|
||||
" FROM srl_activity_type " +
|
||||
" WHERE activity_type_id = " + UtilityDB.valueToString(parentStbActivity.getActivityTypeId());
|
||||
if (activityId == null) {
|
||||
String query =
|
||||
"SELECT activity_type_id_next, " +
|
||||
"count(*) over (partition by activity_type_id) as conta " +
|
||||
" FROM srl_activity_type " +
|
||||
" WHERE activity_type_id = " + UtilityDB.valueToString(parentStbActivity.getActivityTypeId());
|
||||
|
||||
Map<String, Object> dati = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), query);
|
||||
Map<String, Object> dati = UtilityDB.executeSimpleQueryOnlyFirstRow(conn, query);
|
||||
|
||||
String activityTypeId = planActivityDTO.getActivityTypeId();
|
||||
if (activityTypeId == null) {
|
||||
if (((Integer) dati.get("conta")).intValue() == 1) {
|
||||
activityTypeId = (String) dati.get("activity_type_id_next");
|
||||
} else if ("OBIETTIVO".equalsIgnoreCase(parentStbActivity.getActivityTypeId())) {
|
||||
activityTypeId = "PROGRAMMAZIONE";
|
||||
} else if ("TICKET".equalsIgnoreCase(parentStbActivity.getActivityTypeId())) {
|
||||
activityTypeId = "TEST,CORREZIONI";
|
||||
String activityTypeId = planActivityDTO.getActivityTypeId();
|
||||
if (activityTypeId == null) {
|
||||
if (((Integer) dati.get("conta")).intValue() == 1) {
|
||||
activityTypeId = (String) dati.get("activity_type_id_next");
|
||||
} else if ("OBIETTIVO".equalsIgnoreCase(parentStbActivity.getActivityTypeId())) {
|
||||
activityTypeId = "PROGRAMMAZIONE";
|
||||
} else if ("TICKET".equalsIgnoreCase(parentStbActivity.getActivityTypeId())) {
|
||||
activityTypeId = "TEST,CORREZIONI";
|
||||
}
|
||||
}
|
||||
|
||||
String description = planActivityDTO.getDescription();
|
||||
if (description == null || description.isEmpty()) {
|
||||
description = parentStbActivity.getActivityDescription();
|
||||
}
|
||||
|
||||
StbActivity newStbActivity = new StbActivity()
|
||||
.setParentActivityId(parentStbActivity.getActivityId())
|
||||
.setUserName(user.getUsername())
|
||||
.setEstimatedTime(startDate)
|
||||
.setEstimatedEndtime(endDate)
|
||||
.setActivityType(activityTypeId)
|
||||
.setFlagTipologia("A")
|
||||
.setActivityDescription(description)
|
||||
.setUserCreator(requestDataDTO.getUsername())
|
||||
.setActivityResultId("DA FARE");
|
||||
|
||||
newStbActivity.setOperation(OperationType.INSERT);
|
||||
entityProcessor.processEntity(newStbActivity, true, multiDBTransactionManager);
|
||||
|
||||
if (!user.getUsername().equalsIgnoreCase(requestDataDTO.getUsername())) {
|
||||
sql = Query.format(
|
||||
"SELECT descrizione\n" +
|
||||
"FROM jtb_comt\n" +
|
||||
"WHERE cod_jcom = %s",
|
||||
newStbActivity.getCodJcom()
|
||||
);
|
||||
String commessa = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
|
||||
sql = Query.format(
|
||||
"SELECT full_name\n" +
|
||||
"FROM stb_user\n" +
|
||||
"WHERE user_name = %s",
|
||||
requestDataDTO.getUsername()
|
||||
);
|
||||
String fullname = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
|
||||
String title = String.format("Nuova attività pianificata su: %s", commessa);
|
||||
String message = String.format("Ti è stata pianificata un'attività da: %s (#%s)", fullname, newStbActivity.getActivityId());
|
||||
String link = String.format("/activity/task/%s", newStbActivity.getActivityId());
|
||||
|
||||
notificationService.sendNotificationToUserDevices(new MessageDTO()
|
||||
.setUserName(user.getUsername())
|
||||
.setAppName(WtbUserDeviceToken.AppName.TASK)
|
||||
.setNotification(new NotificationDTO()
|
||||
.setTitle(title)
|
||||
.setBody(message)
|
||||
)
|
||||
.setApns(new ApnsConfigDTO()
|
||||
.setAps(new ApsDTO()
|
||||
.setSound("default")
|
||||
.setContentAvailable(true)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String description = planActivityDTO.getDescription();
|
||||
if (description == null || description.isEmpty()) {
|
||||
description = parentStbActivity.getActivityDescription();
|
||||
sql =
|
||||
" SELECT activity_result_id " +
|
||||
" FROM stb_activity " +
|
||||
" WHERE stb_activity.activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId());
|
||||
|
||||
String resultId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
if (UtilityString.isNullOrEmpty(resultId)) {
|
||||
parentStbActivity.setActivityResult("DA FARE");
|
||||
parentStbActivity.setOperation(OperationType.UPDATE);
|
||||
entityList.add(parentStbActivity);
|
||||
} else if (UtilityString.equalsIgnoreCase(planActivityDTO.getActivityTypeId(), "TEST NUOVE FUNZIONALITA' SOFWARE")) {
|
||||
parentStbActivity.setActivityResult("TEST");
|
||||
parentStbActivity.setOperation(OperationType.UPDATE);
|
||||
entityList.add(parentStbActivity);
|
||||
|
||||
}
|
||||
|
||||
StbActivity newStbActivity = new StbActivity();
|
||||
newStbActivity.setOperation(OperationType.INSERT);
|
||||
newStbActivity
|
||||
.setParentActivityId(parentStbActivity.getActivityId())
|
||||
.setUserName(user.getUsername())
|
||||
.setEstimatedTime(startDate)
|
||||
.setEstimatedEndtime(endDate)
|
||||
.setActivityType(activityTypeId)
|
||||
.setFlagTipologia("A")
|
||||
.setActivityDescription(description)
|
||||
.setUserCreator(userCreator)
|
||||
.setActivityResultId("DA FARE");
|
||||
|
||||
entityList.add(newStbActivity);
|
||||
|
||||
logger.trace(String.format("Inserita attività #%s all'utente %s", newStbActivity.getActivityId(), user.getUsername()));
|
||||
}
|
||||
|
||||
sql =
|
||||
" SELECT activity_result_id " +
|
||||
" FROM stb_activity " +
|
||||
" WHERE stb_activity.activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId());
|
||||
|
||||
String resultId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
if (UtilityString.isNullOrEmpty(resultId)) {
|
||||
parentStbActivity.setActivityResult("DA FARE");
|
||||
parentStbActivity.setOperation(OperationType.UPDATE);
|
||||
entityList.add(parentStbActivity);
|
||||
} else if (UtilityString.equalsIgnoreCase(planActivityDTO.getActivityTypeId(), "TEST NUOVE FUNZIONALITA' SOFWARE")) {
|
||||
parentStbActivity.setActivityResult("TEST");
|
||||
parentStbActivity.setOperation(OperationType.UPDATE);
|
||||
entityList.add(parentStbActivity);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
if (!entityList.isEmpty()) {
|
||||
entityProcessor.processEntityList(entityList, true);
|
||||
}
|
||||
|
||||
if (!entityList.isEmpty()) {
|
||||
entityProcessor.processEntityList(entityList, true);
|
||||
} catch (Exception e) {
|
||||
multiDBTransactionManager.rollbackAll();
|
||||
throw e;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public ActivityDTO changeCodJcom(String activityId, String codJcom, String parentActivityId) throws Exception {
|
||||
@@ -1211,13 +1261,15 @@ public class ActivityService {
|
||||
return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, ActivityProductsDTO.class);
|
||||
}
|
||||
|
||||
public List<ActivityCommessaDTO> getCommesse(String username) throws Exception {
|
||||
public List<ActivityCommessaDTO> getCommesse(String username, boolean commesseOrfane) throws Exception {
|
||||
String sql = "SELECT cod_jcom, descrizione \n" +
|
||||
"FROM jtb_comt \n" +
|
||||
"WHERE stato_commessa IN ('IN CORSO', 'POST VENDITA', 'TRATTATIVA') \n";
|
||||
|
||||
if (username != null && !username.isEmpty()) {
|
||||
sql += Query.format("AND cod_jflav_tec = %s \n", username);
|
||||
} else if (commesseOrfane) {
|
||||
sql += "AND cod_jflav_tec IS NULL \n";
|
||||
}
|
||||
|
||||
sql += "ORDER BY cod_jcom ASC";
|
||||
@@ -1226,20 +1278,22 @@ public class ActivityService {
|
||||
}
|
||||
|
||||
public void insertOrUpdateActivity(ActivityDTO activity) throws Exception {
|
||||
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
||||
String codAnagPersRif, codAnag;
|
||||
|
||||
if (!UtilityString.isNullOrEmpty(activity.getEmailRichiedente())) {
|
||||
String query = "SELECT vtb_clie_pers_rif.cod_anag FROM vtb_clie_pers_rif, vtb_clie "
|
||||
+ "WHERE vtb_clie_pers_rif.cod_anag = vtb_clie.cod_anag AND "
|
||||
+ "vtb_clie.flag_stato = 'A' AND vtb_clie_pers_rif.e_mail = "
|
||||
+ UtilityDB.valueToString(activity.getEmailRichiedente());
|
||||
|
||||
codAnagPersRif = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
|
||||
codAnagPersRif = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, query);
|
||||
|
||||
if (UtilityString.isNullOrEmpty(codAnagPersRif)) {
|
||||
query = "SELECT cod_anag FROM jtb_comt WHERE cod_jcom = "
|
||||
+ UtilityDB.valueToString(activity.getCommessa());
|
||||
|
||||
codAnag = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
|
||||
codAnag = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, query);
|
||||
|
||||
String domainIntegry = "integry.it";
|
||||
if (!UtilityString.isNullOrEmpty(codAnag) && !activity.getEmailRichiedente().toUpperCase().contains(domainIntegry.toUpperCase())) {
|
||||
@@ -1267,7 +1321,7 @@ public class ActivityService {
|
||||
activity.getFlagTipologia()
|
||||
);
|
||||
|
||||
String codJfas = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
String codJfas = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
|
||||
StbActivity stbActivity = new StbActivity();
|
||||
stbActivity.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||
@@ -1290,7 +1344,72 @@ public class ActivityService {
|
||||
.setParentActivityId(activity.getParentActivityId())
|
||||
.setCodJfas(codJfas);
|
||||
|
||||
entityProcessor.processEntity(stbActivity, true, multiDBTransactionManager);
|
||||
sql = Query.format(
|
||||
"SELECT * FROM stb_activity WHERE activity_id = %s",
|
||||
activity.getIdAttivita()
|
||||
);
|
||||
StbActivity oldActivity = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, sql, StbActivity.class);
|
||||
|
||||
if (oldActivity != null && !oldActivity.getActivityResultId().equalsIgnoreCase(activity.getEsito())) {
|
||||
if (!activity.getEsito().equalsIgnoreCase(EmsRestConstants.NULL)) {
|
||||
sql = Query.format(
|
||||
"SELECT CAST(IIF(flag_invio_notifica = 'N', 0, 1) AS BIT)\n" +
|
||||
"FROM stb_activity_result\n" +
|
||||
"WHERE activity_result_id = %s",
|
||||
activity.getEsito()
|
||||
);
|
||||
boolean sendNotification = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
|
||||
if (sendNotification) {
|
||||
String username = null;
|
||||
|
||||
sql = Query.format(
|
||||
"SELECT cod_jflav_tec\n" +
|
||||
"FROM jtb_comt\n" +
|
||||
"WHERE stato_commessa IN ('IN CORSO', 'POST VENDITA', 'TRATTATIVA')\n" +
|
||||
" AND cod_jcom = %s",
|
||||
activity.getCommessa()
|
||||
);
|
||||
String responsabile = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
|
||||
if (responsabile != null) {
|
||||
username = responsabile;
|
||||
} else {
|
||||
username = oldActivity.getUserCreator();
|
||||
}
|
||||
|
||||
if (username != null || (!username.equalsIgnoreCase(requestDataDTO.getUsername()))) {
|
||||
sql = Query.format(
|
||||
"SELECT full_name\n" +
|
||||
"FROM stb_user\n" +
|
||||
"WHERE user_name = %s",
|
||||
requestDataDTO.getUsername()
|
||||
);
|
||||
String fullname = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||
|
||||
String title = String.format("%s ha aggiornato un'attività", fullname);
|
||||
String message = String.format("L'attività: #%s è stata aggiornata con esito %s.", activity.getIdAttivita(), activity.getEsito());
|
||||
|
||||
notificationService.sendNotificationToUserDevices(new MessageDTO()
|
||||
.setUserName(username)
|
||||
.setAppName(WtbUserDeviceToken.AppName.TASK)
|
||||
.setNotification(new NotificationDTO()
|
||||
.setTitle(title)
|
||||
.setBody(message)
|
||||
)
|
||||
.setApns(new ApnsConfigDTO()
|
||||
.setAps(new ApsDTO()
|
||||
.setSound("default")
|
||||
.setContentAvailable(true)
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
entityProcessor.processEntity(stbActivity, multiDBTransactionManager);
|
||||
}
|
||||
|
||||
public void updateActivityTask(ActivityTaskDTO activity) throws Exception {
|
||||
@@ -1801,14 +1920,14 @@ public class ActivityService {
|
||||
}
|
||||
if (utentiDb == null) {
|
||||
utentiDb = new ArrayList<>();
|
||||
}else{
|
||||
} else {
|
||||
utentiDb.forEach(x -> x.setOperation(OperationType.DELETE));
|
||||
plan.getSrlActivityPlanUser().addAll(utentiDb);
|
||||
}
|
||||
|
||||
for (String username : dto.getUsers()) {
|
||||
SrlActivityPlanUser user = utentiDb.stream().filter(x -> x.getUserName().equalsIgnoreCase(username)).findFirst().orElse(null);
|
||||
if (user == null){
|
||||
if (user == null) {
|
||||
user = new SrlActivityPlanUser();
|
||||
plan.getSrlActivityPlanUser().add(user);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import it.integry.ems.user.service.UserService;
|
||||
import it.integry.ems.utility.service.UtilityService;
|
||||
import it.integry.ems_model.entity.JtbRLavr;
|
||||
import it.integry.ems_model.entity.JtbRLavt;
|
||||
import it.integry.ems_model.entity.WtbUserDeviceToken;
|
||||
import it.integry.ems_model.exception.DataConverterNotFoundException;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
@@ -236,6 +237,7 @@ public class UserWorkHoursService {
|
||||
|
||||
notificationService.sendNotificationToUserDevices(new MessageDTO()
|
||||
.setUserName(user.getUsername())
|
||||
.setAppName(WtbUserDeviceToken.AppName.WINCLOCK)
|
||||
.setNotification(new NotificationDTO()
|
||||
.setTitle("Brav*")
|
||||
.setBody("Hai completato le tue 8 ore di lavoro giornaliere 😁🙌"))
|
||||
|
||||
@@ -422,7 +422,7 @@ public class ContabilImportService {
|
||||
public List<EntityBase> importPartiteScadSinfoOne(String type, String format, ImportRequestDTO requestDTO, List<AnomalieDTO> listAnomalie) throws Exception {
|
||||
Map<String, String> setup = setupGest.getImportSetupSection(multiDBTransactionManager.getPrimaryConnection(), type, format);
|
||||
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO);
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO, Row.class);
|
||||
//Ignoro le prime tre righe di intestazione
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (rowIterator.hasNext()) {
|
||||
|
||||
@@ -73,7 +73,7 @@ public class ToscaSalesService {
|
||||
}
|
||||
|
||||
private List<ToscaOrdineVenditaDTO> parseFile(InputStream inputStream) throws Exception {
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(inputStream, true);
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(inputStream, true, Row.class);
|
||||
List<ToscaOrdineVenditaDTO> ordiniDaImportare = new ArrayList<>();
|
||||
|
||||
List<Long> diacodNotFound = new ArrayList<>();
|
||||
|
||||
@@ -913,7 +913,7 @@ public class DocumentiAcquistoImportService {
|
||||
throw new Exception("File con data antecedente alla data prevista per l'importazione");
|
||||
}
|
||||
}
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO);
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO, Row.class);
|
||||
List<RifOrdApuliaDTO> rifOrdApuliaList = new ArrayList<>();
|
||||
|
||||
while (rowIterator.hasNext()) {
|
||||
|
||||
@@ -652,6 +652,7 @@ public class FarmMesIsaporcService {
|
||||
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
||||
PreparedStatement info;
|
||||
ResultSet res;
|
||||
BigDecimal qtaInProd = BigDecimal.ZERO;
|
||||
|
||||
String codJcom = jsonBody.get("codJcom").asText();
|
||||
String lottoProv = jsonBody.get("lottoProv").asText();
|
||||
@@ -715,11 +716,11 @@ public class FarmMesIsaporcService {
|
||||
res.close();
|
||||
info.close();
|
||||
|
||||
if (dataOrdRistallo == null) {
|
||||
/* if (dataOrdRistallo == null) {
|
||||
throw new Exception("Non è stato possibile individuare l'ordine di RISTALLO " + bandaRistallo);
|
||||
} else if (dataOrdRistallo.after(dataTrasf)) {
|
||||
throw new Exception("La data di trsferimento da RISTALLO alla soccida " + codJcom + " è antecedente alla data del ristallo.");
|
||||
}
|
||||
}*/
|
||||
|
||||
// Aggiornamento documenti di caricno/scarico sostituendo il lotto specificato dall'operatore in fase
|
||||
// di immissione in produzione su FARMMES con il lotto di RISTALLO
|
||||
@@ -769,7 +770,8 @@ public class FarmMesIsaporcService {
|
||||
sql = "select dtb_ord_steps.id_riga, " +
|
||||
"dtb_ord_steps.id_step, " +
|
||||
"dtb_ord_steps.num_fase, " +
|
||||
"dtb_ord_steps.cod_jfas " +
|
||||
"dtb_ord_steps.cod_jfas, " +
|
||||
"dtb_ord_steps.qta_in_prod " +
|
||||
"from dtb_ord_Steps, dtb_ordt " +
|
||||
"where dtb_ord_steps.data_fine is null and " +
|
||||
"dtb_ordt.gestione = 'L' and " +
|
||||
@@ -785,6 +787,7 @@ public class FarmMesIsaporcService {
|
||||
idStep = res.getInt(2);
|
||||
numFase = res.getInt(3);
|
||||
codJfasRow = res.getString(4);
|
||||
qtaInProd = res.getBigDecimal(5);
|
||||
}
|
||||
res.close();
|
||||
info.close();
|
||||
@@ -810,6 +813,11 @@ public class FarmMesIsaporcService {
|
||||
ordSteps.setCodJfas(codJfasRow);
|
||||
ordSteps.setDataIniz(dataTrasf);
|
||||
ordSteps.setNote("TRASFERIMENTO A SOCCIDA " + codJcom);
|
||||
|
||||
if (qtaTrasf.compareTo(qtaInProd) > 0){
|
||||
String exceptionMsg = "La quantità da trasferire (" + UtilityString.BigDecimalToString(qtaTrasf, "###0") + " capi) è superiore ai capi presenti in produzione (" + UtilityString.BigDecimalToString(qtaInProd, "###0") + " capi) è necessario verificare ed eventualmente modificare il documento DDTL di carico.";
|
||||
throw new Exception(exceptionMsg);
|
||||
}
|
||||
ordSteps.setQtaTrasferite(qtaTrasf);
|
||||
ordLav.getDtbOrdSteps().add(ordSteps);
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ import it.integry.ems_model.entity.DtbDoct;
|
||||
import it.integry.ems_model.entity.DtbDoctCambioTipoDoc;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.UtilityDate;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
@@ -35,6 +36,7 @@ public class CambioTipoDocService {
|
||||
private SetupGest setupGest;
|
||||
@Autowired
|
||||
private RequestDataDTO requestDataDTO;
|
||||
|
||||
public List<EntityBase> cambioTipoDoc(String codDtip, List<CambioTipoDocDTO> documenti) throws Exception {
|
||||
List<EntityBase> entityList = new ArrayList<>();
|
||||
final String gestName = "W_ACAMBIO_COD_DTIP_DISP";
|
||||
@@ -46,8 +48,8 @@ public class CambioTipoDocService {
|
||||
if (UtilityString.isNullOrEmpty(emailForLog))
|
||||
throw new Exception(String.format("Email a cui inviare il log non configurata -> %s ->%s -> EMAIL_FOR_LOG", gestName, section));
|
||||
|
||||
if ( pianifica ) {
|
||||
for (CambioTipoDocDTO c: documenti ){
|
||||
if (pianifica) {
|
||||
for (CambioTipoDocDTO c : documenti) {
|
||||
DtbDoctCambioTipoDoc dtbDoctCambioTipoDoc =
|
||||
new DtbDoctCambioTipoDoc()
|
||||
.setCodAnag(c.getCodAnag())
|
||||
@@ -65,7 +67,7 @@ public class CambioTipoDocService {
|
||||
|
||||
if (c.getAllegati() != null && !c.getAllegati().isEmpty()) {
|
||||
for (CambioTipoDocDTO.Allegati a : c.getAllegati()) {
|
||||
if ( dtbDoctCambioTipoDoc.getIdAllegato() == null ) {
|
||||
if (dtbDoctCambioTipoDoc.getIdAllegato() == null) {
|
||||
dtbDoctCambioTipoDoc.setIdAllegato(a.getIdAllegato());
|
||||
entityList.add(dtbDoctCambioTipoDoc);
|
||||
} else {
|
||||
@@ -107,13 +109,19 @@ public class CambioTipoDocService {
|
||||
newDoc.setOperation(OperationType.SELECT_OBJECT);
|
||||
newDoc = entityProcessor.processEntity(newDoc, multiDBTransactionManager);
|
||||
loadRow(newDoc);
|
||||
Date dataCmov = doc.getDataCmov();
|
||||
if (dataCmov.before(UtilityDate.getTodayWithoutTime())) {
|
||||
dataCmov = UtilityDate.getTodayWithoutTime();
|
||||
}
|
||||
|
||||
newDoc
|
||||
.setCodDtip(doc.getCodDtipNew())
|
||||
.setPrevistaFat(null)
|
||||
.setNumDocForn(doc.getNumDocForn());
|
||||
.setCodDtip(doc.getCodDtipNew())
|
||||
.setPrevistaFat(null)
|
||||
.setDataCmov(dataCmov)
|
||||
.setNumDocForn(doc.getNumDocForn());
|
||||
|
||||
newDoc.setOperation(OperationType.INSERT);
|
||||
newDoc.getDtbDocr().stream().forEach(r->r.setOperation(OperationType.INSERT));
|
||||
newDoc.getDtbDocr().stream().forEach(r -> r.setOperation(OperationType.INSERT));
|
||||
if (doc.getAllegati() != null && !doc.getAllegati().isEmpty()) {
|
||||
List<DrlDocAttached> drlDocAttacheds = new ArrayList<>();
|
||||
for (CambioTipoDocDTO.Allegati allegato : doc.getAllegati()) {
|
||||
|
||||
@@ -82,7 +82,9 @@ public class DocumentiDirettiService {
|
||||
|
||||
}
|
||||
//controllo packingList documento per eventuali trasferimenti
|
||||
checkUDSForTransfer(dtbDoct, entityList, isInsert);
|
||||
if (dtbDoct.getGestione().equalsIgnoreCase("V")) {
|
||||
checkUDSForTransfer(dtbDoct, entityList, isInsert);
|
||||
}
|
||||
|
||||
if (UtilityString.equalsIgnoreCase((String) datiTipoDoc.get("gestione"), "A")) {
|
||||
if (!isInsert && dtbDoct.getOldPk() != null) {
|
||||
|
||||
@@ -2,7 +2,6 @@ package it.integry.ems.logistic.service;
|
||||
|
||||
import it.integry.ems.Import.dto.AnomalieDTO;
|
||||
import it.integry.ems.Import.dto.ImportRequestDTO;
|
||||
import it.integry.ems.logistic.dto.sm2.FiltroDistribuzioneColloDTO;
|
||||
import it.integry.ems.retail.wms.accettazione.service.WMSAccettazioneService;
|
||||
import it.integry.ems.retail.wms.dto.CloseUDCRequestDTO;
|
||||
import it.integry.ems.retail.wms.dto.CreateUDCRequestDTO;
|
||||
@@ -12,19 +11,17 @@ import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.base.EntityBase;
|
||||
import it.integry.ems_model.entity.DtbOrdr;
|
||||
import it.integry.ems_model.entity.MtbColr;
|
||||
import it.integry.ems_model.entity.MtbColt;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.*;
|
||||
import org.apache.poi.ss.usermodel.Cell;
|
||||
import org.apache.poi.ss.usermodel.CellType;
|
||||
import org.apache.poi.ss.usermodel.DateUtil;
|
||||
import org.apache.poi.ss.usermodel.Row;
|
||||
import org.apache.poi.ss.usermodel.*;
|
||||
import org.bouncycastle.crypto.engines.BlowfishEngine;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -54,93 +51,108 @@ public class ColliEviosysImportService {
|
||||
|
||||
String codAnag = setup.get("COD_ANAG");
|
||||
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO);
|
||||
Iterator<Sheet> sheetIterator = UtilityExcel.readXlsxFile(requestDTO, Sheet.class);
|
||||
|
||||
String codMart = null;
|
||||
boolean hasHeaderPassed = false;
|
||||
while (sheetIterator.hasNext()) {
|
||||
Sheet sheet = sheetIterator.next();
|
||||
Iterator<Row> rowIterator = UtilityExcel.getRowIterator(sheet, true);
|
||||
|
||||
while (rowIterator.hasNext()) {
|
||||
Row row = rowIterator.next();
|
||||
String codMart = null;
|
||||
boolean hasHeaderPassed = false;
|
||||
|
||||
if (!hasHeaderPassed) {
|
||||
if (codMart == null) {
|
||||
codMart = findCodMart(row);
|
||||
} else {
|
||||
hasHeaderPassed = UtilityExcel.getCellAsString(row, 0, false).equalsIgnoreCase("origine");
|
||||
}
|
||||
} else {
|
||||
List<Object> rowData =
|
||||
stream(((Iterable<Cell>) row::cellIterator).spliterator(), false)
|
||||
.map(x -> {
|
||||
Object s = cellToString(x);
|
||||
while (rowIterator.hasNext()) {
|
||||
Row row = rowIterator.next();
|
||||
|
||||
if (!UtilityString.isNullOrEmpty(s)) {
|
||||
return s;
|
||||
}
|
||||
|
||||
return null;
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (rowData.size() >= 7) {
|
||||
String barcodeUl = (String) rowData.get(2);
|
||||
String lotto = (String) rowData.get(3);
|
||||
String qta = (String) rowData.get(6);
|
||||
|
||||
barcodeUl = barcodeUl.replace("*", "");
|
||||
|
||||
if (barcodeUl.length() > 18) {
|
||||
barcodeUl = barcodeUl.substring(2);
|
||||
if (!hasHeaderPassed) {
|
||||
if (codMart == null) {
|
||||
codMart = findCodMart(row);
|
||||
} else {
|
||||
hasHeaderPassed = UtilityExcel.getCellAsString(row, 0, false).equalsIgnoreCase("origine");
|
||||
}
|
||||
} else {
|
||||
List<Object> rowData =
|
||||
stream(((Iterable<Cell>) row::cellIterator).spliterator(), false)
|
||||
.map(x -> {
|
||||
Object s = cellToString(x);
|
||||
|
||||
String sql = Query.format(
|
||||
"WITH getOrder AS (SELECT dtb_ordr.num_ord,\n" +
|
||||
" dtb_ordr.data_ord,\n" +
|
||||
" dtb_ordr.riga_ord,\n" +
|
||||
" dtb_ordr.cod_mdep,\n" +
|
||||
" DENSE_RANK() OVER (ORDER BY data_cons DESC, dtb_ordt.data_ord, dtb_ordt.num_ord) AS dr\n" +
|
||||
" FROM dtb_ordt\n" +
|
||||
" INNER JOIN dtb_ordr ON dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
|
||||
" AND dtb_ordr.data_ord = dtb_ordt.data_ord\n" +
|
||||
" AND dtb_ordt.gestione = dtb_ordr.gestione\n" +
|
||||
" WHERE cod_anag = %s\n" +
|
||||
" AND dtb_ordt.gestione = 'A'\n" +
|
||||
" AND flag_annulla = 'N'\n" +
|
||||
" AND flag_evaso = 'I'\n" +
|
||||
" AND cod_mart = %s\n" +
|
||||
" AND data_cons <= %s)\n" +
|
||||
"SELECT *\n" +
|
||||
"FROM getOrder\n" +
|
||||
"WHERE dr = 1",
|
||||
codAnag, codMart, new Date()
|
||||
);
|
||||
DtbOrdr dtbOrdr = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, sql, DtbOrdr.class);
|
||||
if (!UtilityString.isNullOrEmpty(s)) {
|
||||
return s;
|
||||
}
|
||||
|
||||
MtbColt udc = wmsAccettazioneService.createUDC(
|
||||
new CreateUDCRequestDTO()
|
||||
.setCodMdep(dtbOrdr.getCodMdep())
|
||||
.setCodAnag(codAnag)
|
||||
.setBarcodeUl(barcodeUl)
|
||||
.setDataCollo(LocalDate.now())
|
||||
);
|
||||
return null;
|
||||
})
|
||||
.filter(Objects::nonNull)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
udc.getMtbCols().forEach(x -> x.setOperation(OperationType.NO_OP));
|
||||
if (rowData.size() >= 7) {
|
||||
String barcodeUl = (String) rowData.get(2);
|
||||
String lotto = (String) rowData.get(3);
|
||||
BigDecimal qta = UtilityString.stringToBigDecimal(
|
||||
rowData.get(6)
|
||||
.toString()
|
||||
.replace(".", "")
|
||||
);
|
||||
|
||||
wmsAccettazioneService.insertUDCRow(
|
||||
new InsertUDCRowRequestDTO()
|
||||
.setTargetMtbColt(udc)
|
||||
.setCodMart(codMart)
|
||||
.setPartitaMag(lotto)
|
||||
.setQtaTot(UtilityString.stringToBigDecimal(qta))
|
||||
.setDataOrd(UtilityLocalDate.localDateFromDate(dtbOrdr.getDataOrd()))
|
||||
.setNumOrd(dtbOrdr.getNumOrd())
|
||||
.setRigaOrd(dtbOrdr.getRigaOrd())
|
||||
);
|
||||
barcodeUl = barcodeUl.replace("*", "");
|
||||
|
||||
wmsAccettazioneService.closeUDC(new CloseUDCRequestDTO().setMtbColt(udc));
|
||||
if (barcodeUl.length() > 18) {
|
||||
barcodeUl = barcodeUl.substring(2);
|
||||
}
|
||||
|
||||
entityBases.add(udc);
|
||||
String sql = Query.format(
|
||||
"WITH getOrder AS (SELECT dtb_ordr.num_ord,\n" +
|
||||
" dtb_ordr.data_ord,\n" +
|
||||
" dtb_ordr.riga_ord,\n" +
|
||||
" dtb_ordr.cod_mdep,\n" +
|
||||
" DENSE_RANK() OVER (ORDER BY data_cons DESC, dtb_ordt.data_ord, dtb_ordt.num_ord) AS dr\n" +
|
||||
" FROM dtb_ordt\n" +
|
||||
" INNER JOIN dtb_ordr ON dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
|
||||
" AND dtb_ordr.data_ord = dtb_ordt.data_ord\n" +
|
||||
" AND dtb_ordt.gestione = dtb_ordr.gestione\n" +
|
||||
" WHERE cod_anag = %s\n" +
|
||||
" AND dtb_ordt.gestione = 'A'\n" +
|
||||
" AND flag_annulla = 'N'\n" +
|
||||
" AND flag_evaso = 'I'\n" +
|
||||
" AND cod_mart = %s\n" +
|
||||
" AND data_cons <= %s)\n" +
|
||||
"SELECT *\n" +
|
||||
"FROM getOrder\n" +
|
||||
"WHERE dr = 1",
|
||||
codAnag, codMart, new Date()
|
||||
);
|
||||
DtbOrdr dtbOrdr = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, sql, DtbOrdr.class);
|
||||
|
||||
if (dtbOrdr == null) {
|
||||
throw new Exception("Nessun ordine trovato per il codice anagrafica: " + codAnag + " e codice articolo: " + codMart);
|
||||
} else if (dtbOrdr.getCodMdep() == null) {
|
||||
throw new Exception("Nessun deposito trovato per l'ordine: " + dtbOrdr.getNumOrd() + " del cliente: " + codAnag);
|
||||
}
|
||||
|
||||
MtbColt udc = wmsAccettazioneService.createUDC(
|
||||
new CreateUDCRequestDTO()
|
||||
.setCodMdep(dtbOrdr.getCodMdep())
|
||||
.setCodAnag(codAnag)
|
||||
.setBarcodeUl(barcodeUl)
|
||||
.setDataCollo(LocalDate.now())
|
||||
);
|
||||
|
||||
udc.getMtbCols().forEach(x -> x.setOperation(OperationType.NO_OP));
|
||||
|
||||
wmsAccettazioneService.insertUDCRow(
|
||||
new InsertUDCRowRequestDTO()
|
||||
.setTargetMtbColt(udc)
|
||||
.setCodMart(codMart)
|
||||
.setPartitaMag(lotto)
|
||||
.setQtaTot(qta)
|
||||
.setDataOrd(UtilityLocalDate.localDateFromDate(dtbOrdr.getDataOrd()))
|
||||
.setNumOrd(dtbOrdr.getNumOrd())
|
||||
.setRigaOrd(dtbOrdr.getRigaOrd())
|
||||
);
|
||||
|
||||
wmsAccettazioneService.closeUDC(new CloseUDCRequestDTO().setMtbColt(udc));
|
||||
|
||||
entityBases.add(udc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,9 +15,11 @@ import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@@ -95,4 +97,28 @@ public class CrmController {
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@RequestMapping(value = "getActivityCrm", method = RequestMethod.GET)
|
||||
public ServiceRestResponse getActivity(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
|
||||
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dateFilter) throws Exception {
|
||||
return ServiceRestResponse.createPositiveResponse(crmService.getActivity(dateFilter));
|
||||
}
|
||||
|
||||
@RequestMapping(value = "getCommesseCrm", method = RequestMethod.GET)
|
||||
public ServiceRestResponse getCommesse(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
|
||||
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dateFilter) throws Exception {
|
||||
return ServiceRestResponse.createPositiveResponse(crmService.getCommesse(dateFilter));
|
||||
}
|
||||
|
||||
@RequestMapping(value = "getProspectCrm", method = RequestMethod.GET)
|
||||
public ServiceRestResponse getProspect(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
|
||||
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dateFilter) throws Exception {
|
||||
return ServiceRestResponse.createPositiveResponse(crmService.getProspect(dateFilter));
|
||||
}
|
||||
|
||||
@RequestMapping(value = "getAnagClieCrm", method = RequestMethod.GET)
|
||||
public ServiceRestResponse getAnagClie(@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
|
||||
@RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate dateFilter) throws Exception {
|
||||
return ServiceRestResponse.createPositiveResponse(crmService.getAnagClie(dateFilter));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,309 @@
|
||||
package it.integry.ems.order.crm.dto;
|
||||
|
||||
import it.integry.ems_model.annotation.SqlField;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
public class AnagClieDTO {
|
||||
|
||||
@SqlField(value = "cod_anag")
|
||||
private String codAnag;
|
||||
|
||||
@SqlField(value = "rag_soc")
|
||||
private String ragSoc;
|
||||
|
||||
@SqlField(value = "cod_vtip")
|
||||
private String CodVtip;
|
||||
|
||||
@SqlField(value = "cod_vage")
|
||||
private String CodVage;
|
||||
|
||||
@SqlField(value = "indirizzo")
|
||||
private String indirizzo;
|
||||
|
||||
@SqlField(value = "cap")
|
||||
private String cap;
|
||||
|
||||
@SqlField(value = "citta")
|
||||
private String citta;
|
||||
|
||||
@SqlField(value = "prov")
|
||||
private String prov;
|
||||
|
||||
@SqlField(value = "nazione")
|
||||
private String nazione;
|
||||
|
||||
@SqlField(value = "telefono")
|
||||
private String telefono;
|
||||
|
||||
@SqlField(value = "fax")
|
||||
private String fax;
|
||||
|
||||
@SqlField(value = "part_iva")
|
||||
private String partIva;
|
||||
|
||||
@SqlField(value = "cod_fisc" )
|
||||
private String codFisc;
|
||||
|
||||
@SqlField(value = "note" )
|
||||
private String note;
|
||||
|
||||
@SqlField(value = "persona_rif")
|
||||
private String personaRif;
|
||||
|
||||
@SqlField(value = "e_mail")
|
||||
private String eMail;
|
||||
|
||||
@SqlField(value = "e_mail_pec")
|
||||
private String eMailPec;
|
||||
|
||||
@SqlField(value = "nome")
|
||||
private String nome;
|
||||
|
||||
@SqlField(value = "data_ins")
|
||||
private Date dataIns;
|
||||
|
||||
@SqlField(value = "num_cell")
|
||||
private String numCell;
|
||||
|
||||
@SqlField(value = "cognome")
|
||||
private String cognome;
|
||||
|
||||
@SqlField(value = "diacod")
|
||||
private String diacod;
|
||||
|
||||
@SqlField(value = "lat")
|
||||
private BigDecimal lat;
|
||||
|
||||
@SqlField(value = "lng")
|
||||
private BigDecimal lng;
|
||||
|
||||
@SqlField(value = "data_mod")
|
||||
private Date dataMod;
|
||||
|
||||
public String getCodAnag() {
|
||||
return codAnag;
|
||||
}
|
||||
|
||||
public AnagClieDTO setCodAnag(String codAnag) {
|
||||
this.codAnag = codAnag;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getRagSoc() {
|
||||
return ragSoc;
|
||||
}
|
||||
|
||||
public AnagClieDTO setRagSoc(String ragSoc) {
|
||||
this.ragSoc = ragSoc;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodVtip() {
|
||||
return CodVtip;
|
||||
}
|
||||
|
||||
public AnagClieDTO setCodVtip(String codVtip) {
|
||||
CodVtip = codVtip;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodVage() {
|
||||
return CodVage;
|
||||
}
|
||||
|
||||
public AnagClieDTO setCodVage(String codVage) {
|
||||
CodVage = codVage;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getIndirizzo() {
|
||||
return indirizzo;
|
||||
}
|
||||
|
||||
public AnagClieDTO setIndirizzo(String indirizzo) {
|
||||
this.indirizzo = indirizzo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCap() {
|
||||
return cap;
|
||||
}
|
||||
|
||||
public AnagClieDTO setCap(String cap) {
|
||||
this.cap = cap;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCitta() {
|
||||
return citta;
|
||||
}
|
||||
|
||||
public AnagClieDTO setCitta(String citta) {
|
||||
this.citta = citta;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getProv() {
|
||||
return prov;
|
||||
}
|
||||
|
||||
public AnagClieDTO setProv(String prov) {
|
||||
this.prov = prov;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getNazione() {
|
||||
return nazione;
|
||||
}
|
||||
|
||||
public AnagClieDTO setNazione(String nazione) {
|
||||
this.nazione = nazione;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getTelefono() {
|
||||
return telefono;
|
||||
}
|
||||
|
||||
public AnagClieDTO setTelefono(String telefono) {
|
||||
this.telefono = telefono;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getFax() {
|
||||
return fax;
|
||||
}
|
||||
|
||||
public AnagClieDTO setFax(String fax) {
|
||||
this.fax = fax;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getPartIva() {
|
||||
return partIva;
|
||||
}
|
||||
|
||||
public AnagClieDTO setPartIva(String partIva) {
|
||||
this.partIva = partIva;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodFisc() {
|
||||
return codFisc;
|
||||
}
|
||||
|
||||
public AnagClieDTO setCodFisc(String codFisc) {
|
||||
this.codFisc = codFisc;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getNote() {
|
||||
return note;
|
||||
}
|
||||
|
||||
public AnagClieDTO setNote(String note) {
|
||||
this.note = note;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getPersonaRif() {
|
||||
return personaRif;
|
||||
}
|
||||
|
||||
public AnagClieDTO setPersonaRif(String personaRif) {
|
||||
this.personaRif = personaRif;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String geteMail() {
|
||||
return eMail;
|
||||
}
|
||||
|
||||
public AnagClieDTO seteMail(String eMail) {
|
||||
this.eMail = eMail;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String geteMailPec() {
|
||||
return eMailPec;
|
||||
}
|
||||
|
||||
public AnagClieDTO seteMailPec(String eMailPec) {
|
||||
this.eMailPec = eMailPec;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getNome() {
|
||||
return nome;
|
||||
}
|
||||
|
||||
public AnagClieDTO setNome(String nome) {
|
||||
this.nome = nome;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Date getDataIns() {
|
||||
return dataIns;
|
||||
}
|
||||
|
||||
public AnagClieDTO setDataIns(Date dataIns) {
|
||||
this.dataIns = dataIns;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getNumCell() {
|
||||
return numCell;
|
||||
}
|
||||
|
||||
public AnagClieDTO setNumCell(String numCell) {
|
||||
this.numCell = numCell;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCognome() {
|
||||
return cognome;
|
||||
}
|
||||
|
||||
public AnagClieDTO setCognome(String cognome) {
|
||||
this.cognome = cognome;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getDiacod() {
|
||||
return diacod;
|
||||
}
|
||||
|
||||
public AnagClieDTO setDiacod(String diacod) {
|
||||
this.diacod = diacod;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BigDecimal getLat() {
|
||||
return lat;
|
||||
}
|
||||
|
||||
public AnagClieDTO setLat(BigDecimal lat) {
|
||||
this.lat = lat;
|
||||
return this;
|
||||
}
|
||||
|
||||
public BigDecimal getLng() {
|
||||
return lng;
|
||||
}
|
||||
|
||||
public AnagClieDTO setLng(BigDecimal lng) {
|
||||
this.lng = lng;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Date getDataMod() {
|
||||
return dataMod;
|
||||
}
|
||||
|
||||
public AnagClieDTO setDataMod(Date dataMod) {
|
||||
this.dataMod = dataMod;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package it.integry.ems.order.crm.dto;
|
||||
|
||||
import it.integry.ems_model.entity.PtbPros;
|
||||
import it.integry.ems_model.entity.PtbProsRif;
|
||||
import it.integry.ems_model.entity.VtbCliePersRif;
|
||||
import it.integry.ems_model.entity.VtbDest;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class CRMSyncResponseDTO {
|
||||
|
||||
private List<AnagClieDTO> anagClie;
|
||||
private List<VtbDest> vtbDest;
|
||||
private List<VtbCliePersRif> vtbCliePersRif;
|
||||
private List<PtbPros> ptbPros;
|
||||
private List<PtbProsRif> ptbProsRif;
|
||||
|
||||
public List<AnagClieDTO> getAnagClie() {
|
||||
return anagClie;
|
||||
}
|
||||
|
||||
public CRMSyncResponseDTO setAnagClie(List<AnagClieDTO> anagClie) {
|
||||
this.anagClie = anagClie;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<VtbDest> getVtbDest() {
|
||||
return vtbDest;
|
||||
}
|
||||
|
||||
public CRMSyncResponseDTO setVtbDest(List<VtbDest> vtbDest) {
|
||||
this.vtbDest = vtbDest;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<VtbCliePersRif> getVtbCliePersRif() {
|
||||
return vtbCliePersRif;
|
||||
}
|
||||
|
||||
public CRMSyncResponseDTO setVtbCliePersRif(List<VtbCliePersRif> vtbCliePersRif) {
|
||||
this.vtbCliePersRif = vtbCliePersRif;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<PtbPros> getPtbPros() {
|
||||
return ptbPros;
|
||||
}
|
||||
|
||||
public CRMSyncResponseDTO setPtbPros(List<PtbPros> ptbPros) {
|
||||
this.ptbPros = ptbPros;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<PtbProsRif> getPtbProsRif() {
|
||||
return ptbProsRif;
|
||||
}
|
||||
|
||||
public CRMSyncResponseDTO setPtbProsRif(List<PtbProsRif> ptbProsRif) {
|
||||
this.ptbProsRif = ptbProsRif;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@ import it.integry.ems_model.db.ResultSetMapper;
|
||||
import it.integry.ems_model.entity.*;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.Query;
|
||||
import it.integry.ems_model.utility.UtilityDB;
|
||||
import it.integry.ems_model.utility.UtilityDate;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
@@ -30,6 +31,7 @@ import java.math.BigDecimal;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
@@ -1351,4 +1353,114 @@ public class CrmService {
|
||||
}
|
||||
return entities;
|
||||
}
|
||||
|
||||
public List<StbActivity> getActivity(LocalDate dateFilter) throws Exception {
|
||||
String sql = Query.format("SELECT *\n" +
|
||||
"FROM stb_activity\n" +
|
||||
"WHERE ora_mod_act >= %s\n" +
|
||||
" OR data_ins_act >= %s",
|
||||
dateFilter, dateFilter
|
||||
);
|
||||
|
||||
return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, StbActivity.class);
|
||||
}
|
||||
|
||||
public List<JtbComt> getCommesse(LocalDate dateFilter) throws Exception {
|
||||
if (dateFilter != null) return null;
|
||||
|
||||
String sql = "SELECT * FROM jtb_comt";
|
||||
|
||||
return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, JtbComt.class);
|
||||
}
|
||||
|
||||
public CRMSyncResponseDTO getProspect(LocalDate dateFilter) throws Exception {
|
||||
CRMSyncResponseDTO taskSyncResponse = new CRMSyncResponseDTO();
|
||||
|
||||
String sql = "SELECT * FROM ptb_pros WHERE cod_anag IS NULL";
|
||||
if (dateFilter != null){
|
||||
sql += " WHERE data_ins >= " + UtilityDB.valueToString(dateFilter);
|
||||
}
|
||||
taskSyncResponse.setPtbPros(
|
||||
UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, PtbPros.class)
|
||||
);
|
||||
|
||||
if (dateFilter == null){
|
||||
sql = "SELECT *\n" +
|
||||
"FROM ptb_pros_rif\n" +
|
||||
"WHERE EXISTS(SELECT * FROM ptb_pros WHERE ptb_pros.cod_anag IS NULL AND ptb_pros.cod_ppro = ptb_pros_rif.cod_ppro)";
|
||||
} else {
|
||||
sql = Query.format(
|
||||
"SELECT *\n" +
|
||||
"FROM ptb_pros_rif\n" +
|
||||
"WHERE EXISTS(SELECT * FROM ptb_pros WHERE ptb_pros.cod_anag IS NULL\n" +
|
||||
" AND data_ins >= %s\n" +
|
||||
" AND ptb_pros.cod_ppro = ptb_pros_rif.cod_ppro)",
|
||||
dateFilter
|
||||
);
|
||||
}
|
||||
|
||||
taskSyncResponse.setPtbProsRif(
|
||||
UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, PtbProsRif.class)
|
||||
);
|
||||
|
||||
return taskSyncResponse;
|
||||
}
|
||||
|
||||
public CRMSyncResponseDTO getAnagClie(LocalDate dateFilter) throws Exception {
|
||||
CRMSyncResponseDTO taskSyncResponse = new CRMSyncResponseDTO();
|
||||
|
||||
String sql = "SELECT gtb_anag.cod_anag,\n" +
|
||||
" vtb_clie.cod_vtip,\n" +
|
||||
" vtb_clie.cod_vage,\n" +
|
||||
" rag_soc,\n" +
|
||||
" indirizzo,\n" +
|
||||
" cap,\n" +
|
||||
" citta,\n" +
|
||||
" prov,\n" +
|
||||
" nazione,\n" +
|
||||
" telefono,\n" +
|
||||
" fax,\n" +
|
||||
" part_iva,\n" +
|
||||
" cod_fisc,\n" +
|
||||
" gtb_anag.note,\n" +
|
||||
" persona_rif,\n" +
|
||||
" e_mail,\n" +
|
||||
" nome,\n" +
|
||||
" data_ins,\n" +
|
||||
" num_cell,\n" +
|
||||
" e_mail_pec,\n" +
|
||||
" cognome,\n" +
|
||||
" diacod,\n" +
|
||||
" lat,\n" +
|
||||
" lng,\n" +
|
||||
" data_mod\n" +
|
||||
"FROM gtb_anag\n" +
|
||||
" INNER JOIN vtb_clie ON gtb_anag.cod_anag = vtb_clie.cod_anag";
|
||||
|
||||
if (dateFilter != null){
|
||||
sql += " WHERE data_ins >= " + UtilityDB.valueToString(dateFilter) + " OR data_mod >= " + UtilityDB.valueToString(dateFilter);
|
||||
}
|
||||
|
||||
taskSyncResponse.setAnagClie(
|
||||
UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, AnagClieDTO.class)
|
||||
);
|
||||
|
||||
if (dateFilter == null){
|
||||
sql = "SELECT *\n" +
|
||||
"FROM vtb_dest\n" +
|
||||
"WHERE EXISTS(SELECT * FROM vtb_clie WHERE vtb_clie.cod_anag = vtb_dest.cod_anag)";
|
||||
taskSyncResponse.setVtbDest(
|
||||
UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, VtbDest.class)
|
||||
);
|
||||
|
||||
sql = "SELECT *\n" +
|
||||
"FROM vtb_clie_pers_rif\n" +
|
||||
"WHERE EXISTS(SELECT * FROM vtb_clie WHERE vtb_clie.cod_anag = vtb_clie_pers_rif.cod_anag)";
|
||||
taskSyncResponse.setVtbCliePersRif(
|
||||
UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, VtbCliePersRif.class)
|
||||
);
|
||||
}
|
||||
|
||||
return taskSyncResponse;
|
||||
}
|
||||
}
|
||||
@@ -40,7 +40,7 @@ public class ImportGrigliaAcquistoService {
|
||||
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
||||
Map<String, String> setup = setupGest.getImportSetupSection(conn, type, format);
|
||||
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO);
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO, Row.class);
|
||||
|
||||
List<AtbGriglieArt> atbGriglieArtList = new ArrayList<>();
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ public class ImportGrigliaVenditaService {
|
||||
List<VtbGriglia> vtbGrigliaList = new ArrayList<>();
|
||||
HashMap<String, List<String>> hashMap = new HashMap<>();
|
||||
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO);
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO, Row.class);
|
||||
while (rowIterator.hasNext()) {
|
||||
Row row = rowIterator.next();
|
||||
String codGriglia = UtilityExcel.getCellAsString(row, 0, true);
|
||||
|
||||
@@ -316,7 +316,7 @@ public class ImportListiniVenditaService {
|
||||
if (UtilityString.isNullOrEmpty(fileName))
|
||||
fileName = setup.get("FILE_FILTER");
|
||||
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO);
|
||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO, Row.class);
|
||||
|
||||
while (rowIterator.hasNext()) {
|
||||
Row row = rowIterator.next();
|
||||
|
||||
@@ -0,0 +1,83 @@
|
||||
package it.integry.ems.product.importaz.service;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
|
||||
public class RipianificaOrdineLavRequestDTO {
|
||||
private String gestione;
|
||||
|
||||
private Date dataOrd;
|
||||
|
||||
private Integer numOrd;
|
||||
|
||||
private Integer idLotto;
|
||||
|
||||
private String codJfasOld;
|
||||
|
||||
private String codJfasNew;
|
||||
|
||||
private Date dataPianificazione;
|
||||
|
||||
public String getGestione() {
|
||||
return gestione;
|
||||
}
|
||||
|
||||
public RipianificaOrdineLavRequestDTO setGestione(String gestione) {
|
||||
this.gestione = gestione;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Date getDataOrd() {
|
||||
return dataOrd;
|
||||
}
|
||||
|
||||
public RipianificaOrdineLavRequestDTO setDataOrd(Date dataOrd) {
|
||||
this.dataOrd = dataOrd;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Integer getNumOrd() {
|
||||
return numOrd;
|
||||
}
|
||||
|
||||
public RipianificaOrdineLavRequestDTO setNumOrd(Integer numOrd) {
|
||||
this.numOrd = numOrd;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Integer getIdLotto() {
|
||||
return idLotto;
|
||||
}
|
||||
|
||||
public RipianificaOrdineLavRequestDTO setIdLotto(Integer idLotto) {
|
||||
this.idLotto = idLotto;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodJfasOld() {
|
||||
return codJfasOld;
|
||||
}
|
||||
|
||||
public RipianificaOrdineLavRequestDTO setCodJfasOld(String codJfasOld) {
|
||||
this.codJfasOld = codJfasOld;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getCodJfasNew() {
|
||||
return codJfasNew;
|
||||
}
|
||||
|
||||
public RipianificaOrdineLavRequestDTO setCodJfasNew(String codJfasNew) {
|
||||
this.codJfasNew = codJfasNew;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Date getDataPianificazione() {
|
||||
return dataPianificazione;
|
||||
}
|
||||
|
||||
public RipianificaOrdineLavRequestDTO setDataPianificazione(Date dataPianificazione) {
|
||||
this.dataPianificazione = dataPianificazione;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.JsonNode;
|
||||
import it.integry.common.var.CommonConstants;
|
||||
import it.integry.ems.document.dto.ChiusuraLavorazioneDTO;
|
||||
import it.integry.ems.javabeans.RequestDataDTO;
|
||||
import it.integry.ems.product.importaz.service.RipianificaOrdineLavRequestDTO;
|
||||
import it.integry.ems.production.dto.*;
|
||||
import it.integry.ems.production.service.MesProductionServiceV2;
|
||||
import it.integry.ems.production.service.ProductionLineService;
|
||||
@@ -15,6 +16,7 @@ import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
|
||||
import it.integry.ems.service.production.ProductionOrderDataHandlerService;
|
||||
import it.integry.ems.status.ServiceChecker;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems_model.business_logic.GeneraOrdLav;
|
||||
import it.integry.ems_model.config.EmsRestConstants;
|
||||
import it.integry.ems_model.entity.MtbColt;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
@@ -474,6 +476,13 @@ public class MesProductionControllerV2 {
|
||||
ServiceRestResponse reopenOrdineLav(@RequestBody ReopenOrdineLavRequestDTO dto) throws Exception {
|
||||
productionOrdersLifecycleService.reopenOrdineLav(dto);
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse();
|
||||
}
|
||||
@PostMapping(value = "ordine/ripianifica")
|
||||
public @ResponseBody
|
||||
ServiceRestResponse ripianifica(@RequestBody RipianificaOrdineLavRequestDTO dto) throws Exception {
|
||||
productionOrdersLifecycleService.ripianificaOrdLav(dto);
|
||||
|
||||
return ServiceRestResponse.createPositiveResponse();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
package it.integry.ems.production.dto;
|
||||
|
||||
public class CartellinoDTO {
|
||||
|
||||
private String cod_style, cod_col, cod_tagl, cod_mdep, cod_barre,
|
||||
flag_saldi, flag_tipo_negozio;
|
||||
private Double prz_vend, prz_vend_sug, perc_sco;
|
||||
|
||||
public String getCod_style() {
|
||||
return cod_style;
|
||||
}
|
||||
|
||||
public void setCod_style(String cod_style) {
|
||||
this.cod_style = cod_style;
|
||||
}
|
||||
|
||||
public String getCod_col() {
|
||||
return cod_col;
|
||||
}
|
||||
|
||||
public void setCod_col(String cod_col) {
|
||||
this.cod_col = cod_col;
|
||||
}
|
||||
|
||||
public String getCod_tagl() {
|
||||
return cod_tagl;
|
||||
}
|
||||
|
||||
public void setCod_tagl(String cod_tagl) {
|
||||
this.cod_tagl = cod_tagl;
|
||||
}
|
||||
|
||||
public String getCod_mdep() {
|
||||
return cod_mdep;
|
||||
}
|
||||
|
||||
public void setCod_mdep(String cod_mdep) {
|
||||
this.cod_mdep = cod_mdep;
|
||||
}
|
||||
|
||||
public String getCod_barre() {
|
||||
return cod_barre;
|
||||
}
|
||||
|
||||
public void setCod_barre(String cod_barre) {
|
||||
this.cod_barre = cod_barre;
|
||||
}
|
||||
|
||||
public String getFlag_saldi() {
|
||||
return flag_saldi;
|
||||
}
|
||||
|
||||
public void setFlag_saldi(String flag_saldi) {
|
||||
this.flag_saldi = flag_saldi;
|
||||
}
|
||||
|
||||
public String getFlag_tipo_negozio() {
|
||||
return flag_tipo_negozio;
|
||||
}
|
||||
|
||||
public void setFlag_tipo_negozio(String flag_tipo_negozio) {
|
||||
this.flag_tipo_negozio = flag_tipo_negozio;
|
||||
}
|
||||
|
||||
public Double getPrz_vend() {
|
||||
return prz_vend;
|
||||
}
|
||||
|
||||
public void setPrz_vend(Double prz_vend) {
|
||||
this.prz_vend = prz_vend;
|
||||
}
|
||||
|
||||
public Double getPrz_vend_sug() {
|
||||
return prz_vend_sug;
|
||||
}
|
||||
|
||||
public void setPrz_vend_sug(Double prz_vend_sug) {
|
||||
this.prz_vend_sug = prz_vend_sug;
|
||||
}
|
||||
|
||||
public Double getPerc_sco() {
|
||||
return perc_sco;
|
||||
}
|
||||
|
||||
public void setPerc_sco(Double perc_sco) {
|
||||
this.perc_sco = perc_sco;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import it.integry.ems.document.dto.RientroLavorazioneDTO;
|
||||
import it.integry.ems.document.dto.ScaricoLavorazioneDTO;
|
||||
import it.integry.ems.exception.MissingDataException;
|
||||
import it.integry.ems.javabeans.RequestDataDTO;
|
||||
import it.integry.ems.product.importaz.service.RipianificaOrdineLavRequestDTO;
|
||||
import it.integry.ems.production.dto.ReopenOrdineLavRequestDTO;
|
||||
import it.integry.ems.service.AziendaService;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
@@ -16,10 +17,7 @@ import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.utility.UtilityDebug;
|
||||
import it.integry.ems.utility.UtilityEntity;
|
||||
import it.integry.ems_model.config.EmsRestConstants;
|
||||
import it.integry.ems_model.entity.DtbDoct;
|
||||
import it.integry.ems_model.entity.DtbOrdt;
|
||||
import it.integry.ems_model.entity.JtbLotr;
|
||||
import it.integry.ems_model.entity.JtbLott;
|
||||
import it.integry.ems_model.entity.*;
|
||||
import it.integry.ems_model.service.SetupGest;
|
||||
import it.integry.ems_model.types.OperationType;
|
||||
import it.integry.ems_model.utility.*;
|
||||
@@ -30,6 +28,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -332,4 +331,101 @@ public class ProductionOrdersLifecycleService {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
public void ripianificaOrdLav(RipianificaOrdineLavRequestDTO ripianificaOrdineLavRequestDTO) throws Exception {
|
||||
DtbOrdt dtbOrdtP = new DtbOrdt()
|
||||
.setCodJfas(UtilityString.isNull(ripianificaOrdineLavRequestDTO.getCodJfasNew(), ripianificaOrdineLavRequestDTO.getCodJfasOld()))
|
||||
.setDataOrd(ripianificaOrdineLavRequestDTO.getDataPianificazione() == null ?
|
||||
ripianificaOrdineLavRequestDTO.getDataOrd() :
|
||||
ripianificaOrdineLavRequestDTO.getDataPianificazione()
|
||||
)
|
||||
.setGestione("A")
|
||||
.setGestioneRif("A")
|
||||
.setGeneraOrdLavDaProd(false)
|
||||
.setOrdTrasf(false);
|
||||
dtbOrdtP.setOperation(OperationType.SELECT_OBJECT);
|
||||
dtbOrdtP.setOnlyPkMaster(false);
|
||||
entityProcessor.processEntity(dtbOrdtP, multiDBTransactionManager);
|
||||
|
||||
if (dtbOrdtP.getNumOrd() == null) {
|
||||
String sql =
|
||||
Query.format(
|
||||
"SELECT * " +
|
||||
" FROM dtb_ordt " +
|
||||
"WHERE EXISTS (SELECT * FROM dtb_ordt orl WHERE dtb_ordt.gestione = orl.gestione_rif AND dtb_ordt.data_ord = orl.data_ord_rif AND " +
|
||||
"dtb_ordt.num_ord = orl.num_ord_rif and gestione = %s and data_ord = %s and num_ord = %s)",
|
||||
ripianificaOrdineLavRequestDTO.getGestione(),
|
||||
ripianificaOrdineLavRequestDTO.getDataOrd(),
|
||||
ripianificaOrdineLavRequestDTO.getNumOrd()
|
||||
);
|
||||
|
||||
dtbOrdtP = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdt.class);
|
||||
dtbOrdtP
|
||||
.setCodJfas(ripianificaOrdineLavRequestDTO.getCodJfasNew() == null ? dtbOrdtP.getCodJfas() : ripianificaOrdineLavRequestDTO.getCodJfasNew())
|
||||
.setDataOrd(ripianificaOrdineLavRequestDTO.getDataPianificazione() == null ? dtbOrdtP.getDataOrd() : ripianificaOrdineLavRequestDTO.getDataPianificazione())
|
||||
.setNumOrd(null)
|
||||
.setGeneraOrdLavDaProd(false)
|
||||
.setOrdTrasf(false);
|
||||
dtbOrdtP.setOperation(OperationType.INSERT);
|
||||
|
||||
entityProcessor.processEntity(dtbOrdtP, true, multiDBTransactionManager);
|
||||
}
|
||||
|
||||
String sql =
|
||||
Query.format("SELECT ISNULL(MAX(riga_ord), 0) + 1 FROM dtb_ordr WHERE gestione = %s AND data_ord = %s AND num_ord = %s",
|
||||
dtbOrdtP.getGestione(),
|
||||
dtbOrdtP.getDataOrd(),
|
||||
dtbOrdtP.getNumOrd());
|
||||
|
||||
Integer rigaOrdProd = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
||||
|
||||
HashMap<String, Object> oldPk = new HashMap<>();
|
||||
Date dataOrd = ripianificaOrdineLavRequestDTO.getDataOrd();
|
||||
if (ripianificaOrdineLavRequestDTO.getDataPianificazione() != null &&
|
||||
!ripianificaOrdineLavRequestDTO.getDataOrd().equals(ripianificaOrdineLavRequestDTO.getDataPianificazione())) {
|
||||
oldPk.put("dataOrd", ripianificaOrdineLavRequestDTO.getDataOrd());
|
||||
dataOrd = ripianificaOrdineLavRequestDTO.getDataPianificazione();
|
||||
}
|
||||
|
||||
DtbOrdt dtbOrdl = new DtbOrdt()
|
||||
.setDataOrd(dataOrd)
|
||||
.setGestione(ripianificaOrdineLavRequestDTO.getGestione())
|
||||
.setNumOrd(ripianificaOrdineLavRequestDTO.getNumOrd())
|
||||
.setGestioneRif(dtbOrdtP.getGestione())
|
||||
.setDataOrdRif(dtbOrdtP.getDataOrd())
|
||||
.setNumOrdRif(dtbOrdtP.getNumOrd())
|
||||
.setRigaOrdRif(rigaOrdProd);
|
||||
if (!oldPk.isEmpty()) {
|
||||
dtbOrdl.setOldPk(oldPk);
|
||||
dtbOrdl.setOperation(OperationType.SUBSTITUTE);
|
||||
} else {
|
||||
dtbOrdl.setOperation(OperationType.UPDATE);
|
||||
}
|
||||
|
||||
if (UtilityString.equalsIgnoreCase(ripianificaOrdineLavRequestDTO.getCodJfasNew(), ripianificaOrdineLavRequestDTO.getCodJfasOld())) {
|
||||
sql =
|
||||
Query.format(
|
||||
"SELECT * FROM dtb_ords WHERE gestione = %s AND data_ord = %s AND num_ord = %s ORDER BY data_fine desc",
|
||||
ripianificaOrdineLavRequestDTO.getGestione(),
|
||||
ripianificaOrdineLavRequestDTO.getDataOrd(),
|
||||
ripianificaOrdineLavRequestDTO.getNumOrd());
|
||||
DtbOrdSteps lastStep = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdSteps.class);
|
||||
|
||||
lastStep.setFlagStepAttivo("N");
|
||||
lastStep.setOperation(OperationType.UPDATE);
|
||||
dtbOrdl.getDtbOrdSteps().add(lastStep);
|
||||
|
||||
DtbOrdSteps dtbOrdSteps = (DtbOrdSteps) lastStep.deepClone();
|
||||
dtbOrdSteps
|
||||
.setCodJfas(ripianificaOrdineLavRequestDTO.getCodJfasNew())
|
||||
.setIdRiga(null)
|
||||
.setDataIniz(null)
|
||||
.setDataFine(null);
|
||||
dtbOrdSteps.setOperation(OperationType.INSERT);
|
||||
dtbOrdl.getDtbOrdSteps().add(dtbOrdSteps);
|
||||
}
|
||||
entityProcessor.processEntity(dtbOrdl, true, multiDBTransactionManager);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package it.integry.ems.retail.pvmRetail.dto;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import it.integry.ems.adapter.JsonDateAdapterSerializer;
|
||||
import it.integry.ems.service.dto.production.AvailableClassMercDTO;
|
||||
import it.integry.ems_model.annotation.SqlField;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -623,30 +624,6 @@ public class OrdineInevasoDTO {
|
||||
return this;
|
||||
}
|
||||
|
||||
public static class AvailableClassMercDTO {
|
||||
|
||||
private String codMgrp;
|
||||
private List<String> codMsgr;
|
||||
|
||||
public String getCodMgrp() {
|
||||
return codMgrp;
|
||||
}
|
||||
|
||||
public AvailableClassMercDTO setCodMgrp(String codMgrp) {
|
||||
this.codMgrp = codMgrp;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<String> getCodMsgr() {
|
||||
return codMsgr;
|
||||
}
|
||||
|
||||
public AvailableClassMercDTO setCodMsgr(List<String> codMsgr) {
|
||||
this.codMsgr = codMsgr;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
public String getCodVdes() {
|
||||
return codVdes;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package it.integry.ems.retail.wms.generic.dto.articolo;
|
||||
|
||||
import it.integry.common.var.CommonConstants;
|
||||
import it.integry.ems_model.annotation.SqlField;
|
||||
import it.integry.ems_model.config.EmsRestConstants;
|
||||
import it.integry.ems_model.entity.MtbAart;
|
||||
import it.integry.ems_model.utility.UtilityString;
|
||||
|
||||
|
||||
@@ -30,6 +30,7 @@ import it.integry.ems.rules.completing.PackagesRules;
|
||||
import it.integry.ems.service.AziendaService;
|
||||
import it.integry.ems.service.EntityProcessor;
|
||||
import it.integry.ems.service.PrinterService;
|
||||
import it.integry.ems.service.dto.production.AvailableClassMercDTO;
|
||||
import it.integry.ems.service.dto.production.OrdineInevasoGroupMercDTO;
|
||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||
import it.integry.ems.user.UserSession;
|
||||
@@ -268,7 +269,7 @@ public class WMSGenericService {
|
||||
|
||||
for (Map.Entry<String, List<OrdineInevasoGroupMercDTO>> entry : groups.entrySet()) {
|
||||
order.getAvailableClassMerc()
|
||||
.add(new OrdineInevasoDTO.AvailableClassMercDTO()
|
||||
.add(new AvailableClassMercDTO()
|
||||
.setCodMgrp(entry.getKey())
|
||||
.setCodMsgr(entry.getValue().stream()
|
||||
.map(OrdineInevasoGroupMercDTO::getCodMsgr)
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
package it.integry.ems.system.dto.syncronization;
|
||||
|
||||
public class InsertPublicationGroupRequestDTO {
|
||||
|
||||
private String description;
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public InsertPublicationGroupRequestDTO setDescription(String description) {
|
||||
this.description = description;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package it.integry.ems.system.dto.syncronization;
|
||||
|
||||
public class InsertPublicationGroupResponseDTO {
|
||||
|
||||
private long id;
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public InsertPublicationGroupResponseDTO setId(long id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
package it.integry.ems.system.dto.syncronization;
|
||||
|
||||
public class PublicationDTO {
|
||||
|
||||
private long id;
|
||||
private String entityName;
|
||||
private String whereCondSql;
|
||||
private String recalcColumns;
|
||||
private boolean syncronize;
|
||||
private String whereCond;
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public PublicationDTO setId(long id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getEntityName() {
|
||||
return entityName;
|
||||
}
|
||||
|
||||
public PublicationDTO setEntityName(String entityName) {
|
||||
this.entityName = entityName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getWhereCondSql() {
|
||||
return whereCondSql;
|
||||
}
|
||||
|
||||
public PublicationDTO setWhereCondSql(String whereCondSql) {
|
||||
this.whereCondSql = whereCondSql;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getRecalcColumns() {
|
||||
return recalcColumns;
|
||||
}
|
||||
|
||||
public PublicationDTO setRecalcColumns(String recalcColumns) {
|
||||
this.recalcColumns = recalcColumns;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isSyncronize() {
|
||||
return syncronize;
|
||||
}
|
||||
|
||||
public PublicationDTO setSyncronize(boolean syncronize) {
|
||||
this.syncronize = syncronize;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getWhereCond() {
|
||||
return whereCond;
|
||||
}
|
||||
|
||||
public PublicationDTO setWhereCond(String whereCond) {
|
||||
this.whereCond = whereCond;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
package it.integry.ems.system.dto.syncronization;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class PublicationGroupDTO {
|
||||
|
||||
private long id;
|
||||
private String description;
|
||||
|
||||
private List<PublicationDTO> publications = new ArrayList<>();
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public PublicationGroupDTO setId(long id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public PublicationGroupDTO setDescription(String description) {
|
||||
this.description = description;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<PublicationDTO> getPublications() {
|
||||
return publications;
|
||||
}
|
||||
|
||||
public PublicationGroupDTO setPublications(List<PublicationDTO> publications) {
|
||||
this.publications = publications;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
17584
ts/ems-core.module.ts
17584
ts/ems-core.module.ts
File diff suppressed because one or more lines are too long
33768
ts/ems-engine.module.ts
33768
ts/ems-engine.module.ts
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user