Merge branch 'develop' into feature/Feature-FatturaDiffertita
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2024-12-20 18:04:14 +01:00
12 changed files with 277 additions and 83 deletions

View File

@@ -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_20241218123227 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement(
"ALTER TABLE vtb_viaggi\n" +
" ADD incoterms VARCHAR(20)\n" +
" CONSTRAINT vtb_viaggi_gtb_porto_porto_fk\n" +
" REFERENCES dbo.gtb_porto(porto)"
);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -9,14 +9,29 @@ public class Migration_20241219100410 extends BaseMigration implements Migration
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("ALTER TABLE gtb_porto\n" +
" ADD flag_incoterms bit not null default 0",
executeStatement(
"ALTER TABLE gtb_porto\n" +
" ADD costo varchar (1)",
" ADD flag_incoterms BIT NOT NULL DEFAULT 0",
"ALTER TABLE gtb_porto\n" +
" ADD assicurazioni varchar (1)",
" ADD costo TINYINT NOT NULL DEFAULT 0\n" +
" CHECK ([costo] = 0 OR [costo] = 1 OR [costo] = 2)",
"ALTER TABLE gtb_porto\n" +
" ADD rischi varchar (1)");
" ADD assicurazione TINYINT NOT NULL DEFAULT 0\n" +
" CHECK ([assicurazione] = 0 OR [assicurazione] = 1 OR [assicurazione] = 2)",
"ALTER TABLE gtb_porto\n" +
" ADD rischi TINYINT NOT NULL DEFAULT 0\n" +
" CHECK ([rischi] = 0 OR [rischi] = 1 OR [rischi] = 2)"
);
executeStatement(
"EXEC sp_addextendedproperty 'MS_Description', 'Valori possibili: 0 -> Nessuno, 1 -> Acquirente, 2 -> Venditore',\n" +
" 'SCHEMA', 'dbo', 'TABLE', 'gtb_porto', 'COLUMN', 'costo';",
"EXEC sp_addextendedproperty 'MS_Description', 'Valori possibili: 0 -> Vuoto, 1 -> Acquirente, 2 -> Venditore', 'SCHEMA',\n" +
" 'dbo', 'TABLE', 'gtb_porto', 'COLUMN', 'assicurazione';",
"EXEC sp_addextendedproperty 'MS_Description', 'Valori possibili: 0 -> Nessuno, 1 -> Acquirente, 2 -> Venditore',\n" +
" 'SCHEMA', 'dbo', 'TABLE', 'gtb_porto', 'COLUMN', 'rischi';"
);
}
@Override

View File

@@ -0,0 +1,25 @@
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.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20241219162201 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomer(IntegryCustomer.RossoGargano) && isCustomerDb(IntegryCustomerDB.RossoGargano_RossoGargano))
executeInsertStatement("INSERT INTO stb_gest_setup_depo (cod_mdep, gest_name, section, key_section, value)\n" +
"SELECT cod_mdep, N'PICKING', N'LOGISTICA', N'COD_DTIP_DOC_TRASF_INTERNI', IIF(cod_mdep = '01', N'R4', N'R3')\n" +
"FROM mtb_depo\n" +
"WHERE cod_anag = 'F0002';");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -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_20241220102743 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("update stb_gest_sync set syncronize = 'R' where entity_name = 'gtb_tipi_paga'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,35 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20241220160152 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement(
"insert into gtb_porto (porto)\n" +
" select *\n" +
" from dbo.ParseStringIntoArray('CFR|CIF|CIP|CPT|DAP|DDP|DPU|EXW|FAS|FCA-A|FCA-B|FOB','|')\n" +
" where not exists (select * from gtb_porto where gtb_porto.porto = value_string )",
"UPDATE gtb_porto SET descrizione = 'COSTO E TRASPORTO', costo = 2, cod_cons_intracee = 'C', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 1, flag_incoterms = 1, rischi = 1, assicurazione = 1 WHERE porto = 'CFR'",
"UPDATE gtb_porto SET descrizione = 'ASSICURAZIONE COSTO E TRASPORTO', costo = 2, cod_cons_intracee = 'C', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 1, assicurazione = 1 WHERE porto = 'CIF'",
"UPDATE gtb_porto SET descrizione = 'TRASPORTO E ASSICURAZIONE PAGATI FINO A', costo = 2, cod_cons_intracee = 'C', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 1, assicurazione = 2 WHERE porto = 'CIP'",
"UPDATE gtb_porto SET descrizione = 'TRASPORTO PAGATO FINO A', costo = 2, cod_cons_intracee = 'C', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 1, assicurazione = 1 WHERE porto = 'CPT'",
"UPDATE gtb_porto SET descrizione = 'CONSEGNATO NEL LUOGO DI DESTINAZIONE', costo = 2, cod_cons_intracee = 'D', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 2, assicurazione = 2 WHERE porto = 'DAP'",
"UPDATE gtb_porto SET descrizione = 'CONSEGNATO SDOGANATO', costo = 2, cod_cons_intracee = 'D', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 2, assicurazione = 2 WHERE porto = 'DDP'",
"UPDATE gtb_porto SET descrizione = 'CONSEGNATO NEL LUOGO DI SCARICO', costo = 2, cod_cons_intracee = 'D', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 2, assicurazione = 2 WHERE porto = 'DPU'",
"UPDATE gtb_porto SET descrizione = 'FRANCO FABBRICA', costo = 1, cod_cons_intracee = 'E', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 1, assicurazione = 1 WHERE porto = 'EXW'",
"UPDATE gtb_porto SET descrizione = 'FRANCO LUNGO LA NAVE', costo = 1, cod_cons_intracee = 'F', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 1, assicurazione = 1 WHERE porto = 'FAS'",
"UPDATE gtb_porto SET descrizione = 'VETTORE LIBERO', costo = 1, cod_cons_intracee = 'F', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 1, assicurazione = 1 WHERE porto = 'FCA-A'",
"UPDATE gtb_porto SET descrizione = 'VETTORE LIBERO', costo = 1, cod_cons_intracee = 'F', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 1, assicurazione = 1 WHERE porto = 'FCA-B'",
"UPDATE gtb_porto SET descrizione = 'FRANCO A BORDO', costo = 1, cod_cons_intracee = 'F', flag_carico_azienda_ven = 'N', flag_carico_azienda_acq = 'N', flag_attivo = 1, flag_fattura_vettore = 0, flag_incoterms = 1, rischi = 1, assicurazione = 1 WHERE porto = 'FOB'"
);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -96,6 +96,7 @@ public abstract class EntityBase implements Serializable, Cloneable, EntityInter
protected String applicationName = "";
@JsonIgnore
private String dbName;
@JsonIgnore

View File

@@ -199,6 +199,7 @@ public class EmsRestConstants {
public static final String PATH_SPOSTA_ART_IN_POSIZIONE = PATH + "wms/spostaArtInPosizione";
public static final String PATH_WMS_PRINT_CLOSED_ORDERS = PATH + "wms/printClosedOrders";
public static final String PATH_SPOSTA_UL_IN_POSIZIONE = PATH + "wms/spostaULInPosizione";
public static final String PATH_SPOSTA_UL_IN_POSIZIONE_DTO = PATH + "wms/spostaUL";
public static final String PATH_SPOSTA_ARTS_TRA_UL = PATH + "wms/spostaArtsTraUL";
public static final String PATH_PRINT_ETICHETTA_SSCC = PATH + "wms/printEtichettaSSCC";
public static final String PATH_VERSAMENTO_AUTOMATICO_UL = PATH + "wms/versamentoAutomaticoUL";

View File

@@ -50,13 +50,13 @@ public class GtbPorto extends EntityBase {
@SqlField(value = "flag_incoterms", nullable = false)
private Boolean flagIncoterms;
@SqlField(value = "costo", maxLength = 1)
@SqlField(value = "costo", defaultObjectValue = "0")
private Costo costo;
@SqlField(value = "assicurazione", maxLength = 1)
@SqlField(value = "assicurazione", defaultObjectValue = "0")
private Assicurazione assicurazione;
@SqlField(value = "rischi", maxLength = 1)
@SqlField(value = "rischi", defaultObjectValue = "0")
private Rischi rischi;
public GtbPorto() {
@@ -139,22 +139,35 @@ public class GtbPorto extends EntityBase {
this.costo = costo;
}
public enum Costo implements IBaseEnum<GtbPorto.Costo> {
ACQUIRENTE('A'), VENDITORE('V');
public Assicurazione getAssicurazione() {
return assicurazione;
}
private final Character value;
public GtbPorto setAssicurazione(Assicurazione assicurazione) {
this.assicurazione = assicurazione;
return this;
}
Costo(Character value) {
public Rischi getRischi() {
return rischi;
}
public GtbPorto setRischi(Rischi rischi) {
this.rischi = rischi;
return this;
}
public enum Costo implements IBaseEnum<Costo> {
NESSUNO((short) 0), ACQUIRENTE((short) 1), VENDITORE((short) 2);
private final short value;
Costo(short value) {
this.value = value;
}
public static Costo from(Object value) {
Character castValue = null;
if (value instanceof Character)
castValue = (Character) value;
else if (value instanceof String)
castValue = ((String) value).charAt(0);
short castValue = (short) value;
for (Costo b : Costo.values()) {
if (b.value == castValue)
@@ -165,7 +178,7 @@ public class GtbPorto extends EntityBase {
}
@JsonValue
public Character getValue() {
public short getValue() {
return this.value;
}
@@ -183,32 +196,19 @@ public class GtbPorto extends EntityBase {
public String toString() {
return String.valueOf(value);
}
}
public Assicurazione getAssicurazione() {
return assicurazione;
}
public void setAssicurazione(Assicurazione assicurazione) {
this.assicurazione = assicurazione;
}
public enum Assicurazione implements IBaseEnum<Assicurazione> {
VUOTO((short) 0), ACQUIRENTE((short) 1), VENDITORE((short) 2);
public enum Assicurazione implements IBaseEnum<GtbPorto.Assicurazione> {
ACQUIRENTE('A'), VENDITORE('V');
private final short value;
private final Character value;
Assicurazione(Character value) {
Assicurazione(short value) {
this.value = value;
}
public static Assicurazione from(Object value) {
Character castValue = null;
if (value instanceof Character)
castValue = (Character) value;
else if (value instanceof String)
castValue = ((String) value).charAt(0);
short castValue = (short) value;
for (Assicurazione b : Assicurazione.values()) {
if (b.value == castValue)
@@ -219,7 +219,7 @@ public class GtbPorto extends EntityBase {
}
@JsonValue
public Character getValue() {
public short getValue() {
return this.value;
}
@@ -237,44 +237,28 @@ public class GtbPorto extends EntityBase {
public String toString() {
return String.valueOf(value);
}
}
public Rischi getRischi() {
return rischi;
}
public enum Rischi implements IBaseEnum<Rischi> {
NESSUNO((short) 0), ACQUIRENTE((short) 1), VENDITORE((short) 2);
public void setRischi(Rischi rischi) {
this.rischi = rischi;
}
private final short value;
public enum Rischi implements IBaseEnum<GtbPorto.Rischi> {
ACQUIRENTE('A'), VENDITORE('V');
private final Character value;
Rischi(Character value) {
Rischi(short value) {
this.value = value;
}
public static Rischi from(Object value) {
Character castValue = null;
if (value instanceof Character)
castValue = (Character) value;
else if (value instanceof String)
castValue = ((String) value).charAt(0);
short castValue = (short) value;
for (Rischi b : Rischi.values()) {
if (b.value == castValue)
return b;
}
return null;
}
@JsonValue
public Character getValue() {
public short getValue() {
return this.value;
}
@@ -292,7 +276,5 @@ public class GtbPorto extends EntityBase {
public String toString() {
return String.valueOf(value);
}
}
}

View File

@@ -62,24 +62,27 @@ public class VtbViaggi extends EntityBase {
@SqlField(value = "stato", nullable = false, defaultObjectValue = "0")
private Stato stato;
@SqlField(value = "container")
@SqlField(value = "container", maxLength = 20)
private String container;
@SqlField(value = "sigillo")
@SqlField(value = "sigillo", maxLength = 20)
private String sigillo;
@SqlField(value = "nave")
@SqlField(value = "nave", maxLength = 20)
private String nave;
@SqlField(value = "porto_carico")
@SqlField(value = "porto_carico", maxLength = 20)
private String portoCarico;
@SqlField(value = "destinazione")
@SqlField(value = "destinazione", maxLength = 20)
private String destinazione;
@SqlField(value = "cod_forn_trasp", maxLength = 5)
private String codFornTrasp;
@SqlField(value = "incoterms", maxLength = 20)
private String incoterms;
@Priority(value = 101, copyPk = false)
private List<VtbViaggi> vtbViaggiList;
@@ -263,6 +266,15 @@ public class VtbViaggi extends EntityBase {
return this;
}
public String getIncoterms() {
return incoterms;
}
public VtbViaggi setIncoterms(String incoterms) {
this.incoterms = incoterms;
return this;
}
public enum Mezzo implements IBaseEnum<Mezzo> {
VETTORE((short) 0), MITTENTE((short) 1), DESTINATARIO((short) 2);

View File

@@ -546,6 +546,19 @@ public class WMSGenericController {
}
@RequestMapping(value = EmsRestConstants.PATH_SPOSTA_UL_IN_POSIZIONE_DTO, method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse spostaULInPosizioneDTO(@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody SpostaUlInPosizioneRequestDTO requestDTO) throws Exception {
wmsGenericService.spostaUL(requestDTO);
return ServiceRestResponse.createPositiveResponse();
}
@RequestMapping(value = EmsRestConstants.PATH_SPOSTA_ARTS_TRA_UL, method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse spostaArtsTraUL(@RequestParam(CommonConstants.PROFILE_DB) String configuration,

View File

@@ -0,0 +1,47 @@
package it.integry.ems.retail.wms.generic.dto;
import it.integry.ems_model.entity.MtbColt;
public class SpostaUlInPosizioneRequestDTO {
private String codMdep;
private String posizione;
private MtbColt mtbColtToMove;
private String annotazioni;
public String getCodMdep() {
return codMdep;
}
public SpostaUlInPosizioneRequestDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getPosizione() {
return posizione;
}
public SpostaUlInPosizioneRequestDTO setPosizione(String posizione) {
this.posizione = posizione;
return this;
}
public MtbColt getMtbColtToMove() {
return mtbColtToMove;
}
public SpostaUlInPosizioneRequestDTO setMtbColtToMove(MtbColt mtbColtToMove) {
this.mtbColtToMove = mtbColtToMove;
return this;
}
public String getAnnotazioni() {
return annotazioni;
}
public SpostaUlInPosizioneRequestDTO setAnnotazioni(String annotazioni) {
this.annotazioni = annotazioni;
return this;
}
}

View File

@@ -31,6 +31,7 @@ import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.user.UserSession;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.db.ResultSetMapper;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.service.SetupGest;
@@ -1918,33 +1919,34 @@ public class WMSGenericService {
UtilityEntity.throwEntitiesException(entitiesToSave);
}
public void spostaULInPosizione(MtbColt mtbColtToMove, MtbDepoPosizioni mtbDepoPosizioni) throws Exception {
public void spostaUL(SpostaUlInPosizioneRequestDTO requestDTO) throws Exception {
if (mtbDepoPosizioni == null) {
throw new Exception("Nessuna posizione selezionata");
} else {
mtbDepoPosizioni.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(mtbDepoPosizioni, multiDBTransactionManager);
if (UtilityString.isNullOrEmpty(requestDTO.getCodMdep())) {
throw new Exception("Nessun deposito selezionato");
}
List<EntityBase> entitiesToSave = new ArrayList<>();
if (!UtilityString.equalsIgnoreCase(mtbColtToMove.getCodMdep(), mtbDepoPosizioni.getCodMdep())) {
MtbColt mtbColtToMove = requestDTO.getMtbColtToMove();
String codDtipToUse = setupGest.getSetupDepo(multiDBTransactionManager.getPrimaryConnection(), "PICKING", "LOGISTICA", "COD_DTIP_DOC_TRASF_INTERNI", mtbDepoPosizioni.getCodMdep());
MtbDepo mtbDepo = new MtbDepo();
mtbDepo.setCodMdep(requestDTO.getCodMdep())
.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(mtbDepo, multiDBTransactionManager);
if (!UtilityString.equalsIgnoreCase(mtbColtToMove.getCodMdep(), requestDTO.getCodMdep())) {
String codDtipToUse = setupGest.getSetupDepo(multiDBTransactionManager.getPrimaryConnection(), "PICKING", "LOGISTICA", "COD_DTIP_DOC_TRASF_INTERNI", requestDTO.getCodMdep());
if (UtilityString.isNullOrEmpty(codDtipToUse))
throw new Exception("La configurazione della setup gest non è completa per gestire gli spostamenti tra depositi");
MtbDepo mtbDepo = new MtbDepo()
.setCodMdep(mtbDepoPosizioni.getCodMdep());
mtbDepo.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(mtbDepo, multiDBTransactionManager);
DtbDoct dtbDoct = new DtbDoct()
.setCodMdep(mtbColtToMove.getCodMdep())
.setCodVdes(mtbDepo.getCodVdes())
.setCodAnag(mtbDepo.getCodAnag())
.setAnnotazioni(requestDTO.getAnnotazioni())
.setCodDtip(codDtipToUse);
dtbDoct.setOperation(OperationType.INSERT);
@@ -1967,14 +1969,32 @@ public class WMSGenericService {
mtbColtToMove.setOperation(OperationType.UPDATE);
mtbColtToMove
.setMtbColr(new ArrayList<>())
.setPosizione(mtbDepoPosizioni.getPosizione())
.setCodMdep(mtbDepoPosizioni.getCodMdep());
.setPosizione(UtilityString.isNull(requestDTO.getPosizione(), EmsRestConstants.NULL))
.setCodMdep(requestDTO.getCodMdep());
entitiesToSave.add(mtbColtToMove);
entityProcessor.processEntityList(entitiesToSave, true);
UtilityEntity.throwEntitiesException(entitiesToSave);
}
public void spostaULInPosizione(MtbColt mtbColtToMove, MtbDepoPosizioni mtbDepoPosizioni) throws Exception {
if (mtbDepoPosizioni == null) {
throw new Exception("Nessuna posizione selezionata");
} else {
mtbDepoPosizioni.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(mtbDepoPosizioni, multiDBTransactionManager);
}
SpostaUlInPosizioneRequestDTO requestDTO = new SpostaUlInPosizioneRequestDTO();
requestDTO.setMtbColtToMove(mtbColtToMove)
.setPosizione(mtbDepoPosizioni.getPosizione())
.setCodMdep(mtbDepoPosizioni.getCodMdep());
spostaUL(requestDTO);
}
public SpostaArtsTraULResponseDTO spostaArtsTraUL(MtbColt sourceMtbColt, MtbColt destinationMtbColt, boolean flagForceUseRefs) throws Exception {
@@ -2756,7 +2776,7 @@ public class WMSGenericService {
MtbColr mtbColrRettifica = (MtbColr) versamento.clone();
mtbColrRettifica
.setQtaCol(rientroMerceRequestDTO.getQtaRientro().negate())
.setNumCnf(mtbColrRettifica.getQtaCol().divide(mtbColrRettifica.getQtaCnf(),5,RoundingMode.HALF_UP))
.setNumCnf(mtbColrRettifica.getQtaCol().divide(mtbColrRettifica.getQtaCnf(), 5, RoundingMode.HALF_UP))
.setOperation(OperationType.INSERT_OR_UPDATE);
scarico.getMtbColr().add(mtbColrRettifica);