diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..cec4f599 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1 @@ +/saveactions_settings.xml diff --git a/app/build.gradle b/app/build.gradle index 9db9edb1..4c0e579a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 254 - def appVersionName = '1.22.0' + def appVersionCode = 255 + def appVersionName = '1.23.0' signingConfigs { release { @@ -124,7 +124,8 @@ dependencies { api "com.google.dagger:dagger:$dagger2_version" annotationProcessor "com.google.dagger:dagger-compiler:$dagger2_version" api "com.google.dagger:dagger-android:$dagger2_version" - api "com.google.dagger:dagger-android-support:$dagger2_version" // if you use the support libraries + api "com.google.dagger:dagger-android-support:$dagger2_version" + // if you use the support libraries annotationProcessor "com.google.dagger:dagger-android-processor:$dagger2_version" //FAB diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index 5af2bd2b..b6cd0309 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -19,12 +19,14 @@ import it.integry.integrywmsnative.core.rest.consumers.CommessaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.EntityRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.services.inventario.InventarioService; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.rest.ProdFabbisognoLineeProdRESTConsumer; @@ -165,5 +167,16 @@ public class MainApplicationModule { return new DocInterniRESTConsumer(); } + @Provides + @Singleton + GiacenzaRESTConsumer provideGiacenzaRESTConsumer(SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + return new GiacenzaRESTConsumer(systemRESTConsumer, articoloRESTConsumer); + } + + @Provides + @Singleton + InventarioService provideInventarioService(GiacenzaRESTConsumer giacenzaRESTConsumer) { + return new InventarioService(giacenzaRESTConsumer); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java index a73a097f..38458d0a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java @@ -60,7 +60,7 @@ public class MtbColr extends EntityBase { public MtbColr() { type = "mtb_colr"; - if(SettingsManager.i().isUserLoggedIn()) { + if (SettingsManager.i().isUserLoggedIn()) { setUtente(SettingsManager.i().getUser().getFullname()); } } @@ -82,7 +82,6 @@ public class MtbColr extends EntityBase { } - public MtbColr setGestione(GestioneEnum gestione) { this.gestione = gestione.getText(); return this; @@ -124,6 +123,11 @@ public class MtbColr extends EntityBase { return this; } + public MtbColr setDataCollo(Date dataCollo) { + setDataCollo(UtilityDate.formatDate(dataCollo, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); + return this; + } + public Integer getRiga() { return riga; @@ -301,8 +305,6 @@ public class MtbColr extends EntityBase { } - - public String getDatetimeRowS() { return datetimeRow; } @@ -322,11 +324,6 @@ public class MtbColr extends EntityBase { } - - - - - public String getCodJcom() { return codJcom; } @@ -364,11 +361,6 @@ public class MtbColr extends EntityBase { } - - - - - public String getDataScadPartitaS() { return dataScadPartita; } @@ -398,7 +390,6 @@ public class MtbColr extends EntityBase { } - public String getUntMis() { return untMis; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java new file mode 100644 index 00000000..25262c8d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MvwSitArtUdcDetInventario.java @@ -0,0 +1,273 @@ +package it.integry.integrywmsnative.core.model; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * Created by ValerioC on 06/03/2018. + */ + +public class MvwSitArtUdcDetInventario { + + private String gestione; + private Date dataCollo; + private String serCollo; + private Integer numCollo; + private Integer segno; + private String codMdep; + private String posizione; + private Integer priorita; + private String codGruppo; + private String gruppo; + private String codSgruppo; + private String sottogruppo; + private String codMart; + private String diacod; + private String descrizioneEstesa; + private String partitaMag; + private String codJcom; + private String commessa; + private String untMis; + private BigDecimal qtaCol; + private BigDecimal numCnf; + private BigDecimal qtaCnf; + private BigDecimal pesoNettoKg; + private BigDecimal pesoLordoKg; + private String codJfas; + private MtbAart mtbAart; + + + public String getGestione() { + return gestione; + } + + public MvwSitArtUdcDetInventario setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public Date getDataCollo() { + return dataCollo; + } + + public MvwSitArtUdcDetInventario setDataCollo(Date dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public MvwSitArtUdcDetInventario setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public MvwSitArtUdcDetInventario setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public Integer getSegno() { + return segno; + } + + public MvwSitArtUdcDetInventario setSegno(Integer segno) { + this.segno = segno; + return this; + } + + public String getCodMdep() { + return codMdep; + } + + public MvwSitArtUdcDetInventario setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getPosizione() { + return posizione; + } + + public MvwSitArtUdcDetInventario setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + + public Integer getPriorita() { + return priorita; + } + + public MvwSitArtUdcDetInventario setPriorita(Integer priorita) { + this.priorita = priorita; + return this; + } + + public String getCodGruppo() { + return codGruppo; + } + + public MvwSitArtUdcDetInventario setCodGruppo(String codGruppo) { + this.codGruppo = codGruppo; + return this; + } + + public String getGruppo() { + return gruppo; + } + + public MvwSitArtUdcDetInventario setGruppo(String gruppo) { + this.gruppo = gruppo; + return this; + } + + public String getCodSgruppo() { + return codSgruppo; + } + + public MvwSitArtUdcDetInventario setCodSgruppo(String codSgruppo) { + this.codSgruppo = codSgruppo; + return this; + } + + public String getSottogruppo() { + return sottogruppo; + } + + public MvwSitArtUdcDetInventario setSottogruppo(String sottogruppo) { + this.sottogruppo = sottogruppo; + return this; + } + + public String getCodMart() { + return codMart; + } + + public MvwSitArtUdcDetInventario setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDiacod() { + return diacod; + } + + public MvwSitArtUdcDetInventario setDiacod(String diacod) { + this.diacod = diacod; + return this; + } + + public String getDescrizioneEstesa() { + return descrizioneEstesa; + } + + public MvwSitArtUdcDetInventario setDescrizioneEstesa(String descrizioneEstesa) { + this.descrizioneEstesa = descrizioneEstesa; + return this; + } + + public String getPartitaMag() { + return partitaMag; + } + + public MvwSitArtUdcDetInventario setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + public String getCodJcom() { + return codJcom; + } + + public MvwSitArtUdcDetInventario setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public String getCommessa() { + return commessa; + } + + public MvwSitArtUdcDetInventario setCommessa(String commessa) { + this.commessa = commessa; + return this; + } + + public String getUntMis() { + return untMis; + } + + public MvwSitArtUdcDetInventario setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + public BigDecimal getQtaCol() { + return qtaCol; + } + + public MvwSitArtUdcDetInventario setQtaCol(BigDecimal qtaCol) { + this.qtaCol = qtaCol; + return this; + } + + public BigDecimal getNumCnf() { + return numCnf; + } + + public MvwSitArtUdcDetInventario setNumCnf(BigDecimal numCnf) { + this.numCnf = numCnf; + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public MvwSitArtUdcDetInventario setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + + public BigDecimal getPesoNettoKg() { + return pesoNettoKg; + } + + public MvwSitArtUdcDetInventario setPesoNettoKg(BigDecimal pesoNettoKg) { + this.pesoNettoKg = pesoNettoKg; + return this; + } + + public BigDecimal getPesoLordoKg() { + return pesoLordoKg; + } + + public MvwSitArtUdcDetInventario setPesoLordoKg(BigDecimal pesoLordoKg) { + this.pesoLordoKg = pesoLordoKg; + return this; + } + + public String getCodJfas() { + return codJfas; + } + + public MvwSitArtUdcDetInventario setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public MtbAart getMtbAart() { + return mtbAart; + } + + public MvwSitArtUdcDetInventario setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java index 7eb06e37..22658517 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java @@ -155,7 +155,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { mtbColrClone .setNumCollo(null) - .setDataCollo(null) + .setDataCollo((String) null) .setRiga(null) .setGestione(GestioneEnum.LAVORAZIONE) @@ -209,7 +209,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { MtbColr mtbColrClone = new MtbColr(); mtbColrClone .setNumCollo(null) - .setDataCollo(null) + .setDataCollo((String) null) .setRiga(null) .setGestione(GestioneEnum.LAVORAZIONE) .setDataColloRif(sourceMtbColt.getDataColloD()) @@ -239,7 +239,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { saveCollo(newMtbColt, onComplete, onFailed); } - public void createColloFromEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, GestioneEnum gestione, RunnableArgs onComplete, RunnableArgs onFailed) { createColloFromEtichettaAnonima(barcodeScanDTO.getStringValue(), gestione, onComplete, onFailed); } @@ -399,7 +398,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }, onFailed); } - private void cyclicGetMultipleByTestate(@NotNull Iterator sourceMtbColts, boolean onlyResiduo, ArrayList resultMtbColt, Runnable onComplete, RunnableArgs onAbort) { if (sourceMtbColts.hasNext()) { getByTestata(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> { @@ -449,7 +447,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } - public void changePosizione(MtbColt mtbColtToMove, MtbDepoPosizione posizione, Runnable onComplete, RunnableArgs onFailed) { String codMdep = posizione.getCodMdep(); @@ -545,7 +542,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }, onFailed); } - public static void retrieveBasketColli(RunnableArgs> onComplete, RunnableArgs onFailed) { ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); colliMagazzinoRESTConsumerService.getColliInBasket(SettingsManager.i().getUserSession().getDepo().getCodMdep()).enqueue(new Callback>>() { @@ -622,7 +618,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } - public void assegnaLottoSuColloScarico(MtbColt sourceMtbColt, Runnable onComplete, RunnableArgs onFailed) { MtbColt sourceMtbColtClone = (MtbColt) sourceMtbColt.clone(); @@ -648,7 +643,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } - public void versamentoAutomaticoUL(MtbColt sourceMtbColt, RunnableArgs onComplete, RunnableArgs onFailed) { MtbColt sourceMtbColtClone = (MtbColt) sourceMtbColt.clone(); @@ -682,7 +676,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())) .findFirst(); - if(mtbAartOpt.isPresent()){ + if (mtbAartOpt.isPresent()) { foundMtbAart = mtbAartOpt.get(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumer.java new file mode 100644 index 00000000..d784d61c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumer.java @@ -0,0 +1,69 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import com.annimon.stream.Optional; +import com.annimon.stream.Stream; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; +import it.integry.integrywmsnative.core.utility.UtilityQuery; + +@Singleton +public class GiacenzaRESTConsumer extends _BaseRESTConsumer { + + private final SystemRESTConsumer mSystemRESTConsumer; + private final ArticoloRESTConsumer mArticoloRESTConsumer; + + public GiacenzaRESTConsumer(SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + this.mSystemRESTConsumer = systemRESTConsumer; + this.mArticoloRESTConsumer = articoloRESTConsumer; + + } + + public void getGiacenzeInPosizione(MtbDepoPosizione posizione, RunnableArgs> onComplete, RunnableArgs onFailed) { + + HashMap params = new HashMap<>(); + params.put("posizione", posizione.getPosizione()); + String whereCond = UtilityQuery.concatFieldsInWhereCond(params); + String query = "SELECT * from mvw_sitart_udc_det_inventario" + + " WHERE " + whereCond; + + + Type typeOfObjectsList = new TypeToken>() { + }.getType(); + this.mSystemRESTConsumer.>processSql(query, typeOfObjectsList, inventarioList -> { + List codMarts = Stream.of(inventarioList) + .map(x -> x.getCodMart().trim()) + .toList(); + + mArticoloRESTConsumer.getByCodMarts(codMarts, mtbAarts -> { + for (var row : inventarioList) { + + MtbAart foundMtbAart = null; + Optional mtbAartOpt = Stream.of(mtbAarts) + .filter(x -> x.getCodMart().equalsIgnoreCase(row.getCodMart())) + .findFirst(); + + if (mtbAartOpt.isPresent()) { + foundMtbAart = mtbAartOpt.get(); + } + + row.setMtbAart(foundMtbAart); + } + + onComplete.run(inventarioList); + }, onFailed); + }, onFailed); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumerService.java new file mode 100644 index 00000000..17d3460c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GiacenzaRESTConsumerService.java @@ -0,0 +1,4 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +public interface GiacenzaRESTConsumerService { +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java index 65cd40d4..570bb413 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java @@ -4,6 +4,11 @@ import android.text.TextUtils; import android.util.Log; import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; import com.google.gson.reflect.TypeToken; import com.orhanobut.logger.Logger; @@ -12,20 +17,23 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.lang.reflect.Type; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; import javax.inject.Singleton; import it.integry.integrywmsnative.BuildConfig; import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.Azienda; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.rest.model.MailRequestDTO; import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.model.Azienda; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityString; @@ -46,7 +54,24 @@ public class SystemRESTConsumer extends _BaseRESTConsumer { @Override public void onResponse(Call> call, Response> response) { analyzeAnswer(response, "ProcessSql", o -> { - Gson gson = new Gson(); + Gson gson = new GsonBuilder() + .registerTypeAdapter(Date.class, new JsonDeserializer() { + @Override + public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + try { + return new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").parse(json.getAsString()); + } catch (Exception e) { + try { + return new SimpleDateFormat().parse(json.getAsString()); + } catch (ParseException parseException) { + throw new JsonParseException(parseException); + } + } + } + }) + .create(); + + String json = gson.toJson(o); InputStream ims = new ByteArrayInputStream(json.getBytes()); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/services/inventario/InventarioService.java b/app/src/main/java/it/integry/integrywmsnative/core/services/inventario/InventarioService.java new file mode 100644 index 00000000..587147a6 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/services/inventario/InventarioService.java @@ -0,0 +1,104 @@ +package it.integry.integrywmsnative.core.services.inventario; + +import androidx.databinding.ObservableArrayList; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.model.MvwSitArtUdcDetInventario; +import it.integry.integrywmsnative.core.rest.consumers.GiacenzaRESTConsumer; + +@Singleton +public class InventarioService { + + private final GiacenzaRESTConsumer mGiacenzaRESTConsumer; + + public InventarioService(GiacenzaRESTConsumer giacenzaRESTConsumer) { + this.mGiacenzaRESTConsumer = giacenzaRESTConsumer; + } + + public void getInventarioDaPosizione(MtbDepoPosizione posizione, RunnableArgs> onSuccess, RunnableArgs onError) { + mGiacenzaRESTConsumer.getGiacenzeInPosizione(posizione, onSuccess, onError); + } + + public void getInventarioDaPosizionePerArticolo(MtbDepoPosizione posizione, MtbAart articolo, RunnableArgs> onSuccess, RunnableArgs onError) { + getInventarioDaPosizione(posizione, (inventario) -> { + List inventarioArticolo = Stream.of(inventario).filter( + x -> articolo.getCodMart().equalsIgnoreCase(x.getCodMart()) + ).toList(); + onSuccess.run(inventarioArticolo); + }, onError); + } + + public MtbColt mapInventarioToMtbColt(MvwSitArtUdcDetInventario inventario) { + return mapInventarioToMtbColt(inventario, true); + } + + public MtbColt mapInventarioToMtbColt(MvwSitArtUdcDetInventario inventario, boolean includeRows) { + MtbColt mtbColt = new MtbColt(); + + mtbColt.setGestione(inventario.getGestione()); + mtbColt.setDataCollo(inventario.getDataCollo()); + mtbColt.setSerCollo(inventario.getSerCollo()); + mtbColt.setNumCollo(inventario.getNumCollo()); + mtbColt.setSegno(inventario.getSegno()); + mtbColt.setCodMdep(inventario.getCodMdep()); + mtbColt.setPosizione(inventario.getPosizione()); + mtbColt.setCodJcom(inventario.getCodJcom()); + mtbColt.setPesoNettoKg(inventario.getPesoNettoKg()); + mtbColt.setPesoKg(inventario.getPesoLordoKg()); + mtbColt.setCodJfas(inventario.getCodJfas()); + + if (includeRows) { + ObservableArrayList rows = new ObservableArrayList<>(); + rows.add(mapInventarioToMtbColr(inventario)); + mtbColt.setMtbColr(rows); + } + return mtbColt; + } + + public MtbColr mapInventarioToMtbColr(MvwSitArtUdcDetInventario inventario) { + MtbColr mtbColr = new MtbColr(); + + mtbColr.setGestione(inventario.getGestione()); + mtbColr.setDataCollo(inventario.getDataCollo()); + mtbColr.setSerCollo(inventario.getSerCollo()); + mtbColr.setNumCollo(inventario.getNumCollo()); + mtbColr.setCodMart(inventario.getCodMart()); + mtbColr.setDescrizione(inventario.getDescrizioneEstesa()); + mtbColr.setPartitaMag(inventario.getPartitaMag()); + mtbColr.setCodJcom(inventario.getCodJcom()); + mtbColr.setUntMis(inventario.getUntMis()); + mtbColr.setQtaCol(inventario.getQtaCol()); + mtbColr.setNumCnf(inventario.getNumCnf()); + mtbColr.setQtaCnf(inventario.getQtaCnf()); + mtbColr.setPesoNettoKg(inventario.getPesoNettoKg()); + mtbColr.setPesoLordoKg(inventario.getPesoLordoKg()); + mtbColr.setMtbAart(inventario.getMtbAart()); + + + return mtbColr; + } + + public List mapInventarioToMtbColtList(List inventario) { + return new ArrayList<>(Stream.of(inventario).groupBy(x -> x.getNumCollo() + "-" + x.getDataCollo() + "-" + x.getSerCollo() + x.getGestione()).map(inv -> { + List rows = inv.getValue(); + MtbColt mtbColt = mapInventarioToMtbColt(rows.get(0), false); + ObservableArrayList mtbColrs = new ObservableArrayList<>(); + mtbColrs.addAll(Stream.of(rows).map(this::mapInventarioToMtbColr).toList()); + mtbColt.setMtbColr(mtbColrs); + return mtbColt; + }).toList()); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java index ed158cf7..8ac7bfe0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java @@ -6,14 +6,11 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniViewModel; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO; @@ -94,11 +91,11 @@ public class DialogSelectDocInfoViewModel { } public List getAvailableCodDtips() { - return Stream.of(mDocInterniSetupDTO.getTipiDoc()).map(TipiDocDTO::getLabel).toList(); + return mDocInterniSetupDTO.getTipiDoc() != null ? Stream.of(mDocInterniSetupDTO.getTipiDoc()).map(TipiDocDTO::getLabel).toList() : new ArrayList<>(); } public List getAvailableCodMgrps() { - return Stream.of(mDocInterniSetupDTO.getGruppiArt()).map(GruppiArticoloDTO::getLabel).toList(); + return mDocInterniSetupDTO.getGruppiArt() != null ? Stream.of(mDocInterniSetupDTO.getGruppiArt()).map(GruppiArticoloDTO::getLabel).toList() : new ArrayList<>(); } public List getAvailableFornitori() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java index 7b964890..a017beec 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java @@ -13,6 +13,10 @@ public class ColloDTO { private String segno; private String idDisp; private String codDtip; + private String codAnag; + private String codVdes; + private Integer numDoc; + private Date dataDoc; private List artRows = new ArrayList<>(); private RifOrd rifOrd; @@ -88,6 +92,42 @@ public class ColloDTO { return rifOrd; } + public String getCodAnag() { + return codAnag; + } + + public ColloDTO setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public Integer getNumDoc() { + return numDoc; + } + + public ColloDTO setNumDoc(Integer numDoc) { + this.numDoc = numDoc; + return this; + } + + public Date getDataDoc() { + return dataDoc; + } + + public ColloDTO setDataDoc(Date dataDoc) { + this.dataDoc = dataDoc; + return this; + } + + public String getCodVdes() { + return codVdes; + } + + public ColloDTO setCodVdes(String codVdes) { + this.codVdes = codVdes; + return this; + } + public void setRifOrd(RifOrd rifOrd) { this.rifOrd = rifOrd; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java index 603ad11f..e5ceb7f8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java @@ -49,8 +49,8 @@ import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQua public class DocInterniEditFormActivity extends BaseActivity implements DocInterniEditFormViewModel.Listener, BottomSheetMtbColrEditView.Listener { - private static String DATA_KEY_DOCUMENT = "document"; - private static String DATA_KEY_PRODUCTS_LIST = "productsList"; + private static final String DATA_KEY_DOCUMENT = "document"; + private static final String DATA_KEY_PRODUCTS_LIST = "productsList"; @Inject MtbColrRepository documentRowsRepository; @@ -101,22 +101,22 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter SqlMtbColt document = this.viewModel.getDocument(); this.codDtip.set(document.getCodDtipProvv()); this.note.set(document.getAnnotazioni()); - if(document.getCodMgrp() != null){ + if (document.getCodMgrp() != null) { this.codMgrp.set(document.getCodMgrp()); - }else{ + } else { binding.mtbGrupContainer.setVisibility(View.GONE); } - if (document.getCodAnag() != null){ - this.codAnag.set(document.getCodAnag() + (document.getCodVdes()!=null?" - "+document.getCodVdes():"")); - }else{ + if (document.getCodAnag() != null) { + this.codAnag.set(document.getCodAnag() + (document.getCodVdes() != null ? " - " + document.getCodVdes() : "")); + } else { this.binding.supplierLayout.setVisibility(View.GONE); } this.documentHeader.set(String.format(this.getString(R.string.doc_interni_doc_header), document.getId(), document.getCodDtipProvv())); - if (document.getNumDoc() != null && document.getDataDoc() != null){ + if (document.getNumDoc() != null && document.getDataDoc() != null) { this.documentRifHeader.set(String.format(this.getString(R.string.doc_testata), document.getNumDoc().toString(), document.getDataDoc())); - }else{ + } else { this.binding.docRifLayout.setVisibility(View.GONE); } } @@ -138,6 +138,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter this.viewModel.setProductsList(productList); } + private void initRecyclerView() { this.viewModel.docRows.observe(this, this::refreshList); DocumentRowsListAdapter listAdapter = new DocumentRowsListAdapter(this, documentRowsObservableList); @@ -156,14 +157,13 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter } - public void closeEdit() { this.onBackPressed(); } public void manualSearch() { BarcodeManager.disable(); - DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre/codice articolo da cercare", null, this.viewModel::onSearch, BarcodeManager::enable).show(); + DialogSimpleInputHelper.makeInputDialog(this, "Ricerca articolo", null, "Cod articolo / Barcode", this.viewModel::onSearch, BarcodeManager::enable).show(); } @@ -184,7 +184,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter } mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() - .setOnScanSuccessfull(this.viewModel::onScanSuccessful) + .setOnScanSuccessfull(this.viewModel::processBarcode) .setOnScanFailed(this::onError)); this.viewModel.fetchDocumentRows(); } @@ -217,7 +217,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter mtbAart.setQtaCnf(BigDecimal.valueOf(row.getQtaCnf())); mtbAart.setDescrizione(row.getDescrizione()); mtbAart.setDescrizioneEstesa(row.getDescrizione()); - mtbAart.setFlagTracciabilita(flagTracciabilita? "S" : "N"); + mtbAart.setFlagTracciabilita(flagTracciabilita ? "S" : "N"); mtbAart.setUntMis(row.getUntMis()); DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() @@ -226,6 +226,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter .setInitialQtaCnf(BigDecimal.valueOf(row.getQtaCnf())) .setInitialQtaTot(BigDecimal.valueOf(row.getQtaCol())) .setNote(row.getNote()) + .setSaveOnImeDone(true) .setPartitaMag(row.getPartitaMag()) .setDataScad(row.getDataScad()) .setCanOverflowOrderQuantity(false) @@ -236,7 +237,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter .setSuggestPartitaMag(data -> { Date dataScad = data.getDataScad(); String partitaMag = null; - if (dataScad != null){ + if (dataScad != null) { partitaMag = new SimpleDateFormat("yyyymmdd").format(dataScad); } return partitaMag; @@ -271,7 +272,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter @Override public void onMtbColrEdit(MtbColr mtbColr) { GrigliaAcquistiChildDTO articolo = viewModel.getArticoloByCodMart(mtbColr.getCodMart()); - this.viewModel.editRow(entityToSql(mtbColr),articolo.getFlagTracciabilita().equalsIgnoreCase("S")); + this.viewModel.editRow(entityToSql(mtbColr), articolo.getFlagTracciabilita().equalsIgnoreCase("S")); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java index 3cc8ae14..b4580b87 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java @@ -116,6 +116,7 @@ public void deleteDocument() { return; } SqlMtbColr row = this.getRowForArticolo(articolo); + this.sendOnLoadingEnded(); this.editRow(row,articolo.getFlagTracciabilita().equalsIgnoreCase("S")); } @@ -147,7 +148,7 @@ public void deleteDocument() { } private GrigliaAcquistiChildDTO searchArticolo(String filter) { - return Stream.of(this.productsList).filter(dto -> dto.getCodMart().equalsIgnoreCase(filter) || dto.getBarcode().equalsIgnoreCase(filter)).findFirstOrElse(null); + return Stream.of(this.productsList).filter(dto -> filter.equalsIgnoreCase(dto.getCodMart()) || filter.equalsIgnoreCase(dto.getBarcode())).findFirstOrElse(null); } private SaveDTO getSaveDto() { @@ -168,6 +169,10 @@ public void deleteDocument() { collo.setCreatedDate(UtilityDate.formatDate(document.getDataCollo(), UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); collo.setAnnotazioni(document.getAnnotazioni()); collo.setSegno(saveDTO.getSegno()); + collo.setDataDoc(document.getDataDoc()); + collo.setNumDoc(document.getNumDoc()); + collo.setCodAnag(document.getCodAnag()); + collo.setCodVdes(document.getCodVdes()); for (SqlMtbColr row : this.getDocumentRows()) { ArtDTO artDto = new ArtDTO(); @@ -209,7 +214,7 @@ public void deleteDocument() { this.productsList = productsList; } - public void onScanSuccessful(BarcodeScanDTO dto) { + public void processBarcode(BarcodeScanDTO dto) { String code = dto.getStringValue(); this.onSearch(code); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java index b56e3eb1..5e57fc58 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoModule.java @@ -7,6 +7,7 @@ import dagger.Provides; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; @Module(subcomponents = {PickingLiberoComponent.class}) public class PickingLiberoModule { @@ -15,7 +16,9 @@ public class PickingLiberoModule { @Singleton PickingLiberoViewModel providesPickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, - BarcodeRESTConsumer barcodeRESTConsumer) { - return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer); + BarcodeRESTConsumer barcodeRESTConsumer, + PosizioniRESTConsumer posizioniRESTConsumer + ) { + return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer, posizioniRESTConsumer); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java index 7513606e..2f6c94ec 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoViewModel.java @@ -15,6 +15,7 @@ import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; +import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener; @@ -23,18 +24,21 @@ import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.VtbDest; import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.model.Ean128Model; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; @@ -48,6 +52,7 @@ public class PickingLiberoViewModel { private final ArticoloRESTConsumer mArticoloRESTConsumer; private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer; private final BarcodeRESTConsumer mBarcodeRESTConsumer; + private final PosizioniRESTConsumer mPosizioniRESTConsumer; private boolean mFlagAskCliente; @@ -60,10 +65,13 @@ public class PickingLiberoViewModel { @Inject public PickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, - BarcodeRESTConsumer barcodeRESTConsumer) { + BarcodeRESTConsumer barcodeRESTConsumer, + PosizioniRESTConsumer posizioniRESTConsumer + ) { this.mArticoloRESTConsumer = articoloRESTConsumer; this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer; + this.mPosizioniRESTConsumer = posizioniRESTConsumer; } @@ -88,6 +96,9 @@ public class PickingLiberoViewModel { //Cerco gli articoli presenti nell'ul dell'etichetta anonima this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete); + } else if (UtilityBarcode.isEtichettaPosizione(barcodeScanDTO)) { + //Cerco tramite etichetta un collo in posizione mono ul + this.executeEtichettaPosizione(barcodeScanDTO, onComplete); } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { //Cerco tramite etichetta ean 128 (che può indicarmi una UL) this.executeEtichettaEan128(barcodeScanDTO, onComplete); @@ -97,11 +108,41 @@ public class PickingLiberoViewModel { this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); } else { + //Cerco tramite ean13 un collo in posizione mono ul definita in anagrafica articolo, altrimenti se abilitato procedo con picking manuale this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete); } } + private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + + MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) + .single(); + this.executePosizione(foundPosizione, null, onComplete); + + } + + private void executePosizione(MtbDepoPosizione posizione, MtbAart articolo, Runnable onComplete) { + this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> { + + if (mtbColtList == null || mtbColtList.size() == 0) { + if (articolo != null) { + this.dispatchArt(articolo, null); + } else { + this.sendError(new NoLUFoundException()); + } + } else if (mtbColtList.size() == 1) { + this.mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { + pickMerceULtoUL(mtbColt, onComplete); + }, this::sendError); + } else { + this.sendError(new TooManyLUFoundInMonoLUPositionException()); + } + + }, this::sendError); + } + private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { try { Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); @@ -164,10 +205,15 @@ public class PickingLiberoViewModel { } mArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { - if (mtbAartList != null && mtbAartList.size() > 0) { - this.dispatchArt(mtbAartList.get(0), ean128Model); - onComplete.run(); + MtbAart articolo = mtbAartList.get(0); + MtbDepoPosizione posizione = UtilityPosizione.getFromCache(articolo.getPosizione()); + if (posizione != null && posizione.isFlagMonoCollo()) { + this.executePosizione(posizione, articolo, onComplete); + } else { + this.dispatchArt(articolo, ean128Model); + onComplete.run(); + } } else { this.sendError(new NoResultFromBarcodeException()); @@ -369,7 +415,7 @@ public class PickingLiberoViewModel { .setNumCollo(null) .setDataColloRif(cloneMtbColr.getDataColloS()) - .setDataCollo(null) + .setDataCollo((String) null) .setPesoLordoKg(null) .setPesoNettoKg(null); @@ -480,46 +526,46 @@ public class PickingLiberoViewModel { new Thread(this::sendOnLoadingStarted).start(); - final MtbColr mtbColr = new MtbColr() - .setCodMart(pickingObjectDTO.getMtbAart().getCodMart()) - .setPartitaMag(partitaMag) - .setDataScadPartita(dataScad) - .setQtaCol(qtaTot) - .setQtaCnf(qtaCnf) - .setNumCnf(numCnf) - .setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()) - .setDatetimeRow(UtilityDate.getDateInstance()); + final MtbColr mtbColr = new MtbColr() + .setCodMart(pickingObjectDTO.getMtbAart().getCodMart()) + .setPartitaMag(partitaMag) + .setDataScadPartita(dataScad) + .setQtaCol(qtaTot) + .setQtaCnf(qtaCnf) + .setNumCnf(numCnf) + .setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()) + .setDatetimeRow(UtilityDate.getDateInstance()); - mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); - MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); - cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); + MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE); - cloneMtbColt.setMtbColr(new ObservableArrayList<>()); - cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); + cloneMtbColt.setMtbColr(new ObservableArrayList<>()); + cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone()); - if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { - this.sendOnLoadingEnded(); - return; - } + if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) { + this.sendOnLoadingEnded(); + return; + } - mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { - mtbColr - .setDataCollo(value.getDataColloS()) - .setNumCollo(value.getNumCollo()) - .setGestione(value.getGestione()) - .setSerCollo(value.getSerCollo()) - .setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga()) - .setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) - .setMtbAart(pickingObjectDTO.getMtbAart()); + mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> { + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(value.getMtbColr().size() - 1).getRiga()) + .setUntMis(pickingObjectDTO.getMtbAart().getUntMis()) + .setMtbAart(pickingObjectDTO.getMtbAart()); - mCurrentMtbColt.getMtbColr().add(mtbColr); + mCurrentMtbColt.getMtbColr().add(mtbColr); - this.sendOnRowSaved(); - this.sendOnLoadingEnded(); + this.sendOnRowSaved(); + this.sendOnLoadingEnded(); - if (shouldCloseLU) closeLU(null); - }, this::sendError); + if (shouldCloseLU) closeLU(null); + }, this::sendError); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java index 916e6125..db11171d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java @@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.rettifica_giacenze; import android.app.Dialog; import android.content.Context; +import android.content.pm.ActivityInfo; import android.content.res.ColorStateList; import android.content.res.Resources; import android.os.Bundle; @@ -95,15 +96,21 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr @Override public void onCreate(Bundle savedInstanceState) { + requireActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); super.onCreate(savedInstanceState); } + @Override + public void onDestroy() { + requireActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); + super.onDestroy(); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_rettifica_giacenze, container, false); - MainApplication.appComponent .rettificaGiacenzeComponent() .create() @@ -126,7 +133,6 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr return mBinding.getRoot(); } - private void initVars() { thereIsAnOpenedUL.addOnPropertyChangedCallback(() -> { thereIsntAnOpenedUL.set(!thereIsAnOpenedUL.get()); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index 83b3f6de..ebb2c0a3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -776,34 +776,34 @@ public class SpedizioneViewModel { List availableBatchLots = Stream.of(scannedMtbColrs) .filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && ( - x.getPartitaMag() == null || + x.getPartitaMag() == null || UtilityString.isNullOrEmpty(x.getMtbPartitaMag().getDataScadS()) || UtilityDate.getDateInstance().before(x.getMtbPartitaMag().getDataScadD()) - )) + )) .distinctBy(MtbColr::getPartitaMag) .map(x -> x.getPartitaMag() == null ? new MtbPartitaMag().setCodMart(x.getMtbAart().getCodMart()) : x.getMtbPartitaMag()) .toList(); //Controllo se una delle partite combacia con quella che voglio evadere - if(refMtbColr != null && refMtbColr.getMtbPartitaMag() != null) { + if (refMtbColr != null && refMtbColr.getMtbPartitaMag() != null) { MtbPartitaMag refMtbPartitaMag = refMtbColr.getMtbPartitaMag(); Optional matchPartitaMag = Stream.of(availableBatchLots) .filter(availableBatchLot -> refMtbPartitaMag.getPartitaMag().equalsIgnoreCase(availableBatchLot.getPartitaMag())) .findFirst(); - if(matchPartitaMag.isPresent()) { + if (matchPartitaMag.isPresent()) { availableBatchLots.clear(); availableBatchLots.add(refMtbPartitaMag); } } - if(availableBatchLots.size() > 1) { + if (availableBatchLots.size() > 1) { this.sendOnLoadingStarted(); List tmp = new ArrayList<>(); - if(Stream.of(availableBatchLots).anyMatch(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()))) { + if (Stream.of(availableBatchLots).anyMatch(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()))) { tmp.addAll( Stream.of(availableBatchLots) .filter(x -> !UtilityString.isNullOrEmpty(x.getDataScadS()) && UtilityDate.getDateInstance().before(x.getDataScadD())) @@ -811,7 +811,7 @@ public class SpedizioneViewModel { .toList()); } - if(Stream.of(availableBatchLots).anyMatch(x -> UtilityString.isNullOrEmpty(x.getDataScadS()))) { + if (Stream.of(availableBatchLots).anyMatch(x -> UtilityString.isNullOrEmpty(x.getDataScadS()))) { tmp.addAll( Stream.of(availableBatchLots) .filter(x -> UtilityString.isNullOrEmpty(x.getDataScadS())) @@ -822,7 +822,7 @@ public class SpedizioneViewModel { this.sendBatchLotSelectionRequest(tmp, selected -> { this.sendOnLoadingEnded(); - if(selected != null) { + if (selected != null) { MtbColr scannedMtbColr = Stream.of(pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr()) .filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && ((x.getPartitaMag() != null && selected.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(selected.getPartitaMag())) || @@ -897,7 +897,7 @@ public class SpedizioneViewModel { // } - if(refMtbColr != null) { + if (refMtbColr != null) { if (pickingObjectDTO.getMtbAart().isFlagQtaCnfFissaBoolean()) { if (UtilityBigDecimal.equalsOrLowerThan(refMtbColr.getQtaCol(), qtaDaEvadere)) { numCnfDaPrelevare = refMtbColr.getNumCnf(); @@ -1456,7 +1456,7 @@ public class SpedizioneViewModel { refMtbColt.getMtbColr().size() > 0 ? refMtbColt.getMtbColr().get(0) : null; - if(originalRefMtbColr != null) { + if (originalRefMtbColr != null) { refMtbColr.setId(originalRefMtbColr.getId()); } @@ -1695,7 +1695,7 @@ public class SpedizioneViewModel { .setRiga(null) .setNumCollo(null) .setGestione((String) null) - .setDataCollo(null) + .setDataCollo((String) null) .setSerCollo(null) .setCausale(MtbColr.Causale.VERSAMENTO); @@ -1721,7 +1721,7 @@ public class SpedizioneViewModel { if (!shouldPrint) { onComplete.run(); } else { - cyclicPrint(PrinterRESTConsumer.Type.PRIMARIA, mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete)); + cyclicPrint(PrinterRESTConsumer.Type.PRIMARIA, mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete)); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java index 351619a1..1ad3cfae 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java @@ -2,7 +2,6 @@ package it.integry.integrywmsnative.view.dialogs.base; import android.app.Dialog; import android.content.Context; -import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; @@ -12,6 +11,7 @@ import androidx.databinding.DataBindingUtil; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.DialogInputGeneralBinding; /** @@ -21,7 +21,7 @@ import it.integry.integrywmsnative.databinding.DialogInputGeneralBinding; public class DialogSimpleInputHelper { - private static Dialog makeBase(Context mContext, String titleText, String valueText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ + private static Dialog makeBase(Context mContext, String titleText, String defaultTextValue, String hintText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ Dialog dialog = new Dialog(mContext); DialogSimpleInputViewModel viewModel = new DialogSimpleInputViewModel(dialog); @@ -39,10 +39,14 @@ public class DialogSimpleInputHelper { //Title VIEW mBinding.titleText.setText(titleText); - if (valueText != null){ - mBinding.generalInput.setText(valueText); + + if (!UtilityString.isNullOrEmpty(hintText)){ + mBinding.generalInput.setHint(hintText); + } + + if (!UtilityString.isNullOrEmpty(defaultTextValue)){ + mBinding.generalInput.setText(defaultTextValue); } - ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE); //Content View dialog.setCancelable(true); @@ -60,17 +64,19 @@ public class DialogSimpleInputHelper { return makeBase(mContext, title, null, + null, onPositiveClick, onNegativeClick); } - public static Dialog makeInputDialog(Context mContext, String title,String value, RunnableArgs onPositiveClick, Runnable onNegativeClick){ + public static Dialog makeInputDialog(Context mContext, String title, String defaultTextValue, String hintText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ return makeBase(mContext, title, - value, + defaultTextValue, + hintText, onPositiveClick, onNegativeClick); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java index 72852662..92b225aa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java @@ -31,6 +31,7 @@ public class DialogInputQuantityV2DTO { private boolean isDataScadMandatory = false; private boolean isNotesAllowed = false; private boolean canLUBeClosed; + private boolean saveOnImeDone = false; private String partitaMag; private String note; @@ -236,4 +237,13 @@ public class DialogInputQuantityV2DTO { this.suggestPartitaMag = suggestPartitaMag; return this; } + + public boolean isSaveOnImeDone() { + return saveOnImeDone; + } + + public DialogInputQuantityV2DTO setSaveOnImeDone(boolean saveOnImeDone) { + this.saveOnImeDone = saveOnImeDone; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index 58b8ddcd..6c9073f1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -12,6 +12,9 @@ import android.text.SpannableString; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.EditorInfo; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -42,6 +45,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgss; import it.integry.integrywmsnative.core.model.MtbUntMis; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityFocus; import it.integry.integrywmsnative.core.utility.UtilityObservable; import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; @@ -94,7 +98,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog); - this.initBarcode(); } @@ -105,7 +108,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_v2, container, false); mBindings.setLifecycleOwner(this); - mBindings.toolbar.setTitle("Inserimento articolo"); MainApplication.appComponent @@ -141,7 +143,17 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia mBindings.inputQtaTotText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); } - getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + if (mDialogInputQuantityV2DTO.isSaveOnImeDone()){ + + mBindings.inputNumCnfText.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + save(); + return true; + } + return false; + }); + } return mBindings.getRoot(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java index 66c40b54..e1219bcc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java @@ -8,6 +8,7 @@ import it.integry.integrywmsnative.core.exception.NoLUFoundException; import it.integry.integrywmsnative.core.exception.TooManyLUFoundInMonoLUPositionException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; @@ -17,6 +18,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsume import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityPosizione; import it.integry.integrywmsnative.core.utility.UtilityString; public class DialogScanOrCreateLUViewModel { @@ -62,6 +64,8 @@ public class DialogScanOrCreateLUViewModel { this.executeEtichettaAnonima(barcodeScanDTO, onComplete); } else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) { this.executeEAN128(barcodeScanDTO, onComplete); + } else if (UtilityBarcode.isEan13(barcodeScanDTO)) { + this.executeEAN13(barcodeScanDTO, onComplete); } else { onComplete.run(); } @@ -73,8 +77,12 @@ public class DialogScanOrCreateLUViewModel { MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) .single(); + this.executePosizione(foundPosizione, onComplete); - this.mPosizioniRESTConsumer.getBancaliInPosizione(foundPosizione, mtbColtList -> { + } + + private void executePosizione(MtbDepoPosizione posizione, Runnable onComplete) { + this.mPosizioniRESTConsumer.getBancaliInPosizione(posizione, mtbColtList -> { if (mtbColtList == null || mtbColtList.size() == 0) { this.sendError(new NoLUFoundException()); @@ -88,7 +96,6 @@ public class DialogScanOrCreateLUViewModel { } }, this::sendError); - } @@ -96,7 +103,7 @@ public class DialogScanOrCreateLUViewModel { this.mColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), mShouldCheckResiduo, false, mtbColt -> { if (mtbColt == null) { - if(mEnableCreation) { + if (mEnableCreation) { this.mColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(barcodeScanDTO, GestioneEnum.LAVORAZIONE, createdMtbColt -> { onComplete.run(); this.sendOnLUOpened(createdMtbColt, true); @@ -158,6 +165,22 @@ public class DialogScanOrCreateLUViewModel { }, this::sendError); } + private void executeEAN13(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + this.mArticoloRESTConsumer.getByBarcodeProd(barcodeScanDTO.getStringValue(), articoli -> { + if (articoli.size() == 1) { + MtbAart articolo = articoli.get(0); + MtbDepoPosizione posizione = UtilityPosizione.getFromCache(articolo.getPosizione()); + if (posizione != null && posizione.isFlagMonoCollo()) { + this.executePosizione(posizione, onComplete); + } else { + this.sendError(new NoLUFoundException()); + } + } else { + this.sendError(new NoLUFoundException()); + } + }, this::sendError); + } + private void sendOnLUVenditaConfirmRequired(RunnableArgs onConfirm) { if (this.mListener != null) mListener.onLUVenditaConfirmRequired(onConfirm); } diff --git a/app/src/main/res/layout/dialog_input_general.xml b/app/src/main/res/layout/dialog_input_general.xml index 14456ed0..d155b2a7 100644 --- a/app/src/main/res/layout/dialog_input_general.xml +++ b/app/src/main/res/layout/dialog_input_general.xml @@ -1,142 +1,122 @@ - + + - - + android:layout_gravity="center_horizontal" + android:orientation="vertical" + app:cardBackgroundColor="@color/light_blue_300" + app:cardCornerRadius="24dp" + app:cardElevation="0dp"> - - - - - + android:layout_margin="4dp" + android:background="@drawable/dialog_card_child_bg" + android:padding="24dp"> - - - - - - - + android:gravity="center_horizontal" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:text="Insert here" /> - + + + android:layout_height="wrap_content" + tools:hint="input here" /> - - - - - - - - - + - + - + - - - - - - + - + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_input_quantity_v2.xml b/app/src/main/res/layout/dialog_input_quantity_v2.xml index 39a84a9c..3846c6ce 100644 --- a/app/src/main/res/layout/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout/dialog_input_quantity_v2.xml @@ -2,7 +2,8 @@ + xmlns:tools="http://schemas.android.com/tools" + > @@ -488,6 +489,8 @@ android:layout_height="wrap_content" android:hint="@string/num_pcks" android:imeOptions="actionDone" + android:selectAllOnFocus="true" + android:nextFocusForward="@+id/input_qta_cnf_text" android:inputType="number" app:binding="@{view.currentNumCnf}" /> @@ -511,6 +514,8 @@ android:layout_height="wrap_content" android:hint="@string/qty_x_pck" android:imeOptions="actionDone" + android:selectAllOnFocus="true" + android:nextFocusForward="@+id/input_qta_tot_text" android:inputType="numberDecimal" app:binding="@{view.currentQtaCnf}" /> @@ -535,6 +540,7 @@ android:digits="0123456789" android:hint="@string/tot_qty" android:inputType="number" + android:selectAllOnFocus="true" app:binding="@{view.currentQtaTot}" /> diff --git a/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml b/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml index fc03339d..b46625db 100644 --- a/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml +++ b/app/src/main/res/layout/dialog_versamento_automatico_ul_done.xml @@ -63,81 +63,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/title_text" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -