modifiche su documenti di vendita
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2024-12-12 10:38:14 +01:00
parent 9b9b4af6b4
commit 0c53ee4d80
4 changed files with 169 additions and 22 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_20241210163546 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("COD_DTIP", "COD_DTIP", "SELECT COD_DTIP FROM DTB_TIPI ORDER BY 1");
createSetup("DTB_DOCT", "FATTURA_PEDANE", "TIPO_DOC", null,
"tipo documento per generare la fattura delle pedane", false, "COD_DTIP", false, false,
false, false, false, null, false, "SELECT COD_DTIP FROM DTB_TIPI ORDER BY 1");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -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_20241211132016 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("ACTIVITY_TYPE", "ACTIVITY_TYPE", "SELECT ACTIVITY_TYPE_ID FROM STB_ACTIVITY_TYPE WHERE FLAG_TIPOLOGIA = 'A' AND FLAG_ATTIVA = 'S'");
createSetup("DTB_DOCT", "FATTURA_PEDANE", "TIPO_ATTIVITA", null,
"Inserirere il tipo attività per legare la fattura delle pedane", false, "ACTIVITY_TYPE", false, false,
false, false, false, null, false, "SELECT ACTIVITY_TYPE_ID FROM STB_ACTIVITY_TYPE WHERE FLAG_TIPOLOGIA = 'A' AND FLAG_ATTIVA = 'S'");
if ( isCustomer(IntegryCustomer.RossoGargano)) {
executeStatement("INSERT INTO stb_activity_type (activity_type_id, flag_tipologia) VALUES ('FATTURA_PEDANE', 'A')");
updateSetupValue("DTB_DOCT", "FATTURA_PEDANE", "TIPO_ATTIVITA", "FATTURA_PEDANE");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -42,6 +42,6 @@ public class DocumentiDirettiController {
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody DtbDoct dtbDoct) throws Exception{
return ServiceRestResponse.createPositiveResponse(documentiDirettiService.save(dtbDoct));
return ServiceRestResponse.createPositiveResponse(documentiDirettiService.delete(dtbDoct));
}
}

View File

@@ -1,13 +1,14 @@
package it.integry.ems.document.service;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.rules.businessLogic.enums.TipoEmissione;
import it.integry.ems.rules.completing.ConfigActivityRules;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.entity.DtbDocImb;
import it.integry.ems_model.entity.DtbDocr;
import it.integry.ems_model.entity.DtbDoct;
import it.integry.ems_model.entity.DtbTipi;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
@@ -18,9 +19,7 @@ import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -31,11 +30,15 @@ public class DocumentiDirettiService {
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
@Autowired
private RequestDataDTO requestDataDTO;
@Autowired
private SetupGest setupGest;
public List<EntityBase> save(DtbDoct dtbDoct) throws Exception {
List<EntityBase> listEntity = new ArrayList<>();
listEntity.add(dtbDoct);
List<EntityBase> entityList = new ArrayList<>();
entityList.add(dtbDoct);
String sql =
Query.format(
@@ -47,10 +50,32 @@ public class DocumentiDirettiService {
if (!UtilityHashMap.isPresent(datiTipoDoc))
throw new Exception(String.format("Tipo Documento %s inesistente", dtbDoct.getCodDtip()));
if (UtilityHashMap.<String>getValueIfExists(datiTipoDoc, "gestione").equalsIgnoreCase("V") &&
TipoEmissione.valueOf(UtilityHashMap.getValueIfExists(datiTipoDoc, "tipo_emissione")) == TipoEmissione.DIRETTA &&
!dtbDoct.getDtbDocImb().isEmpty() && dtbDoct.getDtbDocImb().stream().anyMatch(x->x.getTipoReso()!= 2)) {
String codAnag = dtbDoct.getCodAnag();
String codDtip = dtbDoct.getCodDtip();
Date dataDoc = dtbDoct.getDataDoc();
String serDoc = dtbDoct.getSerDoc();
Integer numDoc = dtbDoct.getNumDoc();
Map<String, Object> oldPk = dtbDoct.getOldPk();
if (oldPk != null && oldPk.size() > 0) {
if (oldPk.containsKey("codAnag")) codAnag = (String) oldPk.get("codAnag");
if (oldPk.containsKey("codDtip")) codDtip = (String) oldPk.get("codDtip");
if (oldPk.containsKey("dataDoc")) dataDoc = UtilityString.parseDate((String) oldPk.get("dataDoc"));
if (oldPk.containsKey("serDoc")) serDoc = (String) oldPk.get("serDoc");
if (oldPk.containsKey("numDoc")) numDoc = (Integer) oldPk.get("numDoc");
}
final String gestName = "DTB_DOCT";
final String section = "FATTURA_PEDANE";
final String keySectionTipoDoc = "TIPO_DOC";
HashMap<String, String> setupSection = setupGest.getSetupSection(multiDBTransactionManager.getPrimaryConnection(), gestName, section);
String codDtipPed = setupSection.get(keySectionTipoDoc);
if (UtilityString.isNullOrEmpty(codDtipPed))
throw new Exception(String.format("Tipo Documento per la creazione della fattura delle pedane non configurato %s -> %s -> %s", gestName, section, keySectionTipoDoc));
sql =
Query.format(
"SELECT fattura_pedane_separate FROM vtb_clie WHERE cod_anag = %s",
@@ -60,15 +85,33 @@ public class DocumentiDirettiService {
sql =
Query.format(
"SELECT flag_fattura_vettore FROM gtb_porto WHERE cod_porto = %s",
"SELECT flag_fattura_vettore FROM gtb_porto WHERE porto = %s",
dtbDoct.getIncoterms());
boolean fatturaVettore = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (fatturaPedane || fatturaVettore) {
String codAnag;
//Creazione documento parallelo
if (fatturaVettore) {
sql = Query.format("SELECT activity_id FROM dtb_doct WHERE cod_anag = %s AND cod_dtip = %s AND data_doc = %s AND ser_doc = %s AND num_doc = %s",
codAnag,
codDtip,
dataDoc,
serDoc,
numDoc);
String idAttivita = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (UtilityString.isNullOrEmpty(idAttivita)) {
final String keySectionTipoAttivita = "TIPO_ATTIVITA";
String activityTypeId = setupSection.get(keySectionTipoAttivita);
if (UtilityString.isNullOrEmpty(activityTypeId))
throw new Exception(String.format("Tipo attività non configurato %s -> %s -> %s", gestName, section, keySectionTipoAttivita));
StbActivity stbActivity = createStbAcvitity(activityTypeId);
entityList.add(0, stbActivity);
idAttivita = stbActivity.getActivityId();
dtbDoct.setActivityId(idAttivita);
}
String codAnagPed;
if (fatturaVettore) {
if (UtilityString.isNullOrEmpty(dtbDoct.getCodVvet()))
throw new Exception("Codice vettore non presente sul documento");
@@ -77,20 +120,48 @@ public class DocumentiDirettiService {
"SELECT cod_anag FROM vtb_vett WHERE cod_vvet = %s",
dtbDoct.getCodVvet());
codAnag = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
codAnagPed = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (UtilityString.isNullOrEmpty(codAnag))
throw new Exception(String.format("Codice fornitore non trovato sul vettore %s", dtbDoct.getCodVvet()));
} else {
codAnag = dtbDoct.getCodAnag();
codAnagPed = dtbDoct.getCodAnag();
}
DtbDoct dtbDoctPedOld = null;
if (!UtilityString.isNullOrEmpty(idAttivita)){
sql = Query.format("SELECT cod_anag, cod_dtip, data_doc, ser_doc, num_doc FROM dtb_doct WHERE activity_id = %s AND NOT(cod_anag = %s AND cod_dtip = %s AND data_doc = %s AND ser_doc = %s AND num_doc = %s)",
idAttivita,
codAnag,
codDtip,
dataDoc,
serDoc,
numDoc);
dtbDoctPedOld = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DtbDoct.class);
}
Integer numDocPed = null;
Date dataDocPed = null;
String serDocPed = null;
if (dtbDoctPedOld != null){
dataDocPed = dtbDoctPedOld.getDataDoc();
numDocPed = dtbDoctPedOld.getNumDoc();
serDocPed = dtbDoctPedOld.getSerDoc();
dtbDoctPedOld.setOperation(OperationType.DELETE);
entityList.add(dtbDoctPedOld);
}
DtbDoct dtbDoctPed =
new DtbDoct()
.setCodDtip("")
.setCodAnag(codAnag)
.setDataDoc(dtbDoct.getDataDoc());
.setCodDtip(codDtipPed)
.setCodAnag(codAnagPed)
.setDataDoc(dataDocPed==null?dtbDoct.getDataDoc():dataDocPed)
.setSerDoc(serDocPed)
.setNumDoc(numDocPed)
.setActivityId(idAttivita);
dtbDoctPed.setOperation(OperationType.DELETE_THEN_INSERT);
entityList.add(dtbDoctPed);
List<DtbDocImb> imballi = dtbDoct.getDtbDocImb().stream().filter(x->x.getTipoReso()!=2).collect(Collectors.toList());
for (DtbDocImb docImb: imballi){
@@ -111,11 +182,33 @@ public class DocumentiDirettiService {
.setCodMart(codMart)
.setQtaDoc(new BigDecimal(qta));
dtbDocr.setOperation(OperationType.INSERT);
dtbDoctPed.getDtbDocr().add(dtbDocr);
}
}
}
return entityProcessor.processEntityList(listEntity, true);
List<EntityBase> entityRet = entityProcessor.processEntityList(entityList, true);
UtilityEntity.throwEntitiesException(entityRet);
return entityRet;
}
private StbActivity createStbAcvitity(String activityTypeId) throws Exception {
String idAttivita = ConfigActivityRules.completeActivityId(multiDBTransactionManager.getPrimaryConnection());
StbActivity stbActivity = new StbActivity()
.setActivityId(idAttivita)
.setFlagTipologia("A")
.setActivityTypeId(activityTypeId)
.setUserName(requestDataDTO.getUsername());
stbActivity.setOperation(OperationType.INSERT_OR_UPDATE);
return stbActivity;
}
public EntityBase delete(DtbDoct dtbDoct) throws Exception {
UtilityEntity.throwEntitiesException(entityProcessor.processEntity(dtbDoct, multiDBTransactionManager ));
return dtbDoct;
}
}