Refactoring accettazione ordini produzione
This commit is contained in:
parent
627d3646a6
commit
18b4b08e1b
@ -23,6 +23,8 @@ import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoComponent;
|
|||||||
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoModule;
|
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoModule;
|
||||||
import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent;
|
import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent;
|
||||||
import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule;
|
import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule;
|
||||||
|
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoComponent;
|
||||||
|
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoModule;
|
||||||
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdComponent;
|
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdComponent;
|
||||||
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule;
|
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.ProdFabbisognoLineeProdModule;
|
||||||
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent;
|
import it.integry.integrywmsnative.gest.prod_fabbisogno_linee_prod.dialog_ask_mag_prossimita.DialogAskMagazzinoProssimitaComponent;
|
||||||
@ -85,7 +87,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr
|
|||||||
VersamentoMerceModule.class,
|
VersamentoMerceModule.class,
|
||||||
DialogAskMagazzinoProssimitaModule.class,
|
DialogAskMagazzinoProssimitaModule.class,
|
||||||
DialogChooseBatchLotModule.class,
|
DialogChooseBatchLotModule.class,
|
||||||
DialogRowInfoProdFabbisognoLineeProdModule.class
|
DialogRowInfoProdFabbisognoLineeProdModule.class,
|
||||||
|
ProdOrdineProduzioneElencoModule.class
|
||||||
})
|
})
|
||||||
public interface MainApplicationComponent {
|
public interface MainApplicationComponent {
|
||||||
|
|
||||||
@ -116,6 +119,7 @@ public interface MainApplicationComponent {
|
|||||||
DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent();
|
DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent();
|
||||||
ProdRientroMerceComponent.Factory prodRientroMerceComponent();
|
ProdRientroMerceComponent.Factory prodRientroMerceComponent();
|
||||||
ProdRientroMerceOrderDetailComponent.Factory prodRientroMerceOrderDetailComponent();
|
ProdRientroMerceOrderDetailComponent.Factory prodRientroMerceOrderDetailComponent();
|
||||||
|
ProdOrdineProduzioneElencoComponent.Factory prodOrdineProduzioneElencoComponent();
|
||||||
|
|
||||||
|
|
||||||
void inject(MainApplication mainApplication);
|
void inject(MainApplication mainApplication);
|
||||||
|
|||||||
@ -447,10 +447,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void getMultipleByTestate(List<MtbColt> testate, boolean onlyResiduo, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
|
public void getMultipleByTestate(List<MtbColt> testate, boolean onlyResiduo, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
|
||||||
ColliMagazzinoRESTConsumer.getMultipleByTestateStatic(testate, onlyResiduo, onComplete, onFailed);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void getMultipleByTestateStatic(List<MtbColt> testate, boolean onlyResiduo, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
|
|
||||||
ArrayList<MtbColt> resultMtbColt = new ArrayList<>();
|
ArrayList<MtbColt> resultMtbColt = new ArrayList<>();
|
||||||
cyclicGetMultipleByTestate(testate.iterator(), onlyResiduo, resultMtbColt, () -> {
|
cyclicGetMultipleByTestate(testate.iterator(), onlyResiduo, resultMtbColt, () -> {
|
||||||
onComplete.run(resultMtbColt);
|
onComplete.run(resultMtbColt);
|
||||||
@ -458,9 +454,9 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void cyclicGetMultipleByTestate(@NotNull Iterator<MtbColt> sourceMtbColts, boolean onlyResiduo, ArrayList<MtbColt> resultMtbColt, Runnable onComplete, RunnableArgs<Exception> onAbort) {
|
private void cyclicGetMultipleByTestate(@NotNull Iterator<MtbColt> sourceMtbColts, boolean onlyResiduo, ArrayList<MtbColt> resultMtbColt, Runnable onComplete, RunnableArgs<Exception> onAbort) {
|
||||||
if (sourceMtbColts.hasNext()) {
|
if (sourceMtbColts.hasNext()) {
|
||||||
getByTestataStatic(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> {
|
getByTestata(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> {
|
||||||
resultMtbColt.add(mtbColt);
|
resultMtbColt.add(mtbColt);
|
||||||
cyclicGetMultipleByTestate(sourceMtbColts, onlyResiduo, resultMtbColt, onComplete, onAbort);
|
cyclicGetMultipleByTestate(sourceMtbColts, onlyResiduo, resultMtbColt, onComplete, onAbort);
|
||||||
}, onAbort);
|
}, onAbort);
|
||||||
@ -476,14 +472,10 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
|
|||||||
.setDataCollo(dataCollo)
|
.setDataCollo(dataCollo)
|
||||||
.setSerCollo(serCollo);
|
.setSerCollo(serCollo);
|
||||||
|
|
||||||
ColliMagazzinoRESTConsumer.getByTestataStatic(mtbColtToRetrieve, onlyResiduo, throwExcIfNull, onComplete, onFailed);
|
getByTestata(mtbColtToRetrieve, onlyResiduo, throwExcIfNull, onComplete, onFailed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getByTestata(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
|
public void getByTestata(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
|
||||||
ColliMagazzinoRESTConsumer.getByTestataStatic(testata, onlyResiduo, throwExcIfNull, onComplete, onFailed);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void getByTestataStatic(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs<MtbColt> onComplete, RunnableArgs<Exception> onFailed) {
|
|
||||||
testata.setMtbColr(new ObservableArrayList<>());
|
testata.setMtbColr(new ObservableArrayList<>());
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -39,10 +39,6 @@ public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer {
|
|||||||
|
|
||||||
|
|
||||||
public void retrievePickingListNew(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
|
public void retrievePickingListNew(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
|
||||||
retrievePickingListNewStatic(orders, onComplete, onFailed);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void retrievePickingListNewStatic(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
|
|
||||||
List<GetPickingListAccettazioneDTO> getPickingListDTOs = Stream.of(orders)
|
List<GetPickingListAccettazioneDTO> getPickingListDTOs = Stream.of(orders)
|
||||||
.map(x -> new GetPickingListAccettazioneDTO()
|
.map(x -> new GetPickingListAccettazioneDTO()
|
||||||
.setData(x.getData())
|
.setData(x.getData())
|
||||||
@ -63,7 +59,6 @@ public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer {
|
|||||||
onFailed.run(new Exception(t));
|
onFailed.run(new Exception(t));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -288,26 +288,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
|
|||||||
this.mViewModel.loadPicking(selectedOrders);
|
this.mViewModel.loadPicking(selectedOrders);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLoadingStarted() {
|
|
||||||
BarcodeManager.disable();
|
|
||||||
this.openProgress();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onLoadingEnded() {
|
|
||||||
this.closeProgress();
|
|
||||||
BarcodeManager.enable();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onError(Exception ex) {
|
|
||||||
this.closeProgress();
|
|
||||||
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
|
|
||||||
BarcodeManager.enable();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders) {
|
public void onOrderFiltered(List<OrdiniUscitaElencoDTO> filteredOrders) {
|
||||||
refreshList(filteredOrders);
|
refreshList(filteredOrders);
|
||||||
|
|||||||
@ -0,0 +1,15 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
|
||||||
|
|
||||||
|
import dagger.Subcomponent;
|
||||||
|
|
||||||
|
@Subcomponent
|
||||||
|
public interface ProdOrdineProduzioneElencoComponent {
|
||||||
|
|
||||||
|
@Subcomponent.Factory
|
||||||
|
interface Factory {
|
||||||
|
ProdOrdineProduzioneElencoComponent create();
|
||||||
|
}
|
||||||
|
|
||||||
|
void inject(ProdOrdineProduzioneElencoFragment prodOrdineProduzioneElencoFragment);
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,19 +1,17 @@
|
|||||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
|
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
|
||||||
|
|
||||||
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.text.SpannableString;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import androidx.appcompat.widget.AppCompatTextView;
|
import androidx.appcompat.widget.AppCompatTextView;
|
||||||
import androidx.databinding.DataBindingUtil;
|
import androidx.databinding.DataBindingUtil;
|
||||||
|
import androidx.databinding.ObservableArrayList;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
|
||||||
@ -23,22 +21,26 @@ import java.math.BigDecimal;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import it.integry.integrywmsnative.MainApplication;
|
||||||
import it.integry.integrywmsnative.R;
|
import it.integry.integrywmsnative.R;
|
||||||
import it.integry.integrywmsnative.core.data_cache.DataCache;
|
import it.integry.integrywmsnative.core.data_cache.DataCache;
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
import it.integry.integrywmsnative.core.di.BindableBoolean;
|
||||||
|
import it.integry.integrywmsnative.core.expansion.BaseFragment;
|
||||||
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
|
||||||
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
|
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
|
||||||
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
|
||||||
import it.integry.integrywmsnative.core.rest.CommonRESTException;
|
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityProgress;
|
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||||
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElencoBinding;
|
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElencoBinding;
|
||||||
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||||
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
|
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
|
||||||
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumer;
|
|
||||||
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity;
|
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity;
|
||||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneHelper;
|
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel;
|
||||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneListAdapter;
|
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoListModel;
|
||||||
|
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.OrdineProduzioneListAdapter;
|
||||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato;
|
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato;
|
||||||
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
import it.integry.integrywmsnative.ui.ElevatedToolbar;
|
||||||
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
|
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
|
||||||
@ -46,18 +48,19 @@ import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
|
|||||||
/**
|
/**
|
||||||
* A simple {@link Fragment} subclass.
|
* A simple {@link Fragment} subclass.
|
||||||
*/
|
*/
|
||||||
public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment {
|
public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements ProdOrdineProduzioneElencoViewModel.Listener, ITitledFragment, IScrollableFragment, IFilterableFragment {
|
||||||
|
|
||||||
|
public BindableBoolean fabVisible = new BindableBoolean(false);
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ProdOrdineProduzioneElencoViewModel mViewModel;
|
||||||
|
|
||||||
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
|
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
|
||||||
private ElevatedToolbar mToolbar;
|
private ElevatedToolbar mToolbar;
|
||||||
|
|
||||||
private FragmentProdOrdineProduzioneElencoBinding mBinding;
|
private FragmentProdOrdineProduzioneElencoBinding mBinding;
|
||||||
|
|
||||||
private OrdineProduzioneHelper mHelper;
|
private final ObservableArrayList<MainListProdOrdineProduzioneElencoListModel> mOrdiniInevasiMutableData = new ObservableArrayList<>();
|
||||||
private OrdineProduzioneListAdapter mAdapter;
|
|
||||||
|
|
||||||
private List<OrdineAccettazioneInevasoDTO> mOriginalOrderList;
|
|
||||||
private List<OrdineAccettazioneInevasoDTO> mRenderedOrderList = new ArrayList<>();
|
|
||||||
|
|
||||||
private AppCompatTextView mAppBarTitle;
|
private AppCompatTextView mAppBarTitle;
|
||||||
|
|
||||||
@ -87,21 +90,30 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
|
|||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false);
|
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false);
|
||||||
|
|
||||||
|
MainApplication.appComponent
|
||||||
|
.prodOrdineProduzioneElencoComponent()
|
||||||
|
.create()
|
||||||
|
.inject(this);
|
||||||
|
|
||||||
|
mViewModel.setListener(this);
|
||||||
|
|
||||||
|
mBinding.setLifecycleOwner(this);
|
||||||
mBinding.setView(this);
|
mBinding.setView(this);
|
||||||
mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
|
|
||||||
mBinding.ordineProduzioneMainFab.hide();
|
|
||||||
|
|
||||||
mBinding.ordineProduzioneMainFab.setOnClickListener(v -> {
|
this.initRecyclerView();
|
||||||
this.onAccettazioneMainFabClick();
|
|
||||||
});
|
|
||||||
|
|
||||||
mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList);
|
|
||||||
|
|
||||||
init();
|
|
||||||
return mBinding.getRoot();
|
return mBinding.getRoot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
|
||||||
|
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
||||||
|
mViewModel.init(codMdep);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroy() {
|
public void onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
@ -117,88 +129,134 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
|
|||||||
mAppBarTitle.setText(context.getText(R.string.prod_ordine_produzione_title_fragment).toString());
|
mAppBarTitle.setText(context.getText(R.string.prod_ordine_produzione_title_fragment).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void init() {
|
|
||||||
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
|
|
||||||
|
|
||||||
mHelper = new OrdineProduzioneHelper(getActivity());
|
|
||||||
mHelper.loadOrdini(ordini -> {
|
|
||||||
if (ordini != null) {
|
|
||||||
Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show();
|
|
||||||
mOriginalOrderList = ordini;
|
|
||||||
}
|
|
||||||
|
|
||||||
mBinding.ordiniProduzioneEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE);
|
|
||||||
refreshRenderedOrdini(ordini);
|
|
||||||
initRecyclerView();
|
|
||||||
progress.dismiss();
|
|
||||||
}, ex -> {
|
|
||||||
progress.dismiss();
|
|
||||||
|
|
||||||
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
|
|
||||||
if (errorMessage == null) errorMessage = ex.getMessage();
|
|
||||||
DialogSimpleMessageView
|
|
||||||
.makeErrorDialog(new SpannableString(errorMessage), null, null)
|
|
||||||
.show(getActivity().getSupportFragmentManager(), "tag");
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setScrollToolbar(ElevatedToolbar toolbar) {
|
public void setScrollToolbar(ElevatedToolbar toolbar) {
|
||||||
mToolbar = toolbar;
|
mToolbar = toolbar;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initRecyclerView() {
|
private void initRecyclerView() {
|
||||||
mAdapter = new OrdineProduzioneListAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged);
|
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList);
|
||||||
mBinding.ordineProduzioneMainList.setAdapter(mAdapter);
|
|
||||||
|
mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||||
|
|
||||||
|
OrdineProduzioneListAdapter adapter = new OrdineProduzioneListAdapter(getActivity(), mOrdiniInevasiMutableData)
|
||||||
|
.setOnGroupItemClicked(x -> {
|
||||||
|
Stream.of(mOrdiniInevasiMutableData)
|
||||||
|
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x) && y.getSelectedObservable().get())
|
||||||
|
.forEach(y -> y.getSelectedObservable().set(false));
|
||||||
|
|
||||||
|
boolean allSelected = Stream.of(mOrdiniInevasiMutableData)
|
||||||
|
.filter(y -> y.getGroupTitle().equalsIgnoreCase(x))
|
||||||
|
.allMatch(y -> y.getSelectedObservable().get());
|
||||||
|
|
||||||
|
Stream.of(mOrdiniInevasiMutableData)
|
||||||
|
.filter(y -> y.getGroupTitle().equalsIgnoreCase(x))
|
||||||
|
.forEach(y -> y.getSelectedObservable().set(!allSelected));
|
||||||
|
})
|
||||||
|
.setOnItemChecked(x -> {
|
||||||
|
Stream.of(mOrdiniInevasiMutableData)
|
||||||
|
.filter(y -> !y.getGroupTitle().equalsIgnoreCase(x.getGroupTitle()) && y.getSelectedObservable().get())
|
||||||
|
.forEach(y -> y.getSelectedObservable().set(false));
|
||||||
|
|
||||||
|
fabVisible.set(Stream.of(mOrdiniInevasiMutableData)
|
||||||
|
.anyMatch(y -> y.getSelectedObservable().get()));
|
||||||
|
});
|
||||||
|
|
||||||
|
adapter.setEmptyView(mBinding.ordiniProduzioneEmptyView);
|
||||||
|
|
||||||
|
mBinding.ordineProduzioneMainList.setAdapter(adapter);
|
||||||
|
|
||||||
|
mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void refreshRenderedOrdini(List<OrdineAccettazioneInevasoDTO> ordini) {
|
private void refreshList(List<OrdineAccettazioneInevasoDTO> filteredList) {
|
||||||
|
|
||||||
mRenderedOrderList.clear();
|
List<OrdineAccettazioneInevasoDTO> tmpList = null;
|
||||||
if (ordini != null) mRenderedOrderList.addAll(ordini);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void refreshRecyclerView() {
|
if(filteredList != null) {
|
||||||
mAdapter.updateItems(mRenderedOrderList);
|
tmpList = filteredList;
|
||||||
}
|
} else if (mAppliedFilterViewModel != null) {
|
||||||
|
// mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
|
||||||
private RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged = dto -> {
|
// mAppliedFilterViewModel.applyAllTests();
|
||||||
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
|
// tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
|
||||||
|
|
||||||
if (dto.isSelected()) {
|
|
||||||
Stream.of(selectedOrders)
|
|
||||||
.filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(dto.getCodAnagOrd()))
|
|
||||||
.forEach(x -> x.setSelected(false));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (selectedOrders != null && selectedOrders.size() > 0) {
|
|
||||||
mBinding.ordineProduzioneMainFab.show();
|
|
||||||
} else {
|
} else {
|
||||||
mBinding.ordineProduzioneMainFab.hide();
|
tmpList = mViewModel.getOrderList().getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.mOrdiniInevasiMutableData.clear();
|
||||||
|
this.mOrdiniInevasiMutableData.addAll(convertDataModelToListModel(tmpList));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<MainListProdOrdineProduzioneElencoListModel> convertDataModelToListModel(List<OrdineAccettazioneInevasoDTO> dataList) {
|
||||||
|
|
||||||
|
return Stream.of(dataList)
|
||||||
|
.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode)
|
||||||
|
.sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : ""))
|
||||||
|
.map(x -> {
|
||||||
|
MainListProdOrdineProduzioneElencoListModel listModel = new MainListProdOrdineProduzioneElencoListModel();
|
||||||
|
|
||||||
|
listModel.setOriginalModel(x);
|
||||||
|
|
||||||
|
listModel.setGroupTitle(x.getRagSocOrd());
|
||||||
|
|
||||||
|
listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero().toString(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
|
||||||
|
|
||||||
|
List<MainListProdOrdineProduzioneElencoClienteListModel> clienti = Stream.of(dataList)
|
||||||
|
.filter(y -> y.getBarcode().equals(x.getBarcode()))
|
||||||
|
.map(y -> new MainListProdOrdineProduzioneElencoClienteListModel()
|
||||||
|
.setPrimaryText(y.getRifOrd())
|
||||||
|
.setRightText(y.getCodJcom()))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
listModel.setClientiListModel(clienti);
|
||||||
|
|
||||||
|
return listModel;
|
||||||
|
})
|
||||||
|
.toList();
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
private void onAccettazioneMainFabClick() {
|
public void dispatchOrders() {
|
||||||
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
|
List<OrdineAccettazioneInevasoDTO> selectedOrders = Stream.of(this.mOrdiniInevasiMutableData)
|
||||||
|
.filter(x -> x.getSelectedObservable().get())
|
||||||
|
.map(MainListProdOrdineProduzioneElencoListModel::getOriginalModel)
|
||||||
|
.toList();
|
||||||
|
|
||||||
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
|
|
||||||
|
|
||||||
OrdiniAccettazioneRESTConsumer.retrievePickingListNewStatic(selectedOrders, sitArtOrds -> {
|
this.mViewModel.loadPicking(selectedOrders);
|
||||||
progress.dismiss();
|
}
|
||||||
|
|
||||||
long artsCounter = Stream.of(sitArtOrds)
|
@Override
|
||||||
|
public void onFilterClick() {
|
||||||
|
// DialogOrdineProduzioneFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
|
||||||
|
// mAppliedFilterViewModel = filter;
|
||||||
|
//
|
||||||
|
// if (filteredOrderList != null) {
|
||||||
|
// refreshList(filteredOrderList);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// }).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addOnPreDestroy(Runnable onPreDestroy) {
|
||||||
|
this.mOnPreDestroyList.add(onPreDestroy);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onOrdersDispatched(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts) {
|
||||||
|
long artsCounter = Stream.of(sitArts)
|
||||||
.filter(x -> UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO))
|
.filter(x -> UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO))
|
||||||
.map(SitArtOrdDTO::getCodMart)
|
.map(SitArtOrdDTO::getCodMart)
|
||||||
.distinct()
|
.distinct()
|
||||||
.count();
|
.count();
|
||||||
|
|
||||||
long ordsCounter = Stream.of(sitArtOrds)
|
long ordsCounter = Stream.of(sitArts)
|
||||||
.distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione())
|
.distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione())
|
||||||
.count();
|
.count();
|
||||||
|
|
||||||
|
|
||||||
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
|
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
|
||||||
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
|
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
|
||||||
+ "<br /><br />" +
|
+ "<br /><br />" +
|
||||||
@ -206,8 +264,8 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
|
|||||||
null,
|
null,
|
||||||
() -> {
|
() -> {
|
||||||
|
|
||||||
String cacheSitArtItemID = DataCache.addItem(sitArtOrds);
|
String cacheSitArtItemID = DataCache.addItem(sitArts);
|
||||||
String cacheOrdersItemID = DataCache.addItem(selectedOrders);
|
String cacheOrdersItemID = DataCache.addItem(orders);
|
||||||
|
|
||||||
Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class);
|
Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class);
|
||||||
myIntent.putExtra("keyOrders", cacheOrdersItemID);
|
myIntent.putExtra("keyOrders", cacheOrdersItemID);
|
||||||
@ -215,46 +273,5 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
|
|||||||
getActivity().startActivity(myIntent);
|
getActivity().startActivity(myIntent);
|
||||||
|
|
||||||
}).show(getActivity().getSupportFragmentManager(), "tag");
|
}).show(getActivity().getSupportFragmentManager(), "tag");
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
ex -> {
|
|
||||||
// Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_LONG).show();
|
|
||||||
progress.dismiss();
|
|
||||||
|
|
||||||
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
|
|
||||||
if (errorMessage == null)
|
|
||||||
errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage();
|
|
||||||
DialogSimpleMessageView
|
|
||||||
.makeErrorDialog(new SpannableString(errorMessage), null, null)
|
|
||||||
.show(getActivity().getSupportFragmentManager(), "tag");
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFilterClick() {
|
|
||||||
DialogOrdineProduzioneFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> {
|
|
||||||
mAppliedFilterViewModel = filter;
|
|
||||||
|
|
||||||
if (filteredOrderList != null) {
|
|
||||||
|
|
||||||
refreshOrdini(filteredOrderList);
|
|
||||||
refreshRecyclerView();
|
|
||||||
}
|
|
||||||
|
|
||||||
}).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void refreshOrdini(List<OrdineAccettazioneInevasoDTO> ordini) {
|
|
||||||
mRenderedOrderList.clear();
|
|
||||||
mRenderedOrderList.addAll(ordini);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addOnPreDestroy(Runnable onPreDestroy) {
|
|
||||||
this.mOnPreDestroyList.add(onPreDestroy);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,21 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
|
||||||
|
|
||||||
|
import dagger.Module;
|
||||||
|
import dagger.Provides;
|
||||||
|
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||||
|
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.rest.ProdOrdineProduzioneRESTConsumer;
|
||||||
|
|
||||||
|
@Module(subcomponents = ProdOrdineProduzioneElencoComponent.class)
|
||||||
|
public class ProdOrdineProduzioneElencoModule {
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
ProdOrdineProduzioneRESTConsumer providesProdOrdineProduzioneRESTConsumer() {
|
||||||
|
return new ProdOrdineProduzioneRESTConsumer();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
ProdOrdineProduzioneElencoViewModel providesProdOrdineProduzioneElencoViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ProdOrdineProduzioneRESTConsumer prodOrdineProduzioneRESTConsumer) {
|
||||||
|
return new ProdOrdineProduzioneElencoViewModel(colliMagazzinoRESTConsumer, prodOrdineProduzioneRESTConsumer);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione;
|
||||||
|
|
||||||
|
import androidx.lifecycle.MutableLiveData;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
|
||||||
|
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
|
||||||
|
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||||
|
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
|
||||||
|
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.rest.ProdOrdineProduzioneRESTConsumer;
|
||||||
|
|
||||||
|
public class ProdOrdineProduzioneElencoViewModel {
|
||||||
|
|
||||||
|
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
|
||||||
|
private final ProdOrdineProduzioneRESTConsumer mProdOrdineProduzioneRESTConsumer;
|
||||||
|
|
||||||
|
private final MutableLiveData<List<OrdineAccettazioneInevasoDTO>> mOrderList = new MutableLiveData<>();
|
||||||
|
|
||||||
|
private Listener mListener;
|
||||||
|
|
||||||
|
private String codMdep;
|
||||||
|
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public ProdOrdineProduzioneElencoViewModel(ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, ProdOrdineProduzioneRESTConsumer prodOrdineProduzioneRESTConsumer) {
|
||||||
|
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
|
||||||
|
this.mProdOrdineProduzioneRESTConsumer = prodOrdineProduzioneRESTConsumer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void init(String codMdep) {
|
||||||
|
this.codMdep = codMdep;
|
||||||
|
|
||||||
|
this.sendOnLoadingStarted();
|
||||||
|
new Thread(() -> {
|
||||||
|
|
||||||
|
mProdOrdineProduzioneRESTConsumer.getOrdiniInevasi(codMdep, orderList -> {
|
||||||
|
this.mOrderList.setValue(orderList);
|
||||||
|
|
||||||
|
this.sendOnLoadingEnded();
|
||||||
|
}, this::sendError);
|
||||||
|
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void loadPicking(List<OrdineAccettazioneInevasoDTO> selectedOrders) {
|
||||||
|
|
||||||
|
this.sendOnLoadingStarted();
|
||||||
|
|
||||||
|
new Thread(() -> {
|
||||||
|
|
||||||
|
this.mProdOrdineProduzioneRESTConsumer.retrievePickingListNew(selectedOrders, sitArtOrds -> {
|
||||||
|
|
||||||
|
this.sendOnOrdersDispatched(selectedOrders, sitArtOrds);
|
||||||
|
this.sendOnLoadingEnded();
|
||||||
|
|
||||||
|
}, this::sendError);
|
||||||
|
|
||||||
|
}).start();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public MutableLiveData<List<OrdineAccettazioneInevasoDTO>> getOrderList() {
|
||||||
|
return mOrderList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProdOrdineProduzioneElencoViewModel setListener(Listener listener) {
|
||||||
|
this.mListener = listener;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendOnLoadingStarted() {
|
||||||
|
if (this.mListener != null) mListener.onLoadingStarted();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendOnLoadingEnded() {
|
||||||
|
if (this.mListener != null) mListener.onLoadingEnded();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendError(Exception ex) {
|
||||||
|
if (this.mListener != null) mListener.onError(ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sendOnOrdersDispatched(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts) {
|
||||||
|
if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface Listener extends ILoadingListener {
|
||||||
|
|
||||||
|
void onError(Exception ex);
|
||||||
|
|
||||||
|
void onOrdersDispatched(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,70 +0,0 @@
|
|||||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
|
||||||
import it.integry.integrywmsnative.core.rest.RESTBuilder;
|
|
||||||
import it.integry.integrywmsnative.core.rest.model.EsitoType;
|
|
||||||
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
|
|
||||||
import it.integry.integrywmsnative.core.settings.SettingsManager;
|
|
||||||
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
|
||||||
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumerService;
|
|
||||||
import retrofit2.Call;
|
|
||||||
import retrofit2.Callback;
|
|
||||||
import retrofit2.Response;
|
|
||||||
|
|
||||||
public class OrdineProduzioneHelper {
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
|
|
||||||
public OrdineProduzioneHelper(Context context){
|
|
||||||
mContext = context;
|
|
||||||
}
|
|
||||||
public void loadOrdini(RunnableArgs<List<OrdineAccettazioneInevasoDTO>> onComplete, RunnableArgs<Exception> onFailed){
|
|
||||||
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
|
||||||
|
|
||||||
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
|
|
||||||
service.listOrdiniInevasi(codMdep, "P").enqueue(new Callback<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>>() {
|
|
||||||
@Override
|
|
||||||
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> response) {
|
|
||||||
|
|
||||||
if(response.isSuccessful()) {
|
|
||||||
|
|
||||||
if(response.body() != null) {
|
|
||||||
if(response.body().getEsito() == EsitoType.OK) {
|
|
||||||
onComplete.run(response.body().getDto());
|
|
||||||
} else {
|
|
||||||
Log.e("Accettazione", response.body().getErrorMessage());
|
|
||||||
onFailed.run(new Exception(response.body().getErrorMessage()));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.e("Accettazione", response.message());
|
|
||||||
onFailed.run(new Exception(response.message()));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Log.e("Accettazione", "Status " + response.code() + ": " + response.message());
|
|
||||||
onFailed.run(new Exception("Status " + response.code() + ": " + response.message()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Throwable t) {
|
|
||||||
Log.e("Produzione", t.toString());
|
|
||||||
onFailed.run(new Exception(t));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public List<OrdineAccettazioneInevasoDTO> getSelectedOrders(List<OrdineAccettazioneInevasoDTO> ordiniList){
|
|
||||||
return Stream.of(ordiniList)
|
|
||||||
.filter(OrdineAccettazioneInevasoDTO::isSelected)
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,196 +0,0 @@
|
|||||||
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.text.Html;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
|
|
||||||
import androidx.databinding.DataBindingUtil;
|
|
||||||
import androidx.databinding.Observable;
|
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
|
||||||
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import it.integry.integrywmsnative.R;
|
|
||||||
import it.integry.integrywmsnative.core.di.BindableBoolean;
|
|
||||||
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
|
||||||
import it.integry.integrywmsnative.core.utility.UtilityString;
|
|
||||||
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupClientiBinding;
|
|
||||||
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupModelBinding;
|
|
||||||
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListModelBinding;
|
|
||||||
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
|
||||||
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
|
|
||||||
|
|
||||||
public class OrdineProduzioneListAdapter extends SectionedRecyclerViewAdapter<OrdineProduzioneListAdapter.SubheaderHolder, OrdineProduzioneListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
|
|
||||||
|
|
||||||
|
|
||||||
private Context mContext;
|
|
||||||
|
|
||||||
private List<OrdineAccettazioneInevasoDTO> mOriginalDataset;
|
|
||||||
private List<OrdineAccettazioneInevasoDTO> mDataset;
|
|
||||||
private RunnableArgs<OrdineAccettazioneInevasoDTO> mOnSingleSelectionChanged;
|
|
||||||
|
|
||||||
|
|
||||||
static class SubheaderHolder extends RecyclerView.ViewHolder {
|
|
||||||
|
|
||||||
FragmentProdOrdineProduzioneListModelBinding binding;
|
|
||||||
|
|
||||||
SubheaderHolder(FragmentProdOrdineProduzioneListModelBinding binding) {
|
|
||||||
super(binding.getRoot());
|
|
||||||
this.binding = binding;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
|
|
||||||
|
|
||||||
FragmentProdOrdineProduzioneListGroupModelBinding binding;
|
|
||||||
|
|
||||||
SingleItemViewHolder(FragmentProdOrdineProduzioneListGroupModelBinding binding) {
|
|
||||||
super(binding.getRoot());
|
|
||||||
this.binding = binding;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public OrdineProduzioneListAdapter(Context context, List<OrdineAccettazioneInevasoDTO> myDataset, RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged) {
|
|
||||||
mContext = context;
|
|
||||||
mOriginalDataset = myDataset;
|
|
||||||
mDataset = orderItems(myDataset);
|
|
||||||
mOnSingleSelectionChanged = onSingleSelectionChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateItems(List<OrdineAccettazioneInevasoDTO> updatedDataset) {
|
|
||||||
mDataset.clear();
|
|
||||||
mDataset.addAll(orderItems(updatedDataset));
|
|
||||||
notifyDataSetChanged();
|
|
||||||
notifyDataChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private List<OrdineAccettazioneInevasoDTO> orderItems(List<OrdineAccettazioneInevasoDTO> dataset) {
|
|
||||||
return Stream.of(dataset)
|
|
||||||
.distinctBy(OrdineAccettazioneInevasoDTO::getBarcode)
|
|
||||||
.sortBy(x -> x.getRagSocOrd() + (x.getDataConsD() != null ? UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) : ""))
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
|
|
||||||
FragmentProdOrdineProduzioneListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_model, parent, false);
|
|
||||||
return new SubheaderHolder(binding);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
|
|
||||||
FragmentProdOrdineProduzioneListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_model, parent, false);
|
|
||||||
return new SingleItemViewHolder(binding);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBindSubheaderViewHolder(OrdineProduzioneListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
|
|
||||||
subheaderHolder.binding.ordineProduzioneMainListGroupHeader.setText(mDataset.get(nextItemPosition).getRagSocOrd());
|
|
||||||
|
|
||||||
subheaderHolder.binding.getRoot().setOnClickListener(v -> {
|
|
||||||
|
|
||||||
boolean anySelected = Stream.of(mDataset)
|
|
||||||
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
|
||||||
.anyMatch(OrdineAccettazioneInevasoDTO::isSelected);
|
|
||||||
|
|
||||||
Stream.of(mDataset)
|
|
||||||
.filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd()))
|
|
||||||
.forEach(x -> x.setSelected(!anySelected));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBindItemViewHolder(OrdineProduzioneListAdapter.SingleItemViewHolder h, int itemPosition) {
|
|
||||||
final OrdineAccettazioneInevasoDTO ordine = mDataset.get(itemPosition);
|
|
||||||
final OrdineProduzioneListAdapter.SingleItemViewHolder holder = h;
|
|
||||||
|
|
||||||
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setTag(ordine.getNumero());
|
|
||||||
|
|
||||||
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setOnCheckedChangeListener(null);
|
|
||||||
|
|
||||||
ordine.selected.resetOnPropertyChangedCallback();
|
|
||||||
|
|
||||||
|
|
||||||
String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), String.valueOf(ordine.getNumero()), UtilityDate.formatDate(ordine.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
|
|
||||||
holder.binding.ordineProduzioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(testataOrdString));
|
|
||||||
|
|
||||||
holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.removeAllViews();
|
|
||||||
|
|
||||||
List<OrdineAccettazioneInevasoDTO> clienti = Stream.of(mOriginalDataset)
|
|
||||||
.filter(x -> x.getBarcode().equals(ordine.getBarcode()))
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
for (OrdineAccettazioneInevasoDTO cliente : clienti) {
|
|
||||||
FragmentProdOrdineProduzioneListGroupClientiBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_clienti, holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd, false);
|
|
||||||
|
|
||||||
binding.ordineProduzioneMainListGroupClientiComm.setText(cliente.getRifOrd());
|
|
||||||
|
|
||||||
// if (!UtilityString.isNullOrEmpty(cliente.getDataConsS())) {
|
|
||||||
// binding.ordineProduzioneMainListGroupClientiDatacons.setText(UtilityDate.formatDate(cliente.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH));
|
|
||||||
// } else {
|
|
||||||
// binding.ordineProduzioneMainListGroupClientiDatacons.setText("");
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (!UtilityString.isNullOrEmpty(cliente.getCodJcom())) {
|
|
||||||
binding.ordineProduzioneMainListGroupClientiDatacons.setText(cliente.getCodJcom());
|
|
||||||
}
|
|
||||||
|
|
||||||
holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.addView(binding.getRoot());
|
|
||||||
}
|
|
||||||
|
|
||||||
holder.binding.setCheckboxValue(ordine.selected);
|
|
||||||
|
|
||||||
holder.binding.getRoot().setOnClickListener(v -> {
|
|
||||||
ordine.setSelected(!ordine.isSelected());
|
|
||||||
});
|
|
||||||
|
|
||||||
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setChecked(ordine.isSelected());
|
|
||||||
|
|
||||||
//Bindable to View
|
|
||||||
ordine.selected.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
|
|
||||||
@Override
|
|
||||||
public void onPropertyChanged(Observable sender, int propertyId) {
|
|
||||||
if(holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.getTag().equals(ordine.getNumero())) {
|
|
||||||
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setChecked(((BindableBoolean) sender).get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
//View to Bindable
|
|
||||||
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
|
||||||
ordine.setSelected(isChecked);
|
|
||||||
mOnSingleSelectionChanged.run(ordine);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onPlaceSubheaderBetweenItems(int position) {
|
|
||||||
return !this.mDataset.get(position).getRagSocOrd().equalsIgnoreCase(this.mDataset.get(position + 1).getRagSocOrd());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getItemSize() {
|
|
||||||
return mDataset.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getSectionTitle(int position) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.rest;
|
||||||
|
|
||||||
|
import com.annimon.stream.Stream;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
|
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||||
|
import it.integry.integrywmsnative.core.rest.RESTBuilder;
|
||||||
|
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
|
||||||
|
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
|
||||||
|
import it.integry.integrywmsnative.core.utility.UtilityLogger;
|
||||||
|
import it.integry.integrywmsnative.gest.accettazione.dto.GetPickingListAccettazioneDTO;
|
||||||
|
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||||
|
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
|
||||||
|
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumerService;
|
||||||
|
import retrofit2.Call;
|
||||||
|
import retrofit2.Callback;
|
||||||
|
import retrofit2.Response;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class ProdOrdineProduzioneRESTConsumer extends _BaseRESTConsumer {
|
||||||
|
|
||||||
|
public void getOrdiniInevasi(String codMdep, RunnableArgs<List<OrdineAccettazioneInevasoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
|
||||||
|
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
|
||||||
|
service.listOrdiniInevasi(codMdep, "P").enqueue(new Callback<>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Response<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> response) {
|
||||||
|
analyzeAnswer(response, "getOrdiniInevasi", onComplete, onFailed);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<ServiceRESTResponse<List<OrdineAccettazioneInevasoDTO>>> call, Throwable t) {
|
||||||
|
onFailed.run(new Exception(t));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void retrievePickingListNew(List<OrdineAccettazioneInevasoDTO> orders, RunnableArgs<List<SitArtOrdDTO>> onComplete, RunnableArgs<Exception> onFailed) {
|
||||||
|
List<GetPickingListAccettazioneDTO> getPickingListDTOs = Stream.of(orders)
|
||||||
|
.map(x -> new GetPickingListAccettazioneDTO()
|
||||||
|
.setData(x.getData())
|
||||||
|
.setGestione(x.getGestione())
|
||||||
|
.setNumero(x.getNumero()))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class);
|
||||||
|
service.getArticoliFromOrdiniAccettazione(getPickingListDTOs).enqueue(new Callback<>() {
|
||||||
|
@Override
|
||||||
|
public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> response) {
|
||||||
|
analyzeAnswer(response, "retrieveListaArticoliFromOrdiniProduzione", onComplete, onFailed);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Throwable t) {
|
||||||
|
UtilityLogger.errorMe(new Exception(t));
|
||||||
|
onFailed.run(new Exception(t));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui;
|
||||||
|
|
||||||
|
public class MainListProdOrdineProduzioneElencoClienteListModel {
|
||||||
|
private String primaryText;
|
||||||
|
private String rightText;
|
||||||
|
|
||||||
|
|
||||||
|
public String getPrimaryText() {
|
||||||
|
return primaryText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainListProdOrdineProduzioneElencoClienteListModel setPrimaryText(String primaryText) {
|
||||||
|
this.primaryText = primaryText;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRightText() {
|
||||||
|
return rightText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainListProdOrdineProduzioneElencoClienteListModel setRightText(String rightText) {
|
||||||
|
this.rightText = rightText;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,70 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import it.integry.integrywmsnative.core.di.BindableBoolean;
|
||||||
|
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||||
|
|
||||||
|
public class MainListProdOrdineProduzioneElencoListModel {
|
||||||
|
|
||||||
|
private String groupTitle;
|
||||||
|
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
private boolean hidden;
|
||||||
|
private BindableBoolean selected = new BindableBoolean();
|
||||||
|
|
||||||
|
|
||||||
|
private OrdineAccettazioneInevasoDTO originalModel;
|
||||||
|
private List<MainListProdOrdineProduzioneElencoClienteListModel> clientiListModel;
|
||||||
|
|
||||||
|
|
||||||
|
public String getGroupTitle() {
|
||||||
|
return groupTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainListProdOrdineProduzioneElencoListModel setGroupTitle(String groupTitle) {
|
||||||
|
this.groupTitle = groupTitle;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainListProdOrdineProduzioneElencoListModel setDescription(String description) {
|
||||||
|
this.description = description;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isHidden() {
|
||||||
|
return hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainListProdOrdineProduzioneElencoListModel setHidden(boolean hidden) {
|
||||||
|
this.hidden = hidden;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BindableBoolean getSelectedObservable() {
|
||||||
|
return selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrdineAccettazioneInevasoDTO getOriginalModel() {
|
||||||
|
return originalModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainListProdOrdineProduzioneElencoListModel setOriginalModel(OrdineAccettazioneInevasoDTO originalModel) {
|
||||||
|
this.originalModel = originalModel;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<MainListProdOrdineProduzioneElencoClienteListModel> getClientiListModel() {
|
||||||
|
return clientiListModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainListProdOrdineProduzioneElencoListModel setClientiListModel(List<MainListProdOrdineProduzioneElencoClienteListModel> clientiListModel) {
|
||||||
|
this.clientiListModel = clientiListModel;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,153 @@
|
|||||||
|
package it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.text.Html;
|
||||||
|
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 it.integry.integrywmsnative.R;
|
||||||
|
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
|
||||||
|
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
|
||||||
|
import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView;
|
||||||
|
import it.integry.integrywmsnative.core.utility.UtilityString;
|
||||||
|
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupClientiBinding;
|
||||||
|
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListGroupModelBinding;
|
||||||
|
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListModelBinding;
|
||||||
|
|
||||||
|
public class OrdineProduzioneListAdapter extends ExtendedSectionedRecyclerView<MainListProdOrdineProduzioneElencoListModel, OrdineProduzioneListAdapter.SubheaderHolder, OrdineProduzioneListAdapter.SingleItemViewHolder> {
|
||||||
|
|
||||||
|
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
|
private RunnableArgs<String> mOnGroupItemClicked;
|
||||||
|
private RunnableArgs<MainListProdOrdineProduzioneElencoListModel> mOnItemChecked;
|
||||||
|
|
||||||
|
|
||||||
|
static class SubheaderHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
FragmentProdOrdineProduzioneListModelBinding binding;
|
||||||
|
|
||||||
|
SubheaderHolder(FragmentProdOrdineProduzioneListModelBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
this.binding = binding;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
FragmentProdOrdineProduzioneListGroupModelBinding binding;
|
||||||
|
|
||||||
|
SingleItemViewHolder(FragmentProdOrdineProduzioneListGroupModelBinding binding) {
|
||||||
|
super(binding.getRoot());
|
||||||
|
this.binding = binding;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public OrdineProduzioneListAdapter(Context context, ObservableArrayList<MainListProdOrdineProduzioneElencoListModel> myDataset) {
|
||||||
|
super(myDataset);
|
||||||
|
mContext = context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrdineProduzioneListAdapter setOnGroupItemClicked(RunnableArgs<String> onGroupItemClicked) {
|
||||||
|
this.mOnGroupItemClicked = onGroupItemClicked;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public OrdineProduzioneListAdapter setOnItemChecked(RunnableArgs<MainListProdOrdineProduzioneElencoListModel> onItemChecked) {
|
||||||
|
this.mOnItemChecked = onItemChecked;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
FragmentProdOrdineProduzioneListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_model, parent, false);
|
||||||
|
return new SubheaderHolder(binding);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
|
||||||
|
FragmentProdOrdineProduzioneListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_model, parent, false);
|
||||||
|
return new SingleItemViewHolder(binding);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindSubheaderViewHolder(OrdineProduzioneListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
|
||||||
|
subheaderHolder.binding.ordineProduzioneMainListGroupHeader.setText(mDataset.get(nextItemPosition).getGroupTitle());
|
||||||
|
|
||||||
|
subheaderHolder.binding.getRoot().setOnClickListener(new OnSingleClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onSingleClick(View v) {
|
||||||
|
if(mOnGroupItemClicked != null) mOnGroupItemClicked.run(mDataset.get(nextItemPosition).getGroupTitle());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindItemViewHolder(OrdineProduzioneListAdapter.SingleItemViewHolder holder, int itemPosition) {
|
||||||
|
final MainListProdOrdineProduzioneElencoListModel ordine = mDataset.get(itemPosition);
|
||||||
|
|
||||||
|
ordine.getSelectedObservable().resetOnPropertyChangedCallback();
|
||||||
|
|
||||||
|
holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.removeAllViews();
|
||||||
|
holder.binding.ordineProduzioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(ordine.getDescription()));
|
||||||
|
|
||||||
|
|
||||||
|
for (MainListProdOrdineProduzioneElencoClienteListModel cliente : ordine.getClientiListModel()) {
|
||||||
|
FragmentProdOrdineProduzioneListGroupClientiBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_produzione__list_group_clienti, holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd, false);
|
||||||
|
|
||||||
|
binding.ordineProduzioneMainListGroupClientiComm.setText(cliente.getPrimaryText());
|
||||||
|
|
||||||
|
if (!UtilityString.isNullOrEmpty(cliente.getRightText())) {
|
||||||
|
binding.ordineProduzioneMainListGroupClientiDatacons.setText(cliente.getRightText());
|
||||||
|
} else {
|
||||||
|
binding.ordineProduzioneMainListGroupClientiDatacons.setText("");
|
||||||
|
}
|
||||||
|
|
||||||
|
holder.binding.ordineProduzioneMainListGroupItemContainerClientiOrd.addView(binding.getRoot());
|
||||||
|
}
|
||||||
|
|
||||||
|
holder.binding.setSelected(ordine.getSelectedObservable());
|
||||||
|
holder.binding.executePendingBindings();
|
||||||
|
holder.binding.ordineProduzioneMainListGroupItemContainerCheckBox.jumpDrawablesToCurrentState();
|
||||||
|
|
||||||
|
ordine.getSelectedObservable().addOnPropertyChangedCallback(() -> {
|
||||||
|
if(this.mOnItemChecked != null) this.mOnItemChecked.run(ordine);
|
||||||
|
});
|
||||||
|
|
||||||
|
holder.binding.getRoot().setOnClickListener(v -> {
|
||||||
|
ordine.getSelectedObservable().set(!ordine.getSelectedObservable().get());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPlaceSubheaderBetweenItems(int position) {
|
||||||
|
if (getItemSize() == 1) return true;
|
||||||
|
else if (getItemSize() > 1) {
|
||||||
|
MainListProdOrdineProduzioneElencoListModel compare1 = this.mDataset.get(position);
|
||||||
|
MainListProdOrdineProduzioneElencoListModel compare2 = this.mDataset.get(position + 1);
|
||||||
|
|
||||||
|
if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemSize() {
|
||||||
|
return mDataset.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,9 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<layout>
|
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
<data>
|
<data>
|
||||||
<import type="it.integry.integrywmsnative.R" />
|
<import type="it.integry.integrywmsnative.R" />
|
||||||
<variable
|
<variable
|
||||||
name="checkboxValue"
|
name="selected"
|
||||||
type="it.integry.integrywmsnative.core.di.BindableBoolean" />
|
type="it.integry.integrywmsnative.core.di.BindableBoolean" />
|
||||||
|
|
||||||
|
|
||||||
@ -17,12 +17,13 @@
|
|||||||
android:padding="8dp">
|
android:padding="8dp">
|
||||||
|
|
||||||
|
|
||||||
<CheckBox
|
<androidx.appcompat.widget.AppCompatCheckBox
|
||||||
android:id="@+id/ordine_produzione_main_list_group_item_container_checkBox"
|
android:id="@+id/ordine_produzione_main_list_group_item_container_checkBox"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
tools:layout_editor_absoluteX="0dp"
|
tools:layout_editor_absoluteX="0dp"
|
||||||
tools:layout_editor_absoluteY="1dp" />
|
tools:layout_editor_absoluteY="1dp"
|
||||||
|
app:checked="@{selected}" />
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|||||||
@ -56,25 +56,25 @@
|
|||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
|
android:orientation="vertical"
|
||||||
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
|
app:layout_constraintEnd_toStartOf="@id/guideline_empty_right"
|
||||||
|
app:layout_constraintStart_toEndOf="@id/guideline_empty_left"
|
||||||
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
|
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:layout_width="72dp"
|
android:layout_width="72dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:src="@drawable/ic_playlist_add_check_24dp"
|
android:adjustViewBounds="true"
|
||||||
android:adjustViewBounds="true"/>
|
android:src="@drawable/ic_playlist_add_check_24dp" />
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center_horizontal"
|
android:gravity="center_horizontal"
|
||||||
|
android:text="@string/no_orders_found_message"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@android:color/black"
|
||||||
android:textSize="18sp"
|
android:textSize="18sp" />
|
||||||
android:text="@string/no_orders_found_message"/>
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@ -87,8 +87,10 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_gravity="bottom|end"
|
android:layout_gravity="bottom|end"
|
||||||
android:layout_margin="@dimen/fab_margin"
|
android:layout_margin="@dimen/fab_margin"
|
||||||
|
android:onClick="@{() -> view.dispatchOrders()}"
|
||||||
android:tint="@android:color/white"
|
android:tint="@android:color/white"
|
||||||
app:srcCompat="@drawable/ic_check_black_24dp" />
|
app:srcCompat="@drawable/ic_check_black_24dp"
|
||||||
|
app:visibility="@{view.fabVisible}" />
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|
||||||
</layout>
|
</layout>
|
||||||
Loading…
x
Reference in New Issue
Block a user