Merge branch 'develop' into feature/SpostaUl

This commit is contained in:
2025-03-03 10:01:06 +01:00
16 changed files with 453 additions and 225 deletions

View File

@@ -1,6 +1,7 @@
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;
public class Migration_20250226143555 extends BaseMigration implements MigrationModelInterface {
@@ -10,6 +11,9 @@ public class Migration_20250226143555 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
executeStatement("alter table dtb_ordt add incoterms varchar(20)",
"alter table vtb_viaggi add note_incoterms varchar(20)");
}

View File

@@ -1,6 +1,7 @@
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;
public class Migration_20250227122632 extends BaseMigration implements MigrationModelInterface {
@@ -10,6 +11,8 @@ public class Migration_20250227122632 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
createOrUpdateFunction("getSospesoClienti_completa", "CREATE FUNCTION [dbo].[getSospesoClienti_completa]\n" +
"\n" +

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.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250228142840 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
executeStatement("ALTER TABLE dtb_ordt ADD note_incoterms VARCHAR(20)",
"ALTER TABLE dtb_ordt ALTER COLUMN porto VARCHAR(40)");
}
@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.MigrationModelInterface;
public class Migration_20250228145852 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("\n" +
"insert into gtb_periodo_fisc\n" +
"select YEAR(GETDATE()) + rowId, \n" +
"DATEFROMPARTS(YEAR(GETDATE()) + rowId, azienda.mese_iniz_anno_fisc, azienda.giorno_iniz_anno_fisc),\n" +
"DateAdd( DAY, -1, DateAdd(Year, 1, DATEFROMPARTS(YEAR(GETDATE()) + rowId, azienda.mese_iniz_anno_fisc, azienda.giorno_iniz_anno_fisc)))\n" +
"from dbo.stb_counter, azienda\n" +
"where rowId <=10\n" +
"except \n" +
"select * \n" +
"from gtb_periodo_fisc ");
}
@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_20250228161635 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("update stb_menu set flag_attivo = 'N' where cod_opz = 'AR012'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -541,5 +541,33 @@ public class AccountingBusinessLogic {
return importoCompetenza;
}
public static GtbPeriodoFisc getPeriodoFisc(Connection conn, Integer anno) throws Exception {
String whereCond = String.format("anno = %s", UtilityDB.valueToString(anno));
GtbPeriodoFisc gtbPeriodoFisc = getPeriodoFisc(conn, whereCond);
if (gtbPeriodoFisc == null) {
throw new Exception("Impossibile individuare il periodo fiscale per l'anno " + anno);
}
return gtbPeriodoFisc;
}
public static GtbPeriodoFisc getPeriodoFisc(Connection conn, Date data) throws Exception {
String whereCond = String.format("%s BETWEEN data_iniz AND data_fine", UtilityDB.valueToString(data));
GtbPeriodoFisc gtbPeriodoFisc = getPeriodoFisc(conn, whereCond);
if (gtbPeriodoFisc == null) {
throw new Exception("Impossibile individuare il periodo fiscale per la data " + new SimpleDateFormat(CommonConstants.DATE_FORMAT_DMY).format(data));
}
return gtbPeriodoFisc;
}
public static Integer getAnnoFisc(Connection conn, Date data) throws Exception {
GtbPeriodoFisc periodoFisc = getPeriodoFisc(conn, data);
return periodoFisc.getAnno();
}
private static GtbPeriodoFisc getPeriodoFisc(Connection conn, String whereCond) throws Exception {
String sql = "SELECT * FROM gtb_periodo_fisc ";
sql = UtilityDB.addwhereCond(sql, whereCond, true, false);
GtbPeriodoFisc gtbPeriodoFisc = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, sql, GtbPeriodoFisc.class);
return gtbPeriodoFisc;
}
}

View File

@@ -476,7 +476,6 @@ public class EmsRestConstants {
public static final String PATH_REGISTRA_MOVCONV_AMMORTAMENTI = PATH + "registraMovContAmmortamenti";
public static final String PATH_CHK_AUTOFATTURA = PATH + "chkAutofattura";
public static final String PATH_PASSAGGIO_ANNO = PATH + "passaggioAnno";
public static final String PATH_REG_GIRO_RISCONTI = PATH + "registraGirocontoRisconti";
//SLIM2k
public static final String PATH_IMPORT_COLLI_SLIM2K = PATH + "importColliSlim2k";
public static final String PATH_IMPORT_COLLI_ACQ_SLIM2K = PATH + "importColliAcqSlim2k";

View File

@@ -277,7 +277,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
@SqlField(value = "peso", maxLength = 20)
private String peso;
@SqlField(value = "porto", maxLength = 20)
@SqlField(value = "porto", maxLength = 40)
private String porto;
@SqlField(value = "qta_evasa_prod", defaultObjectValue = "0")
@@ -381,6 +381,9 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
@SqlField(value = "incoterms", maxLength = 20)
private String incoterms;
@SqlField(value = "note_incoterms", maxLength = 20)
private String noteIncoterms;
private BigDecimal cambio;
private String userName;
@@ -1378,6 +1381,15 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
return this;
}
public String getNoteIncoterms() {
return noteIncoterms;
}
public DtbOrdt setNoteIncoterms(String noteIncoterms) {
this.noteIncoterms = noteIncoterms;
return this;
}
@Override
public List<DtbOrdr> getRows() {
return getDtbOrdr();

View File

@@ -13,6 +13,7 @@ import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.response.StatusResponse;
import it.integry.ems.rules.businessLogic.AccountingBusinessLogic;
import it.integry.ems.service.comuni.base.CapCittaProv;
import it.integry.ems.service.comuni.entities.Comune;
import it.integry.ems.service.comuni.exceptions.ComuniException;
@@ -31,6 +32,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.ws.soap.SOAPFaultException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -182,22 +184,6 @@ public class ContabilController {
return response;
}
@RequestMapping(value = EmsRestConstants.PATH_REG_GIRO_RISCONTI, method = RequestMethod.POST)
public @ResponseBody
List<ServiceRestResponse> creaMovGiroRisconti(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam("dataReg") Date dataReg,
@RequestParam("causale") String codCcau) {
List<ServiceRestResponse> listResponse = new ArrayList<ServiceRestResponse>();
try {
listResponse = UtilityEntity.toServiceRestResponse(contabilService.creaMovGiroRisconti(dataReg, codCcau));
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
listResponse.add(new ServiceRestResponse(EsitoType.KO, configuration, e));
}
return listResponse;
}
@RequestMapping(value = "/checkPartitaIva", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse checkPartitaIva(@RequestParam(required = false, defaultValue = "true") boolean enableLocationCheck,

View File

@@ -0,0 +1,46 @@
package it.integry.ems.contabil.controller;
import it.integry.common.var.CommonConstants;
import it.integry.ems.contabil.service.RiscontiService;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.config.EmsRestConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@RestController
@Scope("request")
@RequestMapping("risconti")
public class RiscontiController {
@Autowired
private RiscontiService riscontiService;
@RequestMapping(value = "calcolo", method = RequestMethod.GET)
public @ResponseBody
ServiceRestResponse calcolo(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam("dataInizComp") Date dataIniz,
@RequestParam("dataFineComp") Date dataFine,
@RequestParam("dataDoc") Date dataDoc,
@RequestParam("importo") BigDecimal importo ) throws Exception {
return ServiceRestResponse.createPositiveResponse(riscontiService.calcRisconto(dataIniz, dataFine, dataDoc, importo));
}
@RequestMapping(value = "giroconto", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse creaMovGiroRisconti(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam("dataReg") Date dataReg,
@RequestParam("causale") String codCcau) throws Exception {
return ServiceRestResponse.createEntityPositiveResponse(riscontiService.creaMovGiroRisconti(dataReg, codCcau));
}
}

View File

@@ -0,0 +1,26 @@
package it.integry.ems.contabil.dto;
import java.math.BigDecimal;
public class RiscontoDTO {
private BigDecimal importoCompetenza;
private BigDecimal importoRisconto;
public BigDecimal getImportoCompetenza() {
return importoCompetenza;
}
public RiscontoDTO setImportoCompetenza(BigDecimal importoCompetenza) {
this.importoCompetenza = importoCompetenza;
return this;
}
public BigDecimal getImportoRisconto() {
return importoRisconto;
}
public RiscontoDTO setImportoRisconto(BigDecimal importoRisconto) {
this.importoRisconto = importoRisconto;
return this;
}
}

View File

@@ -3,6 +3,7 @@ package it.integry.ems.contabil.service;
import it.integry.common.var.CommonConstants;
import it.integry.ems.contabil.dto.CalcAmmortamentoDTO;
import it.integry.ems.contabil.dto.RegMovConAmmortamentoDTO;
import it.integry.ems.rules.businessLogic.AccountingBusinessLogic;
import it.integry.ems.rules.completing.QueryRules;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
@@ -195,9 +196,9 @@ public class AmmortamentiService {
// Inizializzazione variabili
Integer annoFondo = calcAmmDTO.getAnno();
HashMap<String, Object> datiPeriodoFisc = contabilService.getPeriodoFisc(annoFondo);
Date dataInizAnnFondo = (Date) datiPeriodoFisc.get("data_iniz");
Date dataFineAnnFondo = (Date) datiPeriodoFisc.get("data_fine");
GtbPeriodoFisc gtbPeriodoFisc = AccountingBusinessLogic.getPeriodoFisc(multiDBTransactionManager.getPrimaryConnection(), annoFondo);
Date dataInizAnnFondo = gtbPeriodoFisc.getDataIniz();
Date dataFineAnnFondo = gtbPeriodoFisc.getDataFine();
// Cancellazione fondi dell'anno
cancellaFondi(calcAmmDTO);
@@ -416,7 +417,9 @@ public class AmmortamentiService {
HashMap<String, Object> toReturn = new HashMap<>();
String tipoConto = (String) QueryRules.getSingleValue(multiDBTransactionManager.getPrimaryConnection(), "SELECT ctb_grup.tipo FROM ctb_cont, ctb_grup WHERE ctb_cont.cod_cgrp = ctb_grup.cod_cgrp AND ctb_cont.cod_ccon = " + UtilityDB.valueToString(conto));
if (tipoConto.equalsIgnoreCase("4") || tipoConto.equalsIgnoreCase("5")){
toReturn = contabilService.getPeriodoFisc(annoComp);
GtbPeriodoFisc gtbPeriodoFisc = AccountingBusinessLogic.getPeriodoFisc(multiDBTransactionManager.getPrimaryConnection(), annoComp);
toReturn.put("data_iniz", gtbPeriodoFisc.getDataIniz());
toReturn.put("data_fine", gtbPeriodoFisc.getDataFine());
} else {
toReturn.put("data_iniz", null);
toReturn.put("data_fine", null);
@@ -641,9 +644,9 @@ public class AmmortamentiService {
}
public void aggiornaStampaReg(RegMovConAmmortamentoDTO regMovConAmmortamentoDTO) throws Exception {
HashMap<String, Object> datiPeriodoFisc = contabilService.getPeriodoFisc(regMovConAmmortamentoDTO.getAnnoComp());
Date dataInizAnnpComp = (Date) datiPeriodoFisc.get("data_iniz");
Date dataFineAnnpComp = (Date) datiPeriodoFisc.get("data_fine");
GtbPeriodoFisc gtbPeriodoFisc = AccountingBusinessLogic.getPeriodoFisc(multiDBTransactionManager.getPrimaryConnection(), regMovConAmmortamentoDTO.getAnnoComp());
Date dataInizAnnpComp = gtbPeriodoFisc.getDataIniz();
Date dataFineAnnpComp = gtbPeriodoFisc.getDataFine();
String whereCondCatBeni = UtilityString.replaceSubString(regMovConAmmortamentoDTO.getWhereCondCatBeni(), "dtb_catbeni", "ctb_beni");
// Controllo che non ci siano anni inferiori all'anno di competenza ancora da stampare
@@ -689,9 +692,9 @@ public class AmmortamentiService {
CtbMovt movT = new CtbMovt();
Integer rigaMov = 0;
HashMap<String, Object> datiPeriodoFisc = contabilService.getPeriodoFisc(regMovConAmmortamentoDTO.getAnnoComp());
Date dataInizAnnoComp = (Date) datiPeriodoFisc.get("data_iniz");
Date dataFineAnnpComp = (Date) datiPeriodoFisc.get("data_fine");
GtbPeriodoFisc gtbPeriodoFisc = AccountingBusinessLogic.getPeriodoFisc(multiDBTransactionManager.getPrimaryConnection(), regMovConAmmortamentoDTO.getAnnoComp());
Date dataInizAnnoComp = gtbPeriodoFisc.getDataIniz();
Date dataFineAnnpComp = gtbPeriodoFisc.getDataFine();
String descCaus = (String) QueryRules.getSingleValue(multiDBTransactionManager.getPrimaryConnection(), "SELECT descrizione FROM ctb_caus WHERE cod_ccau = " + UtilityDB.valueToString(regMovConAmmortamentoDTO.getCodCcau()));
query =

View File

@@ -21,6 +21,7 @@ import it.integry.ems.sync.MultiDBTransaction.Connection;
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.config.EmsRestConstants;
import it.integry.ems_model.db.ResultSetMapper;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.exception.EntityException;
@@ -807,184 +808,6 @@ public class ContabilService {
return listaCtbParr;
}
public List<EntityBase> creaMovGiroRisconti(Date dataReg, String causale) throws Exception {
List<CtbMovt> entityList = new ArrayList<CtbMovt>();
Connection connection = multiDBTransactionManager.getPrimaryConnection();
BigDecimal importoTotMov = BigDecimal.ZERO;
int anno = UtilityDate.datePart(Calendar.YEAR, dataReg);
HashMap<String, Object> datePeriodo = getPeriodoFisc(anno);
Date dataInizio = UtilityHashMap.getValueIfExists(datePeriodo, "data_iniz");
Date dataFine = UtilityHashMap.getValueIfExists(datePeriodo, "data_fine");
String query = "SELECT descrizione FROM ctb_caus where cod_ccau = " + UtilityDB.valueToString(causale);
String descrCausale = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(connection, query);
if (!descrCausale.contains("RISCONT")) {
descrCausale = descrCausale.concat(" RISCONTI");
}
query =
Query.format(
"SELECT ctb_movr.num_cmov,\n" +
" ctb_movr.id_riga,\n" +
" ctb_movr.imp_dare,\n" +
" ctb_movr.imp_avere,\n" +
" ctb_movr.cod_ccon,\n" +
" ctb_movr.cod_ccon_risconto,\n" +
" ctb_movr.data_iniz_comp_risc,\n" +
" ctb_movr.data_fine_comp_risc,\n" +
" ctb_movr.des_agg,\n" +
" ctb_movr.perc_ded\n" +
"FROM ctb_movt\n" +
" INNER JOIN gtb_periodo_fisc\n" +
" ON ctb_movt.data_cmov BETWEEN gtb_periodo_fisc.data_iniz AND gtb_periodo_fisc.data_fine\n" +
" INNER JOIN ctb_movr ON ctb_movt.num_cmov = ctb_movr.num_cmov\n" +
" INNER JOIN ctb_cont ON ctb_movr.cod_ccon = ctb_cont.cod_ccon\n" +
"WHERE ctb_cont.flag_risconto = 'S'\n" +
" AND gtb_periodo_fisc.anno = %s\n" +
" AND ctb_movr.data_iniz_comp_risc IS NOT NULL\n" +
" AND ctb_movr.data_fine_comp_risc IS NOT NULL\n" +
" AND ctb_movr.cod_ccon_risconto IS NOT NULL\n" +
"ORDER BY ctb_movr.num_cmov ", anno - 1);
List<CtbMovr> ctbMovrList = UtilityDB.executeSimpleQueryDTO(connection, query, CtbMovr.class);
if (ctbMovrList != null && !ctbMovrList.isEmpty()) {
List<CtbMovr> ctbMovr = new ArrayList<>();
for (CtbMovr movr : ctbMovrList) {
BigDecimal impDareCosto = BigDecimal.ZERO, impAvereCosto = BigDecimal.ZERO;
BigDecimal impRisconto = movr.getImpDare().subtract(movr.getImpAvere()).abs();
Integer annoInizComp = UtilityDate.datePart(Calendar.YEAR, movr.getDataInizCompRisc());
Integer annoFineComp = UtilityDate.datePart(Calendar.YEAR, movr.getDataFineCompRisc());
importoTotMov = importoTotMov.add(impRisconto);
CtbMovr movRisc = new CtbMovr();
movRisc.setCodCcon(movr.getCodCcon());
movRisc.setImpDare(movr.getImpAvere());
movRisc.setImpAvere(movr.getImpDare());
movRisc.setDesAgg(movr.getDesAgg());
ctbMovr.add(movRisc);
//Risconto su più anni
if (annoFineComp.intValue() > anno) {
BigDecimal impDareRisc = BigDecimal.ZERO, impAvereRisc = BigDecimal.ZERO;
Date dataInizComp;
if (annoInizComp.intValue() > anno) {
impDareRisc = movr.getImpDare();
impAvereRisc = movr.getImpAvere();
dataInizComp = movr.getDataInizCompRisc();
} else {
Date dataFineComp = UtilityDate.dateAdd(Calendar.YEAR, 1, dataFine);
dataInizComp = UtilityDate.dateFromPart(UtilityDate.getYear(dataFineComp), 1, 1);
BigDecimal riscontoComp = AccountingBusinessLogic.calcRisconto(movr, movr.getDataInizCompRisc(), dataFine, impRisconto);
BigDecimal riscontoResiduo = impRisconto.subtract(riscontoComp);
if (movr.getImpDare().compareTo(BigDecimal.ZERO) > 0) {
impDareRisc = riscontoResiduo;
impDareCosto = riscontoComp;
} else {
impAvereRisc = riscontoResiduo;
impAvereCosto = riscontoComp;
}
}
CtbMovr movNewRisc = new CtbMovr();
movNewRisc.setCodCcon(movr.getCodCcon());
movNewRisc.setImpDare(impDareRisc);
movNewRisc.setImpAvere(impAvereRisc);
movNewRisc.setDesAgg(movr.getDesAgg());
movNewRisc.setDataInizCompRisc(dataInizComp);
movNewRisc.setDataFineCompRisc(movr.getDataFineCompRisc());
movNewRisc.setCodCconRisconto(movr.getCodCconRisconto());
movNewRisc.setPercDed(movr.getPercDed());
ctbMovr.add(movNewRisc);
} else {
impDareCosto = movr.getImpDare();
impAvereCosto = movr.getImpAvere();
}
if (UtilityDate.getYear(movr.getDataInizCompRisc()) == anno) {
CtbMovr movCosto = new CtbMovr();
movCosto.setCodCcon(movr.getCodCconRisconto());
movCosto.setImpDare(impDareCosto);
movCosto.setImpAvere(impAvereCosto);
movCosto.setDesAgg(movr.getDesAgg());
movCosto.setDataInizCompRisc(movr.getDataInizCompRisc());
movCosto.setDataFineCompRisc(dataFine);
movCosto.setPercDed(movr.getPercDed());
generaCtbMovrCoan(movCosto, movr.getNumCmov(), movr.getIdRiga());
ctbMovr.add(movCosto);
}
}
CtbMovt ctbMovt = new CtbMovt();
ctbMovt.setOperation(OperationType.INSERT);
ctbMovt.setDataCmov(dataReg);
ctbMovt.setCodCcau(causale);
ctbMovt.setDescrizioneCaus(descrCausale);
ctbMovt.setImporto(importoTotMov);
ctbMovt.getCtbMovr().addAll(ctbMovr);
entityList.add(ctbMovt);
}
if (entityList.isEmpty())
throw new Exception("Nessun movimento contabile da registrare.");
return entityProcessor.processEntityList(entityList, true);
}
private void generaCtbMovrCoan(CtbMovr ctbMovr, Integer numCmov, Integer idRiga) throws Exception {
String query = "SELECT id_riga, id_riga_coan, cod_jcom, cod_jfas, imp_dare, imp_avere, note " +
"FROM ctb_movr_coan " +
"WHERE num_cmov = " + UtilityDB.valueToString(numCmov) +
" AND id_riga = " + UtilityDB.valueToString(idRiga);
List<CtbMovrCoan> ctbMovrCoanList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), query, CtbMovrCoan.class);
if (ctbMovrCoanList == null) {
ctbMovrCoanList = new ArrayList<>();
}
BigDecimal totImpDareCoan = BigDecimal.ZERO, totImpAvereCoan = BigDecimal.ZERO;
for (CtbMovrCoan coan : ctbMovrCoanList) {
totImpDareCoan = totImpDareCoan.add(coan.getImpDare());
totImpAvereCoan = totImpAvereCoan.add(coan.getImpAvere());
}
Integer riga = 0;
for (CtbMovrCoan coan : ctbMovrCoanList) {
riga++;
BigDecimal impDareCoan = BigDecimal.ZERO, impAvereCoan = BigDecimal.ZERO;
CtbMovrCoan movrCoan = new CtbMovrCoan();
movrCoan.setIdRigaCoan(riga);
movrCoan.setCodJcom(coan.getCodJcom());
movrCoan.setCodJfas(coan.getCodJfas());
if (ctbMovr.getImpDare().subtract(ctbMovr.getImpAvere()).abs().compareTo(totImpDareCoan.subtract(totImpAvereCoan).abs()) != 0) {
impDareCoan = totImpDareCoan.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : coan.getImpDare().multiply(ctbMovr.getImpDare()).divide(totImpDareCoan, 5, RoundingMode.HALF_UP);
impAvereCoan = totImpAvereCoan.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : coan.getImpAvere().multiply(ctbMovr.getImpAvere()).divide(totImpAvereCoan, 5, RoundingMode.HALF_UP);
} else {
impDareCoan = coan.getImpDare();
impAvereCoan = coan.getImpAvere();
}
movrCoan.setImpDare(totImpDareCoan.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : impDareCoan.divide(ctbMovr.getImpDare(), 10, RoundingMode.HALF_UP).multiply(ctbMovr.getImpDare()).setScale(2, RoundingMode.HALF_UP));
movrCoan.setImpAvere(totImpAvereCoan.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : impAvereCoan.divide(ctbMovr.getImpAvere(), 10, RoundingMode.HALF_UP).multiply(ctbMovr.getImpAvere()).setScale(2, RoundingMode.HALF_UP));
movrCoan.setNote(coan.getNote());
ctbMovr.getCtbMovrCoan().add(movrCoan);
if (riga == 1) {
ctbMovr.setCodJcom(coan.getCodJcom());
ctbMovr.setCodJfas(coan.getCodJfas());
}
}
}
public List<EntityBase> creaMovContFrontSt(String codMdep) throws Exception {
String query;
Connection PrimaryConn = multiDBTransactionManager.getPrimaryConnection();
@@ -1476,15 +1299,6 @@ public class ContabilService {
return ctbMovtList;
}
public HashMap<String, Object> getPeriodoFisc(Integer anno) throws Exception {
String sql = "SELECT data_iniz, data_fine FROM gtb_periodo_fisc WHERE anno = " + UtilityDB.valueToString(anno);
HashMap<String, Object> toReturn = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), sql);
if (toReturn == null) {
throw new Exception("Impossibile individuare il periodo fiscale dell'anno " + anno);
}
return toReturn;
}
public void allineaPartitaContabili() throws Exception {
String sql =

View File

@@ -154,18 +154,14 @@ public class PassaggioAnno {
listEntityBase.add(anniDivi);
}
query = "SELECT count(*) FROM gtb_periodo_fisc WHERE anno = " + (annoAttuale + 1);
find = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(conn, query);
if (find == 0) {
LocalDate.of(annoAttuale + 1, azienda.getMeseInizAnnoFisc(), azienda.getGiornoInizAnnoFisc());
Date dataInizPeriodoFisc = UtilityDate.dateFromPart(annoAttuale + 1, azienda.getMeseInizAnnoFisc(), azienda.getGiornoInizAnnoFisc());
for ( int i = 1; i <= 10; i++ ) {
LocalDate.of(annoAttuale + i, azienda.getMeseInizAnnoFisc(), azienda.getGiornoInizAnnoFisc());
Date dataInizPeriodoFisc = UtilityDate.dateFromPart(annoAttuale + i, azienda.getMeseInizAnnoFisc(), azienda.getGiornoInizAnnoFisc());
Date dataFinePeriodoFisc = UtilityDate.dateAdd(Calendar.YEAR, 1, dataInizPeriodoFisc);
dataFinePeriodoFisc = UtilityDate.dateAdd(Calendar.DATE, -1, dataFinePeriodoFisc);
GtbPeriodoFisc periodoFisc =
new GtbPeriodoFisc()
.setAnno(annoAttuale + 1)
.setAnno(annoAttuale + i)
.setDataIniz(dataInizPeriodoFisc)
.setDataFine(dataFinePeriodoFisc);
periodoFisc.setOperation(OperationType.DELETE_THEN_INSERT);

View File

@@ -0,0 +1,240 @@
package it.integry.ems.contabil.service;
import it.integry.ems.contabil.dto.RiscontoDTO;
import it.integry.ems.rules.businessLogic.AccountingBusinessLogic;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.entity.CtbMovr;
import it.integry.ems_model.entity.CtbMovrCoan;
import it.integry.ems_model.entity.CtbMovt;
import it.integry.ems_model.entity.GtbPeriodoFisc;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityDate;
import it.integry.ems_model.utility.UtilityLocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@Service
@Scope("request")
public class RiscontiService {
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
@Autowired
private EntityProcessor entityProcessor;
public RiscontoDTO calcRisconto(Date dataInizComp, Date dataFineComp, Date dataDoc, BigDecimal importo) throws Exception {
BigDecimal importoCompetenza = importo;
Connection conn = multiDBTransactionManager.getPrimaryConnection();
GtbPeriodoFisc periodoFiscInizComp = AccountingBusinessLogic.getPeriodoFisc(conn, dataInizComp);
Integer annoIniz = periodoFiscInizComp.getAnno();
Integer annoFine = AccountingBusinessLogic.getAnnoFisc(conn, dataFineComp);
Integer annoDoc = AccountingBusinessLogic.getAnnoFisc(conn, dataDoc);
if (annoIniz.compareTo(annoFine) < 0 && annoDoc.compareTo(annoIniz) <= 0) {
LocalDate dataInizCompMov = UtilityLocalDate.localDateFromDate(UtilityDate.dateAdd(Calendar.DATE, -1, dataInizComp));
LocalDate dataFineCompMov = UtilityLocalDate.localDateFromDate(dataFineComp);
long giorniTot = UtilityLocalDate.daysAfterDate(dataInizCompMov, dataFineCompMov);
long giorniAnno = UtilityLocalDate.daysAfterDate(dataInizCompMov, UtilityLocalDate.localDateFromDate(periodoFiscInizComp.getDataFine()));
importoCompetenza = importo.divide(new BigDecimal(giorniTot), 10, RoundingMode.HALF_UP).multiply(new BigDecimal(giorniAnno)).setScale(2, RoundingMode.HALF_UP);
}
BigDecimal impRisconto = importo.subtract(importoCompetenza);
RiscontoDTO riscontoDTO = new RiscontoDTO()
.setImportoCompetenza(importoCompetenza)
.setImportoRisconto(impRisconto);
return riscontoDTO;
}
public EntityBase creaMovGiroRisconti(Date dataReg, String causale) throws Exception {
BigDecimal importoTotMov = BigDecimal.ZERO;
GtbPeriodoFisc periodoFiscMov = AccountingBusinessLogic.getPeriodoFisc(multiDBTransactionManager.getPrimaryConnection(), dataReg);
int anno = periodoFiscMov.getAnno();
Date dataInizioPfm = periodoFiscMov.getDataIniz();
Date dataFinePfm = periodoFiscMov.getDataFine();
String query = "SELECT descrizione FROM ctb_caus where cod_ccau = " + UtilityDB.valueToString(causale);
String descrCausale = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), query);
if (!descrCausale.contains("RISCONT")) {
descrCausale = descrCausale.concat(" RISCONTI");
}
query =
Query.format(
"SELECT ctb_movr.num_cmov,\n" +
" ctb_movr.id_riga,\n" +
" ctb_movr.imp_dare,\n" +
" ctb_movr.imp_avere,\n" +
" ctb_movr.cod_ccon,\n" +
" ctb_movr.cod_ccon_risconto,\n" +
" ctb_movr.data_iniz_comp_risc,\n" +
" ctb_movr.data_fine_comp_risc,\n" +
" ctb_movr.des_agg,\n" +
" ctb_movr.perc_ded\n" +
"FROM ctb_movt\n" +
" INNER JOIN gtb_periodo_fisc\n" +
" ON ctb_movt.data_cmov BETWEEN gtb_periodo_fisc.data_iniz AND gtb_periodo_fisc.data_fine\n" +
" INNER JOIN ctb_movr ON ctb_movt.num_cmov = ctb_movr.num_cmov\n" +
" INNER JOIN ctb_cont ON ctb_movr.cod_ccon = ctb_cont.cod_ccon\n" +
"WHERE ctb_cont.flag_risconto = 'S'\n" +
" AND gtb_periodo_fisc.anno = %s\n" +
" AND ctb_movr.data_iniz_comp_risc IS NOT NULL\n" +
" AND ctb_movr.data_fine_comp_risc IS NOT NULL\n" +
" AND ctb_movr.cod_ccon_risconto IS NOT NULL\n" +
"ORDER BY ctb_movr.num_cmov ", anno - 1);
List<CtbMovr> ctbMovrList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), query, CtbMovr.class);
if (ctbMovrList != null && !ctbMovrList.isEmpty()) {
List<CtbMovr> ctbMovr = new ArrayList<>();
for (CtbMovr movr : ctbMovrList) {
BigDecimal impDareCosto = BigDecimal.ZERO, impAvereCosto = BigDecimal.ZERO;
BigDecimal impRisconto = movr.getImpDare().subtract(movr.getImpAvere()).abs();
GtbPeriodoFisc gtbPeriodoFiscIniz = AccountingBusinessLogic.getPeriodoFisc(multiDBTransactionManager.getPrimaryConnection(), movr.getDataInizCompRisc());
Integer annoInizComp = gtbPeriodoFiscIniz.getAnno();
GtbPeriodoFisc gtbPeriodoFiscFine = AccountingBusinessLogic.getPeriodoFisc(multiDBTransactionManager.getPrimaryConnection(), movr.getDataFineCompRisc());
Integer annoFineComp = gtbPeriodoFiscFine.getAnno();
importoTotMov = importoTotMov.add(impRisconto);
CtbMovr movRisc = new CtbMovr();
movRisc.setCodCcon(movr.getCodCcon());
movRisc.setImpDare(movr.getImpAvere());
movRisc.setImpAvere(movr.getImpDare());
movRisc.setDesAgg(movr.getDesAgg());
ctbMovr.add(movRisc);
Date dataFineCompRisc = movr.getDataFineCompRisc();
CtbMovr movNewRisc = null;
//Risconto su più anni
if (annoFineComp.intValue() > anno) {
BigDecimal impDareRisc = BigDecimal.ZERO, impAvereRisc = BigDecimal.ZERO;
Date dataInizComp;
if (annoInizComp.intValue() > anno) {
impDareRisc = movr.getImpDare();
impAvereRisc = movr.getImpAvere();
dataInizComp = movr.getDataInizCompRisc();
} else {
dataInizComp = UtilityDate.dateAdd(Calendar.DATE, 1, gtbPeriodoFiscIniz.getDataFine());
dataFineCompRisc = gtbPeriodoFiscIniz.getDataFine();
BigDecimal riscontoComp = AccountingBusinessLogic.calcRisconto(movr, movr.getDataInizCompRisc(), gtbPeriodoFiscIniz.getDataFine(), impRisconto);
BigDecimal riscontoResiduo = impRisconto.subtract(riscontoComp);
if (movr.getImpDare().compareTo(BigDecimal.ZERO) > 0) {
impDareRisc = riscontoResiduo;
impDareCosto = riscontoComp;
} else {
impAvereRisc = riscontoResiduo;
impAvereCosto = riscontoComp;
}
}
movNewRisc = new CtbMovr()
.setCodCcon(movr.getCodCcon())
.setImpDare(impDareRisc)
.setImpAvere(impAvereRisc)
.setDesAgg(movr.getDesAgg())
.setDataInizCompRisc(dataInizComp)
.setDataFineCompRisc(movr.getDataFineCompRisc())
.setCodCconRisconto(movr.getCodCconRisconto())
.setPercDed(movr.getPercDed());
} else {
impDareCosto = movr.getImpDare();
impAvereCosto = movr.getImpAvere();
}
if (gtbPeriodoFiscIniz.getAnno() == anno) {
CtbMovr movCosto = new CtbMovr()
.setCodCcon(movr.getCodCconRisconto())
.setImpDare(impDareCosto)
.setImpAvere(impAvereCosto)
.setDesAgg(movr.getDesAgg())
.setDataInizCompRisc(movr.getDataInizCompRisc())
.setDataFineCompRisc(dataFineCompRisc)
.setPercDed(movr.getPercDed());
generaCtbMovrCoan(movCosto, movr.getNumCmov(), movr.getIdRiga());
ctbMovr.add(movCosto);
}
//Spostato fuori dall'if per avere le righe nel movimento contabile in ordine per competenza
if (movNewRisc != null ) ctbMovr.add(movNewRisc);
}
CtbMovt ctbMovt =
new CtbMovt()
.setDataCmov(dataReg)
.setCodCcau(causale)
.setDescrizioneCaus(descrCausale)
.setImporto(importoTotMov);
ctbMovt.getCtbMovr().addAll(ctbMovr);
ctbMovt.setOperation(OperationType.INSERT);
entityProcessor.processEntity(ctbMovt, multiDBTransactionManager);
return ctbMovt;
} else {
throw new Exception("Non ci sono movimenti da girocontare");
}
}
private void generaCtbMovrCoan(CtbMovr ctbMovr, Integer numCmov, Integer idRiga) throws Exception {
String query = "SELECT id_riga, id_riga_coan, cod_jcom, cod_jfas, imp_dare, imp_avere, note " +
"FROM ctb_movr_coan " +
"WHERE num_cmov = " + UtilityDB.valueToString(numCmov) +
" AND id_riga = " + UtilityDB.valueToString(idRiga);
List<CtbMovrCoan> ctbMovrCoanList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), query, CtbMovrCoan.class);
if (ctbMovrCoanList == null) {
ctbMovrCoanList = new ArrayList<>();
}
BigDecimal totImpDareCoan = BigDecimal.ZERO, totImpAvereCoan = BigDecimal.ZERO;
for (CtbMovrCoan coan : ctbMovrCoanList) {
totImpDareCoan = totImpDareCoan.add(coan.getImpDare());
totImpAvereCoan = totImpAvereCoan.add(coan.getImpAvere());
}
Integer riga = 0;
for (CtbMovrCoan coan : ctbMovrCoanList) {
riga++;
BigDecimal impDareCoan, impAvereCoan;
CtbMovrCoan movrCoan = new CtbMovrCoan();
movrCoan.setIdRigaCoan(riga);
movrCoan.setCodJcom(coan.getCodJcom());
movrCoan.setCodJfas(coan.getCodJfas());
if (ctbMovr.getImpDare().subtract(ctbMovr.getImpAvere()).abs().compareTo(totImpDareCoan.subtract(totImpAvereCoan).abs()) != 0) {
impDareCoan = totImpDareCoan.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : coan.getImpDare().multiply(ctbMovr.getImpDare()).divide(totImpDareCoan, 5, RoundingMode.HALF_UP);
impAvereCoan = totImpAvereCoan.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : coan.getImpAvere().multiply(ctbMovr.getImpAvere()).divide(totImpAvereCoan, 5, RoundingMode.HALF_UP);
} else {
impDareCoan = coan.getImpDare();
impAvereCoan = coan.getImpAvere();
}
movrCoan.setImpDare(totImpDareCoan.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : impDareCoan.divide(ctbMovr.getImpDare(), 10, RoundingMode.HALF_UP).multiply(ctbMovr.getImpDare()).setScale(2, RoundingMode.HALF_UP));
movrCoan.setImpAvere(totImpAvereCoan.compareTo(BigDecimal.ZERO) == 0 ? BigDecimal.ZERO : impAvereCoan.divide(ctbMovr.getImpAvere(), 10, RoundingMode.HALF_UP).multiply(ctbMovr.getImpAvere()).setScale(2, RoundingMode.HALF_UP));
movrCoan.setNote(coan.getNote());
ctbMovr.getCtbMovrCoan().add(movrCoan);
if (riga == 1) {
ctbMovr.setCodJcom(coan.getCodJcom());
ctbMovr.setCodJfas(coan.getCodJfas());
}
}
}
}

View File

@@ -845,7 +845,7 @@ public class DocumentProdService {
Integer numOrd = carico.getNumOrd();
String codJfas = carico.getCodJfas();
if (carico.getTerminaLavorazione().compareTo("N") == 0) {
if (carico.getTerminaLavorazione().equalsIgnoreCase("N")) {
if (codJfas != null) {
condFase = "mtb_colt.cod_jfas = " + UtilityDB.valueToString(codJfas);
}
@@ -920,7 +920,7 @@ public class DocumentProdService {
.setCodDtip(carico.getCodDtipScar())
.setDataDoc(results.get(j).getDataDocFromCollo())
.setSerDoc(carico.getSerDoc())
.setCodMdep(carico.getCodMdep())
.setCodMdep(UtilityString.isNull(carico.getCodMdepScar(), carico.getCodMdep()))
.setDataOrd(dataOrd)
.setNumOrd(numOrd);