diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index ee7cd526..77923a7e 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java index 7306520f..8b77bcea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java @@ -31,6 +31,7 @@ import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.gest.main.MainFragment; import it.integry.integrywmsnative.gest.settings.MainSettingsFragment; import it.integry.integrywmsnative.gest.settings.SettingsPreferenceFragment; +import it.integry.integrywmsnative.gest.vendita.MainVenditaFragment; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { @@ -132,7 +133,8 @@ public class MainActivity extends AppCompatActivity fragment = MainAccettazioneFragment.newInstance(); this.adaptViewToFragment(fragment); } else if (id == R.id.nav_gallery) { - + fragment = MainVenditaFragment.newInstance(); + this.adaptViewToFragment(fragment); } else if (id == R.id.nav_slideshow) { } else if (id == R.id.nav_manage) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java index 202a1214..34e88094 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java @@ -143,7 +143,7 @@ public class MainAccettazioneFragment extends Fragment implements SearchView.OnQ groupedOrdiniInevasi = new ArrayList<>(); - //Splitto gli ordini per codAnagForn + //Splitto gli ordini per codAnagClie for(int i = 0; i < ordini.size(); i++){ if(prevCodAnag.equalsIgnoreCase(ordini.get(i).codAnagOrd)) continue; else prevCodAnag = ordini.get(i).codAnagOrd; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java new file mode 100644 index 00000000..eb5bed40 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java @@ -0,0 +1,279 @@ +package it.integry.integrywmsnative.gest.vendita; + +import android.app.ProgressDialog; +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.text.SpannableString; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.ButterKnife; +import butterknife.OnClick; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.CommonRESTException; +import it.integry.integrywmsnative.core.coollection.Coollection; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.databinding.FragmentMainVenditaBinding; +import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter; +import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; + +public class MainVenditaFragment extends Fragment implements ITitledFragment { + + private VenditaHelper mHelper; + private FragmentMainVenditaBinding mBinding = null; + + private MainListVenditaAdapter mAdapter; + + private List groupedOrdiniInevasi; + + public MainVenditaFragment() { + + } + + public static MainVenditaFragment newInstance() { + MainVenditaFragment fragment = new MainVenditaFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public String getTitle(Context context){ + return context.getText(R.string.vendita_title_fragment).toString(); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + } + + init(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_vendita, container, false); + + mBinding.setView(this); + mBinding.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity())); + mBinding.venditaMainFab.hide(); + + ButterKnife.bind(this, mBinding.getRoot()); + + return mBinding.getRoot(); + } + + + private void init(){ + + final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), + getText(R.string.loading) + " ...", true); + + mHelper = new VenditaHelper(getActivity()); + + mHelper.loadOrdini(new VenditaHelper.ILoadOrdiniCallback() { + @Override + public void onLoadSuccess(List ordini) { + Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show(); + groupOrdiniAndMakeRecycler(ordini); + progress.dismiss(); + } + + @Override + public void onLoadFail(Exception ex) { + progress.dismiss(); + + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + if(errorMessage == null) errorMessage = ex.getMessage(); + DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); + } + }); + } + + + private void groupOrdiniAndMakeRecycler(List ordini){ + + String prevCodAnag = ""; + +// for(OrdineVenditaInevasoDTO ordine : ordini){ +// if(UtilityString.isNullOrEmpty(ordine.codJcom) || ordine.codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)){ +// ordine.codJcom = CommonConst.Config.COMMESSA_MAG; +// ordine.descrizioneCom = "MAGAZZINO"; +// } +// } + + groupedOrdiniInevasi = new ArrayList<>(); + + //Splitto gli ordini per codAnagOrd (Cliente) + Stream.of(ordini) + .distinctBy(x -> x.codAnagOrd) + .sortBy(x -> x.ragSocOrd) + .map(x -> x.codAnagOrd + "#_#" + x.ragSocOrd) + .forEach(anagOrd -> { + + String codAnagOrd = anagOrd.substring(0, anagOrd.indexOf("#_#")); + String ragSocOrd = anagOrd.substring(anagOrd.indexOf("#_#") + 3, anagOrd.length()); + + OrdineVenditaGroupedInevasoDTO groupedOrdine = new OrdineVenditaGroupedInevasoDTO(); + + groupedOrdine.codAnagClie = codAnagOrd; + groupedOrdine.nomeCliente = ragSocOrd; + groupedOrdine.ordini = new ArrayList<>(); + + + //Raggruppo gli ordini del singolo fornitore suddivisi per data, dataCons e numero + Stream.of(ordini) + .filter(x -> x.codAnagOrd.equalsIgnoreCase(codAnagOrd)) + .distinctBy(x -> x.data + " - " + x.dataCons + " - " + x.numero) + .forEach(ord -> { + + + OrdineVenditaGroupedInevasoDTO.Ordine rigaOrdine = new OrdineVenditaGroupedInevasoDTO.Ordine(); + + rigaOrdine.data = ord.data; + rigaOrdine.numero = ord.numero; + rigaOrdine.codAnagOrd = ord.codAnagOrd; + rigaOrdine.ragSocOrd = ord.ragSocOrd; + rigaOrdine.pesoTotale = ord.pesoTotale; + rigaOrdine.barcode = ord.barcode; + rigaOrdine.termCons = ord.termCons; + rigaOrdine.dataCons = ord.dataCons; + rigaOrdine.rifOrd = ord.rifOrd; + rigaOrdine.clienti = new ArrayList<>(); + + + //Leggo tutti i clienti dell'ordine corrente + Stream.of(ordini) + .filter(x -> x.codAnagOrd.equalsIgnoreCase(codAnagOrd) && + x.numero == ord.numero && + x.data.equalsIgnoreCase(ord.data) && + x.dataCons.equalsIgnoreCase(ord.dataCons)) + .distinctBy(x -> x.codJcom) + .forEach(ordCliente -> { + + OrdineVenditaGroupedInevasoDTO.Cliente cliente = new OrdineVenditaGroupedInevasoDTO.Cliente(); + + cliente.codJcom = ordCliente.codJcom; + cliente.ragSocCom = ordCliente.ragSocCom; + cliente.descrCom = ordCliente.descrizioneCom; + cliente.dataCons = ordCliente.dataCons; + cliente.numCnf = ordCliente.numCnf; + cliente.rifOrd = ordCliente.rifOrd; + + rigaOrdine.clienti.add(cliente); + + }); + + groupedOrdine.ordini.add(rigaOrdine); + + + }); + + groupedOrdiniInevasi.add(groupedOrdine); + + }); + + mAdapter = new MainListVenditaAdapter(getActivity(), groupedOrdiniInevasi, onGroupSelectionChanged); + mBinding.venditaMainList.setAdapter(mAdapter); + } + + RunnableArgs onGroupSelectionChanged = dto -> { + List selectedOrders = mHelper.getSelectedOrders(groupedOrdiniInevasi); + + if(selectedOrders != null && selectedOrders.size() > 1){ + for (OrdineVenditaGroupedInevasoDTO selectedOrder : selectedOrders) { + if(!dto.codAnagClie.equalsIgnoreCase(selectedOrder.codAnagClie)) { + Stream.of(selectedOrder.ordini).forEach(x -> x.setCheckbox(false)); + } + } + } + + if(selectedOrders != null && selectedOrders.size() > 0) mBinding.venditaMainFab.show(); + else mBinding.venditaMainFab.hide(); + }; + + @OnClick(R.id.vendita_main_fab) + public void onClick(View view) { + + List selectedOrders = mHelper.getSelectedOrders(groupedOrdiniInevasi); + List barcodes = new ArrayList<>(); + + for(OrdineVenditaGroupedInevasoDTO ordine : selectedOrders){ + for(OrdineVenditaGroupedInevasoDTO.Ordine righeOrd : ordine.ordini){ + barcodes.add(righeOrd.barcode); + } + } + +// final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), +// getText(R.string.loading) + " ...", true); + +// mHelper.retrievePickingList(barcodes, new ILoadPickingListCallback() { +// @Override +// public void onLoadSuccess(final List ordini) { +// progress.dismiss(); +// +// AtomicInteger artsCounter = new AtomicInteger(); +// +// Stream.of(ordini).forEach(x -> { +// artsCounter.addAndGet((int) Stream.of(x.ordini).filter(y -> y.getQtaDaEvadere().floatValue() > 0).count()); +// }); +// +// List ordersKeys = new ArrayList<>(); +// +// for(OrdineAccettazioneDTO ordine : ordini){ +// if(!ordersKeys.contains(ordine.data + " " + ordine.numero + " " + ordine.gestione)){ +// ordersKeys.add(ordine.data + " " + ordine.numero + " " + ordine.gestione); +// } +// } +// +// DialogSimpleMessageHelper.makeInfoDialog(getActivity(), +// getText(R.string.orders).toString(), +// Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, ordersKeys.size()), ordersKeys.size()) +// + "

" + +// "" + artsCounter + " " + getActivity().getResources().getQuantityString(R.plurals.available_articles, artsCounter.get())), +// null, +// () -> { +// +// Intent myIntent = new Intent(getActivity(), AccettazioneOrdineInevasoActivity.class); +// myIntent.putExtra("key", (ArrayList) ordini); //Optional parameters +// getActivity().startActivity(myIntent); +// +// }).show(); +// +// } +// +// @Override +// public void onLoadFail(Exception 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(); +// DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); +// } +// }); + + + } + + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java new file mode 100644 index 00000000..e43b99c9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java @@ -0,0 +1,215 @@ +package it.integry.integrywmsnative.gest.vendita.core; + +import android.content.Context; +import android.support.v4.util.Pools; +import android.support.v7.widget.RecyclerView; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.LinearLayout; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; + +public class MainListVenditaAdapter extends RecyclerView.Adapter { + + private Context mContext; + private List mDataset; + private RunnableArgs mOnGroupSelected; + + private Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(2000); + private Pools.SynchronizedPool sPoolClienti = new Pools.SynchronizedPool(3000); + + public static class ViewHolder extends RecyclerView.ViewHolder { + // each data item is just a string in this case + private TextView mTextViewGroupHeader; + private LinearLayout mLinearLayoutGroupItemContainer; + + private List views = new ArrayList<>(); + + public ViewHolder(View v) { + super(v); + } + } + + // Provide a suitable constructor (depends on the kind of dataset) + public MainListVenditaAdapter(Context context, List myDataset, RunnableArgs onGroupSelected) { + mContext = context; + mDataset = myDataset; + mOnGroupSelected = onGroupSelected; + } + + + // Create new views (invoked by the layout manager) + @Override + public MainListVenditaAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, + int viewType) { + // create a new view + View v = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.vendita_main_list_model, parent, false); + + ViewHolder vh = new ViewHolder(v); + + TextView groupHeader = v.findViewById(R.id.vendita_main_list_group_header); + vh.mTextViewGroupHeader = groupHeader; + + LinearLayout groupItemContainer = v.findViewById(R.id.vendita_main_list_group_item_container); + vh.mLinearLayoutGroupItemContainer = groupItemContainer; + + return vh; + } + + // Replace the contents of a view (invoked by the layout manager) + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + // - get element from your dataset at this position + // - replace the contents of the view with that element + + final List subGroup = mDataset.get(position).ordini; + final int finalPosition = position; + + holder.mTextViewGroupHeader.setText(mDataset.get(position).nomeCliente); + holder.itemView.setOnClickListener(view -> { + boolean newValue = true; + + for(int i = 0; i < subGroup.size(); i++){ + if(subGroup.get(i).checkBox) newValue = false; + } + + for(int i = 0; i < subGroup.size(); i++){ + subGroup.get(i).setCheckbox(newValue); + } + + mOnGroupSelected.run(mDataset.get(finalPosition)); + }); + + for (int i = 0; i < subGroup.size(); i++) { + final OrdineVenditaGroupedInevasoDTO.Ordine ordine = subGroup.get(i); + + ordine.checkBoxCallback = new ArrayList<>(); + + View groupModelViewPool = (View) sPool.acquire(); + if(groupModelViewPool == null){ + groupModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.vendita_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false); + } + + View groupModelView = groupModelViewPool; + holder.views.add(groupModelView); + + + groupModelView.setVisibility(View.VISIBLE); + + if (i % 2 == 1) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + } else { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.white)); + } + + final CheckBox checkBox = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_checkBox); + checkBox.setChecked(ordine.checkBox); + + ordine.checkBoxCallback.add(checkBox::setChecked); + + groupModelView.setOnClickListener(view -> { + checkBox.toggle(); + ordine.checkBox = checkBox.isChecked(); + mOnGroupSelected.run(mDataset.get(finalPosition)); +// mCheckBoxCallback.onToggle(checkBox.isChecked()); + }); + + TextView testataOrdTextView = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_testata_ord); + String testataOrdString = String.format(mContext.getString(R.string.ord_ven_testata), String.valueOf(ordine.numero), UtilityDate.formatDate(ordine.getData(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + testataOrdTextView.setText(Html.fromHtml(testataOrdString)); + + TextView testataDataConsTextView = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_testata_data_cons); + String testataDataConsString = String.format(mContext.getString(R.string.ord_ven_testata_data_cons), UtilityDate.formatDate(ordine.getDataCons(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + testataDataConsTextView.setText(Html.fromHtml(testataDataConsString)); + + LinearLayout clientLinearLayout = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_clienti_ord); + List subGroupClienti = ordine.clienti; + + clientLinearLayout.removeAllViews(); + + for (int k = 0; k < subGroupClienti.size(); k++) { + + + View groupClienteModelViewPool = (View) sPoolClienti.acquire(); + if(groupClienteModelViewPool == null){ + groupClienteModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.vendita_main_list_group_clienti, clientLinearLayout, false); + } + + View groupClienteModelView = groupClienteModelViewPool; + + + TextView clienteComm = groupClienteModelView.findViewById(R.id.vendita_main_list_group_clienti_comm); + String clienteText; + clienteText = subGroupClienti.get(k).rifOrd; + clienteComm.setText(clienteText); + +// TextView dataCons = groupClienteModelView.findViewById(R.id.vendita_main_list_group_clienti_datacons); +// if (subGroupClienti.get(k).getDataCons() != null) { +// dataCons.setText(UtilityDate.formatDate(subGroupClienti.get(k).getDataCons(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH)); +// } else { +// dataCons.setText(""); +// } + + clientLinearLayout.addView(groupClienteModelView); + } + + holder.mLinearLayoutGroupItemContainer.addView(groupModelView); + } + + + } + + + @Override + public void onViewRecycled(ViewHolder holder){ + if(holder != null){ + for(int i = 0; i < holder.views.size(); i++){ + View groupModelView = holder.views.get(i); + + LinearLayout clientLinearLayout = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_clienti_ord); + + for(int k = 0; k < clientLinearLayout.getChildCount(); k++){ + View cliente = clientLinearLayout.getChildAt(k); + ((ViewGroup) cliente.getParent()).removeView(cliente); + + sPoolClienti.release(cliente); + } + + ((ViewGroup) groupModelView.getParent()).removeView(groupModelView); + sPool.release(groupModelView); + } + + holder.views.clear(); + } + + super.onViewRecycled(holder); + } + + // Return the size of your dataset (invoked by the layout manager) + @Override + public int getItemCount() { + return mDataset.size(); + } + + + public void setFilter(List newDataset) { + mDataset = new ArrayList<>(); + mDataset.addAll(newDataset); + notifyDataSetChanged(); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java new file mode 100644 index 00000000..f7dc149b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java @@ -0,0 +1,174 @@ +package it.integry.integrywmsnative.gest.vendita.core; + +import android.content.Context; +import android.text.TextUtils; +import android.util.Log; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +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.core.utility.UtilityLogger; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaDTO; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.rest.OrdiniVenditaRESTConsumerService; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class VenditaHelper { + + private Context mContext; + + public VenditaHelper(Context context){ + mContext = context; + } + + public void loadOrdini(final ILoadOrdiniCallback callback){ + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); + + OrdiniVenditaRESTConsumerService service = RESTBuilder.getService(OrdiniVenditaRESTConsumerService.class); + service.listOrdiniInevasi(codMdep).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + callback.onLoadSuccess(response.body().getDto()); + } else { + Log.e("Vendita", response.body().getErrorMessage()); + callback.onLoadFail(new Exception(response.message())); + } + } else { + Log.e("Vendita", response.message()); + callback.onLoadFail(new Exception(response.message())); + } + } else { + Log.e("Vendita", "Status " + response.code() + ": " + response.message()); + callback.onLoadFail(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + Log.e("Vendita", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + callback.onLoadFail(new Exception(t)); + } + }); + } + + + + public void retrievePickingList(List barcodeOrdini, List dateCons, final ILoadPickingListCallback callback){ + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); + + String joinedBarcodes = TextUtils.join(",", barcodeOrdini); + + OrdiniVenditaRESTConsumerService service = RESTBuilder.getService(OrdiniVenditaRESTConsumerService.class); + + service.getPickingList(codMdep, "", joinedBarcodes).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + List dto = response.body().getDto(); + + for (OrdineVenditaDTO ordine : dto) { + for(OrdineVenditaDTO.Riga riga : ordine.ordini){ + riga.numOrd = ordine.numero; + riga.dataOrd = ordine.data; + riga.gestioneOrd = ordine.gestione; + riga.codAlis = ordine.codAlis; + } + } + + callback.onLoadSuccess(dto); + } else { + Log.e("Vendita", response.body().getErrorMessage()); + callback.onLoadFail(new Exception(response.message())); + } + } else { + Log.e("Vendita", response.message()); + callback.onLoadFail(new Exception(response.message())); + } + } else { + Log.e("Vendita", "Status " + response.code() + ": " + response.message()); + callback.onLoadFail(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + Log.e("Vendita", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + callback.onLoadFail(new Exception(t)); + } + }); + + } + + + + + public List getSelectedOrders(List groupedOrdiniInevasi){ + List selectedOrdini = new ArrayList<>(); + + for(int i = 0; i < groupedOrdiniInevasi.size(); i++){ + List selectedOrdiniGroup = new ArrayList<>(); + + for(int j = 0; j < groupedOrdiniInevasi.get(i).ordini.size(); j++){ + if(groupedOrdiniInevasi.get(i).ordini.get(j).checkBox) { + selectedOrdiniGroup.add(groupedOrdiniInevasi.get(i).ordini.get(j)); + } + } + + if(selectedOrdiniGroup.size() > 0) { + try { + OrdineVenditaGroupedInevasoDTO cloneOrdine = groupedOrdiniInevasi.get(i).clone(); + cloneOrdine.ordini = selectedOrdiniGroup; + selectedOrdini.add(cloneOrdine); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } + } + + return selectedOrdini; + } + + + + + + + + public interface ILoadOrdiniCallback { + + + void onLoadSuccess(List ordini); + + void onLoadFail(Exception ex); + + } + + + public interface ILoadPickingListCallback { + + void onLoadSuccess(List ordini); + + void onLoadFail(Exception ex); + + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaDTO.java new file mode 100644 index 00000000..c66ae5cb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaDTO.java @@ -0,0 +1,364 @@ +package it.integry.integrywmsnative.gest.vendita.dto; + +import android.os.Parcel; +import android.os.Parcelable; +import android.util.Log; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; + +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColt; + +public class OrdineVenditaDTO implements Parcelable { + + public String ragSoc; + public int numero; + public String data; + public String gestione; + public String codMdep; + public String codAnag; + public String codVdes; + public String termCons; + public ArrayList ordini; + public String codAlis; + public String rifOrd; + + + public static class Riga implements Parcelable { + public Float qtaOrd; //QTA ORDINATA (tutta la qta ordiata) + public Float qtaRiservate; //QTA COLLI (tutta la qta già accantonata nei colli + public Float qtaEvasa; //QTA EVASA ORDINE (qta con documento) + //public Float qtaDaEvadere; //qta_ord - qta_evasa - qta_colli + public int rigaOrd; + public String codJcom; + public String ragSocCom; + public String descrizioneCommessa; + public MtbAart mtbAart; + public OrdineVenditaDTO.PickingObjectDTO[] colliAssociati; + public Boolean hidden = null; + public String partitaMag; + public String codArtFor; + public String descrizioneEstesa; + public String codAlis; + + public int numOrd; + public String dataOrd; + public String gestioneOrd; + + public String dataCons; + + public BigDecimal getQtaDaEvadere() { + return this.getQtaOrd().subtract(this.getQtaEvasa()).subtract(this.getQtaRiservate()); + } + + + public BigDecimal getQtaOrd() { + return qtaOrd != null ? new BigDecimal(qtaOrd) : BigDecimal.ZERO; + } + + public BigDecimal getQtaRiservate() { + return qtaRiservate != null ? new BigDecimal(qtaRiservate) : BigDecimal.ZERO; + } + + public BigDecimal getQtaEvasa() { + return qtaEvasa != null ? new BigDecimal(qtaEvasa) : BigDecimal.ZERO; + } + + public int getRigaOrd() { + return rigaOrd; + } + + public String getCodJcom() { + return codJcom; + } + + public String getRagSocCom() { + return ragSocCom; + } + + public String getDescrizioneCommessa() { + return descrizioneCommessa; + } + + public MtbAart getMtbAart() { + return mtbAart; + } + + public OrdineVenditaDTO.PickingObjectDTO[] getColliAssociati() { + return colliAssociati; + } + + public Boolean isHidden() { + return hidden; + } + + public String getPartitaMag() { + return partitaMag; + } + + public String getCodArtFor() { + return codArtFor; + } + + public String getDescrizioneEstesa() { + return descrizioneEstesa; + } + + public String getCodAlis() { + return codAlis; + } + + public int getNumOrd() { + return numOrd; + } + + public String getGestioneOrd() { + return gestioneOrd; + } + + public String getDataCons() { + return dataCons; + } + + public Date getDataOrd() { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + Date dataOrd = null; + + try{ + dataOrd = sdf.parse(this.dataOrd); + } catch (Exception ex) { + Log.e("Parsing date", ex.getMessage()); + } + + return dataOrd; + } + + + public OrdineVenditaDTO.Riga setQtaOrd(Float qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public OrdineVenditaDTO.Riga setQtaRiservate(BigDecimal qtaRiservate) { + this.qtaRiservate = qtaRiservate.floatValue(); + return this; + } + + public OrdineVenditaDTO.Riga setQtaEvasa(Float qtaEvasa) { + this.qtaEvasa = qtaEvasa; + return this; + } + + public OrdineVenditaDTO.Riga setRigaOrd(int rigaOrd) { + this.rigaOrd = rigaOrd; + return this; + } + + public OrdineVenditaDTO.Riga setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public OrdineVenditaDTO.Riga setRagSocCom(String ragSocCom) { + this.ragSocCom = ragSocCom; + return this; + } + + public OrdineVenditaDTO.Riga setDescrizioneCommessa(String descrizioneCommessa) { + this.descrizioneCommessa = descrizioneCommessa; + return this; + } + + public OrdineVenditaDTO.Riga setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } + + public OrdineVenditaDTO.Riga setHidden(boolean hidden) { + this.hidden = hidden; + return this; + } + + public OrdineVenditaDTO.Riga setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + public OrdineVenditaDTO.Riga setCodArtFor(String codArtFor) { + this.codArtFor = codArtFor; + return this; + } + + public OrdineVenditaDTO.Riga setDescrizioneEstesa(String descrizioneEstesa) { + this.descrizioneEstesa = descrizioneEstesa; + return this; + } + + public OrdineVenditaDTO.Riga setCodAlis(String codAlis) { + this.codAlis = codAlis; + return this; + } + + public OrdineVenditaDTO.Riga setNumOrd(int numOrd) { + this.numOrd = numOrd; + return this; + } + + public OrdineVenditaDTO.Riga setDataOrd(String dataOrd) { + this.dataOrd = dataOrd; + return this; + } + + public OrdineVenditaDTO.Riga setGestioneOrd(String gestioneOrd) { + this.gestioneOrd = gestioneOrd; + return this; + } + + public OrdineVenditaDTO.Riga setDataCons(String dataCons) { + this.dataCons = dataCons; + return this; + } + + public Riga(){} + + protected Riga(Parcel in) { + qtaOrd = in.readByte() == 0x00 ? null : in.readFloat(); + qtaRiservate = in.readByte() == 0x00 ? null : in.readFloat(); + rigaOrd = in.readInt(); + codJcom = in.readString(); + ragSocCom = in.readString(); + descrizioneCommessa = in.readString(); + mtbAart = (MtbAart) in.readValue(MtbAart.class.getClassLoader()); + hidden = in.readByte() == 0x00 ? null : in.readByte() != 0x00; + partitaMag = in.readString(); + codArtFor = in.readString(); + descrizioneEstesa = in.readString(); + codAlis = in.readString(); + numOrd = in.readInt(); + dataOrd = in.readString(); + gestioneOrd = in.readString(); + dataCons = in.readString(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + if (qtaOrd == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(qtaOrd); + } + if (qtaRiservate == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(qtaRiservate); + } + dest.writeInt(rigaOrd); + dest.writeString(codJcom); + dest.writeString(ragSocCom); + dest.writeString(descrizioneCommessa); + dest.writeValue(mtbAart); + if (hidden == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeByte((byte) (hidden ? 0x01 : 0x00)); + } + dest.writeString(partitaMag); + dest.writeString(codArtFor); + dest.writeString(descrizioneEstesa); + dest.writeString(codAlis); + dest.writeInt(numOrd); + dest.writeString(dataOrd); + dest.writeString(gestioneOrd); + dest.writeString(dataCons); + } + + @SuppressWarnings("unused") + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public OrdineVenditaDTO.Riga createFromParcel(Parcel in) { + return new OrdineVenditaDTO.Riga(in); + } + + @Override + public OrdineVenditaDTO.Riga[] newArray(int size) { + return new OrdineVenditaDTO.Riga[size]; + } + }; + + } + + public static class PickingObjectDTO extends MtbColt { + public boolean hidden = false; + } + + public OrdineVenditaDTO() {} + + protected OrdineVenditaDTO(Parcel in) { + ragSoc = in.readString(); + numero = in.readInt(); + data = in.readString(); + gestione = in.readString(); + codMdep = in.readString(); + codAnag = in.readString(); + codVdes = in.readString(); + termCons = in.readString(); + codAlis = in.readString(); + rifOrd = in.readString(); + if (in.readByte() == 0x01) { + ordini = new ArrayList(); + in.readList(ordini, OrdineVenditaDTO.Riga.class.getClassLoader()); + } else { + ordini = null; + } + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(ragSoc); + dest.writeInt(numero); + dest.writeString(data); + dest.writeString(gestione); + dest.writeString(codMdep); + dest.writeString(codAnag); + dest.writeString(codVdes); + dest.writeString(termCons); + dest.writeString(codAlis); + dest.writeString(rifOrd); + if (ordini == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeList(ordini); + } + } + + @SuppressWarnings("unused") + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public OrdineVenditaDTO createFromParcel(Parcel in) { + return new OrdineVenditaDTO(in); + } + + @Override + public OrdineVenditaDTO[] newArray(int size) { + return new OrdineVenditaDTO[size]; + } + }; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaGroupedInevasoDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaGroupedInevasoDTO.java new file mode 100644 index 00000000..f4d0c850 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaGroupedInevasoDTO.java @@ -0,0 +1,237 @@ +package it.integry.integrywmsnative.gest.vendita.dto; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import it.integry.integrywmsnative.core.interfaces.ICheckBoxCallback; +import it.integry.integrywmsnative.core.utility.UtilityDate; + +public class OrdineVenditaGroupedInevasoDTO implements Cloneable, Serializable, Parcelable { + + public String codAnagClie; + public String nomeCliente; + public List ordini; + + public OrdineVenditaGroupedInevasoDTO clone() throws CloneNotSupportedException { + return (OrdineVenditaGroupedInevasoDTO) super.clone(); + } + + + public static class Ordine implements Parcelable{ + public String data; + public int numero; + public String codAnagOrd = ""; + public String ragSocOrd = ""; + public Float pesoTotale; + public String barcode; + public String termCons; + public String dataCons; + public String rifOrd; + + public boolean checkBox; + public List checkBoxCallback = new ArrayList<>(); + public void setCheckbox(boolean newValue){ + checkBox = newValue; + if(checkBoxCallback != null && checkBoxCallback.size() > 0) { + for(ICheckBoxCallback callback : checkBoxCallback) callback.onToggle(newValue); + } + } + + public List clienti; + + + public Date getData(){ + try { + return UtilityDate.recognizeDate(data); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public Date getDataCons(){ + try { + return UtilityDate.recognizeDate(dataCons); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public Ordine(){} + + protected Ordine(Parcel in) { + data = in.readString(); + numero = in.readInt(); + codAnagOrd = in.readString(); + ragSocOrd = in.readString(); + pesoTotale = in.readByte() == 0x00 ? null : in.readFloat(); + barcode = in.readString(); + termCons = in.readString(); + dataCons = in.readString(); + rifOrd = in.readString(); + if (in.readByte() == 0x01) { + clienti = new ArrayList(); + in.readList(clienti, Cliente.class.getClassLoader()); + } else { + clienti = null; + } + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(data); + dest.writeInt(numero); + dest.writeString(codAnagOrd); + dest.writeString(ragSocOrd); + if (pesoTotale == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(pesoTotale); + } + dest.writeString(barcode); + dest.writeString(termCons); + dest.writeString(dataCons); + dest.writeString(rifOrd); + if (clienti == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeList(clienti); + } + } + + @SuppressWarnings("unused") + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public Ordine createFromParcel(Parcel in) { + return new Ordine(in); + } + + @Override + public Ordine[] newArray(int size) { + return new Ordine[size]; + } + }; + + } + + public static class Cliente implements Parcelable{ + public String codJcom; + public String ragSocCom; + public int idRiga; + public String dataCons; + public Integer numCnf; + public String descrCom; + public String rifOrd; + + public Date getDataCons(){ + try { + return UtilityDate.recognizeDate(dataCons); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public Cliente(){} + + protected Cliente(Parcel in) { + codJcom = in.readString(); + ragSocCom = in.readString(); + idRiga = in.readInt(); + dataCons = in.readString(); + numCnf = in.readByte() == 0x00 ? null : in.readInt(); + descrCom = in.readString(); + rifOrd = in.readString(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(codJcom); + dest.writeString(ragSocCom); + dest.writeInt(idRiga); + dest.writeString(dataCons); + if (numCnf == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeInt(numCnf); + } + dest.writeString(descrCom); + dest.writeString(rifOrd); + } + + @SuppressWarnings("unused") + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public Cliente createFromParcel(Parcel in) { + return new Cliente(in); + } + + @Override + public Cliente[] newArray(int size) { + return new Cliente[size]; + } + }; + } + + public OrdineVenditaGroupedInevasoDTO(){} + + protected OrdineVenditaGroupedInevasoDTO(Parcel in) { + codAnagClie = in.readString(); + nomeCliente = in.readString(); + if (in.readByte() == 0x01) { + ordini = new ArrayList(); + in.readList(ordini, Ordine.class.getClassLoader()); + } else { + ordini = null; + } + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(codAnagClie); + dest.writeString(nomeCliente); + if (ordini == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeList(ordini); + } + } + + @SuppressWarnings("unused") + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public OrdineVenditaGroupedInevasoDTO createFromParcel(Parcel in) { + return new OrdineVenditaGroupedInevasoDTO(in); + } + + @Override + public OrdineVenditaGroupedInevasoDTO[] newArray(int size) { + return new OrdineVenditaGroupedInevasoDTO[size]; + } + }; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaInevasoDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaInevasoDTO.java new file mode 100644 index 00000000..5f80d7dd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaInevasoDTO.java @@ -0,0 +1,23 @@ +package it.integry.integrywmsnative.gest.vendita.dto; + +public class OrdineVenditaInevasoDTO { + public String data; + public int numero; + public String termCons; + public String codAuto; + public String descrizioneAuto; + public String rifOrd; + public String codVvet; + public String descrizioneVettore; + public String dataInizTrasp; + public String codJcom = ""; + public String descrizioneCom = ""; + public String codAnagOrd = ""; + public String ragSocOrd = ""; + public String ragSocCom = ""; + public Float pesoTotale; + public Integer numCnf; + public String dataCons; + public String barcode; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/rest/OrdiniVenditaRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/rest/OrdiniVenditaRESTConsumerService.java new file mode 100644 index 00000000..efd68a13 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/rest/OrdiniVenditaRESTConsumerService.java @@ -0,0 +1,20 @@ +package it.integry.integrywmsnative.gest.vendita.rest; + +import java.util.List; + +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaDTO; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface OrdiniVenditaRESTConsumerService { + + @GET("SM2GetOrdiniVenditaInevasi") + Call>> listOrdiniInevasi(@Query("codMdep") String codMdep); + + @GET("getPickingListFromOrdini") + Call>> getPickingList(@Query("codMdep") String codMdep, @Query("dataCons") String dataCons, @Query("codBarreBancale") String codBarreBacale); + +} diff --git a/app/src/main/res/layout/fragment_main_accettazione.xml b/app/src/main/res/layout/fragment_main_accettazione.xml index 036d95e2..5a339d97 100644 --- a/app/src/main/res/layout/fragment_main_accettazione.xml +++ b/app/src/main/res/layout/fragment_main_accettazione.xml @@ -15,16 +15,16 @@ tools:context="it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment"> + + + android:layout_height="match_parent"/> - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/vendita_main_list_group_clienti.xml b/app/src/main/res/layout/vendita_main_list_group_clienti.xml new file mode 100644 index 00000000..97c07286 --- /dev/null +++ b/app/src/main/res/layout/vendita_main_list_group_clienti.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/vendita_main_list_group_model.xml b/app/src/main/res/layout/vendita_main_list_group_model.xml new file mode 100644 index 00000000..677ad4ce --- /dev/null +++ b/app/src/main/res/layout/vendita_main_list_group_model.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/vendita_main_list_model.xml b/app/src/main/res/layout/vendita_main_list_model.xml new file mode 100644 index 00000000..3ccc8585 --- /dev/null +++ b/app/src/main/res/layout/vendita_main_list_model.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 2764b4e9..ce9d0100 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -4,11 +4,14 @@ Attendere Caricamento Completato - %s del %s]]> + %s del %s]]> + %s del %s]]> + %s]]> Cerca... Accettazione Ordine di accettazione Ordini di accettazione + Spedizione Ops Attenzione OK diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index dada97aa..2847d09c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,7 +6,7 @@ #3f3f51b5 @color/green_500 - #32db64 + @color/orange_700 #eeeeee @@ -40,6 +40,8 @@ #88FB8C00 #FB8C00 + #F57C00 + #EF6C00 #E53935 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index da261b15..d13409c4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -14,10 +14,13 @@ Search... - %s of %s]]> + %s of %s]]> + %s of %s]]> + %s]]> Check in Check in order Multiple acceptance orders + Check out Ops Warning OK