Merge remote-tracking branch 'origin/develop' into develop
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good
This commit is contained in:
@@ -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 {
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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$
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user