Completate implementazioni per resi fornitore

This commit is contained in:
2025-06-19 17:30:05 +02:00
parent d44b726a66
commit 25e3a5ddc4
26 changed files with 573 additions and 242 deletions

View File

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

View File

@@ -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<Date> observableDate, BaseDialogFragment parentFragment, boolean warningOnOldDates) {
public static void bindTextInputEditTextDate(TextInputEditText view, final ObservableField<Date> observableDate, DialogFragment parentFragment, boolean warningOnOldDates) {
Pair<ObservableField<Date>, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable);
if (pair == null || pair.first != observableDate) {
if (pair != null) {

View File

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

View File

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

View File

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

View File

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

View File

@@ -290,6 +290,8 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public List<MtbColr> fillMtbAartsOfMtbColrsSynchronized(List<MtbColr> mtbColrs) throws Exception {
List<String> codMarts = new ArrayList<>(mtbColrs.stream()

View File

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

View File

@@ -141,7 +141,7 @@ public class UpdatesManager {
try {
fileDownloader.download();
} catch (Exception e) {
progressDialogBuilder.dismissAllowingStateLoss();
progressDialogBuilder.dismiss();
UtilityExceptions.defaultException(context, e);
}
});

View File

@@ -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,

View File

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

View File

@@ -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<ScaricoUdcInDocumentDTO> makeSynchronousRetrieveScarichiUdcInDocument(String barcodeUdc, List<DtbDoctKey> 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<>();
}
}

View File

@@ -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<ServiceRESTResponse<RetrieveScarichiUdcInDocumentResponseDTO>> retrieveScarichiUdcInDocuments(
@Query("barcodeUdc") String barcodeUdc,
@Body RetrieveScarichiUdcInDocumentRequestDTO requestBody
);
}

View File

@@ -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<DtbDoctKey> documents;
public List<DtbDoctKey> getDocuments() {
return documents;
}
public RetrieveScarichiUdcInDocumentRequestDTO setDocuments(List<DtbDoctKey> documents) {
this.documents = documents;
return this;
}
}

View File

@@ -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<ScaricoUdcInDocumentDTO> scarichiUdc;
public List<ScaricoUdcInDocumentDTO> getScarichiUdc() {
return scarichiUdc;
}
public RetrieveScarichiUdcInDocumentResponseDTO setScarichiUdc(List<ScaricoUdcInDocumentDTO> scarichiUdc) {
this.scarichiUdc = scarichiUdc;
return this;
}
}

View File

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

View File

@@ -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,

View File

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

View File

@@ -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: <b>" + barcodeUl + "</b>");
var filteredDocumentList = originalDocumentList.stream()
.filter(x -> result.stream().anyMatch(y -> x.getDtbDoctKey().equals(y)))
.collect(Collectors.toUnmodifiableList());

View File

@@ -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<String> arrayAdapterRagSoc;
private final RunnableArgs<Result> onConfirm;
public static DialogUltimeConsegneFiltroAvanzatoView newInstance(final List<GtbAnag> items, RunnableArgs<Result> onConfirm) {
return new DialogUltimeConsegneFiltroAvanzatoView(items, onConfirm);
public static DialogUltimeConsegneFiltroAvanzatoView newInstance(Context context, final List<GtbAnag> items, RunnableArgs<Result> onConfirm) {
return new DialogUltimeConsegneFiltroAvanzatoView(context, items, onConfirm);
}
private DialogUltimeConsegneFiltroAvanzatoView(final List<GtbAnag> items, RunnableArgs<Result> onConfirm) {
super();
public DialogUltimeConsegneFiltroAvanzatoView(@NonNull Context context, final List<GtbAnag> items, RunnableArgs<Result> 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) -> {
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) -> {})
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this); // Rimosso se non specificamente necessario per altro
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
});
setNeutralButton(R.string.reset, (dialog, which) -> {
});
this.initDropDowns();
return alertDialog;
}
@NonNull
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
var alertDialog = ((AlertDialog) dialogInterface);
public AlertDialog create() {
AlertDialog alertDialog = super.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setOnShowListener(dialogInterface -> {
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
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<List<String>>
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;

View File

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

View File

@@ -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<Result> onConfirm;
public static DialogUltimiArriviFornitoreFiltroAvanzatoView newInstance(final List<GtbAnag> items, RunnableArgs<Result> onConfirm) {
return new DialogUltimiArriviFornitoreFiltroAvanzatoView(items, onConfirm);
public static DialogUltimiArriviFornitoreFiltroAvanzatoView newInstance(Context context, final List<GtbAnag> items, RunnableArgs<Result> onConfirm) {
return new DialogUltimiArriviFornitoreFiltroAvanzatoView(context, items, onConfirm);
}
private DialogUltimiArriviFornitoreFiltroAvanzatoView(final List<GtbAnag> items, RunnableArgs<Result> onConfirm) {
super();
private DialogUltimiArriviFornitoreFiltroAvanzatoView(@NonNull Context context, final List<GtbAnag> items, RunnableArgs<Result> 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) -> {
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) -> {})
.create();
alertDialog.setCanceledOnTouchOutside(isCancelable());
alertDialog.setOnShowListener(this); // Rimosso se non specificamente necessario per altro
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
});
setNeutralButton(R.string.reset, (dialog, which) -> {
});
this.initDropDowns();
return alertDialog;
}
@NonNull
@Override
public void onShow(DialogInterface dialogInterface) {
super.onShow(dialogInterface);
var alertDialog = ((AlertDialog) dialogInterface);
public AlertDialog create() {
AlertDialog alertDialog = super.create();
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setOnShowListener(dialogInterface -> {
alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
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<List<String>>
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;

View File

@@ -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<String, String> 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<String, String> 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<String, String> 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<String, String> 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();
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);
}
}
});
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;
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<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.INFO,
public static DialogSimpleMessageView makeInfoDialog(Context context, String titleText, Spanned messageText, HashMap<String, String> 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<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return newInstance(TYPE.INFO,
public static DialogSimpleMessageView makeInfoDialog(Context context, String titleText, Spanned messageText, HashMap<String, String> 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<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.SUCCESS,
public static DialogSimpleMessageView makeSuccessDialog(Context context, String titleText, Spanned messageText, HashMap<String, String> 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<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return newInstance(TYPE.WARNING,
public static DialogSimpleMessageView makeWarningDialog(Context context, Spanned messageText, HashMap<String, String> 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<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.WARNING,
public static DialogSimpleMessageView makeWarningDialog(Context context, Spanned messageText, HashMap<String, String> 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<String, String> hashmapContent, Runnable onPositiveClick) {
public static DialogSimpleMessageView makeErrorDialog(Context context, Spanned messageText, HashMap<String, String> 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<String, String> hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) {
public static DialogSimpleMessageView makeErrorDialog(Context context, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) {
return newInstance(TYPE.ERROR,
return newInstance(context, TYPE.ERROR,
UtilityResources.getString(R.string.ops),
messageText,
hashmapContent,

View File

@@ -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" />
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@@ -81,8 +81,7 @@
android:singleLine="true"
android:textAppearance="?attr/textAppearanceSubtitle1"
android:minHeight="?attr/listPreferredItemHeightSmall"
app:binding="@{viewmodel.dataDocBindable}"
app:parentView="@{view}" />
/>
</com.google.android.material.textfield.TextInputLayout>

View File

@@ -37,5 +37,7 @@
<item name="materialCalendarTheme">@style/ThemeOverlay.MaterialComponents.MaterialCalendar</item>
<item name="bottomSheetDialogTheme">@style/CustomBottomSheetDialog</item>
<item name="android:windowActivityTransitions">true</item>
</style>
</resources>