Implementata gestione degli imballi in spedizione

This commit is contained in:
Giuseppe Scorrano 2024-04-23 16:32:40 +02:00
parent 55db6d362d
commit e49d35fdbc
34 changed files with 1484 additions and 253 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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) {

View File

@ -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);

View File

@ -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;
}
}

View File

@ -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> 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<VtbVetr> getVtbVetr() {
return vtbVetr;
}
public VtbVett setVtbVetr(List<VtbVetr> 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;
}
}

View File

@ -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<ImballoQuantityDTO> imballi) throws Exception {
public void registraCaricoSyncronized(String codAnag, List<ImballoQuantityDTO> imballi) throws Exception {
ImballiRESTConsumerService service = RESTBuilder.getService(ImballiRESTConsumerService.class);
Response<ServiceRESTResponse<Void>> response = service.registraCarico(
new RegistraCaricoImballiRequestDTO()
.setCodAnag(codAnag)
.setUsedImballi(imballi))
.execute();
analyzeAnswer(response, "registraCarico");
}
public void registraCarico(List<ImballoQuantityDTO> imballi, Runnable onComplete, RunnableArgs<Exception> onFailed) {
public void registraCarico(String codAnag, List<ImballoQuantityDTO> imballi, Runnable onComplete, RunnableArgs<Exception> 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<ImballoQuantityDTO> imballi) throws Exception {
ImballiRESTConsumerService service = RESTBuilder.getService(ImballiRESTConsumerService.class);
Response<ServiceRESTResponse<Void>> response = service.registraScarico(
new RegistraScaricoImballiRequestDTO()
.setCodVettore(codVettore)
.setCodAnagVettore(codAnagVettore)
.setUsedImballi(imballi))
.execute();
analyzeAnswer(response, "registraScarico");
}
public void registraScarico(String idVettore, String codAnagVettore, List<ImballoQuantityDTO> imballi, Runnable onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
registraScaricoSyncronized(idVettore, codAnagVettore, imballi);
if (onComplete != null) onComplete.run();
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);

View File

@ -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<ServiceRESTResponse<Void>> registraCarico(@Body RegistraCaricoImballiRequestDTO registraCaricoImballiRequest);
@POST("wms/imballi/registraScarico")
Call<ServiceRESTResponse<Void>> registraScarico(@Body RegistraScaricoImballiRequestDTO registraScaricoImballiRequest);
}

View File

@ -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<VtbVett> retrieveRecentlyUsedInOrdersSyncronized(GestioneEnum gestione) throws Exception {
var service = RESTBuilder.getService(VettoriRESTConsumerService.class);
Response<ServiceRESTResponse<List<VtbVett>>> response = service.retrieveRecentlyUsedInOrders(gestione)
.execute();
return analyzeAnswer(response, "retrieveRecentlyUsedInOrders");
}
public void retrieveRecentlyUsedInOrders(GestioneEnum gestione, RunnableArgs<List<VtbVett>> onComplete, RunnableArgs<Exception> onFailed) {
executorService.execute(() -> {
try {
var response = retrieveRecentlyUsedInOrdersSyncronized(gestione);
if (onComplete != null) onComplete.run(response);
} catch (Exception ex) {
if (onFailed != null) onFailed.run(ex);
}
});
}
}

View File

@ -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<ServiceRESTResponse<List<VtbVett>>> retrieveRecentlyUsedInOrders(@Query("gestione") GestioneEnum gestioneEnum);
}

View File

@ -4,8 +4,18 @@ import java.util.List;
public class RegistraCaricoImballiRequestDTO {
private String codAnag;
private List<ImballoQuantityDTO> usedImballi;
public String getCodAnag() {
return codAnag;
}
public RegistraCaricoImballiRequestDTO setCodAnag(String codAnag) {
this.codAnag = codAnag;
return this;
}
public List<ImballoQuantityDTO> getUsedImballi() {
return usedImballi;
}

View File

@ -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<ImballoQuantityDTO> 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<ImballoQuantityDTO> getUsedImballi() {
return usedImballi;
}
public RegistraScaricoImballiRequestDTO setUsedImballi(List<ImballoQuantityDTO> usedImballi) {
this.usedImballi = usedImballi;
return this;
}
}

View File

@ -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;
}
}

View File

@ -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();

View File

@ -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());
}

View File

@ -91,6 +91,7 @@ public class AccettazioneOrdiniPickingViewModel {
private MtbColt mCurrentMtbColt = null;
private GestioneEnum defaultGestioneOfUL = null;
private String foundCodAnag = null;
private final List<HistoryMtbAartDTO> 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<GestioneEnum> foundGestioni = Stream.of(mOrders)
.map(OrdineAccettazioneInevasoDTO::getGestioneEnum)
@ -890,13 +900,14 @@ public class AccettazioneOrdiniPickingViewModel {
public void registraImballi(List<TracciamentoImballoDTO> 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);
}

View File

@ -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<FornitoreDTO> {
private ArrayList<FornitoreDTO> suggestions;
public AutoCompleteFornitoreAdapter(@NonNull Context context, @NonNull ArrayList<FornitoreDTO> items) {
super(context, 0 , items);
super(context, 0, items);
this.items = items;
this.itemsAll = (ArrayList<FornitoreDTO>) items.clone();
this.suggestions = new ArrayList<>();
@ -33,7 +34,7 @@ public class AutoCompleteFornitoreAdapter extends ArrayAdapter<FornitoreDTO> {
@NonNull
@Override
public Filter getFilter() {
return fornitoreFilter;
return new FornitoreFilter(itemsAll);
}
@NonNull
@ -49,55 +50,53 @@ public class AutoCompleteFornitoreAdapter extends ArrayAdapter<FornitoreDTO> {
return binding.getRoot();
}
private class FornitoreFilter extends Filter {
private ArrayList<FornitoreDTO> 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<FornitoreDTO> 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<FornitoreDTO> filteredList = (ArrayList<FornitoreDTO>) 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<FornitoreDTO> filtered = (ArrayList<FornitoreDTO>) 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<FornitoreDTO> {
public CharSequence convertResultToString(Object resultValue) {
return ((FornitoreDTO) resultValue).getCodAlis();
}
};
}
}

View File

@ -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<SitArtOrdDTO> ordini,
List<OrdineUscitaInevasoDTO> 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<MtbColt> 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

View File

@ -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);
}
}

View File

@ -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<FiltroOrdineDTO> 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<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete) {
List<String> codMarts = Stream.of(sitArtOrdList).map(x -> x.getCodMart().trim()).toList();
List<String> codMarts = sitArtOrdList.stream()
.map(x -> x.getCodMart().trim())
.collect(Collectors.toList());
this.mArticoloRESTConsumer.getByCodMarts(codMarts, listMtbAarts -> {
List<PickingObjectDTO> pickingList = Stream.of(sitArtOrdList).map(sitArtOrdDTO -> {
MtbAart mtbAart = null;
List<PickingObjectDTO> 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<String> 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<String> foundRagSoc = mTestateOrdini.stream()
.map(OrdineUscitaInevasoDTO::getRagSocOrd)
.distinct()
.collect(Collectors.toList());
if (foundRagSoc.size() == 1) {
mDefaultRagSocOfUL = foundRagSoc.get(0);
}
List<VtbVett> 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<GestioneEnum> foundGestioni = Stream.of(mTestateOrdini).map(OrdineUscitaInevasoDTO::getGestioneEnum).withoutNulls().distinct().toList();
List<GestioneEnum> 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<MagazzinoAutomaticoPickOrderRequestDTO> orders = Stream.of(this.mTestateOrdini)
final List<MagazzinoAutomaticoPickOrderRequestDTO> 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<MagazzinoAutomaticoPickItemRequestDTO> 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<MagazzinoAutomaticoPickOrderRequestDTO> orders = Stream.of(this.mTestateOrdini)
final List<MagazzinoAutomaticoPickOrderRequestDTO> 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<MtbColr> cloneMtbColrs = (ObservableArrayList<MtbColr>) 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<PickingObjectDTO> pickingList = mPickingList.getValue();
List<PickingObjectDTO> matchPickingObject = Stream.of(pickingList)
List<PickingObjectDTO> 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<PickingObjectDTO> 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<MtbColr> scannedMtbColrs = pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr();
List<MtbPartitaMag> availableBatchLots = Stream.of(scannedMtbColrs)
List<MtbPartitaMag> 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<MtbPartitaMag> 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<PickingObjectDTO> optionalPickingObjectDTO = Stream.of(this.mPickingList.getValue()).filter(x -> Stream.of(x.getWithdrawMtbColrs()).anyMatch(y -> y == mtbColrToEdit)).findSingle();
Optional<PickingObjectDTO> 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<MtbColr> 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<MtbColr> 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<CreateUDSRequestOrderDTO> orders = Stream.of(this.mTestateOrdini)
final List<CreateUDSRequestOrderDTO> 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> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
.filter(x -> Stream.of(x.getWithdrawMtbColrs())
.anyMatch(y -> y == mtbColrToUpdate)).findSingle();
Optional<PickingObjectDTO> 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> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
.filter(x -> Stream.of(x.getWithdrawMtbColrs()).anyMatch(y -> y == mtbColrToDelete))
.findSingle();
Optional<PickingObjectDTO> 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<MtbColt> 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<MtbColr> 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<MtbColr> 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<DtbOrdt> 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<DtbOrdt> 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<TracciamentoImballoDTO> 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<List<PickingObjectDTO>> getPickingList() {
return mPickingList;
}
@ -1806,11 +1907,24 @@ public class SpedizioneViewModel {
return (ArrayList<MtbColt>) 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());

View File

@ -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<T> extends ArrayAdapter<SimpleAutoCompleteTwoLinesDropdownListModel<T>> {
private List<SimpleAutoCompleteTwoLinesDropdownListModel<T>> mObjects;
public SimpleAutoCompleteTwoLinesDropdownAdapter(@NonNull Context context, int resource) {
super(context, resource);
}
public SimpleAutoCompleteTwoLinesDropdownAdapter(@NonNull Context context, @NonNull SimpleAutoCompleteTwoLinesDropdownListModel<T>[] objects) {
super(context, R.layout.array_adapter_two_lines_item, objects);
mObjects = Arrays.asList(objects);
}
public SimpleAutoCompleteTwoLinesDropdownAdapter(@NonNull Context context, @NonNull List<SimpleAutoCompleteTwoLinesDropdownListModel<T>> 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<T> 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<SimpleAutoCompleteTwoLinesDropdownListModel<T>> sourceObjects;
public StringFilter(List<SimpleAutoCompleteTwoLinesDropdownListModel<T>> 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<SimpleAutoCompleteTwoLinesDropdownListModel<T>> filter = new ArrayList<>();
for (SimpleAutoCompleteTwoLinesDropdownListModel<T> 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<SimpleAutoCompleteTwoLinesDropdownListModel<T>> filtered = (ArrayList<SimpleAutoCompleteTwoLinesDropdownListModel<T>>) results.values;
notifyDataSetChanged();
clear();
for (int i = 0, l = filtered.size(); i < l; i++)
add(filtered.get(i));
notifyDataSetInvalidated();
}
}
}
}

View File

@ -0,0 +1,36 @@
package it.integry.integrywmsnative.ui.adapter;
public class SimpleAutoCompleteTwoLinesDropdownListModel<T> {
private String title;
private String description;
private T originalModel;
public String getTitle() {
return title;
}
public SimpleAutoCompleteTwoLinesDropdownListModel<T> setTitle(String title) {
this.title = title;
return this;
}
public String getDescription() {
return description;
}
public SimpleAutoCompleteTwoLinesDropdownListModel<T> setDescription(String description) {
this.description = description;
return this;
}
public T getOriginalModel() {
return originalModel;
}
public SimpleAutoCompleteTwoLinesDropdownListModel<T> setOriginalModel(T originalModel) {
this.originalModel = originalModel;
return this;
}
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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<VtbVett> onComplete;
public ObservableField<VtbVett> selectedVettore = new ObservableField<>();
//Pass here all external parameters
public static DialogAskVettoreView newInstance(VtbVett preselectedVett, @NotNull RunnableArgs<VtbVett> onComplete) {
return new DialogAskVettoreView(preselectedVett, onComplete);
}
private DialogAskVettoreView(VtbVett preselectedVett, @NotNull RunnableArgs<VtbVett> 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<VtbVett>()
.setTitle(x.getCodVvet())
.setDescription(x.getRagSoc())
.setOriginalModel(x))
.collect(Collectors.toList());
list.add(0, new SimpleAutoCompleteTwoLinesDropdownListModel<VtbVett>()
.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();
}
}

View File

@ -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<VtbVett> 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<VtbVett> 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);
}
}

View File

@ -3,7 +3,7 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@color/colorPrimary">
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M19,3h-4.18C14.4,1.84 13.3,1 12,1c-1.3,0 -2.4,0.84 -2.82,2L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM12,3c0.55,0 1,0.45 1,1s-0.45,1 -1,1 -1,-0.45 -1,-1 0.45,-1 1,-1zM10,17l-4,-4 1.41,-1.41L10,14.17l6.59,-6.59L18,9l-8,8z"/>

View File

@ -213,77 +213,17 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<com.github.clans.fab.FloatingActionMenu
android:id="@+id/spedizione_fab"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
app:layout_anchor="@+id/spedizione_empty_view"
app:layout_anchorGravity="center"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:menu_animationDelayPerItem="50"
app:menu_backgroundColor="@color/white_bg_alpha"
app:menu_buttonSpacing="0dp"
app:menu_colorNormal="@color/colorSecondary"
app:menu_colorPressed="@color/colorSecondaryDark"
app:menu_fab_size="normal"
app:menu_labels_colorNormal="@color/white"
app:menu_labels_colorPressed="@color/white_pressed"
app:menu_labels_colorRipple="#66FFFFFF"
app:menu_labels_cornerRadius="3dp"
app:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
app:menu_labels_margin="0dp"
app:menu_labels_padding="8dp"
app:menu_labels_paddingBottom="4dp"
app:menu_labels_paddingLeft="8dp"
app:menu_labels_paddingRight="8dp"
app:menu_labels_paddingTop="4dp"
app:menu_labels_position="left"
app:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
app:menu_labels_showShadow="true"
app:menu_labels_textColor="@color/black_semi_transparent"
app:menu_labels_textSize="18sp"
app:menu_openDirection="up"
app:menu_shadowColor="#66000000"
app:menu_shadowRadius="4dp"
app:menu_shadowXOffset="1dp"
app:menu_shadowYOffset="3dp"
app:menu_showShadow="true"
app:visibility="@{spedizioneView.noLUPresent}">
<com.github.clans.fab.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_baseline_assignment_turned_in_24"
app:visibility="@{spedizioneView.closeOrderButtonEnabled}"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:fab_label="@string/action_close_order"
app:onClick="@{() -> spedizioneView.closeOrder()}" />
<com.github.clans.fab.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_box"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:fab_label="@string/action_show_created_ul"
app:onClick="@{() -> spedizioneView.showCreatedUL()}" />
<com.github.clans.fab.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_add_24dp"
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:fab_label="@string/action_create_ul"
app:onClick="@{() -> spedizioneView.createNewUL()}" />
</com.github.clans.fab.FloatingActionMenu>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/spedizione_ordine_inevaso_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
android:onClick="@{() -> spedizioneView.showFabMenu()}"
app:srcCompat="@drawable/ic_add_24dp"
app:visibility="@{spedizioneView.noLUPresent}"
style="?attr/floatingActionButtonPrimaryStyle" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -0,0 +1,32 @@
<layout>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingVertical="4dp"
android:paddingHorizontal="8dp">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/item_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textAllCaps="true"
android:textAppearance="?attr/textAppearanceLabelSmall"
android:textStyle="bold"
tools:text="Small title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/item_description"
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textAppearance="?attr/textAppearanceListItem"
tools:text="Description" />
</androidx.appcompat.widget.LinearLayoutCompat>
</layout>

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewmodel"
type="it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.view.dialogs.ask_vettore.DialogAskVettoreView" />
</data>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="16dp"
app:cardElevation="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="16dp">
<androidx.appcompat.widget.AppCompatImageView
style="@style/MaterialAlertDialog.Material3.Title.Icon.CenterStacked"
android:layout_width="36dp"
android:layout_height="36dp"
android:src="@drawable/ic_error_white_24dp"
app:tint="?colorPrimary" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title_text"
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:gravity="center_horizontal"
android:text="@string/carrier" />
<RelativeLayout
android:id="@+id/button_vettore"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/gray_detail_background_round16"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackground"
android:onClick="@{() -> view.togglePopupShow()}"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:visibility="@{view.selectedVettore == null}"
tools:visibility="gone"
android:text="@string/select_a_carrier_action" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:visibility="@{view.selectedVettore != null}">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textAllCaps="true"
android:textAppearance="?attr/textAppearanceLabelSmall"
android:textStyle="bold"
android:text="@{view.selectedVettore.codVvet}"
tools:text="Small title" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/item_description"
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textAppearance="?attr/textAppearanceListItem"
android:text="@{view.selectedVettore.ragSoc}"
tools:text="Description" />
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>
</layout>

View File

@ -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" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/close_order"
android:icon="@drawable/ic_baseline_assignment_turned_in_24"
android:title="@string/action_close_order" />
<item
android:id="@+id/show_created_ul"
android:icon="@drawable/ic_inventory_2_material3"
android:title="@string/action_show_created_ul" />
<item
android:id="@+id/track_packaging"
android:icon="@drawable/ic_add_to_inbox"
android:title="@string/action_track_packaging" />
<item
android:id="@+id/create_ul"
android:icon="@drawable/ic_add_material3"
android:title="@string/action_create_ul" />
</menu>

View File

@ -70,6 +70,7 @@
<string name="action_delete_ul">Cancella UL</string>
<string name="action_print">Stampa</string>
<string name="confirm">Conferma</string>
<string name="skip">Salta</string>
<string name="action_save">Salva</string>
<string name="hint_additional_notes">Note Aggiuntive</string>
<string name="dialog_message_additional_notes">Inserisci eventuali note aggiuntive della tua UL</string>
@ -346,6 +347,7 @@
<string name="prod_recupero_materiale_title_fragment">Recupero materiale</string>
<string name="please_select_an_item">Seleziona un elemento per continuare</string>
<string name="select_a_carrier_action">Seleziona un vettore</string>
<string name="select_a_customer_message">Prima di procedere seleziona un <b>cliente</b></string>
<string name="select_a_recipient_message">Prima di procedere seleziona un <b>destinatario</b></string>
<string name="not_valid_customer_error">Cliente non valido</string>

View File

@ -115,6 +115,7 @@
<string name="action_print_ul">Print LU</string>
<string name="action_print">Print</string>
<string name="confirm">Confirm</string>
<string name="skip">Skip</string>
<string name="action_save">Save</string>
<string name="hint_additional_notes">Additional notes</string>
<string name="dialog_message_additional_notes">Enter any additional notes in your logistics unit</string>
@ -351,6 +352,7 @@
<string name="please_select_an_item">Please select an item before proceed</string>
<string name="select_a_carrier_action">Select a carrier</string>
<string name="select_a_customer_message">Please, select a <b>customer</b> before proceeding</string>
<string name="select_a_recipient_message">Please, select a <b>recipient</b> before proceeding</string>
<string name="not_valid_customer_error">Invalid customer</string>