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_resi.PickingResiComponent;
|
||||
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.ProdFabbisognoLineeProdModule;
|
||||
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,
|
||||
DialogAskMagazzinoProssimitaModule.class,
|
||||
DialogChooseBatchLotModule.class,
|
||||
DialogRowInfoProdFabbisognoLineeProdModule.class
|
||||
DialogRowInfoProdFabbisognoLineeProdModule.class,
|
||||
ProdOrdineProduzioneElencoModule.class
|
||||
})
|
||||
public interface MainApplicationComponent {
|
||||
|
||||
@ -116,6 +119,7 @@ public interface MainApplicationComponent {
|
||||
DialogRowInfoProdFabbisognoLineeProdComponent.Factory dialogRowInfoProdFabbisognoLineeProdComponent();
|
||||
ProdRientroMerceComponent.Factory prodRientroMerceComponent();
|
||||
ProdRientroMerceOrderDetailComponent.Factory prodRientroMerceOrderDetailComponent();
|
||||
ProdOrdineProduzioneElencoComponent.Factory prodOrdineProduzioneElencoComponent();
|
||||
|
||||
|
||||
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) {
|
||||
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<>();
|
||||
cyclicGetMultipleByTestate(testate.iterator(), onlyResiduo, 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()) {
|
||||
getByTestataStatic(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> {
|
||||
getByTestata(sourceMtbColts.next(), onlyResiduo, false, mtbColt -> {
|
||||
resultMtbColt.add(mtbColt);
|
||||
cyclicGetMultipleByTestate(sourceMtbColts, onlyResiduo, resultMtbColt, onComplete, onAbort);
|
||||
}, onAbort);
|
||||
@ -476,14 +472,10 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
|
||||
.setDataCollo(dataCollo)
|
||||
.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) {
|
||||
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<>());
|
||||
|
||||
|
||||
|
||||
@ -39,10 +39,6 @@ public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer {
|
||||
|
||||
|
||||
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)
|
||||
.map(x -> new GetPickingListAccettazioneDTO()
|
||||
.setData(x.getData())
|
||||
@ -63,7 +59,6 @@ public class OrdiniAccettazioneRESTConsumer extends _BaseRESTConsumer {
|
||||
onFailed.run(new Exception(t));
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -288,26 +288,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
|
||||
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
|
||||
public void onOrderFiltered(List<OrdiniUscitaElencoDTO> 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;
|
||||
|
||||
|
||||
import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.text.Html;
|
||||
import android.text.SpannableString;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
import androidx.databinding.ObservableArrayList;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
@ -23,22 +21,26 @@ import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import it.integry.integrywmsnative.MainApplication;
|
||||
import it.integry.integrywmsnative.R;
|
||||
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.IScrollableFragment;
|
||||
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.UtilityProgress;
|
||||
import it.integry.integrywmsnative.core.utility.UtilityDate;
|
||||
import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElencoBinding;
|
||||
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
|
||||
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.prod_accettazione_ord_produzione.core.OrdineProduzioneHelper;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneListAdapter;
|
||||
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ui.MainListProdOrdineProduzioneElencoClienteListModel;
|
||||
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.ui.ElevatedToolbar;
|
||||
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.
|
||||
*/
|
||||
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 ElevatedToolbar mToolbar;
|
||||
|
||||
private FragmentProdOrdineProduzioneElencoBinding mBinding;
|
||||
|
||||
private OrdineProduzioneHelper mHelper;
|
||||
private OrdineProduzioneListAdapter mAdapter;
|
||||
|
||||
private List<OrdineAccettazioneInevasoDTO> mOriginalOrderList;
|
||||
private List<OrdineAccettazioneInevasoDTO> mRenderedOrderList = new ArrayList<>();
|
||||
private final ObservableArrayList<MainListProdOrdineProduzioneElencoListModel> mOrdiniInevasiMutableData = new ObservableArrayList<>();
|
||||
|
||||
private AppCompatTextView mAppBarTitle;
|
||||
|
||||
@ -87,21 +90,30 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
|
||||
Bundle savedInstanceState) {
|
||||
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.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||
mBinding.ordineProduzioneMainFab.hide();
|
||||
|
||||
mBinding.ordineProduzioneMainFab.setOnClickListener(v -> {
|
||||
this.onAccettazioneMainFabClick();
|
||||
});
|
||||
this.initRecyclerView();
|
||||
|
||||
mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList);
|
||||
|
||||
init();
|
||||
return mBinding.getRoot();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
|
||||
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
|
||||
mViewModel.init(codMdep);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void 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());
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
public void setScrollToolbar(ElevatedToolbar toolbar) {
|
||||
mToolbar = toolbar;
|
||||
}
|
||||
|
||||
private void initRecyclerView() {
|
||||
mAdapter = new OrdineProduzioneListAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged);
|
||||
mBinding.ordineProduzioneMainList.setAdapter(mAdapter);
|
||||
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), this::refreshList);
|
||||
|
||||
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();
|
||||
if (ordini != null) mRenderedOrderList.addAll(ordini);
|
||||
}
|
||||
List<OrdineAccettazioneInevasoDTO> tmpList = null;
|
||||
|
||||
private void refreshRecyclerView() {
|
||||
mAdapter.updateItems(mRenderedOrderList);
|
||||
}
|
||||
|
||||
private RunnableArgs<OrdineAccettazioneInevasoDTO> onSingleSelectionChanged = dto -> {
|
||||
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
|
||||
|
||||
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();
|
||||
if(filteredList != null) {
|
||||
tmpList = filteredList;
|
||||
} else if (mAppliedFilterViewModel != null) {
|
||||
// mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue());
|
||||
// mAppliedFilterViewModel.applyAllTests();
|
||||
// tmpList = mAppliedFilterViewModel.getMutableFilteredOrderList().getValue();
|
||||
} 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() {
|
||||
List<OrdineAccettazioneInevasoDTO> selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList);
|
||||
public void dispatchOrders() {
|
||||
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 -> {
|
||||
progress.dismiss();
|
||||
this.mViewModel.loadPicking(selectedOrders);
|
||||
}
|
||||
|
||||
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))
|
||||
.map(SitArtOrdDTO::getCodMart)
|
||||
.distinct()
|
||||
.count();
|
||||
|
||||
long ordsCounter = Stream.of(sitArtOrds)
|
||||
long ordsCounter = Stream.of(sitArts)
|
||||
.distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione())
|
||||
.count();
|
||||
|
||||
|
||||
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
|
||||
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
|
||||
+ "<br /><br />" +
|
||||
@ -206,8 +264,8 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
|
||||
null,
|
||||
() -> {
|
||||
|
||||
String cacheSitArtItemID = DataCache.addItem(sitArtOrds);
|
||||
String cacheOrdersItemID = DataCache.addItem(selectedOrders);
|
||||
String cacheSitArtItemID = DataCache.addItem(sitArts);
|
||||
String cacheOrdersItemID = DataCache.addItem(orders);
|
||||
|
||||
Intent myIntent = new Intent(getActivity(), AccettazionePickingActivity.class);
|
||||
myIntent.putExtra("keyOrders", cacheOrdersItemID);
|
||||
@ -215,46 +273,5 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
|
||||
getActivity().startActivity(myIntent);
|
||||
|
||||
}).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"?>
|
||||
<layout>
|
||||
<layout xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<data>
|
||||
<import type="it.integry.integrywmsnative.R" />
|
||||
<variable
|
||||
name="checkboxValue"
|
||||
name="selected"
|
||||
type="it.integry.integrywmsnative.core.di.BindableBoolean" />
|
||||
|
||||
|
||||
@ -17,12 +17,13 @@
|
||||
android:padding="8dp">
|
||||
|
||||
|
||||
<CheckBox
|
||||
<androidx.appcompat.widget.AppCompatCheckBox
|
||||
android:id="@+id/ordine_produzione_main_list_group_item_container_checkBox"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
tools:layout_editor_absoluteX="0dp"
|
||||
tools:layout_editor_absoluteY="1dp" />
|
||||
tools:layout_editor_absoluteY="1dp"
|
||||
app:checked="@{selected}" />
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@ -56,25 +56,25 @@
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
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_constraintStart_toEndOf="@id/guideline_empty_left"
|
||||
app:layout_constraintTop_toTopOf="@id/guideline_empty_top">
|
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView
|
||||
android:layout_width="72dp"
|
||||
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
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center_horizontal"
|
||||
android:text="@string/no_orders_found_message"
|
||||
android:textColor="@android:color/black"
|
||||
android:textSize="18sp"
|
||||
android:text="@string/no_orders_found_message"/>
|
||||
android:textSize="18sp" />
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@ -87,8 +87,10 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_margin="@dimen/fab_margin"
|
||||
android:onClick="@{() -> view.dispatchOrders()}"
|
||||
android:tint="@android:color/white"
|
||||
app:srcCompat="@drawable/ic_check_black_24dp" />
|
||||
app:srcCompat="@drawable/ic_check_black_24dp"
|
||||
app:visibility="@{view.fabVisible}" />
|
||||
</FrameLayout>
|
||||
|
||||
</layout>
|
||||
Loading…
x
Reference in New Issue
Block a user