Refactoring ultimi arrivi fornitori
This commit is contained in:
@@ -109,6 +109,8 @@ import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUlt
|
|||||||
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzatoModule;
|
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzatoModule;
|
||||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent;
|
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent;
|
||||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule;
|
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule;
|
||||||
|
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzatoComponent;
|
||||||
|
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzatoModule;
|
||||||
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent;
|
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceComponent;
|
||||||
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule;
|
import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceModule;
|
||||||
import it.integry.integrywmsnative.view.bottom_sheet__item_edit.BottomSheetItemEditComponent;
|
import it.integry.integrywmsnative.view.bottom_sheet__item_edit.BottomSheetItemEditComponent;
|
||||||
@@ -254,7 +256,8 @@ import it.integry.integrywmsnative.view.dialogs.update_available.DialogUpdateAva
|
|||||||
DialogExtraInfoModule.class,
|
DialogExtraInfoModule.class,
|
||||||
DialogAskDepositoModule.class,
|
DialogAskDepositoModule.class,
|
||||||
DialogChooseArtFromListaArtsModule.class,
|
DialogChooseArtFromListaArtsModule.class,
|
||||||
DialogUltimeConsegneFiltroAvanzatoModule.class
|
DialogUltimeConsegneFiltroAvanzatoModule.class,
|
||||||
|
DialogUltimiArriviFornitoreFiltroAvanzatoModule.class
|
||||||
})
|
})
|
||||||
public interface MainApplicationComponent {
|
public interface MainApplicationComponent {
|
||||||
|
|
||||||
@@ -425,7 +428,9 @@ public interface MainApplicationComponent {
|
|||||||
|
|
||||||
DialogChooseArtFromListaArtsComponent.Factory dialogChooseArtFromListaArtsComponent();
|
DialogChooseArtFromListaArtsComponent.Factory dialogChooseArtFromListaArtsComponent();
|
||||||
|
|
||||||
DialogUltimeConsegneFiltroAvanzatoComponent.Factory dialogDialogUltimeConsegneFiltroAvanzatoComponent();
|
DialogUltimeConsegneFiltroAvanzatoComponent.Factory dialogUltimeConsegneFiltroAvanzatoComponent();
|
||||||
|
|
||||||
|
DialogUltimiArriviFornitoreFiltroAvanzatoComponent.Factory dialogUltimiArriviFornitoreFiltroAvanzatoComponent();
|
||||||
|
|
||||||
void inject(MainApplication mainApplication);
|
void inject(MainApplication mainApplication);
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,11 @@ public class DocumentoResoDTO {
|
|||||||
@SerializedName("codMdep")
|
@SerializedName("codMdep")
|
||||||
private String codMdep;
|
private String codMdep;
|
||||||
|
|
||||||
public BindableBoolean selected = new BindableBoolean(false);;
|
@SerializedName("dataReg")
|
||||||
|
private LocalDate dataReg;
|
||||||
|
|
||||||
|
public BindableBoolean selected = new BindableBoolean(false);
|
||||||
|
;
|
||||||
|
|
||||||
public DocumentoResoDTO() {
|
public DocumentoResoDTO() {
|
||||||
}
|
}
|
||||||
@@ -70,7 +74,6 @@ public class DocumentoResoDTO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public String getCodAnag() {
|
public String getCodAnag() {
|
||||||
return codAnag;
|
return codAnag;
|
||||||
}
|
}
|
||||||
@@ -189,6 +192,7 @@ public class DocumentoResoDTO {
|
|||||||
this.numOrd = numOrd;
|
this.numOrd = numOrd;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDateTime getDataInizTrasp() {
|
public LocalDateTime getDataInizTrasp() {
|
||||||
return dataInizTrasp;
|
return dataInizTrasp;
|
||||||
}
|
}
|
||||||
@@ -229,6 +233,13 @@ public class DocumentoResoDTO {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LocalDate getDataReg() {
|
||||||
|
return dataReg;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDataReg(LocalDate dataReg) {
|
||||||
|
this.dataReg = dataReg;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean equalsKey(DocumentoResoDTO that) {
|
public boolean equalsKey(DocumentoResoDTO that) {
|
||||||
return getNumDoc() == that.getNumDoc() &&
|
return getNumDoc() == that.getNumDoc() &&
|
||||||
@@ -264,18 +275,30 @@ public class DocumentoResoDTO {
|
|||||||
Objects.equals(getNumOrd(), that.getNumOrd()) &&
|
Objects.equals(getNumOrd(), that.getNumOrd()) &&
|
||||||
Objects.equals(getDataInizTrasp(), that.getDataInizTrasp()) &&
|
Objects.equals(getDataInizTrasp(), that.getDataInizTrasp()) &&
|
||||||
Objects.equals(getGestione(), that.getGestione()) &&
|
Objects.equals(getGestione(), that.getGestione()) &&
|
||||||
Objects.equals(getCodMdep(), that.getCodMdep());
|
Objects.equals(getCodMdep(), that.getCodMdep()) &&
|
||||||
|
Objects.equals(getDataReg(), that.getDataReg()) &&
|
||||||
|
Objects.equals(getSelected(), that.getSelected());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(getCodAnag(), getCounterConsegna(),
|
return Objects.hash(getCodAnag(),
|
||||||
getCodDtip(), getDataDoc(),
|
getCounterConsegna(),
|
||||||
getSerDoc(), getNumDoc(),
|
getCodDtip(),
|
||||||
getDestinatario(), getIndirizzo(),
|
getDataDoc(),
|
||||||
getRagSoc(), getCompilatoDa(),
|
getSerDoc(),
|
||||||
getRifOrd(), getDataOrd(),
|
getNumDoc(),
|
||||||
getNumOrd(), getDataInizTrasp(),
|
getDestinatario(),
|
||||||
getGestione(), getCodMdep());
|
getIndirizzo(),
|
||||||
|
getRagSoc(),
|
||||||
|
getCompilatoDa(),
|
||||||
|
getRifOrd(),
|
||||||
|
getDataOrd(),
|
||||||
|
getNumOrd(),
|
||||||
|
getDataInizTrasp(),
|
||||||
|
getGestione(),
|
||||||
|
getCodMdep(),
|
||||||
|
getDataReg(),
|
||||||
|
getSelected());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ public class PickingResiViewModel {
|
|||||||
.withoutNulls()
|
.withoutNulls()
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
if (foundGestioni.size() > 1) {
|
if (foundGestioni.size() != 1) {
|
||||||
throw new Exception("Sono stati caricati documenti con diverse gestioni");
|
throw new Exception("Sono stati caricati documenti con diverse gestioni");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ public class PickingResiViewModel {
|
|||||||
.distinct()
|
.distinct()
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
if (foundCodAnags.size() > 1) {
|
if (foundCodAnags.size() != 1) {
|
||||||
throw new Exception("Sono stati caricati documenti con diversi codici anagrafici");
|
throw new Exception("Sono stati caricati documenti con diversi codici anagrafici");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import androidx.databinding.DataBindingUtil;
|
|||||||
import androidx.databinding.ObservableArrayList;
|
import androidx.databinding.ObservableArrayList;
|
||||||
import androidx.lifecycle.MutableLiveData;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
|
||||||
import com.ravikoradiya.liveadapter.LiveAdapter;
|
import com.ravikoradiya.liveadapter.LiveAdapter;
|
||||||
import com.ravikoradiya.liveadapter.Type;
|
import com.ravikoradiya.liveadapter.Type;
|
||||||
|
|
||||||
@@ -113,13 +112,12 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim
|
|||||||
|
|
||||||
|
|
||||||
public void openFilterDialog() {
|
public void openFilterDialog() {
|
||||||
|
|
||||||
this.onLoadingStarted();
|
this.onLoadingStarted();
|
||||||
|
|
||||||
executorService.execute(() -> {
|
executorService.execute(() -> {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
List<GtbAnag> gtbAnags = this.mViewModel.loadCodAnagClienti();
|
List<GtbAnag> gtbAnags = this.mViewModel.loadAnagClienti();
|
||||||
this.onLoadingEnded();
|
this.onLoadingEnded();
|
||||||
|
|
||||||
handler.post(() -> {
|
handler.post(() -> {
|
||||||
@@ -144,8 +142,6 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim
|
|||||||
|
|
||||||
|
|
||||||
private void initRecyclerView() {
|
private void initRecyclerView() {
|
||||||
|
|
||||||
|
|
||||||
var mutableListWithSeparators = new MutableLiveData<List<Object>>();
|
var mutableListWithSeparators = new MutableLiveData<List<Object>>();
|
||||||
mViewModel.getDocuments().observe(getViewLifecycleOwner(), documentList -> {
|
mViewModel.getDocuments().observe(getViewLifecycleOwner(), documentList -> {
|
||||||
executorService.execute(() -> {
|
executorService.execute(() -> {
|
||||||
@@ -259,11 +255,9 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim
|
|||||||
}
|
}
|
||||||
|
|
||||||
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
|
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
|
||||||
List<DocumentoResoDTO> sortedDataset = Stream.of(dataset)
|
return dataset.stream()
|
||||||
.sortBy(DocumentoResoDTO::getRagSoc)
|
.sorted((x1, x2) -> x1.getRagSoc().compareToIgnoreCase(x2.getRagSoc()))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
return sortedDataset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -312,6 +306,8 @@ public class UltimeConsegneClienteFragment extends BaseFragment implements Ultim
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
|
BarcodeManager.removeCallback(mBarcodeScannerInstanceID);
|
||||||
|
|
||||||
for (Runnable onPreDestroy : mOnPreDestroyList) {
|
for (Runnable onPreDestroy : mOnPreDestroyList) {
|
||||||
onPreDestroy.run();
|
onPreDestroy.run();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ public class UltimeConsegneClienteViewModel {
|
|||||||
this.mCodMdep = codMdep;
|
this.mCodMdep = codMdep;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<GtbAnag> loadCodAnagClienti() throws Exception {
|
public List<GtbAnag> loadAnagClienti() throws Exception {
|
||||||
var gtbAnags = this.mUltimeConsegneClienteRESTConsumer.makeSynchronousRetrieveAvailableCodAnagClientiRequest();
|
var gtbAnags = this.mUltimeConsegneClienteRESTConsumer.makeSynchronousRetrieveAvailableAnagClientiRequest();
|
||||||
mGtbAnagClienti.postValue(gtbAnags);
|
mGtbAnagClienti.postValue(gtbAnags);
|
||||||
|
|
||||||
return gtbAnags;
|
return gtbAnags;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public class DialogUltimeConsegneFiltroAvanzatoView extends BaseDialogFragment {
|
|||||||
this.onConfirm = onConfirm;
|
this.onConfirm = onConfirm;
|
||||||
|
|
||||||
MainApplication.appComponent
|
MainApplication.appComponent
|
||||||
.dialogDialogUltimeConsegneFiltroAvanzatoComponent()
|
.dialogUltimeConsegneFiltroAvanzatoComponent()
|
||||||
.create()
|
.create()
|
||||||
.inject(this);
|
.inject(this);
|
||||||
mViewModel.init(items);
|
mViewModel.init(items);
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public class UltimeConsegneClienteRESTConsumer extends _BaseRESTConsumer {
|
|||||||
this.systemRESTConsumer = systemRESTConsumer;
|
this.systemRESTConsumer = systemRESTConsumer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<GtbAnag> makeSynchronousRetrieveAvailableCodAnagClientiRequest() throws Exception {
|
public List<GtbAnag> makeSynchronousRetrieveAvailableAnagClientiRequest() throws Exception {
|
||||||
|
|
||||||
var response = restBuilder.getService(UltimeConsegneClienteRESTConsumerService.class)
|
var response = restBuilder.getService(UltimeConsegneClienteRESTConsumerService.class)
|
||||||
.retrieveClienti()
|
.retrieveClienti()
|
||||||
|
|||||||
@@ -12,13 +12,14 @@ import androidx.annotation.Nullable;
|
|||||||
import androidx.appcompat.widget.AppCompatTextView;
|
import androidx.appcompat.widget.AppCompatTextView;
|
||||||
import androidx.databinding.DataBindingUtil;
|
import androidx.databinding.DataBindingUtil;
|
||||||
import androidx.databinding.ObservableArrayList;
|
import androidx.databinding.ObservableArrayList;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
import com.annimon.stream.Optional;
|
import com.ravikoradiya.liveadapter.LiveAdapter;
|
||||||
import com.annimon.stream.Stream;
|
import com.ravikoradiya.liveadapter.Type;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
@@ -40,11 +41,13 @@ import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
|||||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
||||||
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
|
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
|
||||||
|
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListHeaderBinding;
|
||||||
|
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListSingleItemBinding;
|
||||||
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
|
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
|
||||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.ui.UltimiArriviFornitoreListAdapter;
|
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzatoView;
|
||||||
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
|
|
||||||
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
||||||
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrList;
|
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_mtbcolr_list.DialogChooseArtsFromMtbColrList;
|
||||||
|
import kotlin.Unit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A simple {@link BaseFragment} subclass.
|
* A simple {@link BaseFragment} subclass.
|
||||||
@@ -62,7 +65,6 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
|
|||||||
UltimiArriviFornitoreViewModel mViewModel;
|
UltimiArriviFornitoreViewModel mViewModel;
|
||||||
|
|
||||||
private FragmentUltimiArriviFornitoreBinding mBindings;
|
private FragmentUltimiArriviFornitoreBinding mBindings;
|
||||||
private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel;
|
|
||||||
|
|
||||||
public UltimiArriviFornitoreFragment() {
|
public UltimiArriviFornitoreFragment() {
|
||||||
// Required empty public constructor
|
// Required empty public constructor
|
||||||
@@ -106,7 +108,7 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
|
|||||||
|
|
||||||
this.mBindings.mainFab.hide();
|
this.mBindings.mainFab.hide();
|
||||||
this.mBindings.mainFab.setOnClickListener(v -> {
|
this.mBindings.mainFab.setOnClickListener(v -> {
|
||||||
dispatchConsegne();
|
dispatchArrivi();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.mViewModel.getDocuments().observe(this.getViewLifecycleOwner(), this::refreshList);
|
this.mViewModel.getDocuments().observe(this.getViewLifecycleOwner(), this::refreshList);
|
||||||
@@ -116,31 +118,107 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
|
|||||||
|
|
||||||
|
|
||||||
public void openFilterDialog() {
|
public void openFilterDialog() {
|
||||||
this.mViewModel.loadCodAnagFornitori(gtbAnags -> {
|
this.onLoadingStarted();
|
||||||
handler.post(() -> {
|
|
||||||
DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> {
|
|
||||||
mAppliedFilterViewModel = filter;
|
executorService.execute(() -> {
|
||||||
filterItems(null);
|
|
||||||
}).show();
|
try {
|
||||||
});
|
var gtbAnags = this.mViewModel.loadAnagFornitori();
|
||||||
|
this.onLoadingEnded();
|
||||||
|
|
||||||
|
handler.post(() -> {
|
||||||
|
DialogUltimeConsegneFiltroAvanzatoView.newInstance(gtbAnags, filterResult -> {
|
||||||
|
if (filterResult == null || filterResult.isAborted())
|
||||||
|
popMe();
|
||||||
|
|
||||||
|
else
|
||||||
|
executorService.execute(() -> {
|
||||||
|
refreshArrivi(filterResult.getGtbAnag());
|
||||||
|
resetSelected();
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.show(requireActivity().getSupportFragmentManager(), "dialog-filtro-ultimi-arrivi");
|
||||||
|
});
|
||||||
|
} catch (Exception e) {
|
||||||
|
this.onError(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void resetSelected() {
|
||||||
|
handler.post(() -> {
|
||||||
|
for (DocumentoResoDTO document : mDocumentiMutableData) {
|
||||||
|
document.setSelected(false);
|
||||||
|
}
|
||||||
|
mBindings.mainFab.hide();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void initRecyclerView() {
|
private void initRecyclerView() {
|
||||||
UltimiArriviFornitoreListAdapter mAdapter =
|
var mutableListWithSeparators = new MutableLiveData<List<Object>>();
|
||||||
new UltimiArriviFornitoreListAdapter(getActivity(), mDocumentiMutableData);
|
mViewModel.getDocuments().observe(getViewLifecycleOwner(), documentList -> {
|
||||||
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
|
executorService.execute(() -> {
|
||||||
mAdapter.setEmptyView(mBindings.emptyView);
|
String lastSeparator = null;
|
||||||
|
|
||||||
|
// Prealloca la lista per evitare ridimensionamenti costosi
|
||||||
|
int estimatedSize = documentList.size() + (documentList.isEmpty() ? 0 : documentList.size() / 3);
|
||||||
|
List<Object> listWithSeparators = new ArrayList<>(estimatedSize);
|
||||||
|
|
||||||
|
for (DocumentoResoDTO document : documentList) {
|
||||||
|
String currentRagSoc = document.getRagSoc();
|
||||||
|
if (lastSeparator == null || !lastSeparator.equals(currentRagSoc)) {
|
||||||
|
// Aggiungi un separatore quando cambia la ragione sociale
|
||||||
|
listWithSeparators.add(currentRagSoc);
|
||||||
|
lastSeparator = currentRagSoc;
|
||||||
|
}
|
||||||
|
listWithSeparators.add(document);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Object> finalList = listWithSeparators;
|
||||||
|
handler.post(() -> {
|
||||||
|
mutableListWithSeparators.setValue(finalList);
|
||||||
|
// refreshFabStatus();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var separatorType = new Type<String, FragmentUltimiArriviFornitoreListHeaderBinding>(
|
||||||
|
R.layout.fragment_ultimi_arrivi_fornitore__list_header,
|
||||||
|
it.integry.integrywmsnative.BR.item);
|
||||||
|
|
||||||
|
var orderElementItemType = new Type<DocumentoResoDTO, FragmentUltimiArriviFornitoreListSingleItemBinding>(
|
||||||
|
R.layout.fragment_ultimi_arrivi_fornitore__list_single_item,
|
||||||
|
it.integry.integrywmsnative.BR.item)
|
||||||
|
.areItemSame((item1, item2) -> item1.hashCodeKey() == item2.hashCodeKey() && item1.equalsKey(item2))
|
||||||
|
.areContentsTheSame((item1, item2) -> item1.hashCode() == item2.hashCode() && item1.equals(item2))
|
||||||
|
.onClick(holder -> {
|
||||||
|
this.onSingleSelectionChanged(holder.getBinding().getItem());
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
|
LiveAdapter liveAdapter = new LiveAdapter(mutableListWithSeparators, this)
|
||||||
|
.map(String.class, separatorType)
|
||||||
|
.map(DocumentoResoDTO.class, orderElementItemType)
|
||||||
|
.onNoData(x -> {
|
||||||
|
this.mBindings.emptyView.setVisibility(x ? View.VISIBLE : View.GONE);
|
||||||
|
return Unit.INSTANCE;
|
||||||
|
});
|
||||||
|
|
||||||
mBindings.recyclerView.setHasFixedSize(true);
|
mBindings.recyclerView.setHasFixedSize(true);
|
||||||
mBindings.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
|
mBindings.recyclerView.setItemViewCacheSize(40);
|
||||||
mBindings.recyclerView.setAdapter(mAdapter);
|
mBindings.recyclerView.setDrawingCacheEnabled(true);
|
||||||
// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView);
|
mBindings.recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
|
||||||
|
|
||||||
|
liveAdapter.into(mBindings.recyclerView);
|
||||||
|
|
||||||
|
|
||||||
if (mToolbar != null)
|
if (mToolbar != null)
|
||||||
mToolbar.setRecyclerView(mBindings.recyclerView);
|
mToolbar.setRecyclerView(mBindings.recyclerView);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initBarcodeReader() {
|
private void initBarcodeReader() {
|
||||||
@@ -154,9 +232,18 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
|
|||||||
|
|
||||||
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
|
||||||
BarcodeManager.disable(mBarcodeScannerInstanceID);
|
BarcodeManager.disable(mBarcodeScannerInstanceID);
|
||||||
|
executorService.execute(() -> {
|
||||||
|
|
||||||
this.mViewModel.processBarcodeDTO(data, () -> {
|
this.onLoadingStarted();
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.mViewModel.processBarcodeDTO(data);
|
||||||
|
this.onLoadingEnded();
|
||||||
|
} catch (Exception e) {
|
||||||
|
this.onError(e);
|
||||||
|
}
|
||||||
BarcodeManager.enable(mBarcodeScannerInstanceID);
|
BarcodeManager.enable(mBarcodeScannerInstanceID);
|
||||||
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -165,39 +252,33 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
|
|||||||
this.mDocumentiMutableData.addAll(sort(documentList));
|
this.mDocumentiMutableData.addAll(sort(documentList));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void filterItems(List<MtbAart> filteredMtbAarts) {
|
private void refreshArrivi(GtbAnag gtbAnagToFilter) {
|
||||||
this.onLoadingStarted();
|
this.onLoadingStarted();
|
||||||
|
|
||||||
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
|
try {
|
||||||
String currentCodAnagFilter = null;
|
this.mViewModel.loadArriviFornitori(gtbAnagToFilter != null ? gtbAnagToFilter.getCodAnag() : null,
|
||||||
|
null,
|
||||||
Optional<GtbAnag> singleGtbAnag = Stream.of(mViewModel.getGtbAnagClienti().getValue())
|
null,
|
||||||
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
|
365
|
||||||
.findSingle();
|
);
|
||||||
|
this.onLoadingEnded();
|
||||||
if (singleGtbAnag.isPresent()) {
|
} catch (Exception e) {
|
||||||
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
|
this.onError(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.mViewModel.loadArriviFornitori(currentCodAnagFilter,
|
|
||||||
filteredMtbAarts,
|
|
||||||
-1,
|
|
||||||
365);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
|
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
|
||||||
List<DocumentoResoDTO> items = Stream.of(dataset)
|
return dataset.stream()
|
||||||
.sortBy(DocumentoResoDTO::getRagSoc)
|
.sorted((x1, x2) -> x1.getRagSoc().compareToIgnoreCase(x2.getRagSoc()))
|
||||||
.toList();
|
.toList();
|
||||||
return items;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
|
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
|
||||||
|
dto.getSelected().toggle();
|
||||||
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
|
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
|
||||||
|
|
||||||
if (dto.isSelected()) {
|
if (dto.isSelected()) {
|
||||||
Stream.of(selectedOrders)
|
selectedOrders.stream()
|
||||||
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
|
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
|
||||||
.forEach(x -> x.setSelected(false));
|
.forEach(x -> x.setSelected(false));
|
||||||
}
|
}
|
||||||
@@ -211,15 +292,15 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
|
|||||||
|
|
||||||
|
|
||||||
private List<DocumentoResoDTO> getSelectedItems() {
|
private List<DocumentoResoDTO> getSelectedItems() {
|
||||||
return Stream.of(this.mDocumentiMutableData)
|
return this.mDocumentiMutableData.stream()
|
||||||
.filter(DocumentoResoDTO::isSelected)
|
.filter(DocumentoResoDTO::isSelected)
|
||||||
.toList();
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dispatchConsegne() {
|
private void dispatchArrivi() {
|
||||||
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
|
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
|
||||||
|
|
||||||
PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1);
|
PickingResiActivity.startActivity(getActivity(), requireActivity().getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -263,12 +344,13 @@ public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitl
|
|||||||
List<MtbAart> mtbAarts = new ArrayList<>();
|
List<MtbAart> mtbAarts = new ArrayList<>();
|
||||||
|
|
||||||
if (items != null && !items.isEmpty()) {
|
if (items != null && !items.isEmpty()) {
|
||||||
mtbAarts = Stream.of(items)
|
mtbAarts = items.stream()
|
||||||
.map(MtbColr::getMtbAart)
|
.map(MtbColr::getMtbAart)
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
filterItems(mtbAarts);
|
throw new UnsupportedOperationException("Not implemented yet");
|
||||||
|
// filterItems(mtbAarts);
|
||||||
}, null)
|
}, null)
|
||||||
.show(requireActivity().getSupportFragmentManager(), "tag");
|
.show(requireActivity().getSupportFragmentManager(), "tag");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import javax.inject.Singleton;
|
|||||||
|
|
||||||
import dagger.Module;
|
import dagger.Module;
|
||||||
import dagger.Provides;
|
import dagger.Provides;
|
||||||
|
import it.integry.integrywmsnative.core.rest.RESTBuilder;
|
||||||
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
|
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
|
||||||
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||||
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
|
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
|
||||||
@@ -14,8 +15,8 @@ public class UltimiArriviFornitoreModule {
|
|||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
UltimiArriviFornitoreRESTConsumer providesUltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
|
UltimiArriviFornitoreRESTConsumer providesUltimiArriviFornitoreRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) {
|
||||||
return new UltimiArriviFornitoreRESTConsumer(systemRESTConsumer);
|
return new UltimiArriviFornitoreRESTConsumer(restBuilder, systemRESTConsumer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import javax.inject.Inject;
|
|||||||
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
|
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
|
||||||
import it.integry.integrywmsnative.core.exception.InvalidLUException;
|
import it.integry.integrywmsnative.core.exception.InvalidLUException;
|
||||||
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
|
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
|
||||||
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
|
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
|
||||||
import it.integry.integrywmsnative.core.model.GtbAnag;
|
import it.integry.integrywmsnative.core.model.GtbAnag;
|
||||||
import it.integry.integrywmsnative.core.model.MtbAart;
|
import it.integry.integrywmsnative.core.model.MtbAart;
|
||||||
@@ -24,6 +23,7 @@ import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriv
|
|||||||
public class UltimiArriviFornitoreViewModel {
|
public class UltimiArriviFornitoreViewModel {
|
||||||
|
|
||||||
private final MutableLiveData<List<GtbAnag>> mGtbAnagClienti = new MutableLiveData<>();
|
private final MutableLiveData<List<GtbAnag>> mGtbAnagClienti = new MutableLiveData<>();
|
||||||
|
private List<DocumentoResoDTO> originalDocumentList;
|
||||||
private final MutableLiveData<List<DocumentoResoDTO>> mDocuments = new MutableLiveData<>();
|
private final MutableLiveData<List<DocumentoResoDTO>> mDocuments = new MutableLiveData<>();
|
||||||
|
|
||||||
private final UltimiArriviFornitoreRESTConsumer mUltimiArriviFornitoreRESTConsumer;
|
private final UltimiArriviFornitoreRESTConsumer mUltimiArriviFornitoreRESTConsumer;
|
||||||
@@ -50,51 +50,34 @@ public class UltimiArriviFornitoreViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void loadCodAnagFornitori(RunnableArgs<List<GtbAnag>> onComplete) {
|
public List<GtbAnag> loadAnagFornitori() throws Exception {
|
||||||
this.sendOnLoadingStarted();
|
var gtbAnags = this.mUltimiArriviFornitoreRESTConsumer.makeSynchronousRetrieveAvailableAnagClientiRequest();
|
||||||
|
mGtbAnagClienti.postValue(gtbAnags);
|
||||||
|
|
||||||
this.mUltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> {
|
return gtbAnags;
|
||||||
mGtbAnagClienti.postValue(gtbAnags);
|
|
||||||
this.sendOnLoadingEnded();
|
|
||||||
|
|
||||||
onComplete.run(gtbAnags);
|
|
||||||
}, this::sendError);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadArriviFornitori(String codAnag, List<MtbAart> mtbAarts, int limitDocsForCli, int limitDays) {
|
public void loadArriviFornitori(String codAnag, List<MtbAart> mtbAarts, Integer limitDocsForCli, int limitDays) throws Exception {
|
||||||
this.sendOnLoadingStarted();
|
var documentList = this.mUltimiArriviFornitoreRESTConsumer.makeSynchronousRetrieveUltimiArriviFornitoriRequest(mCodMdep, codAnag, mtbAarts, limitDocsForCli, limitDays);
|
||||||
|
originalDocumentList = documentList;
|
||||||
this.mUltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(mCodMdep, codAnag, mtbAarts, limitDocsForCli, limitDays, documentList -> {
|
this.mDocuments.postValue(documentList);
|
||||||
this.mDocuments.postValue(documentList);
|
|
||||||
this.sendOnLoadingEnded();
|
|
||||||
}, this::sendError);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
|
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) throws Exception {
|
||||||
|
|
||||||
this.sendOnLoadingStarted();
|
|
||||||
|
|
||||||
Runnable onBarcodeScanComplete = () -> {
|
|
||||||
onComplete.run();
|
|
||||||
this.sendOnLoadingEnded();
|
|
||||||
};
|
|
||||||
|
|
||||||
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
|
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
|
||||||
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete);
|
this.executeEtichettaLU(barcodeScanDTO.getStringValue());
|
||||||
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
|
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
|
||||||
this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete);
|
this.executeEtichettaEan128(barcodeScanDTO);
|
||||||
} else {
|
|
||||||
onComplete.run();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void executeEtichettaLU(String SSCC, Runnable onComplete) {
|
private void executeEtichettaLU(String SSCC) {
|
||||||
this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
|
this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
|
||||||
|
|
||||||
if(mtbColt != null && mtbColt.getMtbColr() != null && !mtbColt.getMtbColr().isEmpty()) {
|
if (mtbColt != null && mtbColt.getMtbColr() != null && !mtbColt.getMtbColr().isEmpty()) {
|
||||||
if(mtbColt.getSegno() > 0) {
|
if (mtbColt.getSegno() > 0) {
|
||||||
|
|
||||||
this.sendOnMtbColtScanned(mtbColt);
|
this.sendOnMtbColtScanned(mtbColt);
|
||||||
|
|
||||||
@@ -124,35 +107,35 @@ public class UltimiArriviFornitoreViewModel {
|
|||||||
}, this::sendError);
|
}, this::sendError);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
|
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO) throws Exception {
|
||||||
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
|
var ean128Model = this.mBarcodeRESTConsumer.decodeEan128Synchronized(barcodeScanDTO);
|
||||||
String barcodeProd = null;
|
|
||||||
|
|
||||||
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
|
String barcodeProd = null;
|
||||||
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
|
|
||||||
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
|
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
|
||||||
barcodeProd = ean128Model.Content;
|
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
|
||||||
|
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
|
||||||
|
barcodeProd = ean128Model.Content;
|
||||||
|
|
||||||
|
|
||||||
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
|
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
|
||||||
|
|
||||||
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
|
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
|
||||||
this.executeEtichettaLU(ean128Model.Sscc, onComplete);
|
this.executeEtichettaLU(ean128Model.Sscc);
|
||||||
} else {
|
|
||||||
this.sendError(new NoLUFoundException());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
|
|
||||||
this.sendError(new NoLUFoundException());
|
|
||||||
}
|
}
|
||||||
}, this::sendError);
|
|
||||||
|
throw new NoLUFoundException();
|
||||||
|
}
|
||||||
|
|
||||||
|
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
|
||||||
|
throw new NoLUFoundException();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void resetAllFilters() {
|
||||||
|
mDocuments.postValue(originalDocumentList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public MutableLiveData<List<GtbAnag>> getGtbAnagClienti() {
|
public MutableLiveData<List<GtbAnag>> getGtbAnagClienti() {
|
||||||
|
|||||||
@@ -1,190 +0,0 @@
|
|||||||
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog;
|
|
||||||
|
|
||||||
import android.app.DatePickerDialog;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.graphics.Color;
|
|
||||||
import android.graphics.drawable.ColorDrawable;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.widget.ArrayAdapter;
|
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
|
||||||
import com.annimon.stream.function.Predicate;
|
|
||||||
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.GregorianCalendar;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import it.integry.integrywmsnative.R;
|
|
||||||
import it.integry.integrywmsnative.core.di.BindableString;
|
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
|
||||||
import it.integry.integrywmsnative.core.model.GtbAnag;
|
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
|
||||||
import it.integry.integrywmsnative.databinding.DialogUltimiArriviFornitoreFiltroAvanzatoBinding;
|
|
||||||
|
|
||||||
public class DialogUltimiArriviFornitoreFiltroAvanzato {
|
|
||||||
|
|
||||||
private AlertDialog mAlert;
|
|
||||||
private Context mContext;
|
|
||||||
private DialogUltimiArriviFiltroAvanzatoViewModel mBaseViewModel;
|
|
||||||
private RunnableArgs<DialogUltimiArriviFiltroAvanzatoViewModel> mOnDismiss;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private ArrayAdapter<String> arrayAdapterRagSoc;
|
|
||||||
|
|
||||||
private List<GtbAnag> mItems;
|
|
||||||
private List<GtbAnag> mFilteredItems;
|
|
||||||
|
|
||||||
private Predicate<GtbAnag> currentRagSocPredicate = null;
|
|
||||||
private Predicate<GtbAnag> currentDataDocPredicate = null;
|
|
||||||
|
|
||||||
public static AlertDialog make(final Context context,
|
|
||||||
final List<GtbAnag> items,
|
|
||||||
DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel,
|
|
||||||
RunnableArgs<DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) {
|
|
||||||
return new DialogUltimiArriviFornitoreFiltroAvanzato(context, items, baseViewModel, onDismiss).mAlert;
|
|
||||||
}
|
|
||||||
|
|
||||||
public DialogUltimiArriviFornitoreFiltroAvanzato(final Context context,
|
|
||||||
final List<GtbAnag> items,
|
|
||||||
DialogUltimiArriviFiltroAvanzatoViewModel baseViewModel,
|
|
||||||
RunnableArgs<DialogUltimiArriviFiltroAvanzatoViewModel> onDismiss) {
|
|
||||||
mContext = context;
|
|
||||||
mItems = items;
|
|
||||||
mBaseViewModel = baseViewModel;
|
|
||||||
mOnDismiss = onDismiss;
|
|
||||||
|
|
||||||
DialogUltimiArriviFiltroAvanzatoViewModel viewModel = baseViewModel != null ? baseViewModel : new DialogUltimiArriviFiltroAvanzatoViewModel();
|
|
||||||
|
|
||||||
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
|
||||||
DialogUltimiArriviFornitoreFiltroAvanzatoBinding binding = DialogUltimiArriviFornitoreFiltroAvanzatoBinding.inflate(inflater,null, false);
|
|
||||||
|
|
||||||
final AlertDialog.Builder dialog = new AlertDialog.Builder(context)
|
|
||||||
.setView(binding.getRoot());
|
|
||||||
|
|
||||||
binding.setViewmodel(viewModel);
|
|
||||||
initViewModelNew(viewModel);
|
|
||||||
initView(binding, viewModel);
|
|
||||||
|
|
||||||
mAlert = dialog.create();
|
|
||||||
mAlert.setCanceledOnTouchOutside(false);
|
|
||||||
|
|
||||||
mAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
|
||||||
mAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
|
||||||
|
|
||||||
binding.positiveBtn.setOnClickListener(view -> {
|
|
||||||
mAlert.dismiss();
|
|
||||||
});
|
|
||||||
|
|
||||||
binding.neutralBtn.setOnClickListener(view -> {
|
|
||||||
resetAll(viewModel);
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
mAlert.setOnDismissListener(dialogInterface -> {
|
|
||||||
if(mOnDismiss != null) mOnDismiss.run(viewModel);
|
|
||||||
});
|
|
||||||
|
|
||||||
refreshList();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void resetAll(DialogUltimiArriviFiltroAvanzatoViewModel viewModel) {
|
|
||||||
viewModel.ragSoc.set(null);
|
|
||||||
viewModel.dataDoc.set(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initView(DialogUltimiArriviFornitoreFiltroAvanzatoBinding bindings, DialogUltimiArriviFiltroAvanzatoViewModel viewModel) {
|
|
||||||
|
|
||||||
arrayAdapterRagSoc = new ArrayAdapter(mContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
|
|
||||||
arrayAdapterRagSoc.addAll(getAvailableRagSocs(false));
|
|
||||||
bindings.filledExposedDropdownRagSoc.setAdapter(arrayAdapterRagSoc);
|
|
||||||
|
|
||||||
bindings.filledExposedDropdownDataDoc.setOnClickListener(view -> {
|
|
||||||
Calendar c = UtilityDate.getCalendarInstance();
|
|
||||||
|
|
||||||
if(viewModel.dataDocDate != null) {
|
|
||||||
c.setTime(viewModel.dataDocDate);
|
|
||||||
}
|
|
||||||
|
|
||||||
int mYear = c.get(Calendar.YEAR);
|
|
||||||
int mMonth = c.get(Calendar.MONTH);
|
|
||||||
int mDay = c.get(Calendar.DAY_OF_MONTH);
|
|
||||||
|
|
||||||
DatePickerDialog datePickerDialog = new DatePickerDialog(mContext,
|
|
||||||
(view2, year, month, day) -> {
|
|
||||||
|
|
||||||
viewModel.dataDocDate = new GregorianCalendar(year, month, day).getTime();
|
|
||||||
viewModel.dataDoc.set(UtilityDate.formatDate(viewModel.dataDocDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
|
||||||
|
|
||||||
}, mYear, mMonth, mDay);
|
|
||||||
datePickerDialog.show();
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
viewModel.ragSoc.refresh();
|
|
||||||
viewModel.dataDoc.refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initViewModelNew(DialogUltimiArriviFiltroAvanzatoViewModel viewModel) {
|
|
||||||
|
|
||||||
BindableString.resetListeners(viewModel.ragSoc);
|
|
||||||
BindableString.registerListener(viewModel.ragSoc, value -> {
|
|
||||||
if (UtilityString.isNullOrEmpty(value)) currentRagSocPredicate = null;
|
|
||||||
else {
|
|
||||||
currentRagSocPredicate = o -> o.getRagSoc().equalsIgnoreCase(viewModel.ragSoc.get());
|
|
||||||
}
|
|
||||||
|
|
||||||
refreshList();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<String> getAvailableRagSocs(boolean skipRecalc) {
|
|
||||||
if(currentDataDocPredicate == null){
|
|
||||||
mFilteredItems = mItems;
|
|
||||||
} else if(!skipRecalc){
|
|
||||||
Stream<GtbAnag> tmpStream = Stream.of(mItems)
|
|
||||||
.filter(x ->
|
|
||||||
(currentDataDocPredicate == null || (currentDataDocPredicate.test(x)))
|
|
||||||
);
|
|
||||||
|
|
||||||
mFilteredItems = tmpStream.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
return Stream.of(mFilteredItems).map(x -> x.getCodAnag() + " - " + x.getRagSoc()).distinct().withoutNulls().toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void refreshList() {
|
|
||||||
|
|
||||||
if(currentRagSocPredicate == null && currentDataDocPredicate == null){
|
|
||||||
mFilteredItems = mItems;
|
|
||||||
} else {
|
|
||||||
Stream<GtbAnag> tmpStream = Stream.of(mItems)
|
|
||||||
.filter(x ->
|
|
||||||
(currentRagSocPredicate == null || (currentRagSocPredicate.test(x))) &&
|
|
||||||
(currentDataDocPredicate== null || (currentDataDocPredicate.test(x)))
|
|
||||||
);
|
|
||||||
|
|
||||||
mFilteredItems = tmpStream.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class DialogUltimiArriviFiltroAvanzatoViewModel {
|
|
||||||
|
|
||||||
public BindableString ragSoc = new BindableString();
|
|
||||||
public BindableString dataDoc = new BindableString();
|
|
||||||
|
|
||||||
public Date dataDocDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog;
|
||||||
|
|
||||||
|
import dagger.Subcomponent;
|
||||||
|
|
||||||
|
@Subcomponent
|
||||||
|
public interface DialogUltimiArriviFornitoreFiltroAvanzatoComponent {
|
||||||
|
|
||||||
|
@Subcomponent.Factory
|
||||||
|
interface Factory {
|
||||||
|
DialogUltimiArriviFornitoreFiltroAvanzatoComponent create();
|
||||||
|
}
|
||||||
|
|
||||||
|
void inject(DialogUltimiArriviFornitoreFiltroAvanzatoView dialogUltimiArriviFornitoreFiltroAvanzatoView);
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog;
|
||||||
|
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
|
||||||
|
@Module(subcomponents = DialogUltimiArriviFornitoreFiltroAvanzatoComponent.class)
|
||||||
|
public class DialogUltimiArriviFornitoreFiltroAvanzatoModule {
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
DialogUltimiArriviFornitoreFiltroAvanzatoViewModel providesDialogDialogUltimiArriviFornitoreFiltroAvanzatoViewModel() {
|
||||||
|
return new DialogUltimiArriviFornitoreFiltroAvanzatoViewModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,185 @@
|
|||||||
|
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 com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
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 {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
DialogUltimiArriviFornitoreFiltroAvanzatoViewModel mViewModel;
|
||||||
|
|
||||||
|
private DialogUltimiArriviFornitoreFiltroAvanzatoBinding mBindings;
|
||||||
|
private Context mContext;
|
||||||
|
private SimpleAutoCompleteDropdownAdapter<String> arrayAdapterRagSoc;
|
||||||
|
|
||||||
|
private final RunnableArgs<Result> onConfirm;
|
||||||
|
|
||||||
|
|
||||||
|
public static DialogUltimiArriviFornitoreFiltroAvanzatoView newInstance(final List<GtbAnag> items, RunnableArgs<Result> onConfirm) {
|
||||||
|
return new DialogUltimiArriviFornitoreFiltroAvanzatoView(items, onConfirm);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DialogUltimiArriviFornitoreFiltroAvanzatoView(final List<GtbAnag> items, RunnableArgs<Result> onConfirm) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.onConfirm = onConfirm;
|
||||||
|
|
||||||
|
MainApplication.appComponent
|
||||||
|
.dialogUltimiArriviFornitoreFiltroAvanzatoComponent()
|
||||||
|
.create()
|
||||||
|
.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);
|
||||||
|
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);
|
||||||
|
|
||||||
|
this.initDropDowns();
|
||||||
|
|
||||||
|
return alertDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onShow(DialogInterface dialogInterface) {
|
||||||
|
super.onShow(dialogInterface);
|
||||||
|
|
||||||
|
var alertDialog = ((AlertDialog) dialogInterface);
|
||||||
|
|
||||||
|
var neutralButton = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL);
|
||||||
|
neutralButton.setOnClickListener(view -> {
|
||||||
|
reset();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dismiss() {
|
||||||
|
if (getDialog() != null) getDialog().dismiss();
|
||||||
|
super.dismiss();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initDropDowns() {
|
||||||
|
// Usa il LiveData delle stringhe formattate dal ViewModel
|
||||||
|
arrayAdapterRagSoc = new SimpleAutoCompleteDropdownAdapter<>(
|
||||||
|
mContext,
|
||||||
|
R.layout.dialog_vendita_filtro_avanzato__single_item, // Assicurati che questo layout sia un semplice TextView
|
||||||
|
mViewModel.getAvailableRagSocsStrings(), // LiveData<List<String>>
|
||||||
|
this // LifecycleOwner
|
||||||
|
);
|
||||||
|
mBindings.filledExposedDropdownRagSoc.setAdapter(arrayAdapterRagSoc);
|
||||||
|
|
||||||
|
// Gestisci la selezione di un item
|
||||||
|
mBindings.filledExposedDropdownRagSoc.setOnItemClickListener((parent, view, position, id) -> {
|
||||||
|
String selectedFormattedString = arrayAdapterRagSoc.getItem(position);
|
||||||
|
if (selectedFormattedString != null) {
|
||||||
|
GtbAnag selectedAnag = mViewModel.findGtbAnagByFormattedString(selectedFormattedString);
|
||||||
|
mViewModel.setRagSoc(selectedAnag); // Aggiorna il GtbAnag nel ViewModel
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reset() {
|
||||||
|
if (mViewModel != null) {
|
||||||
|
mViewModel.resetFilters();
|
||||||
|
}
|
||||||
|
// I campi testo dovrebbero aggiornarsi automaticamente grazie al data binding
|
||||||
|
// e agli observer sui LiveData (ragSocTextBindable e dataDocBindable).
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
private final Date dataDoc;
|
||||||
|
private final boolean isAborted;
|
||||||
|
|
||||||
|
private Result(GtbAnag gtbAnag, Date dataDoc, boolean isAborted) {
|
||||||
|
this.gtbAnag = gtbAnag;
|
||||||
|
this.dataDoc = dataDoc;
|
||||||
|
this.isAborted = isAborted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Result completed(GtbAnag gtbAnag, Date dataDoc) {
|
||||||
|
return new Result(gtbAnag, dataDoc, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Result aborted() {
|
||||||
|
return new Result(null, null, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAborted() {
|
||||||
|
return isAborted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GtbAnag getGtbAnag() {
|
||||||
|
return gtbAnag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getDataDoc() {
|
||||||
|
return dataDoc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,219 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog;
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.function.Predicate;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import it.integry.integrywmsnative.core.model.GtbAnag;
|
||||||
|
|
||||||
|
public class DialogUltimiArriviFornitoreFiltroAvanzatoViewModel {
|
||||||
|
|
||||||
|
|
||||||
|
private final MutableLiveData<GtbAnag> ragSoc = new MutableLiveData<>();
|
||||||
|
private final MutableLiveData<Date> dataDoc = new MutableLiveData<>();
|
||||||
|
|
||||||
|
private List<GtbAnag> availableItems; // Lista completa di GtbAnag originali
|
||||||
|
private final MutableLiveData<List<GtbAnag>> filteredItems = new MutableLiveData<>();
|
||||||
|
|
||||||
|
// LiveData per il testo dell'AutoCompleteTextView della Ragione Sociale
|
||||||
|
private final MutableLiveData<String> ragSocText = new MutableLiveData<>();
|
||||||
|
// LiveData per popolare l'adapter dell'AutoCompleteTextView
|
||||||
|
private final MutableLiveData<List<String>> availableRagSocsStrings = new MutableLiveData<>();
|
||||||
|
|
||||||
|
private final MutableLiveData<Predicate<GtbAnag>> currentRagSocPredicate = new MutableLiveData<>();
|
||||||
|
private final MutableLiveData<Predicate<GtbAnag>> currentDataDocPredicate = new MutableLiveData<>();
|
||||||
|
|
||||||
|
public void init(List<GtbAnag> availableItems) {
|
||||||
|
this.availableItems = availableItems;
|
||||||
|
// Imposta il valore iniziale di filteredItems e availableRagSocsStrings
|
||||||
|
// assicurandosi che i predicati siano null all'inizio se non diversamente specificato.
|
||||||
|
if (this.currentRagSocPredicate.getValue() == null && this.currentDataDocPredicate.getValue() == null) {
|
||||||
|
this.filteredItems.setValue(availableItems);
|
||||||
|
} else {
|
||||||
|
// Se ci sono predicati pre-impostati, applicali.
|
||||||
|
// Questa logica è più per completezza, normalmente all'init i filtri sono resettati.
|
||||||
|
refreshList();
|
||||||
|
}
|
||||||
|
// Calcola availableRagSocsStrings dopo aver impostato availableItems e potenzialmente i predicati.
|
||||||
|
this.availableRagSocsStrings.setValue(calcAvailableRagSocsStrings());
|
||||||
|
this.initBindable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void initBindable() {
|
||||||
|
// Quando il GtbAnag selezionato (ragSoc) cambia
|
||||||
|
this.ragSoc.observeForever(selectedAnag -> {
|
||||||
|
String textToShow = "";
|
||||||
|
Predicate<GtbAnag> newPredicate = null;
|
||||||
|
|
||||||
|
if (selectedAnag != null) {
|
||||||
|
textToShow = formatGtbAnagToString(selectedAnag);
|
||||||
|
newPredicate = o -> o.getCodAnag().equals(selectedAnag.getCodAnag());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Objects.equals(ragSocText.getValue(), textToShow)) {
|
||||||
|
ragSocText.postValue(textToShow);
|
||||||
|
}
|
||||||
|
if (!Objects.equals(currentRagSocPredicate.getValue(), newPredicate)) {
|
||||||
|
currentRagSocPredicate.postValue(newPredicate);
|
||||||
|
} else if (newPredicate == null && currentRagSocPredicate.getValue() != null) {
|
||||||
|
currentRagSocPredicate.postValue(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Quando il testo nell'AutoCompleteTextView (ragSocText) cambia
|
||||||
|
this.ragSocText.observeForever(text -> {
|
||||||
|
GtbAnag currentAnagSelection = ragSoc.getValue();
|
||||||
|
if (text == null || text.isEmpty()) {
|
||||||
|
if (currentAnagSelection != null) {
|
||||||
|
this.ragSoc.postValue(null);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (currentAnagSelection != null) {
|
||||||
|
if (!text.equals(formatGtbAnagToString(currentAnagSelection))) {
|
||||||
|
this.ragSoc.postValue(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Quando la data del documento (dataDoc) cambia
|
||||||
|
this.dataDoc.observeForever(date -> {
|
||||||
|
Predicate<GtbAnag> newDatePredicate = null;
|
||||||
|
if (date != null) {
|
||||||
|
// TODO: Implementare la logica effettiva per creare un predicato GtbAnag basato sulla data.
|
||||||
|
// Poiché GtbAnag è un'anagrafica, questo filtro potrebbe non applicarsi direttamente
|
||||||
|
// ad essa, ma a una lista di transazioni/documenti che usano GtbAnag.
|
||||||
|
// Se 'dataDoc' NON deve filtrare la lista di GtbAnag, allora 'currentDataDocPredicate'
|
||||||
|
// dovrebbe essere gestito diversamente o non essere legato a questo 'dataDoc'.
|
||||||
|
// Per ora, l'effetto principale del reset di 'dataDoc' (impostandolo a null)
|
||||||
|
// sarà quello di impostare 'currentDataDocPredicate' a null.
|
||||||
|
// Esempio concettuale se GtbAnag avesse un campo data:
|
||||||
|
// newDatePredicate = gtbAnag -> UtilityDate.isSameDay(gtbAnag.getDataDocumento(), date);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggiorna currentDataDocPredicate solo se il suo stato logico cambia
|
||||||
|
boolean predicateEffectivelyChanged = !Objects.equals(currentDataDocPredicate.getValue(), newDatePredicate) ||
|
||||||
|
(newDatePredicate == null && currentDataDocPredicate.getValue() != null) ||
|
||||||
|
(newDatePredicate != null && currentDataDocPredicate.getValue() == null);
|
||||||
|
|
||||||
|
if (predicateEffectivelyChanged) {
|
||||||
|
currentDataDocPredicate.postValue(newDatePredicate);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.currentRagSocPredicate.observeForever(ragSocPredicate -> refreshList());
|
||||||
|
this.currentDataDocPredicate.observeForever(dataDocPredicate -> refreshList());
|
||||||
|
|
||||||
|
// Calcola availableRagSocsStrings inizialmente dopo che gli observer sono impostati
|
||||||
|
// e availableItems è disponibile.
|
||||||
|
if (this.availableItems != null) {
|
||||||
|
refreshList(); // Questo chiamerà anche calcAvailableRagSocsStrings
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void refreshList() {
|
||||||
|
Stream<GtbAnag> tmpStream;
|
||||||
|
if (availableItems == null) {
|
||||||
|
filteredItems.postValue(List.of());
|
||||||
|
availableRagSocsStrings.postValue(List.of());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Predicate<GtbAnag> ragSocPred = currentRagSocPredicate.getValue();
|
||||||
|
Predicate<GtbAnag> dataDocPred = currentDataDocPredicate.getValue();
|
||||||
|
|
||||||
|
if (ragSocPred == null && dataDocPred == null) {
|
||||||
|
tmpStream = availableItems.stream();
|
||||||
|
} else {
|
||||||
|
tmpStream = availableItems.stream()
|
||||||
|
.filter(x -> (ragSocPred == null || ragSocPred.test(x)) &&
|
||||||
|
(dataDocPred == null || dataDocPred.test(x)));
|
||||||
|
}
|
||||||
|
filteredItems.postValue(tmpStream.collect(Collectors.toList()));
|
||||||
|
availableRagSocsStrings.postValue(calcAvailableRagSocsStrings());
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> calcAvailableRagSocsStrings() {
|
||||||
|
if (availableItems == null) return List.of();
|
||||||
|
|
||||||
|
Predicate<GtbAnag> dataFilterPredicate = currentDataDocPredicate.getValue();
|
||||||
|
|
||||||
|
return availableItems.stream()
|
||||||
|
.filter(Objects::nonNull)
|
||||||
|
// Filtra la lista per l'adapter dell'AutoCompleteTextView solo per data,
|
||||||
|
// il filtro testuale lo fa l'adapter stesso.
|
||||||
|
.filter(x -> (dataFilterPredicate == null || dataFilterPredicate.test(x)))
|
||||||
|
.map(this::formatGtbAnagToString)
|
||||||
|
.distinct()
|
||||||
|
.sorted() // Opzionale: ordina alfabeticamente
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
private String formatGtbAnagToString(GtbAnag anag) {
|
||||||
|
if (anag == null) return "";
|
||||||
|
return anag.getCodAnag() + " - " + anag.getRagSoc();
|
||||||
|
}
|
||||||
|
|
||||||
|
public GtbAnag findGtbAnagByFormattedString(String formattedString) {
|
||||||
|
if (formattedString == null || availableItems == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (GtbAnag anag : availableItems) {
|
||||||
|
if (anag != null && formattedString.equals(formatGtbAnagToString(anag))) {
|
||||||
|
return anag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<List<String>> getAvailableRagSocsStrings() {
|
||||||
|
return availableRagSocsStrings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<String> getRagSocTextBindable() {
|
||||||
|
return ragSocText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<GtbAnag> getRagSocBindable() {
|
||||||
|
return ragSoc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MutableLiveData<Date> getDataDocBindable() {
|
||||||
|
return dataDoc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DialogUltimiArriviFornitoreFiltroAvanzatoViewModel setRagSoc(GtbAnag ragSocItem) {
|
||||||
|
if (!Objects.equals(this.ragSoc.getValue(), ragSocItem)) {
|
||||||
|
this.ragSoc.postValue(ragSocItem);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DialogUltimiArriviFornitoreFiltroAvanzatoViewModel setDataDoc(Date dataDocItem) {
|
||||||
|
// L'observer su this.dataDoc gestirà l'aggiornamento di currentDataDocPredicate.
|
||||||
|
if (!Objects.equals(this.dataDoc.getValue(), dataDocItem)) {
|
||||||
|
this.dataDoc.postValue(dataDocItem);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resetta tutti i filtri ai loro stati predefiniti.
|
||||||
|
*/
|
||||||
|
public void resetFilters() {
|
||||||
|
// Impostando i LiveData a null, gli observer associati (in initBindable)
|
||||||
|
// si occuperanno di resettare i testi e i predicati.
|
||||||
|
setRagSoc(null);
|
||||||
|
setDataDoc(null); // Questo chiamerà l'observer di dataDoc che resetterà currentDataDocPredicate
|
||||||
|
|
||||||
|
// refreshList() sarà chiamato automaticamente dagli observer dei predicati.
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,76 +1,61 @@
|
|||||||
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest;
|
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest;
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
import com.google.gson.reflect.TypeToken;
|
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import java.lang.reflect.Type;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
|
||||||
import it.integry.integrywmsnative.core.model.GtbAnag;
|
import it.integry.integrywmsnative.core.model.GtbAnag;
|
||||||
import it.integry.integrywmsnative.core.model.MtbAart;
|
import it.integry.integrywmsnative.core.model.MtbAart;
|
||||||
|
import it.integry.integrywmsnative.core.rest.RESTBuilder;
|
||||||
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
|
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.rest.model.DocumentoResoDTO;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityDB;
|
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto.RetrieveUltimiArriviFornitoriRequestDTO;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public class UltimiArriviFornitoreRESTConsumer {
|
public class UltimiArriviFornitoreRESTConsumer extends _BaseRESTConsumer {
|
||||||
|
|
||||||
|
private final RESTBuilder restBuilder;
|
||||||
private final SystemRESTConsumer systemRESTConsumer;
|
private final SystemRESTConsumer systemRESTConsumer;
|
||||||
|
|
||||||
public UltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
|
public UltimiArriviFornitoreRESTConsumer(RESTBuilder restBuilder, SystemRESTConsumer systemRESTConsumer) {
|
||||||
|
this.restBuilder = restBuilder;
|
||||||
this.systemRESTConsumer = systemRESTConsumer;
|
this.systemRESTConsumer = systemRESTConsumer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getAvailableCodAnagFornitori(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
|
public List<GtbAnag> makeSynchronousRetrieveAvailableAnagClientiRequest() throws Exception {
|
||||||
String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " +
|
|
||||||
"FROM gtb_anag " +
|
|
||||||
"INNER JOIN atb_forn ON atb_forn.cod_anag = gtb_anag.cod_anag " +
|
|
||||||
"WHERE flag_stato = 'A'";
|
|
||||||
|
|
||||||
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {
|
var response = restBuilder.getService(UltimiArriviFornitoreRESTConsumerService.class)
|
||||||
}.getType();
|
.retrieveFornitori()
|
||||||
this.systemRESTConsumer.<ArrayList<GtbAnag>>processSql(sql, typeOfObjectsList, value -> {
|
.execute();
|
||||||
if (onComplete != null) onComplete.run(value);
|
|
||||||
}, ex -> {
|
var data = analyzeAnswerList(response, "retrieve-fornitori");
|
||||||
if (onFailed != null) onFailed.run(ex);
|
return data;
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getUltimeConsegneFornitori(String codMdep, String codAnag, List<MtbAart> mtbAarts, int limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
|
public List<DocumentoResoDTO> makeSynchronousRetrieveUltimiArriviFornitoriRequest(String codMdep, String codAnag, List<MtbAart> mtbAarts, Integer limitConsegnePerCli, int limitDays) throws Exception {
|
||||||
String codMarts = null;
|
List<String> codMarts = null;
|
||||||
|
|
||||||
if (mtbAarts != null && !mtbAarts.isEmpty()) {
|
if (mtbAarts != null && !mtbAarts.isEmpty()) {
|
||||||
codMarts = StringUtils.join(Stream.of(mtbAarts)
|
codMarts = Stream.of(mtbAarts)
|
||||||
.map(MtbAart::getCodMart)
|
.map(MtbAart::getCodMart)
|
||||||
.toList(), "|");
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
String sql = "SELECT consegne.*, " +
|
RetrieveUltimiArriviFornitoriRequestDTO requestBody = new RetrieveUltimiArriviFornitoriRequestDTO()
|
||||||
" rag_soc " +
|
.setCodAnag(codAnag)
|
||||||
"FROM WMS_GetUltimeConsegneFornitori(" +
|
.setCodMarts(codMarts)
|
||||||
UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " +
|
.setLimitConsegnePerCli(limitConsegnePerCli)
|
||||||
UtilityDB.valueToString(codAnag) + ", " +
|
.setLimitDays(limitDays);
|
||||||
UtilityDB.valueToString(codMarts) + ", " +
|
|
||||||
UtilityDB.valueToString(codMdep) + ", " +
|
|
||||||
UtilityDB.valueToString(limitDays) + ") consegne " +
|
|
||||||
"LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " +
|
|
||||||
"ORDER BY rag_soc, " +
|
|
||||||
" counter_consegna ";
|
|
||||||
|
|
||||||
|
var response = restBuilder.getService(UltimiArriviFornitoreRESTConsumerService.class)
|
||||||
|
.retrieveUltimiArrivi(codMdep, requestBody)
|
||||||
|
.execute();
|
||||||
|
|
||||||
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {
|
var data = analyzeAnswer(response, "retrieve-ultimi-arrivi-fornitori");
|
||||||
}.getType();
|
return data.getDocuments() == null ? List.of() : data.getDocuments();
|
||||||
this.systemRESTConsumer.<ArrayList<DocumentoResoDTO>>processSql(sql, typeOfObjectsList, value -> {
|
|
||||||
if (onComplete != null) onComplete.run(value);
|
|
||||||
}, ex -> {
|
|
||||||
if (onFailed != null) onFailed.run(ex);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest;
|
||||||
|
|
||||||
|
import it.integry.integrywmsnative.core.model.GtbAnag;
|
||||||
|
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
|
||||||
|
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto.RetrieveUltimiArriviFornitoriRequestDTO;
|
||||||
|
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto.RetrieveUltimiArriviFornitoriResponseDTO;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.http.Body;
|
||||||
|
import retrofit2.http.GET;
|
||||||
|
import retrofit2.http.POST;
|
||||||
|
import retrofit2.http.Query;
|
||||||
|
|
||||||
|
public interface UltimiArriviFornitoreRESTConsumerService {
|
||||||
|
|
||||||
|
@GET("wms/resi-fornitore/retrieve-fornitori")
|
||||||
|
Call<ServiceRESTResponse<GtbAnag>> retrieveFornitori();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@POST("wms/resi-fornitore/retrieve-ultimi-arrivi")
|
||||||
|
Call<ServiceRESTResponse<RetrieveUltimiArriviFornitoriResponseDTO>> retrieveUltimiArrivi(@Query("codMdep") String codMdep,
|
||||||
|
@Body RetrieveUltimiArriviFornitoriRequestDTO requestBody);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class RetrieveUltimiArriviFornitoriRequestDTO {
|
||||||
|
|
||||||
|
@SerializedName("codAnag")
|
||||||
|
private String codAnag;
|
||||||
|
|
||||||
|
@SerializedName("codMarts")
|
||||||
|
private List<String> codMarts;
|
||||||
|
|
||||||
|
@SerializedName("limitConsegnePerCli")
|
||||||
|
private Integer limitConsegnePerCli;
|
||||||
|
|
||||||
|
@SerializedName("limitDays")
|
||||||
|
private Integer limitDays;
|
||||||
|
|
||||||
|
public String getCodAnag() {
|
||||||
|
return codAnag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RetrieveUltimiArriviFornitoriRequestDTO setCodAnag(String codAnag) {
|
||||||
|
this.codAnag = codAnag;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getCodMarts() {
|
||||||
|
return codMarts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RetrieveUltimiArriviFornitoriRequestDTO setCodMarts(List<String> codMarts) {
|
||||||
|
this.codMarts = codMarts;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getLimitConsegnePerCli() {
|
||||||
|
return limitConsegnePerCli;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RetrieveUltimiArriviFornitoriRequestDTO setLimitConsegnePerCli(Integer limitConsegnePerCli) {
|
||||||
|
this.limitConsegnePerCli = limitConsegnePerCli;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getLimitDays() {
|
||||||
|
return limitDays;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RetrieveUltimiArriviFornitoriRequestDTO setLimitDays(Integer limitDays) {
|
||||||
|
this.limitDays = limitDays;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.dto;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
||||||
|
|
||||||
|
public class RetrieveUltimiArriviFornitoriResponseDTO {
|
||||||
|
|
||||||
|
@SerializedName("documents")
|
||||||
|
private List<DocumentoResoDTO> documents;
|
||||||
|
|
||||||
|
|
||||||
|
public List<DocumentoResoDTO> getDocuments() {
|
||||||
|
return documents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RetrieveUltimiArriviFornitoriResponseDTO setDocuments(List<DocumentoResoDTO> documents) {
|
||||||
|
this.documents = documents;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,149 +0,0 @@
|
|||||||
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.ui;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
|
|
||||||
import androidx.databinding.DataBindingUtil;
|
|
||||||
import androidx.databinding.ObservableArrayList;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import it.integry.integrywmsnative.R;
|
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
|
||||||
import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView;
|
|
||||||
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
|
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
|
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
|
||||||
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListHeaderBinding;
|
|
||||||
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListSingleItemBinding;
|
|
||||||
|
|
||||||
public class UltimiArriviFornitoreListAdapter extends ExtendedSectionedRecyclerView<DocumentoResoDTO,
|
|
||||||
UltimiArriviFornitoreListAdapter.SubheaderHolder,
|
|
||||||
UltimiArriviFornitoreListAdapter.SingleItemViewHolder> {
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
private RunnableArgs<DocumentoResoDTO> mOnSelectionChanged;
|
|
||||||
|
|
||||||
|
|
||||||
static class SubheaderHolder extends RecyclerView.ViewHolder {
|
|
||||||
|
|
||||||
FragmentUltimiArriviFornitoreListHeaderBinding mBinding;
|
|
||||||
|
|
||||||
SubheaderHolder(FragmentUltimiArriviFornitoreListHeaderBinding binding) {
|
|
||||||
super(binding.getRoot());
|
|
||||||
this.mBinding = binding;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
|
|
||||||
|
|
||||||
FragmentUltimiArriviFornitoreListSingleItemBinding mBinding;
|
|
||||||
|
|
||||||
SingleItemViewHolder(FragmentUltimiArriviFornitoreListSingleItemBinding binding) {
|
|
||||||
super(binding.getRoot());
|
|
||||||
this.mBinding = binding;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public UltimiArriviFornitoreListAdapter(Context context, ObservableArrayList<DocumentoResoDTO> mutableDataSet) {
|
|
||||||
super(mutableDataSet);
|
|
||||||
this.mContext = context;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
|
|
||||||
FragmentUltimiArriviFornitoreListSingleItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_ultimi_arrivi_fornitore__list_single_item, parent, false);
|
|
||||||
return new SingleItemViewHolder(binding);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
|
|
||||||
FragmentUltimiArriviFornitoreListHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_ultimi_arrivi_fornitore__list_header, parent, false);
|
|
||||||
return new SubheaderHolder(binding);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBindItemViewHolder(final SingleItemViewHolder holder, final int position) {
|
|
||||||
final DocumentoResoDTO consegna = this.originalItems.get(position);
|
|
||||||
|
|
||||||
holder.mBinding.setConsegna(consegna);
|
|
||||||
|
|
||||||
holder.mBinding.descriptionMain.setText(UtilityString.isNullOrEmpty(consegna.getRifOrd()) ? "" : consegna.getRifOrd());
|
|
||||||
|
|
||||||
String numDoc = "" + consegna.getNumDoc();
|
|
||||||
holder.mBinding.badge1.setText(numDoc);
|
|
||||||
|
|
||||||
try {
|
|
||||||
String dataDocString = "";
|
|
||||||
|
|
||||||
if(consegna.getDataDoc().getYear() == UtilityDate.getNow().getYear()) {
|
|
||||||
dataDocString = UtilityDate.formatDate(consegna.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN);
|
|
||||||
} else {
|
|
||||||
dataDocString = UtilityDate.formatDate(consegna.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN);
|
|
||||||
}
|
|
||||||
|
|
||||||
holder.mBinding.date.setText(dataDocString);
|
|
||||||
|
|
||||||
|
|
||||||
holder.mBinding.compilatoDa.setText(consegna.getCompilatoDa());
|
|
||||||
holder.mBinding.compilatoDa.setVisibility(UtilityString.isNullOrEmpty(consegna.getCompilatoDa()) ? View.GONE : View.VISIBLE);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
UtilityExceptions.defaultException(mContext, ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
holder.mBinding.getRoot().setOnClickListener(v -> {
|
|
||||||
consegna.setSelected(!consegna.isSelected());
|
|
||||||
|
|
||||||
if(this.mOnSelectionChanged != null) mOnSelectionChanged.run(consegna);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
|
|
||||||
subheaderHolder.mBinding.title.setText(this.originalItems.get(nextItemPosition).getRagSoc());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPlaceSubheaderBetweenItems(int position) {
|
|
||||||
|
|
||||||
if(!this.originalItems.get(position).getCodAnag().equalsIgnoreCase(this.originalItems.get(position+1).getCodAnag())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getItemSize() {
|
|
||||||
return this.originalItems.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void updateItems(List<DocumentoResoDTO> updatedDataset) {
|
|
||||||
originalItems.clear();
|
|
||||||
originalItems.addAll(updatedDataset);
|
|
||||||
notifyDataSetChanged();
|
|
||||||
notifyDataChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setOnSelectionChanged(RunnableArgs<DocumentoResoDTO> mSelectionChanged) {
|
|
||||||
this.mOnSelectionChanged = mSelectionChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="center_horizontal"
|
android:layout_gravity="center_horizontal"
|
||||||
app:cardCornerRadius="12dp"
|
app:cardCornerRadius="16dp"
|
||||||
app:cardElevation="0dp">
|
app:cardElevation="0dp">
|
||||||
|
|
||||||
<androidx.appcompat.widget.LinearLayoutCompat
|
<androidx.appcompat.widget.LinearLayoutCompat
|
||||||
|
|||||||
@@ -86,15 +86,6 @@
|
|||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<!-- <Button-->
|
|
||||||
<!-- style="@style/Button.PrimaryOutline"-->
|
|
||||||
<!-- android:layout_width="wrap_content"-->
|
|
||||||
<!-- android:layout_height="wrap_content"-->
|
|
||||||
<!-- android:layout_gravity="center_horizontal"-->
|
|
||||||
<!-- android:layout_marginTop="12dp"-->
|
|
||||||
<!-- android:text="@string/reset"-->
|
|
||||||
<!-- android:onClick="@{() -> view.reset()}"/>-->
|
|
||||||
|
|
||||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
</layout>
|
</layout>
|
||||||
@@ -1,136 +1,91 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<layout
|
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools">
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<data>
|
<data>
|
||||||
|
|
||||||
|
<variable
|
||||||
|
name="view"
|
||||||
|
type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzatoView" />
|
||||||
|
|
||||||
<variable
|
<variable
|
||||||
name="viewmodel"
|
name="viewmodel"
|
||||||
type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel" />
|
type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzatoViewModel" />
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
app:cardCornerRadius="12dp"
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:cardCornerRadius="16dp"
|
||||||
app:cardElevation="0dp">
|
app:cardElevation="0dp">
|
||||||
|
|
||||||
|
|
||||||
<ScrollView
|
<androidx.appcompat.widget.LinearLayoutCompat
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingHorizontal="16dp"
|
||||||
|
android:paddingVertical="16dp">
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title_text"
|
||||||
|
style="@style/MaterialAlertDialog.Material3.Title.Text.CenterStacked"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:layout_marginBottom="16dp"
|
||||||
android:padding="16dp">
|
android:gravity="center_horizontal"
|
||||||
|
android:text="@string/dialog_vendita_filtro_avanzato" />
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:id="@+id/input_cod_rag_soc"
|
||||||
|
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:hint="@string/rag_soc"
|
||||||
|
android:imeOptions="actionNext"
|
||||||
|
android:nextFocusDown="@id/input_data_doc">
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
|
||||||
android:id="@+id/title_text"
|
android:id="@+id/filled_exposed_dropdown_rag_soc"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/TextViewMaterial.Dialog.HeadlineText"
|
|
||||||
android:text="@string/dialog_vendita_filtro_avanzato"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:layout_marginBottom="12dp"/>
|
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
|
||||||
android:id="@+id/input_cod_rag_soc"
|
|
||||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="end"
|
||||||
android:imeOptions="actionNext"
|
android:imeOptions="actionNext"
|
||||||
android:nextFocusDown="@id/input_data_doc"
|
android:nextFocusDown="@id/input_data_doc"
|
||||||
android:hint="@string/rag_soc">
|
android:singleLine="true"
|
||||||
|
android:text="@={viewmodel.ragSocTextBindable}" /> <!-- Binding bidirezionale -->
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatAutoCompleteTextView
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
android:id="@+id/filled_exposed_dropdown_rag_soc"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:ellipsize="end"
|
|
||||||
android:imeOptions="actionNext"
|
|
||||||
android:nextFocusDown="@id/input_data_doc"
|
|
||||||
app:binding="@{viewmodel.ragSoc}" />
|
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:id="@+id/input_data_doc"
|
||||||
|
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:hint="@string/document_date">
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
|
||||||
android:id="@+id/input_data_doc"
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
|
android:id="@+id/filled_exposed_dropdown_data_doc"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="@string/document_date">
|
android:focusable="false"
|
||||||
|
android:inputType="textNoSuggestions"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:textAppearance="?attr/textAppearanceSubtitle1"
|
||||||
|
android:minHeight="?attr/listPreferredItemHeightSmall"
|
||||||
|
app:binding="@{viewmodel.dataDocBindable}"
|
||||||
|
app:parentView="@{view}" />
|
||||||
|
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<com.google.android.material.textfield.TextInputEditText
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
android:id="@+id/filled_exposed_dropdown_data_doc"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:inputType="textNoSuggestions"
|
|
||||||
android:focusable="false"
|
|
||||||
android:singleLine="true"
|
|
||||||
app:binding="@{viewmodel.dataDoc}"/>
|
|
||||||
|
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="24dp"
|
|
||||||
android:layout_marginEnd="24dp"
|
|
||||||
android:layout_marginTop="8dp">
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Guideline
|
|
||||||
android:id="@+id/buttons_guideline"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical"
|
|
||||||
app:layout_constraintGuide_percent="0.5"/>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/neutral_btn"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/Button.PrimaryOutline"
|
|
||||||
android:layout_marginLeft="8dp"
|
|
||||||
android:layout_marginRight="8dp"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintEnd_toStartOf="@id/buttons_guideline"
|
|
||||||
app:strokeColor="?colorPrimary"
|
|
||||||
android:text="@string/reset"/>
|
|
||||||
|
|
||||||
|
|
||||||
<com.google.android.material.button.MaterialButton
|
|
||||||
android:id="@+id/positive_btn"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/Button.PrimaryFull"
|
|
||||||
android:layout_marginLeft="8dp"
|
|
||||||
android:layout_marginRight="8dp"
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="@id/buttons_guideline"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
android:text="@string/confirm"/>
|
|
||||||
|
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
</ScrollView>
|
|
||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
</layout>
|
</layout>
|
||||||
@@ -31,15 +31,8 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:id="@+id/recyclerView"
|
android:id="@+id/recyclerView"
|
||||||
android:scrollbars="none"
|
android:scrollbars="none"
|
||||||
android:paddingEnd="4dp"/>
|
android:paddingEnd="4dp"
|
||||||
|
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
|
||||||
<!-- <it.integry.integrywmsnative.ui.fastscroll.FastScroller-->
|
|
||||||
<!-- android:id="@+id/fastscroll"-->
|
|
||||||
<!-- android:orientation="vertical"-->
|
|
||||||
<!-- android:layout_width="wrap_content"-->
|
|
||||||
<!-- android:layout_height="match_parent"-->
|
|
||||||
<!-- android:layout_alignParentEnd="true"/>-->
|
|
||||||
|
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/empty_view"
|
android:id="@+id/empty_view"
|
||||||
|
|||||||
@@ -2,39 +2,37 @@
|
|||||||
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
|
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
|
||||||
|
<data>
|
||||||
|
<variable
|
||||||
|
name="item"
|
||||||
|
type="String" />
|
||||||
|
</data>
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="2dp"
|
android:layout_marginStart="2dp"
|
||||||
android:layout_marginEnd="2dp"
|
|
||||||
android:layout_marginTop="12dp"
|
android:layout_marginTop="12dp"
|
||||||
|
android:layout_marginEnd="2dp"
|
||||||
android:layout_marginBottom="8dp"
|
android:layout_marginBottom="8dp"
|
||||||
app:cardElevation="0dp"
|
app:cardBackgroundColor="@color/gray_200"
|
||||||
app:cardCornerRadius="4dp">
|
app:cardCornerRadius="4dp"
|
||||||
|
app:cardElevation="0dp">
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:layout_width="match_parent"
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
|
style="@style/AppTheme.NewMaterial.Text.ListDivider"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingStart="8dp"
|
android:ellipsize="end"
|
||||||
android:paddingEnd="8dp"
|
android:layout_margin="8dp"
|
||||||
android:paddingTop="8dp"
|
android:singleLine="true"
|
||||||
android:paddingBottom="8dp"
|
android:textAllCaps="true"
|
||||||
android:background="@color/gray_200">
|
android:textColor="@android:color/black"
|
||||||
|
android:textStyle="bold"
|
||||||
<TextView
|
android:text="@{item}"
|
||||||
android:id="@+id/title"
|
tools:text="Title here" />
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/AppTheme.NewMaterial.Text.ListDivider"
|
|
||||||
android:textAllCaps="true"
|
|
||||||
android:ellipsize="end"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:textColor="@android:color/black"
|
|
||||||
tools:text="Title here"/>
|
|
||||||
</RelativeLayout>
|
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
</layout>
|
</layout>
|
||||||
@@ -1,81 +1,138 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
|
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools">
|
||||||
|
|
||||||
<data>
|
<data>
|
||||||
|
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
|
||||||
<import type="it.integry.integrywmsnative.R" />
|
<import type="it.integry.integrywmsnative.R" />
|
||||||
<variable
|
<variable
|
||||||
name="consegna"
|
name="item"
|
||||||
type="it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO" />
|
type="it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO" />
|
||||||
</data>
|
</data>
|
||||||
|
|
||||||
<RelativeLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="4dp"
|
android:layout_marginVertical="3dp"
|
||||||
android:layout_marginStart="4dp"
|
android:layout_marginHorizontal="4dp"
|
||||||
android:layout_marginBottom="4dp"
|
android:padding="6dp"
|
||||||
android:paddingStart="8dp"
|
|
||||||
android:paddingEnd="8dp"
|
|
||||||
android:paddingTop="8dp"
|
|
||||||
android:paddingBottom="8dp"
|
|
||||||
android:background="@drawable/bg_checked_layout"
|
android:background="@drawable/bg_checked_layout"
|
||||||
app:backgroundTintResID="@{consegna.selected.get() ? R.color.bg_checked_layout : android.R.color.transparent}" >
|
app:backgroundTintResID="@{item.selected.get() ? R.color.bg_checked_layout : android.R.color.transparent}" >
|
||||||
|
|
||||||
|
<!-- Riga Superiore -->
|
||||||
|
<com.google.android.material.chip.Chip
|
||||||
|
android:id="@+id/textViewNumeroDocumento"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:ensureMinTouchTargetSize="false"
|
||||||
|
app:chipBackgroundColor="?attr/colorPrimaryContainer"
|
||||||
|
app:textStartPadding="0dp"
|
||||||
|
app:textEndPadding="0dp"
|
||||||
|
app:chipMinHeight="0dp"
|
||||||
|
android:paddingVertical="4dp"
|
||||||
|
android:text="@{String.valueOf(item.numDoc)}"
|
||||||
|
android:textColor="?attr/colorOnPrimaryContainer"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
app:chipStrokeColor="?attr/colorOnPrimaryContainer"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
tools:text="NUM DOC" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewDataDocumento"
|
||||||
|
style="@style/AppTheme.NewMaterial.Text"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="@color/colorPrimaryGray"
|
||||||
|
android:textSize="14sp"
|
||||||
|
app:dateFormat="@{UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN}"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBaseline_toBaselineOf="@id/textViewNumeroDocumento"
|
||||||
|
app:localDateText="@{item.dataDoc}"
|
||||||
|
tools:text="13 Apr" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewIndirizzo"
|
||||||
|
style="@android:style/TextAppearance.Small"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="8dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@{item.rifOrd}"
|
||||||
|
android:textColor="@android:color/black"
|
||||||
|
app:layout_constraintBaseline_toBaselineOf="@id/textViewNumeroDocumento"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/textViewDataDocumento"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/textViewNumeroDocumento"
|
||||||
|
app:visibilityWhenNotNull="@{item.rifOrd}"
|
||||||
|
tools:text="Via Esempio Lungo, 123 - Città (Prov)" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Barrier
|
||||||
|
android:id="@+id/barrierRigaSuperiore"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
app:barrierDirection="bottom"
|
||||||
|
app:constraint_referenced_ids="textViewNumeroDocumento,textViewIndirizzo,textViewDataDocumento" />
|
||||||
|
|
||||||
|
<!-- Riga Inferiore -->
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewDataSpedizioneLabel"
|
||||||
|
style="@style/TextAppearance.MaterialComponents.Caption"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:text="@string/delivered_on"
|
||||||
|
android:textColor="?android:attr/textColorSecondary"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/barrierRigaSuperiore"
|
||||||
|
app:visibilityWhenNotNull="@{item.dataReg}"
|
||||||
|
tools:visibility="visible"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/textViewDataSpedizioneValue"
|
||||||
|
style="@style/AppTheme.NewMaterial.Text"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="4dp"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
|
app:dateFormat="@{UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN}"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/textViewDataSpedizioneLabel"
|
||||||
|
app:layout_constraintBaseline_toBaselineOf="@id/textViewDataSpedizioneLabel"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/guidelineCentro"
|
||||||
|
app:layout_constraintHorizontal_bias="0.0"
|
||||||
|
app:localDateText="@{item.dataReg}"
|
||||||
|
app:visibilityWhenNotNull="@{item.dataReg}"
|
||||||
|
tools:text="20 Mag 2023" />
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.Guideline
|
||||||
|
android:id="@+id/guidelineCentro"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
app:layout_constraintGuide_percent="0.60" />
|
||||||
|
|
||||||
|
|
||||||
|
<TextView
|
||||||
<TextView
|
android:id="@+id/textViewCompilatoDaValue"
|
||||||
android:id="@+id/badge1"
|
style="@style/AppTheme.NewMaterial.Text.Badge"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
tools:text="BADGE 1"
|
android:layout_marginStart="4dp"
|
||||||
android:background="@drawable/badge_round_corner"
|
android:maxLines="1"
|
||||||
android:backgroundTint="?colorPrimary"
|
android:text="@{item.compilatoDa}"
|
||||||
android:textColor="@android:color/white"
|
android:textSize="12sp"
|
||||||
android:paddingTop="2dp"
|
android:textColor="?android:attr/textColorPrimary"
|
||||||
android:paddingBottom="2dp"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
android:paddingLeft="6dp"
|
app:layout_constraintTop_toBottomOf="@id/barrierRigaSuperiore"
|
||||||
android:paddingRight="6dp"
|
android:layout_marginTop="6dp"
|
||||||
android:textStyle="bold"/>
|
app:visibilityWhenNotNull="@{item.compilatoDa}"
|
||||||
|
tools:text="Mario Rossi" />
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
android:id="@+id/description_main"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:textColor="@android:color/black"
|
|
||||||
style="@android:style/TextAppearance.Small"
|
|
||||||
android:layout_marginTop="4dp"
|
|
||||||
android:layout_marginEnd="4dp"
|
|
||||||
android:layout_toStartOf="@id/compilato_da"
|
|
||||||
android:layout_below="@id/badge1"
|
|
||||||
android:singleLine="true"
|
|
||||||
android:ellipsize="end"
|
|
||||||
tools:text="TITLE"/>
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/date"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/AppTheme.NewMaterial.Text"
|
|
||||||
android:layout_toEndOf="@id/badge1"
|
|
||||||
android:textAlignment="textEnd"
|
|
||||||
android:textColor="@color/colorPrimaryGray"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:textSize="14sp"
|
|
||||||
tools:text="13 Apr"/>
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
|
||||||
android:id="@+id/compilato_da"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
style="@style/AppTheme.NewMaterial.Text.Badge"
|
|
||||||
android:layout_marginTop="4dp"
|
|
||||||
android:layout_below="@id/date"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:textSize="12sp"
|
|
||||||
tools:text="Nome Cognome"/>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
</layout>
|
</layout>
|
||||||
@@ -367,7 +367,7 @@
|
|||||||
<string name="not_valid_recipient_error">Destinatario non valido</string>
|
<string name="not_valid_recipient_error">Destinatario non valido</string>
|
||||||
|
|
||||||
<string name="shipped_on">Spedito il</string>
|
<string name="shipped_on">Spedito il</string>
|
||||||
<string name="delivered_on">Consegnato il %s</string>
|
<string name="delivered_on">Consegnato il</string>
|
||||||
<string name="title_dynamic_frudis">Personalizzazioni Frudis</string>
|
<string name="title_dynamic_frudis">Personalizzazioni Frudis</string>
|
||||||
|
|
||||||
<string name="batch_lot_not_enabled"><![CDATA[Il lotto: <b>%s</b> non è attivo. Continuare?]]></string>
|
<string name="batch_lot_not_enabled"><![CDATA[Il lotto: <b>%s</b> non è attivo. Continuare?]]></string>
|
||||||
|
|||||||
@@ -371,7 +371,7 @@
|
|||||||
<string name="not_valid_recipient_error">Invalid recipient</string>
|
<string name="not_valid_recipient_error">Invalid recipient</string>
|
||||||
|
|
||||||
<string name="shipped_on">Shipped</string>
|
<string name="shipped_on">Shipped</string>
|
||||||
<string name="delivered_on">Delivered on %s</string>
|
<string name="delivered_on">Delivered</string>
|
||||||
<string name="title_dynamic_frudis">Frudis customizations</string>
|
<string name="title_dynamic_frudis">Frudis customizations</string>
|
||||||
|
|
||||||
<string name="batch_lot_not_enabled"><![CDATA[Batch lot: <b>%s</b> is inactive. To continue?]]></string>
|
<string name="batch_lot_not_enabled"><![CDATA[Batch lot: <b>%s</b> is inactive. To continue?]]></string>
|
||||||
|
|||||||
Reference in New Issue
Block a user