Merge branch 'master' into feature/RefactoringGestioneColli
# Conflicts: # ts/ems-engine.module.ts
This commit is contained in:
@@ -60,49 +60,6 @@
|
|||||||
</execution>
|
</execution>
|
||||||
</executions>
|
</executions>
|
||||||
</plugin>
|
</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>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ public class Migration_20250530161424 extends BaseMigration implements Migration
|
|||||||
if (isHistoryDB())
|
if (isHistoryDB())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (isDMS()) return;
|
||||||
|
|
||||||
createOrUpdateFunction("pvm_getassortimentoClientePedane", "CREATE FUNCTION [dbo].[pvm_getassortimentoClientePedane](\n" +
|
createOrUpdateFunction("pvm_getassortimentoClientePedane", "CREATE FUNCTION [dbo].[pvm_getassortimentoClientePedane](\n" +
|
||||||
" @codAnag VARCHAR(5), @codVlis VARCHAR(5), @codVdes VARCHAR(5), @dataValidita DATETIME, @viewPromo BIT,\n" +
|
" @codAnag VARCHAR(5), @codVlis VARCHAR(5), @codVdes VARCHAR(5), @dataValidita DATETIME, @viewPromo BIT,\n" +
|
||||||
" @pedane INT = 0\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;
|
package it.integry.ems.model;
|
||||||
|
|
||||||
public enum IntegryApplicationEnum {
|
public enum IntegryApplicationEnum {
|
||||||
|
//Generato tramite uuid
|
||||||
GESTIONALE_BASE("5858a2a0-1188-4edd-8f71-d7da5bfb350d"),
|
GESTIONALE_BASE("5858a2a0-1188-4edd-8f71-d7da5bfb350d"),
|
||||||
PVM("845da2d9-f2f9-4f8d-ad5b-34b65a91eb6d"),
|
PVM("845da2d9-f2f9-4f8d-ad5b-34b65a91eb6d"),
|
||||||
WMS("fa3a21af-606b-4129-a22b-aedc2a52c7b6"),
|
WMS("fa3a21af-606b-4129-a22b-aedc2a52c7b6"),
|
||||||
TASK("478f3a4c51824ad23cb50c1c60670c0f"),
|
TASK("478f3a4c51824ad23cb50c1c60670c0f"),
|
||||||
|
CRM("f0484398-1f8b-42f5-ab79-5282c164e1d8"),
|
||||||
CONSEGNA("c012124f-4f11-471c-ae12-81bd4a97626c");
|
CONSEGNA("c012124f-4f11-471c-ae12-81bd4a97626c");
|
||||||
|
|
||||||
private String text;
|
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");
|
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());
|
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 impDare = BigDecimal.ZERO;
|
||||||
BigDecimal impAvere = BigDecimal.ZERO;
|
BigDecimal impAvere = BigDecimal.ZERO;
|
||||||
if (!iva.getCodAliq().equals(codAliqSplit)) {
|
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.config.EmsRestConstants;
|
||||||
import it.integry.ems_model.db.ResultSetMapper;
|
import it.integry.ems_model.db.ResultSetMapper;
|
||||||
import it.integry.ems_model.entity.*;
|
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.DtbDocOrdR;
|
||||||
import it.integry.ems_model.entity.common.DtbDocOrdT;
|
import it.integry.ems_model.entity.common.DtbDocOrdT;
|
||||||
import it.integry.ems_model.rules.util.DroolsUtil;
|
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) {
|
private static boolean checkQtaChange(DtbDocOrdT testata, DtbDocOrdR row) {
|
||||||
if (testata instanceof DtbDoct){
|
if (testata instanceof DtbDoct) {
|
||||||
Integer idRiga = ((DtbDocr) row).getIdRiga();
|
Integer idRiga = ((DtbDocr) row).getIdRiga();
|
||||||
if (idRiga != null && testata.getOriginalEntity() != null) {
|
if (idRiga != null && testata.getOriginalEntity() != null) {
|
||||||
DtbDocr dtbDocr = ((DtbDoct) testata.getOriginalEntity())
|
DtbDocr dtbDocr = ((DtbDoct) testata.getOriginalEntity())
|
||||||
@@ -447,13 +448,13 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
.stream()
|
.stream()
|
||||||
.filter(x -> Objects.equals(x.getIdRiga(), idRiga)).findFirst().orElse(null);
|
.filter(x -> Objects.equals(x.getIdRiga(), idRiga)).findFirst().orElse(null);
|
||||||
|
|
||||||
if ( dtbDocr != null &&
|
if (dtbDocr != null &&
|
||||||
(Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getQta(), dtbDocr.getQta()), dtbDocr.getQta()) &&
|
(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.getNumCnf(), dtbDocr.getNumCnf()), dtbDocr.getNumCnf()) &&
|
||||||
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getPesoLordo(), dtbDocr.getPesoLordo()), dtbDocr.getPesoLordo()) &&
|
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getPesoLordo(), dtbDocr.getPesoLordo()), dtbDocr.getPesoLordo()) &&
|
||||||
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getPesoNetto(), dtbDocr.getPesoNetto()), dtbDocr.getPesoNetto()))) {
|
Objects.equals(UtilityBigDecimal.isNull(dtbDocr.getPesoNetto(), dtbDocr.getPesoNetto()), dtbDocr.getPesoNetto()))) {
|
||||||
return false;
|
return false;
|
||||||
} else if ( dtbDocr == null && row.getOperation() == OperationType.SELECT_OBJECT)
|
} else if (dtbDocr == null && row.getOperation() == OperationType.SELECT_OBJECT)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -634,8 +635,33 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
|
|
||||||
if (qta.compareTo(BigDecimal.ZERO) != 0) {
|
if (qta.compareTo(BigDecimal.ZERO) != 0) {
|
||||||
boolean ventilazione = false;
|
boolean ventilazione = false;
|
||||||
if ( row instanceof DtbDocr) ventilazione = ((DtbDocr) row).getVentilazione();
|
if (row instanceof DtbDocr) ventilazione = ((DtbDocr) row).getVentilazione();
|
||||||
addCastellettoIva(flagIvaInclusa?impRigaIva:importoRiga, codAliq, ventilazione, castelletto, flagIvaInclusa);
|
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)) {
|
if (row instanceof DtbDocr && (((DtbDocr) row).getCostoUnt() == null || ((DtbDocr) row).getCostoUnt().compareTo(BigDecimal.ZERO) == 0)) {
|
||||||
boolean flagValCosto = ((DtbDoct) testata).getDtbTipi().getFlagCosto().equalsIgnoreCase("S");
|
boolean flagValCosto = ((DtbDoct) testata).getDtbTipi().getFlagCosto().equalsIgnoreCase("S");
|
||||||
BigDecimal costo = BigDecimal.ZERO;
|
BigDecimal costo = BigDecimal.ZERO;
|
||||||
if ("A".equals(gestione) ) {
|
if ("A".equals(gestione)) {
|
||||||
costo = DocumentRules.completeCostoUntDocA(conn, ((DtbDocr) row));
|
costo = DocumentRules.completeCostoUntDocA(conn, ((DtbDocr) row));
|
||||||
} else if ("L".equals(gestione)) {
|
} else if ("L".equals(gestione)) {
|
||||||
costo = DocumentRules.completeCostoUntDocL(conn, ((DtbDocr) row), flagValCosto);
|
costo = DocumentRules.completeCostoUntDocL(conn, ((DtbDocr) row), flagValCosto);
|
||||||
@@ -743,7 +769,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Boolean ventilazione = false;
|
Boolean ventilazione = false;
|
||||||
if ( testata instanceof DtbDoct) {
|
if (testata instanceof DtbDoct) {
|
||||||
String sql =
|
String sql =
|
||||||
Query.format(
|
Query.format(
|
||||||
"SELECT CAST(COUNT(*) AS BIT)\n" +
|
"SELECT CAST(COUNT(*) AS BIT)\n" +
|
||||||
@@ -758,7 +784,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
/******************************************
|
/******************************************
|
||||||
ASSEGNAZIONE NUM_COLLI e PESO A DOCUMENTO
|
ASSEGNAZIONE NUM_COLLI e PESO A DOCUMENTO
|
||||||
******************************************/
|
******************************************/
|
||||||
if ( changeQta)
|
if (changeQta)
|
||||||
setNumColliPeso(testata, calcColli, datiTrasp, colli, colliFromDB);
|
setNumColliPeso(testata, calcColli, datiTrasp, colli, colliFromDB);
|
||||||
|
|
||||||
//CALCOLO TOTALI E CASTELLETTO IVA
|
//CALCOLO TOTALI E CASTELLETTO IVA
|
||||||
@@ -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);
|
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 =
|
java.util.Optional<CtbMovi> first =
|
||||||
castelletto.stream()
|
castelletto.stream()
|
||||||
.filter(x -> UtilityString.equalsIgnoreCase(x.getCodAliq(), codAliq) && x.getVentilazione() == ventilazione &&
|
.filter(x -> UtilityString.equalsIgnoreCase(x.getCodAliq(), codAliq) && x.getVentilazione() == ventilazione &&
|
||||||
@@ -943,7 +970,8 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
castelletto.add(ctbMovi);
|
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 {
|
throws Exception {
|
||||||
BigDecimal totImposta = BigDecimal.ZERO;
|
BigDecimal totImposta = BigDecimal.ZERO;
|
||||||
|
|
||||||
@@ -1026,7 +1054,8 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
datiTrasp.setPesoNetto(pesoNettoKgTot);
|
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;
|
String peso = null, numColli = null;
|
||||||
BigDecimal pesoKgTot = datiTrasp.getPesoKg();
|
BigDecimal pesoKgTot = datiTrasp.getPesoKg();
|
||||||
BigDecimal colliTot = datiTrasp.getColli();
|
BigDecimal colliTot = datiTrasp.getColli();
|
||||||
@@ -1116,7 +1145,8 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
return calcImportRiga(entity, entity.getValUntIva(), cifreDec);
|
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();
|
BigDecimal qta = entity.getQta();
|
||||||
if (UtilityBigDecimal.isNullOrZero(qta))
|
if (UtilityBigDecimal.isNullOrZero(qta))
|
||||||
return BigDecimal.ZERO;
|
return BigDecimal.ZERO;
|
||||||
@@ -1148,7 +1178,8 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
return CommonRules.roundValue(importoRiga, cifreDec);
|
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();
|
BigDecimal importo = dtbDocr.getImportoRiga();
|
||||||
for (BigDecimal sconto : sconti) {
|
for (BigDecimal sconto : sconti) {
|
||||||
if (sconto != null) {
|
if (sconto != null) {
|
||||||
@@ -1327,7 +1358,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
(!UtilityString.isNullOrEmpty(testata.getCodPaga()) || !UtilityString.isNullOrEmpty(costoEsenzione) || !UtilityString.isNullOrEmpty(testata.getCodVvet()))) {
|
(!UtilityString.isNullOrEmpty(testata.getCodPaga()) || !UtilityString.isNullOrEmpty(costoEsenzione) || !UtilityString.isNullOrEmpty(testata.getCodVvet()))) {
|
||||||
|
|
||||||
maxRigaSpesa = addAltreSpese(connection, testata, castelletto, speseCalc, maxRigaSpesa, whereCondExcSpese, cifreDec, ventilazione, flagPrzIva);
|
maxRigaSpesa = addAltreSpese(connection, testata, castelletto, speseCalc, maxRigaSpesa, whereCondExcSpese, cifreDec, ventilazione, flagPrzIva);
|
||||||
if ( maxRigaSpesa > 0)
|
if (maxRigaSpesa > 0)
|
||||||
calcTotImponib(testata, connection, castelletto, cifreDec);
|
calcTotImponib(testata, connection, castelletto, cifreDec);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1427,8 +1458,10 @@ public class DocOrdCalTotaliRules extends QueryRules {
|
|||||||
return maxRigaSpesa;
|
return maxRigaSpesa;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Integer addImpostaBollo(Connection connection, DtbDoct testata, List<CtbMovi> castelletto, List<DtbDocs> speseCalc,
|
private static Integer addImpostaBollo(Connection connection, DtbDoct
|
||||||
Integer maxRigaSpesa, String whereCondExcSpese, BigDecimal totDoc, Boolean ventilazione) throws Exception {
|
testata, List<CtbMovi> castelletto, List<DtbDocs> speseCalc,
|
||||||
|
Integer maxRigaSpesa, String whereCondExcSpese, BigDecimal totDoc, Boolean ventilazione) throws
|
||||||
|
Exception {
|
||||||
final String tipoCalcolo = "BOLLO";
|
final String tipoCalcolo = "BOLLO";
|
||||||
String impMinDoc = setupGest.getSetup(connection, "EXPORT_DOCUMENTI VENDITA", "FATTURE_FPR", "DATI_BOLLO_IMP_MIN");
|
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())
|
.setCodTcolUl(dtbOrdt.getCodTcolUl())
|
||||||
.setCodTcolUi(dtbOrdt.getCodTcolUi())
|
.setCodTcolUi(dtbOrdt.getCodTcolUi())
|
||||||
.setNumCnf(dtbOrdt.getNumCnfProd());
|
.setNumCnf(dtbOrdt.getNumCnfProd());
|
||||||
dtbOrdrProd.setOperation(OperationType.UPDATE);
|
|
||||||
|
dtbOrdrProd.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||||
}
|
}
|
||||||
dtbOrdtProd.addDtbOrdr(dtbOrdrProd);
|
dtbOrdtProd.addDtbOrdr(dtbOrdrProd);
|
||||||
|
|
||||||
|
|
||||||
return dtbOrdtProd;
|
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;
|
this.availableClassMerc = availableClassMerc;
|
||||||
return this;
|
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;
|
package it.integry.ems.service.production;
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
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.OrdineInevasoGroupMercDTO;
|
||||||
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
|
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
|
||||||
import it.integry.ems.settings.Model.AvailableConnectionsModel;
|
import it.integry.ems.settings.Model.AvailableConnectionsModel;
|
||||||
@@ -267,7 +268,7 @@ public class ProductionOrderDataHandlerService {
|
|||||||
|
|
||||||
for (Map.Entry<String, List<OrdineInevasoGroupMercDTO>> entry : groups.entrySet()) {
|
for (Map.Entry<String, List<OrdineInevasoGroupMercDTO>> entry : groups.entrySet()) {
|
||||||
order.getAvailableClassMerc()
|
order.getAvailableClassMerc()
|
||||||
.add(new OrdineLavorazioneDTO.AvailableClassMercDTO()
|
.add(new AvailableClassMercDTO()
|
||||||
.setCodMgrp(entry.getKey())
|
.setCodMgrp(entry.getKey())
|
||||||
.setCodMsgr(entry.getValue().stream()
|
.setCodMsgr(entry.getValue().stream()
|
||||||
.map(OrdineInevasoGroupMercDTO::getCodMsgr)
|
.map(OrdineInevasoGroupMercDTO::getCodMsgr)
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import it.integry.ems.response.ServiceRestResponse;
|
|||||||
import it.integry.ems.sync.service.RemoteSynchronizationService;
|
import it.integry.ems.sync.service.RemoteSynchronizationService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Scope;
|
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.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -17,20 +17,20 @@ public class RemoteSynchronizationController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RemoteSynchronizationService remoteSynchronizationService;
|
private RemoteSynchronizationService remoteSynchronizationService;
|
||||||
|
|
||||||
@RequestMapping(value = "publications/{groupId}/start", method = RequestMethod.GET)
|
@GetMapping(value = "publications/{groupId}/start")
|
||||||
public ServiceRestResponse startPublication(@PathVariable long groupId) throws Exception {
|
public ServiceRestResponse startPublication(@PathVariable long groupId) throws Exception {
|
||||||
remoteSynchronizationService.startPublication(groupId);
|
remoteSynchronizationService.startPublication(groupId);
|
||||||
return ServiceRestResponse.createPositiveResponse();
|
return ServiceRestResponse.createPositiveResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(value = "publications/status", method = RequestMethod.GET)
|
@GetMapping(value = "publications/status")
|
||||||
public ServiceRestResponse statusPublication() {
|
public ServiceRestResponse statusPublication() {
|
||||||
return ServiceRestResponse.createPositiveResponse(remoteSynchronizationService.getPublicationStatus());
|
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 {
|
public ServiceRestResponse runSubscription(@PathVariable long subscriptionId) throws Exception {
|
||||||
remoteSynchronizationService.runSubscription(subscriptionId);
|
remoteSynchronizationService.runSubscription(subscriptionId);
|
||||||
return ServiceRestResponse.createPositiveResponse();
|
return ServiceRestResponse.createPositiveResponse();
|
||||||
|
|||||||
@@ -147,6 +147,7 @@ public class UserCacheService {
|
|||||||
(application == IntegryApplicationEnum.CONSEGNA && x.isWeb()) ||
|
(application == IntegryApplicationEnum.CONSEGNA && x.isWeb()) ||
|
||||||
(application == IntegryApplicationEnum.WMS && x.isWeb()) ||
|
(application == IntegryApplicationEnum.WMS && x.isWeb()) ||
|
||||||
(application == IntegryApplicationEnum.TASK && x.isWeb()) ||
|
(application == IntegryApplicationEnum.TASK && x.isWeb()) ||
|
||||||
|
(application == IntegryApplicationEnum.CRM && x.isWeb()) ||
|
||||||
(application == IntegryApplicationEnum.GESTIONALE_BASE && x.isInternal())))
|
(application == IntegryApplicationEnum.GESTIONALE_BASE && x.isInternal())))
|
||||||
.findFirst();
|
.findFirst();
|
||||||
|
|
||||||
@@ -173,6 +174,7 @@ public class UserCacheService {
|
|||||||
(application == IntegryApplicationEnum.CONSEGNA && x.isWeb()) ||
|
(application == IntegryApplicationEnum.CONSEGNA && x.isWeb()) ||
|
||||||
(application == IntegryApplicationEnum.WMS && x.isWeb()) ||
|
(application == IntegryApplicationEnum.WMS && x.isWeb()) ||
|
||||||
(application == IntegryApplicationEnum.TASK && x.isWeb()) ||
|
(application == IntegryApplicationEnum.TASK && x.isWeb()) ||
|
||||||
|
(application == IntegryApplicationEnum.CRM && x.isWeb()) ||
|
||||||
(application == IntegryApplicationEnum.GESTIONALE_BASE && x.isInternal())))
|
(application == IntegryApplicationEnum.GESTIONALE_BASE && x.isInternal())))
|
||||||
.findFirst();
|
.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)
|
@SqlField(value = "cod_ccau_coan", maxLength = 5)
|
||||||
private String codCcauCoan;
|
private String codCcauCoan;
|
||||||
|
|
||||||
|
@SqlField(value = "flag_set_num_prot", nullable = false, defaultObjectValue = "0")
|
||||||
|
private Boolean flagSetNumProt;
|
||||||
|
|
||||||
@EntityChild
|
@EntityChild
|
||||||
private List<DtbTipiAnag> dtbTipiAnag = new ArrayList<>();
|
private List<DtbTipiAnag> dtbTipiAnag = new ArrayList<>();
|
||||||
|
|
||||||
@@ -834,6 +837,15 @@ public class DtbTipi extends EntityBase {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Boolean getFlagSetNumProt() {
|
||||||
|
return flagSetNumProt;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DtbTipi setFlagSetNumProt(Boolean flagSetNumProt) {
|
||||||
|
this.flagSetNumProt = flagSetNumProt;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void deleteChilds() throws Exception {
|
protected void deleteChilds() throws Exception {
|
||||||
DtbTipiAnag dtbTipiAnag = new DtbTipiAnag();
|
DtbTipiAnag dtbTipiAnag = new DtbTipiAnag();
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package it.integry.ems_model.utility;
|
package it.integry.ems_model.utility;
|
||||||
|
|
||||||
import it.integry.ems.Import.dto.ImportRequestDTO;
|
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.commons.codec.binary.Base64;
|
||||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
import org.apache.poi.ss.usermodel.*;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
@@ -10,6 +12,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Iterator;
|
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
|
* @param requestDTO the import request containing file information
|
||||||
* @return an iterator over the rows of the first sheet in the XLSX file
|
* @param clazz the class type to return (Row or Sheet)
|
||||||
* @throws Exception if an error occurs while reading the file or if the file is empty
|
* @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 {
|
public static <T> Iterator<T> readXlsxFile(ImportRequestDTO requestDTO, Class<T> clazz) throws Exception {
|
||||||
return readXlsxFile(requestDTO, true);
|
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 requestDTO the import request containing file information
|
||||||
* @param ignoreHeader whether to ignore the first row (header) of the sheet
|
* @param ignoreHeader whether to ignore the header row
|
||||||
* @return an iterator over the rows of the first sheet in the XLSX file
|
* @param clazz the class type to return (Row or Sheet)
|
||||||
* @throws Exception if an error occurs while reading the file or if the file is empty
|
* @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;
|
InputStream stream;
|
||||||
|
|
||||||
if (requestDTO.getRawContentB64() != null)
|
if (requestDTO.getRawContentB64() != null)
|
||||||
stream = new ByteArrayInputStream(Base64.decodeBase64(requestDTO.getRawContentB64()));
|
stream = new ByteArrayInputStream(Base64.decodeBase64(requestDTO.getRawContentB64()));
|
||||||
else if (requestDTO.getPathFile() != null && requestDTO.getFileName() != null) {
|
else if (requestDTO.getPathFile() != null && requestDTO.getFileName() != null) {
|
||||||
File file = new File(requestDTO.getPathFile());
|
File file = new File(requestDTO.getPathFile());
|
||||||
if ( file.isDirectory()) {
|
if (file.isDirectory()) {
|
||||||
file = new File(requestDTO.getPathFile() + "/" + requestDTO.getFileName());
|
file = new File(requestDTO.getPathFile() + "/" + requestDTO.getFileName());
|
||||||
}
|
}
|
||||||
|
|
||||||
stream = Files.newInputStream(file.toPath());
|
stream = Files.newInputStream(file.toPath());
|
||||||
} else
|
} else
|
||||||
throw new Exception("Errore nella lettura del file");
|
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);
|
OPCPackage pkg = OPCPackage.open(stream);
|
||||||
Workbook workbook = new XSSFWorkbook(pkg);
|
Workbook workbook = new XSSFWorkbook(pkg);
|
||||||
Sheet sheet = workbook.getSheetAt(0);
|
Iterator<Sheet> sheetIterator = workbook.sheetIterator();
|
||||||
pkg.close();
|
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();
|
Iterator<Row> rowIterator = sheet.iterator();
|
||||||
|
|
||||||
// Ignora la prima riga (header)
|
// Ignora la prima riga (header)
|
||||||
if (ignoreHeader) {
|
if (ignoreHeader)
|
||||||
if (rowIterator.hasNext()) {
|
if (rowIterator.hasNext())
|
||||||
rowIterator.next();
|
rowIterator.next();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Verifica se il foglio di lavoro è vuoto
|
// Verifica se il foglio di lavoro è vuoto
|
||||||
if (!rowIterator.hasNext()) {
|
if (!rowIterator.hasNext())
|
||||||
throw new Exception("Il file è vuoto.");
|
throw new Exception("Il file è vuoto.");
|
||||||
}
|
|
||||||
|
|
||||||
return rowIterator;
|
return rowIterator;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package it.integry.firebase.dto;
|
|||||||
|
|
||||||
import com.google.firebase.messaging.FcmOptions;
|
import com.google.firebase.messaging.FcmOptions;
|
||||||
import com.google.firebase.messaging.Message;
|
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.android.AndroidConfigDTO;
|
||||||
import it.integry.firebase.dto.apns.ApnsConfigDTO;
|
import it.integry.firebase.dto.apns.ApnsConfigDTO;
|
||||||
import it.integry.firebase.dto.webpush.WebpushConfigDTO;
|
import it.integry.firebase.dto.webpush.WebpushConfigDTO;
|
||||||
@@ -19,6 +20,7 @@ public class MessageDTO {
|
|||||||
private String condition;
|
private String condition;
|
||||||
private String analyticsLabel;
|
private String analyticsLabel;
|
||||||
private String userName;
|
private String userName;
|
||||||
|
private WtbUserDeviceToken.AppName appName;
|
||||||
|
|
||||||
public Message.Builder toBuilder() {
|
public Message.Builder toBuilder() {
|
||||||
Message.Builder builder = Message.builder();
|
Message.Builder builder = Message.builder();
|
||||||
@@ -151,4 +153,13 @@ public class MessageDTO {
|
|||||||
this.userName = userName;
|
this.userName = userName;
|
||||||
return this;
|
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.WtbDeviceTokenTopic;
|
||||||
import it.integry.ems_model.entity.WtbUserDeviceToken;
|
import it.integry.ems_model.entity.WtbUserDeviceToken;
|
||||||
import it.integry.ems_model.types.OperationType;
|
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.UtilityDB;
|
||||||
import it.integry.ems_model.utility.UtilityHashMap;
|
import it.integry.ems_model.utility.UtilityHashMap;
|
||||||
import it.integry.firebase.enums.SubscribeOperation;
|
import it.integry.firebase.enums.SubscribeOperation;
|
||||||
@@ -124,29 +125,21 @@ public class DeviceTokenService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<WtbUserDeviceToken> getUserDevices(String userName) throws Exception {
|
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<>();
|
|
||||||
|
|
||||||
while (rs.next()) {
|
|
||||||
WtbUserDeviceToken device = new WtbUserDeviceToken();
|
|
||||||
|
|
||||||
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();
|
public List<WtbUserDeviceToken> getUserDevices(String userName, WtbUserDeviceToken.AppName appName) throws Exception {
|
||||||
ps.close();
|
Integer appnameValue = appName == null ? null : appName.getValue();
|
||||||
|
|
||||||
return devices;
|
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
|
||||||
|
);
|
||||||
|
|
||||||
|
return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, WtbUserDeviceToken.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getUserAssociatedTopics(String userName) throws Exception {
|
public List<String> getUserAssociatedTopics(String userName) throws Exception {
|
||||||
|
|||||||
@@ -547,7 +547,7 @@ public class NotificationService {
|
|||||||
throw new Exception("Username nullo in sendNotificationToUserDevices.");
|
throw new Exception("Username nullo in sendNotificationToUserDevices.");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (WtbUserDeviceToken device : deviceTokenService.getUserDevices(messageDTO.getUserName())) {
|
for (WtbUserDeviceToken device : deviceTokenService.getUserDevices(messageDTO.getUserName(), messageDTO.getAppName())) {
|
||||||
try {
|
try {
|
||||||
Message message = messageDTO.toBuilder()
|
Message message = messageDTO.toBuilder()
|
||||||
.setToken(device.getDeviceToken())
|
.setToken(device.getDeviceToken())
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
<finalName>${ems.war.name}-api</finalName>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
@@ -35,14 +36,13 @@
|
|||||||
<artifactId>maven-war-plugin</artifactId>
|
<artifactId>maven-war-plugin</artifactId>
|
||||||
<version>3.4.0</version>
|
<version>3.4.0</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<warName>${ems.war.name}-api</warName>
|
|
||||||
<failOnMissingWebXml>false</failOnMissingWebXml>
|
<failOnMissingWebXml>false</failOnMissingWebXml>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>cz.habarta.typescript-generator</groupId>
|
<groupId>cz.habarta.typescript-generator</groupId>
|
||||||
<artifactId>typescript-generator-maven-plugin</artifactId>
|
<artifactId>typescript-generator-maven-plugin</artifactId>
|
||||||
<version>3.2.1263</version>
|
<version>2.37.1128</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<id>generate</id>
|
<id>generate</id>
|
||||||
@@ -54,22 +54,61 @@
|
|||||||
</executions>
|
</executions>
|
||||||
<configuration>
|
<configuration>
|
||||||
<jsonLibrary>jackson2</jsonLibrary>
|
<jsonLibrary>jackson2</jsonLibrary>
|
||||||
|
<classes>
|
||||||
|
<class>it.integry.ems.response.ServiceRestResponse</class>
|
||||||
|
</classes>
|
||||||
<classPatterns>
|
<classPatterns>
|
||||||
<classPattern>it.integry.ems.product.dto.*</classPattern>
|
<classPattern>it.integry.**.dto.*</classPattern>
|
||||||
<classPattern>it.integry.ems.production.dto.*</classPattern>
|
<classPattern>it.integry.**DTO**</classPattern>
|
||||||
<classPattern>it.integry.ems.retail.wms.generic.dto.articolo.*</classPattern>
|
<classPattern>it.integry.ems_model.entity.*</classPattern>
|
||||||
<classPattern>it.integry.ems.logistic.conSegna.dto.*</classPattern>
|
|
||||||
</classPatterns>
|
</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>
|
<excludeClasses>
|
||||||
<excludeClass>it.integry.ems_model.base.EntityInterface</excludeClass>
|
<excludeClass>it.integry.ems_model.base.EntityInterface</excludeClass>
|
||||||
</excludeClasses>
|
</excludeClasses>
|
||||||
|
<excludeClassPatterns>
|
||||||
|
<excludeClassPattern>it.integry.ems.contabil.**</excludeClassPattern>
|
||||||
|
<excludeClassPattern>it.integry.ems.order.amazon.**</excludeClassPattern>
|
||||||
|
</excludeClassPatterns>
|
||||||
<outputFile>../ts/ems-engine.module.ts</outputFile>
|
<outputFile>../ts/ems-engine.module.ts</outputFile>
|
||||||
<outputKind>module</outputKind>
|
<outputKind>module</outputKind>
|
||||||
<outputFileType>implementationFile</outputFileType>
|
<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>
|
<generateConstructors>true</generateConstructors>
|
||||||
<mapClasses>asClasses</mapClasses>
|
<mapClasses>asClasses</mapClasses>
|
||||||
<mapEnum>asEnum</mapEnum>
|
<mapEnum>asEnum</mapEnum>
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public class ActivityController {
|
|||||||
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
|
||||||
@RequestParam(required = false) String userCreator,
|
@RequestParam(required = false) String userCreator,
|
||||||
@RequestBody List<PlanActivityDTO> body) throws Exception {
|
@RequestBody List<PlanActivityDTO> body) throws Exception {
|
||||||
activityService.planActivities(userCreator, body);
|
activityService.planActivities(body);
|
||||||
return ServiceRestResponse.createPositiveResponse();
|
return ServiceRestResponse.createPositiveResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,9 +220,10 @@ public class ActivityController {
|
|||||||
@RequestMapping(value = EmsRestConstants.PATH_ACTIVITY_COMMESSE, method = RequestMethod.GET)
|
@RequestMapping(value = EmsRestConstants.PATH_ACTIVITY_COMMESSE, method = RequestMethod.GET)
|
||||||
public ServiceRestResponse getCommesse(HttpServletRequest request,
|
public ServiceRestResponse getCommesse(HttpServletRequest request,
|
||||||
@RequestParam(CommonConstants.PROFILE_DB) String config,
|
@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()")
|
@PreAuthorize("isAuthenticated()")
|
||||||
|
|||||||
@@ -6,15 +6,22 @@ public class PersoneRifDTO {
|
|||||||
|
|
||||||
@SqlField("persona_rif")
|
@SqlField("persona_rif")
|
||||||
private String personaRif;
|
private String personaRif;
|
||||||
|
|
||||||
@SqlField("cod_jcom")
|
@SqlField("cod_jcom")
|
||||||
private String codJcom;
|
private String codJcom;
|
||||||
|
|
||||||
@SqlField("persona_cod_jcom")
|
@SqlField("persona_cod_jcom")
|
||||||
private String personaCodJcom;
|
private String personaCodJcom;
|
||||||
|
|
||||||
@SqlField("e_mail")
|
@SqlField("e_mail")
|
||||||
private String eMail;
|
private String eMail;
|
||||||
|
|
||||||
@SqlField("cod_anag")
|
@SqlField("cod_anag")
|
||||||
private String codAnag;
|
private String codAnag;
|
||||||
|
|
||||||
|
@SqlField("tipo_indirizzo")
|
||||||
|
private String tipoIndirizzo;
|
||||||
|
|
||||||
public String getPersonaRif() {
|
public String getPersonaRif() {
|
||||||
return personaRif;
|
return personaRif;
|
||||||
}
|
}
|
||||||
@@ -59,4 +66,13 @@ public class PersoneRifDTO {
|
|||||||
this.codAnag = codAnag;
|
this.codAnag = codAnag;
|
||||||
return this;
|
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.media.MimeTypesHandler;
|
||||||
import it.integry.ems.service.EntityProcessor;
|
import it.integry.ems.service.EntityProcessor;
|
||||||
import it.integry.ems.settings.SettingsController;
|
import it.integry.ems.settings.SettingsController;
|
||||||
|
import it.integry.ems.sync.MultiDBTransaction.Connection;
|
||||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||||
import it.integry.ems.user.UtilityUser;
|
import it.integry.ems.user.UtilityUser;
|
||||||
|
import it.integry.ems.user.service.UserService;
|
||||||
import it.integry.ems.utility.UtilityEntity;
|
import it.integry.ems.utility.UtilityEntity;
|
||||||
import it.integry.ems_model.base.EntityBase;
|
import it.integry.ems_model.base.EntityBase;
|
||||||
import it.integry.ems_model.config.EmsRestConstants;
|
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.service.SetupGest;
|
||||||
import it.integry.ems_model.types.OperationType;
|
import it.integry.ems_model.types.OperationType;
|
||||||
import it.integry.ems_model.utility.*;
|
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.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
@@ -64,6 +74,9 @@ public class ActivityService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private SetupGest gestSetup;
|
private SetupGest gestSetup;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private NotificationService notificationService;
|
||||||
|
|
||||||
|
|
||||||
public StbActivity uploadAttachment(String activityId, MultipartFile... files) throws Exception {
|
public StbActivity uploadAttachment(String activityId, MultipartFile... files) throws Exception {
|
||||||
List<StbActivityFile> stbActivityFiles = new ArrayList<>();
|
List<StbActivityFile> stbActivityFiles = new ArrayList<>();
|
||||||
@@ -555,10 +568,11 @@ 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<>();
|
List<EntityBase> entityList = new ArrayList<>();
|
||||||
|
|
||||||
|
try {
|
||||||
for (PlanActivityDTO planActivityDTO : planActivityDTOList) {
|
for (PlanActivityDTO planActivityDTO : planActivityDTOList) {
|
||||||
|
|
||||||
StbActivity parentStbActivity = new StbActivity();
|
StbActivity parentStbActivity = new StbActivity();
|
||||||
@@ -585,7 +599,7 @@ public class ActivityService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String sql = "SELECT user_name FROM stb_activity WHERE activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId());
|
String sql = "SELECT user_name FROM stb_activity WHERE activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId());
|
||||||
String userNameP = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
String userNameP = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||||
|
|
||||||
if ((userNameP.equalsIgnoreCase("DEV") ||
|
if ((userNameP.equalsIgnoreCase("DEV") ||
|
||||||
userNameP.equalsIgnoreCase("T0001") ||
|
userNameP.equalsIgnoreCase("T0001") ||
|
||||||
@@ -596,8 +610,6 @@ public class ActivityService {
|
|||||||
parentStbActivity.setOperation(OperationType.UPDATE);
|
parentStbActivity.setOperation(OperationType.UPDATE);
|
||||||
entityList.add(parentStbActivity);
|
entityList.add(parentStbActivity);
|
||||||
|
|
||||||
//Date startDate = UtilityDate.getWeekStartDate(planActivityDTO.getData());
|
|
||||||
|
|
||||||
if ("S".equalsIgnoreCase(planActivityDTO.getCreaAttivita())) {
|
if ("S".equalsIgnoreCase(planActivityDTO.getCreaAttivita())) {
|
||||||
boolean modifyUser = !planActivityDTO.getUsers().isEmpty();
|
boolean modifyUser = !planActivityDTO.getUsers().isEmpty();
|
||||||
if (modifyUser) parentStbActivity.setUserName(planActivityDTO.getUsers().get(0).getUsername());
|
if (modifyUser) parentStbActivity.setUserName(planActivityDTO.getUsers().get(0).getUsername());
|
||||||
@@ -652,11 +664,11 @@ public class ActivityService {
|
|||||||
" WHERE stb_activity.parent_activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId()) + " AND " +
|
" WHERE stb_activity.parent_activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId()) + " AND " +
|
||||||
"stb_activity.user_name = " + UtilityDB.valueToString(user.getUsername()) + " AND " +
|
"stb_activity.user_name = " + UtilityDB.valueToString(user.getUsername()) + " AND " +
|
||||||
"stb_activity.estimated_time = " + UtilityDB.valueDateToString(startDate, CommonConstants.DATETIME_FORMAT_YMD) +
|
"stb_activity.estimated_time = " + UtilityDB.valueDateToString(startDate, CommonConstants.DATETIME_FORMAT_YMD) +
|
||||||
(!UtilityString.isNullOrEmpty(planActivityDTO.getDescription())?
|
(!UtilityString.isNullOrEmpty(planActivityDTO.getDescription()) ?
|
||||||
" AND " +
|
" AND " +
|
||||||
"stb_activity.activity_description = " + UtilityDB.valueToString(planActivityDTO.getDescription()):"");
|
"stb_activity.activity_description = " + UtilityDB.valueToString(planActivityDTO.getDescription()) : "");
|
||||||
|
|
||||||
String activityId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
String activityId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||||
|
|
||||||
if (activityId == null) {
|
if (activityId == null) {
|
||||||
String query =
|
String query =
|
||||||
@@ -665,7 +677,7 @@ public class ActivityService {
|
|||||||
" FROM srl_activity_type " +
|
" FROM srl_activity_type " +
|
||||||
" WHERE activity_type_id = " + UtilityDB.valueToString(parentStbActivity.getActivityTypeId());
|
" 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();
|
String activityTypeId = planActivityDTO.getActivityTypeId();
|
||||||
if (activityTypeId == null) {
|
if (activityTypeId == null) {
|
||||||
@@ -683,9 +695,7 @@ public class ActivityService {
|
|||||||
description = parentStbActivity.getActivityDescription();
|
description = parentStbActivity.getActivityDescription();
|
||||||
}
|
}
|
||||||
|
|
||||||
StbActivity newStbActivity = new StbActivity();
|
StbActivity newStbActivity = new StbActivity()
|
||||||
newStbActivity.setOperation(OperationType.INSERT);
|
|
||||||
newStbActivity
|
|
||||||
.setParentActivityId(parentStbActivity.getActivityId())
|
.setParentActivityId(parentStbActivity.getActivityId())
|
||||||
.setUserName(user.getUsername())
|
.setUserName(user.getUsername())
|
||||||
.setEstimatedTime(startDate)
|
.setEstimatedTime(startDate)
|
||||||
@@ -693,12 +703,48 @@ public class ActivityService {
|
|||||||
.setActivityType(activityTypeId)
|
.setActivityType(activityTypeId)
|
||||||
.setFlagTipologia("A")
|
.setFlagTipologia("A")
|
||||||
.setActivityDescription(description)
|
.setActivityDescription(description)
|
||||||
.setUserCreator(userCreator)
|
.setUserCreator(requestDataDTO.getUsername())
|
||||||
.setActivityResultId("DA FARE");
|
.setActivityResultId("DA FARE");
|
||||||
|
|
||||||
entityList.add(newStbActivity);
|
newStbActivity.setOperation(OperationType.INSERT);
|
||||||
|
entityProcessor.processEntity(newStbActivity, true, multiDBTransactionManager);
|
||||||
|
|
||||||
logger.trace(String.format("Inserita attività #%s all'utente %s", newStbActivity.getActivityId(), user.getUsername()));
|
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)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sql =
|
sql =
|
||||||
@@ -706,7 +752,7 @@ public class ActivityService {
|
|||||||
" FROM stb_activity " +
|
" FROM stb_activity " +
|
||||||
" WHERE stb_activity.activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId());
|
" WHERE stb_activity.activity_id = " + UtilityDB.valueToString(parentStbActivity.getActivityId());
|
||||||
|
|
||||||
String resultId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
String resultId = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||||
if (UtilityString.isNullOrEmpty(resultId)) {
|
if (UtilityString.isNullOrEmpty(resultId)) {
|
||||||
parentStbActivity.setActivityResult("DA FARE");
|
parentStbActivity.setActivityResult("DA FARE");
|
||||||
parentStbActivity.setOperation(OperationType.UPDATE);
|
parentStbActivity.setOperation(OperationType.UPDATE);
|
||||||
@@ -727,6 +773,10 @@ public class ActivityService {
|
|||||||
entityProcessor.processEntityList(entityList, true);
|
entityProcessor.processEntityList(entityList, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
multiDBTransactionManager.rollbackAll();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActivityDTO changeCodJcom(String activityId, String codJcom, String parentActivityId) throws Exception {
|
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);
|
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" +
|
String sql = "SELECT cod_jcom, descrizione \n" +
|
||||||
"FROM jtb_comt \n" +
|
"FROM jtb_comt \n" +
|
||||||
"WHERE stato_commessa IN ('IN CORSO', 'POST VENDITA', 'TRATTATIVA') \n";
|
"WHERE stato_commessa IN ('IN CORSO', 'POST VENDITA', 'TRATTATIVA') \n";
|
||||||
|
|
||||||
if (username != null && !username.isEmpty()) {
|
if (username != null && !username.isEmpty()) {
|
||||||
sql += Query.format("AND cod_jflav_tec = %s \n", username);
|
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";
|
sql += "ORDER BY cod_jcom ASC";
|
||||||
@@ -1226,20 +1278,22 @@ public class ActivityService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void insertOrUpdateActivity(ActivityDTO activity) throws Exception {
|
public void insertOrUpdateActivity(ActivityDTO activity) throws Exception {
|
||||||
|
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
||||||
String codAnagPersRif, codAnag;
|
String codAnagPersRif, codAnag;
|
||||||
|
|
||||||
if (!UtilityString.isNullOrEmpty(activity.getEmailRichiedente())) {
|
if (!UtilityString.isNullOrEmpty(activity.getEmailRichiedente())) {
|
||||||
String query = "SELECT vtb_clie_pers_rif.cod_anag FROM vtb_clie_pers_rif, vtb_clie "
|
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 "
|
+ "WHERE vtb_clie_pers_rif.cod_anag = vtb_clie.cod_anag AND "
|
||||||
+ "vtb_clie.flag_stato = 'A' AND vtb_clie_pers_rif.e_mail = "
|
+ "vtb_clie.flag_stato = 'A' AND vtb_clie_pers_rif.e_mail = "
|
||||||
+ UtilityDB.valueToString(activity.getEmailRichiedente());
|
+ UtilityDB.valueToString(activity.getEmailRichiedente());
|
||||||
|
|
||||||
codAnagPersRif = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
|
codAnagPersRif = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, query);
|
||||||
|
|
||||||
if (UtilityString.isNullOrEmpty(codAnagPersRif)) {
|
if (UtilityString.isNullOrEmpty(codAnagPersRif)) {
|
||||||
query = "SELECT cod_anag FROM jtb_comt WHERE cod_jcom = "
|
query = "SELECT cod_anag FROM jtb_comt WHERE cod_jcom = "
|
||||||
+ UtilityDB.valueToString(activity.getCommessa());
|
+ UtilityDB.valueToString(activity.getCommessa());
|
||||||
|
|
||||||
codAnag = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
|
codAnag = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, query);
|
||||||
|
|
||||||
String domainIntegry = "integry.it";
|
String domainIntegry = "integry.it";
|
||||||
if (!UtilityString.isNullOrEmpty(codAnag) && !activity.getEmailRichiedente().toUpperCase().contains(domainIntegry.toUpperCase())) {
|
if (!UtilityString.isNullOrEmpty(codAnag) && !activity.getEmailRichiedente().toUpperCase().contains(domainIntegry.toUpperCase())) {
|
||||||
@@ -1267,7 +1321,7 @@ public class ActivityService {
|
|||||||
activity.getFlagTipologia()
|
activity.getFlagTipologia()
|
||||||
);
|
);
|
||||||
|
|
||||||
String codJfas = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
|
String codJfas = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, sql);
|
||||||
|
|
||||||
StbActivity stbActivity = new StbActivity();
|
StbActivity stbActivity = new StbActivity();
|
||||||
stbActivity.setOperation(OperationType.INSERT_OR_UPDATE);
|
stbActivity.setOperation(OperationType.INSERT_OR_UPDATE);
|
||||||
@@ -1290,7 +1344,72 @@ public class ActivityService {
|
|||||||
.setParentActivityId(activity.getParentActivityId())
|
.setParentActivityId(activity.getParentActivityId())
|
||||||
.setCodJfas(codJfas);
|
.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 && !UtilityString.equalsIgnoreCase(oldActivity.getActivityResultId(), 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 {
|
public void updateActivityTask(ActivityTaskDTO activity) throws Exception {
|
||||||
@@ -1801,14 +1920,14 @@ public class ActivityService {
|
|||||||
}
|
}
|
||||||
if (utentiDb == null) {
|
if (utentiDb == null) {
|
||||||
utentiDb = new ArrayList<>();
|
utentiDb = new ArrayList<>();
|
||||||
}else{
|
} else {
|
||||||
utentiDb.forEach(x -> x.setOperation(OperationType.DELETE));
|
utentiDb.forEach(x -> x.setOperation(OperationType.DELETE));
|
||||||
plan.getSrlActivityPlanUser().addAll(utentiDb);
|
plan.getSrlActivityPlanUser().addAll(utentiDb);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String username : dto.getUsers()) {
|
for (String username : dto.getUsers()) {
|
||||||
SrlActivityPlanUser user = utentiDb.stream().filter(x -> x.getUserName().equalsIgnoreCase(username)).findFirst().orElse(null);
|
SrlActivityPlanUser user = utentiDb.stream().filter(x -> x.getUserName().equalsIgnoreCase(username)).findFirst().orElse(null);
|
||||||
if (user == null){
|
if (user == null) {
|
||||||
user = new SrlActivityPlanUser();
|
user = new SrlActivityPlanUser();
|
||||||
plan.getSrlActivityPlanUser().add(user);
|
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.utility.service.UtilityService;
|
||||||
import it.integry.ems_model.entity.JtbRLavr;
|
import it.integry.ems_model.entity.JtbRLavr;
|
||||||
import it.integry.ems_model.entity.JtbRLavt;
|
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.exception.DataConverterNotFoundException;
|
||||||
import it.integry.ems_model.service.SetupGest;
|
import it.integry.ems_model.service.SetupGest;
|
||||||
import it.integry.ems_model.types.OperationType;
|
import it.integry.ems_model.types.OperationType;
|
||||||
@@ -236,6 +237,7 @@ public class UserWorkHoursService {
|
|||||||
|
|
||||||
notificationService.sendNotificationToUserDevices(new MessageDTO()
|
notificationService.sendNotificationToUserDevices(new MessageDTO()
|
||||||
.setUserName(user.getUsername())
|
.setUserName(user.getUsername())
|
||||||
|
.setAppName(WtbUserDeviceToken.AppName.WINCLOCK)
|
||||||
.setNotification(new NotificationDTO()
|
.setNotification(new NotificationDTO()
|
||||||
.setTitle("Brav*")
|
.setTitle("Brav*")
|
||||||
.setBody("Hai completato le tue 8 ore di lavoro giornaliere 😁🙌"))
|
.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 {
|
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);
|
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
|
//Ignoro le prime tre righe di intestazione
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
if (rowIterator.hasNext()) {
|
if (rowIterator.hasNext()) {
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class ToscaSalesService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<ToscaOrdineVenditaDTO> parseFile(InputStream inputStream) throws Exception {
|
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<ToscaOrdineVenditaDTO> ordiniDaImportare = new ArrayList<>();
|
||||||
|
|
||||||
List<Long> diacodNotFound = 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");
|
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<>();
|
List<RifOrdApuliaDTO> rifOrdApuliaList = new ArrayList<>();
|
||||||
|
|
||||||
while (rowIterator.hasNext()) {
|
while (rowIterator.hasNext()) {
|
||||||
|
|||||||
@@ -652,6 +652,7 @@ public class FarmMesIsaporcService {
|
|||||||
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
||||||
PreparedStatement info;
|
PreparedStatement info;
|
||||||
ResultSet res;
|
ResultSet res;
|
||||||
|
BigDecimal qtaInProd = BigDecimal.ZERO;
|
||||||
|
|
||||||
String codJcom = jsonBody.get("codJcom").asText();
|
String codJcom = jsonBody.get("codJcom").asText();
|
||||||
String lottoProv = jsonBody.get("lottoProv").asText();
|
String lottoProv = jsonBody.get("lottoProv").asText();
|
||||||
@@ -715,11 +716,11 @@ public class FarmMesIsaporcService {
|
|||||||
res.close();
|
res.close();
|
||||||
info.close();
|
info.close();
|
||||||
|
|
||||||
if (dataOrdRistallo == null) {
|
/* if (dataOrdRistallo == null) {
|
||||||
throw new Exception("Non è stato possibile individuare l'ordine di RISTALLO " + bandaRistallo);
|
throw new Exception("Non è stato possibile individuare l'ordine di RISTALLO " + bandaRistallo);
|
||||||
} else if (dataOrdRistallo.after(dataTrasf)) {
|
} else if (dataOrdRistallo.after(dataTrasf)) {
|
||||||
throw new Exception("La data di trsferimento da RISTALLO alla soccida " + codJcom + " è antecedente alla data del ristallo.");
|
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
|
// Aggiornamento documenti di caricno/scarico sostituendo il lotto specificato dall'operatore in fase
|
||||||
// di immissione in produzione su FARMMES con il lotto di RISTALLO
|
// 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, " +
|
sql = "select dtb_ord_steps.id_riga, " +
|
||||||
"dtb_ord_steps.id_step, " +
|
"dtb_ord_steps.id_step, " +
|
||||||
"dtb_ord_steps.num_fase, " +
|
"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 " +
|
"from dtb_ord_Steps, dtb_ordt " +
|
||||||
"where dtb_ord_steps.data_fine is null and " +
|
"where dtb_ord_steps.data_fine is null and " +
|
||||||
"dtb_ordt.gestione = 'L' and " +
|
"dtb_ordt.gestione = 'L' and " +
|
||||||
@@ -785,6 +787,7 @@ public class FarmMesIsaporcService {
|
|||||||
idStep = res.getInt(2);
|
idStep = res.getInt(2);
|
||||||
numFase = res.getInt(3);
|
numFase = res.getInt(3);
|
||||||
codJfasRow = res.getString(4);
|
codJfasRow = res.getString(4);
|
||||||
|
qtaInProd = res.getBigDecimal(5);
|
||||||
}
|
}
|
||||||
res.close();
|
res.close();
|
||||||
info.close();
|
info.close();
|
||||||
@@ -810,6 +813,11 @@ public class FarmMesIsaporcService {
|
|||||||
ordSteps.setCodJfas(codJfasRow);
|
ordSteps.setCodJfas(codJfasRow);
|
||||||
ordSteps.setDataIniz(dataTrasf);
|
ordSteps.setDataIniz(dataTrasf);
|
||||||
ordSteps.setNote("TRASFERIMENTO A SOCCIDA " + codJcom);
|
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);
|
ordSteps.setQtaTrasferite(qtaTrasf);
|
||||||
ordLav.getDtbOrdSteps().add(ordSteps);
|
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.entity.DtbDoctCambioTipoDoc;
|
||||||
import it.integry.ems_model.service.SetupGest;
|
import it.integry.ems_model.service.SetupGest;
|
||||||
import it.integry.ems_model.types.OperationType;
|
import it.integry.ems_model.types.OperationType;
|
||||||
|
import it.integry.ems_model.utility.UtilityDate;
|
||||||
import it.integry.ems_model.utility.UtilityString;
|
import it.integry.ems_model.utility.UtilityString;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
@@ -35,6 +36,7 @@ public class CambioTipoDocService {
|
|||||||
private SetupGest setupGest;
|
private SetupGest setupGest;
|
||||||
@Autowired
|
@Autowired
|
||||||
private RequestDataDTO requestDataDTO;
|
private RequestDataDTO requestDataDTO;
|
||||||
|
|
||||||
public List<EntityBase> cambioTipoDoc(String codDtip, List<CambioTipoDocDTO> documenti) throws Exception {
|
public List<EntityBase> cambioTipoDoc(String codDtip, List<CambioTipoDocDTO> documenti) throws Exception {
|
||||||
List<EntityBase> entityList = new ArrayList<>();
|
List<EntityBase> entityList = new ArrayList<>();
|
||||||
final String gestName = "W_ACAMBIO_COD_DTIP_DISP";
|
final String gestName = "W_ACAMBIO_COD_DTIP_DISP";
|
||||||
@@ -46,8 +48,8 @@ public class CambioTipoDocService {
|
|||||||
if (UtilityString.isNullOrEmpty(emailForLog))
|
if (UtilityString.isNullOrEmpty(emailForLog))
|
||||||
throw new Exception(String.format("Email a cui inviare il log non configurata -> %s ->%s -> EMAIL_FOR_LOG", gestName, section));
|
throw new Exception(String.format("Email a cui inviare il log non configurata -> %s ->%s -> EMAIL_FOR_LOG", gestName, section));
|
||||||
|
|
||||||
if ( pianifica ) {
|
if (pianifica) {
|
||||||
for (CambioTipoDocDTO c: documenti ){
|
for (CambioTipoDocDTO c : documenti) {
|
||||||
DtbDoctCambioTipoDoc dtbDoctCambioTipoDoc =
|
DtbDoctCambioTipoDoc dtbDoctCambioTipoDoc =
|
||||||
new DtbDoctCambioTipoDoc()
|
new DtbDoctCambioTipoDoc()
|
||||||
.setCodAnag(c.getCodAnag())
|
.setCodAnag(c.getCodAnag())
|
||||||
@@ -65,7 +67,7 @@ public class CambioTipoDocService {
|
|||||||
|
|
||||||
if (c.getAllegati() != null && !c.getAllegati().isEmpty()) {
|
if (c.getAllegati() != null && !c.getAllegati().isEmpty()) {
|
||||||
for (CambioTipoDocDTO.Allegati a : c.getAllegati()) {
|
for (CambioTipoDocDTO.Allegati a : c.getAllegati()) {
|
||||||
if ( dtbDoctCambioTipoDoc.getIdAllegato() == null ) {
|
if (dtbDoctCambioTipoDoc.getIdAllegato() == null) {
|
||||||
dtbDoctCambioTipoDoc.setIdAllegato(a.getIdAllegato());
|
dtbDoctCambioTipoDoc.setIdAllegato(a.getIdAllegato());
|
||||||
entityList.add(dtbDoctCambioTipoDoc);
|
entityList.add(dtbDoctCambioTipoDoc);
|
||||||
} else {
|
} else {
|
||||||
@@ -107,13 +109,19 @@ public class CambioTipoDocService {
|
|||||||
newDoc.setOperation(OperationType.SELECT_OBJECT);
|
newDoc.setOperation(OperationType.SELECT_OBJECT);
|
||||||
newDoc = entityProcessor.processEntity(newDoc, multiDBTransactionManager);
|
newDoc = entityProcessor.processEntity(newDoc, multiDBTransactionManager);
|
||||||
loadRow(newDoc);
|
loadRow(newDoc);
|
||||||
|
Date dataCmov = doc.getDataCmov();
|
||||||
|
if (dataCmov.before(UtilityDate.getTodayWithoutTime())) {
|
||||||
|
dataCmov = UtilityDate.getTodayWithoutTime();
|
||||||
|
}
|
||||||
|
|
||||||
newDoc
|
newDoc
|
||||||
.setCodDtip(doc.getCodDtipNew())
|
.setCodDtip(doc.getCodDtipNew())
|
||||||
.setPrevistaFat(null)
|
.setPrevistaFat(null)
|
||||||
|
.setDataCmov(dataCmov)
|
||||||
.setNumDocForn(doc.getNumDocForn());
|
.setNumDocForn(doc.getNumDocForn());
|
||||||
|
|
||||||
newDoc.setOperation(OperationType.INSERT);
|
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()) {
|
if (doc.getAllegati() != null && !doc.getAllegati().isEmpty()) {
|
||||||
List<DrlDocAttached> drlDocAttacheds = new ArrayList<>();
|
List<DrlDocAttached> drlDocAttacheds = new ArrayList<>();
|
||||||
for (CambioTipoDocDTO.Allegati allegato : doc.getAllegati()) {
|
for (CambioTipoDocDTO.Allegati allegato : doc.getAllegati()) {
|
||||||
|
|||||||
@@ -88,7 +88,9 @@ public class DocumentiDirettiService {
|
|||||||
|
|
||||||
}
|
}
|
||||||
//controllo packingList documento per eventuali trasferimenti
|
//controllo packingList documento per eventuali trasferimenti
|
||||||
|
if (dtbDoct.getGestione().equalsIgnoreCase("V")) {
|
||||||
checkUDSForTransfer(dtbDoct, entityList, isInsert);
|
checkUDSForTransfer(dtbDoct, entityList, isInsert);
|
||||||
|
}
|
||||||
|
|
||||||
if (UtilityString.equalsIgnoreCase((String) datiTipoDoc.get("gestione"), "A")) {
|
if (UtilityString.equalsIgnoreCase((String) datiTipoDoc.get("gestione"), "A")) {
|
||||||
if (!isInsert && dtbDoct.getOldPk() != null) {
|
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.AnomalieDTO;
|
||||||
import it.integry.ems.Import.dto.ImportRequestDTO;
|
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.accettazione.service.WMSAccettazioneService;
|
||||||
import it.integry.ems.retail.wms.dto.CloseUDCRequestDTO;
|
import it.integry.ems.retail.wms.dto.CloseUDCRequestDTO;
|
||||||
import it.integry.ems.retail.wms.dto.CreateUDCRequestDTO;
|
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.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||||
import it.integry.ems_model.base.EntityBase;
|
import it.integry.ems_model.base.EntityBase;
|
||||||
import it.integry.ems_model.entity.DtbOrdr;
|
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.entity.MtbColt;
|
||||||
import it.integry.ems_model.service.SetupGest;
|
import it.integry.ems_model.service.SetupGest;
|
||||||
import it.integry.ems_model.types.OperationType;
|
import it.integry.ems_model.types.OperationType;
|
||||||
import it.integry.ems_model.utility.*;
|
import it.integry.ems_model.utility.*;
|
||||||
import org.apache.poi.ss.usermodel.Cell;
|
import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.ss.usermodel.CellType;
|
import org.bouncycastle.crypto.engines.BlowfishEngine;
|
||||||
import org.apache.poi.ss.usermodel.DateUtil;
|
|
||||||
import org.apache.poi.ss.usermodel.Row;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -54,7 +51,11 @@ public class ColliEviosysImportService {
|
|||||||
|
|
||||||
String codAnag = setup.get("COD_ANAG");
|
String codAnag = setup.get("COD_ANAG");
|
||||||
|
|
||||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO);
|
Iterator<Sheet> sheetIterator = UtilityExcel.readXlsxFile(requestDTO, Sheet.class);
|
||||||
|
|
||||||
|
while (sheetIterator.hasNext()) {
|
||||||
|
Sheet sheet = sheetIterator.next();
|
||||||
|
Iterator<Row> rowIterator = UtilityExcel.getRowIterator(sheet, true);
|
||||||
|
|
||||||
String codMart = null;
|
String codMart = null;
|
||||||
boolean hasHeaderPassed = false;
|
boolean hasHeaderPassed = false;
|
||||||
@@ -86,7 +87,11 @@ public class ColliEviosysImportService {
|
|||||||
if (rowData.size() >= 7) {
|
if (rowData.size() >= 7) {
|
||||||
String barcodeUl = (String) rowData.get(2);
|
String barcodeUl = (String) rowData.get(2);
|
||||||
String lotto = (String) rowData.get(3);
|
String lotto = (String) rowData.get(3);
|
||||||
String qta = (String) rowData.get(6);
|
BigDecimal qta = UtilityString.stringToBigDecimal(
|
||||||
|
rowData.get(6)
|
||||||
|
.toString()
|
||||||
|
.replace(".", "")
|
||||||
|
);
|
||||||
|
|
||||||
barcodeUl = barcodeUl.replace("*", "");
|
barcodeUl = barcodeUl.replace("*", "");
|
||||||
|
|
||||||
@@ -117,6 +122,12 @@ public class ColliEviosysImportService {
|
|||||||
);
|
);
|
||||||
DtbOrdr dtbOrdr = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, sql, DtbOrdr.class);
|
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(
|
MtbColt udc = wmsAccettazioneService.createUDC(
|
||||||
new CreateUDCRequestDTO()
|
new CreateUDCRequestDTO()
|
||||||
.setCodMdep(dtbOrdr.getCodMdep())
|
.setCodMdep(dtbOrdr.getCodMdep())
|
||||||
@@ -132,7 +143,7 @@ public class ColliEviosysImportService {
|
|||||||
.setTargetMtbColt(udc)
|
.setTargetMtbColt(udc)
|
||||||
.setCodMart(codMart)
|
.setCodMart(codMart)
|
||||||
.setPartitaMag(lotto)
|
.setPartitaMag(lotto)
|
||||||
.setQtaTot(UtilityString.stringToBigDecimal(qta))
|
.setQtaTot(qta)
|
||||||
.setDataOrd(UtilityLocalDate.localDateFromDate(dtbOrdr.getDataOrd()))
|
.setDataOrd(UtilityLocalDate.localDateFromDate(dtbOrdr.getDataOrd()))
|
||||||
.setNumOrd(dtbOrdr.getNumOrd())
|
.setNumOrd(dtbOrdr.getNumOrd())
|
||||||
.setRigaOrd(dtbOrdr.getRigaOrd())
|
.setRigaOrd(dtbOrdr.getRigaOrd())
|
||||||
@@ -144,6 +155,7 @@ public class ColliEviosysImportService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return entityBases;
|
return entityBases;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,9 +15,11 @@ import org.apache.logging.log4j.LogManager;
|
|||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -95,4 +97,28 @@ public class CrmController {
|
|||||||
}
|
}
|
||||||
return response;
|
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.entity.*;
|
||||||
import it.integry.ems_model.service.SetupGest;
|
import it.integry.ems_model.service.SetupGest;
|
||||||
import it.integry.ems_model.types.OperationType;
|
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.UtilityDB;
|
||||||
import it.integry.ems_model.utility.UtilityDate;
|
import it.integry.ems_model.utility.UtilityDate;
|
||||||
import it.integry.ems_model.utility.UtilityString;
|
import it.integry.ems_model.utility.UtilityString;
|
||||||
@@ -30,6 +31,7 @@ import java.math.BigDecimal;
|
|||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -1351,4 +1353,114 @@ public class CrmService {
|
|||||||
}
|
}
|
||||||
return entities;
|
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();
|
Connection conn = multiDBTransactionManager.getPrimaryConnection();
|
||||||
Map<String, String> setup = setupGest.getImportSetupSection(conn, type, format);
|
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<>();
|
List<AtbGriglieArt> atbGriglieArtList = new ArrayList<>();
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class ImportGrigliaVenditaService {
|
|||||||
List<VtbGriglia> vtbGrigliaList = new ArrayList<>();
|
List<VtbGriglia> vtbGrigliaList = new ArrayList<>();
|
||||||
HashMap<String, List<String>> hashMap = new HashMap<>();
|
HashMap<String, List<String>> hashMap = new HashMap<>();
|
||||||
|
|
||||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO);
|
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO, Row.class);
|
||||||
while (rowIterator.hasNext()) {
|
while (rowIterator.hasNext()) {
|
||||||
Row row = rowIterator.next();
|
Row row = rowIterator.next();
|
||||||
String codGriglia = UtilityExcel.getCellAsString(row, 0, true);
|
String codGriglia = UtilityExcel.getCellAsString(row, 0, true);
|
||||||
|
|||||||
@@ -316,7 +316,7 @@ public class ImportListiniVenditaService {
|
|||||||
if (UtilityString.isNullOrEmpty(fileName))
|
if (UtilityString.isNullOrEmpty(fileName))
|
||||||
fileName = setup.get("FILE_FILTER");
|
fileName = setup.get("FILE_FILTER");
|
||||||
|
|
||||||
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO);
|
Iterator<Row> rowIterator = UtilityExcel.readXlsxFile(requestDTO, Row.class);
|
||||||
|
|
||||||
while (rowIterator.hasNext()) {
|
while (rowIterator.hasNext()) {
|
||||||
Row row = rowIterator.next();
|
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.common.var.CommonConstants;
|
||||||
import it.integry.ems.document.dto.ChiusuraLavorazioneDTO;
|
import it.integry.ems.document.dto.ChiusuraLavorazioneDTO;
|
||||||
import it.integry.ems.javabeans.RequestDataDTO;
|
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.dto.*;
|
||||||
import it.integry.ems.production.service.MesProductionServiceV2;
|
import it.integry.ems.production.service.MesProductionServiceV2;
|
||||||
import it.integry.ems.production.service.ProductionLineService;
|
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.service.production.ProductionOrderDataHandlerService;
|
||||||
import it.integry.ems.status.ServiceChecker;
|
import it.integry.ems.status.ServiceChecker;
|
||||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
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.config.EmsRestConstants;
|
||||||
import it.integry.ems_model.entity.MtbColt;
|
import it.integry.ems_model.entity.MtbColt;
|
||||||
import it.integry.ems_model.types.OperationType;
|
import it.integry.ems_model.types.OperationType;
|
||||||
@@ -474,6 +476,13 @@ public class MesProductionControllerV2 {
|
|||||||
ServiceRestResponse reopenOrdineLav(@RequestBody ReopenOrdineLavRequestDTO dto) throws Exception {
|
ServiceRestResponse reopenOrdineLav(@RequestBody ReopenOrdineLavRequestDTO dto) throws Exception {
|
||||||
productionOrdersLifecycleService.reopenOrdineLav(dto);
|
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();
|
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.document.dto.ScaricoLavorazioneDTO;
|
||||||
import it.integry.ems.exception.MissingDataException;
|
import it.integry.ems.exception.MissingDataException;
|
||||||
import it.integry.ems.javabeans.RequestDataDTO;
|
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.production.dto.ReopenOrdineLavRequestDTO;
|
||||||
import it.integry.ems.service.AziendaService;
|
import it.integry.ems.service.AziendaService;
|
||||||
import it.integry.ems.service.EntityProcessor;
|
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.UtilityDebug;
|
||||||
import it.integry.ems.utility.UtilityEntity;
|
import it.integry.ems.utility.UtilityEntity;
|
||||||
import it.integry.ems_model.config.EmsRestConstants;
|
import it.integry.ems_model.config.EmsRestConstants;
|
||||||
import it.integry.ems_model.entity.DtbDoct;
|
import it.integry.ems_model.entity.*;
|
||||||
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.service.SetupGest;
|
import it.integry.ems_model.service.SetupGest;
|
||||||
import it.integry.ems_model.types.OperationType;
|
import it.integry.ems_model.types.OperationType;
|
||||||
import it.integry.ems_model.utility.*;
|
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.context.annotation.Scope;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -332,4 +331,101 @@ public class ProductionOrdersLifecycleService {
|
|||||||
throw e;
|
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.annotation.JsonProperty;
|
||||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||||
import it.integry.ems.adapter.JsonDateAdapterSerializer;
|
import it.integry.ems.adapter.JsonDateAdapterSerializer;
|
||||||
|
import it.integry.ems.service.dto.production.AvailableClassMercDTO;
|
||||||
import it.integry.ems_model.annotation.SqlField;
|
import it.integry.ems_model.annotation.SqlField;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
@@ -608,30 +609,6 @@ public class OrdineInevasoDTO {
|
|||||||
return this;
|
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() {
|
public String getCodVdes() {
|
||||||
return codVdes;
|
return codVdes;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
package it.integry.ems.retail.wms.generic.dto.articolo;
|
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.annotation.SqlField;
|
||||||
import it.integry.ems_model.config.EmsRestConstants;
|
|
||||||
import it.integry.ems_model.entity.MtbAart;
|
import it.integry.ems_model.entity.MtbAart;
|
||||||
import it.integry.ems_model.utility.UtilityString;
|
import it.integry.ems_model.utility.UtilityString;
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import it.integry.ems.rules.completing.PackagesRules;
|
|||||||
import it.integry.ems.service.AziendaService;
|
import it.integry.ems.service.AziendaService;
|
||||||
import it.integry.ems.service.EntityProcessor;
|
import it.integry.ems.service.EntityProcessor;
|
||||||
import it.integry.ems.service.PrinterService;
|
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.service.dto.production.OrdineInevasoGroupMercDTO;
|
||||||
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
|
||||||
import it.integry.ems.user.UserSession;
|
import it.integry.ems.user.UserSession;
|
||||||
@@ -277,7 +278,7 @@ public class WMSGenericService {
|
|||||||
|
|
||||||
for (Map.Entry<String, List<OrdineInevasoGroupMercDTO>> entry : groups.entrySet()) {
|
for (Map.Entry<String, List<OrdineInevasoGroupMercDTO>> entry : groups.entrySet()) {
|
||||||
order.getAvailableClassMerc()
|
order.getAvailableClassMerc()
|
||||||
.add(new OrdineInevasoDTO.AvailableClassMercDTO()
|
.add(new AvailableClassMercDTO()
|
||||||
.setCodMgrp(entry.getKey())
|
.setCodMgrp(entry.getKey())
|
||||||
.setCodMsgr(entry.getValue().stream()
|
.setCodMsgr(entry.getValue().stream()
|
||||||
.map(OrdineInevasoGroupMercDTO::getCodMsgr)
|
.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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
39647
ts/ems-engine.module.ts
Normal file
39647
ts/ems-engine.module.ts
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user