gestioen fatturazione pedane
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2024-12-20 16:14:55 +01:00
parent 7e1c790864
commit 93b4569587
13 changed files with 309 additions and 174 deletions

View File

@@ -24,7 +24,7 @@ public class DocumentiDirettiController {
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody DtbDoct dtbDoct) throws Exception{
return ServiceRestResponse.createPositiveResponse(documentiDirettiService.save(dtbDoct));
return ServiceRestResponse.createPositiveResponse(documentiDirettiService.save(dtbDoct, true));
}
@RequestMapping(value = "update", method = RequestMethod.POST)
@@ -33,7 +33,7 @@ public class DocumentiDirettiController {
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody DtbDoct dtbDoct) throws Exception{
return ServiceRestResponse.createPositiveResponse(documentiDirettiService.save(dtbDoct));
return ServiceRestResponse.createPositiveResponse(documentiDirettiService.save(dtbDoct, false));
}
@RequestMapping(value = "delete", method = RequestMethod.POST)

View File

@@ -1,6 +1,8 @@
package it.integry.ems.document.service;
import it.integry.common.var.CommonConstants;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.menu.dto.StbMenuDTO;
import it.integry.ems.rules.businessLogic.enums.TipoEmissione;
import it.integry.ems.rules.completing.ConfigActivityRules;
import it.integry.ems.service.EntityProcessor;
@@ -19,6 +21,7 @@ import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -36,7 +39,7 @@ public class DocumentiDirettiService {
@Autowired
private SetupGest setupGest;
public List<EntityBase> save(DtbDoct dtbDoct) throws Exception {
public List<EntityBase> save(DtbDoct dtbDoct, boolean isInsert) throws Exception {
List<EntityBase> entityList = new ArrayList<>();
entityList.add(dtbDoct);
@@ -53,139 +56,7 @@ public class DocumentiDirettiService {
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",
dtbDoct.getCodAnag());
boolean fatturaPedane = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
sql =
Query.format(
"SELECT flag_fattura_vettore FROM gtb_porto WHERE porto = %s",
dtbDoct.getIncoterms());
boolean fatturaVettore = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (fatturaPedane || 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");
sql =
Query.format(
"SELECT cod_anag FROM vtb_vett WHERE cod_vvet = %s",
dtbDoct.getCodVvet());
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 {
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(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){
String codTcol = docImb.getCodTcol();
Integer qta = docImb.getNumImbCons() - docImb.getTipoReso();
sql =
Query.format(
"SELECT cod_mart FROM mtb_tcol WHERE cod_tcol = %s",
codTcol);
String codMart = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (UtilityString.isNullOrEmpty(codMart))
throw new Exception(String.format("Codice articolo non trovato sul tipo collo %s",codTcol));
DtbDocr dtbDocr = new DtbDocr()
.setCodMart(codMart)
.setQtaDoc(new BigDecimal(qta));
dtbDocr.setOperation(OperationType.INSERT);
dtbDoctPed.getDtbDocr().add(dtbDocr);
}
}
saveDocImballi(dtbDoct, entityList, isInsert);
}
List<EntityBase> entityRet = entityProcessor.processEntityList(entityList, true);
@@ -195,6 +66,199 @@ public class DocumentiDirettiService {
return entityRet;
}
private void saveDocImballi(DtbDoct dtbDoct, List<EntityBase> entityList, boolean isInsert) throws Exception {
String sql;
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");
}
String idAttivita = null;
DtbDoct dtbDoctPedOld = null;
if (!isInsert){
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);
idAttivita = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
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);
}
}
sql =
Query.format(
"SELECT fattura_pedane_separate FROM vtb_clie WHERE cod_anag = %s",
dtbDoct.getCodAnag());
boolean fatturaPedaneCliente = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
sql =
Query.format(
"SELECT flag_fattura_vettore FROM gtb_porto WHERE porto = %s",
dtbDoct.getIncoterms());
boolean fatturaVettore = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if (fatturaPedaneCliente || fatturaVettore) {
final String gestName = "DTB_DOCT";
final String section = "FATTURA_PEDANE";
final String keySectionTipoDoc = "TIPO_DOC_RESI";
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));
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.getCodFornTrasp()))
throw new Exception("Codice fornitore del trasporto non presente sul documento");
codAnagPed = dtbDoct.getCodFornTrasp();
} else {
codAnagPed = dtbDoct.getCodAnag();
}
HashMap<String, Object> oldPkDoc = new HashMap<>();
Integer numDocPed = null;
Date dataDocPed = null;
String serDocPed = null;
if (dtbDoctPedOld != null){
dataDocPed = dtbDoctPedOld.getDataDoc();
numDocPed = dtbDoctPedOld.getNumDoc();
oldPkDoc = new HashMap<>();
oldPkDoc.put("codDtip", dtbDoctPedOld.getCodDtip());
oldPkDoc.put("codAnag", dtbDoctPedOld.getCodAnag());
oldPkDoc.put("dataDoc", dtbDoctPedOld.getDataDoc());
oldPkDoc.put("serDoc", dtbDoctPedOld.getSerDoc());
oldPkDoc.put("numDoc", dtbDoctPedOld.getNumDoc());
}
List<DtbDocImb> imballi = dtbDoct.getDtbDocImb().stream().filter(x->x.getTipoReso()!=2).collect(Collectors.toList());
Map<Boolean, List<DtbDocImb>> gruppoImballi = imballi.stream().collect(Collectors.groupingBy(x -> x.getNumImbCons() > x.getNumImbResi()));
for (Map.Entry<Boolean, List<DtbDocImb>> item : gruppoImballi.entrySet()) {
if (item.getKey())
codDtipPed = dtbDoct.getCodDtip();
if (dtbDoctPedOld !=null && codDtipPed.equalsIgnoreCase(dtbDoctPedOld.getCodDtip()))
serDocPed = dtbDoctPedOld.getSerDoc();
else
serDocPed = null;
DtbDoct dtbDoctPed =
new DtbDoct()
.setCodDtip(codDtipPed)
.setCodAnag(codAnagPed)
.setDataDoc(dataDocPed==null? dtbDoct.getDataDoc():dataDocPed)
.setSerDoc(serDocPed)
.setNumDoc(numDocPed)
.setCodMdep(dtbDoct.getCodMdep())
.setActivityId(idAttivita)
.setListino(dtbDoct.getListino());
if ( !oldPkDoc.isEmpty()) {
dtbDoctPed.setOldPk(oldPkDoc);
}
dtbDoctPed.setOperation(OperationType.DELETE_THEN_INSERT);
entityList.add(dtbDoctPed);
for (DtbDocImb docImb : item.getValue()) {
String codTcol = docImb.getCodTcol();
int qta = docImb.getNumImbCons() - docImb.getTipoReso();
sql =
Query.format(
"SELECT mtb_tcol.cod_mart, " +
"mtb_aart.descrizione " +
"FROM mtb_tcol INNER JOIN mtb_aart ON mtb_tcol.cod_mart = mtb_aart.cod_mart " +
"WHERE cod_tcol = %s",
codTcol);
HashMap<String, Object> datiTipoCollo = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), sql);
String codMart = UtilityHashMap.getValueIfExists(datiTipoCollo, "cod_mart");
String descrizioneTipoCollo = UtilityHashMap.getValueIfExists(datiTipoCollo, "descrizione");
if (UtilityString.isNullOrEmpty(codMart))
throw new Exception(String.format("Codice articolo non trovato sul tipo collo %s", codTcol));
DtbDocr dtbDocr = new DtbDocr()
.setCodMart(codMart)
.setQtaDoc(new BigDecimal(qta).abs());
dtbDocr.setOperation(OperationType.INSERT);
dtbDoctPed.getDtbDocr().add(dtbDocr);
String descrizione = descrizioneTipoCollo + ": ";
if (docImb.getNumImbCons() > 0) {
descrizione +=
String.format("CARICATE/I %s", docImb.getNumImbCons());
}
if (docImb.getNumImbResi() > 0) {
if (descrizione != null && descrizione.length() > 0)
descrizione += ", ";
descrizione +=
String.format("RESE/I %s", docImb.getNumImbResi());
}
dtbDocr = new DtbDocr()
.setDescrizione(UtilityString.left(descrizione,40))
.setDescrizioneEstesa(descrizione);
dtbDocr.setOperation(OperationType.INSERT);
dtbDoctPed.getDtbDocr().add(dtbDocr);
}
if (!imballi.isEmpty()) {
String descrizione =
String.format("NS. RIF. %S DEL %S N. %S/%S",
dtbDoct.getCodDtip(),
new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(dtbDoct.getDataDoc()),
dtbDoct.getSerDoc(),
dtbDoct.getNumDoc());
DtbDocr dtbDocr = new DtbDocr()
.setDescrizione(UtilityString.left(descrizione, 40))
.setDescrizioneEstesa(descrizione);
dtbDocr.setOperation(OperationType.INSERT);
dtbDoctPed.getDtbDocr().add(dtbDocr);
}
}
} else if ( dtbDoctPedOld != null ){
dtbDoctPedOld.setOperation(OperationType.DELETE);
entityList.add(dtbDoctPedOld);
}
}
private StbActivity createStbAcvitity(String activityTypeId) throws Exception {
String idAttivita = ConfigActivityRules.completeActivityId(multiDBTransactionManager.getPrimaryConnection());