diff --git a/app/build.gradle b/app/build.gradle index e30e3ecf..b5db1ed2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,7 +51,7 @@ android { buildTypes { debug { ext.enableCrashlytics = false - minifyEnabled true // Abilita la minimizzazione del codice +// minifyEnabled true // Abilita la minimizzazione del codice // shrinkResources true // Rimuove risorse non utilizzate proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java index 8a026cd3..7c2f695e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java @@ -25,6 +25,7 @@ import androidx.databinding.BindingAdapter; import androidx.databinding.BindingConversion; import androidx.databinding.Observable; import androidx.databinding.ObservableField; +import androidx.fragment.app.DialogFragment; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -476,7 +477,7 @@ public class Converters { @BindingAdapter(value = {"binding", "parentView", "warningOnOldDates"}, requireAll = false) - public static void bindTextInputEditTextDate(TextInputEditText view, final ObservableField observableDate, BaseDialogFragment parentFragment, boolean warningOnOldDates) { + public static void bindTextInputEditTextDate(TextInputEditText view, final ObservableField observableDate, DialogFragment parentFragment, boolean warningOnOldDates) { Pair, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); if (pair == null || pair.first != observableDate) { if (pair != null) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java index 2aee3330..67fee335 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java @@ -1,6 +1,7 @@ package it.integry.integrywmsnative.core.model; import com.google.gson.annotations.SerializedName; + import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; @@ -9,6 +10,8 @@ import java.util.Objects; import it.integry.integrywmsnative.core.exception.DateNotRecognizedException; import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException; +import it.integry.integrywmsnative.core.model.key.DtbDocrKey; +import it.integry.integrywmsnative.core.model.key.DtbDoctKey; import it.integry.integrywmsnative.core.model.key.MtbColrKey; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.settings.SettingsManager; @@ -84,7 +87,7 @@ public class MtbColr extends EntityBase { @SerializedName("codDtipDoc") private String codDtipDoc; @SerializedName("dataDoc") - private String dataDoc; + private LocalDate dataDoc; @SerializedName("serDoc") private String serDoc; @SerializedName("numDoc") @@ -186,9 +189,39 @@ public class MtbColr extends EntityBase { } public MtbColrKey getKey() { + if (UtilityString.isNullOrEmpty(gestione) || + UtilityString.isNullOrEmpty(serCollo) || + getDataColloLD() == null || + numCollo == null || + riga == null) + return null; + return new MtbColrKey(gestione, serCollo, getDataColloLD(), numCollo, riga); } + public DtbDoctKey getDocumentKey() { + if (UtilityString.isNullOrEmpty(codAnagDoc) || + UtilityString.isNullOrEmpty(codDtipDoc) || + UtilityString.isNullOrEmpty(serDoc) || + dataDoc == null || + numDoc == null) + return null; + + return new DtbDoctKey(codAnagDoc, codDtipDoc, dataDoc, numDoc, serDoc); + } + + public DtbDocrKey getDocumentRowKey() { + if (UtilityString.isNullOrEmpty(codAnagDoc) || + UtilityString.isNullOrEmpty(codDtipDoc) || + UtilityString.isNullOrEmpty(serDoc) || + dataDoc == null || + numDoc == null || + idRigaDoc == null) + return null; + + return new DtbDocrKey(codAnagDoc, codDtipDoc, dataDoc, numDoc, serDoc, idRigaDoc); + } + public static class Causale { public static final int DEFAULT = 0; public static final int RETTIFICA = 1; @@ -561,11 +594,11 @@ public class MtbColr extends EntityBase { return this; } - public String getDataDoc() { + public LocalDate getDataDoc() { return dataDoc; } - public MtbColr setDataDoc(String dataDoc) { + public MtbColr setDataDoc(LocalDate dataDoc) { this.dataDoc = dataDoc; return this; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java index bbfcb26c..c5686d40 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java @@ -19,6 +19,8 @@ import java.util.Date; import java.util.List; import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO; +import it.integry.integrywmsnative.core.model.key.DtbDoctKey; +import it.integry.integrywmsnative.core.model.key.MtbColtKey; import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.settings.SettingsManager; @@ -73,7 +75,7 @@ public class MtbColt extends EntityBase { @SerializedName("dataOrd") private String dataOrd; @SerializedName("dataDoc") - private String dataDoc; + private LocalDate dataDoc; @SerializedName("oraInizPrep") private String oraInizPrep; @SerializedName("oraFinePrep") @@ -135,6 +137,27 @@ public class MtbColt extends EntityBase { } } + public MtbColtKey getKey() { + if (UtilityString.isNullOrEmpty(gestione) || + UtilityString.isNullOrEmpty(serCollo) || + getDataColloLD() == null || + numCollo == null) + return null; + + return new MtbColtKey(gestione, serCollo, getDataColloLD(), numCollo); + } + + public DtbDoctKey getDocumentKey() { + if (UtilityString.isNullOrEmpty(codAnag) || + UtilityString.isNullOrEmpty(codDtip) || + UtilityString.isNullOrEmpty(serDoc) || + dataDoc == null || + numDoc == null) + return null; + + return new DtbDoctKey(codAnag, codDtip, dataDoc, numDoc, serDoc); + } + public MtbColt initDefaultFields(GestioneEnum gestioneEnum) { setGestione(gestioneEnum); setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()); @@ -410,11 +433,11 @@ public class MtbColt extends EntityBase { return this; } - public String getDataDoc() { + public LocalDate getDataDoc() { return dataDoc; } - public MtbColt setDataDoc(String dataDoc) { + public MtbColt setDataDoc(LocalDate dataDoc) { this.dataDoc = dataDoc; return this; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/key/DtbDoctKey.java b/app/src/main/java/it/integry/integrywmsnative/core/model/key/DtbDoctKey.java index 279c39d1..5e7c6feb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/key/DtbDoctKey.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/key/DtbDoctKey.java @@ -36,7 +36,7 @@ public class DtbDoctKey { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; + if (o == null || (getClass() != o.getClass() && !getClass().isAssignableFrom(o.getClass()))) return false; DtbDoctKey that = (DtbDoctKey) o; return Objects.equals(codAnag, that.codAnag) && Objects.equals(codDtip, that.codDtip) && @@ -45,6 +45,7 @@ public class DtbDoctKey { Objects.equals(serDoc, that.serDoc); } + @Override public int hashCode() { return Objects.hash(codAnag, codDtip, dataDoc, numDoc, serDoc); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java index 1eae8601..1ce7c8aa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ArticoloRESTConsumer.java @@ -132,7 +132,7 @@ public class ArticoloRESTConsumer extends _BaseRESTConsumer { var codMarts = codMartToFind.parallelStream() .filter(Objects::nonNull) .distinct() -.collect(Collectors.toUnmodifiableList()); + .collect(Collectors.toUnmodifiableList()); ArticoloRESTConsumerService articoloRESTConsumer = restBuilder.getService(ArticoloRESTConsumerService.class); var response = articoloRESTConsumer .getByCodMart(new RetrieveArticoloByCodMartRequestDTO() diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java index a081832d..98ee2d5c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java @@ -290,6 +290,8 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { }); } + + public List fillMtbAartsOfMtbColrsSynchronized(List mtbColrs) throws Exception { List codMarts = new ArrayList<>(mtbColrs.stream() diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/InsertUDCRowRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/InsertUDCRowRequestDTO.java index c7a8cbea..711e667f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/InsertUDCRowRequestDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/uds/InsertUDCRowRequestDTO.java @@ -49,10 +49,14 @@ public class InsertUDCRowRequestDTO { @SerializedName("codDtip") private String codDtip; - @SerializedName("pesoNettoKg") - private BigDecimal pesoNettoKg; - @SerializedName("pesoLordoKg") - private BigDecimal pesoLordoKg; + + + @SerializedName("customBarcodeUlIn") + private String customBarcodeUlIn; + @SerializedName("customCodMdepIn") + private String customCodMdepIn; + @SerializedName("customPosizioneIn") + private String customPosizioneIn; @SerializedName("documentReso") private DtbDocrKey documentReso; @@ -220,20 +224,31 @@ public class InsertUDCRowRequestDTO { return this; } - public BigDecimal getPesoNettoKg() { - return pesoNettoKg; + public String getCustomBarcodeUlIn() { + return customBarcodeUlIn; } - public void setPesoNettoKg(BigDecimal pesoNettoKg) { - this.pesoNettoKg = pesoNettoKg; + public InsertUDCRowRequestDTO setCustomBarcodeUlIn(String customBarcodeUlIn) { + this.customBarcodeUlIn = customBarcodeUlIn; + return this; } - public BigDecimal getPesoLordoKg() { - return pesoLordoKg; + public String getCustomCodMdepIn() { + return customCodMdepIn; } - public void setPesoLordoKg(BigDecimal pesoLordoKg) { - this.pesoLordoKg = pesoLordoKg; + public InsertUDCRowRequestDTO setCustomCodMdepIn(String customCodMdepIn) { + this.customCodMdepIn = customCodMdepIn; + return this; + } + + public String getCustomPosizioneIn() { + return customPosizioneIn; + } + + public InsertUDCRowRequestDTO setCustomPosizioneIn(String customPosizioneIn) { + this.customPosizioneIn = customPosizioneIn; + return this; } public DtbDocrKey getDocumentReso() { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java index 28e0a5a0..fb7938d1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java @@ -141,7 +141,7 @@ public class UpdatesManager { try { fileDownloader.download(); } catch (Exception e) { - progressDialogBuilder.dismissAllowingStateLoss(); + progressDialogBuilder.dismiss(); UtilityExceptions.defaultException(context, e); } }); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiModule.java index 840bb0f1..5f54e82a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiModule.java @@ -5,12 +5,12 @@ import android.os.Handler; import dagger.Module; import dagger.Provides; import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService; +import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliAccettazioneRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliSpedizioneRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer; @@ -20,8 +20,8 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag public class PickingResiModule { @Provides - PickingResiRESTConsumer providesPickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { - return new PickingResiRESTConsumer(systemRESTConsumer, articoloRESTConsumer); + PickingResiRESTConsumer providesPickingResiRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + return new PickingResiRESTConsumer(restBuilder, systemRESTConsumer, articoloRESTConsumer); } @Provides @@ -33,7 +33,6 @@ public class PickingResiModule { PickingResiViewModel providesPickingResiViewModel(Handler handler, ArticoloRESTConsumer articoloRESTConsumer, ColliDataRecoverService colliDataRecoverService, - OrdiniRESTConsumer ordiniRESTConsumer, ColliAccettazioneRESTConsumer colliAccettazioneRESTConsumer, ColliSpedizioneRESTConsumer colliSpedizioneRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, @@ -44,7 +43,6 @@ public class PickingResiModule { articoloRESTConsumer, barcodeRESTConsumer, colliDataRecoverService, - ordiniRESTConsumer, colliAccettazioneRESTConsumer, colliSpedizioneRESTConsumer, colliMagazzinoRESTConsumer, diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java index b07ce042..3c45bb60 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java @@ -15,6 +15,7 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; import javax.inject.Inject; @@ -33,6 +34,7 @@ import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.dto.PickDataDTO; import it.integry.integrywmsnative.core.model.observable.ObservableMtbTcol; +import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliAccettazioneRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer; @@ -54,6 +56,7 @@ import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException; import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer; import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; +import it.integry.integrywmsnative.gest.picking_resi.rest.dto.ScaricoUdcInDocumentDTO; import it.integry.integrywmsnative.gest.spedizione.exceptions.NotCurrentYearLUException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; @@ -72,6 +75,7 @@ public class PickingResiViewModel { private String mDefaultCodMdepOfLU; private final Handler mHandler; + private final ArticoloRESTConsumer mArticoloRESTConsumer; private final BarcodeRESTConsumer mBarcodeRESTConsumer; private final ColliDataRecoverService mColliDataRecoverService; private final ColliAccettazioneRESTConsumer mColliAccettazioneRESTConsumer; @@ -83,6 +87,7 @@ public class PickingResiViewModel { @Inject public PickingResiViewModel(Handler handler, + ArticoloRESTConsumer articoloRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, ColliDataRecoverService colliDataRecoverService, ColliAccettazioneRESTConsumer colliAccettazioneRESTConsumer, @@ -91,6 +96,7 @@ public class PickingResiViewModel { PrinterRESTConsumer printerRESTConsumer, PickingResiRESTConsumer mPickingResiRESTConsumer) { this.mHandler = handler; + this.mArticoloRESTConsumer = articoloRESTConsumer; this.mBarcodeRESTConsumer = barcodeRESTConsumer; this.mColliDataRecoverService = colliDataRecoverService; this.mColliAccettazioneRESTConsumer = colliAccettazioneRESTConsumer; @@ -171,6 +177,8 @@ public class PickingResiViewModel { public void closeLU(boolean shouldPrint) throws Exception { if (mCurrentMtbColt == null) return; + resetMatchedRows(); + var canBeDeleted = mColliMagazzinoRESTConsumer.canULBeDeletedSynchronized(mCurrentMtbColt); if (canBeDeleted) { @@ -320,16 +328,53 @@ public class PickingResiViewModel { } private void executeEtichettaLU(String SSCC) throws Exception { - var mtbColt = mColliMagazzinoRESTConsumer.getBySsccSynchronized(SSCC, true, false); + MtbColt mtbColt = null; + + mtbColt = mColliMagazzinoRESTConsumer.getBySsccSynchronized(SSCC, true, false); + + if (mTipologiaReso == Tipologia.VENDITA) { + //Leggere i colli in cui ho barcode_ul_out uguale a SSCC scansionato (nel caso di reso da cliente) + //per sapere cosa ho venduto di preciso + + var data = mPickingResiRESTConsumer.makeSynchronousRetrieveScarichiUdcInDocument(SSCC, null); + + var mtbAarts = mArticoloRESTConsumer.getByCodMartsSynchronized(data.stream().map(ScaricoUdcInDocumentDTO::getCodMart).collect(Collectors.toUnmodifiableList())); + + mtbColt.setMtbColr(new ObservableArrayList<>()); + mtbColt.getMtbColr().addAll(data.stream() + .map(x -> { + MtbColr mtbColr = new MtbColr() + .setCodMart(x.getCodMart()) + .setPartitaMag(x.getPartitaMag()) + .setCodJcom(x.getCodJcom()) + .setQtaCol(x.getQtaCol()) + .setQtaCnf(x.getQtaCnf()) + .setNumCnf(x.getNumCnf()) + .setBarcodeUlOut(SSCC) + .setSerDoc(x.getSerDoc()) + .setCodAnagDoc(x.getCodAnag()) + .setCodDtipDoc(x.getCodDtip()) + .setNumDoc(x.getNumDoc()) + .setDataDoc(x.getDataDoc()) + .setMtbAart(mtbAarts.stream().filter(y -> y.getCodMart().equalsIgnoreCase(x.getCodMart())).findFirst().get()); + + mtbColr.setUntMis(mtbColr.getMtbAart().getUntMis()); + + return mtbColr; + }) + .collect(Collectors.toList())); + } if (mtbColt != null && mtbColt.getMtbColr() != null && !mtbColt.getMtbColr().isEmpty()) { if (mtbColt.getSegno() != -1) { searchArtFromUL(mtbColt); + } else throw new InvalidLUException(); - } else { + + } else throw new NoResultFromBarcodeException(SSCC); - } + } @@ -370,8 +415,10 @@ public class PickingResiViewModel { for (WithdrawableDtbDocr pickingObject : pickingList) { //Da verificare se il controllo per partita deve essere sempre effettuato if (UtilityString.equalsIgnoreCase(x.getCodMart(), pickingObject.getCodMart()) && + UtilityString.equalsIgnoreCase(x.getPartitaMag(), pickingObject.getPartitaMag()) && UtilityString.equalsIgnoreCase(x.getCodTagl(), pickingObject.getCodTagl()) && - UtilityString.equalsIgnoreCase(x.getCodCol(), pickingObject.getCodCol())) { + UtilityString.equalsIgnoreCase(x.getCodCol(), pickingObject.getCodCol()) && + (mTipologiaReso == Tipologia.ACQUISTO || x.getDocumentKey().equals(pickingObject.getKey()))) { if (!matchPickingObject.contains(pickingObject)) { matchPickingObject.add(pickingObject); @@ -388,8 +435,10 @@ public class PickingResiViewModel { cloneMtbColt.getMtbColr().stream() .filter(x -> !(UtilityString.equalsIgnoreCase(x.getCodMart(), matchedObject.getCodMart()) && + UtilityString.equalsIgnoreCase(x.getPartitaMag(), matchedObject.getPartitaMag()) && UtilityString.equalsIgnoreCase(x.getCodTagl(), matchedObject.getCodTagl()) && - UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getCodCol()))) + UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getCodCol())) && + (mTipologiaReso == Tipologia.ACQUISTO || x.getDocumentKey().equals(matchedObject.getKey()))) .forEach(cloneMtbColrs::remove); cloneMtbColt.setMtbColr(cloneMtbColrs); @@ -457,10 +506,18 @@ public class PickingResiViewModel { BigDecimal totalAvailableQtaCnf; BigDecimal totalAvailableNumCnf; + BigDecimal initialQtaCol = BigDecimal.ZERO; + BigDecimal initialQtaCnf = BigDecimal.ZERO; + BigDecimal initialNumCnf = BigDecimal.ZERO; + if (mtbColrToDispatch != null) { totalAvailableQtaCol = mtbColrToDispatch.getQtaCol(); totalAvailableQtaCnf = mtbColrToDispatch.getQtaCnf(); totalAvailableNumCnf = mtbColrToDispatch.getNumCnf(); + + initialQtaCol = mtbColrToDispatch.getQtaCol(); + initialQtaCnf = mtbColrToDispatch.getQtaCnf(); + initialNumCnf = mtbColrToDispatch.getNumCnf(); } else { totalAvailableQtaCol = totalQtaDoc; totalAvailableQtaCnf = qtaCnfDoc; @@ -469,9 +526,9 @@ public class PickingResiViewModel { var pickedQuantityDTO = this.sendOnItemDispatched( withdrawableDtbDocr.getMtbAart(), - totalAvailableNumCnf, - totalAvailableQtaCnf, - totalAvailableQtaCol, + initialNumCnf, + initialQtaCnf, + initialQtaCol, totalAvailableQtaCol, totalAvailableNumCnf, totalAvailableQtaCnf, @@ -525,12 +582,15 @@ public class PickingResiViewModel { public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, MtbColt refMtbColt, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, LocalDate dataScad, boolean shouldCloseLU) throws Exception { this.sendOnLoadingStarted(); + var cloneMtbColt = (MtbColt) mCurrentMtbColt.clone(); + InsertUDCRowRequestDTO insertUDCRowRequestDTO = null; InsertUDSRowRequestDTO insertUDSRowRequestDTO = null; if (mTipologiaReso == Tipologia.VENDITA) { + insertUDCRowRequestDTO = new InsertUDCRowRequestDTO() - .setTargetMtbColt(mCurrentMtbColt) + .setTargetMtbColt(cloneMtbColt) .setCodMart(withdrawableDtbDocr.getMtbAart().getCodMart()) .setPartitaMag(partitaMag) .setDataScad(dataScad) @@ -543,7 +603,7 @@ public class PickingResiViewModel { } else if (mTipologiaReso == Tipologia.ACQUISTO) { insertUDSRowRequestDTO = new InsertUDSRowRequestDTO() - .setTargetMtbColt(mCurrentMtbColt) + .setTargetMtbColt(cloneMtbColt) .setCodMart(withdrawableDtbDocr.getMtbAart().getCodMart()) .setPartitaMag(partitaMag) .setDataScad(dataScad) @@ -574,6 +634,10 @@ public class PickingResiViewModel { if (mTipologiaReso == Tipologia.ACQUISTO) { insertUDSRowRequestDTO .setSourceMtbColr(mtbColrToDispatch); + } else if (mTipologiaReso == Tipologia.VENDITA) { + //Nel caso in cui ho scansionato un SSCC che รจ esistito a magazzino allora forzo il barcode_ul_in + //uguale a barcode_ul_out in modo che il servizio lo metta in barcode_ul_in + insertUDCRowRequestDTO.setCustomBarcodeUlIn(mtbColrToDispatch.getBarcodeUlOut()); } } @@ -596,7 +660,7 @@ public class PickingResiViewModel { boolean finalShouldPrint = shouldPrint; MtbColr insertedULRow; - if(mTipologiaReso == Tipologia.VENDITA) { + if (mTipologiaReso == Tipologia.VENDITA) { insertedULRow = this.mColliAccettazioneRESTConsumer.synchronousInsertUDCRow(insertUDCRowRequestDTO); } else if (mTipologiaReso == Tipologia.ACQUISTO) { insertedULRow = this.mColliSpedizioneRESTConsumer.insertUDSRowSynchronized(insertUDSRowRequestDTO); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java index e690dfe3..e7d27314 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumer.java @@ -13,20 +13,27 @@ import javax.inject.Singleton; import it.integry.integrywmsnative.core.model.DtbDocr; import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.key.DtbDoctKey; +import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; import it.integry.integrywmsnative.core.utility.UtilityQuery; +import it.integry.integrywmsnative.gest.picking_resi.rest.dto.RetrieveScarichiUdcInDocumentRequestDTO; +import it.integry.integrywmsnative.gest.picking_resi.rest.dto.ScaricoUdcInDocumentDTO; @Singleton -public class PickingResiRESTConsumer { +public class PickingResiRESTConsumer extends _BaseRESTConsumer { + private final RESTBuilder restBuilder; private final SystemRESTConsumer mSystemRestConsumer; private final ArticoloRESTConsumer mArticoloRESTConsumer; @Inject - public PickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + public PickingResiRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer, ArticoloRESTConsumer articoloRESTConsumer) { + this.restBuilder = restBuilder; this.mSystemRestConsumer = systemRESTConsumer; this.mArticoloRESTConsumer = articoloRESTConsumer; } @@ -93,4 +100,17 @@ public class PickingResiRESTConsumer { } + + public List makeSynchronousRetrieveScarichiUdcInDocument(String barcodeUdc, List documents) throws Exception { + var service = restBuilder.getService(PickingResiRESTConsumerService.class); + + var response = service.retrieveScarichiUdcInDocuments(barcodeUdc, new RetrieveScarichiUdcInDocumentRequestDTO() + .setDocuments(documents)) + .execute(); + + var data = analyzeAnswer(response, "retrieve-scarichi-udc-in-documents"); + + return data.getScarichiUdc() != null ? data.getScarichiUdc() : new ArrayList<>(); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumerService.java new file mode 100644 index 00000000..c7d11316 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/PickingResiRESTConsumerService.java @@ -0,0 +1,19 @@ +package it.integry.integrywmsnative.gest.picking_resi.rest; + +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.picking_resi.rest.dto.RetrieveScarichiUdcInDocumentRequestDTO; +import it.integry.integrywmsnative.gest.picking_resi.rest.dto.RetrieveScarichiUdcInDocumentResponseDTO; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface PickingResiRESTConsumerService { + + @POST("wms/resi-clienti/retrieve-scarichi-udc-in-document") + Call> retrieveScarichiUdcInDocuments( + @Query("barcodeUdc") String barcodeUdc, + @Body RetrieveScarichiUdcInDocumentRequestDTO requestBody + ); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/dto/RetrieveScarichiUdcInDocumentRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/dto/RetrieveScarichiUdcInDocumentRequestDTO.java new file mode 100644 index 00000000..cbf545b4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/dto/RetrieveScarichiUdcInDocumentRequestDTO.java @@ -0,0 +1,22 @@ +package it.integry.integrywmsnative.gest.picking_resi.rest.dto; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +import it.integry.integrywmsnative.core.model.key.DtbDoctKey; + +public class RetrieveScarichiUdcInDocumentRequestDTO { + + @SerializedName("documents") + private List documents; + + public List getDocuments() { + return documents; + } + + public RetrieveScarichiUdcInDocumentRequestDTO setDocuments(List documents) { + this.documents = documents; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/dto/RetrieveScarichiUdcInDocumentResponseDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/dto/RetrieveScarichiUdcInDocumentResponseDTO.java new file mode 100644 index 00000000..2ddd5238 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/dto/RetrieveScarichiUdcInDocumentResponseDTO.java @@ -0,0 +1,20 @@ +package it.integry.integrywmsnative.gest.picking_resi.rest.dto; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +public class RetrieveScarichiUdcInDocumentResponseDTO { + + @SerializedName("scarichiUdc") + private List scarichiUdc; + + public List getScarichiUdc() { + return scarichiUdc; + } + + public RetrieveScarichiUdcInDocumentResponseDTO setScarichiUdc(List scarichiUdc) { + this.scarichiUdc = scarichiUdc; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/dto/ScaricoUdcInDocumentDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/dto/ScaricoUdcInDocumentDTO.java new file mode 100644 index 00000000..d5d6982d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/rest/dto/ScaricoUdcInDocumentDTO.java @@ -0,0 +1,143 @@ +package it.integry.integrywmsnative.gest.picking_resi.rest.dto; + +import com.google.gson.annotations.SerializedName; + +import java.math.BigDecimal; +import java.time.LocalDate; + +public class ScaricoUdcInDocumentDTO { + @SerializedName("codAnag") + private String codAnag; + + @SerializedName("codDtip") + private String codDtip; + + @SerializedName("dataDoc") + private LocalDate dataDoc; + + @SerializedName("numDoc") + private int numDoc; + + @SerializedName("serDoc") + private String serDoc; + + + @SerializedName("codMart") + private String codMart; + + @SerializedName("partitaMag") + private String partitaMag; + + @SerializedName("codJcom") + private String codJcom; + + + + @SerializedName("qtaCol") + private BigDecimal qtaCol; + + @SerializedName("qtaCnf") + private BigDecimal qtaCnf; + + @SerializedName("numCnf") + private BigDecimal numCnf; + + public String getCodAnag() { + return codAnag; + } + + public ScaricoUdcInDocumentDTO setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getCodDtip() { + return codDtip; + } + + public ScaricoUdcInDocumentDTO setCodDtip(String codDtip) { + this.codDtip = codDtip; + return this; + } + + public LocalDate getDataDoc() { + return dataDoc; + } + + public ScaricoUdcInDocumentDTO setDataDoc(LocalDate dataDoc) { + this.dataDoc = dataDoc; + return this; + } + + public int getNumDoc() { + return numDoc; + } + + public ScaricoUdcInDocumentDTO setNumDoc(int numDoc) { + this.numDoc = numDoc; + return this; + } + + public String getSerDoc() { + return serDoc; + } + + public ScaricoUdcInDocumentDTO setSerDoc(String serDoc) { + this.serDoc = serDoc; + return this; + } + + public String getCodMart() { + return codMart; + } + + public ScaricoUdcInDocumentDTO setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getPartitaMag() { + return partitaMag; + } + + public ScaricoUdcInDocumentDTO setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + public String getCodJcom() { + return codJcom; + } + + public ScaricoUdcInDocumentDTO setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public BigDecimal getQtaCol() { + return qtaCol; + } + + public ScaricoUdcInDocumentDTO setQtaCol(BigDecimal qtaCol) { + this.qtaCol = qtaCol; + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public ScaricoUdcInDocumentDTO setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + + public BigDecimal getNumCnf() { + return numCnf; + } + + public ScaricoUdcInDocumentDTO setNumCnf(BigDecimal numCnf) { + this.numCnf = numCnf; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaActivity.java index 0c3f1e76..d91ea254 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_dettaglio_linea/ProdDettaglioLineaActivity.java @@ -326,6 +326,7 @@ public class ProdDettaglioLineaActivity extends BaseActivity implements ProdDett null, () -> { DialogSimpleMessageView.makeInfoDialog( + this, null, Html.fromHtml("Vuoi recuperare del materiale prima di chiudere gli ordini?"), null, diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java index a7ef56c7..da75d5ff 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteFragment.java @@ -123,7 +123,7 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim handler.post(() -> { - DialogUltimeConsegneFiltroAvanzatoView.newInstance(gtbAnags, filterResult -> { + DialogUltimeConsegneFiltroAvanzatoView.newInstance(requireContext(), gtbAnags, filterResult -> { if (filterResult == null || filterResult.isAborted()) popMe(); @@ -132,7 +132,8 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim refreshConsegne(filterResult.getGtbAnag()); }); }) - .show(requireActivity().getSupportFragmentManager(), "dialog-filtro-ultime-consegne"); + .show(); +// .show(requireActivity().getSupportFragmentManager(), "dialog-filtro-ultime-consegne"); }); } catch (Exception e) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java index 56b6d91f..c3826294 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/UltimeConsegneClienteViewModel.java @@ -77,6 +77,9 @@ public class UltimeConsegneClienteViewModel { var result = this.mUltimeConsegneClienteRESTConsumer.makeSynchronousRetrieveDocumentiFromBarcodeUdcRequest(barcodeUl); + if(result == null) + throw new Exception("Nessun documento trovato per il codice barcode: " + barcodeUl + ""); + var filteredDocumentList = originalDocumentList.stream() .filter(x -> result.stream().anyMatch(y -> x.getDtbDoctKey().equals(y))) .collect(Collectors.toUnmodifiableList()); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzatoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzatoView.java index 86f93a56..3b10d55d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzatoView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/dialog/DialogUltimeConsegneFiltroAvanzatoView.java @@ -1,15 +1,13 @@ package it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog; -import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; -import android.os.Bundle; import android.view.LayoutInflater; import android.view.WindowManager; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.lifecycle.LifecycleOwner; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -20,31 +18,28 @@ 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.RunnableArgs; import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.databinding.DialogUltimeConsegneFiltroAvanzatoBinding; import it.integry.integrywmsnative.ui.adapter.SimpleAutoCompleteDropdownAdapter; -public class DialogUltimeConsegneFiltroAvanzatoView extends BaseDialogFragment { +public class DialogUltimeConsegneFiltroAvanzatoView extends MaterialAlertDialogBuilder { @Inject DialogUltimeConsegneFiltroAvanzatoViewModel mViewModel; - private DialogUltimeConsegneFiltroAvanzatoBinding mBindings; - private Context mContext; + private final DialogUltimeConsegneFiltroAvanzatoBinding mBindings; + private final Context mContext; private SimpleAutoCompleteDropdownAdapter arrayAdapterRagSoc; private final RunnableArgs onConfirm; - - public static DialogUltimeConsegneFiltroAvanzatoView newInstance(final List items, RunnableArgs onConfirm) { - return new DialogUltimeConsegneFiltroAvanzatoView(items, onConfirm); + public static DialogUltimeConsegneFiltroAvanzatoView newInstance(Context context, final List items, RunnableArgs onConfirm) { + return new DialogUltimeConsegneFiltroAvanzatoView(context, items, onConfirm); } - - private DialogUltimeConsegneFiltroAvanzatoView(final List items, RunnableArgs onConfirm) { - super(); - + public DialogUltimeConsegneFiltroAvanzatoView(@NonNull Context context, final List items, RunnableArgs onConfirm) { + super(context); + this.mContext = context; this.onConfirm = onConfirm; MainApplication.appComponent @@ -52,55 +47,41 @@ public class DialogUltimeConsegneFiltroAvanzatoView extends BaseDialogFragment { .create() .inject(this); mViewModel.init(items); - } - - @NonNull - @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - this.mContext = requireContext(); mBindings = DialogUltimeConsegneFiltroAvanzatoBinding.inflate(LayoutInflater.from(this.mContext), null, false); - mBindings.setLifecycleOwner(this); // Necessario per LiveData e binding + if (mContext instanceof LifecycleOwner) { + mBindings.setLifecycleOwner((LifecycleOwner) mContext); // Necessario per LiveData e binding + } mBindings.setView(this); mBindings.setViewmodel(mViewModel); setCancelable(false); - var alertDialog = new MaterialAlertDialogBuilder(this.mContext) - .setView(mBindings.getRoot()) - .setCancelable(isCancelable()) - .setPositiveButton(R.string.ok, (dialog, which) -> onOk()) - .setNegativeButton(R.string.abort, (dialog, which) -> { - if (onConfirm != null) onConfirm.run(Result.aborted()); - }) - .setNeutralButton(R.string.reset, (dialog, which) -> {}) - .create(); - - alertDialog.setCanceledOnTouchOutside(isCancelable()); - alertDialog.setOnShowListener(this); // Rimosso se non specificamente necessario per altro - alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + setView(mBindings.getRoot()); + setPositiveButton(R.string.ok, (dialog, which) -> onOk()); + setNegativeButton(R.string.abort, (dialog, which) -> { + if (onConfirm != null) onConfirm.run(Result.aborted()); + }); + setNeutralButton(R.string.reset, (dialog, which) -> { + }); this.initDropDowns(); - - return alertDialog; } + @NonNull @Override - public void onShow(DialogInterface dialogInterface) { - super.onShow(dialogInterface); + public AlertDialog create() { + AlertDialog alertDialog = super.create(); + alertDialog.setCanceledOnTouchOutside(false); + alertDialog.setOnShowListener(dialogInterface -> { + alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); - var alertDialog = ((AlertDialog) dialogInterface); - - var neutralButton = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); - neutralButton.setOnClickListener(view -> { - reset(); + var neutralButton = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); + neutralButton.setOnClickListener(view -> { + reset(); + }); }); - } - - @Override - public void dismiss() { - if (getDialog() != null) getDialog().dismiss(); - super.dismiss(); + return alertDialog; } private void initDropDowns() { @@ -109,7 +90,7 @@ public class DialogUltimeConsegneFiltroAvanzatoView extends BaseDialogFragment { mContext, R.layout.dialog_vendita_filtro_avanzato__single_item, // Assicurati che questo layout sia un semplice TextView mViewModel.getAvailableRagSocsStrings(), // LiveData> - this // LifecycleOwner + (LifecycleOwner) mContext // Assumendo che il contesto sia un LifecycleOwner ); mBindings.filledExposedDropdownRagSoc.setAdapter(arrayAdapterRagSoc); @@ -136,13 +117,6 @@ public class DialogUltimeConsegneFiltroAvanzatoView extends BaseDialogFragment { onConfirm.run(Result.completed(mViewModel.getRagSocBindable().getValue(), mViewModel.getDataDocBindable().getValue())); } - @Override - public void onDestroyView() { - super.onDestroyView(); - mBindings = null; // Per evitare memory leaks - } - - public static class Result { private final GtbAnag gtbAnag; private final Date dataDoc; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java index 588ec9d9..37f231c1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/UltimiArriviFornitoreFragment.java @@ -129,7 +129,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl this.onLoadingEnded(); handler.post(() -> { - DialogUltimeConsegneFiltroAvanzatoView.newInstance(gtbAnags, filterResult -> { + DialogUltimeConsegneFiltroAvanzatoView.newInstance(requireContext(), gtbAnags, filterResult -> { if (filterResult == null || filterResult.isAborted()) popMe(); @@ -138,8 +138,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl refreshArrivi(filterResult.getGtbAnag(), null); resetSelected(); }); - }) - .show(requireActivity().getSupportFragmentManager(), "dialog-filtro-ultimi-arrivi"); + }); }); } catch (Exception e) { this.onError(e); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoView.java index cd0cdba1..c40a05e8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultimi_arrivi_fornitore/dialog/DialogUltimiArriviFornitoreFiltroAvanzatoView.java @@ -1,15 +1,13 @@ package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog; -import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; -import android.os.Bundle; import android.view.LayoutInflater; import android.view.WindowManager; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; +import androidx.lifecycle.LifecycleOwner; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -20,13 +18,12 @@ 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.RunnableArgs; import it.integry.integrywmsnative.core.model.GtbAnag; import it.integry.integrywmsnative.databinding.DialogUltimiArriviFornitoreFiltroAvanzatoBinding; import it.integry.integrywmsnative.ui.adapter.SimpleAutoCompleteDropdownAdapter; -public class DialogUltimiArriviFornitoreFiltroAvanzatoView extends BaseDialogFragment { +public class DialogUltimiArriviFornitoreFiltroAvanzatoView extends MaterialAlertDialogBuilder { @Inject DialogUltimiArriviFornitoreFiltroAvanzatoViewModel mViewModel; @@ -38,13 +35,13 @@ public class DialogUltimiArriviFornitoreFiltroAvanzatoView extends BaseDialogFra private final RunnableArgs onConfirm; - public static DialogUltimiArriviFornitoreFiltroAvanzatoView newInstance(final List items, RunnableArgs onConfirm) { - return new DialogUltimiArriviFornitoreFiltroAvanzatoView(items, onConfirm); + public static DialogUltimiArriviFornitoreFiltroAvanzatoView newInstance(Context context, final List items, RunnableArgs onConfirm) { + return new DialogUltimiArriviFornitoreFiltroAvanzatoView(context, items, onConfirm); } - private DialogUltimiArriviFornitoreFiltroAvanzatoView(final List items, RunnableArgs onConfirm) { - super(); - + private DialogUltimiArriviFornitoreFiltroAvanzatoView(@NonNull Context context, final List items, RunnableArgs onConfirm) { + super(context); + this.mContext = context; this.onConfirm = onConfirm; MainApplication.appComponent @@ -53,59 +50,41 @@ public class DialogUltimiArriviFornitoreFiltroAvanzatoView extends BaseDialogFra .inject(this); mViewModel.init(items); - } - - - @NonNull - @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - this.mContext = requireContext(); mBindings = DialogUltimiArriviFornitoreFiltroAvanzatoBinding.inflate(LayoutInflater.from(this.mContext), null, false); - mBindings.setLifecycleOwner(this); + if (mContext instanceof LifecycleOwner) { + mBindings.setLifecycleOwner((LifecycleOwner) mContext); // Necessario per LiveData e binding + } mBindings.setView(this); mBindings.setViewmodel(mViewModel); - setCancelable(false); - var alertDialog = new MaterialAlertDialogBuilder(this.mContext) - .setView(mBindings.getRoot()) - .setCancelable(isCancelable()) - .setPositiveButton(R.string.ok, (dialog, which) -> onOk()) - .setNegativeButton(R.string.abort, (dialog, which) -> { - if (onConfirm != null) onConfirm.run(Result.aborted()); - }) - .setNeutralButton(R.string.reset, (dialog, which) -> {}) - .create(); - - - alertDialog.setCanceledOnTouchOutside(isCancelable()); - alertDialog.setOnShowListener(this); // Rimosso se non specificamente necessario per altro - alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + setView(mBindings.getRoot()); + setPositiveButton(R.string.ok, (dialog, which) -> onOk()); + setNegativeButton(R.string.abort, (dialog, which) -> { + if (onConfirm != null) onConfirm.run(Result.aborted()); + }); + setNeutralButton(R.string.reset, (dialog, which) -> { + }); this.initDropDowns(); - - return alertDialog; } + @NonNull @Override - public void onShow(DialogInterface dialogInterface) { - super.onShow(dialogInterface); + public AlertDialog create() { + AlertDialog alertDialog = super.create(); + alertDialog.setCanceledOnTouchOutside(false); + alertDialog.setOnShowListener(dialogInterface -> { + alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); - var alertDialog = ((AlertDialog) dialogInterface); - - var neutralButton = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); - neutralButton.setOnClickListener(view -> { - reset(); + var neutralButton = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); + neutralButton.setOnClickListener(view -> { + reset(); + }); }); - } - - - @Override - public void dismiss() { - if (getDialog() != null) getDialog().dismiss(); - super.dismiss(); + return alertDialog; } private void initDropDowns() { @@ -114,7 +93,7 @@ public class DialogUltimiArriviFornitoreFiltroAvanzatoView extends BaseDialogFra mContext, R.layout.dialog_vendita_filtro_avanzato__single_item, // Assicurati che questo layout sia un semplice TextView mViewModel.getAvailableRagSocsStrings(), // LiveData> - this // LifecycleOwner + (LifecycleOwner) mContext // Assumendo che il contesto sia un LifecycleOwner ); mBindings.filledExposedDropdownRagSoc.setAdapter(arrayAdapterRagSoc); @@ -139,16 +118,8 @@ public class DialogUltimiArriviFornitoreFiltroAvanzatoView extends BaseDialogFra public void onOk() { if (onConfirm != null) onConfirm.run(Result.completed(mViewModel.getRagSocBindable().getValue(), mViewModel.getDataDocBindable().getValue())); -// dismiss(); } - @Override - public void onDestroyView() { - super.onDestroyView(); - mBindings = null; // Per evitare memory leaks - } - - public static class Result { private final GtbAnag gtbAnag; diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageView.java index c4ede104..67bbda21 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleMessageView.java @@ -1,18 +1,20 @@ package it.integry.integrywmsnative.view.dialogs.base; +import android.app.Activity; import android.app.Dialog; +import android.content.Context; import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; -import android.os.Bundle; import android.text.Spanned; +import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; -import android.widget.RelativeLayout; +import android.view.WindowManager; import android.widget.TextView; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.LinearLayoutCompat; import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; @@ -22,8 +24,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.util.HashMap; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; -import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.databinding.DialogBaseBinding; @@ -31,7 +31,7 @@ import it.integry.integrywmsnative.databinding.DialogBaseBinding; * Created by GiuseppeS on 22/03/2018. */ -public class DialogSimpleMessageView extends BaseDialogFragment { +public class DialogSimpleMessageView extends MaterialAlertDialogBuilder { public enum TYPE { INFO(1), @@ -58,6 +58,7 @@ public class DialogSimpleMessageView extends BaseDialogFragment { } + private final Context mContext; private final TYPE mType; private final String mTitleText; private final Spanned mMessageText; @@ -73,16 +74,16 @@ public class DialogSimpleMessageView extends BaseDialogFragment { private String neutralButtonText; private String negativeButtonText; + private AlertDialog dialog; - private DialogBaseBinding mBindings; - public static DialogSimpleMessageView newInstance(@NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) { - return new DialogSimpleMessageView(type, titleText, messageText, hashmapContent, onPositiveClick, onNegativeClick, rNeutralButtonString, onNeutralClick); + public static DialogSimpleMessageView newInstance(@NonNull Context context, @NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) { + return new DialogSimpleMessageView(context, type, titleText, messageText, hashmapContent, onPositiveClick, onNegativeClick, rNeutralButtonString, onNeutralClick); } - private DialogSimpleMessageView(@NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) { - super(); - + private DialogSimpleMessageView(@NonNull Context context, @NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) { + super(context); + this.mContext = context; this.mType = type; this.mTitleText = titleText; this.mMessageText = messageText; @@ -91,73 +92,94 @@ public class DialogSimpleMessageView extends BaseDialogFragment { this.mOnNegativeClick = onNegativeClick; this.mRNeutralButtonString = rNeutralButtonString; this.mOnNeutralClick = onNeutralClick; - } - @Override - public void onStart() { - super.onStart(); + DialogBaseBinding bindings = DialogBaseBinding.inflate(LayoutInflater.from(context), null, false); - UtilityDialog.setTo90PercentWidth(this.requireContext(), this); + setCancelable(false); + + this.initContent(bindings); + + setView(bindings.getRoot()); + + if (isPositiveVisible()) + setPositiveButton(getPositiveButtonText(), (dialog, which) -> { + if (this.mOnPositiveClick != null) this.mOnPositiveClick.run(); + }); + + if (isNeutralVisible()) + setNeutralButton(getNeutralButtonText(), (dialog, which) -> { + if (this.mOnNeutralClick != null) this.mOnNeutralClick.run(); + }); + + if (isNegativeVisible()) + setNegativeButton(getNegativeButtonText(), (dialog, which) -> { + if (this.mOnNegativeClick != null) this.mOnNegativeClick.run(); + }); } @NonNull @Override - public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - mBindings = DialogBaseBinding.inflate(LayoutInflater.from(requireContext()), null, false); - - mBindings.setView(this); - mBindings.setLifecycleOwner(this); - setCancelable(false); - - this.initContent(); - - var alertDialogBuilder = new MaterialAlertDialogBuilder(requireContext()) - .setView(mBindings.getRoot()) - .setCancelable(isCancelable()); - - if (isPositiveVisible()) - alertDialogBuilder.setPositiveButton(getPositiveButtonText(), (dialog, which) -> { - if(this.mOnPositiveClick != null) this.mOnPositiveClick.run(); - }); - - if (isNeutralVisible()) - alertDialogBuilder.setNeutralButton(getNeutralButtonText(), (dialog, which) -> { - this.mOnNeutralClick.run(); - }); - - if (isNegativeVisible()) - alertDialogBuilder.setNegativeButton(getNegativeButtonText(), (dialog, which) -> { - this.mOnNegativeClick.run(); - }); - - var alertDialog = alertDialogBuilder.create(); - alertDialog.setCanceledOnTouchOutside(isCancelable()); - return alertDialog; + public AlertDialog create() { + dialog = super.create(); +// dialog.setCanceledOnTouchOutside(isCancelable()); + dialog.setOnShowListener(d -> { + if (mContext instanceof Activity) { + Dialog dialogToShow = (Dialog) d; + if (dialogToShow.getWindow() != null) { + DisplayMetrics displayMetrics = new DisplayMetrics(); + ((Activity) mContext).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + int displayWidth = displayMetrics.widthPixels; + WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); + layoutParams.copyFrom(dialogToShow.getWindow().getAttributes()); + int dialogWindowWidth = (int) (displayWidth * 0.9f); + layoutParams.width = dialogWindowWidth; + dialogToShow.getWindow().setAttributes(layoutParams); + } + } + }); + return dialog; } - private void initContent() { + @Override + public AlertDialog show() { + if (dialog == null) { + dialog = create(); + } + if (!dialog.isShowing()) { + dialog.show(); + } + return dialog; + } + + public void dismiss() { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } + + private void initContent(DialogBaseBinding mBindings) { int colorBackgroundTitle = -1; Drawable titleIconRes = switch (mType) { case INFO -> { - colorBackgroundTitle = ContextCompat.getColor(requireContext(), R.color.colorPrimary); - yield ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.ic_info_78dp, null); + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.colorPrimary); + yield ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_info_78dp, null); } case SUCCESS -> { - colorBackgroundTitle = ContextCompat.getColor(requireContext(), R.color.green_300); - yield ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.ic_done_white_24dp, null); + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.green_300); + yield ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_done_white_24dp, null); } case WARNING -> { - colorBackgroundTitle = ContextCompat.getColor(requireContext(), R.color.yellow_600); - yield ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.ic_warning_white_24dp, null); + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.yellow_600); + yield ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_warning_white_24dp, null); } case ERROR -> { - colorBackgroundTitle = ContextCompat.getColor(requireContext(), R.color.red_300); - yield ResourcesCompat.getDrawable(requireContext().getResources(), R.drawable.ic_mood_bad_24dp, null); + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.red_300); + yield ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_mood_bad_24dp, null); } }; - this.positiveButtonText = requireContext().getText(mOnNegativeClick != null ? R.string.yes : R.string.ok).toString(); - this.negativeButtonText = requireContext().getText(R.string.no).toString(); + this.positiveButtonText = mContext.getText(mOnNegativeClick != null ? R.string.yes : R.string.ok).toString(); + this.negativeButtonText = mContext.getText(R.string.no).toString(); //Title VIEW mBindings.titleText.setText(mTitleText); @@ -177,7 +199,7 @@ public class DialogSimpleMessageView extends BaseDialogFragment { String currentKey = mHashmapContent.keySet().toArray()[i].toString(); String currentValue = mHashmapContent.get(currentKey); - RelativeLayout singleMapContent = (RelativeLayout) LayoutInflater.from(requireContext()).inflate(R.layout.dialog_custom_content_hashmap_viewmodel, hashMapContainer); + View singleMapContent = LayoutInflater.from(mContext).inflate(R.layout.dialog_custom_content_hashmap_viewmodel, hashMapContainer, false); ((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_key)).setText(currentKey); ((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_value)).setText(currentValue); @@ -189,8 +211,6 @@ public class DialogSimpleMessageView extends BaseDialogFragment { } - - public boolean isPositiveVisible() { return mOnPositiveClick != null || (!isNeutralVisible() && !isNegativeVisible()); } @@ -209,7 +229,7 @@ public class DialogSimpleMessageView extends BaseDialogFragment { } public String getNeutralButtonText() { - return mRNeutralButtonString != null && mRNeutralButtonString != -1 ? requireContext().getText(mRNeutralButtonString).toString() : null; + return mRNeutralButtonString != null && mRNeutralButtonString != -1 ? mContext.getText(mRNeutralButtonString).toString() : null; } public String getNegativeButtonText() { @@ -231,8 +251,8 @@ public class DialogSimpleMessageView extends BaseDialogFragment { if (mOnNegativeClick != null) mOnNegativeClick.run(); } - public static DialogSimpleMessageView makeInfoDialog(String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { - return newInstance(TYPE.INFO, + public static DialogSimpleMessageView makeInfoDialog(Context context, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { + return newInstance(context, TYPE.INFO, titleText, messageText, hashmapContent, @@ -241,8 +261,8 @@ public class DialogSimpleMessageView extends BaseDialogFragment { } - public static DialogSimpleMessageView makeInfoDialog(String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) { - return newInstance(TYPE.INFO, + public static DialogSimpleMessageView makeInfoDialog(Context context, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) { + return newInstance(context, TYPE.INFO, titleText, messageText, hashmapContent, @@ -251,8 +271,8 @@ public class DialogSimpleMessageView extends BaseDialogFragment { } - public static DialogSimpleMessageView makeSuccessDialog(String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { - return newInstance(TYPE.SUCCESS, + public static DialogSimpleMessageView makeSuccessDialog(Context context, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { + return newInstance(context, TYPE.SUCCESS, titleText, messageText, hashmapContent, @@ -261,8 +281,8 @@ public class DialogSimpleMessageView extends BaseDialogFragment { } - public static DialogSimpleMessageView makeWarningDialog(Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) { - return newInstance(TYPE.WARNING, + public static DialogSimpleMessageView makeWarningDialog(Context context, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) { + return newInstance(context, TYPE.WARNING, UtilityResources.getString(R.string.warning), messageText, hashmapContent, @@ -273,8 +293,8 @@ public class DialogSimpleMessageView extends BaseDialogFragment { } - public static DialogSimpleMessageView makeWarningDialog(Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { - return newInstance(TYPE.WARNING, + public static DialogSimpleMessageView makeWarningDialog(Context context, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { + return newInstance(context, TYPE.WARNING, UtilityResources.getString(R.string.warning), messageText, hashmapContent, @@ -282,9 +302,9 @@ public class DialogSimpleMessageView extends BaseDialogFragment { null, -1, null); } - public static DialogSimpleMessageView makeErrorDialog(Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { + public static DialogSimpleMessageView makeErrorDialog(Context context, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick) { - return newInstance(TYPE.ERROR, + return newInstance(context, TYPE.ERROR, UtilityResources.getString(R.string.ops), messageText, hashmapContent, @@ -292,9 +312,9 @@ public class DialogSimpleMessageView extends BaseDialogFragment { null, -1, null); } - public static DialogSimpleMessageView makeErrorDialog(Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) { + public static DialogSimpleMessageView makeErrorDialog(Context context, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) { - return newInstance(TYPE.ERROR, + return newInstance(context, TYPE.ERROR, UtilityResources.getString(R.string.ops), messageText, hashmapContent, @@ -304,4 +324,4 @@ public class DialogSimpleMessageView extends BaseDialogFragment { } -} +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_contenuto_bancale.xml b/app/src/main/res/layout/activity_contenuto_bancale.xml index ad348e0e..0650e1a5 100644 --- a/app/src/main/res/layout/activity_contenuto_bancale.xml +++ b/app/src/main/res/layout/activity_contenuto_bancale.xml @@ -193,7 +193,7 @@ android:layout_height="wrap_content" android:layout_marginStart="4dp" android:textColor="@android:color/black" - android:text="@{Html.fromHtml(context.getString(R.string.doc_testata, view.mtbColt.getNumDoc(), view.mtbColt.getDataDoc()))}" + android:text="@{Html.fromHtml(@string/doc_testata(view.mtbColt.numDoc, UtilityDate.formatDate(view.mtbColt.dataDoc, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)))}" tools:text="n. 123 del 29/03/2023" /> diff --git a/app/src/main/res/layout/dialog_ultime_consegne_filtro_avanzato.xml b/app/src/main/res/layout/dialog_ultime_consegne_filtro_avanzato.xml index 16b3c433..05a86bcd 100644 --- a/app/src/main/res/layout/dialog_ultime_consegne_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_ultime_consegne_filtro_avanzato.xml @@ -81,8 +81,7 @@ android:singleLine="true" android:textAppearance="?attr/textAppearanceSubtitle1" android:minHeight="?attr/listPreferredItemHeightSmall" - app:binding="@{viewmodel.dataDocBindable}" - app:parentView="@{view}" /> + /> diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index eaa0adc1..85359b88 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -37,5 +37,7 @@ @style/ThemeOverlay.MaterialComponents.MaterialCalendar @style/CustomBottomSheetDialog + + true