From e49d35fdbcf2099e59316857fc457f612bbd2466 Mon Sep 17 00:00:00 2001 From: GiuseppeS Date: Tue, 23 Apr 2024 16:32:40 +0200 Subject: [PATCH] Implementata gestione degli imballi in spedizione --- .idea/fileTemplates/Android Dialog.java | 9 +- .../MainApplicationComponent.java | 7 +- .../MainApplicationModule.java | 7 + .../core/expansion/BaseDialogFragment.java | 1 - .../integrywmsnative/core/model/VtbVetr.java | 95 ++++++ .../integrywmsnative/core/model/VtbVett.java | 273 ++++++++++++++++ .../rest/consumers/ImballiRESTConsumer.java | 32 +- .../consumers/ImballiRESTConsumerService.java | 4 + .../rest/consumers/VettoriRESTConsumer.java | 44 +++ .../consumers/VettoriRESTConsumerService.java | 17 + .../RegistraCaricoImballiRequestDTO.java | 10 + .../RegistraScaricoImballiRequestDTO.java | 37 +++ .../core/settings/DBSettingsModel.java | 21 ++ .../core/settings/SettingsManager.java | 17 + .../AccettazioneOrdiniPickingActivity.java | 11 +- .../AccettazioneOrdiniPickingViewModel.java | 13 +- .../ui/AutoCompleteFornitoreAdapter.java | 94 +++--- .../gest/spedizione/SpedizioneActivity.java | 100 ++++-- .../gest/spedizione/SpedizioneModule.java | 7 +- .../gest/spedizione/SpedizioneViewModel.java | 302 ++++++++++++------ ...leAutoCompleteTwoLinesDropdownAdapter.java | 121 +++++++ ...AutoCompleteTwoLinesDropdownListModel.java | 36 +++ .../DialogAskVettoreComponent.java | 14 + .../ask_vettore/DialogAskVettoreModule.java | 15 + .../ask_vettore/DialogAskVettoreView.java | 147 +++++++++ .../DialogAskVettoreViewModel.java | 58 ++++ .../ic_baseline_assignment_turned_in_24.xml | 2 +- .../main/res/layout/activity_spedizione.xml | 80 +---- .../layout/array_adapter_two_lines_item.xml | 32 ++ .../main/res/layout/dialog_ask_vettore.xml | 101 ++++++ ..._tracciamento_imballi__list_item_model.xml | 6 +- .../spedizione_ordine_inevaso_fab_menu.xml | 20 ++ app/src/main/res/values-it/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 34 files changed, 1484 insertions(+), 253 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/model/VtbVetr.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/model/VtbVett.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/VettoriRESTConsumer.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/VettoriRESTConsumerService.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/rest/model/imballi/RegistraScaricoImballiRequestDTO.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteTwoLinesDropdownAdapter.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteTwoLinesDropdownListModel.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreComponent.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreModule.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreView.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreViewModel.java create mode 100644 app/src/main/res/layout/array_adapter_two_lines_item.xml create mode 100644 app/src/main/res/layout/dialog_ask_vettore.xml create mode 100644 app/src/main/res/menu/spedizione_ordine_inevaso_fab_menu.xml diff --git a/.idea/fileTemplates/Android Dialog.java b/.idea/fileTemplates/Android Dialog.java index 910c9533..452a0f27 100644 --- a/.idea/fileTemplates/Android Dialog.java +++ b/.idea/fileTemplates/Android Dialog.java @@ -84,6 +84,11 @@ Create the following layout resource file [dialog_${dashName}.xml] private Dialog${NAME}View() { super(); + + MainApplication.appComponent + .dialog${NAME}Component() + .create() + .inject(this); } @@ -105,10 +110,6 @@ Create the following layout resource file [dialog_${dashName}.xml] [b] into interface body Dialog${NAME}Component.Factory dialog${NAME}Component(); */ - MainApplication.appComponent - .dialog${NAME}Component() - .create() - .inject(this); setCancelable(false); diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index d822c79c..40a6eb59 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -114,6 +114,8 @@ import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaPro import it.integry.integrywmsnative.view.dialogs.ask_linea_prod.DialogAskLineaProdModule; import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesComponent; import it.integry.integrywmsnative.view.dialogs.ask_unknown_barcode_notes.DialogAskUnknownBarcodeNotesModule; +import it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreComponent; +import it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreModule; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageComponent; import it.integry.integrywmsnative.view.dialogs.bind_product_barcode_with_package.DialogBindProductBarcodeWithPackageModule; import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromMtbAartListComponent; @@ -212,7 +214,8 @@ import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracc ProdRiposizionamentoDaProdModule.class, DialogInfoGiacenzaModule.class, ArticoliInGiacenzaModule.class, - DialogTracciamentoImballiModule.class + DialogTracciamentoImballiModule.class, + DialogAskVettoreModule.class }) public interface MainApplicationComponent { @@ -356,6 +359,8 @@ public interface MainApplicationComponent { DialogTracciamentoImballiComponent.Factory dialogTracciamentoImballiComponent(); + DialogAskVettoreComponent.Factory dialogAskVettoreComponent(); + void inject(MainApplication mainApplication); void inject(AppContext mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java index c7057c18..a8d6cc90 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationModule.java @@ -43,6 +43,7 @@ import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ProductionLinesRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.VettoriRESTConsumer; import it.integry.integrywmsnative.core.services.inventario.InventarioService; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.sound.SoundAlertService; @@ -258,6 +259,12 @@ public class MainApplicationModule { return new ImballiRESTConsumer(executorService); } + @Provides + @Singleton + VettoriRESTConsumer provideVettoriRESTConsumer(ExecutorService executorService) { + return new VettoriRESTConsumer(executorService); + } + @Provides @Singleton InventarioService provideInventarioService(GiacenzaRESTConsumer giacenzaRESTConsumer) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java index d68e94e6..34c53671 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseDialogFragment.java @@ -113,7 +113,6 @@ public abstract class BaseDialogFragment extends DialogFragment implements Dialo @Override public void onShow(DialogInterface dialogInterface) { getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); - getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); this.initialize(); this.onInit(dialogInterface); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/VtbVetr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/VtbVetr.java new file mode 100644 index 00000000..026ee993 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/VtbVetr.java @@ -0,0 +1,95 @@ +package it.integry.integrywmsnative.core.model; + +import android.os.Parcelable; + +import java.math.BigDecimal; + +public class VtbVetr extends EntityBase { + + public VtbVetr() { + type = "vtb_vetr"; + } + + private String codVvet; + private String codSpes; + private String idRiga; + private BigDecimal daQta; + private BigDecimal aQta; + private BigDecimal impUnt; + private BigDecimal impFisso; + private String codDivi; + + public String getCodVvet() { + return codVvet; + } + + public VtbVetr setCodVvet(String codVvet) { + this.codVvet = codVvet; + return this; + } + + public String getCodSpes() { + return codSpes; + } + + public VtbVetr setCodSpes(String codSpes) { + this.codSpes = codSpes; + return this; + } + + public String getIdRiga() { + return idRiga; + } + + public VtbVetr setIdRiga(String idRiga) { + this.idRiga = idRiga; + return this; + } + + public BigDecimal getDaQta() { + return daQta; + } + + public VtbVetr setDaQta(BigDecimal daQta) { + this.daQta = daQta; + return this; + } + + public BigDecimal getaQta() { + return aQta; + } + + public VtbVetr setaQta(BigDecimal aQta) { + this.aQta = aQta; + return this; + } + + public BigDecimal getImpUnt() { + return impUnt; + } + + public VtbVetr setImpUnt(BigDecimal impUnt) { + this.impUnt = impUnt; + return this; + } + + public BigDecimal getImpFisso() { + return impFisso; + } + + public VtbVetr setImpFisso(BigDecimal impFisso) { + this.impFisso = impFisso; + return this; + } + + public String getCodDivi() { + return codDivi; + } + + public VtbVetr setCodDivi(String codDivi) { + this.codDivi = codDivi; + return this; + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/VtbVett.java b/app/src/main/java/it/integry/integrywmsnative/core/model/VtbVett.java new file mode 100644 index 00000000..2f30f8ef --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/VtbVett.java @@ -0,0 +1,273 @@ +package it.integry.integrywmsnative.core.model; + +import java.math.BigDecimal; +import java.util.List; + +public class VtbVett extends EntityBase { + + public VtbVett() { + type = "vtb_vett"; + } + + private String codVvet; + private String codLettVett; + private String codAnag; + private String ragSoc; + private String indirizzo; + private String cap; + private String citta; + private String prov; + private String nazione; + private String telefono; + private String fax; + private String partIva; + private String note; + private String eMail; + private String modStamp; + private BigDecimal coefVol; + private String flagAttivo; + private String numAutoriz; + private List vtbVetr; + + + public String getCodVvet() { + return codVvet; + } + + public VtbVett setCodVvet(String codVvet) { + this.codVvet = codVvet; + return this; + } + + public String getCodLettVett() { + return codLettVett; + } + + public VtbVett setCodLettVett(String codLettVett) { + this.codLettVett = codLettVett; + return this; + } + + public String getCodAnag() { + return codAnag; + } + + public VtbVett setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getRagSoc() { + return ragSoc; + } + + public VtbVett setRagSoc(String ragSoc) { + this.ragSoc = ragSoc; + return this; + } + + public String getIndirizzo() { + return indirizzo; + } + + public VtbVett setIndirizzo(String indirizzo) { + this.indirizzo = indirizzo; + return this; + } + + public String getCap() { + return cap; + } + + public VtbVett setCap(String cap) { + this.cap = cap; + return this; + } + + public String getCitta() { + return citta; + } + + public VtbVett setCitta(String citta) { + this.citta = citta; + return this; + } + + public String getProv() { + return prov; + } + + public VtbVett setProv(String prov) { + this.prov = prov; + return this; + } + + public String getNazione() { + return nazione; + } + + public VtbVett setNazione(String nazione) { + this.nazione = nazione; + return this; + } + + public String getTelefono() { + return telefono; + } + + public VtbVett setTelefono(String telefono) { + this.telefono = telefono; + return this; + } + + public String getFax() { + return fax; + } + + public VtbVett setFax(String fax) { + this.fax = fax; + return this; + } + + public String getPartIva() { + return partIva; + } + + public VtbVett setPartIva(String partIva) { + this.partIva = partIva; + return this; + } + + public String getNote() { + return note; + } + + public VtbVett setNote(String note) { + this.note = note; + return this; + } + + public String geteMail() { + return eMail; + } + + public VtbVett seteMail(String eMail) { + this.eMail = eMail; + return this; + } + + public String getModStamp() { + return modStamp; + } + + public VtbVett setModStamp(String modStamp) { + this.modStamp = modStamp; + return this; + } + + public BigDecimal getCoefVol() { + return coefVol; + } + + public VtbVett setCoefVol(BigDecimal coefVol) { + this.coefVol = coefVol; + return this; + } + + public String getFlagAttivo() { + return flagAttivo; + } + + public VtbVett setFlagAttivo(String flagAttivo) { + this.flagAttivo = flagAttivo; + return this; + } + + public String getNumAutoriz() { + return numAutoriz; + } + + public VtbVett setNumAutoriz(String numAutoriz) { + this.numAutoriz = numAutoriz; + return this; + } + + public List getVtbVetr() { + return vtbVetr; + } + + public VtbVett setVtbVetr(List vtbVetr) { + this.vtbVetr = vtbVetr; + return this; + } + + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + VtbVett vtbVett = (VtbVett) o; + + if (!getCodVvet().equals(vtbVett.getCodVvet())) return false; + if (getCodLettVett() != null ? !getCodLettVett().equals(vtbVett.getCodLettVett()) : vtbVett.getCodLettVett() != null) + return false; + if (getCodAnag() != null ? !getCodAnag().equals(vtbVett.getCodAnag()) : vtbVett.getCodAnag() != null) + return false; + if (getRagSoc() != null ? !getRagSoc().equals(vtbVett.getRagSoc()) : vtbVett.getRagSoc() != null) + return false; + if (getIndirizzo() != null ? !getIndirizzo().equals(vtbVett.getIndirizzo()) : vtbVett.getIndirizzo() != null) + return false; + if (getCap() != null ? !getCap().equals(vtbVett.getCap()) : vtbVett.getCap() != null) + return false; + if (getCitta() != null ? !getCitta().equals(vtbVett.getCitta()) : vtbVett.getCitta() != null) + return false; + if (getProv() != null ? !getProv().equals(vtbVett.getProv()) : vtbVett.getProv() != null) + return false; + if (getNazione() != null ? !getNazione().equals(vtbVett.getNazione()) : vtbVett.getNazione() != null) + return false; + if (getTelefono() != null ? !getTelefono().equals(vtbVett.getTelefono()) : vtbVett.getTelefono() != null) + return false; + if (getFax() != null ? !getFax().equals(vtbVett.getFax()) : vtbVett.getFax() != null) + return false; + if (getPartIva() != null ? !getPartIva().equals(vtbVett.getPartIva()) : vtbVett.getPartIva() != null) + return false; + if (getNote() != null ? !getNote().equals(vtbVett.getNote()) : vtbVett.getNote() != null) + return false; + if (geteMail() != null ? !geteMail().equals(vtbVett.geteMail()) : vtbVett.geteMail() != null) + return false; + if (getModStamp() != null ? !getModStamp().equals(vtbVett.getModStamp()) : vtbVett.getModStamp() != null) + return false; + if (getCoefVol() != null ? !getCoefVol().equals(vtbVett.getCoefVol()) : vtbVett.getCoefVol() != null) + return false; + if (getFlagAttivo() != null ? !getFlagAttivo().equals(vtbVett.getFlagAttivo()) : vtbVett.getFlagAttivo() != null) + return false; + if (getNumAutoriz() != null ? !getNumAutoriz().equals(vtbVett.getNumAutoriz()) : vtbVett.getNumAutoriz() != null) + return false; + return getVtbVetr() != null ? getVtbVetr().equals(vtbVett.getVtbVetr()) : vtbVett.getVtbVetr() == null; + } + + @Override + public int hashCode() { + int result = getCodVvet().hashCode(); + result = 31 * result + (getCodLettVett() != null ? getCodLettVett().hashCode() : 0); + result = 31 * result + (getCodAnag() != null ? getCodAnag().hashCode() : 0); + result = 31 * result + (getRagSoc() != null ? getRagSoc().hashCode() : 0); + result = 31 * result + (getIndirizzo() != null ? getIndirizzo().hashCode() : 0); + result = 31 * result + (getCap() != null ? getCap().hashCode() : 0); + result = 31 * result + (getCitta() != null ? getCitta().hashCode() : 0); + result = 31 * result + (getProv() != null ? getProv().hashCode() : 0); + result = 31 * result + (getNazione() != null ? getNazione().hashCode() : 0); + result = 31 * result + (getTelefono() != null ? getTelefono().hashCode() : 0); + result = 31 * result + (getFax() != null ? getFax().hashCode() : 0); + result = 31 * result + (getPartIva() != null ? getPartIva().hashCode() : 0); + result = 31 * result + (getNote() != null ? getNote().hashCode() : 0); + result = 31 * result + (geteMail() != null ? geteMail().hashCode() : 0); + result = 31 * result + (getModStamp() != null ? getModStamp().hashCode() : 0); + result = 31 * result + (getCoefVol() != null ? getCoefVol().hashCode() : 0); + result = 31 * result + (getFlagAttivo() != null ? getFlagAttivo().hashCode() : 0); + result = 31 * result + (getNumAutoriz() != null ? getNumAutoriz().hashCode() : 0); + result = 31 * result + (getVtbVetr() != null ? getVtbVetr().hashCode() : 0); + return result; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ImballiRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ImballiRESTConsumer.java index 995b2e29..b89a33ce 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ImballiRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ImballiRESTConsumer.java @@ -11,6 +11,7 @@ import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.imballi.ImballoQuantityDTO; import it.integry.integrywmsnative.core.rest.model.imballi.RegistraCaricoImballiRequestDTO; +import it.integry.integrywmsnative.core.rest.model.imballi.RegistraScaricoImballiRequestDTO; import retrofit2.Response; @Singleton @@ -43,20 +44,45 @@ public class ImballiRESTConsumer extends _BaseRESTConsumer { } - public void registraCaricoSyncronized(List imballi) throws Exception { + public void registraCaricoSyncronized(String codAnag, List imballi) throws Exception { ImballiRESTConsumerService service = RESTBuilder.getService(ImballiRESTConsumerService.class); Response> response = service.registraCarico( new RegistraCaricoImballiRequestDTO() + .setCodAnag(codAnag) .setUsedImballi(imballi)) .execute(); analyzeAnswer(response, "registraCarico"); } - public void registraCarico(List imballi, Runnable onComplete, RunnableArgs onFailed) { + public void registraCarico(String codAnag, List imballi, Runnable onComplete, RunnableArgs onFailed) { executorService.execute(() -> { try { - registraCaricoSyncronized(imballi); + registraCaricoSyncronized(codAnag, imballi); + if (onComplete != null) onComplete.run(); + } catch (Exception ex) { + if (onFailed != null) onFailed.run(ex); + } + }); + } + + + public void registraScaricoSyncronized(String codVettore, String codAnagVettore, List imballi) throws Exception { + ImballiRESTConsumerService service = RESTBuilder.getService(ImballiRESTConsumerService.class); + Response> response = service.registraScarico( + new RegistraScaricoImballiRequestDTO() + .setCodVettore(codVettore) + .setCodAnagVettore(codAnagVettore) + .setUsedImballi(imballi)) + .execute(); + + analyzeAnswer(response, "registraScarico"); + } + + public void registraScarico(String idVettore, String codAnagVettore, List imballi, Runnable onComplete, RunnableArgs onFailed) { + executorService.execute(() -> { + try { + registraScaricoSyncronized(idVettore, codAnagVettore, imballi); if (onComplete != null) onComplete.run(); } catch (Exception ex) { if (onFailed != null) onFailed.run(ex); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ImballiRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ImballiRESTConsumerService.java index b7737067..5b88224b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ImballiRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ImballiRESTConsumerService.java @@ -5,6 +5,7 @@ import java.util.List; import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.rest.model.imballi.RegistraCaricoImballiRequestDTO; +import it.integry.integrywmsnative.core.rest.model.imballi.RegistraScaricoImballiRequestDTO; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.GET; @@ -20,4 +21,7 @@ public interface ImballiRESTConsumerService { @POST("wms/imballi/registraCarico") Call> registraCarico(@Body RegistraCaricoImballiRequestDTO registraCaricoImballiRequest); + @POST("wms/imballi/registraScarico") + Call> registraScarico(@Body RegistraScaricoImballiRequestDTO registraScaricoImballiRequest); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/VettoriRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/VettoriRESTConsumer.java new file mode 100644 index 00000000..b3fb1151 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/VettoriRESTConsumer.java @@ -0,0 +1,44 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import java.util.List; +import java.util.concurrent.ExecutorService; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.VtbVett; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import retrofit2.Response; + +@Singleton +public class VettoriRESTConsumer extends _BaseRESTConsumer { + + private final ExecutorService executorService; + + public VettoriRESTConsumer(ExecutorService executorService) { + this.executorService = executorService; + } + + + public List retrieveRecentlyUsedInOrdersSyncronized(GestioneEnum gestione) throws Exception { + var service = RESTBuilder.getService(VettoriRESTConsumerService.class); + Response>> response = service.retrieveRecentlyUsedInOrders(gestione) + .execute(); + + return analyzeAnswer(response, "retrieveRecentlyUsedInOrders"); + } + + public void retrieveRecentlyUsedInOrders(GestioneEnum gestione, RunnableArgs> onComplete, RunnableArgs onFailed) { + executorService.execute(() -> { + try { + var response = retrieveRecentlyUsedInOrdersSyncronized(gestione); + if (onComplete != null) onComplete.run(response); + } catch (Exception ex) { + if (onFailed != null) onFailed.run(ex); + } + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/VettoriRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/VettoriRESTConsumerService.java new file mode 100644 index 00000000..8d5639f0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/VettoriRESTConsumerService.java @@ -0,0 +1,17 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import java.util.List; + +import it.integry.integrywmsnative.core.model.VtbVett; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface VettoriRESTConsumerService { + + @GET("wms/vettore/recentlyUsedInOrders") + Call>> retrieveRecentlyUsedInOrders(@Query("gestione") GestioneEnum gestioneEnum); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/imballi/RegistraCaricoImballiRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/imballi/RegistraCaricoImballiRequestDTO.java index 2d8ead32..e268e4ad 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/imballi/RegistraCaricoImballiRequestDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/imballi/RegistraCaricoImballiRequestDTO.java @@ -4,8 +4,18 @@ import java.util.List; public class RegistraCaricoImballiRequestDTO { + private String codAnag; private List usedImballi; + public String getCodAnag() { + return codAnag; + } + + public RegistraCaricoImballiRequestDTO setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + public List getUsedImballi() { return usedImballi; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/imballi/RegistraScaricoImballiRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/imballi/RegistraScaricoImballiRequestDTO.java new file mode 100644 index 00000000..b7a5b5eb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/imballi/RegistraScaricoImballiRequestDTO.java @@ -0,0 +1,37 @@ +package it.integry.integrywmsnative.core.rest.model.imballi; + +import java.util.List; + +public class RegistraScaricoImballiRequestDTO { + + private String codVettore; + private String codAnagVettore; + private List usedImballi; + + public String getCodVettore() { + return codVettore; + } + + public RegistraScaricoImballiRequestDTO setCodVettore(String codVettore) { + this.codVettore = codVettore; + return this; + } + + public String getCodAnagVettore() { + return codAnagVettore; + } + + public RegistraScaricoImballiRequestDTO setCodAnagVettore(String codAnagVettore) { + this.codAnagVettore = codAnagVettore; + return this; + } + + public List getUsedImballi() { + return usedImballi; + } + + public RegistraScaricoImballiRequestDTO setUsedImballi(List usedImballi) { + this.usedImballi = usedImballi; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index eeabce2d..0c1f0860 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -76,6 +76,9 @@ public class DBSettingsModel { private boolean flagAccettazioneBollaUseQtaOrd = true; private boolean flagWarningNewPartitaMag = false; + private boolean flagTracciamentoImballiCaricoEnabled = false; + private boolean flagTracciamentoImballiScaricoEnabled = false; + public boolean isFlagSpedizioneEnableFakeGiacenza() { return flagSpedizioneEnableFakeGiacenza; } @@ -633,4 +636,22 @@ public class DBSettingsModel { this.flagWarningNewPartitaMag = flagWarningNewPartitaMag; return this; } + + public boolean isFlagTracciamentoImballiCaricoEnabled() { + return flagTracciamentoImballiCaricoEnabled; + } + + public DBSettingsModel setFlagTracciamentoImballiCaricoEnabled(boolean flagTracciamentoImballiCaricoEnabled) { + this.flagTracciamentoImballiCaricoEnabled = flagTracciamentoImballiCaricoEnabled; + return this; + } + + public boolean isFlagTracciamentoImballiScaricoEnabled() { + return flagTracciamentoImballiScaricoEnabled; + } + + public DBSettingsModel setFlagTracciamentoImballiScaricoEnabled(boolean flagTracciamentoImballiScaricoEnabled) { + this.flagTracciamentoImballiScaricoEnabled = flagTracciamentoImballiScaricoEnabled; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index edd9c725..bb2c9c7d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -24,6 +24,7 @@ import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.utility.UtilityFirebase; import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityString; @Singleton public class SettingsManager { @@ -518,6 +519,22 @@ public class SettingsManager { .setSetter(dbSettingsModelIstance::setFlagWarningNewPartitaMag) .setDefaultValue(false)); + stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class) + .setGestName("PICKING") + .setSection("IMBALLI") + .setKeySection("COD_DTIP_CARICO") + .setSetter(data -> { + dbSettingsModelIstance.setFlagTracciamentoImballiCaricoEnabled(!UtilityString.isNullOrEmpty(data)); + })); + + stbGestSetupReaderList.add(new StbGestSetupReader<>(String.class) + .setGestName("PICKING") + .setSection("IMBALLI") + .setKeySection("COD_DTIP_SCARICO") + .setSetter(data -> { + dbSettingsModelIstance.setFlagTracciamentoImballiScaricoEnabled(!UtilityString.isNullOrEmpty(data)); + })); + String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java index ac0c5ad3..3f549c78 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingActivity.java @@ -128,7 +128,10 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A mBindings.setLifecycleOwner(this); mBindings.setView(this); - MainApplication.appComponent.accettazionePickingComponent().create().inject(this); + MainApplication.appComponent + .accettazionePickingComponent() + .create() + .inject(this); setSupportActionBar(mBindings.toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); @@ -158,6 +161,9 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A fabPopupMenu.setForceShowIcon(true); fabPopupMenu.getMenuInflater().inflate(R.menu.accettazione_ordine_inevaso_fab_menu, fabPopupMenu.getMenu()); + if (!SettingsManager.iDB().isFlagTracciamentoImballiCaricoEnabled()) + fabPopupMenu.getMenu().removeItem(R.id.track_packaging); + fabPopupMenu.setOnMenuItemClickListener(item -> { int itemId = item.getItemId(); @@ -648,7 +654,8 @@ public class AccettazioneOrdiniPickingActivity extends BaseActivity implements A this.fabPopupMenu.dismiss(); DialogTracciamentoImballiView.newInstance(data -> { - mViewModel.registraImballi(data); + if (data != null && !data.isEmpty()) + mViewModel.registraImballi(data); }).show(getSupportFragmentManager(), DialogTracciamentoImballiView.class.getName()); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java index 4fc21d57..952a72b5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordini_picking/AccettazioneOrdiniPickingViewModel.java @@ -91,6 +91,7 @@ public class AccettazioneOrdiniPickingViewModel { private MtbColt mCurrentMtbColt = null; private GestioneEnum defaultGestioneOfUL = null; + private String foundCodAnag = null; private final List mHistoryUsedAarts = new ArrayList<>(); @@ -134,6 +135,15 @@ public class AccettazioneOrdiniPickingViewModel { .findFirst() .get(); + //Definizione codAnag + var codAnagsOrd = mOrders.stream() + .map(OrdineAccettazioneInevasoDTO::getCodAnagOrd) + .distinct() + .collect(Collectors.toList()); + + if(codAnagsOrd.size() == 1) foundCodAnag = codAnagsOrd.get(0); + + //Definizione della gestione collo di default List foundGestioni = Stream.of(mOrders) .map(OrdineAccettazioneInevasoDTO::getGestioneEnum) @@ -890,13 +900,14 @@ public class AccettazioneOrdiniPickingViewModel { public void registraImballi(List data) { this.sendOnLoadingStarted(); + var inputData = data.stream() .map(x -> new ImballoQuantityDTO() .setQta(x.getQta().get()) .setCodMart(x.getCodMart().get())) .collect(Collectors.toList()); - mImballiRESTConsumer.registraCarico(inputData, () -> { + mImballiRESTConsumer.registraCarico(foundCodAnag, inputData, () -> { this.sendOnLoadingEnded(); }, this::sendError); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/ui/AutoCompleteFornitoreAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/ui/AutoCompleteFornitoreAdapter.java index 104b95e1..63481063 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/ui/AutoCompleteFornitoreAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/ui/AutoCompleteFornitoreAdapter.java @@ -1,17 +1,18 @@ package it.integry.integrywmsnative.gest.rettifica_giacenze.ui; import android.content.Context; -import androidx.databinding.DataBindingUtil; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Filter; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; + import java.util.ArrayList; -import java.util.ConcurrentModificationException; +import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.databinding.RettificaGiacenzeAutocompleteFornitoreLayoutBinding; @@ -24,7 +25,7 @@ public class AutoCompleteFornitoreAdapter extends ArrayAdapter { private ArrayList suggestions; public AutoCompleteFornitoreAdapter(@NonNull Context context, @NonNull ArrayList items) { - super(context, 0 , items); + super(context, 0, items); this.items = items; this.itemsAll = (ArrayList) items.clone(); this.suggestions = new ArrayList<>(); @@ -33,7 +34,7 @@ public class AutoCompleteFornitoreAdapter extends ArrayAdapter { @NonNull @Override public Filter getFilter() { - return fornitoreFilter; + return new FornitoreFilter(itemsAll); } @NonNull @@ -49,55 +50,53 @@ public class AutoCompleteFornitoreAdapter extends ArrayAdapter { return binding.getRoot(); } + private class FornitoreFilter extends Filter { + private ArrayList sourceObjects; - private Filter fornitoreFilter = new Filter() { - @Override - protected FilterResults performFiltering(CharSequence constraint) { - if(constraint != null) { - suggestions.clear(); - for (FornitoreDTO fornitore : itemsAll) { - String tmpDescr = fornitore.getCodAlis() + " " + fornitore.getDescrizione(); + public FornitoreFilter(List objects) { + if (objects == null) return; + sourceObjects = new ArrayList<>(); - if(tmpDescr.toLowerCase().contains(constraint.toString().toLowerCase())){ - suggestions.add(fornitore); - } - } - FilterResults filterResults = new FilterResults(); - filterResults.values = suggestions; - filterResults.count = suggestions.size(); - return filterResults; - } else { - return new FilterResults(); + synchronized (this) { + sourceObjects.addAll(objects); } } + @Override + protected FilterResults performFiltering(CharSequence constraint) { + FilterResults result = new FilterResults(); + if (constraint != null) { + suggestions.clear(); + for (FornitoreDTO fornitore : sourceObjects) { + String tmpDescr = fornitore.getCodAlis() + " " + fornitore.getDescrizione(); + + if (tmpDescr.toLowerCase().contains(constraint.toString().toLowerCase())) { + suggestions.add(fornitore); + } + } + result.values = suggestions; + result.count = suggestions.size(); + } else { + // add all objects + synchronized (this) { + result.values = sourceObjects; + result.count = sourceObjects.size(); + } + } + return result; + } @Override protected void publishResults(CharSequence constraint, FilterResults results) { - - boolean error; - - do { - try { - ArrayList filteredList = (ArrayList) results.values; - if (results.count > 0) { - clear(); - - for (FornitoreDTO c : filteredList) { - add(c); - } - - notifyDataSetChanged(); - - } - error = false; - } catch (ConcurrentModificationException ex) { - error = true; - } - } while (error); - - + if(constraint != null && constraint.length() > 2) { + ArrayList filtered = (ArrayList) results.values; + notifyDataSetChanged(); + clear(); + for (int i = 0, l = filtered.size(); i < l; i++) + add(filtered.get(i)); + notifyDataSetInvalidated(); + } } @@ -105,5 +104,6 @@ public class AutoCompleteFornitoreAdapter extends ArrayAdapter { public CharSequence convertResultToString(Object resultValue) { return ((FornitoreDTO) resultValue).getCodAlis(); } - }; + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index 83beb96f..d2022ba4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -6,8 +6,10 @@ import android.content.SharedPreferences; import android.content.res.Resources; import android.os.Bundle; import android.text.SpannableString; +import android.view.Gravity; import android.widget.Toast; +import androidx.appcompat.widget.PopupMenu; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; import androidx.preference.PreferenceManager; @@ -68,6 +70,7 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUView; import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint; +import it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView; @@ -78,6 +81,7 @@ import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUV import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtView; +import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.DialogTracciamentoImballiView; import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView; public class SpedizioneActivity extends BaseActivity implements SpedizioneViewModel.Listener, BottomSheetFragmentLUContentViewModel.Listener, BottomSheetFragmentLUContentView.Listener { @@ -99,7 +103,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public BindableBoolean noItemsToPick = new BindableBoolean(false); public BindableBoolean noLUPresent = new BindableBoolean(true); public BindableBoolean bottomSheetEnabled = new BindableBoolean(false); - public BindableBoolean closeOrderButtonEnabled = new BindableBoolean(false); private boolean mEnableFakeGiacenza; private boolean mFlagShowCodForn; @@ -119,6 +122,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo private final int PICK_UL_REQUEST = 1; + private PopupMenu fabPopupMenu; + public static void startActivity(Context context, List ordini, List selectedOrders, @@ -196,13 +201,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo this.initVars(); this.initBarcodeReader(); + this.initFab(); this.initRecyclerView(); - closeOrderButtonEnabled.set(SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() - || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose() - || (this.isOrdTrasf() && !UtilityString.isNullOrEmpty(SettingsManager.iDB().getCodDtipOrdTrasfV())) - ); - String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); mEnableFakeGiacenza = SettingsManager.iDB().isFlagSpedizioneEnableFakeGiacenza(); @@ -223,17 +224,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo mGestioneCol, mSegnoCol, mDefaultCausaleUL, mEnableQuantityReset, useQtaOrd); - } - - private boolean isOrdTrasf() { - - return mTestateOrdini != null && !mTestateOrdini.isEmpty() && Stream.of(mTestateOrdini) - .map(OrdineUscitaInevasoDTO::isOrdTrasf) - .withoutNulls() - .distinctBy(x -> x) - .findFirst() - .get(); } @Override @@ -271,6 +262,48 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo BarcodeManager.enable(); } + + private void initFab() { + fabPopupMenu = new PopupMenu(this, + this.mBindings.spedizioneOrdineInevasoFab, (Gravity.END | Gravity.BOTTOM), + androidx.appcompat.R.attr.popupMenuStyle, + com.google.android.material.R.style.Widget_Material3_PopupMenu_ContextMenu); + + fabPopupMenu.setForceShowIcon(true); + fabPopupMenu.getMenuInflater().inflate(R.menu.spedizione_ordine_inevaso_fab_menu, fabPopupMenu.getMenu()); + + boolean isCloseOrderEnabled = SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() + || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose() + || (mViewmodel.isOrdTrasf() && !UtilityString.isNullOrEmpty(SettingsManager.iDB().getCodDtipOrdTrasfV())); + + if (!isCloseOrderEnabled) { + fabPopupMenu.getMenu().removeItem(R.id.close_order); + } + + if(!SettingsManager.iDB().isFlagTracciamentoImballiScaricoEnabled()) + fabPopupMenu.getMenu().removeItem(R.id.track_packaging); + + fabPopupMenu.setOnMenuItemClickListener(item -> { + int itemId = item.getItemId(); + + if (itemId == R.id.close_order) { + closeOrder(); + return true; + } else if (itemId == R.id.show_created_ul) { + showCreatedUL(); + return true; + } else if (itemId == R.id.track_packaging) { + trackPackaging(); + return true; + } else if (itemId == R.id.create_ul) { + createNewUL(); + return true; + } + + return false; + }); + } + private void initRecyclerView() { this.mViewmodel.getPickingList().observe(this, updatedData -> { this.mSpedizioneMutableData.clear(); @@ -383,7 +416,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo MtbColr mtbColrToDispatch = mtbColtToPick.getMtbColr() != null && mtbColtToPick.getMtbColr().size() > 0 ? mtbColtToPick.getMtbColr().get(0) : null; if (mtbColrToDispatch != null) { - if(!UtilityString.isNullOrEmpty(mtbColrToDispatch.getPartitaMag())) + if (!UtilityString.isNullOrEmpty(mtbColrToDispatch.getPartitaMag())) cloneModel.setSubDescrizione1(String.format(getString(R.string.batch_lot_text), mtbColrToDispatch.getPartitaMag())); if (!UtilityString.isNullOrEmpty(x.getSitArtOrdDTO().getCodJcom())) { @@ -642,13 +675,18 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo return sortedList; } + + public void showFabMenu() { + fabPopupMenu.show(); + } + private String getCommessa(String codJcom) { var commessaMagazzino = SettingsManager.iDB().getCommessaMagazzino(); - if(UtilityString.isNullOrEmpty(commessaMagazzino)) { + if (UtilityString.isNullOrEmpty(commessaMagazzino)) { return UtilityString.isNull(codJcom, "Magazzino").toUpperCase(); } else { - if(commessaMagazzino.equalsIgnoreCase(codJcom) || codJcom == null) + if (commessaMagazzino.equalsIgnoreCase(codJcom) || codJcom == null) return "Magazzino".toUpperCase(); else return codJcom.toUpperCase(); @@ -698,7 +736,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void createNewUL() { - this.mBindings.spedizioneFab.close(true); + this.fabPopupMenu.dismiss(); this.onLoadingStarted(); @@ -707,8 +745,23 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo }); } + + public void trackPackaging() { + this.fabPopupMenu.dismiss(); + + DialogTracciamentoImballiView.newInstance(imballiData -> { + + if (imballiData != null && !imballiData.isEmpty()) { + DialogAskVettoreView.newInstance(mViewmodel.getDefaultVettore(), vettoreData -> { + mViewmodel.registraImballi(vettoreData, imballiData); + }) + .show(getSupportFragmentManager(), DialogAskVettoreView.class.getName()); + } + }).show(getSupportFragmentManager(), DialogTracciamentoImballiView.class.getName()); + } + public void showCreatedUL() { - this.mBindings.spedizioneFab.close(true); + this.fabPopupMenu.dismiss(); ArrayList createdMtbColts = this.mViewmodel.getCreatedMtbColts(); @@ -718,7 +771,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void closeOrder() { - this.mBindings.spedizioneFab.close(true); + this.fabPopupMenu.dismiss(); this.mViewmodel.closeOrder(); } @@ -727,7 +780,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo public void onLUOpened(MtbColt mtbColt) { this.addExtraItemsEnabled.set(SettingsManager.iDB().isFlagCanAddExtraItemSpedizione()); noLUPresent.set(false); - closeOrderButtonEnabled.set(false); FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT); @@ -739,7 +791,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo this.addExtraItemsEnabled.set(false); noLUPresent.set(true); this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null); - closeOrderButtonEnabled.set(SettingsManager.iDB().isFlagPrintEtichetteOnOrderClose() || SettingsManager.iDB().isFlagPrintPackingListOnOrderClose()); if (this.mShouldCloseActivity) super.onBackPressed(); } @@ -776,7 +827,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo R.string.button_ignore_print, onComplete) .show(getSupportFragmentManager(), "tag"); - ; } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneModule.java index 0cec1e2d..dad4a875 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneModule.java @@ -9,6 +9,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsu import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; @@ -34,7 +35,8 @@ public class SpedizioneModule { DocumentRESTConsumer documentRESTConsumer, ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer, ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, - MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer) { + MagazzinoAutomaticoRESTConsumer magazzinoAutomaticoRESTConsumer, + ImballiRESTConsumer imballiRESTConsumer) { return new SpedizioneViewModel(articoloRESTConsumer, barcodeRESTConsumer, colliDataRecoverService, @@ -45,7 +47,8 @@ public class SpedizioneModule { documentRESTConsumer, colliSpedizioneRESTConsumer, colliLavorazioneRESTConsumer, - magazzinoAutomaticoRESTConsumer); + magazzinoAutomaticoRESTConsumer, + imballiRESTConsumer); } } 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 0e1af15c..2053c05e 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 @@ -3,16 +3,16 @@ package it.integry.integrywmsnative.gest.spedizione; import androidx.databinding.ObservableArrayList; import androidx.lifecycle.MutableLiveData; -import com.annimon.stream.Optional; -import com.annimon.stream.Stream; - import org.apache.commons.lang3.NotImplementedException; import java.math.BigDecimal; import java.time.LocalDate; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; import javax.inject.Inject; @@ -42,6 +42,7 @@ import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.MtbTCol; +import it.integry.integrywmsnative.core.model.VtbVett; import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.dto.StatoArticoloDTO; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; @@ -51,6 +52,7 @@ import it.integry.integrywmsnative.core.rest.consumers.ColliLavorazioneRESTConsu import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DocumentRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers.ImballiRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoAutomaticoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; @@ -61,6 +63,7 @@ import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; import it.integry.integrywmsnative.core.rest.model.LoadColliDTO; import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; +import it.integry.integrywmsnative.core.rest.model.imballi.ImballoQuantityDTO; import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickItemRequestDTO; import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickItemsRequestDTO; import it.integry.integrywmsnative.core.rest.model.magazzino_automatico.MagazzinoAutomaticoPickOrderRequestDTO; @@ -86,6 +89,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadExceptio import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.gest.spedizione.model.PrintOrderCloseDTO; +import it.integry.integrywmsnative.view.dialogs.tracciamento_imballi.TracciamentoImballoDTO; public class SpedizioneViewModel { @@ -101,6 +105,7 @@ public class SpedizioneViewModel { private String mDefaultCodMdep = null; private final List mDefaultFiltroOrdine = new ArrayList<>(); private Integer mDefaultCausaleOfUL = null; + private VtbVett mDefaultVettore = null; private boolean mEnableGiacenza; private boolean mEnableCheckPartitaMag; @@ -124,13 +129,24 @@ public class SpedizioneViewModel { private final DocumentRESTConsumer mDocumentRESTConsumer; private final ColliSpedizioneRESTConsumer mColliSpedizioneRESTConsumer; private final ColliLavorazioneRESTConsumer mColliLavorazioneRESTConsumer; - private final MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer; + private final ImballiRESTConsumer mImballiRESTConsumer; private ColliScaricoRESTConsumerInterface mColliScaricoRESTConsumer; @Inject - public SpedizioneViewModel(ArticoloRESTConsumer articoloRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliDataRecoverService colliDataRecoverService, OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, PrinterRESTConsumer printerRESTConsumer, PosizioniRESTConsumer posizioniRESTConsumer, DocumentRESTConsumer documentRESTConsumer, ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer, ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer) { + public SpedizioneViewModel(ArticoloRESTConsumer articoloRESTConsumer, + BarcodeRESTConsumer barcodeRESTConsumer, + ColliDataRecoverService colliDataRecoverService, + OrdiniRESTConsumer ordiniRESTConsumer, + ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, + PrinterRESTConsumer printerRESTConsumer, + PosizioniRESTConsumer posizioniRESTConsumer, + DocumentRESTConsumer documentRESTConsumer, + ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer, + ColliLavorazioneRESTConsumer colliLavorazioneRESTConsumer, + MagazzinoAutomaticoRESTConsumer mMagazzinoAutomaticoRESTConsumer, + ImballiRESTConsumer imballiRESTConsumer) { this.mArticoloRESTConsumer = articoloRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mColliDataRecoverService = colliDataRecoverService; @@ -142,6 +158,7 @@ public class SpedizioneViewModel { this.mColliSpedizioneRESTConsumer = colliSpedizioneRESTConsumer; this.mColliLavorazioneRESTConsumer = colliLavorazioneRESTConsumer; this.mMagazzinoAutomaticoRESTConsumer = mMagazzinoAutomaticoRESTConsumer; + this.mImballiRESTConsumer = imballiRESTConsumer; } @@ -159,10 +176,6 @@ public class SpedizioneViewModel { this.mEnableQuantityReset = enableQuantityReset; this.mUseQtaOrd = useQtaOrd; - if (testateOrdini != null && testateOrdini.size() > 0) { - this.mIsOrdTrasf = Stream.of(testateOrdini).map(OrdineUscitaInevasoDTO::isOrdTrasf).withoutNulls().distinctBy(x -> x).findFirst().get(); - } - if (enableGiacenza) { mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> { this.mPickingList.postValue(pickingObjectList); @@ -183,38 +196,67 @@ public class SpedizioneViewModel { private void getEmptyPickingList(List sitArtOrdList, RunnableArgs> onComplete) { - List codMarts = Stream.of(sitArtOrdList).map(x -> x.getCodMart().trim()).toList(); + List codMarts = sitArtOrdList.stream() + .map(x -> x.getCodMart().trim()) + .collect(Collectors.toList()); this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> { - List pickingList = Stream.of(sitArtOrdList).map(sitArtOrdDTO -> { - MtbAart mtbAart = null; + List pickingList = sitArtOrdList.stream() + .map(sitArtOrdDTO -> { + MtbAart mtbAart = null; - for (MtbAart mtbAartItem : listMtbAarts) { - if (mtbAartItem.getCodMart().trim().equalsIgnoreCase(sitArtOrdDTO.getCodMart().trim())) { - mtbAart = mtbAartItem; - break; - } - } + for (MtbAart mtbAartItem : listMtbAarts) { + if (mtbAartItem.getCodMart().trim().equalsIgnoreCase(sitArtOrdDTO.getCodMart().trim())) { + mtbAart = mtbAartItem; + break; + } + } - return new PickingObjectDTO().setSitArtOrdDTO(sitArtOrdDTO).setMtbAart(mtbAart); - }).toList(); + return new PickingObjectDTO().setSitArtOrdDTO(sitArtOrdDTO).setMtbAart(mtbAart); + }).collect(Collectors.toList()); onComplete.run(pickingList); }, this::sendError); } private void initDefaultVars() { - if (this.mTestateOrdini != null && this.mTestateOrdini.size() > 0) { + if (this.mTestateOrdini != null && !this.mTestateOrdini.isEmpty()) { - List foundRagSoc = Stream.of(mTestateOrdini).map(OrdineUscitaInevasoDTO::getRagSocOrd).distinctBy(x -> x).toList(); + this.mIsOrdTrasf = mTestateOrdini.stream() + .map(OrdineUscitaInevasoDTO::isOrdTrasf) + .filter(Objects::nonNull) + .distinct() + .findFirst() + .orElse(false); - if (foundRagSoc != null && foundRagSoc.size() == 1) { + List foundRagSoc = mTestateOrdini.stream() + .map(OrdineUscitaInevasoDTO::getRagSocOrd) + .distinct() + .collect(Collectors.toList()); + + if (foundRagSoc.size() == 1) { mDefaultRagSocOfUL = foundRagSoc.get(0); } + List foundVett = mTestateOrdini.stream() + .filter(x -> !UtilityString.isNullOrEmpty(x.getCodVvet())) + .map(x -> new VtbVett() + .setCodVvet(x.getCodVvet()) + .setRagSoc(x.getDescrizioneVettore())) + .distinct() + .collect(Collectors.toList()); + + if (foundVett.size() == 1) { + mDefaultVettore = foundVett.get(0); + } + if (mDefaultGestioneOfUL == null) { //Definizione della gestione collo di default - List foundGestioni = Stream.of(mTestateOrdini).map(OrdineUscitaInevasoDTO::getGestioneEnum).withoutNulls().distinct().toList(); + List foundGestioni = mTestateOrdini.stream() + .map(OrdineUscitaInevasoDTO::getGestioneEnum) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); if (foundGestioni.size() > 1) { return; @@ -254,6 +296,11 @@ public class SpedizioneViewModel { } } + + public boolean isOrdTrasf() { + return mIsOrdTrasf; + } + private void onOrderClosedPrintingDone() { if (this.mIsOrdTrasf && !UtilityString.isNullOrEmpty(SettingsManager.iDB().getCodDtipOrdTrasfV())) { this.sendCreateDocsRequest(); @@ -492,7 +539,8 @@ public class SpedizioneViewModel { } } else { - boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep()) + boolean codMdepIsValid = SettingsManager.iDB().getAvailableCodMdep() + .stream() .anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep())); if (codMdepIsValid) { @@ -537,7 +585,7 @@ public class SpedizioneViewModel { mColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { - boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep()) + boolean codMdepIsValid = SettingsManager.iDB().getAvailableCodMdep().stream() .anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep())); if (codMdepIsValid) { @@ -560,7 +608,7 @@ public class SpedizioneViewModel { if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { if (mtbColt.getSegno() != -1) { - boolean codMdepIsValid = Stream.of(SettingsManager.iDB().getAvailableCodMdep()) + boolean codMdepIsValid = SettingsManager.iDB().getAvailableCodMdep().stream() .anyMatch(x -> x.getCodMdep().equalsIgnoreCase(mtbColt.getCodMdep())); if (codMdepIsValid) { @@ -633,26 +681,28 @@ public class SpedizioneViewModel { } private void executeMagazzinoAutomatico(MtbDepoPosizione mtbDepoPosizione, Runnable onComplete) { - var magazzinoAutomaticoPickableArts = Stream.of(Objects.requireNonNull(this.mPickingList.getValue())) - .filter(x -> Stream.of(x.getMtbColts()).anyMatch(y -> y.getPosizione() != null && y.getPosizione().equalsIgnoreCase(mtbDepoPosizione.getPosizione())) && + var magazzinoAutomaticoPickableArts = Objects.requireNonNull(this.mPickingList.getValue()) + .stream() + .filter(x -> x.getMtbColts().stream() + .anyMatch(y -> y.getPosizione() != null && y.getPosizione().equalsIgnoreCase(mtbDepoPosizione.getPosizione())) && x.getSitArtOrdDTO() != null && UtilityBigDecimal.greaterThan(x.getSitArtOrdDTO().getQtaOrd(), BigDecimal.ZERO)) - .toList(); + .collect(Collectors.toList()); - var mtbAarts = Stream.of(magazzinoAutomaticoPickableArts) + var mtbAarts = magazzinoAutomaticoPickableArts.stream() .map(PickingObjectDTO::getMtbAart) - .toList(); + .collect(Collectors.toList()); this.sendChooseArtsRequest(mtbAarts, selectedArts -> { - final List orders = Stream.of(this.mTestateOrdini) + final List orders = this.mTestateOrdini.stream() .map(x -> new MagazzinoAutomaticoPickOrderRequestDTO(UtilityDate.toLocalDate(x.getDataOrdD()), x.getGestione(), x.getNumOrd()) .setDataCons(x.getDataConsD() != null ? UtilityDate.toLocalDate(x.getDataConsD()) : null)) - .toList(); + .collect(Collectors.toList()); final List magazzinoAutomaticoPickItemRequestDTOList = new ArrayList<>(); for (MtbAart selectedArt : selectedArts) { - final PickingObjectDTO pickingObjectDTO = Stream.of(magazzinoAutomaticoPickableArts) + final PickingObjectDTO pickingObjectDTO = magazzinoAutomaticoPickableArts.stream() .filter(x -> x.getMtbAart().getCodMart().equalsIgnoreCase(selectedArt.getCodMart())) .findFirst() .orElse(null); @@ -682,10 +732,10 @@ public class SpedizioneViewModel { } public void executeEmptyMagazzinoAutomaticoRequest(MtbDepoPosizione mtbDepoPosizione, Runnable onComplete) { - final List orders = Stream.of(this.mTestateOrdini) + final List orders = this.mTestateOrdini.stream() .map(x -> new MagazzinoAutomaticoPickOrderRequestDTO(UtilityDate.toLocalDate(x.getDataOrdD()), x.getGestione(), x.getNumOrd()) .setDataCons(UtilityDate.toLocalDate(x.getDataConsD()))) - .toList(); + .collect(Collectors.toList()); var magazzinoAutomaticoPickRequest = new MagazzinoAutomaticoPickItemsRequestDTO() .setShouldCreateUDS(true) @@ -703,21 +753,22 @@ public class SpedizioneViewModel { if (mEnableGiacenza) { - Stream.of(pickingList).forEach(pickingObjectDTO -> { - if (Stream.of(pickingObjectDTO.getMtbColts()) - .anyMatch(x -> - Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) && - x.getDataColloS().equals(scannedUL.getDataColloS()) && - x.getSerCollo().equalsIgnoreCase(scannedUL.getSerCollo()) && - (scannedUL.getGestioneEnum() == GestioneEnum.ACQUISTO || scannedUL.getGestioneEnum() == GestioneEnum.LAVORAZIONE))) { + pickingList + .forEach(pickingObjectDTO -> { + if (pickingObjectDTO.getMtbColts().stream() + .anyMatch(x -> + Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) && + x.getDataColloS().equals(scannedUL.getDataColloS()) && + x.getSerCollo().equalsIgnoreCase(scannedUL.getSerCollo()) && + (scannedUL.getGestioneEnum() == GestioneEnum.ACQUISTO || scannedUL.getGestioneEnum() == GestioneEnum.LAVORAZIONE))) { - matchPickingObject.add(pickingObjectDTO); - } - }); + matchPickingObject.add(pickingObjectDTO); + } + }); } //Controllo se nel collo ho degli articoli che corrispondono per codice / taglia / colore / lotto - Stream.of(scannedUL.getMtbColr()).filter(x -> !UtilityString.isNullOrEmpty(x.getCodMart())).forEach(x -> { + scannedUL.getMtbColr().stream().filter(x -> !UtilityString.isNullOrEmpty(x.getCodMart())).forEach(x -> { for (PickingObjectDTO pickingObject : pickingList) { //Da verificare se il controllo per partita deve essere sempre effettuato @@ -736,7 +787,7 @@ public class SpedizioneViewModel { ObservableArrayList cloneMtbColrs = (ObservableArrayList) cloneMtbColt.getMtbColr().clone(); - Stream.of(cloneMtbColt.getMtbColr()) + cloneMtbColt.getMtbColr().stream() .filter(x -> !(UtilityString.equalsIgnoreCase(x.getCodMart(), matchedObject.getSitArtOrdDTO().getCodMart()) && UtilityString.equalsIgnoreCase(x.getCodTagl(), matchedObject.getSitArtOrdDTO().getCodTagl()) && UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getSitArtOrdDTO().getCodCol()) && @@ -760,12 +811,12 @@ public class SpedizioneViewModel { private void searchArtFromAnag(MtbAart mtbAart, PickDataDTO pickData, Runnable onComplete) { final List pickingList = mPickingList.getValue(); - List matchPickingObject = Stream.of(pickingList) + List matchPickingObject = pickingList.stream() .filter(x -> UtilityString.equalsIgnoreCase(mtbAart.getCodMart(), x.getSitArtOrdDTO().getCodMart())) .filter(x -> x.getSitArtOrdDTO().isFlagEnableScanArt()).filter(x -> { MtbPartitaMag mtbPartitaMag = pickData != null && pickData.getManualPickDTO() != null && pickData.getManualPickDTO().getMtbPartitaMag() != null ? pickData.getManualPickDTO().getMtbPartitaMag() : null; return !mEnableCheckPartitaMag || (mtbPartitaMag != null && UtilityString.equalsIgnoreCase(x.getSitArtOrdDTO().getPartitaMag(), mtbPartitaMag.getPartitaMag())); - }).toList(); + }).collect(Collectors.toList()); for (PickingObjectDTO pickingObjectDTO : matchPickingObject) { pickingObjectDTO.setTempPickData(pickData); @@ -787,7 +838,7 @@ public class SpedizioneViewModel { List pickingList = mPickingList.getValue(); - Stream.of(pickingList).filter(x -> x != matchedItem).forEach(x -> x.setHidden(true)); + pickingList.stream().filter(x -> x != matchedItem).forEach(x -> x.setHidden(true)); this.sendFilterApplied(null); this.getPickingList().postValue(pickingList); @@ -828,14 +879,14 @@ public class SpedizioneViewModel { List scannedMtbColrs = pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr(); - List availableBatchLots = Stream.of(scannedMtbColrs) + List availableBatchLots = scannedMtbColrs.stream() .filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && (x.getPartitaMag() == null || x.getMtbPartitaMag().getDataScad() == null || UtilityDate.getNow().isBefore(x.getMtbPartitaMag().getDataScad()))) - .distinctBy(MtbColr::getPartitaMag) .map(x -> x.getPartitaMag() == null ? new MtbPartitaMag().setCodMart(x.getMtbAart().getCodMart()) : x.getMtbPartitaMag()) - .toList(); + .distinct() + .collect(Collectors.toList()); //Controllo se una delle partite combacia con quella che voglio evadere // if (refMtbColr != null && refMtbColr.getMtbPartitaMag() != null) { @@ -854,24 +905,30 @@ public class SpedizioneViewModel { List tmp = new ArrayList<>(); - if (Stream.of(availableBatchLots).anyMatch(x -> x.getDataScad() != null)) { - tmp.addAll(Stream.of(availableBatchLots) + if (availableBatchLots.stream().anyMatch(x -> x.getDataScad() != null)) { + tmp.addAll(availableBatchLots.stream() .filter(x -> x.getDataScad() != null && UtilityDate.getNow().isBefore(x.getDataScad())) - .sortBy(MtbPartitaMag::getDataScad). - toList()); + .sorted(Comparator.comparing(MtbPartitaMag::getDataScad)) + .collect(Collectors.toList())); } - if (Stream.of(availableBatchLots).anyMatch(x -> x.getDataScad() == null)) { - tmp.addAll(Stream.of(availableBatchLots) + if (availableBatchLots.stream().anyMatch(x -> x.getDataScad() == null)) { + tmp.addAll(availableBatchLots.stream() .filter(x -> x.getDataScad() == null) - .sortBy(x -> UtilityString.isNull(x.getPartitaMag(), "")).toList()); + .sorted(Comparator.comparing(MtbPartitaMag::getPartitaMag)) + .collect(Collectors.toList())); } this.sendBatchLotSelectionRequest(tmp, selected -> { this.sendOnLoadingEnded(); 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())) || (x.getPartitaMag() == null && selected.getPartitaMag() == null))).toList().get(0); + MtbColr scannedMtbColr = pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().stream() + .filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && + ((x.getPartitaMag() != null && selected.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(selected.getPartitaMag())) + || (x.getPartitaMag() == null && selected.getPartitaMag() == null))) + .findFirst() + .orElse(null); dispatchOrdineRowOnPostBatchLotSelection(pickingObjectDTO, refMtbColt, refMtbColr, scannedMtbColr, canPartitaMagBeChanged); } @@ -894,10 +951,11 @@ public class SpedizioneViewModel { AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal(); AtomicBigDecimal qtaColWithdrawRows = new AtomicBigDecimal(); - Stream.of(pickingObjectDTO.getWithdrawMtbColrs()).forEach(row -> { - numCnfWithdrawRows.addAndGet(row.getNumCnf()); - qtaColWithdrawRows.addAndGet(row.getQtaCol()); - }); + pickingObjectDTO.getWithdrawMtbColrs().stream() + .forEach(row -> { + numCnfWithdrawRows.addAndGet(row.getNumCnf()); + qtaColWithdrawRows.addAndGet(row.getQtaCol()); + }); BigDecimal numCnfDaEvadere = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd().subtract(numCnfWithdrawRows.getBigDecimalValue()); BigDecimal qtaDaEvadere = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd().subtract(qtaColWithdrawRows.getBigDecimalValue()); @@ -1158,7 +1216,10 @@ public class SpedizioneViewModel { public void dispatchRowEdit(final MtbColr mtbColrToEdit) { this.sendOnLoadingStarted(); - Optional optionalPickingObjectDTO = Stream.of(this.mPickingList.getValue()).filter(x -> Stream.of(x.getWithdrawMtbColrs()).anyMatch(y -> y == mtbColrToEdit)).findSingle(); + Optional optionalPickingObjectDTO = + this.mPickingList.getValue().stream() + .filter(x -> x.getWithdrawMtbColrs().stream().anyMatch(y -> y == mtbColrToEdit)) + .findFirst(); PickingObjectDTO pickingObjectDTO = null; @@ -1187,10 +1248,11 @@ public class SpedizioneViewModel { AtomicBigDecimal numCnfWithdrawRows = new AtomicBigDecimal(0); AtomicBigDecimal qtaColWithdrawRows = new AtomicBigDecimal(0); - Stream.of(finalPickingObjectDTO.getWithdrawMtbColrs()).forEach(row -> { - numCnfWithdrawRows.addAndGet(row.getNumCnf()); - qtaColWithdrawRows.addAndGet(row.getQtaCol()); - }); + finalPickingObjectDTO.getWithdrawMtbColrs() + .forEach(row -> { + numCnfWithdrawRows.addAndGet(row.getNumCnf()); + qtaColWithdrawRows.addAndGet(row.getQtaCol()); + }); numCnfDaEvadere = totalNumCnfOrd.subtract(numCnfWithdrawRows.getBigDecimalValue()).add(mtbColrToEdit.getNumCnf()); qtaDaEvadere = totalQtaOrd.subtract(qtaColWithdrawRows.getBigDecimalValue()).add(mtbColrToEdit.getQtaCol()); @@ -1215,7 +1277,13 @@ public class SpedizioneViewModel { if (mtbColrRifs != null && mtbColrRifs.size() > 0) { //TODO: Da capire se รจ necessario controllare anche il cod_jcom - Optional optionalMtbColr = Stream.of(mtbColrRifs).filter(x -> UtilityString.equalsIgnoreCase(x.getCodMart(), mtbColrToEdit.getCodMart()) && UtilityString.equalsIgnoreCase(x.getCodCol(), mtbColrToEdit.getCodCol()) && UtilityString.equalsIgnoreCase(x.getCodTagl(), mtbColrToEdit.getCodTagl()) && UtilityString.equalsIgnoreCase(x.getPartitaMag(), mtbColrToEdit.getPartitaMag())).findSingle(); + Optional optionalMtbColr = + mtbColrRifs.stream() + .filter(x -> UtilityString.equalsIgnoreCase(x.getCodMart(), mtbColrToEdit.getCodMart()) && + UtilityString.equalsIgnoreCase(x.getCodCol(), mtbColrToEdit.getCodCol()) && + UtilityString.equalsIgnoreCase(x.getCodTagl(), mtbColrToEdit.getCodTagl()) && + UtilityString.equalsIgnoreCase(x.getPartitaMag(), mtbColrToEdit.getPartitaMag())) + .findFirst(); mtbColrRif = optionalMtbColr.isPresent() ? optionalMtbColr.get() : null; } @@ -1270,15 +1338,16 @@ public class SpedizioneViewModel { public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) { int causaleCollo = 0; - if (mDefaultGestioneOfUL == GestioneEnum.LAVORAZIONE && mDefaultSegnoCol == +1) causaleCollo = 1; + if (mDefaultGestioneOfUL == GestioneEnum.LAVORAZIONE && mDefaultSegnoCol == +1) + causaleCollo = 1; - final List orders = Stream.of(this.mTestateOrdini) + final List orders = this.mTestateOrdini.stream() .map(x -> new CreateUDSRequestOrderDTO() .setDataCons(x.getDataConsD() != null ? UtilityDate.toLocalDate(x.getDataConsD()) : null) .setDataOrd(UtilityDate.toLocalDate(x.getDataOrdD())) .setGestione(x.getGestione()) .setNumOrd(x.getNumOrd())) - .toList(); + .collect(Collectors.toList()); final CreateUDSRequestDTO createUDSRequestDTO = new CreateUDSRequestDTO() .setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()) @@ -1407,9 +1476,10 @@ public class SpedizioneViewModel { .setQtaCnf(savedMtbColr.getQtaCnf()) .setQtaCol(savedMtbColr.getQtaCol()); - Optional pickingObjectDTO = Stream.of(this.mPickingList.getValue()) - .filter(x -> Stream.of(x.getWithdrawMtbColrs()) - .anyMatch(y -> y == mtbColrToUpdate)).findSingle(); + Optional pickingObjectDTO = this.mPickingList.getValue().stream() + .filter(x -> x.getWithdrawMtbColrs().stream() + .anyMatch(y -> y == mtbColrToUpdate)) + .findFirst(); if (pickingObjectDTO.isPresent()) { pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToUpdate); @@ -1437,9 +1507,9 @@ public class SpedizioneViewModel { .setMtbColrToDelete(mtbColrToDelete); this.mColliScaricoRESTConsumer.deleteUDSRow(deleteUDSRowRequestoDTO, () -> { - Optional pickingObjectDTO = Stream.of(this.mPickingList.getValue()) - .filter(x -> Stream.of(x.getWithdrawMtbColrs()).anyMatch(y -> y == mtbColrToDelete)) - .findSingle(); + Optional pickingObjectDTO = this.mPickingList.getValue().stream() + .filter(x -> x.getWithdrawMtbColrs().stream().anyMatch(y -> y == mtbColrToDelete)) + .findFirst(); if (pickingObjectDTO.isPresent()) { pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToDelete); @@ -1485,7 +1555,7 @@ public class SpedizioneViewModel { positionedMtbColts -> { this.askPrint((shouldPrint && SettingsManager.iDB().isFlagPrintEtichetteOnLUClose()), positionedMtbColts, () -> { - Stream.of(positionedMtbColts) + positionedMtbColts.stream() .filter(x -> !this.mColliRegistrati.contains(x)) .forEach(x -> this.mColliRegistrati.add(x)); @@ -1514,7 +1584,8 @@ public class SpedizioneViewModel { clonedLuToClose.setMtbColr(null); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); - if(mTestateOrdini != null && !mTestateOrdini.isEmpty()) codMdep = mTestateOrdini.get(0).getCodMdep(); + if (mTestateOrdini != null && !mTestateOrdini.isEmpty()) + codMdep = mTestateOrdini.get(0).getCodMdep(); var closeUDSRequestDto = new CloseUDSRequestDTO() .setMtbColt(clonedLuToClose) @@ -1716,7 +1787,7 @@ public class SpedizioneViewModel { private void postCloseOperations(List mtbColtList) { if (mTestateOrdini != null) { for (MtbColt mtbColt : mtbColtList) { - Stream.of(mTestateOrdini) + mTestateOrdini.stream() .filter(x -> x.getNumOrd().equals(mtbColt.getNumOrd()) && x.getDataOrdD().equals(mtbColt.getDataOrdD()) && x.getGestioneEnum() == mtbColt.getGestioneEnum()) .forEach(x -> x.setExistColloBoolean(true)); } @@ -1735,7 +1806,17 @@ public class SpedizioneViewModel { if (pickingObjectDTO.getMtbColts() != null) { - Optional optionalMtbColrReference = Stream.of(pickingObjectDTO.getMtbColts()).filter(y -> withdrawMtbColr.getRefMtbColr() != null && withdrawMtbColr.getRefMtbColr().getNumCollo().equals(y.getNumCollo()) && withdrawMtbColr.getRefMtbColr().getDataColloD().equals(y.getDataColloD()) && withdrawMtbColr.getRefMtbColr().getSerCollo().equals(y.getSerCollo()) && withdrawMtbColr.getRefMtbColr().getGestioneEnum().equals(y.getGestioneEnum()) && UtilityString.equalsIgnoreCase(withdrawMtbColr.getRefMtbColr().getCodMart(), y.getMtbColr() != null && y.getMtbColr().size() > 0 ? y.getMtbColr().get(0).getCodMart() : null) && UtilityString.equalsIgnoreCase(withdrawMtbColr.getRefMtbColr().getCodTagl(), y.getMtbColr() != null && y.getMtbColr().size() > 0 ? y.getMtbColr().get(0).getCodTagl() : null) && UtilityString.equalsIgnoreCase(withdrawMtbColr.getRefMtbColr().getCodCol(), y.getMtbColr() != null && y.getMtbColr().size() > 0 ? y.getMtbColr().get(0).getCodCol() : null)).map(y -> y.getMtbColr().get(0)).findFirst(); + Optional optionalMtbColrReference = pickingObjectDTO.getMtbColts().stream() + .filter(y -> withdrawMtbColr.getRefMtbColr() != null && + withdrawMtbColr.getRefMtbColr().getNumCollo().equals(y.getNumCollo()) && + withdrawMtbColr.getRefMtbColr().getDataColloD().equals(y.getDataColloD()) && + withdrawMtbColr.getRefMtbColr().getSerCollo().equals(y.getSerCollo()) && + withdrawMtbColr.getRefMtbColr().getGestioneEnum().equals(y.getGestioneEnum()) && + UtilityString.equalsIgnoreCase(withdrawMtbColr.getRefMtbColr().getCodMart(), y.getMtbColr() != null && !y.getMtbColr().isEmpty() ? y.getMtbColr().get(0).getCodMart() : null) && + UtilityString.equalsIgnoreCase(withdrawMtbColr.getRefMtbColr().getCodTagl(), y.getMtbColr() != null && !y.getMtbColr().isEmpty() ? y.getMtbColr().get(0).getCodTagl() : null) && + UtilityString.equalsIgnoreCase(withdrawMtbColr.getRefMtbColr().getCodCol(), y.getMtbColr() != null && !y.getMtbColr().isEmpty() ? y.getMtbColr().get(0).getCodCol() : null)) + .map(y -> y.getMtbColr().get(0)) + .findFirst(); if (optionalMtbColrReference.isPresent()) { @@ -1783,11 +1864,13 @@ public class SpedizioneViewModel { onOrderClosedPrintingDone(); return; } - List closedOrders = Stream.of(this.mTestateOrdini).map(ord -> { - DtbOrdt ordV = new DtbOrdt(); - ordV.setDataOrd(ord.getDataOrdS()).setNumOrd(ord.getNumOrd()).setGestione(ord.getGestione()).setCodAnag(ord.getCodAnagOrd()); - return ordV; - }).toList(); + List closedOrders = this.mTestateOrdini.stream() + .map(ord -> new DtbOrdt() + .setDataOrd(ord.getDataOrdS()) + .setNumOrd(ord.getNumOrd()) + .setGestione(ord.getGestione()) + .setCodAnag(ord.getCodAnagOrd()) + ).toList(); dto.setPrintList(closedOrders); printClosedOrders(dto, this::onOrderClosedPrintingDone, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded)); @@ -1798,6 +1881,24 @@ public class SpedizioneViewModel { } + public void registraImballi(VtbVett vettore, List imballi) { + this.sendOnLoadingStarted(); + + var inputData = imballi.stream() + .map(x -> new ImballoQuantityDTO() + .setQta(x.getQta().get()) + .setCodMart(x.getCodMart().get())) + .collect(Collectors.toList()); + + mImballiRESTConsumer.registraScarico( + vettore != null ? vettore.getCodVvet() : null, + vettore != null ? vettore.getCodAnag() : null, inputData, + () -> { + this.sendOnLoadingEnded(); + }, this::sendError); + } + + public MutableLiveData> getPickingList() { return mPickingList; } @@ -1806,11 +1907,24 @@ public class SpedizioneViewModel { return (ArrayList) this.mColliRegistrati; } - void createDocs() { + public VtbVett getDefaultVettore() { + return mDefaultVettore; + } + void createDocs() { var loadCollidto = new LoadColliDTO(); - var codAnag = Stream.of(mTestateOrdini).map(OrdineUscitaInevasoDTO::getCodAnagOrd).withoutNulls().distinctBy(x -> x).findFirst().get(); - var codVdes = Stream.of(mTestateOrdini).map(OrdineUscitaInevasoDTO::getCodVdes).withoutNulls().distinctBy(x -> x).findFirst().get(); + + var codAnag = mTestateOrdini.stream().map(OrdineUscitaInevasoDTO::getCodAnagOrd) + .filter(Objects::nonNull) + .distinct() + .findFirst() + .get(); + + var codVdes = mTestateOrdini.stream().map(OrdineUscitaInevasoDTO::getCodVdes) + .filter(Objects::nonNull) + .distinct() + .findFirst() + .get(); loadCollidto.setColli(getCreatedMtbColts()); loadCollidto.setCodDtip(SettingsManager.iDB().getCodDtipOrdTrasfV()); diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteTwoLinesDropdownAdapter.java b/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteTwoLinesDropdownAdapter.java new file mode 100644 index 00000000..54f9078d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteTwoLinesDropdownAdapter.java @@ -0,0 +1,121 @@ +package it.integry.integrywmsnative.ui.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Filter; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.databinding.ArrayAdapterTwoLinesItemBinding; + +public class SimpleAutoCompleteTwoLinesDropdownAdapter extends ArrayAdapter> { + + private List> mObjects; + + public SimpleAutoCompleteTwoLinesDropdownAdapter(@NonNull Context context, int resource) { + super(context, resource); + } + + public SimpleAutoCompleteTwoLinesDropdownAdapter(@NonNull Context context, @NonNull SimpleAutoCompleteTwoLinesDropdownListModel[] objects) { + super(context, R.layout.array_adapter_two_lines_item, objects); + mObjects = Arrays.asList(objects); + } + + public SimpleAutoCompleteTwoLinesDropdownAdapter(@NonNull Context context, @NonNull List> objects) { + super(context, R.layout.array_adapter_two_lines_item, objects); + mObjects = objects; + } + + @NonNull + @Override + public Filter getFilter() { + return new StringFilter(mObjects); + } + + + @NonNull + @Override + public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + SimpleAutoCompleteTwoLinesDropdownListModel item = mObjects.get(position); + // Check if an existing view is being reused, otherwise inflate the view + ArrayAdapterTwoLinesItemBinding bindings = ArrayAdapterTwoLinesItemBinding.inflate(LayoutInflater.from(getContext()), parent, false); + +// if (convertView == null) { +// bindings = ArrayAdapterTwoLinesItemBinding.inflate(LayoutInflater.from(getContext()), parent, false); +// convertView = bindings.getRoot(); +// convertView.setTag(bindings); +// } else { +// bindings = (ArrayAdapterTwoLinesItemBinding) convertView.getTag(); +// } + + // Populate the data into the template view using the data object + bindings.itemTitle.setText(item.getTitle()); + bindings.itemDescription.setText(item.getDescription()); + + return bindings.getRoot(); + } + + private class StringFilter extends Filter { + + private ArrayList> sourceObjects; + + public StringFilter(List> objects) { + if(objects == null) return; + sourceObjects = new ArrayList<>(); + + synchronized (this) { + sourceObjects.addAll(objects); + } + } + + @Override + protected FilterResults performFiltering(CharSequence chars) { + String filterSeq = chars.toString().toLowerCase(); + FilterResults result = new FilterResults(); + if (!filterSeq.isEmpty()) { + ArrayList> filter = new ArrayList<>(); + + for (SimpleAutoCompleteTwoLinesDropdownListModel object : sourceObjects) { + // the filtering itself: + if (object.getDescription().toLowerCase().contains(filterSeq) || + object.getTitle().toLowerCase().contains(filterSeq)) + filter.add(object); + } + + result.count = filter.size(); + result.values = filter; + } else { + // add all objects + synchronized (this) { + result.values = sourceObjects; + result.count = sourceObjects.size(); + } + } + return result; + } + + @SuppressWarnings("unchecked") + @Override + protected void publishResults(CharSequence constraint, + FilterResults results) { + // NOTE: this function is *always* called from the UI thread. + if(constraint != null && constraint.length() > 2) { + ArrayList> filtered = (ArrayList>) results.values; + notifyDataSetChanged(); + clear(); + for (int i = 0, l = filtered.size(); i < l; i++) + add(filtered.get(i)); + notifyDataSetInvalidated(); + } + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteTwoLinesDropdownListModel.java b/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteTwoLinesDropdownListModel.java new file mode 100644 index 00000000..9b3bbe4f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/adapter/SimpleAutoCompleteTwoLinesDropdownListModel.java @@ -0,0 +1,36 @@ +package it.integry.integrywmsnative.ui.adapter; + +public class SimpleAutoCompleteTwoLinesDropdownListModel { + + private String title; + private String description; + + private T originalModel; + + public String getTitle() { + return title; + } + + public SimpleAutoCompleteTwoLinesDropdownListModel setTitle(String title) { + this.title = title; + return this; + } + + public String getDescription() { + return description; + } + + public SimpleAutoCompleteTwoLinesDropdownListModel setDescription(String description) { + this.description = description; + return this; + } + + public T getOriginalModel() { + return originalModel; + } + + public SimpleAutoCompleteTwoLinesDropdownListModel setOriginalModel(T originalModel) { + this.originalModel = originalModel; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreComponent.java new file mode 100644 index 00000000..b82c278f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.ask_vettore; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogAskVettoreComponent { + + @Subcomponent.Factory + interface Factory { + DialogAskVettoreComponent create(); + } + + void inject(DialogAskVettoreView dialogAskVettoreView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreModule.java new file mode 100644 index 00000000..611e0827 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreModule.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.view.dialogs.ask_vettore; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.rest.consumers.VettoriRESTConsumer; + +@Module(subcomponents = DialogAskVettoreComponent.class) +public class DialogAskVettoreModule { + + @Provides + DialogAskVettoreViewModel providesDialogAskVettoreViewModel(VettoriRESTConsumer vettoriRESTConsumer) { + return new DialogAskVettoreViewModel(vettoriRESTConsumer); + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreView.java new file mode 100644 index 00000000..b2a0adca --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreView.java @@ -0,0 +1,147 @@ +package it.integry.integrywmsnative.view.dialogs.ask_vettore; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.widget.ListPopupWindow; +import androidx.databinding.ObservableField; +import androidx.databinding.ObservableList; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import org.jetbrains.annotations.NotNull; + +import java.util.Comparator; +import java.util.stream.Collectors; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.VtbVett; +import it.integry.integrywmsnative.databinding.DialogAskVettoreBinding; +import it.integry.integrywmsnative.ui.adapter.SimpleAutoCompleteTwoLinesDropdownAdapter; +import it.integry.integrywmsnative.ui.adapter.SimpleAutoCompleteTwoLinesDropdownListModel; + +public class DialogAskVettoreView extends BaseDialogFragment implements DialogAskVettoreViewModel.Listener { + + + @Inject + DialogAskVettoreViewModel mViewModel; + + private ListPopupWindow listPopupWindow; + + private DialogAskVettoreBinding mBindings; + private Context mContext; + + private final RunnableArgs onComplete; + + public ObservableField selectedVettore = new ObservableField<>(); + + //Pass here all external parameters + public static DialogAskVettoreView newInstance(VtbVett preselectedVett, @NotNull RunnableArgs onComplete) { + return new DialogAskVettoreView(preselectedVett, onComplete); + } + + private DialogAskVettoreView(VtbVett preselectedVett, @NotNull RunnableArgs onComplete) { + super(); + + this.selectedVettore.set(preselectedVett); + this.onComplete = onComplete; + + MainApplication.appComponent + .dialogAskVettoreComponent() + .create() + .inject(this); + } + + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + this.mContext = requireContext(); + + mBindings = DialogAskVettoreBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); + mBindings.setView(this); + mBindings.setViewmodel(mViewModel); + + setCancelable(false); + + var alertDialog = new MaterialAlertDialogBuilder(this.mContext) + .setView(mBindings.getRoot()) + .setNeutralButton(R.string.skip, (dialog, which) -> { + if(this.onComplete != null) this.onComplete.run(null); + }) + .setPositiveButton(R.string.confirm, (dialog, which) -> { + if(this.onComplete != null) this.onComplete.run(selectedVettore.get()); + }) + .setCancelable(isCancelable()) + .create(); + + alertDialog.setCanceledOnTouchOutside(isCancelable()); + alertDialog.setOnShowListener(this); + return alertDialog; + } + + + @Override + public void onInit(DialogInterface dialogInterface) { + super.onInit(dialogInterface); + + mViewModel + .setListener(this) + .init(); + + listPopupWindow = new ListPopupWindow(requireActivity()); + listPopupWindow.setAnchorView(mBindings.buttonVettore); + + mViewModel.getVettoriDisponibili().addOnListChangedCallback(new OnListGeneralChangedCallback() { + @Override + public void onChanged(ObservableList sender) { + var list = mViewModel.getVettoriDisponibili().stream() + .sorted(Comparator.comparing(VtbVett::getCodVvet)) + .map(x -> new SimpleAutoCompleteTwoLinesDropdownListModel() + .setTitle(x.getCodVvet()) + .setDescription(x.getRagSoc()) + .setOriginalModel(x)) + .collect(Collectors.toList()); + + list.add(0, new SimpleAutoCompleteTwoLinesDropdownListModel() + .setTitle("") + .setDescription("Nessuna selezione") + .setOriginalModel(null)); + + requireActivity().runOnUiThread(() -> { + + listPopupWindow.setAdapter(new SimpleAutoCompleteTwoLinesDropdownAdapter<>(requireActivity(), list)); + + listPopupWindow.setOnItemClickListener((parent, view, position, id) -> { + if(position == 0) + selectedVettore.set(null); + else selectedVettore.set(list.get(position).getOriginalModel()); + + listPopupWindow.dismiss(); + }); + }); + } + }); + + + } + + public void togglePopupShow() { + if(this.listPopupWindow.isShowing()) + this.listPopupWindow.dismiss(); + else + this.listPopupWindow.show(); + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreViewModel.java new file mode 100644 index 00000000..7774a507 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_vettore/DialogAskVettoreViewModel.java @@ -0,0 +1,58 @@ +package it.integry.integrywmsnative.view.dialogs.ask_vettore; + +import androidx.databinding.ObservableArrayList; + +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.model.VtbVett; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.rest.consumers.VettoriRESTConsumer; + +public class DialogAskVettoreViewModel { + + private final VettoriRESTConsumer vettoriRESTConsumer; + + private final ObservableArrayList vettoriDisponibili = new ObservableArrayList<>(); + + private Listener mListener; + + public DialogAskVettoreViewModel(VettoriRESTConsumer vettoriRESTConsumer) { + this.vettoriRESTConsumer = vettoriRESTConsumer; + } + + + public void init() { + this.vettoriRESTConsumer.retrieveRecentlyUsedInOrders(GestioneEnum.VENDITA, recentlyUsedVett -> { + + if (recentlyUsedVett == null || recentlyUsedVett.isEmpty()) + return; + + vettoriDisponibili.addAll(recentlyUsedVett); + }, this::sendError); + } + + public ObservableArrayList getVettoriDisponibili() { + return vettoriDisponibili; + } + + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); + } + + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } + + public DialogAskVettoreViewModel setListener(Listener listener) { + this.mListener = listener; + return this; + } + + interface Listener extends ILoadingListener { + void onError(Exception ex); + } + +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_baseline_assignment_turned_in_24.xml b/app/src/main/res/drawable/ic_baseline_assignment_turned_in_24.xml index 7e570421..5d5680e4 100644 --- a/app/src/main/res/drawable/ic_baseline_assignment_turned_in_24.xml +++ b/app/src/main/res/drawable/ic_baseline_assignment_turned_in_24.xml @@ -3,7 +3,7 @@ android:height="24dp" android:viewportWidth="24" android:viewportHeight="24" - android:tint="@color/colorPrimary"> + android:tint="?attr/colorControlNormal"> diff --git a/app/src/main/res/layout/activity_spedizione.xml b/app/src/main/res/layout/activity_spedizione.xml index 4464ad17..5f1843a2 100644 --- a/app/src/main/res/layout/activity_spedizione.xml +++ b/app/src/main/res/layout/activity_spedizione.xml @@ -213,77 +213,17 @@ - - - - - - - - + diff --git a/app/src/main/res/layout/array_adapter_two_lines_item.xml b/app/src/main/res/layout/array_adapter_two_lines_item.xml new file mode 100644 index 00000000..24d7102a --- /dev/null +++ b/app/src/main/res/layout/array_adapter_two_lines_item.xml @@ -0,0 +1,32 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_vettore.xml b/app/src/main/res/layout/dialog_ask_vettore.xml new file mode 100644 index 00000000..6c1f6da7 --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_vettore.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_tracciamento_imballi__list_item_model.xml b/app/src/main/res/layout/dialog_tracciamento_imballi__list_item_model.xml index e590d77a..789abf41 100644 --- a/app/src/main/res/layout/dialog_tracciamento_imballi__list_item_model.xml +++ b/app/src/main/res/layout/dialog_tracciamento_imballi__list_item_model.xml @@ -51,9 +51,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/article" - android:inputType="textNoSuggestions" android:imeOptions="actionNext" - android:singleLine="true" /> + android:singleLine="true" + android:inputType="none" + android:focusableInTouchMode="false" + android:cursorVisible="false" /> + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 42902807..c53e1467 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -70,6 +70,7 @@ Cancella UL Stampa Conferma + Salta Salva Note Aggiuntive Inserisci eventuali note aggiuntive della tua UL @@ -346,6 +347,7 @@ Recupero materiale Seleziona un elemento per continuare + Seleziona un vettore Prima di procedere seleziona un cliente Prima di procedere seleziona un destinatario Cliente non valido diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9af64f5d..1f91c0ec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -115,6 +115,7 @@ Print LU Print Confirm + Skip Save Additional notes Enter any additional notes in your logistics unit @@ -351,6 +352,7 @@ Please select an item before proceed + Select a carrier Please, select a customer before proceeding Please, select a recipient before proceeding Invalid customer