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

# Conflicts:
#	ems-engine/src/main/java/it/integry/ems/retail/pvmRetail/service/PvmService.java
This commit is contained in:
2025-06-11 17:01:03 +02:00
24 changed files with 895 additions and 125 deletions

View File

@@ -74,6 +74,7 @@ public class CsvMapper<T> {
public List<T> deserialize(String csv, Class<T> dtoClass, String splitChar) throws Exception {
List<T> outputList = null;
String[] headers = null;
Integer rows = 0;
String delimiter = UtilityString.identifyLineDelimiter(csv);
ByteBuffer byteBuffer = ByteBuffer.wrap(csv.getBytes());
@@ -83,6 +84,7 @@ public class CsvMapper<T> {
for (int i = 0; i < byteBuffer.capacity(); i++) {
line.append((char) byteBuffer.get());
if (line.toString().endsWith(delimiter)) {
rows++;
if (firstLine) {
firstLine = false;
headers = line.toString().replace(delimiter, "").split(splitChar);
@@ -105,37 +107,44 @@ public class CsvMapper<T> {
line = new StringBuilder();
continue;
}
String[] datas = line.toString().replace(delimiter, "").split(splitChar);
T bean = (T) dtoClass.newInstance();
for (int j = 0; j < datas.length; j++) {
String header = headers[j].trim();
if (header.compareTo("") != 0) {
Field field = map.get(header.toLowerCase());
if (field != null) {
try {
String[] datas = line.toString().replace(delimiter, "").split(splitChar);
T bean = (T) dtoClass.newInstance();
for (int j = 0; j < datas.length; j++) {
String header = headers[j].trim();
if (header.compareTo("") != 0) {
Field field = map.get(header.toLowerCase());
DtoField dtoField = field.getAnnotation(DtoField.class);
if (field != null) {
field.setAccessible(true);
DtoField dtoField = field.getAnnotation(DtoField.class);
field.setAccessible(true);
Object columnValue;
if (field.getGenericType() != String.class && UtilityString.isNullOrEmpty(datas[j].trim())) {
columnValue = null;
} else {
columnValue = datas[j].trim();
}
Object o = SqlFieldHolder.applyConvert(columnValue, field.getGenericType());
field.set(bean, o);
Object columnValue;
if (field.getGenericType() != String.class && UtilityString.isNullOrEmpty(datas[j].trim())) {
columnValue = null;
} else {
columnValue = datas[j].trim();
}
Object o = SqlFieldHolder.applyConvert(columnValue, field.getGenericType());
field.set(bean, o);
}
}
line = new StringBuilder();
if (outputList == null) {
outputList = new ArrayList<T>();
}
outputList.add(bean);
} catch(Exception e) {
throw new Exception("ERRORE DI SINTASSI SU RIGA " + rows);
}
line = new StringBuilder();
if (outputList == null) {
outputList = new ArrayList<T>();
}
outputList.add(bean);
}
}
byteBuffer.clear();

View File

@@ -18,7 +18,8 @@ public enum IntegryCustomer {
IntegryCustomerDB.Auricchio_Ind05,
IntegryCustomerDB.Auricchio_AuricchioSons),
Biolevante(IntegryCustomerDB.Biolevante_Biolevante,
IntegryCustomerDB.Biolevante_BiolevanteStorico),
IntegryCustomerDB.Biolevante_BiolevanteStorico,
IntegryCustomerDB.Biolevante_TenutaSanMartino),
Carelli(IntegryCustomerDB.Carelli_Carelli,
IntegryCustomerDB.Carelli_GestFood,
IntegryCustomerDB.Carelli_Chiuso,
@@ -68,7 +69,8 @@ public enum IntegryCustomer {
Frudis(IntegryCustomerDB.Frudis_Frudis),
Gramm(IntegryCustomerDB.Gramm_Gramm,
IntegryCustomerDB.Gramm_PrimeOlive,
IntegryCustomerDB.Gramm_ProveStage),
IntegryCustomerDB.Gramm_ProveStage,
IntegryCustomerDB.Gramm_2MHolding),
Idrotecnica(IntegryCustomerDB.Idrotecnica_Idrotecnica),
Igood(IntegryCustomerDB.Igood_Aida,
IntegryCustomerDB.Igood_Igood,

View File

@@ -22,6 +22,7 @@ public enum IntegryCustomerDB {
Biolevante_Biolevante("biolevante_peppe"),
Biolevante_BiolevanteStorico("biolevante_storico"),
Biolevante_TenutaSanMartino("tenutasanmartino"),
Carelli_Carelli("carelli"),
@@ -90,6 +91,7 @@ public enum IntegryCustomerDB {
Gramm_Gramm("gramm_peppe"),
Gramm_PrimeOlive("primeolive"),
Gramm_ProveStage("grammprovestage"),
Gramm_2MHolding("2M_HOLDING"),
Idrotecnica_Idrotecnica("idrotecnica"),

View File

@@ -10,8 +10,6 @@ public class Migration_20250522150750 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isDMS()) return;
if (!existsTable( "stb_multiplier")) {
executeStatement( "CREATE TABLE stb_multiplier\n" +
"(\n" +
@@ -21,6 +19,8 @@ public class Migration_20250522150750 extends BaseMigration implements Migration
"INSERT INTO stb_multiplier (moltiplicatore) VALUES (-1)");
}
if (isDMS()) return;
createOrUpdateView("mvw_mtb_colr_storico_mov", "create view mvw_mtb_colr_storico_mov as \n" +
"SELECT IIF(moltiplicatore = -1, mtb_colr.barcode_ul_out,\n" +
" mtb_colr.barcode_ul_in) AS barcode_ul,\n" +

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250609130610 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("w_mgiac_part_disp", "CB_AZZERAGIAC", "VISIBLE", "N",
"Impostare S/N per visualizzare o meno il pulsante Azzera Giacenza", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,52 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.utility.dto.IndexTableDTO;
import java.util.ArrayList;
import java.util.List;
public class Migration_20250609144558 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("alter table mtb_shelf_life_tolerance add cod_mgrp varchar(5);\n",
"alter table mtb_shelf_life_tolerance add constraint fk_mtb_shelf_life_tolerance_mtb_grup FOREIGN KEY (cod_mgrp) REFERENCES mtb_grup\n");
if (isCustomerDb(IntegryCustomerDB.Carelli_Format)){
executeStatement("update mtb_shelf_life_tolerance set cod_mgrp = '02'\n",
"insert into mtb_shelf_life_tolerance (shelf_life_min, shelf_life_max, rate_to_tolerance, cod_mgrp)\n" +
"select mtb_shelf_life_tolerance.shelf_life_min, \n" +
"mtb_shelf_life_tolerance.shelf_life_max, \n" +
"mtb_shelf_life_tolerance.rate_to_tolerance, \n" +
"mtb_grup.cod_mgrp\n" +
"from mtb_grup cross apply mtb_shelf_life_tolerance\n" +
"where tipo_mgrp is null\n" +
"and exists (select * from mtb_aart where mtb_aart.cod_mgrp = mtb_grup.cod_mgrp and mtb_aart.gg_scad_partita >0)\n" +
"and mtb_grup.cod_mgrp not in (select cod_mgrp from mtb_shelf_life_tolerance)");
}
executeStatement("alter table mtb_shelf_life_tolerance alter column cod_mgrp varchar(5) not null;");
List<IndexTableDTO.ColumnIndex> columnsIndex = new ArrayList<>();
columnsIndex.add(new IndexTableDTO.ColumnIndex("cod_mgrp"));
columnsIndex.add(new IndexTableDTO.ColumnIndex("shelf_life_min"));
IndexTableDTO indexTableDTO = new IndexTableDTO()
.setTableName("mtb_shelf_life_tolerance")
.setIndexName("idx_mtb_shelf_life_tolerance_unique")
.setColumnsIndex(columnsIndex)
.setUnique(true)
.setOverride(true);
createIndex(indexTableDTO);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,22 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.utility.Query;
public class Migration_20250609185006 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
String descrizione = "Questa setup indica i giorni di scadenza da controllore, è configurabile per tipo documento. Può contenere un numero oppure un json con questa struttura [{\"codMgrp\":\"02\",\"gg\":5}] per differenziare la setup per gruppo merceologico.";
executeStatement(Query.format("update stb_gest_setup SET description = %S where gest_name = %S AND section = %S AND KEY_SECTION = %S",
descrizione, "PVM","DOC_INTERNI","DAYS_TO_EXP"));
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,28 @@
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_20250610105414 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("WINACCESS", "SETUP", "FILTRA_REPARTI_LAV", "N",
"filtra i reparti disponibili controllando il reparto assegnato all'utente", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
if (isCustomer(IntegryCustomer.Smetar)) {
updateSetupValue("WINACCESS", "SETUP", "FILTRA_REPARTI_LAV", "S");
}
}
@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_20250610125552 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
enableSaveToRest("mdepo");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,267 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250610152544 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS()) return;
createOrUpdateView("[dbo].[vvw_sit_consegneXcommessa]", "CREATE VIEW [dbo].[vvw_sit_consegneXcommessa] as \n" +
"SELECT \n" +
" ordv.gestione AS gestione,\n" +
" ordv.cod_jcom AS cod_jcom, \n" +
" ordv.data_ord AS data_ord,\n" +
" ordv.num_ord AS num_ord,\n" +
" ordv.rif_ord AS rif_ord,\n" +
" ordv.id_viaggio AS id_viaggio,\n" +
" ordv.cod_mart AS cod_mart,\n" +
" ordv.cod_alis AS cod_alis,\n" +
" ISNULL(ordv.cod_art_for, ordv.cod_mart) AS cod_art_for,\n" +
" ISNULL(ordv.descrizione_estesa, ordv.descrizione) AS descrizione,\n" +
" SUM(ordv.qta_ord) AS qta_ord,\n" +
" ISNULL(orda.qta_da_evadere, 0) AS qta_acq,\n" +
" CASE WHEN ISNULL(orda.qta_da_evadere, 0) = 0 THEN NULL ELSE MAX(orda.data_cons) END AS data_cons_acq,\n" +
" ISNULL(colv.qta_col, 0) AS qta_riservata,\n" +
" CASE\n" +
" WHEN ISNULL(mtb_part.qta_esistente, 0) < 0 THEN SUM(ISNULL(cola.qta_col, 0))\n" +
" ELSE ISNULL(mtb_part.qta_esistente, 0) + SUM(ISNULL(cola.qta_col, 0)) END AS qta_disp,\n" +
" SUM(ordv.qta_evasa) AS qta_consegnata,\n" +
" SUM(ordv.importoinevaso) AS importoinevaso,\n" +
" SUM(ordv.importoinevasoivato) AS importoinevasoivato,\n" +
" CASE\n" +
" WHEN SUM(ordv.qta_ord - ordv.qta_evasa) <= SUM(ISNULL(colv.qta_col, 0)) + (CASE\n" +
" WHEN ISNULL(mtb_part.qta_esistente, 0) < 0\n" +
" THEN SUM(ISNULL(cola.qta_col, 0))\n" +
" ELSE ISNULL(mtb_part.qta_esistente, 0) + SUM(ISNULL(cola.qta_col, 0)) END)\n" +
" THEN SUM(ordv.importoinevaso)\n" +
" ELSE (SUM(ISNULL(colv.qta_col, 0)) + (CASE\n" +
" WHEN SUM(ISNULL(cola.qta_col, 0)) +\n" +
" ISNULL(mtb_part.qta_esistente, 0) > 0\n" +
" THEN SUM(ISNULL(cola.qta_col, 0)) + ISNULL(mtb_part.qta_esistente, 0)\n" +
" ELSE 0 END)) * SUM(ordv.importoinevaso) /\n" +
" (SUM(ordv.qta_ord) - SUM(ordv.qta_evasa)) END AS importoevadibile,\n" +
" ordv.unt_ord AS unt_ord,\n" +
" ordv.term_cons,\n" +
" jtb_comt.descrizione AS commessa,\n" +
" CASE\n" +
" WHEN SUM(ordv.qta_ord - ordv.qta_evasa) <= 0 THEN 'CONSEGNATO'\n" +
" WHEN SUM(ordv.qta_ord - ordv.qta_evasa) <= SUM(ISNULL(colv.qta_col, 0)) + CASE\n" +
" WHEN ISNULL(mtb_part.qta_esistente, 0) < 0\n" +
" THEN SUM(ISNULL(cola.qta_col, 0))\n" +
" ELSE ISNULL(mtb_part.qta_esistente, 0) + SUM(ISNULL(cola.qta_col, 0)) END\n" +
" THEN 'DISPONIBILE'\n" +
" ELSE 'NON DISPONIBILE' END AS statoriga,\n" +
" SUM(ordv.importorigaord) AS importoriga,\n" +
" ordv.data_cons AS data_cons_vend,\n" +
" gtb_anag.rag_soc AS cliente,\n" +
" ISNULL(vtb_dest.indirizzo, gtb_anag.indirizzo) AS indirizzo,\n" +
" CASE WHEN vtb_dest.indirizzo IS NULL THEN gtb_anag.citta ELSE vtb_dest.citta END AS citta,\n" +
" CASE\n" +
" WHEN ISNULL(vtb_dest.destinatario, '') <> gtb_anag.rag_soc AND vtb_dest.destinatario IS NOT NULL\n" +
" THEN vtb_dest.destinatario\n" +
" ELSE NULL END AS destinatario,\n" +
" ordv.cod_vage,\n" +
" vtb_agen.rag_soc AS agente,\n" +
" ordv.partita_mag,\n" +
" orda.gestione_rif,\n" +
" gtb_anag.cod_anag AS cod_anag,\n" +
" ordv.num_ord_provv AS num_ord_provv,\n" +
" ordv.flag_sospeso AS flag_sospeso,\n" +
" MIN(ordv.pos_riga) AS pos_riga,\n" +
" ordv.controllato_da AS controllato_da,\n" +
" gtb_anag.e_mail AS e_mail,\n" +
" ordv.data_ins_ord,\n" +
" ordv.flag_evaso,\n" +
" ordv.cod_paga,\n" +
" ordv.descrizione_paga,\n" +
" ordv.cod_vdes \n" +
" \n" +
"FROM gtb_anag,\n" +
" (SELECT dtb_ordt.gestione,\n" +
" cod_vage,\n" +
" cod_anag,\n" +
" cod_vdes,\n" +
" term_cons,\n" +
" dtb_ordr.unt_ord,\n" +
" dtb_ordr.cod_jcom,\n" +
" dtb_ordr.cod_mart,\n" +
" dtb_ordr.cod_alis,\n" +
" dtb_ordr.cod_art_for,\n" +
" dtb_ordt.data_ord,\n" +
" dtb_ordt.num_ord,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordr.descrizione,\n" +
" dtb_ordr.descrizione_estesa,\n" +
" dtb_ordr.data_cons,\n" +
" dtb_ordr.riga_ord,\n" +
" dtb_ordr.qta_ord,\n" +
" dtb_ordr.qta_evasa,\n" +
" dtb_ordr.cod_mdep,\n" +
" dtb_ordr.flag_evaso,\n" +
" SUM(dtb_ordr.qta_ord * dtb_ordr.val_unt * (1 - sconto1 / 100) * (1 - sconto2 / 100) * (1 - sconto3 / 100) *\n" +
" (1 - sconto4 / 100) * (1 - sconto5 / 100) * (1 - sconto6 / 100) * (1 - sconto7 / 100) *\n" +
" (1 - sconto8 / 100)) AS importorigaord,\n" +
" SUM(CASE\n" +
" WHEN (dtb_ordr.qta_ord > dtb_ordr.qta_evasa) AND dtb_ordr.flag_evaso = 'I' THEN\n" +
" (dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.val_unt * (1 - sconto1 / 100) *\n" +
" (1 - sconto2 / 100) * (1 - sconto3 / 100) * (1 - sconto4 / 100) * (1 - sconto5 / 100) *\n" +
" (1 - sconto6 / 100) * (1 - sconto7 / 100) * (1 - sconto8 / 100)\n" +
" ELSE 0 END) AS importoinevaso,\n" +
" SUM(CASE\n" +
" WHEN (dtb_ordr.qta_ord > dtb_ordr.qta_evasa) AND dtb_ordr.flag_evaso = 'I' THEN\n" +
" (dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.val_unt *\n" +
" (1 + gtb_aliq.perc_aliq / 100) * (1 - sconto1 / 100) * (1 - sconto2 / 100) *\n" +
" (1 - sconto3 / 100) * (1 - sconto4 / 100) * (1 - sconto5 / 100) * (1 - sconto6 / 100) *\n" +
" (1 - sconto7 / 100) * (1 - sconto8 / 100)\n" +
" ELSE 0 END) AS importoinevasoivato,\n" +
" dtb_ordr.partita_mag,\n" +
" dtb_ordt.num_ord_provv,\n" +
" dtb_ordt.flag_sospeso,\n" +
" dtb_ordr.pos_riga,\n" +
" dtb_ordt.controllato_da,\n" +
" dtb_ordt.data_ins_ord,\n" +
" dtb_ordr.id_viaggio,\n" +
" dtb_ordt.cod_paga,\n" +
" dtb_ordt.descrizione_paga\n" +
" FROM dtb_ordt,\n" +
" dtb_ordr\n" +
" LEFT OUTER JOIN gtb_aliq ON dtb_ordr.cod_aliq = gtb_aliq.cod_aliq\n" +
" WHERE dtb_ordt.gestione = dtb_ordr.gestione\n" +
" AND dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" AND dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" AND dtb_ordt.gestione = 'V'\n" +
" AND dtb_ordr.cod_mart IS NOT NULL\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordr.flag_evaso <> 'A'\n" +
" GROUP BY dtb_ordt.gestione, cod_vage, cod_anag, cod_vdes, term_cons, dtb_ordr.unt_ord, dtb_ordr.cod_jcom,\n" +
" dtb_ordr.cod_mart, dtb_ordr.cod_alis, dtb_ordr.cod_art_for, dtb_ordt.data_ord, dtb_ordt.num_ord,\n" +
" dtb_ordt.rif_ord, dtb_ordr.descrizione, dtb_ordr.descrizione_estesa, dtb_ordr.data_cons,\n" +
" dtb_ordr.riga_ord, dtb_ordr.qta_ord, dtb_ordr.qta_evasa, dtb_ordr.cod_mdep, dtb_ordr.flag_evaso,\n" +
" dtb_ordr.partita_mag, dtb_ordt.num_ord_provv, dtb_ordt.flag_sospeso, dtb_ordr.pos_riga,\n" +
" dtb_ordt.controllato_da, dtb_ordt.data_ins_ord, dtb_ordr.id_viaggio, dtb_ordt.cod_paga,\n" +
" dtb_ordt.descrizione_paga) ordv\n" +
" LEFT OUTER JOIN vtb_dest ON ordv.cod_anag = vtb_dest.cod_anag AND ordv.cod_vdes = vtb_dest.cod_vdes\n" +
" LEFT OUTER JOIN vtb_agen ON ordv.cod_vage = vtb_agen.cod_vage\n" +
" LEFT OUTER JOIN jtb_comt ON ordv.cod_jcom = jtb_comt.cod_jcom\n" +
" LEFT OUTER JOIN ( /*Ordini di acquisto a fornitori*/ SELECT dtb_ordr.gestione,\n" +
" dtb_ordr.flag_evaso,\n" +
" MAX(dtb_ordr.data_cons) AS data_cons,\n" +
" dtb_ordr.cod_mart,\n" +
" dtb_ordr.cod_col,\n" +
" dtb_ordr.cod_tagl,\n" +
" dtb_ordr.cod_jcom,\n" +
" SUM(qta_ord - qta_evasa) AS qta_da_evadere,\n" +
" dtb_ordt.gestione_rif\n" +
" FROM dtb_ordt,\n" +
" dtb_ordr\n" +
" WHERE dtb_ordt.gestione = dtb_ordr.gestione\n" +
" AND dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" AND dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" AND dtb_ordt.gestione = 'A'\n" +
" AND dtb_ordt.flag_sospeso = 'N'\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.qta_ord > dtb_ordr.qta_evasa\n" +
" GROUP BY dtb_ordr.gestione,\n" +
" dtb_ordr.flag_evaso, /*dtb_ordr.data_cons,*/\n" +
" dtb_ordr.cod_mart, dtb_ordr.cod_col,\n" +
" dtb_ordr.cod_tagl, dtb_ordr.cod_jcom,\n" +
" dtb_ordt.gestione_rif) orda\n" +
" ON ordv.cod_jcom = orda.cod_jcom AND ordv.cod_mart = orda.cod_mart AND orda.gestione = 'A' AND\n" +
" orda.flag_evaso = 'I'\n" +
" LEFT OUTER JOIN ( /*Colli di vendita già preparati e accantonati per commessa*/ SELECT cod_mart,\n" +
" isnull(mtb_colr.cod_jcom, dtb_ordt.cod_jcom) as cod_jcom,\n" +
" mtb_colr.data_ord,\n" +
" mtb_colr.num_ord,\n" +
" riga_ord,\n" +
" mtb_colt.gestione,\n" +
" SUM(qta_col) AS qta_col\n" +
" FROM mtb_colr inner join mtb_colt on mtb_colr.gestione = mtb_colt.gestione and\n" +
" mtb_colr.data_collo = mtb_colt.data_collo and\n" +
" mtb_colr.ser_collo = mtb_colt.ser_collo and\n" +
" mtb_colr.num_collo = mtb_colt.num_collo\n" +
" inner join dtb_ordt on dtb_ordt.data_ord=mtb_colr.data_ord and\n" +
" dtb_ordt.num_ord=mtb_colr.num_ord and\n" +
" dtb_ordt.gestione=mtb_colr.gestione\n" +
" \n" +
" WHERE mtb_colt.gestione = 'V'\n" +
" AND mtb_colt.cod_dtip IS NULL\n" +
" \n" +
" \n" +
" GROUP BY cod_mart, mtb_colr.cod_jcom, dtb_ordt.cod_jcom,\n" +
" mtb_colr.data_ord,\n" +
" mtb_colr.num_ord,\n" +
" riga_ord,\n" +
" mtb_colt.gestione) colv\n" +
" ON ordv.gestione = colv.gestione AND ordv.data_ord = colv.data_ord AND\n" +
" ordv.num_ord = colv.num_ord AND ordv.riga_ord = colv.riga_ord AND\n" +
" ordv.cod_mart = colv.cod_mart AND ordv.cod_jcom = colv.cod_jcom\n" +
" LEFT OUTER JOIN ( /*Colli di acquisto o produzione in giacenza con commessa esclusi quelli di reso a fornitore o posizionati in aree escluse dal picking*/ SELECT cod_mart, cod_mdep, cod_jcom AS cod_jcom, SUM(qta_col) AS qta_col\n" +
" FROM mvw_sitart_udc_det_inventario\n" +
" WHERE (gestione = 'A' OR gestione = 'L')\n" +
" AND ISNULL(cod_jcom, 'MAG') <> 'MAG'\n" +
" AND ISNULL(priorita, 0) >= 0\n" +
" AND segno = 1\n" +
" GROUP BY cod_mart, cod_mdep, cod_jcom) cola\n" +
" ON ordv.cod_mdep = cola.cod_mdep AND ordv.cod_mart = cola.cod_mart AND\n" +
" ordv.cod_jcom = cola.cod_jcom\n" +
" LEFT OUTER JOIN ( /*Colli di acquisto o produzione in giacenza senza commessa, esclusi quelli di reso a fornitore o posizionati in aree escluse dal picking*/ SELECT cod_mart, cod_mdep, SUM(qta_col) AS qta_esistente\n" +
" FROM mvw_sitart_udc_det_inventario\n" +
" WHERE (gestione = 'A' OR gestione = 'L')\n" +
" AND (cod_jcom IS NULL OR cod_jcom = 'MAG')\n" +
" AND ISNULL(priorita, 0) >= 0\n" +
" AND segno = 1\n" +
" GROUP BY cod_mart, cod_mdep) mtb_part\n" +
" ON ordv.cod_mdep = mtb_part.cod_mdep AND ordv.cod_mart = mtb_part.cod_mart\n" +
"WHERE gtb_anag.cod_anag = ordv.cod_anag\n" +
"GROUP BY ordv.gestione ,\n" +
" ordv.cod_jcom ,\n" +
" ordv.data_ord ,\n" +
" ordv.num_ord ,\n" +
" ordv.rif_ord ,\n" +
" ordv.id_viaggio ,\n" +
" ordv.cod_mart ,\n" +
" ordv.cod_alis ,\n" +
" ISNULL(ordv.cod_art_for, ordv.cod_mart) ,\n" +
" ISNULL(ordv.descrizione_estesa, ordv.descrizione),\n" +
" ISNULL(orda.qta_da_evadere, 0) ,\n" +
" ISNULL(colv.qta_col, 0) ,\n" +
" mtb_part.qta_esistente ,\n" +
" ordv.unt_ord ,\n" +
" ordv.term_cons,\n" +
" jtb_comt.descrizione ,\n" +
" ordv.data_cons,\n" +
" gtb_anag.rag_soc,\n" +
" ISNULL(vtb_dest.indirizzo, gtb_anag.indirizzo),\n" +
" vtb_dest.indirizzo,\n" +
" vtb_dest.destinatario,\n" +
" gtb_anag.citta,\n" +
" vtb_dest.citta,\n" +
" ordv.cod_vage,\n" +
" vtb_agen.rag_soc ,\n" +
" ordv.partita_mag,\n" +
" orda.gestione_rif,\n" +
" gtb_anag.cod_anag ,\n" +
" ordv.num_ord_provv ,\n" +
" ordv.flag_sospeso ,\n" +
" ordv.controllato_da ,\n" +
" gtb_anag.e_mail ,\n" +
" ordv.data_ins_ord,\n" +
" ordv.flag_evaso,\n" +
" ordv.cod_paga,\n" +
" ordv.descrizione_paga,\n" +
" ordv.cod_vdes");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,69 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250610153451 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isDMS()) return;
createOrUpdateView("mvw_mtb_colr_storico_mov", "CREATE view [dbo].[mvw_mtb_colr_storico_mov] as \n" +
"SELECT IIF(moltiplicatore = -1, mtb_colr.barcode_ul_out,\n" +
" mtb_colr.barcode_ul_in) AS barcode_ul,\n" +
" IIF(moltiplicatore = -1, mtb_colr.cod_mdep_out,\n" +
" mtb_colr.cod_mdep_in) AS cod_mdep,\n" +
" IIF(moltiplicatore = -1, mtb_colr.posizione_out,\n" +
" mtb_colr.posizione_in) AS posizione,\n" +
" (mtb_colr.qta_col * moltiplicatore) AS qta_col,\n" +
" (IIF(mtb_aart.flag_qta_cnf_fissa = 'S', mtb_colr.qta_col / mtb_aart.qta_cnf, mtb_colr.num_cnf) *\n" +
" moltiplicatore) AS num_cnf,\n" +
" mtb_colr.cod_mart,\n" +
" mtb_colr.cod_col,\n" +
" mtb_colr.cod_tagl,\n" +
" mtb_colr.partita_mag,\n" +
" (mtb_colr.peso_netto_kg * moltiplicatore) AS peso_netto_kg,\n" +
" (mtb_colr.peso_lordo_kg * moltiplicatore) AS peso_lordo_kg,\n" +
" IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom) AS cod_jcom,\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_mtip,\n" +
" mtb_aart.cod_mstp,\n" +
" mtb_aart.cod_msfa,\n" +
" mtb_aart.qta_cnf AS qta_cnf_anag,\n" +
" mtb_colt.data_vers,\n" +
" mtb_colr.datetime_row,\n" +
" mtb_colt.cod_anag,\n" +
" mtb_colt.cod_dtip,\n" +
" mtb_colt.data_doc,\n" +
" mtb_colt.ser_doc,\n" +
" mtb_colt.num_doc,\n" +
" mtb_colt.gestione,\n" +
" mtb_colt.data_collo,\n" +
" mtb_colt.num_collo,\n" +
" mtb_colt.ser_collo\n" +
"FROM dbo.mtb_colr\n" +
" INNER JOIN dbo.stb_multiplier ON (moltiplicatore = 1 AND mtb_colr.barcode_ul_in IS NOT NULL) OR\n" +
" (moltiplicatore = -1 AND mtb_colr.barcode_ul_out IS NOT NULL)\n" +
" INNER JOIN dbo.mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN dbo.mtb_colt ON mtb_colt.gestione = mtb_colr.gestione AND\n" +
" mtb_colt.data_collo = mtb_colr.data_collo AND\n" +
" mtb_colt.ser_collo = mtb_colr.ser_collo AND\n" +
" mtb_colt.num_collo = mtb_colr.num_collo\n" +
"WHERE (segno = 1 or (segno = -1 and (moltiplicatore = -1 or (moltiplicatore = 1 AND isnull(mtb_colt.barcode_ul,'') <> IsNull(mtb_colr.barcode_ul_in,'')) )))");
}
@Override
public void down() throws Exception {
}
}

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_20250610161207 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("create table vtb_offr_storico \n" +
"(id_offerta bigint not null, \n" +
"cod_mart varchar(15) not null, \n" +
"qta_ord numeric(20,5) default 0 not null,\n" +
"qta_doc numeric(20,5) default 0 not null )\n",
"alter table vtb_offr_storico add constraint pk_vtb_offr_storico primary key (id_offerta, cod_mart)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -522,7 +522,7 @@ public class DocOrdCalTotaliRules extends QueryRules {
}
boolean flagIvaInclusa = testata.getFlagPrzIva().equalsIgnoreCase("S");
if (flagPrezziScontati) {
if (!flagPrezziScontati) {
if (sconto1.compareTo(BigDecimal.ZERO) > 0) {
sconti.add(sconto1);
}

View File

@@ -44,6 +44,9 @@ public class MtbShelfLifeTolerance extends EntityBase {
@SqlField(value = "rate_to_tolerance", nullable = false)
private BigDecimal rateToTolerance;
@SqlField(value = "cod_mgrp", nullable = false)
private String codMgrp;
public Long getId() {
return id;
}
@@ -79,4 +82,13 @@ public class MtbShelfLifeTolerance extends EntityBase {
this.rateToTolerance = rateToTolerance;
return this;
}
public String getCodMgrp() {
return codMgrp;
}
public MtbShelfLifeTolerance setCodMgrp(String codMgrp) {
this.codMgrp = codMgrp;
return this;
}
}

View File

@@ -0,0 +1,105 @@
package it.integry.ems_model.entity;
import it.integry.ems_model.base.EquatableEntityInterface;
import org.apache.logging.log4j.LogManager;
import java.util.List;
import java.util.ArrayList;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.annotation.Master;
import org.kie.api.definition.type.PropertyReactive;
import it.integry.ems_model.annotation.Table;
import com.fasterxml.jackson.annotation.JsonTypeName;
import org.apache.logging.log4j.Logger;
import it.integry.ems_model.annotation.PK;
import it.integry.ems_model.annotation.SqlField;
import java.math.BigDecimal;
import java.util.Objects;
@Master()
@PropertyReactive()
@Table(value = VtbOffrStorico.ENTITY)
@JsonTypeName(value = VtbOffrStorico.ENTITY)
public class VtbOffrStorico extends EntityBase implements EquatableEntityInterface<VtbOffrStorico> {
public final static String ENTITY = "vtb_offr_storico";
private final static Long serialVersionUID = 1L;
private final static Logger logger = LogManager.getLogger();
public VtbOffrStorico() {
super(logger);
}
@PK()
@SqlField(value = "id_offerta", nullable = false)
private Long idOfferta;
@PK()
@SqlField(value = "cod_mart", maxLength = 15, nullable = false)
private String codMart;
@SqlField(value = "qta_ord", nullable = false)
private BigDecimal qtaOrd;
@SqlField(value = "qta_doc", nullable = false)
private BigDecimal qtaDoc;
public Long getIdOfferta() {
return idOfferta;
}
public VtbOffrStorico setIdOfferta(Long idOfferta) {
this.idOfferta = idOfferta;
return this;
}
public String getCodMart() {
return codMart;
}
public VtbOffrStorico setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public BigDecimal getQtaOrd() {
return qtaOrd;
}
public VtbOffrStorico setQtaOrd(BigDecimal qtaOrd) {
this.qtaOrd = qtaOrd;
return this;
}
public BigDecimal getQtaDoc() {
return qtaDoc;
}
public VtbOffrStorico setQtaDoc(BigDecimal qtaDoc) {
this.qtaDoc = qtaDoc;
return this;
}
@Override
public int hashCodeKey() {
return Objects.hash(getIdOfferta(), getCodMart());
}
@Override
public boolean equalsKey(VtbOffrStorico that) {
return Objects.equals(getIdOfferta(), that.getIdOfferta()) && Objects.equals(getCodMart(), that.getCodMart());
}
@Override
public boolean equals(Object o) {
if (!(o instanceof VtbOffrStorico)) return false;
VtbOffrStorico that = (VtbOffrStorico) o;
return Objects.equals(getIdOfferta(), that.getIdOfferta()) && Objects.equals(getCodMart(), that.getCodMart()) && Objects.equals(getQtaOrd(), that.getQtaOrd()) && Objects.equals(getQtaDoc(), that.getQtaDoc());
}
@Override
public int hashCode() {
return Objects.hash(getIdOfferta(), getCodMart(), getQtaOrd(), getQtaDoc());
}
}

View File

@@ -78,6 +78,9 @@ public class VtbOfft extends EntityBase implements EquatableEntityInterface<VtbO
@EntityChild
private List<VtbOffr> vtbOffr = new ArrayList<>();
@EntityChild
private List<VtbOffrStorico> vtbOffrStorico = new ArrayList<>();
@Priority(1)
private StbActivity stbActivity;
@@ -228,6 +231,15 @@ public class VtbOfft extends EntityBase implements EquatableEntityInterface<VtbO
return this;
}
public List<VtbOffrStorico> getVtbOffrStorico() {
return vtbOffrStorico;
}
public VtbOfft setVtbOffrStorico(List<VtbOffrStorico> vtbOffrStorico) {
this.vtbOffrStorico = vtbOffrStorico;
return this;
}
@Override
public int hashCodeKey() {
return Objects.hash(getIdOfferta());

View File

@@ -107,7 +107,8 @@ public class Slim2kService {
" IIF(mtb_part.scorta_min IS NULL, 0, mtb_part.scorta_min) AS scorta_min " +
"FROM format.dbo.mtb_aart" +
" LEFT OUTER JOIN format.dbo.mtb_part ON mtb_aart.cod_mart = mtb_part.cod_mart AND mtb_part.cod_mdep = " + UtilityDB.valueToString(codMdep) +
" LEFT OUTER JOIN format.dbo.mtb_shelf_life_tolerance ON mtb_aart.gg_scad_partita between mtb_shelf_life_tolerance.shelf_life_min and mtb_shelf_life_tolerance.shelf_life_max " +
" LEFT OUTER JOIN format.dbo.mtb_shelf_life_tolerance ON mtb_aart.cod_mgrp = mtb_shelf_life_tolerance.cod_mgrp AND \n" +
" mtb_aart.gg_scad_partita between mtb_shelf_life_tolerance.shelf_life_min and mtb_shelf_life_tolerance.shelf_life_max " +
" WHERE mtb_aart.flag_stato = 'A'" +
" AND mtb_aart.cod_mart NOT IN" +
" ('130100014', '040200962', '011000513', '011000475', '011000298', '011000252', '011000254', '011000819')";

View File

@@ -30,32 +30,38 @@ public class GriglieVenditaExcelDTO {
}
public GriglieVenditaExcelDTO addRiga(Integer ggSettimana, String codMart) {
LocalDate nextMonday = LocalDate.now().with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.MONDAY));;
LocalDate today = LocalDate.now();
LocalDate dataGriglia;
switch (ggSettimana) {
case 1: // Lunedì
dataGriglia = nextMonday;
break;
case 2: // Martedì
dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.TUESDAY));
break;
case 3: // Mercoledì
dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
break;
case 4: // Giovedì
dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.THURSDAY));
break;
case 5: // Venerdì
dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.FRIDAY));
break;
case 6: // Sabato
dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.SATURDAY));
break;
case 7: // Domenica
dataGriglia = nextMonday.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.SUNDAY));
break;
default:
throw new IllegalArgumentException("Giorno della settimana non valido: " + ggSettimana);
if (today.getDayOfWeek().getValue() == ggSettimana.intValue()) {
dataGriglia = today;
} else {
switch (ggSettimana) {
case 1: // Lunedì
dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.MONDAY));
break;
case 2: // Martedì
dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.TUESDAY));
break;
case 3: // Mercoledì
dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.WEDNESDAY));
break;
case 4: // Giovedì
dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.THURSDAY));
break;
case 5: // Venerdì
dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.FRIDAY));
break;
case 6: // Sabato
dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.SATURDAY));
break;
case 7: // Domenica
dataGriglia = today.with(java.time.temporal.TemporalAdjusters.next(DayOfWeek.SUNDAY));
break;
default:
throw new IllegalArgumentException("Giorno della settimana non valido: " + ggSettimana);
}
}
DatiGriglia riga = new DatiGriglia()
.setCodMart(codMart)

View File

@@ -95,57 +95,66 @@ public class ContrattiDiVenditaHandlerService {
public List<EntityBase> updateProgressivi(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String sql =
"WITH art as (\n" +
" select mtb_aart.cod_mart, IsNull(mtb_aart.id_art_equi, mtb_aart.cod_mart) as id_art_equi\n" +
" from mtb_aart left outer join mtb_aart_equi on mtb_aart.id_art_equi = mtb_aart_equi.id_art_equi and flag_equi_prezzo in ('T', 'V', 'P')\n" +
" ),\n" +
" ord AS\n" +
" (SELECT dtb_ordr.id_contratto,\n" +
" art.id_art_equi,\n" +
" SUM((dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.rap_conv) AS qta_ord\n" +
" FROM dtb_ordt\n" +
" INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND\n" +
" dtb_ordt.data_ord = dtb_ordr.data_ord AND\n" +
" dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" inner join art on dtb_ordr.cod_mart = art.cod_mart\n" +
" WHERE dtb_ordt.gestione = 'V'\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordt.flag_sospeso = 'N'\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_ordr.id_contratto,\n" +
" art.id_art_equi\n" +
" )\n" +
" , doc AS (SELECT dtb_docr.id_contratto,\n" +
" art.id_art_equi,\n" +
" SUM(dtb_tipi.segno_qta_scar * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_doc,\n" +
" SUM(IIF(dtb_doct.num_cmov is not null,1, 0) * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_fatt\n" +
" FROM dtb_doct\n" +
" INNER JOIN dtb_docr ON dtb_doct.cod_anag = dtb_docr.cod_anag AND\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc AND\n" +
" dtb_doct.num_doc = dtb_docr.num_doc\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join art on dtb_docr.cod_mart = art.cod_mart\n" +
" WHERE dtb_doct.gestione = 'V'\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_docr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_docr.id_contratto,\n" +
" art.id_art_equi )\n" +
"SELECT DISTINCT vtb_offr.id_offerta,\n" +
" vtb_offr.cod_mart,\n" +
" ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) AS qta_ord,\n" +
" ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) AS qta_doc,\n" +
" ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0) AS qta_fatt\n" +
"FROM vtb_offr\n" +
" INNER JOIN vtb_offt ON vtb_offr.id_offerta = vtb_offt.id_offerta\n" +
" inner join art on vtb_offr.cod_mart = art.cod_mart\n" +
" LEFT OUTER JOIN ord ON vtb_offr.id_offerta = ord.id_contratto AND art.id_art_equi = ord.id_art_equi\n" +
" LEFT OUTER JOIN doc ON vtb_offr.id_offerta = doc.id_contratto AND art.id_art_equi = doc.id_art_equi\n" +
"WHERE (vtb_offr.qta_ord <> ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) OR\n" +
" vtb_offr.qta_doc <> ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) OR\n" +
" vtb_offr.qta_fatt <> ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0)) AND\n" +
" vtb_offt.stato_offerta = 3";
" select mtb_aart.cod_mart, IsNull(mtb_aart.id_art_equi, mtb_aart.cod_mart) as id_art_equi\n" +
" from mtb_aart left outer join mtb_aart_equi on mtb_aart.id_art_equi = mtb_aart_equi.id_art_equi and flag_equi_prezzo in ('T', 'V', 'P')\n" +
" ),\n" +
" ord AS\n" +
" (SELECT dtb_ordr.id_contratto,\n" +
" art.id_art_equi,\n" +
" SUM((dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.rap_conv) AS qta_ord\n" +
" FROM dtb_ordt\n" +
" INNER JOIN dtb_ordr ON dtb_ordt.gestione = dtb_ordr.gestione AND\n" +
" dtb_ordt.data_ord = dtb_ordr.data_ord AND\n" +
" dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" inner join art on dtb_ordr.cod_mart = art.cod_mart\n" +
" WHERE dtb_ordt.gestione = 'V'\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND dtb_ordt.flag_sospeso = 'N'\n" +
" AND dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_ordr.id_contratto,\n" +
" art.id_art_equi\n" +
" )\n" +
" , doc AS (SELECT dtb_docr.id_contratto,\n" +
" art.id_art_equi,\n" +
" SUM(dtb_tipi.segno_qta_scar * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_doc,\n" +
" SUM(IIF(dtb_doct.num_cmov is not null,1, 0) * dtb_docr.qta_doc * dtb_docr.rap_conv) AS qta_fatt\n" +
" FROM dtb_doct\n" +
" INNER JOIN dtb_docr ON dtb_doct.cod_anag = dtb_docr.cod_anag AND\n" +
" dtb_doct.cod_dtip = dtb_docr.cod_dtip AND\n" +
" dtb_doct.data_doc = dtb_docr.data_doc AND\n" +
" dtb_doct.ser_doc = dtb_docr.ser_doc AND\n" +
" dtb_doct.num_doc = dtb_docr.num_doc\n" +
" INNER JOIN dtb_tipi ON dtb_doct.cod_dtip = dtb_tipi.cod_dtip\n" +
" inner join art on dtb_docr.cod_mart = art.cod_mart\n" +
" WHERE dtb_doct.gestione = 'V'\n" +
" AND dtb_tipi.tipo_emissione = 'DIRETTA'\n" +
" AND dtb_docr.id_contratto IS NOT NULL\n" +
" GROUP BY dtb_docr.id_contratto,\n" +
" art.id_art_equi )\n" +
", storico AS (SELECT vtb_offr_storico.id_offerta,\n" +
" art.id_art_equi,\n" +
" sum(vtb_offr_storico.qta_ord) as qta_ord,\n" +
" sum(vtb_offr_storico.qta_doc) as qta_doc\n" +
" FROM vtb_offr_storico\n" +
" inner join art on vtb_offr_storico.cod_mart = art.cod_mart\n" +
" GROUP BY vtb_offr_storico.id_offerta,\n" +
" art.id_art_equi ) \n" +
"SELECT DISTINCT vtb_offr.id_offerta,\n" +
" vtb_offr.cod_mart,\n" +
" ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) + IsNull(storico.qta_ord, 0) AS qta_ord,\n" +
" ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) + IsNull(storico.qta_doc, 0) AS qta_doc,\n" +
" ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0) AS qta_fatt\n" +
"FROM vtb_offr\n" +
" INNER JOIN vtb_offt ON vtb_offr.id_offerta = vtb_offt.id_offerta\n" +
" inner join art on vtb_offr.cod_mart = art.cod_mart\n" +
" LEFT OUTER JOIN ord ON vtb_offr.id_offerta = ord.id_contratto AND art.id_art_equi = ord.id_art_equi\n" +
" LEFT OUTER JOIN doc ON vtb_offr.id_offerta = doc.id_contratto AND art.id_art_equi = doc.id_art_equi\n" +
" LEFT OUTER JOIN storico ON vtb_offr.id_offerta = storico.id_offerta AND art.id_art_equi = storico.id_art_equi\n" +
"WHERE (vtb_offr.qta_ord <> ISNULL(ord.qta_ord / vtb_offr.rap_conv_vend, 0) OR\n" +
" vtb_offr.qta_doc <> ISNULL(doc.qta_doc / vtb_offr.rap_conv_vend, 0) OR\n" +
" vtb_offr.qta_fatt <> ISNULL(doc.qta_fatt / vtb_offr.rap_conv_vend, 0)) AND\n" +
" vtb_offt.stato_offerta = 3";
List<VtbOffr> vtbOffrs = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, VtbOffr.class, OperationType.UPDATE);

View File

@@ -38,6 +38,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -394,7 +396,7 @@ public class PvmController {
}
try {
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocReso(docFromPickingDTO);
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocumentiInterni(docFromPickingDTO);
if (anomalieResiDTOS == null || anomalieResiDTOS.isEmpty())
return ServiceRestResponse.createEntityPositiveResponse(pvmServiceSave.saveDocFromPicking(docFromPickingDTO));
else {
@@ -418,7 +420,7 @@ public class PvmController {
}
try {
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocReso(docFromPickingDTO);
List<AnomalieResiDTO> anomalieResiDTOS = pvmService.checkDocumentiInterni(docFromPickingDTO);
if (anomalieResiDTOS == null || anomalieResiDTOS.isEmpty())
return ServiceRestResponse.createPositiveResponse();
else {
@@ -809,4 +811,17 @@ public class PvmController {
}
@RequestMapping(value = "pvm/updateDataCons", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse updateDataCons(
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestParam String gestione,
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date dataOrd ,
@RequestParam Integer numOrd,
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date dataCons) throws Exception {
return ServiceRestResponse.createPositiveResponse(pvmService.updateDataCons(gestione, dataOrd, numOrd, dataCons));
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.retail.pvmRetail.dto;
public class CheckDocInterniShelfLifeDTO {
private String codMgrp;
private Integer gg;
public String getCodMgrp() {
return codMgrp;
}
public CheckDocInterniShelfLifeDTO setCodMgrp(String codMgrp) {
this.codMgrp = codMgrp;
return this;
}
public Integer getGg() {
return gg;
}
public CheckDocInterniShelfLifeDTO setGg(Integer gg) {
this.gg = gg;
return this;
}
}

View File

@@ -38,7 +38,6 @@ import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.system.service.SystemService;
import it.integry.ems.user.UserSession;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.coollection.Coollection;
@@ -171,7 +170,7 @@ public class PvmService {
" WHERE STB_GEST_SETUP_DEPO.citta_cons like '%" + citta + "%' " +
" GROUP BY num_range, dstart, dEnd, num_cons_max, CITTA_CONS ";
List<OrdChkConsDTO> ordChkConsDTO = UtilityDB.executeSimpleQueryDTO(conn,sql, OrdChkConsDTO.class);
List<OrdChkConsDTO> ordChkConsDTO = UtilityDB.executeSimpleQueryDTO(conn, sql, OrdChkConsDTO.class);
return ordChkConsDTO;
@@ -1818,7 +1817,7 @@ public class PvmService {
return mtbColtsToReturn;
}
public List<AnomalieResiDTO> checkDocReso(DocFromPickingDTO docFromPickingDTO) throws Exception {
public List<AnomalieResiDTO> checkDocumentiInterni(DocFromPickingDTO docFromPickingDTO) throws Exception {
List<AnomalieResiDTO> anomalieResiDTO = new ArrayList<>();
String codMdep = getCodMdep(requestDataDTO.getUsername());
@@ -1866,12 +1865,21 @@ public class PvmService {
if (chkTracciabilita) {
List<HashMap<String, Object>> setupSectionDet = setupGest.getSetupSectionDet(multiDBTransactionManager.getPrimaryConnection(), "PVM", "DOC_INTERNI", "DAYS_TO_EXP", "dtb_tipi");
String gg ="";
List<CheckDocInterniShelfLifeDTO> checkDocInterniShelfLifeDTOS = new ArrayList<>();
Integer gg = null;
if (setupSectionDet != null && !setupSectionDet.isEmpty()) {
gg = setupSectionDet
String ret = setupSectionDet
.stream()
.filter(x -> x.get("val_col_rif") != null && ((String) x.get("val_col_rif")).equalsIgnoreCase(codDtip))
.findFirst().map(x -> (String) x.get("value")).orElse(null);
.findFirst().map(x -> (String) x.get("value")).orElse(null);
if (!UtilityString.isNullOrEmpty(ret) ) {
try {
gg = Integer.parseInt(ret);
} catch (NumberFormatException ex) {
checkDocInterniShelfLifeDTOS = Arrays.asList(jsonObjectMapper.readValue(ret, CheckDocInterniShelfLifeDTO[].class));
}
}
}
sql =
Query.format(
@@ -1975,7 +1983,8 @@ public class PvmService {
" movi.data_scad AS data_scad_acq,\n" +
" movi.suddivisione,\n" +
" mtb_aart.gg_scad_partita,\n" +
" movi.data_doc\n" +
" movi.data_doc,\n" +
" mtb_aart.cod_mgrp\n " +
"FROM colli\n" +
" INNER JOIN mtb_aart ON colli.cod_mart = mtb_aart.cod_mart\n" +
" LEFT OUTER JOIN setup ON mtb_aart.cod_mgrp = setup.cod_mgrp\n" +
@@ -1989,6 +1998,14 @@ public class PvmService {
for (HashMap<String, Object> lotto : partiteErrate) {
String codMart = UtilityHashMap.getValueIfExists(lotto, "cod_mart");
Date dataScad = UtilityHashMap.getValueIfExists(lotto, "data_scad");
String codMgrp = UtilityHashMap.getValueIfExists(lotto, "cod_mgrp");
if (checkDocInterniShelfLifeDTOS != null && !checkDocInterniShelfLifeDTOS.isEmpty()) {
gg = checkDocInterniShelfLifeDTOS
.stream()
.filter(x -> x.getCodMgrp().equalsIgnoreCase(codMgrp))
.map(x -> x.getGg()).findFirst().orElse(null);
}
if (dataScad == null) {
anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, "Inserire la data scadenza."));
continue;
@@ -2005,7 +2022,7 @@ public class PvmService {
continue;
}
if (!UtilityString.isNullOrEmpty(gg) && UtilityDate.DaysAfter(dataScad, UtilityDate.dateAdd(Calendar.DATE, Integer.parseInt(gg), UtilityDate.getTodayWithoutTime())) > 0) {
if (gg != null && UtilityDate.DaysAfter(dataScad, UtilityDate.dateAdd(Calendar.DATE, gg, UtilityDate.getTodayWithoutTime())) > 0) {
anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, "Impossibile effetture un reso di un articolo sotto scadenza."));
continue;
}
@@ -2028,8 +2045,8 @@ public class PvmService {
if (qtaAcq != null && UtilityBigDecimal.greaterThan(UtilityHashMap.getValueIfExists(lotto, "qta_col"), qtaAcq)) {
anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, String.format("Quantità resa maggiore di quantità acquistata %s", qtaAcq)));
}
} else if (!UtilityString.isNullOrEmpty(gg)) {
if (UtilityDate.DaysAfter(UtilityDate.getTodayWithoutTime(), dataScad) > Integer.parseInt(gg)) {
} else if (gg != null && !gestioneDoc.equalsIgnoreCase("A")) {
if (UtilityDate.DaysAfter(UtilityDate.getTodayWithoutTime(), dataScad) > gg) {
anomalieResiDTO.add(setAnomalia(anomalieResiDTO, codMart, dataScad, String.format("Impossibile effetture un %S di un articolo con scadenza %s.", codDtip, UtilityDate.formatDate(dataScad, CommonConstants.DATE_FORMAT_DMY))));
continue;
}
@@ -2225,7 +2242,7 @@ public class PvmService {
Integer numOrd = inputValue.get("numOrd").asInt() != 0 ? inputValue.get("numOrd").asInt() : null;
if (numOrd == null) {
dataOrd = new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).format(new Date());
dataOrd = new SimpleDateFormat(DATE_FORMAT_YMD).format(new Date());
}
String query = "SELECT mtb_depo.cod_anag, mtb_depo.cod_vdes " +
@@ -2247,7 +2264,7 @@ public class PvmService {
info.close();
wdtbOrdt.setGestione(gestione);
wdtbOrdt.setDataOrd(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).parse(dataOrd));
wdtbOrdt.setDataOrd(new SimpleDateFormat(DATE_FORMAT_YMD).parse(dataOrd));
wdtbOrdt.setNumOrd(numOrd);
wdtbOrdt.setSerie(serie);
wdtbOrdt.setCodAnag(codAnag);
@@ -2271,7 +2288,7 @@ public class PvmService {
//Letta la riga ord direttamente dal db.
query = "SELECT riga_ord "
+ "FROM wdtb_ordr "
+ "WHERE data_ord = " + UtilityDB.valueDateToString(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).parse(dataOrd), CommonConstants.DATE_FORMAT_YMD) + " AND "
+ "WHERE data_ord = " + UtilityDB.valueDateToString(new SimpleDateFormat(DATE_FORMAT_YMD).parse(dataOrd), DATE_FORMAT_YMD) + " AND "
+ " num_ord = " + numOrd + " AND "
+ " cod_mart = " + UtilityDB.valueToString(codStyle) + " AND "
+ " cod_col = " + UtilityDB.valueToString(codCol) + " AND "
@@ -2292,7 +2309,7 @@ public class PvmService {
if (rigaOrd != null) {
wdtbOrdr.setOperation(OperationType.DELETE);
wdtbOrdr.setDataOrd(new SimpleDateFormat(CommonConstants.DATE_FORMAT_YMD).parse(dataOrd));
wdtbOrdr.setDataOrd(new SimpleDateFormat(DATE_FORMAT_YMD).parse(dataOrd));
wdtbOrdr.setNumOrd(numOrd);
wdtbOrdr.setGestione(gestione);
wdtbOrdr.setSerie(serie);
@@ -2643,4 +2660,32 @@ public class PvmService {
return null;
return permessi.stream().collect(Collectors.groupingBy(PvmAuthorizationDTO::getUsername));
}
public DtbOrdt updateDataCons(String gestione, Date dataOrd, Integer numOrd, Date dataCons) throws Exception {
if (dataCons == null) {
throw new Exception("Data di consegna non valida");
}
String sql = Query.format("SELECT * FROM dtb_ordr WHERE gestione = %s AND data_ord = %s AND num_ord = %s",
gestione, dataOrd, numOrd);
List<DtbOrdr> dtbOrdrList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbOrdr.class);
dtbOrdrList.stream().forEach(x -> {
x.setDataCons(dataCons);
x.setOperation(OperationType.UPDATE);
}
);
DtbOrdt dtbOrdt = new DtbOrdt()
.setGestione(gestione)
.setDataOrd(dataOrd)
.setNumOrd(numOrd)
.setDtbOrdr(dtbOrdrList);
dtbOrdt.setOperation(OperationType.NO_OP);
entityProcessor.processEntity(dtbOrdt, multiDBTransactionManager);
return dtbOrdt;
}
}

View File

@@ -8,6 +8,7 @@ import it.integry.ems.system.exchange.service.structure.ExchangeImportDataManage
import it.integry.ems.system.exchange.service.structure.ExchangeImportSchemaManagerService;
import it.integry.ems_model.base.EquatableEntityInterface;
import it.integry.ems_model.entity.VtbOffr;
import it.integry.ems_model.entity.VtbOffrStorico;
import it.integry.ems_model.entity.VtbOfft;
import it.integry.ems_model.exception.EntityException;
import org.apache.logging.log4j.LogManager;
@@ -63,10 +64,12 @@ public class ExchangeContrattiImportService {
String testataTableName = null;
String righeTableName = null;
String storicoTableName = null;
if (schemaType == ExchangeImportSchemaManagerService.SchemaType.ContrattiVendita) {
testataTableName = "vtb_offt_vend";
righeTableName = "vtb_offr_vend";
storicoTableName = "vtb_offr_storico_vend";
}
exchangeImportDataManagerService.prepareData(exchangeMultiDb.getPrimaryConnection(), useTempTable,
@@ -76,11 +79,11 @@ public class ExchangeContrattiImportService {
final List<VtbOfft> exchangeImportedData = retrieveContratti(
exchangeMultiDb.getPrimaryConnection(),
true, false, testataTableName, righeTableName);
true, false, testataTableName, righeTableName, storicoTableName);
final List<VtbOfft> exchangeUpdatedData = retrieveContratti(
exchangeMultiDb.getPrimaryConnection(),
false, useTempTable, testataTableName, righeTableName);
false, useTempTable, testataTableName, righeTableName, storicoTableName);
List<EquatableEntityInterface> allData = exchangeImportDataManagerService
.runSync(VtbOfft.class, exchangeImportedData, exchangeUpdatedData);
@@ -97,6 +100,7 @@ public class ExchangeContrattiImportService {
singleUpdateImported(exchangeMultiDb.getPrimaryConnection(), (VtbOfft) dataToSave, useTempTable, testataTableName);
singleUpdateImported(exchangeMultiDb.getPrimaryConnection(), ((VtbOfft) dataToSave).getVtbOffr(), useTempTable, righeTableName);
singleUpdateStoricoImported(exchangeMultiDb.getPrimaryConnection(), ((VtbOfft) dataToSave).getVtbOffrStorico(), useTempTable, storicoTableName);
internalMultiDb.commitAll();
exchangeMultiDb.commitAll();
@@ -122,10 +126,11 @@ public class ExchangeContrattiImportService {
private List<VtbOfft> retrieveContratti(Connection connection, boolean retrieveAlreadyImported, boolean useTempTable,
String testataOriginalName, String righeOriginalName) throws Exception {
String testataOriginalName, String righeOriginalName, String storicoOriginalName) throws Exception {
String testataTableName = testataOriginalName + (useTempTable ? "_tmp" : "");
String righeTableName = righeOriginalName + (useTempTable ? "_tmp" : "");
String storicoTableName = storicoOriginalName + (useTempTable ? "_tmp" : "");
final List<VtbOfft> testate = exchangeImportDataManagerService.retrieveDataFromExchange(connection, VtbOfft.class,
@@ -134,6 +139,9 @@ public class ExchangeContrattiImportService {
final List<VtbOffr> righe = exchangeImportDataManagerService.retrieveDataFromExchange(connection, VtbOffr.class,
righeTableName, null, retrieveAlreadyImported);
final List<VtbOffrStorico> storico = exchangeImportDataManagerService.retrieveDataFromExchange(connection, VtbOffrStorico.class,
storicoTableName, null, retrieveAlreadyImported);
testate
.parallelStream()
@@ -141,7 +149,11 @@ public class ExchangeContrattiImportService {
x.setVtbOffr(righe.parallelStream()
.filter(y -> Objects.hash(x.getIdOfferta()) == Objects.hash(y.getIdOfferta()) &&
(Objects.equals(x.getIdOfferta(), y.getIdOfferta())))
.collect(Collectors.toList()));
.collect(Collectors.toList()))
.setVtbOffrStorico(storico.parallelStream()
.filter(y -> Objects.hash(x.getIdOfferta()) == Objects.hash(y.getIdOfferta()) &&
(Objects.equals(x.getIdOfferta(), y.getIdOfferta())))
.collect(Collectors.toList()));
});
return testate;
@@ -166,4 +178,15 @@ public class ExchangeContrattiImportService {
exchangeImportDataManagerService.updateImportedStatus(connection, tableName, importedRowKeys, useTempTable);
}
private void singleUpdateStoricoImported(Connection connection, List<VtbOffrStorico> imported, boolean useTempTable, String tableName) throws Exception {
final List<HashMap<String, Object>> importedRowKeys = imported.stream()
.map(x -> new HashMap<String, Object>() {{
put("id_offerta", x.getIdOfferta());
put("cod_mart", x.getCodMart());
}})
.collect(Collectors.toList());
exchangeImportDataManagerService.updateImportedStatus(connection, tableName, importedRowKeys, useTempTable);
}
}

View File

@@ -147,6 +147,7 @@ public class ExchangeImportSchemaManagerService {
put(SchemaType.ContrattiVendita, new HashMap<String, Class<? extends EntityInterface>>() {{
put("vtb_offt_vend", VtbOfft.class);
put("vtb_offr_vend", VtbOffr.class);
put("vtb_offr_storico_vend", VtbOffrStorico.class);
}});
put(SchemaType.DistinteBase, new HashMap<String, Class<? extends EntityInterface>>() {{
put("jtb_cicl", JtbCicl.class);