Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-05-09 17:45:40 +02:00
28 changed files with 1109 additions and 208 deletions

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.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250508101354 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.RossoGargano_RossoGargano))
return;
createSetup("PVM","CONTROLLO_GIACENZE","TIPOLOGIA_COMMESSE_DA_INCLUDERE",null,"Indicare le tipologie di commesse (separate da |) che devono essere selezionabili, in Giacenze per UL e Posizione, nell'attribuzione di una commessa ad una pedana, oltre alle commesse legate ad ordini di vendita",null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -850,8 +850,8 @@ public class SalesRules extends QueryRules {
return campi;
}
public static Boolean checkArtEquiLisv(VtbListData vtbListData) throws Exception {
boolean bloccaDiff = setupGest.getSetupBoolean("vtb_list", "ART_EQUIVALENTI", "LOCK_DIFF");
public static Boolean checkArtEquiLisv(Connection connection, VtbListData vtbListData) throws Exception {
boolean bloccaDiff = setupGest.getSetupBoolean(connection, "vtb_list", "ART_EQUIVALENTI", "LOCK_DIFF");
if (!bloccaDiff)
return false;

View File

@@ -30,4 +30,11 @@ public class AziendaService {
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), internalCodAnagsQuery);
}
public String retrieveInternalPartIva() throws Exception {
String internalCodAnagsQuery = "SELECT part_iva\n" +
"FROM azienda";
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), internalCodAnagsQuery);
}
}

View File

@@ -175,7 +175,7 @@ public class EntityProcessor {
private void checkEntityChildsUsage(EntityInterface entityInterface, MultiDBTransactionManager multiDBTransactionManager, RequestDataDTO requestDataDTO) throws Exception {
boolean isMaster = entityPropertyHolder.isEntityMaster(((EntityBase) entityInterface).getClass());
;
OperationType operationType = entityInterface.getOperation();
if (!isMaster && (operationType != OperationType.SELECT_OBJECT && operationType != OperationType.SELECT)) {

View File

@@ -1486,8 +1486,8 @@ public class GeneraOrdLav {
List<DtbOrdSteps> dtbOrdSteps = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbOrdSteps.class);
dtbOrdSteps.stream().forEach(x -> {
x.setDataIniz(UtilityDate.dateAdd(x.getDataIniz(), ggDiff));
x.setDataFine(UtilityDate.dateAdd(x.getDataFine(), ggDiff));
x.setDataIniz(x.getDataIniz()!=null?UtilityDate.dateAdd(x.getDataIniz(), ggDiff):null);
x.setDataFine(x.getDataFine() != null ?UtilityDate.dateAdd(x.getDataFine(), ggDiff):null);
x.setOperation(OperationType.UPDATE);
});
@@ -1571,7 +1571,7 @@ public class GeneraOrdLav {
if (dtbOrds != null && !dtbOrds.isEmpty()) {
dtbOrds.forEach(x -> {
x.setQta(x.getQta().multiply(moltiplicatore).setScale(2, RoundingMode.HALF_UP)).setValUnt(valUntProd).setImporto((x.getQta().multiply(moltiplicatore).setScale(2, RoundingMode.HALF_UP)).multiply(valUntProd));
x.setQta(x.getQta().multiply(moltiplicatore).setScale(5, RoundingMode.HALF_UP)).setValUnt(valUntProd).setImporto((x.getQta().multiply(moltiplicatore).setScale(2, RoundingMode.HALF_UP)).multiply(valUntProd));
x.setOperation(OperationType.UPDATE);
});

View File

@@ -343,7 +343,7 @@ public class VtbListData extends EntityBase {
@Override
public void checkPreSave() throws Exception {
SalesRules.checkArtEquiLisv(this);
SalesRules.checkArtEquiLisv(connection, this);
}
public VtbList getVtbList() {

View File

@@ -121,5 +121,12 @@ public class UtilityBigDecimal {
return input.setScale(5, RoundingMode.HALF_EVEN);
}
public static BigDecimal calculatePercentage(BigDecimal base, double percentValue) {
return calculatePercentage(base,percentValue,5);
}
public static BigDecimal calculatePercentage(BigDecimal base, double percentValue, int scale) {
BigDecimal percent = new BigDecimal(percentValue).divide(new BigDecimal("100"), 5, RoundingMode.HALF_EVEN);
return base.multiply(percent).setScale(scale,RoundingMode.HALF_UP);
}
}

View File

@@ -218,6 +218,10 @@ public class UtilityString {
return string == null || "".equals(string) || string.equals(EmsRestConstants.NULL);
}
public static boolean hasContent(Object string) {
return !isNullOrEmpty(string);
}
public static String identifyLineDelimiter(String str) {
if (str.matches("(?s).*(\\r\\n).*")) { //Windows //$NON-NLS-1$
return "\r\n"; //$NON-NLS-1$

View File

@@ -37,14 +37,14 @@ end
//ANNULLAMENTO RICALCOLO TOTALI ORDINI PRODUZIONE
rule "annullamentoCalcTotaliOrdP"
no-loop
when
eval(postRulesEnabled)
$ordT : DtbOrdt(executeRecalc == true && gestione == "A" && gestioneRif != null)
then
modify ( $ordT ) { setExecuteRecalc(false) }
end
//rule "annullamentoCalcTotaliOrdP"
//no-loop
//when
// eval(postRulesEnabled)
// $ordT : DtbOrdt(executeRecalc == true && gestione == "A" && gestioneRif != null)
//then
// modify ( $ordT ) { setExecuteRecalc(false) }
//end
rule "completeCalcTotaliOrd"
no-loop

View File

@@ -236,7 +236,6 @@ public class LicorProductionService {
CaricoLavorazioneDTO dtoCarico = new CaricoLavorazioneDTO();
dtoCarico.setCodDtip(datiCarico.getCodDtip())
.setDataDoc(datiCarico.getDataDoc())
.setDataReg(datiCarico.getDataReg())
.setSerDoc(datiCarico.getSerDoc())
.setNumDoc(datiCarico.getNumDoc())
@@ -249,7 +248,6 @@ public class LicorProductionService {
dtoScarico.setCodDtip(datiScarico.getCodDtip())
.setCodMdep(datiScarico.getCodMdep())
.setCodAnag(chiusuraLavorazioneDTO.getOrdine().getCodAnag())
.setDataDoc(new Date())
.setQtaProd(chiusuraLavorazioneDTO.getQtaProd());

View File

@@ -41,6 +41,7 @@ public class DocumentProdController {
private ManutenzioneProduzioniService manutenzioneProduzioniService;
@RequestMapping(value = EmsRestConstants.PATH_CARICO_PROD_FIN, method = RequestMethod.POST)
@Deprecated
public @ResponseBody
ServiceRestResponse generateCaricoProdFinLav(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@@ -95,8 +96,8 @@ public class DocumentProdController {
return response;
}
@RequestMapping(value = EmsRestConstants.PATH_GENERA_DOCUMENTI_CLAV, method = RequestMethod.POST)
@Deprecated
public @ResponseBody
ServiceRestResponse generateDocumentiCLAV(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,

View File

@@ -9,7 +9,6 @@ public class CaricoLavorazioneDTO {
private String codDtip;
private String codMdep;
private String serDoc;
private Date dataDoc;
private Date dataReg;
private Date dataIns;
private String codAnag;
@@ -48,14 +47,6 @@ public class CaricoLavorazioneDTO {
return this;
}
public Date getDataDoc() {
return dataDoc;
}
public CaricoLavorazioneDTO setDataDoc(Date dataDoc) {
this.dataDoc = dataDoc;
return this;
}
public String getCodAnag() {
return codAnag;

View File

@@ -4,6 +4,10 @@ package it.integry.ems.document.dto;
import it.integry.ems_model.entity.DtbOrdt;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class ChiusuraLavorazioneDTO {
@@ -13,15 +17,16 @@ public class ChiusuraLavorazioneDTO {
private String partitaMag;
private String untMisProd;
private BigDecimal rapConvProd;
private Date dataDoc;
private String codJfas;
private String note;
private String rifOrd;
private CaricoLavorazioneDTO caricoLavorazioneDTO;
private ScaricoLavorazioneDTO scaricoLavorazioneDTO;
private RientroLavorazioneDTO rientroLavorazioneDTO;
private CaricoLavorazioneDTO caricoLavorazioneDTO = new CaricoLavorazioneDTO();
private ScaricoLavorazioneDTO scaricoLavorazioneDTO = new ScaricoLavorazioneDTO();
private RientroLavorazioneDTO rientroLavorazioneDTO = new RientroLavorazioneDTO();
private boolean effettuaCarico = true;
private boolean effettuaScarico = true;
@@ -30,6 +35,8 @@ public class ChiusuraLavorazioneDTO {
private boolean terminaLavorazioneLinea = false;
private boolean salvaDocumenti = true;
private List<ProduzioneOrdineDTO> produzioniOrdine = new ArrayList<>();
public DtbOrdt getOrdine() {
return ordine;
}
@@ -192,4 +199,22 @@ public class ChiusuraLavorazioneDTO {
this.rifOrd = rifOrd;
return this;
}
public List<ProduzioneOrdineDTO> getProduzioniOrdine() {
return produzioniOrdine;
}
public ChiusuraLavorazioneDTO setProduzioniOrdine(List<ProduzioneOrdineDTO> produzioniOrdine) {
this.produzioniOrdine = produzioniOrdine;
return this;
}
public Date getDataDoc() {
return dataDoc;
}
public ChiusuraLavorazioneDTO setDataDoc(Date dataDoc) {
this.dataDoc = dataDoc;
return this;
}
}

View File

@@ -0,0 +1,102 @@
package it.integry.ems.document.dto;
import it.integry.ems_model.annotation.SqlField;
import it.integry.ems_model.entity.DtbOrdt;
import it.integry.ems_model.entity.MtbColt;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class ProduzioneOrdineDTO {
@SqlField("cod_mart")
private String codMart;
@SqlField("partita_mag")
private String partitaMag;
@SqlField("data_prod")
private LocalDate dataProd;
@SqlField("quantita")
private BigDecimal quantita;
private DtbOrdt ordine;
@SqlField("peso_produzione")
private BigDecimal pesoProduzione;
private List<MtbColt> scarichiProduzione = new ArrayList<>();
public String getCodMart() {
return codMart;
}
public ProduzioneOrdineDTO() {}
public ProduzioneOrdineDTO(String codMart, String partitaMag, BigDecimal quantita, DtbOrdt ordine) {
this.codMart = codMart;
this.partitaMag = partitaMag;
this.quantita = quantita;
this.ordine = ordine;
}
public ProduzioneOrdineDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public ProduzioneOrdineDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public LocalDate getDataProd() {
return dataProd;
}
public ProduzioneOrdineDTO setDataProd(LocalDate dataProd) {
this.dataProd = dataProd;
return this;
}
public BigDecimal getQuantita() {
return quantita;
}
public ProduzioneOrdineDTO setQuantita(BigDecimal quantita) {
this.quantita = quantita;
return this;
}
public BigDecimal getPesoProduzione() {
return pesoProduzione;
}
public ProduzioneOrdineDTO setPesoProduzione(BigDecimal pesoProduzione) {
this.pesoProduzione = pesoProduzione;
return this;
}
public List<MtbColt> getScarichiProduzione() {
return scarichiProduzione;
}
public ProduzioneOrdineDTO setScarichiProduzione(List<MtbColt> scarichiProduzione) {
this.scarichiProduzione = scarichiProduzione;
return this;
}
public DtbOrdt getOrdine() {
return ordine;
}
public ProduzioneOrdineDTO setOrdine(DtbOrdt ordine) {
this.ordine = ordine;
return this;
}
}

View File

@@ -0,0 +1,39 @@
package it.integry.ems.document.dto;
import it.integry.ems_model.entity.MtbColr;
import java.math.BigDecimal;
import java.util.List;
public class ScarichiArticoloDTO {
private String codMart;
private BigDecimal qtaScaricata;
private List<MtbColr> scarichi;
public String getCodMart() {
return codMart;
}
public ScarichiArticoloDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public BigDecimal getQtaScaricata() {
return qtaScaricata;
}
public ScarichiArticoloDTO setQtaScaricata(BigDecimal qtaScaricata) {
this.qtaScaricata = qtaScaricata;
return this;
}
public List<MtbColr> getScarichi() {
return scarichi;
}
public ScarichiArticoloDTO setScarichi(List<MtbColr> scarichi) {
this.scarichi = scarichi;
return this;
}
}

View File

@@ -10,7 +10,6 @@ public class ScaricoLavorazioneDTO {
private String codMdep;
private String serDoc;
private Date dataDoc;
private String codAnag;
private Integer numDoc;
private String activityId;
@@ -47,14 +46,6 @@ public class ScaricoLavorazioneDTO {
return this;
}
public Date getDataDoc() {
return dataDoc;
}
public ScaricoLavorazioneDTO setDataDoc(Date dataDoc) {
this.dataDoc = dataDoc;
return this;
}
public String getCodAnag() {
return codAnag;

View File

@@ -8,6 +8,7 @@ import it.integry.ems.document.Import.service.DocumentiLavDaDist;
import it.integry.ems.document.dto.*;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.retail.wms.lavorazione.service.WMSLavorazioneService;
import it.integry.ems.rules.businessLogic.LoadColliService;
import it.integry.ems.rules.businessLogic.dto.LoadColliDTO;
import it.integry.ems.rules.completing.ConfigActivityRules;
@@ -64,6 +65,8 @@ public class DocumentProdService {
private LoadColliService loadColliService;
@Autowired
private DocumentiLavDaDist documentiLavDaDist;
@Autowired
private WMSLavorazioneService wmsLavorazioneService;
private final Logger logger = LogManager.getLogger();
@@ -647,6 +650,8 @@ public class DocumentProdService {
return entitiesReturn;
}
@Deprecated
//Use ProductionService::chiudiOrdineLavorazione
public void caricoProdFinLav(CaricoProdFinLavDTO carico) throws Exception {
boolean fermaCreaDocsEnabled = setupGest.getSetupBoolean(multiDBTransactionManager.getPrimaryConnection(), "CARICO_SCARICO_PF", "SETUP", "FERMA_CREA_DOCS");
@@ -2298,6 +2303,7 @@ public class DocumentProdService {
return arrayEntity;
}
@Deprecated
public List<EntityBase> generaDocumentiCLAV(Date dataLav, String codMdep) throws Exception {
String sql = "SELECT cod_anag FROM mtb_depo WHERE cod_mdep = " + UtilityDB.valueToString(codMdep);
@@ -2782,7 +2788,7 @@ public class DocumentProdService {
CaricoLavorazioneDTO caricoDto = dtoChiusura.getCaricoLavorazioneDTO();
ScaricoLavorazioneDTO scaricoDto = dtoChiusura.getScaricoLavorazioneDTO();
dtoChiusura.setProduzioniOrdine(getProduzioniOrdine(dtoChiusura.getOrdine(), dtoChiusura.getDataDoc() == null));
// Verifica se è attiva l'opzione di creazione ID_ACTIVITY su carichi e scarichi
HashMap<String, String> setupCaricoScariPF = setupGest.getSetupSection(multiDBTransactionManager.getPrimaryConnection(), "CARICO_SCARICO_PF", "SETUP");
@@ -2803,7 +2809,7 @@ public class DocumentProdService {
caricoDto.setCodMdep(ordine.getCodMdep());
}
if (caricoDto.getSerDoc() == null) {
caricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), caricoDto.getCodDtip(), caricoDto.getCodMdep(), caricoDto.getDataDoc()));
caricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), caricoDto.getCodDtip(), caricoDto.getCodMdep(), dtoChiusura.getDataDoc()));
}
caricoDto.setActivityId(activityId);
listDocs.addAll(generaDocCaricoDaOrdineLav(dtoChiusura));
@@ -2817,7 +2823,7 @@ public class DocumentProdService {
}
if (scaricoDto.getSerDoc() == null) {
scaricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), scaricoDto.getCodDtip(), scaricoDto.getCodMdep(), scaricoDto.getDataDoc()));
scaricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), scaricoDto.getCodDtip(), scaricoDto.getCodMdep(), dtoChiusura.getDataDoc()));
}
scaricoDto.setActivityId(activityId);
@@ -2862,7 +2868,7 @@ public class DocumentProdService {
CaricoLavorazioneDTO caricoDto = dtoChiusura.getCaricoLavorazioneDTO();
if (caricoDto.getSerDoc() == null) {
caricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), caricoDto.getCodDtip(), caricoDto.getCodMdep(), caricoDto.getDataDoc()));
caricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), caricoDto.getCodDtip(), caricoDto.getCodMdep(), dtoChiusura.getDataDoc()));
}
caricoDto.setActivityId(activityId);
@@ -2873,7 +2879,7 @@ public class DocumentProdService {
ScaricoLavorazioneDTO scaricoDto = dtoChiusura.getScaricoLavorazioneDTO();
if (scaricoDto.getSerDoc() == null) {
scaricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), scaricoDto.getCodDtip(), scaricoDto.getCodMdep(), scaricoDto.getDataDoc()));
scaricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), scaricoDto.getCodDtip(), scaricoDto.getCodMdep(), dtoChiusura.getDataDoc()));
}
scaricoDto.setActivityId(activityId);
@@ -2942,19 +2948,64 @@ public class DocumentProdService {
documentiScarico.addAll(generaDocumentiScaricoOrdineDaColli(dto));
}
/*Genera scarico materiali: se c'è stato uno scarico da collo di versamento allora scarica solo eventuali materiali restanti*/
/*Se la data del documento non viene passata da fuori allora vuole dire che la generazione dei carichi/scarichi deve essere fatta
* utilizzando la data dei colli di versamento o carico*/
if (dtoScarico.getDataDoc() == null) {
documentiScarico.addAll(generaDocumentiScaricoMaterialiDaDataCollo(dto));
} else {
documentiScarico.addAll(generaDocumentiScaricoMateriali(dto, null));
//<editor-fold desc="Genera scarico materiali: se c'è stato uno scarico da collo di versamento allora scarica solo
// eventuali materiali restanti Se la data del documento non viene passata da fuori allora vuole dire che la generazione
// dei carichi/scarichi deve essere fatta utilizzando la data dei colli di versamento o carico">
for (ProduzioneOrdineDTO produzione : dto.getProduzioniOrdine()){
documentiScarico.addAll(generaDocumentiScaricoMateriali(dto, produzione));
}
// if (dto.getDataDoc() == null) {
// documentiScarico.addAll(generaDocumentiScaricoMaterialiDaDataCollo(dto));
// } else {
// documentiScarico.addAll(generaDocumentiScaricoMateriali(dto, null));
// }
//</editor-fold>
return documentiScarico;
}
/**
*
* @param ordine ordine da controllare
* @param separaPerData separa le produzioni per data collo
* @return Recupera tutte le produzioni senza documento dell'ordine suddivise per articolo, partita e (se necessario) data di produzione
* @throws Exception
*/
private List<ProduzioneOrdineDTO> getProduzioniOrdine(DtbOrdt ordine, boolean separaPerData) throws Exception {
List<ProduzioneOrdineDTO> produzioni = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(),
it.integry.ems_model.utility.Query.format("SELECT mtb_colr.cod_mart, mtb_colr.partita_mag," + (separaPerData ? "mtb_colr.data_collo as data_prod," : "") + "SUM(mtb_colr.qta_col) as quantita\n" +
"from mtb_colr\n" +
" inner join mtb_colt on mtb_colr.gestione = mtb_colt.gestione and mtb_colr.data_collo = mtb_colt.data_collo and\n" +
" mtb_colr.ser_collo = mtb_colt.ser_collo and mtb_colr.num_collo = mtb_colt.num_collo\n" +
" inner join dtb_ordt on dtb_ordt.data_ord = mtb_colt.data_ord and mtb_colt.num_ord = dtb_ordt.num_ord \n" +
" and mtb_colr.cod_mart = dtb_ordt.cod_prod\n" +
"where mtb_colt.gestione = 'L'\n" +
" and mtb_colt.segno = 1 \n" +
" and mtb_colt.cod_dtip IS NULL \n" +
"and dtb_ordt.data_ord = {}\n" +
"and dtb_ordt.num_ord = {}\n" +
"group by mtb_colr.cod_mart, mtb_colr.partita_mag" + (separaPerData ? ",mtb_colr.data_collo" : ""), ordine.getDataOrd(), ordine.getNumOrd()),
ProduzioneOrdineDTO.class);
if (UtilityList.isNullOrEmpty(produzioni)) {
return produzioni;
}
BigDecimal qtaProdotta = produzioni.stream().map(ProduzioneOrdineDTO::getQuantita).reduce(BigDecimal.ZERO,BigDecimal::add);
produzioni.forEach(x ->
{
x.setPesoProduzione(BigDecimal.valueOf(100).multiply(x.getQuantita()).divide(qtaProdotta, 3, RoundingMode.HALF_EVEN));
x.setOrdine(ordine);
}
);
return produzioni;
}
public DtbDoct generaTestataDocDaOrdineLav(DtbOrdt ordineLav, String codDtip, Date dataDoc, String serDoc, String codAnag, Integer numDoc, String codMdep) throws Exception {
return generaTestataDocDaOrdineLav(ordineLav, codDtip, dataDoc, serDoc, codAnag, numDoc, codMdep, ordineLav.getPartitaMag());
}
public DtbDoct generaTestataDocDaOrdineLav(DtbOrdt ordineLav, String codDtip, Date dataDoc, String serDoc, String codAnag, Integer numDoc, String codMdep, String partitaMag) throws Exception {
DtbDoct docT = new DtbDoct();
if (codDtip == null) {
throw new Exception("Tipo documento non configurato!");
@@ -2977,7 +3028,7 @@ public class DocumentProdService {
docT.setCodJcom(ordineLav.getCodJcom());
docT.setCodMdep(codMdep != null ? codMdep : ordineLav.getCodMdep());
docT.setCodProd(ordineLav.getCodProd());
docT.setPartitaMag(ordineLav.getPartitaMag());
docT.setPartitaMag(partitaMag);
docT.setNumOrd(ordineLav.getNumOrd());
docT.setDataOrd(ordineLav.getDataOrd());
docT.setUntMisProd(ordineLav.getUntMisProd());
@@ -2997,7 +3048,7 @@ public class DocumentProdService {
throw new Exception("I dati per la generazione del documento di carico sono incompleti");
}
if (chiusuraLavorazioneDTO.isChiudiOrdine()) {
if (caricoLavorazioneDTO.getCodJfas() != null) {
if (UtilityString.hasContent(caricoLavorazioneDTO.getCodJfas())) {
condFase = "mtb_colt.cod_jfas = " + UtilityDB.valueToString(caricoLavorazioneDTO.getCodJfas());
}
}
@@ -3007,7 +3058,7 @@ public class DocumentProdService {
/*Se la data del documento non è stata passata da fuori allora la data documento dovrà essere quella del collo */
List<DataDocFromCollo> results = new ArrayList<>();
if (caricoLavorazioneDTO.getDataDoc() == null) {
if (chiusuraLavorazioneDTO.getDataDoc() == null) {
String sql =
"SELECT DISTINCT mtb_colt.data_collo as data_doc_from_collo, sum(mtb_colr.qta_col) as qta_col_for_date " +
" FROM mtb_colt LEFT OUTER JOIN dtb_ordt ON mtb_colt.gestione = dtb_ordt.gestione AND" +
@@ -3033,7 +3084,7 @@ public class DocumentProdService {
}
} else {
DataDocFromCollo dataDocFromCollo = new DataDocFromCollo();
dataDocFromCollo.setDataDocFromCollo(caricoLavorazioneDTO.getDataDoc());
dataDocFromCollo.setDataDocFromCollo(chiusuraLavorazioneDTO.getDataDoc());
dataDocFromCollo.setQtaColForDate(caricoLavorazioneDTO.getQtaProd()); /*UM magazzino*/
results.add(dataDocFromCollo);
}
@@ -3051,7 +3102,7 @@ public class DocumentProdService {
.setNumOrd(ordine.getNumOrd());
String condDataCollo = "";
if (caricoLavorazioneDTO.getDataDoc() == null) {
if (chiusuraLavorazioneDTO.getDataDoc() == null) {
condDataCollo = "mtb_colt.data_collo = " + UtilityDB.valueDateToString(dto.getDataDocFromCollo(), CommonConstants.DATE_FORMAT_YMD);
}
@@ -3105,24 +3156,27 @@ public class DocumentProdService {
// Acquisizione dati configurazione e passati dall'esterno
CaricoLavorazioneDTO dtoCarico = chiusuraLavorazioneDTO.getCaricoLavorazioneDTO();
if (dtoCarico.getDataDoc() == null) {
dtoCarico.setDataDoc(new Date());
if (chiusuraLavorazioneDTO.getDataDoc() == null) {
chiusuraLavorazioneDTO.setDataDoc(new Date());
}
DtbOrdt ordine = chiusuraLavorazioneDTO.getOrdine();
// Acquisizione dati prodotto dall'estetno
//<editor-fold desc="Acquisizione dati prodotto dall'estetno">
// todo: al momento abbiamo dato per scontato che da fuori arrvi solo e sempre il prodotto/partita associata all'ordine passato, perchè le logiche di più partite o imballi differenti è una logiaca utilizzata solo da ex-PERILFLOR
BigDecimal qtaProdUMMag = dtoCarico.getQtaProd();
BigDecimal qtaProd = qtaProdUMMag.divide(ordine.getRapConvProd(), 2, RoundingMode.HALF_UP);
//</editor-fold>
// Verifica esistenza partita magazzino
//<editor-fold desc="Verifica esistenza partita magazzino">
if (ordine.getPartitaMag() == null) {
throw new Exception("L'ordine di lavorazione n." + UtilityDB.valueToString(ordine.getNumOrd()) + " del " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " non ha la specifica del lotto di produzione.");
}
//</editor-fold>
// Geenera testata documento di carico
DtbDoct docT = generaTestataDocDaOrdineLav(ordine, dtoCarico.getCodDtip(), dtoCarico.getDataDoc(), dtoCarico.getSerDoc(), dtoCarico.getCodAnag(), dtoCarico.getNumDoc(), dtoCarico.getCodMdep());
//<editor-fold desc="Genera testata documento di carico">
DtbDoct docT = generaTestataDocDaOrdineLav(ordine, dtoCarico.getCodDtip(), chiusuraLavorazioneDTO.getDataDoc(), dtoCarico.getSerDoc(), dtoCarico.getCodAnag(), dtoCarico.getNumDoc(), dtoCarico.getCodMdep());
docT.setOperation(OperationType.INSERT);
@@ -3133,6 +3187,7 @@ public class DocumentProdService {
if (dtoCarico.getDataReg() != null) {
docT.setDataReg(dtoCarico.getDataReg());
}
//</editor-fold>
// Geenera righe documento di carico
@@ -3153,72 +3208,21 @@ public class DocumentProdService {
private List<DtbDoct> generaDocumentiScaricoOrdineDaColli(@NotNull ChiusuraLavorazioneDTO chiusuraLavorazioneDTO) throws Exception {
List<DtbDoct> documents = new ArrayList<>();
String condFase = null;
String condFase = (!chiusuraLavorazioneDTO.isChiudiOrdine() && UtilityString.hasContent(chiusuraLavorazioneDTO.getCodJfas())) ? "mtb_colt.cod_jfas = " + UtilityDB.valueToString(chiusuraLavorazioneDTO.getCodJfas()) : null;
if (!chiusuraLavorazioneDTO.isChiudiOrdine()) {
if (chiusuraLavorazioneDTO.getCodJfas() != null) {
condFase = "mtb_colt.cod_jfas = " + UtilityDB.valueToString(chiusuraLavorazioneDTO.getCodJfas());
}
}
DtbOrdt ordine = chiusuraLavorazioneDTO.getOrdine();
ScaricoLavorazioneDTO datiScarico = chiusuraLavorazioneDTO.getScaricoLavorazioneDTO();
/*Se la data del documento non è stata passata da fuori allora la data documento dovrà essere quella del collo */
List<DataDocFromCollo> results = new ArrayList<>();
if (datiScarico.getDataDoc() == null) {
String sql =
" SELECT distinct mtb_colt.data_collo as data_doc_from_collo, " +
" ISNULL(carichi.qta_col_for_date , 0) as qta_col_for_date " +
" FROM mtb_colt left outer join (SELECT mtb_colt.data_collo , " +
" sum(qta_col) as qta_col_for_date " +
" FROM mtb_colt , mtb_colr " +
" WHERE mtb_colt.gestione = " + UtilityDB.valueToString(ordine.getGestione()) + " AND " +
" mtb_colt.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" mtb_colt.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd()) + " AND " +
" mtb_colt.cod_dtip IS NULL AND " +
" mtb_colt.segno = 1 AND " +
" mtb_colt.gestione = mtb_colr.gestione AND " +
" mtb_colt.data_collo = mtb_colr.data_collo AND " +
" mtb_colt.ser_collo = mtb_colr.ser_collo AND " +
" mtb_colt.num_collo = mtb_colr.num_collo " +
"GROUP BY mtb_colt.data_collo )carichi ON mtb_colt.data_collo = carichi.data_collo " +
" WHERE mtb_colt.gestione = " + UtilityDB.valueToString(ordine.getGestione()) + " AND " +
" mtb_colt.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" mtb_colt.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd()) + " AND " +
" mtb_colt.cod_dtip IS NULL AND " +
" mtb_colt.segno = -1 " +
"ORDER BY 1 ";
//<editor-fold desc="Calcolo condizioni di creazione documenti di scarico">
sql = UtilityDB.addwhereCond(sql, condFase, false);
results = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, DataDocFromCollo.class);
if (results == null) {
results = new ArrayList<>();
}
} else {
DataDocFromCollo dataDocFromCollo = new DataDocFromCollo();
dataDocFromCollo.setDataDocFromCollo(datiScarico.getDataDoc());
dataDocFromCollo.setQtaColForDate(chiusuraLavorazioneDTO.getScaricoLavorazioneDTO().getQtaProd()); /*UM magazzino*/
results.add(dataDocFromCollo);
if (UtilityList.isNullOrEmpty(chiusuraLavorazioneDTO.getProduzioniOrdine())) {
//se la lista delle produzioni è vuota (non ci sono colli di produzione agganciati ne aggiungo uno preso dall'ordine )
chiusuraLavorazioneDTO.setProduzioniOrdine(Collections.singletonList(new ProduzioneOrdineDTO(ordine.getCodProd(), ordine.getPartitaMag(), chiusuraLavorazioneDTO.getScaricoLavorazioneDTO().getQtaProd(), ordine)));
chiusuraLavorazioneDTO.setOrdine(ordine);
}
//</editor-fold>
for (DataDocFromCollo ddfc : results) {
LoadColliDTO loadColli =
new LoadColliDTO()
.setCodAnag(datiScarico.getCodAnag())
.setCodDtip(datiScarico.getCodDtip())
.setDataDoc(ddfc.getDataDocFromCollo())
.setSerDoc(datiScarico.getSerDoc())
.setCodMdep(datiScarico.getCodMdep())
.setDataOrd(ordine.getDataOrd())
.setNumOrd(ordine.getNumOrd());
String condDataCollo = "";
if (datiScarico.getDataDoc() == null) {
condDataCollo = "mtb_colt.data_collo = " + UtilityDB.valueDateToString(ddfc.getDataDocFromCollo(), CommonConstants.DATE_FORMAT_YMD);
}
// Acquisizione colli di scarico intestati all'ordine di lavorazione
//<editor-fold desc="Acquisizione colli di scarico intestati all'ordine di lavorazione">
String sql =
"SELECT DISTINCT mtb_colt.gestione, " +
" mtb_colt.data_collo, " +
@@ -3238,17 +3242,33 @@ public class DocumentProdService {
"ORDER BY 1, 2, 3, 4 ";
sql = UtilityDB.addwhereCond(sql, condFase, false);
sql = UtilityDB.addwhereCond(sql, condDataCollo, false);
List<MtbColt> scarichi = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, MtbColt.class);
List<ProduzioneOrdineDTO> produzioni = wmsLavorazioneService.riproporzionaScarichiLavorazione(chiusuraLavorazioneDTO.getProduzioniOrdine(), scarichi);
//</editor-fold>
for (ProduzioneOrdineDTO produzione : produzioni) {
if (UtilityList.isNullOrEmpty(produzione.getScarichiProduzione()))
continue;
Date dataDoc = UtilityDate.isNull(UtilityLocalDate.localDateToDate(produzione.getDataProd()), chiusuraLavorazioneDTO.getDataDoc());
LoadColliDTO loadColli =
new LoadColliDTO()
.setCodAnag(datiScarico.getCodAnag())
.setCodDtip(datiScarico.getCodDtip())
.setDataDoc(dataDoc)
.setSerDoc(datiScarico.getSerDoc())
.setCodMdep(datiScarico.getCodMdep())
.setDataOrd(ordine.getDataOrd())
.setNumOrd(ordine.getNumOrd());
List<MtbColt> mtbColts = new ResultSetMapper().mapQuerySetToList(multiDBTransactionManager.getPrimaryConnection(), sql, MtbColt.class);
List<MtbColt> mtbColts = produzione.getScarichiProduzione();
loadColli.setColli(mtbColts);
if (loadColli.getColli() != null && !loadColli.getColli().isEmpty()) {
DtbDoct docT = loadColliService.createDocFromColli(multiDBTransactionManager, loadColli);
BigDecimal qtaProdUMMag = ddfc.getQtaColForDate();
BigDecimal qtaProdUMMag = produzione.getQuantita();
BigDecimal qtaProd = qtaProdUMMag.divide(ordine.getRapConvProd(), 2, RoundingMode.HALF_UP);
docT.setCodProd(ordine.getCodProd())
.setPartitaMag(ordine.getPartitaMag())
docT.setCodProd(produzione.getCodMart())
.setPartitaMag(produzione.getPartitaMag())
.setUntMisProd(ordine.getUntMisProd())
.setRapConvProd(ordine.getRapConvProd())
.setQtaProd(qtaProd)
@@ -3259,11 +3279,16 @@ public class DocumentProdService {
}
documents.add(docT);
}
//TODO: gestione rientri
}
return documents;
}
@Deprecated
private List<DtbDoct> generaDocumentiScaricoMaterialiDaDataCollo(@NotNull ChiusuraLavorazioneDTO chiusuraLavorazioneDTO) throws Exception {
List<DtbDoct> docsList = new ArrayList<>();
@@ -3304,7 +3329,7 @@ public class DocumentProdService {
if (results == null) {
results = new ArrayList<>();
DataDocFromCollo ddfc = new DataDocFromCollo();
ddfc.setDataDocFromCollo(datiScarico.getDataDoc());
ddfc.setDataDocFromCollo(chiusuraLavorazioneDTO.getDataDoc());
ddfc.setQtaColForDate(datiScarico.getQtaProd());
results.add(ddfc);
}
@@ -3318,17 +3343,13 @@ public class DocumentProdService {
return docsList;
}
private List<DtbDoct> generaDocumentiScaricoMateriali(@NotNull ChiusuraLavorazioneDTO chiusuraLavorazioneDTO, DataDocFromCollo dataDocFromCollo) throws Exception {
private List<DtbDoct> generaDocumentiScaricoMateriali(@NotNull ChiusuraLavorazioneDTO chiusuraLavorazioneDTO, ProduzioneOrdineDTO produzioneOrdine) throws Exception {
List<DtbDoct> docsList = new ArrayList<>();
// Acquisizione dati configurazione e passati dall'esterno
Connection conn = multiDBTransactionManager.getPrimaryConnection();
boolean scaricoUnico = "S".equalsIgnoreCase(setupGest.getSetup(conn, "CARICO_SCARICO_PF", "SETUP", "SCARICO_UNICO"));
DtbOrdt ordine = chiusuraLavorazioneDTO.getOrdine();
ScaricoLavorazioneDTO datiScarico = chiusuraLavorazioneDTO.getScaricoLavorazioneDTO();
// Acquisizione dati prodotto finito per riproporzionare i materiali
String sql =
" SELECT DISTINCT ordL.cod_prod, " +
@@ -3362,12 +3383,12 @@ public class DocumentProdService {
}
// Acquisizione dati prodotto dall'esterno
BigDecimal qtaProdUMMag = dataDocFromCollo == null ? datiScarico.getQtaProd() : dataDocFromCollo.getQtaColForDate();
BigDecimal qtaProdUMMag = produzioneOrdine.getQuantita();
BigDecimal qtaProd = qtaProdUMMag.divide(ordine.getRapConvProd(), 5, RoundingMode.HALF_UP);
// Verifica esistenza partita magazzino
if (ordine.getPartitaMag() == null) {
if (produzioneOrdine.getPartitaMag() == null) {
throw new Exception("L'ordine di lavorazione n." + UtilityDB.valueToString(ordine.getNumOrd()) + " del " + UtilityDB.valueToString(ordine.getDataOrd()) + " non ha la specifica del lotto di produzione.");
}
@@ -3381,9 +3402,12 @@ public class DocumentProdService {
" FROM dtb_doct " +
" WHERE dtb_doct.cod_anag = " + UtilityDB.valueToString(datiScarico.getCodAnag()) + " AND " +
" dtb_doct.cod_dtip = " + UtilityDB.valueToString(datiScarico.getCodDtip()) + " AND " +
" dtb_doct.data_doc = " + UtilityDB.valueDateToString(datiScarico.getDataDoc(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" dtb_doct.data_doc = " + UtilityDB.valueDateToString(chiusuraLavorazioneDTO.getDataDoc(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" dtb_doct.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" dtb_doct.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd());
if (UtilityString.hasContent(produzioneOrdine.getPartitaMag())) {
UtilityDB.addwhereCond(sql, it.integry.ems_model.utility.Query.format("partita_mag = {}",produzioneOrdine.getPartitaMag()),true);
}
docT = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, sql, DtbDoct.class);
if (docT != null) {
@@ -3392,7 +3416,7 @@ public class DocumentProdService {
}
}
if (docT == null) {
docT = generaTestataDocDaOrdineLav(ordine, datiScarico.getCodDtip(), datiScarico.getDataDoc(), datiScarico.getSerDoc(), datiScarico.getCodAnag(), null, datiScarico.getCodMdep());
docT = generaTestataDocDaOrdineLav(ordine, datiScarico.getCodDtip(), UtilityLocalDate.localDateToDate(produzioneOrdine.getDataProd()), datiScarico.getSerDoc(), datiScarico.getCodAnag(), null, datiScarico.getCodMdep(), produzioneOrdine.getPartitaMag());
docT.setOperation(OperationType.INSERT);
if (datiScarico.getDataVersamento() != null) {
docT.setDataIns(datiScarico.getDataVersamento());
@@ -3475,7 +3499,179 @@ public class DocumentProdService {
if (listMateriali == null || listMateriali.isEmpty()) {
return docsList;
}
List<DtbDocr> righeScarico = getRigheScaricoDocumento(chiusuraLavorazioneDTO, listMateriali, dettaglioScaricoDTO, dataDocFromCollo);
List<DtbDocr> righeScarico = getRigheScaricoDocumento(chiusuraLavorazioneDTO, listMateriali, dettaglioScaricoDTO, UtilityLocalDate.localDateToDate(produzioneOrdine.getDataProd()), produzioneOrdine.getQuantita());
if (!righeScarico.isEmpty()) {
docT.setOperation(OperationType.INSERT_OR_UPDATE);
docT.getDtbDocr().addAll(righeScarico);
docsList.add(docT);
}
return docsList;
}
@Deprecated
private List<DtbDoct> generaDocumentiScaricoMateriali(@NotNull ChiusuraLavorazioneDTO chiusuraLavorazioneDTO, DataDocFromCollo dataDocFromCollo) throws Exception {
List<DtbDoct> docsList = new ArrayList<>();
// Acquisizione dati configurazione e passati dall'esterno
Connection conn = multiDBTransactionManager.getPrimaryConnection();
boolean scaricoUnico = "S".equalsIgnoreCase(setupGest.getSetup(conn, "CARICO_SCARICO_PF", "SETUP", "SCARICO_UNICO"));
DtbOrdt ordine = chiusuraLavorazioneDTO.getOrdine();
ScaricoLavorazioneDTO datiScarico = chiusuraLavorazioneDTO.getScaricoLavorazioneDTO();
// Acquisizione dati prodotto finito per riproporzionare i materiali
String sql =
" SELECT DISTINCT ordL.cod_prod, " +
" ordL.unt_mis_prod, " +
" ordL.rap_conv_prod, " +
" ordL.partita_mag, " +
" isnull(ordL.cod_jfas, jtb_cicl.cod_jfas) as cod_jfas, " +
" ordL.cod_jcom, " +
" jtb_lotr.id_lotto, " +
" jtb_lotr.cod_jfas as cod_jfas_lotto, " +
" dtb_ordr.num_cnf " +
" FROM dtb_ordt ordL LEFT OUTER JOIN jtb_lotr ON ordL.gestione = jtb_lotr.gestione AND " +
" ordL.data_ord = jtb_lotr.data_ord AND " +
" ordL.num_ord = jtb_lotr.num_ord " +
" LEFT OUTER JOIN dtb_ordr ON ordL.gestione_rif = dtb_ordr.gestione AND " +
" ordL.data_ord_rif = dtb_ordr.data_ord AND " +
" ordL.num_ord_rif = dtb_ordr.num_ord AND " +
" ordL.riga_ord_rif = dtb_ordr.riga_ord, " +
" mtb_aart, " +
" jtb_cicl " +
" WHERE ordL.cod_prod = jtb_cicl.cod_prod AND " +
" ordL.cod_prod = mtb_aart.cod_mart AND " +
" ordL.gestione = " + UtilityDB.valueToString(ordine.getGestione()) + " AND " +
" ordL.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" ordL.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd());
DettaglioScaricoDTO dettaglioScaricoDTO = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, sql, DettaglioScaricoDTO.class);
if (dettaglioScaricoDTO == null) {
throw new Exception("L'ordine di lavorazione n." + UtilityDB.valueToString(ordine.getNumOrd()) + " del " + UtilityDB.valueToString(ordine.getDataOrd()) + " e/o la distinta corrispondente presentano delle anomalie.");
}
// Acquisizione dati prodotto dall'esterno
BigDecimal qtaProdUMMag = dataDocFromCollo == null ? datiScarico.getQtaProd() : dataDocFromCollo.getQtaColForDate();
BigDecimal qtaProd = qtaProdUMMag.divide(ordine.getRapConvProd(), 5, RoundingMode.HALF_UP);
// Verifica esistenza partita magazzino
if (ordine.getPartitaMag() == null) {
throw new Exception("L'ordine di lavorazione n." + UtilityDB.valueToString(ordine.getNumOrd()) + " del " + UtilityDB.valueToString(ordine.getDataOrd()) + " non ha la specifica del lotto di produzione.");
}
// Se è attiva l'opzione scarico unico allora lo scarico degli imballaggi e delle materie prime deve essere
// fatto sempre sullo stesso documento nella giornata
BigDecimal qtaProdScaricoPrec = BigDecimal.ZERO;
DtbDoct docT = null;
if (scaricoUnico) {
sql =
" SELECT dtb_doct.* " +
" FROM dtb_doct " +
" WHERE dtb_doct.cod_anag = " + UtilityDB.valueToString(datiScarico.getCodAnag()) + " AND " +
" dtb_doct.cod_dtip = " + UtilityDB.valueToString(datiScarico.getCodDtip()) + " AND " +
" dtb_doct.data_doc = " + UtilityDB.valueDateToString(chiusuraLavorazioneDTO.getDataDoc(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" dtb_doct.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" dtb_doct.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd());
docT = UtilityDB.executeSimpleQueryOnlyFirstRowDTO(conn, sql, DtbDoct.class);
if (docT != null) {
docT.setOperation(OperationType.UPDATE);
qtaProdScaricoPrec = docT.getQtaProd();
}
}
if (docT == null) {
docT = generaTestataDocDaOrdineLav(ordine, datiScarico.getCodDtip(), chiusuraLavorazioneDTO.getDataDoc(), datiScarico.getSerDoc(), datiScarico.getCodAnag(), null, datiScarico.getCodMdep());
docT.setOperation(OperationType.INSERT);
if (datiScarico.getDataVersamento() != null) {
docT.setDataIns(datiScarico.getDataVersamento());
}
}
// Creazione testata documento di scarico (Imballaggi e materiali se presenti)
if (!UtilityString.isNullOrEmpty(datiScarico.getActivityId())) {
docT.setActivityId(datiScarico.getActivityId());
}
docT.setQtaProd(qtaProd.add(qtaProdScaricoPrec));
// Creazione riga commento
if (scaricoUnico) {
DtbDocr docR = new DtbDocr();
docR.setOperation(OperationType.INSERT);
docR.setDescrizione("PRODUZIONE DELLE " + new SimpleDateFormat(CommonConstants.DATETIME_FORMAT_DMY).format(new Date()));
docT.getDtbDocr().add(docR);
}
// Creo condizione che esclude eventuali materiali già presenti in colli di versamento
String tableMPScarDaCollo = "", condMPScarDaCollo = "";
if (datiScarico.isScaricoDaCollo()) {
condMPScarDaCollo = "righeOrdScar.num_ord is null";
tableMPScarDaCollo = "LEFT OUTER JOIN ( select distinct mtb_colt.gestione, mtb_colr.data_ord, mtb_colr.num_ord, mtb_colr.riga_ord " +
" from mtb_colt, mtb_colr " +
" where mtb_colt.gestione = mtb_colr.gestione and " +
" mtb_colt.data_collo = mtb_colr.data_collo and " +
" mtb_colt.ser_collo = mtb_colr.ser_collo and " +
" mtb_colt.num_collo = mtb_colr.num_collo and " +
" mtb_colt.gestione = 'L' and " +
" mtb_colt.segno = -1 and " +
" mtb_colr.riga_ord <> 0)righeOrdScar ON dtb_ordr.gestione = righeOrdScar.gestione and " +
" dtb_ordr.data_ord = righeOrdScar.data_ord and " +
" dtb_ordr.num_ord = righeOrdScar.num_ord and " +
" dtb_ordr.riga_ord = righeOrdScar.riga_ord";
}
// Acquisizione righe materiali da scaricare: vengono scaricate solo le righe di ordine che non risultano scaricate
// con un'altro sistema (system_note = USED) e che non sono presenti in un collo di scarico
sql =
" SELECT dtb_ordr.cod_mart, " +
" dtb_ordr.descrizione, " +
" dtb_ordr.descrizione_estesa, " +
" dtb_ordr.unt_ord, " +
" mtb_unt_mis.flag_dig, " +
" mtb_unt_mis.cifre_dec, " +
" dtb_ordr.rap_conv, " +
" dtb_ordr.riga_ord, " +
" dtb_ordr.qta_ord as qta_mate, " +
" mtb_aart.flag_tracciabilita, " +
" ISNULL(dtb_ordr.partita_mag, '') as partita_mag, " +
" dtb_ordr.flag_evaso, " +
" dtb_ordr.qta_evasa, " +
" round(dtb_ordt.qta_prod * dtb_ordt.rap_conv_prod, 5) as qta_prod_ord, " +
" ISNULL(dtb_ordr.system_note,'') as system_note, " +
" dtb_ordr.num_fase, " +
" round(dtb_ordt.qta_evasa_prod * dtb_ordt.rap_conv_prod, 5) as qta_evasa_prod, " +
" dbo.f_getTipoGruppoMP(dtb_ordr.cod_mart) as gruppo_conto_mp " +
" FROM dtb_ordt, " +
" mtb_aart, " +
" dtb_ordr " +
" LEFT OUTER JOIN mtb_unt_mis on mtb_unt_mis.unt_mis = dtb_ordr.unt_ord " +
tableMPScarDaCollo +
" WHERE dtb_ordr.cod_mart = mtb_aart.cod_mart AND " +
" dtb_ordt.gestione = dtb_ordr.gestione AND " +
" dtb_ordt.data_ord = dtb_ordr.data_ord AND " +
" dtb_ordt.num_ord = dtb_ordr.num_ord AND " +
" dtb_ordr.flag_evaso_forzato = 'N' AND " +
" dtb_ordr.gestione = " + UtilityDB.valueToString(ordine.getGestione()) + " AND " +
" dtb_ordr.data_ord = " + UtilityDB.valueDateToString(ordine.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" dtb_ordr.num_ord = " + UtilityDB.valueToString(ordine.getNumOrd());
sql = UtilityDB.addwhereCond(sql, condMPScarDaCollo, true);
List<MaterialeScaricoDTO> listMateriali = UtilityDB.executeSimpleQueryDTO(conn, sql, MaterialeScaricoDTO.class);
if (listMateriali == null || listMateriali.isEmpty()) {
return docsList;
}
Date dataDoc = dataDocFromCollo != null ? dataDocFromCollo.getDataDocFromCollo() : null;
List<DtbDocr> righeScarico = getRigheScaricoDocumento(chiusuraLavorazioneDTO, listMateriali, dettaglioScaricoDTO,dataDoc , dataDocFromCollo.getQtaColForDate());
if (!righeScarico.isEmpty()) {
@@ -3520,7 +3716,7 @@ public class DocumentProdService {
/*Se la data del documento non è stata passata da fuori allora la data documento dovrà essere quella del collo */
List<DataDocFromCollo> results = new ArrayList<>();
if (caricoLavorazioneDTO.getDataDoc() == null) {
if (chiusuraLavorazioneDTO.getDataDoc() == null) {
String sql = it.integry.ems_model.utility.Query.format(
"SELECT DISTINCT mtb_colt.data_collo AS data_doc_from_collo, SUM(mtb_colr.qta_col) AS qta_col_for_date\n" +
"FROM mtb_colt\n" +
@@ -3547,7 +3743,7 @@ public class DocumentProdService {
}
} else {
DataDocFromCollo dataDocFromCollo = new DataDocFromCollo();
dataDocFromCollo.setDataDocFromCollo(caricoLavorazioneDTO.getDataDoc());
dataDocFromCollo.setDataDocFromCollo(chiusuraLavorazioneDTO.getDataDoc());
dataDocFromCollo.setQtaColForDate(caricoLavorazioneDTO.getQtaProd()); /*UM magazzino*/
results.add(dataDocFromCollo);
}
@@ -3564,7 +3760,7 @@ public class DocumentProdService {
.setCodJfas(chiusuraLavorazioneDTO.getCodJfas());
String condDataCollo = "";
if (caricoLavorazioneDTO.getDataDoc() == null) {
if (chiusuraLavorazioneDTO.getDataDoc() == null) {
condDataCollo = "mtb_colt.data_collo = " + UtilityDB.valueDateToString(dto.getDataDocFromCollo(), CommonConstants.DATE_FORMAT_YMD);
}
@@ -3647,7 +3843,7 @@ public class DocumentProdService {
/*Se la data del documento non è stata passata da fuori allora la data documento dovrà essere quella del collo */
List<DataDocFromCollo> results = new ArrayList<>();
if (datiScarico.getDataDoc() == null) {
if (chiusuraLavorazioneDTO.getDataDoc() == null) {
String sql =
" SELECT distinct mtb_colt.data_collo as data_doc_from_collo, " +
" ISNULL(carichi.qta_col_for_date , 0) as qta_col_for_date " +
@@ -3674,7 +3870,7 @@ public class DocumentProdService {
}
} else {
DataDocFromCollo dataDocFromCollo = new DataDocFromCollo();
dataDocFromCollo.setDataDocFromCollo(datiScarico.getDataDoc());
dataDocFromCollo.setDataDocFromCollo(chiusuraLavorazioneDTO.getDataDoc());
dataDocFromCollo.setQtaColForDate(chiusuraLavorazioneDTO.getScaricoLavorazioneDTO().getQtaProd()); /*UM magazzino*/
results.add(dataDocFromCollo);
}
@@ -3689,7 +3885,7 @@ public class DocumentProdService {
.setCodMdep(datiScarico.getCodMdep());
String condDataCollo = "";
if (datiScarico.getDataDoc() == null) {
if (chiusuraLavorazioneDTO.getDataDoc() == null) {
condDataCollo = "mtb_colt.data_collo = " + UtilityDB.valueDateToString(ddfc.getDataDocFromCollo(), CommonConstants.DATE_FORMAT_YMD);
}
@@ -3845,14 +4041,12 @@ public class DocumentProdService {
return documents;
}
private List<DtbDocr> getRigheScaricoDocumento(ChiusuraLavorazioneDTO chiusuraLavorazioneDTO, List<MaterialeScaricoDTO> listMateriali, DettaglioScaricoDTO dettaglioScaricoDTO, DataDocFromCollo dataDocFromCollo) throws Exception {
private List<DtbDocr> getRigheScaricoDocumento(ChiusuraLavorazioneDTO chiusuraLavorazioneDTO, List<MaterialeScaricoDTO> listMateriali, DettaglioScaricoDTO dettaglioScaricoDTO, Date dataDoc, BigDecimal qtaProdUMMag) throws Exception {
List<DtbDocr> rows = new ArrayList<>();
List<String> materialiProcessati = new ArrayList<>();
ScaricoLavorazioneDTO datiScarico = chiusuraLavorazioneDTO.getScaricoLavorazioneDTO();
DtbOrdt ordine = chiusuraLavorazioneDTO.getOrdine();
BigDecimal qtaProdUMMag = dataDocFromCollo == null ? datiScarico.getQtaProd() : dataDocFromCollo.getQtaColForDate();
for (MaterialeScaricoDTO materiale : listMateriali) {
List<RigaScaricoDTO> righeScarichi = new ArrayList<>();
// Se systemNote = USED vuol dire che un programma esterno ha già utilizzato la materia prima per lo scarico,
@@ -4028,7 +4222,7 @@ public class DocumentProdService {
sql =
" select ISNULL(sum(qta),0) " +
" from dbo.getQtaXPartitaMag(" + UtilityDB.valueToString(datiScarico.getCodMdep()) + ", " + UtilityDB.valueToString(materiale.getCodMart()) + ", " + UtilityDB.valueToString(tipoMetodo) + "," + UtilityDB.valueToString(materiale.getQtaMate()) + ", 0, " + UtilityDB.valueToString(materiale.getSystemNote()) + ", " + UtilityDB.valueDateToString(dataDocFromCollo.getDataDocFromCollo(), CommonConstants.DATE_FORMAT_YMD) + ", " + UtilityDB.valueDateToString(dataDocFromCollo.getDataDocFromCollo(), CommonConstants.DATE_FORMAT_YMD) + ")";
" from dbo.getQtaXPartitaMag(" + UtilityDB.valueToString(datiScarico.getCodMdep()) + ", " + UtilityDB.valueToString(materiale.getCodMart()) + ", " + UtilityDB.valueToString(tipoMetodo) + "," + UtilityDB.valueToString(materiale.getQtaMate()) + ", 0, " + UtilityDB.valueToString(materiale.getSystemNote()) + ", " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ", " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ")";
BigDecimal qtaTot = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
@@ -4049,7 +4243,7 @@ public class DocumentProdService {
" select partita_mag, " +
" qta as qta_inevasa, " +
UtilityDB.valueToString(materiale.getRigaOrd()) + " as riga_ord " +
" from dbo.getQtaXPartitaMag(" + UtilityDB.valueToString(datiScarico.getCodMdep()) + ", " + UtilityDB.valueToString(materiale.getCodMart()) + ", " + UtilityDB.valueToString(tipoMetodo) + "," + UtilityDB.valueToString(materiale.getQtaMate()) + ",0, " + UtilityDB.valueToString(materiale.getSystemNote()) + ", " + UtilityDB.valueDateToString(dataDocFromCollo.getDataDocFromCollo(), CommonConstants.DATE_FORMAT_YMD) + ", " + UtilityDB.valueDateToString(dataDocFromCollo.getDataDocFromCollo(), CommonConstants.DATE_FORMAT_YMD) + ")";
" from dbo.getQtaXPartitaMag(" + UtilityDB.valueToString(datiScarico.getCodMdep()) + ", " + UtilityDB.valueToString(materiale.getCodMart()) + ", " + UtilityDB.valueToString(tipoMetodo) + "," + UtilityDB.valueToString(materiale.getQtaMate()) + ",0, " + UtilityDB.valueToString(materiale.getSystemNote()) + ", " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ", " + UtilityDB.valueDateToString(dataDoc, CommonConstants.DATE_FORMAT_YMD) + ")";
} else {
// Se la partita non c'è e non è tracciabile allora non verrà fatta alcuna assegnazione di partita

View File

@@ -660,7 +660,7 @@ public class DocumentiDirettiService {
createULFromDocument.getCodAnag(),
createULFromDocument.getCodVdes());
codMdepTrasf = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
if(UtilityString.isNullOrEmpty(codMdepTrasf)) isTrasferimento = true;
if(!UtilityString.isNullOrEmpty(codMdepTrasf)) isTrasferimento = true;
}
if (isTrasferimento) {

View File

@@ -5,7 +5,6 @@ import it.integry.ems.product.dto.DuplicaListinoDTO;
import it.integry.ems.product.dto.InsertPromoRequestDTO;
import it.integry.ems.product.dto.InsertPromoResponseDTO;
import it.integry.ems.product.service.ListiniVenditaServices;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.response.StatusResponse;
import it.integry.ems.status.ServiceChecker;

View File

@@ -95,8 +95,14 @@ public class InsertPromoRequestDTO {
public static class Articolo{
@JsonProperty("codmart")
private String codMart;
@JsonProperty("descrizione")
private String descrizione;
@JsonProperty("przvendiva")
private BigDecimal przVendIva;
@JsonProperty("note")
private String note;
@JsonProperty("giacenza")
private BigDecimal giacenza;
public String getCodMart() {
return codMart;
@@ -107,6 +113,15 @@ public class InsertPromoRequestDTO {
return this;
}
public String getDescrizione() {
return descrizione;
}
public Articolo setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public BigDecimal getPrzVendIva() {
return przVendIva;
}
@@ -115,5 +130,23 @@ public class InsertPromoRequestDTO {
this.przVendIva = przVendIva;
return this;
}
public String getNote() {
return note;
}
public Articolo setNote(String note) {
this.note = note;
return this;
}
public BigDecimal getGiacenza() {
return giacenza;
}
public Articolo setGiacenza(BigDecimal giacenza) {
this.giacenza = giacenza;
return this;
}
}
}

View File

@@ -869,9 +869,11 @@ public class ListiniVenditaServices {
vtbListData.setOperation(OperationType.INSERT);
for (InsertPromoRequestDTO.Articolo articolo : insertPromoRequest.getArticoli()) {
MtbLisvData mtbLisvData = new MtbLisvData();
mtbLisvData.setCodMart(articolo.getCodMart());
mtbLisvData.setPrzVendIva(articolo.getPrzVendIva());
MtbLisvData mtbLisvData = new MtbLisvData()
.setCodMart(articolo.getCodMart())
.setPrzVendIva(articolo.getPrzVendIva())
.setNote(articolo.getNote())
.setGiacenza(articolo.getGiacenza());
mtbLisvData.setOperation(OperationType.INSERT);
vtbListData.getMtbLisvData().add(mtbLisvData);
}
@@ -879,7 +881,7 @@ public class ListiniVenditaServices {
entityToProcess.add(vtbListData);
}
List<Callable<EntityBase>> calls = new ArrayList<>();
/*List<Callable<EntityBase>> calls = new ArrayList<>();
for (EntityBase entity : entityToProcess) {
Callable<EntityBase> callable = () -> {
@@ -890,10 +892,11 @@ public class ListiniVenditaServices {
}
};
calls.add(callable);
}
}*/
try {
List<EntityBase> entityRet = taskExecutorService.executeTasks(calls);
//List<EntityBase> entityRet = taskExecutorService.executeTasks(calls);
List<EntityBase> entityRet = entityProcessor.processEntityList(entityToProcess, true);
UtilityEntity.throwEntitiesException(entityRet);
InsertPromoResponse.setEntityBases(entityRet);
} catch (Exception e) {

View File

@@ -7,12 +7,14 @@ import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.production.dto.*;
import it.integry.ems.production.service.MesProductionServiceV2;
import it.integry.ems.production.service.ProductionLineService;
import it.integry.ems.production.service.ProductionOrdersLifecycleService;
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
import it.integry.ems.service.production.ProductionOrderDataHandlerService;
import it.integry.ems.response.EsitoType;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.response.StatusResponse;
import it.integry.ems.status.ServiceChecker;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.config.EmsRestConstants;
import it.integry.ems_model.entity.MtbColt;
import it.integry.ems_model.utility.UtilityDate;
@@ -50,6 +52,12 @@ public class MesProductionControllerV2 {
@Autowired
private RequestDataDTO requestDataDTO;
@Autowired
private ProductionOrdersLifecycleService productionOrdersLifecycleService;
@Autowired
public MultiDBTransactionManager multiDBTransactionManager;
@RequestMapping(value = "/status", method = RequestMethod.GET)
public @ResponseBody
@@ -450,4 +458,19 @@ public class MesProductionControllerV2 {
mesProductionService.duplicaOrdiniGiornoDopo(codJfas);
return ServiceRestResponse.createPositiveResponse();
}
@RequestMapping(value = "ordine/stop", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse stopOrdineLav(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String profileDB,
@RequestBody() ChiusuraLavorazioneDTO dto) throws Exception {
try{
productionOrdersLifecycleService.stopOrdineLav(dto);
}catch (Exception e){
multiDBTransactionManager.rollbackAll();
throw e;
}
return ServiceRestResponse.createPositiveResponse();
}
}

View File

@@ -0,0 +1,126 @@
package it.integry.ems.production.dto;
import it.integry.ems_model.entity.DtbOrdt;
public class MesStopOrdineDTO {
private String codJfas;
private DtbOrdt ordLav;
private boolean effettuaCaricoProdotto;
private boolean effettuaSCaricoMateriali;
private boolean terminaLavorazione;
private boolean $terminaLavorazioneLinea;
private String codDtipCar;
private String codDtipScar;
private String codMdep;
private String codMdepScar;
private boolean creaCaricoDaCollo;
private boolean creaScaricoDaCollo;
public String getCodJfas() {
return codJfas;
}
public MesStopOrdineDTO setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public DtbOrdt getOrdLav() {
return ordLav;
}
public MesStopOrdineDTO setOrdLav(DtbOrdt ordLav) {
this.ordLav = ordLav;
return this;
}
public boolean isEffettuaCaricoProdotto() {
return effettuaCaricoProdotto;
}
public MesStopOrdineDTO setEffettuaCaricoProdotto(boolean effettuaCaricoProdotto) {
this.effettuaCaricoProdotto = effettuaCaricoProdotto;
return this;
}
public boolean isEffettuaSCaricoMateriali() {
return effettuaSCaricoMateriali;
}
public MesStopOrdineDTO setEffettuaSCaricoMateriali(boolean effettuaSCaricoMateriali) {
this.effettuaSCaricoMateriali = effettuaSCaricoMateriali;
return this;
}
public boolean isTerminaLavorazione() {
return terminaLavorazione;
}
public MesStopOrdineDTO setTerminaLavorazione(boolean terminaLavorazione) {
this.terminaLavorazione = terminaLavorazione;
return this;
}
public boolean is$terminaLavorazioneLinea() {
return $terminaLavorazioneLinea;
}
public MesStopOrdineDTO set$terminaLavorazioneLinea(boolean $terminaLavorazioneLinea) {
this.$terminaLavorazioneLinea = $terminaLavorazioneLinea;
return this;
}
public String getCodDtipCar() {
return codDtipCar;
}
public MesStopOrdineDTO setCodDtipCar(String codDtipCar) {
this.codDtipCar = codDtipCar;
return this;
}
public String getCodDtipScar() {
return codDtipScar;
}
public MesStopOrdineDTO setCodDtipScar(String codDtipScar) {
this.codDtipScar = codDtipScar;
return this;
}
public String getCodMdep() {
return codMdep;
}
public MesStopOrdineDTO setCodMdep(String codMdep) {
this.codMdep = codMdep;
return this;
}
public String getCodMdepScar() {
return codMdepScar;
}
public MesStopOrdineDTO setCodMdepScar(String codMdepScar) {
this.codMdepScar = codMdepScar;
return this;
}
public boolean isCreaCaricoDaCollo() {
return creaCaricoDaCollo;
}
public MesStopOrdineDTO setCreaCaricoDaCollo(boolean creaCaricoDaCollo) {
this.creaCaricoDaCollo = creaCaricoDaCollo;
return this;
}
public boolean isCreaScaricoDaCollo() {
return creaScaricoDaCollo;
}
public MesStopOrdineDTO setCreaScaricoDaCollo(boolean creaScaricoDaCollo) {
this.creaScaricoDaCollo = creaScaricoDaCollo;
return this;
}
}

View File

@@ -906,12 +906,8 @@ public class MesProductionServiceV2 {
}
private RegisterSupervisorDTO getSupervisorPanelData(String codJfas) throws Exception {
String gestName = "MES";
String section = "HMI";
String key = codJfas;
if (!UtilityString.isNullOrEmpty(codJfas)) {
String setup = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), gestName, section, key);
String setup = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "MES", "HMI", codJfas);
if (!UtilityString.isNullOrEmpty(setup)) {
ObjectMapper mapper = new ObjectMapper();
@@ -924,6 +920,15 @@ public class MesProductionServiceV2 {
}
public boolean hasSupervisorPanel(String codJfas) throws Exception {
RegisterSupervisorDTO supervisorPanelData = getSupervisorPanelData(codJfas);
if (supervisorPanelData == null) {
return false;
}
return UtilityString.hasContent(supervisorPanelData.getSupervisorServiceIp());
}
public List<OrdineLavorazioneDTO> getOrdiniLavorazioneInCorsoPerMateriale(String codJfas, String idMateriale) throws Exception {
String query = "select " +
@@ -2068,7 +2073,7 @@ public class MesProductionServiceV2 {
}
if (scaricoDto.getSerDoc() == null) {
scaricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), scaricoDto.getCodDtip(), scaricoDto.getCodMdep(), scaricoDto.getDataDoc()));
scaricoDto.setSerDoc(DocumentRules.getSerDoc(multiDBTransactionManager.getPrimaryConnection(), scaricoDto.getCodDtip(), scaricoDto.getCodMdep(), dtoChiusura.getDataDoc()));
}
List<DtbDoct> listDocs = documentProdService.generaDocScaricoDaColliIdLotto(dtoChiusura);

View File

@@ -0,0 +1,196 @@
package it.integry.ems.production.service;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import it.integry.common.var.CommonConstants;
import it.integry.ems.document.dto.CaricoLavorazioneDTO;
import it.integry.ems.document.dto.ChiusuraLavorazioneDTO;
import it.integry.ems.document.dto.RientroLavorazioneDTO;
import it.integry.ems.document.dto.ScaricoLavorazioneDTO;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.production.dto.MesStopOrdineDTO;
import it.integry.ems.service.AziendaService;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems_model.entity.DtbOrdt;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashMap;
@Service
@Scope("request")
public class ProductionOrdersLifecycleService {
private final Logger logger = LogManager.getLogger();
@Autowired
public MultiDBTransactionManager multiDBTransactionManager;
@Autowired
public EntityProcessor entityProcessor;
@Autowired
public SetupGest setupGest;
@Autowired
private RequestDataDTO requestDataDTO;
@Autowired
private ProductionService productionService;
@Autowired
private AziendaService aziendaService;
@Autowired
private MesProductionServiceV2 mesProductionServiceV2;
public void stopOrdineLav(ChiusuraLavorazioneDTO dto) throws Exception {
DtbOrdt dtbOrdt = dto.getOrdine();
if (dtbOrdt == null) {
throw new Exception("Impossibile identificare l'ordine di lavorazione selezionato!");
}
//<editor-fold desc="Se impostato tramite setup la chiusura dell'ordine viene spostata nella linguetta [ordini da confermare] senza che vengano generati i documenti">
boolean fermaCreaDocsEnabled = setupGest.getSetupBoolean(multiDBTransactionManager.getPrimaryConnection(), "CARICO_SCARICO_PF", "SETUP", "FERMA_CREA_DOCS");
if (fermaCreaDocsEnabled) {
if (!setupGest.getSetupUserBoolean(multiDBTransactionManager.getPrimaryConnection(), "CARICO_SCARICO_PF", "SETUP", "FERMA_CREA_DOCS", requestDataDTO.getUsername())) {
dtbOrdt.setDataConsProdMax(new Date());
dtbOrdt.setOperation(OperationType.UPDATE);
entityProcessor.processEntity(dtbOrdt, multiDBTransactionManager);
return;
}
}
//</editor-fold>
//<editor-fold desc="Raccolta dati chiusura">
dtbOrdt.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(dtbOrdt, multiDBTransactionManager);
boolean isCaricoScaricoimmediato = setupGest.getSetupDepoBoolean(multiDBTransactionManager.getPrimaryConnection(), "CARICO_SCARICO_PF", "SETUP", "GENERA_CARICO_SCARICO_IMMEDIATO", dtbOrdt.getCodMdep());
dto.setTerminaLavorazioneLinea(true);
dto.setChiudiOrdine(true);
dto.setEffettuaCarico(!isCaricoScaricoimmediato);
dto.setEffettuaScarico(!isCaricoScaricoimmediato);
dto.setCodProd(dtbOrdt.getCodProd());
dto.setPartitaMag(dtbOrdt.getPartitaMag());
dto.setRapConvProd(dtbOrdt.getRapConvProd());
dto.setUntMisProd(dtbOrdt.getUntMisProd());
dto.setRifOrd(dtbOrdt.getRifOrd());
String partIvaAzienda = aziendaService.retrieveInternalPartIva();
String partIvaOrder = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), Query.format("SELECT part_iva from gtb_anag where cod_anag = {}", dtbOrdt.getCodAnag()));
boolean isOrdineInterno = partIvaAzienda.equalsIgnoreCase(partIvaOrder);
String dataDocType = setupGest.getSetup("PVM", "MONITORAGGIO_LINEE_V2", "DATA_DOC_TYPE");
Date dataDoc;
switch (dataDocType) {
case "DATA_ODIERNA":
dataDoc = new Date();
break;
case "DATA_COLLO_MAX":
String sql = it.integry.ems_model.utility.Query.format(
"SELECT MAX(mtb_colt.data_collo) AS data_collo\n" +
"FROM mtb_colt \n" +
"WHERE mtb_colt.gestione = %s AND\n" +
" mtb_colt.data_ord = %s AND\n" +
" mtb_colt.num_ord = %s AND\n" +
" mtb_colt.segno = 1\n" +
"GROUP BY mtb_colt.gestione,\n" +
" mtb_colt.data_ord,\n" +
" mtb_colt.num_ord,\n" +
" mtb_colt.segno",
dtbOrdt.getGestione(),
dtbOrdt.getDataOrd(),
dtbOrdt.getNumOrd()
);
dataDoc = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
break;
case "DATA_COLLO":
default:
dataDoc = null;
break;
}
dto.setDataDoc(dataDoc);
//<editor-fold desc="Raccolta dati per creazione documenti di carico">
CaricoLavorazioneDTO caricoLavorazioneDTO = dto.getCaricoLavorazioneDTO();
String codDtipCar = productionService.getCodDtipCaricoLavorazione(isOrdineInterno);
if (UtilityString.isNullOrEmpty(caricoLavorazioneDTO.getCodDtip())) {
caricoLavorazioneDTO.setCodDtip(codDtipCar);
}
if (UtilityString.isNullOrEmpty(caricoLavorazioneDTO.getCodMdep())) {
caricoLavorazioneDTO.setCodMdep(dtbOrdt.getCodMdep());
}
if (UtilityString.isNullOrEmpty(caricoLavorazioneDTO.getCodJfas())) {
caricoLavorazioneDTO.setCodJfas(dtbOrdt.getCodJfas());
}
if (UtilityString.isNullOrEmpty(caricoLavorazioneDTO.getCodAnag())) {
caricoLavorazioneDTO.setCodAnag(dtbOrdt.getCodAnag());
}
//</editor-fold>
//<editor-fold desc="Raccolta dati per creazione documenti di scarico">
ScaricoLavorazioneDTO scaricoLavorazioneDTO = dto.getScaricoLavorazioneDTO();
if (UtilityString.isNullOrEmpty(scaricoLavorazioneDTO.getCodDtip())) {
String codDtipSca = productionService.getCodDtipScaricoLavorazione(isOrdineInterno);
scaricoLavorazioneDTO.setCodDtip(codDtipSca);
}
if (UtilityString.isNullOrEmpty(scaricoLavorazioneDTO.getCodMdep())) {
scaricoLavorazioneDTO.setCodMdep(dtbOrdt.getCodMdep());
}
if (UtilityString.isNullOrEmpty(scaricoLavorazioneDTO.getCodAnag())) {
scaricoLavorazioneDTO.setCodAnag(dtbOrdt.getCodAnag());
}
if (UtilityBigDecimal.isNullOrZero(scaricoLavorazioneDTO.getQtaProd())) {
scaricoLavorazioneDTO.setQtaProd(dtbOrdt.getQtaProd());
}
//</editor-fold>
//<editor-fold desc="Raccolta dati per creazione documenti di rientro">
RientroLavorazioneDTO rientroLavorazioneDTO = dto.getRientroLavorazioneDTO();
//</editor-fold>
//</editor-fold>
//<editor-fold desc="Eseguo creazione documenti, e chiusura ordine">
productionService.chiudiOrdineLavorazione(dto);
//</editor-fold>
if (mesProductionServiceV2.hasSupervisorPanel(dto.getCodJfas())) {
HashMap<String, Object> body = new HashMap<>();
body.put("dataOrd", UtilityDate.formatDate(dtbOrdt.getDataOrd(), CommonConstants.DATETIME_FORMAT_DMY_SLASHED));
body.put("numOrd", dtbOrdt.getNumOrd());
body.put("gestione", dtbOrdt.getGestione());
ObjectMapper mapper = new ObjectMapper();
try {
mesProductionServiceV2.sendCommand(dto.getCodJfas(), "order/stop", mapper.convertValue(body, JsonNode.class));
} catch (Exception e) {
logger.error(e);
if ((!UtilityDebug.isDebugExecution() && !UtilityDebug.isIntegryServer())) {
throw e;
}
}
}
}
}

View File

@@ -35,6 +35,7 @@ import java.math.RoundingMode;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
@@ -779,36 +780,48 @@ public class ProductionService {
public List<EntityBase> chiudiOrdineLavorazione(ChiusuraLavorazioneDTO chiusuraLavorazioneDTO) throws Exception {
List<EntityBase> entityBaseList = new ArrayList<>();
if (chiusuraLavorazioneDTO.getOrdine() == null) {
DtbOrdt ordine = chiusuraLavorazioneDTO.getOrdine();
if (ordine == null) {
throw new Exception("Impossibile identificare l'ordine di lavorazione selezionato!");
}
chiusuraLavorazioneDTO.getOrdine().setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(chiusuraLavorazioneDTO.getOrdine(), multiDBTransactionManager);
ordine.setOperation(OperationType.SELECT_OBJECT);
entityProcessor.processEntity(ordine, multiDBTransactionManager);
if (chiusuraLavorazioneDTO.isEffettuaCarico() || chiusuraLavorazioneDTO.isEffettuaScarico()) {
documentProdService.generaDocumentiLavorazione(chiusuraLavorazioneDTO);
entityBaseList.addAll(documentProdService.generaDocumentiLavorazione(chiusuraLavorazioneDTO));
}
if (chiusuraLavorazioneDTO.isChiudiOrdine()) {
boolean generateLotto = "S".equalsIgnoreCase(setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "W_PORDI_RC", "GENERA_LOTTO_PROD", "GENERA_LOTTO"));
boolean generateLotto = setupGest.getSetupBoolean(multiDBTransactionManager.getPrimaryConnection(), "W_PORDI_RC", "GENERA_LOTTO_PROD", "GENERA_LOTTO");
entityBaseList.add(evadiOrdineLav(chiusuraLavorazioneDTO.getOrdine()));
entityBaseList.add(evadiOrdineLav(ordine));
if (generateLotto) {
// Verifica chiusura lotto di produzione se tutti gli ordini ad esso associati sono evasi
Date dataDoc = chiusuraLavorazioneDTO.getCaricoLavorazioneDTO() != null && chiusuraLavorazioneDTO.getCaricoLavorazioneDTO().getDataDoc() != null ? chiusuraLavorazioneDTO.getCaricoLavorazioneDTO().getDataDoc() : new Date();
JtbLott lot = checkChiusuraLotto(chiusuraLavorazioneDTO.getOrdine(), dataDoc);
Date dataDoc = chiusuraLavorazioneDTO.getCaricoLavorazioneDTO() != null && chiusuraLavorazioneDTO.getDataDoc() != null ? chiusuraLavorazioneDTO.getDataDoc() : new Date();
JtbLott lot = checkChiusuraLotto(ordine, dataDoc);
if (lot != null) {
entityBaseList.add(lot);
}
}
} else if (chiusuraLavorazioneDTO.isTerminaLavorazioneLinea()) {
entityBaseList.add(terminaLavorazioneLinea(chiusuraLavorazioneDTO.getOrdine(), chiusuraLavorazioneDTO.getCodJfas()));
entityBaseList.add(terminaLavorazioneLinea(ordine, chiusuraLavorazioneDTO.getCodJfas()));
}
if (chiusuraLavorazioneDTO.isSalvaDocumenti()) {
entityProcessor.processEntityList(entityBaseList, true);
UtilityEntity.throwEntitiesException(entityBaseList);
//distribuzioneMateriali();
}
String syncChiusuraOrdineLavorazione = String.format("SET NOCOUNT ON; EXEC MES_SyncChiusuraOrdineLavorazione %d, %s, %s; SET NOCOUNT OFF;",
ordine.getNumOrd(),
UtilityDB.valueToString(ordine.getDataOrd()),
ordine.getGestione()
);
try (Statement storedProcedure = multiDBTransactionManager.getPrimaryConnection().createStatement()) {
storedProcedure.execute(syncChiusuraOrdineLavorazione);
}
return entityBaseList;
}
@@ -832,10 +845,8 @@ public class ProductionService {
Date dataDoc;
if (chiusuraLavorazioneDTO.getCaricoLavorazioneDTO() != null && chiusuraLavorazioneDTO.getCaricoLavorazioneDTO().getDataDoc() != null) {
dataDoc = chiusuraLavorazioneDTO.getCaricoLavorazioneDTO().getDataDoc();
} else if (chiusuraLavorazioneDTO.getScaricoLavorazioneDTO() != null && chiusuraLavorazioneDTO.getScaricoLavorazioneDTO().getDataDoc() != null) {
dataDoc = chiusuraLavorazioneDTO.getScaricoLavorazioneDTO().getDataDoc();
if (chiusuraLavorazioneDTO.getDataDoc() != null) {
dataDoc = chiusuraLavorazioneDTO.getDataDoc();
} else {
dataDoc = new Date();
}
@@ -949,7 +960,8 @@ public class ProductionService {
ordineLav.setOperation(OperationType.UPDATE);
String sql = " select id_riga ," +
" max(id_step)" +
" max(id_step) as id_step," +
" 'N' as flag_step_attivo" +
" from dtb_ord_steps " +
" WHERE dtb_ord_steps.gestione = " + UtilityDB.valueToString(ordineLav.getGestione()) + " AND " +
" dtb_ord_steps.data_ord = " + UtilityDB.valueDateToString(ordineLav.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
@@ -957,19 +969,11 @@ public class ProductionService {
" dtb_ord_steps.cod_jfas = " + UtilityDB.valueToString(codJfas) + " " +
" group by id_riga ";
PreparedStatement info = conn.prepareStatement(sql);
ResultSet res = info.executeQuery();
List<DtbOrdSteps> steps = UtilityDB.executeSimpleQueryDTO(conn, sql, DtbOrdSteps.class);
while (res.next()) {
DtbOrdSteps ordSteps = new DtbOrdSteps();
ordSteps.setOperation(OperationType.UPDATE);
ordSteps.setIdRiga(res.getInt(1));
ordSteps.setIdStep(res.getInt(2));
ordSteps.setFlagStepAttivo("N");
ordineLav.getDtbOrdSteps().add(ordSteps);
if (!UtilityList.isNullOrEmpty(steps)){
ordineLav.getDtbOrdSteps().addAll(steps.stream().peek(step -> step.setOperation(OperationType.UPDATE)).collect(Collectors.toList()));
}
res.close();
info.close();
return ordineLav;
}
@@ -1722,4 +1726,20 @@ public class ProductionService {
return entityBaseList;
}
public String getCodDtipCaricoLavorazione(boolean isOrdineInterno)throws Exception {
if (isOrdineInterno){
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(),"W_PORDI_RC","SETUP_DOCUMENTI","COD_DTIP_CAR");
}else {
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(),"DATI_AZIENDA","CONTO_LAVORO","COD_DTIP_CLAV");
}
}
public String getCodDtipScaricoLavorazione(boolean isOrdineInterno)throws Exception {
if (isOrdineInterno){
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(),"W_PORDI_RC","SETUP_DOCUMENTI","COD_DTIP_SCAR");
}else {
return setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(),"DATI_AZIENDA","CONTO_LAVORO","COD_DTIP_SLAV");
}
}
}

View File

@@ -3,6 +3,7 @@ package it.integry.ems.retail.wms.dto;
import com.fasterxml.jackson.annotation.JsonValue;
import it.integry.ems_model.entity._enum.IBaseEnum;
import java.time.LocalDate;
import java.util.List;
public class CreateUDSRequestDTO {
@@ -11,6 +12,7 @@ public class CreateUDSRequestDTO {
private Integer segno;
private String ragSoc;
private Integer numCollo;
private LocalDate dataCollo;
private String serCollo;
private Causale causaleCollo;
@@ -64,6 +66,15 @@ public class CreateUDSRequestDTO {
return this;
}
public LocalDate getDataCollo() {
return dataCollo;
}
public CreateUDSRequestDTO setDataCollo(LocalDate dataCollo) {
this.dataCollo = dataCollo;
return this;
}
public String getSerCollo() {
return serCollo;
}

View File

@@ -1,6 +1,8 @@
package it.integry.ems.retail.wms.lavorazione.service;
import com.annimon.stream.Stream;
import it.integry.ems.document.dto.ProduzioneOrdineDTO;
import it.integry.ems.document.dto.ScarichiArticoloDTO;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.logistic.dto.sm2.FiltroDistribuzioneColloDTO;
import it.integry.ems.product.importaz.service.ProductServices;
@@ -21,23 +23,21 @@ import it.integry.ems.service.production.ProductionOrderDataHandlerService;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.user.UserSession;
import it.integry.ems.utility.UtilityEntity;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.entity.*;
import it.integry.ems_model.entity._enum.GestioneEnum;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.MtbColtUtils;
import it.integry.ems_model.utility.UtilityBigDecimal;
import it.integry.ems_model.utility.UtilityLocalDate;
import it.integry.ems_model.utility.UtilityString;
import it.integry.ems_model.utility.*;
import net.sf.jasperreports.engine.export.oasis.Utility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -747,4 +747,108 @@ public class WMSLavorazioneService {
return udc;
}
public List<ProduzioneOrdineDTO> riproporzionaScarichiLavorazione(List<ProduzioneOrdineDTO> produzioniOrdine, List<MtbColt> scarichi) throws Exception {
if (UtilityList.isNullOrEmpty(produzioniOrdine) || UtilityList.isNullOrEmpty(scarichi)) {
return produzioniOrdine;
}
if (produzioniOrdine.size() == 1) {
produzioniOrdine.get(0).setScarichiProduzione(scarichi);
return produzioniOrdine;
}
List<EntityBase> entititesToSave = new ArrayList<>();
HashMap<String, ScarichiArticoloDTO> scarichiArticoli = new HashMap<>();
for (MtbColt uds : scarichi) {
String sql = "SELECT * from mtb_colr where gestione = {} AND data_collo = {} and ser_collo = {} and num_collo = {}";
List<MtbColr> rows = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), Query.format(sql, uds.getGestione(), uds.getDataCollo(), uds.getSerCollo(), uds.getNumCollo()), MtbColr.class);
if (UtilityList.isNullOrEmpty(rows)) {
continue;
}
for (MtbColr row : rows) {
ScarichiArticoloDTO dtoScarico = scarichiArticoli.get(row.getCodMart());
if (dtoScarico == null) {
dtoScarico = new ScarichiArticoloDTO();
dtoScarico.setCodMart(row.getCodMart())
.setQtaScaricata(BigDecimal.ZERO)
.setScarichi(new ArrayList<>());
}
dtoScarico.setQtaScaricata(dtoScarico.getQtaScaricata().add(row.getQtaCol()));
dtoScarico.getScarichi().add(row);
scarichiArticoli.put(row.getCodMart(), dtoScarico);
}
uds.setOperation(OperationType.DELETE);
entititesToSave.add(uds);
}
Iterator<ProduzioneOrdineDTO> iteratorProduzioni = produzioniOrdine.iterator();
while (iteratorProduzioni.hasNext()) {
ProduzioneOrdineDTO produzione = iteratorProduzioni.next();
boolean isLastProduzione = !iteratorProduzioni.hasNext();
if (UtilityBigDecimal.isNullOrZero(produzione.getPesoProduzione()))
continue;
DtbOrdt ordine = produzione.getOrdine();
//<editor-fold desc="Creazione UDS">
List<CreateUDSRequestOrderDTO> ordini = new ArrayList<>();
CreateUDSRequestOrderDTO orderDTO = new CreateUDSRequestOrderDTO()
.setNumOrd(ordine.getNumOrd())
.setDataOrd(UtilityLocalDate.localDateFromDate(ordine.getDataOrd()))
.setGestione(ordine.getGestione());
ordini.add(orderDTO);
CreateUDSRequestDTO requestDTO = new CreateUDSRequestDTO()
.setCodMdep(ordine.getCodMdep())
.setCausaleCollo(CreateUDSRequestDTO.Causale.SCARICO)
.setSegno(-1)
.setOrders(ordini);
if (produzione.getDataProd() != null) {
requestDTO.setDataCollo(produzione.getDataProd());
}
MtbColt uds = createUDS(requestDTO);
//</editor-fold>
//<editor-fold desc="per ogni articolo ripartisco gli scarichi">
for (ScarichiArticoloDTO scarichiMp : scarichiArticoli.values()) {
String codMart = scarichiMp.getCodMart();
BigDecimal cifreDec = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn( multiDBTransactionManager.getPrimaryConnection(),
Query.format("select mtb_unt_mis.cifre_dec from mtb_unt_mis inner join mtb_aart on mtb_unt_mis.unt_mis = mtb_aart.unt_mis and cod_mart = {}", codMart)
);
BigDecimal qtaDaScaricare = UtilityBigDecimal.calculatePercentage(scarichiMp.getQtaScaricata(), produzione.getPesoProduzione().doubleValue(),cifreDec.intValue());
if (UtilityBigDecimal.equalsTo(qtaDaScaricare, BigDecimal.ZERO)) {
continue;
}
scarichiMp.getScarichi().sort(Comparator.comparing(MtbColr::getDatetimeRow));
Iterator<MtbColr> rowsIterator = scarichiMp.getScarichi().iterator();
do {
MtbColr nextScar = rowsIterator.next();
if (UtilityBigDecimal.equalsTo(nextScar.getQtaCol(), BigDecimal.ZERO))
continue;
MtbColr newRow = (MtbColr) nextScar.clone();
newRow
.setDataCollo(null)
.setSerCollo(null)
.setNumCollo(null)
.setGestione(null)
.setRiga(null)
.setNumCnf(null)
.setOperation(OperationType.INSERT);
BigDecimal qtaPrelevata = isLastProduzione ? nextScar.getQtaCol() : UtilityBigDecimal.getLowerBetween(nextScar.getQtaCol(), qtaDaScaricare);
newRow.setQtaCol(qtaPrelevata);
qtaDaScaricare = qtaDaScaricare.subtract(qtaPrelevata);
nextScar.setQtaCol(nextScar.getQtaCol().subtract(qtaPrelevata));
uds.getMtbColr().add(newRow);
}
while ((UtilityBigDecimal.greaterThan(qtaDaScaricare, BigDecimal.ZERO) || isLastProduzione) && rowsIterator.hasNext());
}
entititesToSave.add(uds);
produzione.getScarichiProduzione().add(uds);
//</editor-fold>
}
entityProcessor.processEntityList(entititesToSave, multiDBTransactionManager, true);
UtilityEntity.throwEntitiesException(entititesToSave);
return produzioniOrdine;
}
}