diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index b2c24986..a9c46c40 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/app/build.gradle b/app/build.gradle index d6c20654..0f6f0612 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 68 - def appVersionName = '1.6.7' + def appVersionCode = 69 + def appVersionName = '1.6.8' signingConfigs { release { @@ -101,7 +101,7 @@ dependencies { implementation 'com.google.firebase:firebase-crash:16.2.1' implementation 'com.google.firebase:firebase-perf:18.0.1' implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1' - implementation 'androidx.appcompat:appcompat:1.1.0-beta01' + implementation 'androidx.appcompat:appcompat:1.1.0-rc01' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.1.0-alpha07' implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta2' diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java index 66168cfc..edb62d38 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java @@ -1,15 +1,10 @@ package it.integry.integrywmsnative; -import android.content.BroadcastReceiver; -import android.content.Context; import android.content.Intent; import androidx.annotation.IdRes; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; import androidx.databinding.DataBindingUtil; -import android.content.IntentFilter; import android.os.Bundle; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -20,7 +15,6 @@ import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; -import android.provider.Settings; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -28,14 +22,7 @@ import android.view.View; import androidx.fragment.app.FragmentTransaction; -import java.util.List; - -import it.integry.honeywellscannerlibrary.HoneyWellBarcodeReader; import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker; -import it.integry.integrywmsnative.core.class_router.BaseCustomConfiguration; -import it.integry.integrywmsnative.core.class_router.ClassRouter; -import it.integry.integrywmsnative.core.class_router.configs.MenuConfiguration; -import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; @@ -50,6 +37,8 @@ import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.gest.login.LoginActivity; import it.integry.integrywmsnative.gest.main.MainFragment; import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoFragment; +import it.integry.integrywmsnative.gest.prod_ord_lavorazione.ProdOrdineLavorazioneElencoFragment; +import it.integry.integrywmsnative.gest.prod_ord_produzione.ProdOrdineProduzioneElencoFragment; import it.integry.integrywmsnative.gest.prod_recupero_materiale.ProdRecuperoMaterialeFragment; import it.integry.integrywmsnative.gest.prod_versamento_materiale.ProdVersamentoMaterialeFragment; import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment; @@ -57,7 +46,6 @@ import it.integry.integrywmsnative.gest.settings.MainSettingsFragment; import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteFragment; import it.integry.integrywmsnative.gest.vendita.MainVenditaFragment; import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment; -import it.integry.plugins.barcode_base_library.exception.BarcodeAdapterNotFoundException; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, IPoppableActivity { @@ -134,8 +122,6 @@ public class MainActivity extends AppCompatActivity public void setItem(@IdRes int menuId) { mBinding.navView.setCheckedItem(menuId); onNavigationItemSelected(mBinding.navView.getMenu().findItem(menuId)); - - } @SuppressWarnings("StatementWithEmptyBody") @@ -148,47 +134,85 @@ public class MainActivity extends AppCompatActivity Fragment fragment = null; int id = item.getItemId(); - if (id == R.id.nav_home) { - this.pop(); - } else if (id == R.id.nav_accettazione) { - fragment = MainAccettazioneFragment.newInstance(); - this.adaptViewToFragment(fragment); - } else if (id == R.id.nav_spedizione) { - fragment = MainVenditaFragment.newInstance(); - this.adaptViewToFragment(fragment); - } else if (id == R.id.nav_rettifica_giacenze) { - fragment = RettificaGiacenzeFragment.newInstance(); - this.adaptViewToFragment(fragment); - } else if (id == R.id.nav_versamento_merce) { - fragment = VersamentoMerceFragment.newInstance(); - this.adaptViewToFragment(fragment); - } else if (id == R.id.nav_free_picking) { - fragment = PickingLiberoFragment.newInstance(); - this.adaptViewToFragment(fragment); - } - else if (id == R.id.nav_resi_cliente) { - fragment = UltimeConsegneClienteFragment.newInstance(); - this.adaptViewToFragment(fragment); - } - else if (id == R.id.nav_prod_versamento_materiale) { - fragment = ProdVersamentoMaterialeFragment.newInstance(); - this.adaptViewToFragment(fragment); - } else if (id == R.id.nav_prod_recupero_materiale) { - fragment = ProdRecuperoMaterialeFragment.newInstance(); - this.adaptViewToFragment(fragment); + + switch(id) { + case R.id.nav_home: + this.pop(); + break; + + case R.id.nav_accettazione: + fragment = MainAccettazioneFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + case R.id.nav_rettifica_giacenze: + fragment = RettificaGiacenzeFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + case R.id.nav_spedizione: + fragment = MainVenditaFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + case R.id.nav_versamento_merce: + fragment = VersamentoMerceFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + case R.id.nav_free_picking: + fragment = PickingLiberoFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + case R.id.nav_resi_cliente: + fragment = UltimeConsegneClienteFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + + + case R.id.nav_prod_ordine_produzione: + fragment = ProdOrdineProduzioneElencoFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + case R.id.nav_prod_ordine_lavorazione: + fragment = ProdOrdineLavorazioneElencoFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + case R.id.nav_prod_versamento_materiale: + fragment = ProdVersamentoMaterialeFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + case R.id.nav_prod_recupero_materiale: + fragment = ProdRecuperoMaterialeFragment.newInstance(); + this.adaptViewToFragment(fragment); + break; + + + + + case R.id.nav_settings: + fragment = new MainSettingsFragment(); + this.adaptViewToFragment(fragment); + break; + + + + + case R.id.nav_logout: + UtilitySettings.logout(); + ServerStatusChecker.dispose(); + + startLoginActivity(); + break; + + } - else if(id == R.id.nav_settings){ - fragment = new MainSettingsFragment(); - this.adaptViewToFragment(fragment); - } - - else if(id == R.id.nav_logout){ - UtilitySettings.logout(); - ServerStatusChecker.dispose(); - - startLoginActivity(); - } changeContentFragment(fragment, true); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java index 3b1ae680..ecc4e5ea 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java @@ -47,6 +47,16 @@ public class MenuConfiguration extends BaseMenuConfiguration { new MenuGroup() .setGroupText(R.string.production) + .addItem(new MenuItem() + .setID(R.id.nav_prod_ordine_produzione) + .setTitleText(R.string.prod_ordine_produzione_title_fragment) + .setTitleIcon(R.drawable.ic_dashboard_accettazione)) + + .addItem(new MenuItem() + .setID(R.id.nav_prod_ordine_lavorazione) + .setTitleText(R.string.prod_ordine_lavorazione_title_fragment) + .setTitleIcon(R.drawable.ic_dashboard_spedizione)) + .addItem(new MenuItem() .setID(R.id.nav_prod_versamento_materiale) .setTitleText(R.string.prod_versamento_materiale_title_fragment) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/class_router/interfaces/IFiltroOrdiniVendita.java b/app/src/main/java/it/integry/integrywmsnative/core/class_router/interfaces/IFiltroOrdiniVendita.java index 298000d5..8b27b4ad 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/class_router/interfaces/IFiltroOrdiniVendita.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/class_router/interfaces/IFiltroOrdiniVendita.java @@ -4,4 +4,8 @@ public interface IFiltroOrdiniVendita { boolean shoudShowCodMdepFilter(); + boolean shoudShowIdViaggioFilter(); + + boolean shoudShowAgenteFilter(); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java index fde33e5c..d26b80b4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java @@ -26,4 +26,18 @@ public class UtilityString { return capMatcher.appendTail(capBuffer).toString(); } + + public static String toCamelCase(String input) { + if(UtilityString.isNullOrEmpty(input)) return input; + + String tmp = ""; + + tmp += String.valueOf(input.charAt(0)).toUpperCase(); + + if(input.length() > 1) { + tmp += input.substring(1).toLowerCase(); + } + + return tmp; + } } 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 286c6632..259f7e42 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 @@ -21,26 +21,21 @@ import android.widget.Toast; import com.annimon.stream.Stream; import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.REST.CommonRESTException; import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.ISearcableFragment; -import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentMainAccettazioneBinding; import it.integry.integrywmsnative.gest.accettazione.core.AccettazioneHelper; import it.integry.integrywmsnative.gest.accettazione.core.MainListAccettazioneAdapter; import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ILoadOrdiniCallback; -import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ILoadPickingListCallback; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; -import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneGroupedInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity; import it.integry.integrywmsnative.ui.ElevatedToolbar; @@ -53,11 +48,12 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag private FragmentMainAccettazioneBinding mBinding; - private AccettazioneHelper helper; - - private List groupedOrdiniInevasi; + private AccettazioneHelper mHelper; private MainListAccettazioneAdapter mAdapter; + private List mOriginalOrderList; + private List mRenderedOrderList = new ArrayList<>(); + private AppCompatTextView mAppBarTitle; @@ -126,18 +122,19 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), getText(R.string.loading) + " ...", true); - helper = new AccettazioneHelper(getActivity()); + mHelper = new AccettazioneHelper(getActivity()); - helper.loadOrdini(new ILoadOrdiniCallback() { + mHelper.loadOrdini(new ILoadOrdiniCallback() { @Override public void onLoadSuccess(List ordini) { if(ordini != null) { Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show(); - groupOrdiniAndMakeRecycler(ordini); + mOriginalOrderList = ordini; } mBinding.ordiniAccettazioneEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE); - + refreshRenderedOrdini(ordini); + initRecyclerView(); progress.dismiss(); } @@ -154,127 +151,156 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag } - - private void groupOrdiniAndMakeRecycler(List ordini){ - - for(OrdineAccettazioneInevasoDTO ordine : ordini){ - if(UtilityString.isNullOrEmpty(ordine.getCodJcom()) || ordine.getCodJcom().equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)){ - ordine.setCodJcom(CommonConst.Config.COMMESSA_MAG); - ordine.setDescrizioneCom("MAGAZZINO"); - } - } - - groupedOrdiniInevasi = new ArrayList<>(); - - //Splitto gli ordini per codAnagClie - List groupedOrdini = Stream.of(ordini) - .map(x -> { - OrdineAccettazioneGroupedInevasoDTO groupedOrdine = new OrdineAccettazioneGroupedInevasoDTO(); - - groupedOrdine.codAnagForn = x.getCodAnagOrd(); - groupedOrdine.nomeFornitore = x.getRagSocOrd(); - groupedOrdine.ordini = new ArrayList<>(); - - return groupedOrdine; - }) - .distinctBy(x -> x.codAnagForn + "_" + x.nomeFornitore) - .sortBy(x -> x.nomeFornitore) - .toList(); - - - Stream.of(groupedOrdini).forEach(groupedOrdine -> { - - - //Splitto gli ordini di ogni fornitore per data e numero - List tmpOrd = Stream.of(ordini) - .filter(x -> x.getCodAnagOrd().equals(groupedOrdine.codAnagForn)) - - .sortBy(x -> x.getDataConsD() != null ? x.getDataConsD() : new Date(2000, 01, 01)) - .map(x -> { - - OrdineAccettazioneGroupedInevasoDTO.Ordine rigaOrdine = new OrdineAccettazioneGroupedInevasoDTO.Ordine(); - - rigaOrdine.data = x.getData(); - rigaOrdine.numero = x.getNumero(); - rigaOrdine.gestione = x.getGestione(); - rigaOrdine.codAnagOrd = x.getCodAnagOrd(); - rigaOrdine.ragSocOrd = x.getRagSocOrd(); - rigaOrdine.pesoTotale = x.getPesoTotale(); - rigaOrdine.barcode = x.getBarcode(); - rigaOrdine.termCons = x.getTermCons(); - rigaOrdine.dataCons = x.getDataConsS(); - rigaOrdine.rifOrd = x.getRifOrd(); - rigaOrdine.clienti = new ArrayList<>(); - - return rigaOrdine; - }) - .distinctBy(x -> x.barcode) - .toList(); - - - Stream.of(tmpOrd) - .forEach(rigaOrdine -> { - - Stream.of(ordini) - .filter(x -> - x.getCodAnagOrd().equals(rigaOrdine.codAnagOrd) && - x.getNumero() == rigaOrdine.numero && - x.getData().equals(rigaOrdine.data)) - .forEach(x -> { - OrdineAccettazioneGroupedInevasoDTO.Cliente cliente = new OrdineAccettazioneGroupedInevasoDTO.Cliente(); - - cliente.codJcom = x.getCodJcom(); - cliente.ragSocCom = x.getRagSocCom(); - cliente.descrCom = x.getDescrizioneCom(); - cliente.dataCons = x.getDataConsS(); - cliente.numCnf = x.getNumCnf(); - cliente.rifOrd = x.getRifOrd(); - - rigaOrdine.clienti.add(cliente); - }); - - - groupedOrdine.ordini.add(rigaOrdine); - - }); - - groupedOrdiniInevasi.add(groupedOrdine); - }); - - mAdapter = new MainListAccettazioneAdapter(getActivity(), groupedOrdiniInevasi, onGroupSelectionChanged); + private void initRecyclerView() { + mAdapter = new MainListAccettazioneAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged); mBinding.accettazioneMainList.setAdapter(mAdapter); } - public void onAccettazioneMainFabClick() { + private void refreshRenderedOrdini(List ordini) { - List selectedOrders = helper.getSelectedOrders(groupedOrdiniInevasi); + mRenderedOrderList.clear(); + if(ordini != null) mRenderedOrderList.addAll(ordini); + } + + private void refreshRecyclerView() { + mAdapter.updateItems(mRenderedOrderList); + } + + + + private RunnableArgs onSingleSelectionChanged = dto -> { + List 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.accettazioneMainFab.show(); + } + else { + mBinding.accettazioneMainFab.hide(); + } + }; + +// private void groupOrdiniAndMakeRecycler(List ordini){ +// +// for(OrdineAccettazioneInevasoDTO ordine : ordini){ +// if(UtilityString.isNullOrEmpty(ordine.getCodJcom()) || ordine.getCodJcom().equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)){ +// ordine.setCodJcom(CommonConst.Config.COMMESSA_MAG); +// ordine.setDescrizioneCom("MAGAZZINO"); +// } +// } +// +// groupedOrdiniInevasi = new ArrayList<>(); +// +// //Splitto gli ordini per codAnagClie +// List groupedOrdini = Stream.of(ordini) +// .map(x -> { +// OrdineAccettazioneGroupedInevasoDTO groupedOrdine = new OrdineAccettazioneGroupedInevasoDTO(); +// +// groupedOrdine.codAnagForn = x.getCodAnagOrd(); +// groupedOrdine.nomeFornitore = x.getRagSocOrd(); +// groupedOrdine.ordini = new ArrayList<>(); +// +// return groupedOrdine; +// }) +// .distinctBy(x -> x.codAnagForn + "_" + x.nomeFornitore) +// .sortBy(x -> x.nomeFornitore) +// .toList(); +// +// +// Stream.of(groupedOrdini).forEach(groupedOrdine -> { +// +// +// //Splitto gli ordini di ogni fornitore per data e numero +// List tmpOrd = Stream.of(ordini) +// .filter(x -> x.getCodAnagOrd().equals(groupedOrdine.codAnagForn)) +// +// .sortBy(x -> x.getDataConsD() != null ? x.getDataConsD() : new Date(2000, 01, 01)) +// .map(x -> { +// +// OrdineAccettazioneGroupedInevasoDTO.Ordine rigaOrdine = new OrdineAccettazioneGroupedInevasoDTO.Ordine(); +// +// rigaOrdine.data = x.getData(); +// rigaOrdine.numero = x.getNumero(); +// rigaOrdine.gestione = x.getGestione(); +// rigaOrdine.codAnagOrd = x.getCodAnagOrd(); +// rigaOrdine.ragSocOrd = x.getRagSocOrd(); +// rigaOrdine.pesoTotale = x.getPesoTotale(); +// rigaOrdine.barcode = x.getBarcode(); +// rigaOrdine.termCons = x.getTermCons(); +// rigaOrdine.dataCons = x.getDataConsS(); +// rigaOrdine.rifOrd = x.getRifOrd(); +// rigaOrdine.clienti = new ArrayList<>(); +// +// return rigaOrdine; +// }) +// .distinctBy(x -> x.barcode) +// .toList(); +// +// +// Stream.of(tmpOrd) +// .forEach(rigaOrdine -> { +// +// Stream.of(ordini) +// .filter(x -> +// x.getCodAnagOrd().equals(rigaOrdine.codAnagOrd) && +// x.getNumero() == rigaOrdine.numero && +// x.getData().equals(rigaOrdine.data)) +// .forEach(x -> { +// OrdineAccettazioneGroupedInevasoDTO.Cliente cliente = new OrdineAccettazioneGroupedInevasoDTO.Cliente(); +// +// cliente.codJcom = x.getCodJcom(); +// cliente.ragSocCom = x.getRagSocCom(); +// cliente.descrCom = x.getDescrizioneCom(); +// cliente.dataCons = x.getDataConsS(); +// cliente.numCnf = x.getNumCnf(); +// cliente.rifOrd = x.getRifOrd(); +// +// rigaOrdine.clienti.add(cliente); +// }); +// +// +// groupedOrdine.ordini.add(rigaOrdine); +// +// }); +// +// groupedOrdiniInevasi.add(groupedOrdine); +// }); +// +// mAdapter = new MainListAccettazioneAdapter(getActivity(), groupedOrdiniInevasi, onGroupSelectionChanged); +// mBinding.accettazioneMainList.setAdapter(mAdapter); +// } + + private void onAccettazioneMainFabClick() { + + List selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); List barcodes = new ArrayList<>(); - for(OrdineAccettazioneGroupedInevasoDTO ordine : selectedOrders){ - for(OrdineAccettazioneGroupedInevasoDTO.Ordine righeOrd : ordine.ordini){ - barcodes.add(righeOrd.barcode); - } + for(OrdineAccettazioneInevasoDTO ordine : selectedOrders){ + if(!barcodes.contains(ordine.getBarcode())) barcodes.add(ordine.getBarcode()); } final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), getText(R.string.loading) + " ...", true); - helper.retrievePickingList(barcodes, new ILoadPickingListCallback() { - @Override - public void onLoadSuccess(final List ordini) { + mHelper.retrievePickingList(barcodes, 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()); + artsCounter.addAndGet((int) Stream.of(x.getOrdini()).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); + if(!ordersKeys.contains(ordine.getData() + " " + ordine.getNumero() + " " + ordine.getGestione())){ + ordersKeys.add(ordine.getData() + " " + ordine.getNumero() + " " + ordine.getGestione()); } } @@ -294,36 +320,32 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag }).show(); - } - - @Override - public void onLoadFail(Exception ex) { + }, 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(); - } - }); + }); } - private RunnableArgs onGroupSelectionChanged = dto -> { - List selectedOrders = helper.getSelectedOrders(groupedOrdiniInevasi); - - if(selectedOrders != null && selectedOrders.size() > 1){ - for (OrdineAccettazioneGroupedInevasoDTO selectedOrder : selectedOrders) { - if(!dto.codAnagForn.equalsIgnoreCase(selectedOrder.codAnagForn)) { - Stream.of(selectedOrder.ordini).forEach(x -> x.setCheckbox(false)); - } - } - } - - if(selectedOrders.size() > 0) mBinding.accettazioneMainFab.show(); - else mBinding.accettazioneMainFab.hide(); - }; +// private RunnableArgs onGroupSelectionChanged = dto -> { +// List selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); +// +// if(selectedOrders != null && selectedOrders.size() > 1){ +// for (OrdineAccettazioneGroupedInevasoDTO selectedOrder : selectedOrders) { +// if(!dto.codAnagForn.equalsIgnoreCase(selectedOrder.codAnagForn)) { +// Stream.of(selectedOrder.ordini).forEach(x -> x.setCheckbox(false)); +// } +// } +// } +// +// if(selectedOrders.size() > 0) mBinding.accettazioneMainFab.show(); +// else mBinding.accettazioneMainFab.hide(); +// }; @@ -345,8 +367,8 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag @Override public boolean onQueryTextChange(String newText) { - final List filtermodelist = helper.getFilteredOrdersByFornitore(groupedOrdiniInevasi, newText); - mAdapter.setFilter(filtermodelist); + final List filtermodelist = mHelper.getFilteredOrdersByFornitore(mOriginalOrderList, newText); + mAdapter.updateItems(filtermodelist); return true; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java index 29e8ebdb..f5725430 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java @@ -4,19 +4,19 @@ import android.content.Context; import android.text.TextUtils; import android.util.Log; +import com.annimon.stream.Stream; + import java.util.ArrayList; import java.util.List; -import it.integry.integrywmsnative.R; 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.expansion.RunnableArgs; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ILoadOrdiniCallback; -import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ILoadPickingListCallback; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; -import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneGroupedInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumerService; import retrofit2.Call; @@ -39,7 +39,7 @@ public class AccettazioneHelper { String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class); - service.listOrdiniInevasi(codMdep).enqueue(new Callback>>() { + service.listOrdiniInevasi(codMdep, "A").enqueue(new Callback>>() { @Override public void onResponse(Call>> call, Response>> response) { @@ -70,7 +70,7 @@ public class AccettazioneHelper { }); } - public void retrievePickingList(List barcodeOrdini, final ILoadPickingListCallback callback){ + public void retrievePickingList(List barcodeOrdini, RunnableArgs> onComplete, RunnableArgs onFailed){ String joinedBarcodes = TextUtils.join(",", barcodeOrdini); @@ -86,26 +86,26 @@ public class AccettazioneHelper { List dto = response.body().getDto(); for (OrdineAccettazioneDTO ordine : dto) { - for(OrdineAccettazioneDTO.Riga riga : ordine.ordini){ - riga.numOrd = ordine.numero; - riga.dataOrd = ordine.data; - riga.gestioneOrd = ordine.gestione; - riga.codAlis = ordine.codAlis; + for(OrdineAccettazioneDTO.Riga riga : ordine.getOrdini()){ + riga.numOrd = ordine.getNumero(); + riga.dataOrd = ordine.getData(); + riga.gestioneOrd = ordine.getGestione(); + riga.codAlis = ordine.getCodAlis(); } } - callback.onLoadSuccess(dto); + onComplete.run(dto); } else { Log.e("Accettazione", response.body().getErrorMessage()); - callback.onLoadFail(new Exception(response.message())); + onFailed.run(new Exception(response.message())); } } else { Log.e("Accettazione", response.message()); - callback.onLoadFail(new Exception(response.message())); + onFailed.run(new Exception(response.message())); } } else { Log.e("Accettazione", "Status " + response.code() + ": " + response.message()); - callback.onLoadFail(new Exception("Status " + response.code() + ": " + response.message())); + onFailed.run(new Exception("Status " + response.code() + ": " + response.message())); } } @@ -113,50 +113,32 @@ public class AccettazioneHelper { public void onFailure(Call>> call, Throwable t) { Log.e("Accettazione", t.toString()); UtilityLogger.errorMe(new Exception(t)); - callback.onLoadFail(new Exception(t)); + onFailed.run(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 { - OrdineAccettazioneGroupedInevasoDTO cloneOrdine = groupedOrdiniInevasi.get(i).clone(); - cloneOrdine.ordini = selectedOrdiniGroup; - selectedOrdini.add(cloneOrdine); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); - } - } - } - - return selectedOrdini; + public List getSelectedOrders(List ordiniList){ + return Stream.of(ordiniList) + .filter(OrdineAccettazioneInevasoDTO::isSelected) + .toList(); } - public List getFilteredOrdersByFornitore(List groupedOrdiniInevasi, String textFilter){ - List selectedOrdini = new ArrayList<>(); + + public List getFilteredOrdersByFornitore(List groupedOrdiniInevasi, String textFilter){ + List filteredOrders = new ArrayList<>(); for(int i = 0; i < groupedOrdiniInevasi.size(); i++){ - if(groupedOrdiniInevasi.get(i).nomeFornitore.toLowerCase().contains(textFilter.toLowerCase())){ - selectedOrdini.add(groupedOrdiniInevasi.get(i)); + if(groupedOrdiniInevasi.get(i).getRagSocOrd().toLowerCase().contains(textFilter.toLowerCase())){ + filteredOrders.add(groupedOrdiniInevasi.get(i)); } } - - return selectedOrdini; + return filteredOrders; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/MainListAccettazioneAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/MainListAccettazioneAdapter.java index 231eef66..feb9acbe 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/MainListAccettazioneAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/MainListAccettazioneAdapter.java @@ -1,213 +1,192 @@ package it.integry.integrywmsnative.gest.accettazione.core; import android.content.Context; -import androidx.core.util.Pools; -import androidx.recyclerview.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 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.gest.accettazione.dto.OrdineAccettazioneGroupedInevasoDTO; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.AccettazioneMainListGroupClientiBinding; +import it.integry.integrywmsnative.databinding.AccettazioneMainListGroupModelBinding; +import it.integry.integrywmsnative.databinding.AccettazioneMainListModelBinding; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; +import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; -/** - * Created by GiuseppeS on 06/03/2018. - */ +public class MainListAccettazioneAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { -public class MainListAccettazioneAdapter 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); + private List mOriginalDataset; + private List mDataset; + private RunnableArgs mOnSingleSelectionChanged; - public static class ViewHolder extends RecyclerView.ViewHolder { - // each data item is just a string in this case - private TextView mTextViewGroupHeader; - private LinearLayout mLinearLayoutGroupItemContainer; + static class SubheaderHolder extends RecyclerView.ViewHolder { - private List views = new ArrayList<>(); + AccettazioneMainListModelBinding binding; - public ViewHolder(View v) { - super(v); + SubheaderHolder(AccettazioneMainListModelBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + } + + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + AccettazioneMainListGroupModelBinding binding; + + SingleItemViewHolder(AccettazioneMainListGroupModelBinding binding) { + super(binding.getRoot()); + this.binding = binding; } } - // Provide a suitable constructor (depends on the kind of dataset) - public MainListAccettazioneAdapter(Context context, List myDataset, RunnableArgs onGroupSelected) { + public MainListAccettazioneAdapter(Context context, List myDataset, RunnableArgs onSingleSelectionChanged) { mContext = context; - mDataset = myDataset; - mOnGroupSelected = onGroupSelected; + mOriginalDataset = myDataset; + mDataset = orderItems(myDataset); + mOnSingleSelectionChanged = onSingleSelectionChanged; } - // Create new views (invoked by the layout manager) - @Override - public MainListAccettazioneAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, - int viewType) { - // create a new view - View v = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.accettazione_main_list_model, parent, false); - - ViewHolder vh = new ViewHolder(v); - - TextView groupHeader = v.findViewById(R.id.accettazione_main_list_group_header); - vh.mTextViewGroupHeader = groupHeader; - - LinearLayout groupItemContainer = v.findViewById(R.id.accettazione_main_list_group_item_container); - vh.mLinearLayoutGroupItemContainer = groupItemContainer; - - return vh; + public void updateItems(List updatedDataset) { + mDataset.clear(); + mDataset.addAll(orderItems(updatedDataset)); + notifyDataSetChanged(); + notifyDataChanged(); } - // Replace the contents of a view (invoked by the layout manager) + + private List orderItems(List dataset) { + return Stream.of(dataset) + .distinctBy(OrdineAccettazioneInevasoDTO::getBarcode) + .sortBy(x -> x.getRagSocOrd() + "" + UtilityDate.formatDate(x.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)) + .toList(); + + } + + + @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 + public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { + AccettazioneMainListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.accettazione_main_list_model, parent, false); + return new SubheaderHolder(binding); + } - final List subGroup = mDataset.get(position).ordini; - final int finalPosition = position; + @Override + public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { + AccettazioneMainListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.accettazione_main_list_group_model, parent, false); + return new SingleItemViewHolder(binding); + } - holder.mTextViewGroupHeader.setText(mDataset.get(position).nomeFornitore); - holder.itemView.setOnClickListener(view -> { - boolean newValue = true; - for(int i = 0; i < subGroup.size(); i++){ - if(subGroup.get(i).checkBox) newValue = false; + @Override + public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) { + subheaderHolder.binding.accettazioneMainListGroupHeader.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(SingleItemViewHolder h, int itemPosition) { + final OrdineAccettazioneInevasoDTO ordine = mDataset.get(itemPosition); + final SingleItemViewHolder holder = h; + + holder.binding.accettazioneMainListGroupItemContainerCheckBox.setTag(ordine.getNumero()); + + holder.binding.accettazioneMainListGroupItemContainerCheckBox.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.accettazioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(testataOrdString)); + + holder.binding.accettazioneMainListGroupItemContainerClientiOrd.removeAllViews(); + + List clienti = Stream.of(mOriginalDataset) + .filter(x -> x.getBarcode().equals(ordine.getBarcode())) + .toList(); + + for (OrdineAccettazioneInevasoDTO cliente : clienti) { + AccettazioneMainListGroupClientiBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.accettazione_main_list_group_clienti, holder.binding.accettazioneMainListGroupItemContainerClientiOrd, false); + + binding.accettazioneMainListGroupClientiComm.setText(cliente.getRifOrd()); + + if (!UtilityString.isNullOrEmpty(cliente.getDataConsS())) { + binding.accettazioneMainListGroupClientiDatacons.setText(UtilityDate.formatDate(cliente.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH)); + } else { + binding.accettazioneMainListGroupClientiDatacons.setText(""); } - for(int i = 0; i < subGroup.size(); i++){ - subGroup.get(i).setCheckbox(newValue); - } + holder.binding.accettazioneMainListGroupItemContainerClientiOrd.addView(binding.getRoot()); + } - mOnGroupSelected.run(mDataset.get(finalPosition)); + holder.binding.setCheckboxValue(ordine.selected); + + holder.binding.getRoot().setOnClickListener(v -> { + ordine.setSelected(!ordine.isSelected()); }); - for (int i = 0; i < subGroup.size(); i++) { - final OrdineAccettazioneGroupedInevasoDTO.Ordine ordine = subGroup.get(i); + holder.binding.accettazioneMainListGroupItemContainerCheckBox.setChecked(ordine.isSelected()); - ordine.checkBoxCallback = new ArrayList<>(); - - View groupModelViewPool = (View) sPool.acquire(); - if(groupModelViewPool == null){ - groupModelViewPool = LayoutInflater.from(mContext) - .inflate(R.layout.accettazione_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.accettazione_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.accettazione_main_list_group_item_container_testata_ord); - String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), String.valueOf(ordine.numero), UtilityDate.formatDate(ordine.getData(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); - testataOrdTextView.setText(Html.fromHtml(testataOrdString)); - - LinearLayout clientLinearLayout = groupModelView.findViewById(R.id.accettazione_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.accettazione_main_list_group_clienti, clientLinearLayout, false); + //Bindable to View + ordine.selected.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + if(holder.binding.accettazioneMainListGroupItemContainerCheckBox.getTag().equals(ordine.getNumero())) { + holder.binding.accettazioneMainListGroupItemContainerCheckBox.setChecked(((BindableBoolean) sender).get()); } - - View groupClienteModelView = groupClienteModelViewPool; - - - TextView clienteComm = groupClienteModelView.findViewById(R.id.accettazione_main_list_group_clienti_comm); - String clienteText; -// clienteText = subGroupClienti.get(k).codJcom + " - " + subGroupClienti.get(k).descrCom; - clienteText = subGroupClienti.get(k).rifOrd; - clienteComm.setText(clienteText); - - TextView dataCons = groupClienteModelView.findViewById(R.id.accettazione_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); - } + //View to Bindable + holder.binding.accettazioneMainListGroupItemContainerCheckBox.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 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.accettazione_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() { + public int getItemSize() { return mDataset.size(); } - - public void setFilter(List newDataset) { - mDataset = new ArrayList<>(); - mDataset.addAll(newDataset); - notifyDataSetChanged(); + @Override + public String getSectionTitle(int position) { + return null; } + + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java index 6246d181..855b54a2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java @@ -20,17 +20,17 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; public class OrdineAccettazioneDTO implements Parcelable { - public String ragSoc; - public int numero; - public String data; - public String gestione; - public String codMdep; - public String codAnag; + private String ragSoc; + private int numero; + private String data; + private String gestione; + private String codMdep; + private String codAnag; private String codVdes; private String termCons; - public ArrayList ordini; - public String codAlis; - public String rifOrd; + private ArrayList ordini; + private String codAlis; + private String rifOrd; public static class Riga implements Parcelable { @@ -242,6 +242,8 @@ public class OrdineAccettazioneDTO implements Parcelable { return this; } + + public Riga(){} protected Riga(Parcel in) { @@ -382,5 +384,102 @@ public class OrdineAccettazioneDTO implements Parcelable { }; + public String getRagSoc() { + return ragSoc; + } + public OrdineAccettazioneDTO setRagSoc(String ragSoc) { + this.ragSoc = ragSoc; + return this; + } + + public int getNumero() { + return numero; + } + + public OrdineAccettazioneDTO setNumero(int numero) { + this.numero = numero; + return this; + } + + public String getData() { + return data; + } + + public OrdineAccettazioneDTO setData(String data) { + this.data = data; + return this; + } + + public String getGestione() { + return gestione; + } + + public OrdineAccettazioneDTO setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public String getCodMdep() { + return codMdep; + } + + public OrdineAccettazioneDTO setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getCodAnag() { + return codAnag; + } + + public OrdineAccettazioneDTO setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getCodVdes() { + return codVdes; + } + + public OrdineAccettazioneDTO setCodVdes(String codVdes) { + this.codVdes = codVdes; + return this; + } + + public String getTermCons() { + return termCons; + } + + public OrdineAccettazioneDTO setTermCons(String termCons) { + this.termCons = termCons; + return this; + } + + public ArrayList getOrdini() { + return ordini; + } + + public OrdineAccettazioneDTO setOrdini(ArrayList ordini) { + this.ordini = ordini; + return this; + } + + public String getCodAlis() { + return codAlis; + } + + public OrdineAccettazioneDTO setCodAlis(String codAlis) { + this.codAlis = codAlis; + return this; + } + + public String getRifOrd() { + return rifOrd; + } + + public OrdineAccettazioneDTO setRifOrd(String rifOrd) { + this.rifOrd = rifOrd; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneGroupedInevasoDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneGroupedInevasoDTO.java deleted file mode 100644 index 345e1992..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneGroupedInevasoDTO.java +++ /dev/null @@ -1,233 +0,0 @@ -package it.integry.integrywmsnative.gest.accettazione.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; - -/** - * Created by GiuseppeS on 06/03/2018. - */ - -public class OrdineAccettazioneGroupedInevasoDTO implements Cloneable, Serializable, Parcelable { - - public String codAnagForn; - public String nomeFornitore; - public List ordini; - - public OrdineAccettazioneGroupedInevasoDTO clone() throws CloneNotSupportedException { - return (OrdineAccettazioneGroupedInevasoDTO) 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 String gestione; - - 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 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 OrdineAccettazioneGroupedInevasoDTO(){} - - protected OrdineAccettazioneGroupedInevasoDTO(Parcel in) { - codAnagForn = in.readString(); - nomeFornitore = 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(codAnagForn); - dest.writeString(nomeFornitore); - 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 OrdineAccettazioneGroupedInevasoDTO createFromParcel(Parcel in) { - return new OrdineAccettazioneGroupedInevasoDTO(in); - } - - @Override - public OrdineAccettazioneGroupedInevasoDTO[] newArray(int size) { - return new OrdineAccettazioneGroupedInevasoDTO[size]; - } - }; - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneInevasoDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneInevasoDTO.java index 99e51ca6..57b3d6c1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneInevasoDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneInevasoDTO.java @@ -2,7 +2,9 @@ package it.integry.integrywmsnative.gest.accettazione.dto; import java.util.Date; +import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; /** * Created by GiuseppeS on 06/03/2018. @@ -30,11 +32,26 @@ public class OrdineAccettazioneInevasoDTO { private String barcode; private String gestione; + public BindableBoolean selected; + + public OrdineAccettazioneInevasoDTO() { + this.selected = new BindableBoolean(false); + } + public String getData() { return data; } + public Date getDataD(){ + try { + return UtilityDate.recognizeDate(data); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + public OrdineAccettazioneInevasoDTO setData(String data) { this.data = data; return this; @@ -210,4 +227,15 @@ public class OrdineAccettazioneInevasoDTO { this.gestione = gestione; return this; } + + + public boolean isSelected() { + return selected.get(); + } + + public OrdineAccettazioneInevasoDTO setSelected(boolean selected) { + this.selected.set(selected); + return this; + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java index 0aa7c501..b98162fa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java @@ -19,6 +19,9 @@ public interface OrdiniAccettazioneRESTConsumerService { @GET("SM2GetOrdiniAccettazioneInevasi") Call>> listOrdiniInevasi(@Query("codMdep") String codMdep); + @GET("SM2GetOrdiniAccettazioneInevasi") + Call>> listOrdiniInevasi(@Query("codMdep") String codMdep, @Query("gestione") String gestione); + @GET("WMSGetPickingListAccettazione") Call>> pickingListAccettazione(@Query("codBarreBancale") String codBarreBacale); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java index 5648f96a..88c69e1a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java @@ -98,7 +98,7 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity { private void setTitle(List ordini){ if(ordini.size() > 0){ if(ordini.size() == 1){ - setTitle(ordini.get(0).ragSoc); + setTitle(ordini.get(0).getRagSoc()); } else { setTitle(R.string.accettazione_ordine_inevaso_title_multiple_order); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/rest/OrdineAccettazioneInevasoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/rest/OrdineAccettazioneInevasoRESTConsumerService.java index 62424a9f..a4636a78 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/rest/OrdineAccettazioneInevasoRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/rest/OrdineAccettazioneInevasoRESTConsumerService.java @@ -27,12 +27,12 @@ public class OrdineAccettazioneInevasoRESTConsumerService { Stream.of(ordiniToShow).forEach(x -> { try { - Date date = UtilityDate.recognizeDate(x.data); + Date date = UtilityDate.recognizeDate(x.getData()); String dateString = UtilityDate.formatDate(date, "yyyy/MM/dd"); - if (!colliWhereCond.contains(x.gestione + " " + dateString + " " + x.numero)) { - String gestione = x.gestione.equalsIgnoreCase("P") ? "L" : x.gestione; - colliWhereCond.add(gestione + " " + dateString + " " + x.numero); + if (!colliWhereCond.contains(x.getGestione() + " " + dateString + " " + x.getNumero())) { + String gestione = x.getGestione().equalsIgnoreCase("P") ? "L" : x.getGestione(); + colliWhereCond.add(gestione + " " + dateString + " " + x.getNumero()); } } catch (Exception ex){ UtilityLogger.errorMe(ex); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOrdineAccettazioneInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOrdineAccettazioneInevasoViewModel.java index 0de91edc..c9740413 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOrdineAccettazioneInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOrdineAccettazioneInevasoViewModel.java @@ -97,7 +97,7 @@ public class AccettazioneOrdineAccettazioneInevasoViewModel implements IOnColloC groupedOrdini = new ArrayList<>(); for (OrdineAccettazioneDTO ordine : mOrders){ - groupedOrdini.addAll(ordine.ordini); + groupedOrdini.addAll(ordine.getOrdini()); } helper = new AccettazioneOrdineInevasoHelper(mActivity); @@ -475,7 +475,7 @@ public class AccettazioneOrdineAccettazioneInevasoViewModel implements IOnColloC List codAnags = stream(mOrders) - .select(c -> c.codAnag) + .select(c -> c.getCodAnag()) .distinct() .toList(); @@ -485,7 +485,7 @@ public class AccettazioneOrdineAccettazioneInevasoViewModel implements IOnColloC List rifOrds = stream(mOrders) - .select(c -> c.rifOrd) + .select(c -> c.getRifOrd()) .distinct() .toList(); @@ -495,13 +495,13 @@ public class AccettazioneOrdineAccettazioneInevasoViewModel implements IOnColloC List numDataOrds = stream(mOrders) - .select(value -> ("" + value.numero) + value.data) + .select(value -> ("" + value.getNumero()) + value.getData()) .distinct() .toList(); if(numDataOrds != null && numDataOrds.size() == 1){ - mtbColtToAddRefs.setNumOrd(mOrders.get(0).numero); - mtbColtToAddRefs.setDataOrd(mOrders.get(0).data); + mtbColtToAddRefs.setNumOrd(mOrders.get(0).getNumero()); + mtbColtToAddRefs.setDataOrd(mOrders.get(0).getData()); try { mtbColtToAddRefs.generaFiltroOrdine(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/ProdOrdineLavorazioneElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/ProdOrdineLavorazioneElencoFragment.java new file mode 100644 index 00000000..24cb2d5e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/ProdOrdineLavorazioneElencoFragment.java @@ -0,0 +1,297 @@ +package it.integry.integrywmsnative.gest.prod_ord_lavorazione; + + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import androidx.appcompat.widget.AppCompatTextView; +import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; + +import android.text.Html; +import android.text.SpannableString; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.CommonRESTException; +import it.integry.integrywmsnative.core.data_cache.DataCache; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityToast; +import it.integry.integrywmsnative.databinding.FragmentProdOrdineLavorazioneElencoBinding; +import it.integry.integrywmsnative.gest.prod_ord_lavorazione.core.ProdOrdineLavorazioneHelper; +import it.integry.integrywmsnative.gest.prod_ord_lavorazione.core.ProdOrdineLavorazioneListAdapter; +import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.VenditaOrdineInevasoActivity; +import it.integry.integrywmsnative.ui.ElevatedToolbar; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; + +/** + * A simple {@link Fragment} subclass. + */ +public class ProdOrdineLavorazioneElencoFragment extends Fragment implements ITitledFragment, IScrollableFragment { + private FragmentProdOrdineLavorazioneElencoBinding mBinding; + private ProdOrdineLavorazioneHelper mHelper; + + private Runnable mOnPreDestroy; + private ElevatedToolbar mToolbar; + + private ProdOrdineLavorazioneListAdapter mAdapter; + + private List mOriginalOrderList; + private List mRenderedOrderList = new ArrayList<>(); + + + public ProdOrdineLavorazioneElencoFragment() { + // Required empty public constructor + } + + + public static ProdOrdineLavorazioneElencoFragment newInstance() { + ProdOrdineLavorazioneElencoFragment fragment = new ProdOrdineLavorazioneElencoFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_lavorazione_elenco, container, false); + + mBinding.ordineLavorazioneMainList.setLayoutManager(new LinearLayoutManager(getActivity())); + mBinding.ordineLavorazioneMainFab.hide(); + + mBinding.ordineLavorazioneMainFab.setOnClickListener(v -> onVenditaMainFabClick()); + + if(mToolbar != null) mToolbar.setRecyclerView(mBinding.ordineLavorazioneMainList); + + init(); + return mBinding.getRoot(); + } + + @Override + public void onCreateActionBar(AppCompatTextView titleText, Context context) { + titleText.setText(context.getText(R.string.prod_ordine_lavorazione_title_fragment).toString()); + } + + @Override + public void setScrollToolbar(ElevatedToolbar toolbar) { + mToolbar = toolbar; + } + + @Override + public void setOnPreDestroy(Runnable onPreDestroy) { + mOnPreDestroy = onPreDestroy; + } + + + + + private void init(){ + + final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), + getText(R.string.loading) + " ...", true); + + mHelper = new ProdOrdineLavorazioneHelper(getActivity()); +// mViewModel = new VenditaViewModel(getActivity(), this, mBinding, mHelper); + + mHelper.loadOrdini(ordini -> { + if(ordini != null) { + UtilityToast.showToast("Caricati " + ordini.size() + " ordini"); + mOriginalOrderList = ordini; +// mViewModel.setListOrder(ordini); + } + + + mBinding.ordineLavorazioneEmptyView.setVisibility(ordini != null && ordini.size() > 0 ? View.GONE : View.VISIBLE); + + refreshOrdini(ordini); + initRecyclerView(); + progress.dismiss(); + }, ex -> { + mOriginalOrderList = new ArrayList<>(); + progress.dismiss(); + + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + if(errorMessage == null) errorMessage = ex.getMessage(); + DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); + }); + + } + + + + + + + + public void refreshOrdini(List ordini) { + + mRenderedOrderList.clear(); + mRenderedOrderList.addAll(ordini); + } + + private void initRecyclerView() { + mAdapter = new ProdOrdineLavorazioneListAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged); + mBinding.ordineLavorazioneMainList.setAdapter(mAdapter); + } + + public void refreshRecyclerView() { + mAdapter.updateItems(mRenderedOrderList); + } + + private RunnableArgs onSingleSelectionChanged = dto -> { + List selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); + + if(!SettingsManager.iDB().isFlagMultiClienteOrdV()){ + boolean allMatch = Stream.of(selectedOrders).allMatch(x -> dto.getCodAnagOrd().equalsIgnoreCase(x.getCodAnagOrd())); + + if(!allMatch) { + Stream.of(selectedOrders) + .filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(dto.getCodAnagOrd())) + .forEach(x -> x.setSelected(false)); + } + } + + if(selectedOrders != null && selectedOrders.size() > 0) { + mBinding.ordineLavorazioneMainFab.show(); + } + else { + mBinding.ordineLavorazioneMainFab.hide(); + } + }; + + + + + + private void onVenditaMainFabClick() { + + List selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); + List barcodes = new ArrayList<>(); + + String dataCons = null; + + for(OrdineVenditaInevasoDTO ordine : selectedOrders){ + if(!barcodes.contains(ordine.getBarcode())) barcodes.add(ordine.getBarcode()); + + if(dataCons == null) dataCons = ordine.getDataConsS(); + else if(!dataCons.equalsIgnoreCase(ordine.getDataConsS())) dataCons = ""; + } + + final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), + getText(R.string.loading) + " ...", true); + + + final String finalDataCons = dataCons; + checkSelectedOrders(selectedOrders, () -> { + + mHelper.retrievePickingList(barcodes, finalDataCons, ordini -> { + + mHelper.getBancaliLavorazioneGiaRegistrati(selectedOrders, mtbColtList -> { + + progress.dismiss(); + + List codMarts = Stream.of(ordini) + .distinctBy(PickingObjectDTO::getCodMart) + .map(PickingObjectDTO::getCodMart) + .toList(); + + int alreadyRegisteredUL = mtbColtList.size(); + + + + + DialogSimpleMessageHelper.makeInfoDialog(getActivity(), + getText(R.string.orders).toString(), + Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, barcodes.size()), barcodes.size()) + + "
" + + "" + codMarts.size() + " " + getActivity().getResources().getQuantityString(R.plurals.available_articles, codMarts.size()) + + "
" + + "" + alreadyRegisteredUL + " " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)), + null, + () -> startPickingActivity(ordini, selectedOrders, mtbColtList) + ).show(); + + }, ex -> UtilityExceptions.defaultException(getActivity(), ex, progress)); + + }, ex -> { + UtilityExceptions.defaultException(getActivity(), ex, progress); + }); + + + }, progress::dismiss); + } + + private void checkSelectedOrders(List selectedOrders, Runnable onComplete, Runnable onFailed) { + if(selectedOrders != null && selectedOrders.size() > 0) { + + //Definizione della gestione collo di default + List foundGestioni = Stream.of(selectedOrders) + .map(OrdineVenditaInevasoDTO::getGestioneEnum) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if (foundGestioni != null && foundGestioni.size() > 1) { + DialogSimpleMessageHelper.makeErrorDialog(getContext(), new SpannableString(getString(R.string.error_multiple_gest)), null, onFailed::run).show(); + return; + } + + //Definizione del deposito di default + List foundCodMdep = Stream.of(selectedOrders) + .map(OrdineVenditaInevasoDTO::getCodMdep) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if (foundCodMdep != null && foundCodMdep.size() > 1) { + DialogSimpleMessageHelper.makeErrorDialog(getContext(), new SpannableString(getString(R.string.error_multiple_cod_mdep_ordv)), null, onFailed::run).show(); + return; + } + } + + onComplete.run(); + } + + private void startPickingActivity(List ordini, List selectedOrders, List mtbColtList) { + Intent myIntent = new Intent(getActivity(), VenditaOrdineInevasoActivity.class); + + String keyPickingList = DataCache.addItem(ordini); + myIntent.putExtra("keyPickingList", keyPickingList); + + String keyTestateOrdini = DataCache.addItem(selectedOrders); + myIntent.putExtra("keyTestateOrdini", keyTestateOrdini); + + String keyColliRegistrati = DataCache.addItem(mtbColtList); + myIntent.putExtra("keyColliRegistrati", keyColliRegistrati); + + getActivity().startActivity(myIntent); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/core/ProdOrdineLavorazioneHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/core/ProdOrdineLavorazioneHelper.java new file mode 100644 index 00000000..8e562d31 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/core/ProdOrdineLavorazioneHelper.java @@ -0,0 +1,200 @@ +package it.integry.integrywmsnative.gest.prod_ord_lavorazione.core; + +import android.content.Context; +import android.text.TextUtils; +import android.util.Log; + +import com.annimon.stream.Stream; +import com.google.firebase.perf.metrics.Trace; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.REST.model.EsitoType; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDB; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityFirebase; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.vendita.rest.OrdiniVenditaRESTConsumerService; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class ProdOrdineLavorazioneHelper { + + + private Context mContext; + + public ProdOrdineLavorazioneHelper(Context context){ + mContext = context; + } + + public void loadOrdini(RunnableArgs> onComplete, RunnableArgs onFailed){ + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); + + Trace perfTrace = UtilityFirebase.getNewPerformanceTrace("db_load_ords_lavorazione"); + perfTrace.start(); + + OrdiniVenditaRESTConsumerService service = RESTBuilder.getService(OrdiniVenditaRESTConsumerService.class); + service + .listOrdiniInevasi(codMdep, "P") + .enqueue(new Callback>>() { + + @Override + public void onResponse(Call>> call, Response>> response) { + + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + UtilityFirebase.stopPerformanceTrace(perfTrace, false); + onComplete.run(response.body().getDto()); + } else { + UtilityFirebase.stopPerformanceTrace(perfTrace, true); + Log.e("Ord Lavorazione", response.body().getErrorMessage()); + onFailed.run(new Exception(response.body().getErrorMessage())); + } + } else { + UtilityFirebase.stopPerformanceTrace(perfTrace, true); + Log.e("Ord Lavorazione", response.message()); + onFailed.run(new Exception(response.message())); + } + } else { + UtilityFirebase.stopPerformanceTrace(perfTrace, true); + Log.e("Ord Lavorazione", "Status " + response.code() + ": " + response.message()); + onFailed.run(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + UtilityFirebase.stopPerformanceTrace(perfTrace, true); + Log.e("Ord Lavorazione", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + onFailed.run(new Exception(t)); + } + }); + } + + public List getSelectedOrders(List ordiniList) { + return Stream.of(ordiniList) + .filter(OrdineVenditaInevasoDTO::isSelected) + .toList(); + } + + + + + public void retrievePickingList(List barcodeOrdini, String dateCons, RunnableArgs> onComplete, RunnableArgs onFailed){ + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); + + String joinedBarcodes = TextUtils.join(",", barcodeOrdini); + + OrdiniVenditaRESTConsumerService service = RESTBuilder.getService(OrdiniVenditaRESTConsumerService.class, 90); + + Trace perfTrace = UtilityFirebase.getNewPerformanceTrace("db_load_pick_lavorazione"); + perfTrace.start(); + + service.getPickingList(codMdep, dateCons, 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) { + UtilityFirebase.stopPerformanceTrace(perfTrace, false); + onComplete.run(response.body().getDto()); + + } else { + Log.e("Ord Lavorazione", response.body().getErrorMessage()); + UtilityFirebase.stopPerformanceTrace(perfTrace, true); + onFailed.run(new Exception(response.message())); + } + } else { + Log.e("Ord Lavorazione", response.message()); + UtilityFirebase.stopPerformanceTrace(perfTrace, true); + onFailed.run(new Exception(response.message())); + } + } else { + UtilityFirebase.stopPerformanceTrace(perfTrace, true); + Log.e("Ord Lavorazione", "Status " + response.code() + ": " + response.message()); + onFailed.run(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + UtilityFirebase.stopPerformanceTrace(perfTrace, true); + Log.e("Ord Lavorazione", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + onFailed.run(new Exception(t)); + } + }); + + } + + + + + + public void getBancaliLavorazioneGiaRegistrati(List orders, RunnableArgs> onComplete, RunnableArgs onFailed) { + + String baseSql = "SELECT DISTINCT mtb_colt.* " + + "FROM mtb_colt, " + + " mtb_colr " + + "WHERE mtb_colt.gestione = mtb_colr.gestione " + + " AND mtb_colt.ser_collo = mtb_colr.ser_collo " + + " AND mtb_colt.data_collo = mtb_colr.data_collo " + + " AND mtb_colt.num_collo = mtb_colr.num_collo " + + " AND mtb_colt.gestione = 'L' " + + " AND mtb_colt.segno = -1 " + + // " AND mtb_colt.ser_collo = '/' " + + " AND mtb_colt.data_doc IS NULL AND "; + + StringBuilder whereCond = new StringBuilder(); + + for(int i = 0; i < orders.size(); i++){ + + + whereCond + .append("(mtb_colr.data_ord = '").append(UtilityDate.formatDate(orders.get(i).getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)).append("' ") + .append("AND mtb_colr.num_ord = ").append(orders.get(i).getNumOrd()).append(" ") + .append("AND mtb_colr.gestione = ").append(UtilityDB.valueToString(orders.get(i).getGestione())) + .append(") "); + + if(i != (orders.size() - 1)){ + whereCond.append("OR "); + } + } + + baseSql += "( " + whereCond + ")"; + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(baseSql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/core/ProdOrdineLavorazioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/core/ProdOrdineLavorazioneListAdapter.java new file mode 100644 index 00000000..54bda350 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_lavorazione/core/ProdOrdineLavorazioneListAdapter.java @@ -0,0 +1,174 @@ +package it.integry.integrywmsnative.gest.prod_ord_lavorazione.core; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.core.content.res.ResourcesCompat; +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.databinding.FragmentProdOrdineLavorazioneListGroupModelBinding; +import it.integry.integrywmsnative.databinding.FragmentProdOrdineLavorazioneListModelBinding; +import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneListModelBinding; +import it.integry.integrywmsnative.databinding.VenditaMainListGroupModelBinding; +import it.integry.integrywmsnative.databinding.VenditaMainListModelBinding; +import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; + +public class ProdOrdineLavorazioneListAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { + private Context mContext; + + private List mDataset; + private RunnableArgs mOnSingleSelectionChanged; + + static class SubheaderHolder extends RecyclerView.ViewHolder { + + FragmentProdOrdineLavorazioneListModelBinding binding; + + SubheaderHolder(FragmentProdOrdineLavorazioneListModelBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + } + + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + FragmentProdOrdineLavorazioneListGroupModelBinding binding; + + SingleItemViewHolder(FragmentProdOrdineLavorazioneListGroupModelBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } + + + public ProdOrdineLavorazioneListAdapter(Context context, List myDataset, RunnableArgs onSingleSelectionChanged) { + mContext = context; + mDataset = orderItems(myDataset); + mOnSingleSelectionChanged = onSingleSelectionChanged; + } + + public void updateItems(List updatedDataset) { + mDataset.clear(); + mDataset.addAll(orderItems(updatedDataset)); + notifyDataSetChanged(); + notifyDataChanged(); + } + + + private List orderItems(List dataset) { + return Stream.of(dataset) + .sortBy(OrdineVenditaInevasoDTO::getRagSocOrd) + .toList(); + + } + + + + @Override + public ProdOrdineLavorazioneListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { + FragmentProdOrdineLavorazioneListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_lavorazione__list_model, parent, false); + return new ProdOrdineLavorazioneListAdapter.SubheaderHolder(binding); + } + + @Override + public ProdOrdineLavorazioneListAdapter.SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { + FragmentProdOrdineLavorazioneListGroupModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_prod_ordine_lavorazione__list_group_model, parent, false); + return new ProdOrdineLavorazioneListAdapter.SingleItemViewHolder(binding); + } + + + @Override + public void onBindSubheaderViewHolder(ProdOrdineLavorazioneListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) { + subheaderHolder.binding.ordineLavorazioneMainListGroupHeader.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(OrdineVenditaInevasoDTO::isSelected); + + Stream.of(mDataset) + .filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())) + .forEach(x -> x.setSelected(!anySelected)); + }); + } + + @Override + public void onBindItemViewHolder(SingleItemViewHolder h, int itemPosition) { + final OrdineVenditaInevasoDTO ordine = mDataset.get(itemPosition); + final SingleItemViewHolder holder = h; + + holder.binding.ordineLavorazioneMainListGroupItemContainerCheckBox.setTag(ordine.getNumOrd()); + + holder.binding.ordineLavorazioneMainListGroupItemContainerCheckBox.setOnCheckedChangeListener(null); + + ordine.selected.resetOnPropertyChangedCallback(); + + + String testataOrdString = String.format(mContext.getString(R.string.ord_ven_testata), String.valueOf(ordine.getNumOrd()), UtilityDate.formatDate(ordine.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + holder.binding.ordineLavorazioneMainListGroupItemContainerTestataOrd.setText(Html.fromHtml(testataOrdString)); + + String testataDataConsString = String.format(mContext.getString(R.string.ord_ven_testata_data_cons), UtilityDate.formatDate(ordine.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + holder.binding.ordineLavorazioneMainListGroupItemContainerTestataDataCons.setText(Html.fromHtml(testataDataConsString)); + + holder.binding.venditaMainListGroupItemContainerDetailOrd.setText(ordine.getRifOrd()); + + holder.binding.setCheckboxValue(ordine.selected); + + holder.binding.getRoot().setOnClickListener(v -> { + ordine.setSelected(!ordine.isSelected()); + }); + + holder.binding.ordineLavorazioneMainListGroupItemContainerCheckBox.setChecked(ordine.isSelected()); + + //Bindable to View + ordine.selected.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + if(holder.binding.ordineLavorazioneMainListGroupItemContainerCheckBox.getTag().equals(ordine.getNumOrd())) { + holder.binding.ordineLavorazioneMainListGroupItemContainerCheckBox.setChecked(((BindableBoolean) sender).get()); + } + } + }); + + + //View to Bindable + holder.binding.ordineLavorazioneMainListGroupItemContainerCheckBox.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; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/ProdOrdineProduzioneElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/ProdOrdineProduzioneElencoFragment.java new file mode 100644 index 00000000..7dc7ca97 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/ProdOrdineProduzioneElencoFragment.java @@ -0,0 +1,240 @@ +package it.integry.integrywmsnative.gest.prod_ord_produzione; + + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; + +import androidx.appcompat.widget.AppCompatTextView; +import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; + +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 com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.CommonRESTException; +import it.integry.integrywmsnative.core.data_cache.DataCache; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.databinding.FragmentProdOrdineProduzioneElencoBinding; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity; +import it.integry.integrywmsnative.gest.prod_ord_produzione.core.OrdineProduzioneHelper; +import it.integry.integrywmsnative.gest.prod_ord_produzione.core.OrdineProduzioneListAdapter; +import it.integry.integrywmsnative.ui.ElevatedToolbar; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; + +/** + * A simple {@link Fragment} subclass. + */ +public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITitledFragment, IScrollableFragment { + + private Runnable mOnPreDestroy; + private ElevatedToolbar mToolbar; + + private FragmentProdOrdineProduzioneElencoBinding mBinding; + + private OrdineProduzioneHelper mHelper; + private OrdineProduzioneListAdapter mAdapter; + + private List mOriginalOrderList; + private List mRenderedOrderList = new ArrayList<>(); + + private AppCompatTextView mAppBarTitle; + + public ProdOrdineProduzioneElencoFragment() { + // Required empty public constructor + } + + + public static ProdOrdineProduzioneElencoFragment newInstance() { + ProdOrdineProduzioneElencoFragment fragment = new ProdOrdineProduzioneElencoFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_prod_ordine_produzione_elenco, container, false); + + + mBinding.setView(this); + mBinding.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity())); + mBinding.ordineProduzioneMainFab.hide(); + + mBinding.ordineProduzioneMainFab.setOnClickListener(v -> { + this.onAccettazioneMainFabClick(); + }); + + mToolbar.setRecyclerView(mBinding.ordineProduzioneMainList); + + init(); + return mBinding.getRoot(); + } + + @Override + public void onCreateActionBar(AppCompatTextView titleText, Context context) { + mAppBarTitle = titleText; + mAppBarTitle.setText(context.getText(R.string.prod_ordine_produzione_title_fragment).toString()); + } + + + + private void init() { + + final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), getText(R.string.loading) + " ...", true); + + 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(); + DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); + } + ); + + + } + + @Override + public void setScrollToolbar(ElevatedToolbar toolbar) { + mToolbar = toolbar; + } + + @Override + public void setOnPreDestroy(Runnable onPreDestroy) { + mOnPreDestroy = onPreDestroy; + } + + + + private void initRecyclerView() { + mAdapter = new OrdineProduzioneListAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged); + mBinding.ordineProduzioneMainList.setAdapter(mAdapter); + } + + private void refreshRenderedOrdini(List ordini) { + + mRenderedOrderList.clear(); + if(ordini != null) mRenderedOrderList.addAll(ordini); + } + + private void refreshRecyclerView() { + mAdapter.updateItems(mRenderedOrderList); + } + + private RunnableArgs onSingleSelectionChanged = dto -> { + List 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(); + } + else { + mBinding.ordineProduzioneMainFab.hide(); + } + }; + + + + private void onAccettazioneMainFabClick() { + + List selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); + List barcodes = new ArrayList<>(); + + for(OrdineAccettazioneInevasoDTO ordine : selectedOrders){ + if(!barcodes.contains(ordine.getBarcode())) barcodes.add(ordine.getBarcode()); + } + + final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), + getText(R.string.loading) + " ...", true); + + mHelper.retrievePickingList(barcodes, ordini -> { + progress.dismiss(); + + AtomicInteger artsCounter = new AtomicInteger(); + + Stream.of(ordini).forEach(x -> { + artsCounter.addAndGet((int) Stream.of(x.getOrdini()).filter(y -> y.getQtaDaEvadere().floatValue() > 0).count()); + }); + + List ordersKeys = new ArrayList<>(); + + for(OrdineAccettazioneDTO ordine : ordini){ + if(!ordersKeys.contains(ordine.getData() + " " + ordine.getNumero() + " " + ordine.getGestione())){ + ordersKeys.add(ordine.getData() + " " + ordine.getNumero() + " " + ordine.getGestione()); + } + } + + 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, + () -> { + + String cacheItemID = DataCache.addItem(ordini); + + Intent myIntent = new Intent(getActivity(), AccettazioneOrdineInevasoActivity.class); + myIntent.putExtra("key", cacheItemID); + getActivity().startActivity(myIntent); + + }).show(); + + }, + + 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/prod_ord_produzione/core/OrdineProduzioneHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneHelper.java new file mode 100644 index 00000000..d3b63ed0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneHelper.java @@ -0,0 +1,125 @@ +package it.integry.integrywmsnative.gest.prod_ord_produzione.core; + +import android.content.Context; +import android.text.TextUtils; +import android.util.Log; + +import com.annimon.stream.Stream; + +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.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; +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> onComplete, RunnableArgs onFailed){ + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); + + OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class); + service.listOrdiniInevasi(codMdep, "P").enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> 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.message())); + } + } 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>> call, Throwable t) { + Log.e("Produzione", t.toString()); + onFailed.run(new Exception(t)); + } + }); + } + + + public void retrievePickingList(List barcodeOrdini, RunnableArgs> onComplete, RunnableArgs onFailed){ + + String joinedBarcodes = TextUtils.join(",", barcodeOrdini); + + OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class); + + service.pickingListAccettazione(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 (OrdineAccettazioneDTO ordine : dto) { + for(OrdineAccettazioneDTO.Riga riga : ordine.getOrdini()){ + riga.numOrd = ordine.getNumero(); + riga.dataOrd = ordine.getData(); + riga.gestioneOrd = ordine.getGestione(); + riga.codAlis = ordine.getCodAlis(); + } + } + + onComplete.run(dto); + } else { + Log.e("Produzione", response.body().getErrorMessage()); + onFailed.run(new Exception(response.message())); + } + } else { + Log.e("Produzione", response.message()); + onFailed.run(new Exception(response.message())); + } + } else { + Log.e("Produzione", "Status " + response.code() + ": " + response.message()); + onFailed.run(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + Log.e("Produzione", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + onFailed.run(new Exception(t)); + } + }); + + } + + + + + public List getSelectedOrders(List ordiniList){ + return Stream.of(ordiniList) + .filter(OrdineAccettazioneInevasoDTO::isSelected) + .toList(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneListAdapter.java new file mode 100644 index 00000000..4f5b7450 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_ord_produzione/core/OrdineProduzioneListAdapter.java @@ -0,0 +1,198 @@ +package it.integry.integrywmsnative.gest.prod_ord_produzione.core; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.core.content.res.ResourcesCompat; +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.CommonConst; +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.databinding.VenditaMainListGroupModelBinding; +import it.integry.integrywmsnative.databinding.VenditaMainListModelBinding; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; + +public class OrdineProduzioneListAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { + + + private Context mContext; + + private List mOriginalDataset; + private List mDataset; + private RunnableArgs 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 myDataset, RunnableArgs onSingleSelectionChanged) { + mContext = context; + mOriginalDataset = myDataset; + mDataset = orderItems(myDataset); + mOnSingleSelectionChanged = onSingleSelectionChanged; + } + + public void updateItems(List updatedDataset) { + mDataset.clear(); + mDataset.addAll(orderItems(updatedDataset)); + notifyDataSetChanged(); + notifyDataChanged(); + } + + + private List orderItems(List dataset) { + return Stream.of(dataset) + .distinctBy(OrdineAccettazioneInevasoDTO::getBarcode) + .sortBy(x -> x.getRagSocOrd() + "" + 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 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(""); + } + + 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; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java index ad57f139..606f094d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeFragment.java @@ -60,25 +60,13 @@ public class ProdRecuperoMaterialeFragment extends Fragment implements ITitledFr return mBinding.getRoot(); } - @Override - public void onAttach(Context context) { - super.onAttach(context); - - } - - @Override - public void onDetach() { - super.onDetach(); - - } - private void init() { mHelper = new ProdRecuperoMaterialeHelper(getActivity()); mViewmodel.init(getActivity(), mBinding, mHelper, () -> { ((IPoppableActivity) getActivity()).pop(); }); - mViewmodel.openLU(); +// mViewmodel.openLU(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/core/HistoryULsListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/core/HistoryULsListAdapter.java new file mode 100644 index 00000000..50dc3121 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/core/HistoryULsListAdapter.java @@ -0,0 +1,140 @@ +package it.integry.integrywmsnative.gest.prod_recupero_materiale.core; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +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.utility.UtilityString; +import it.integry.integrywmsnative.databinding.ProdRecuperoMaterialeListHeaderBinding; +import it.integry.integrywmsnative.databinding.ProdRecuperoMaterialeListItemBinding; +import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdUL; +import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; + +public class HistoryULsListAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { + + + private Context mContext; + + private List mOriginalDataset; + private List mDataset; + + + static class SubheaderHolder extends RecyclerView.ViewHolder { + + ProdRecuperoMaterialeListHeaderBinding binding; + + SubheaderHolder(ProdRecuperoMaterialeListHeaderBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + } + + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + ProdRecuperoMaterialeListItemBinding binding; + + SingleItemViewHolder(ProdRecuperoMaterialeListItemBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } + + + + public HistoryULsListAdapter(Context context, List myDataset) { + mContext = context; + mOriginalDataset = myDataset; + mDataset = orderItems(myDataset); + } + + public void updateItems(List updatedDataset) { + mDataset.clear(); + mDataset.addAll(orderItems(updatedDataset)); + notifyDataSetChanged(); + notifyDataChanged(); + } + + + private List orderItems(List dataset) { + return Stream.of(dataset) + .sortBy(HistoryVersamentoProdUL::getCodJfas) + .toList(); + + } + + + + @Override + public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { + ProdRecuperoMaterialeListHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.prod_recupero_materiale_list_header, parent, false); + return new SubheaderHolder(binding); + } + + @Override + public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { + ProdRecuperoMaterialeListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.prod_recupero_materiale_list_item, parent, false); + return new SingleItemViewHolder(binding); + } + + + + @Override + public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) { + String fase = UtilityString.isNullOrEmpty(mDataset.get(nextItemPosition).getDescrizioneFase()) ? mDataset.get(nextItemPosition).getCodJfas() : mDataset.get(nextItemPosition).getDescrizioneFase(); + + subheaderHolder.binding.codJfas.setText(UtilityString.toCamelCase(fase)); + } + + + @Override + public void onBindItemViewHolder(SingleItemViewHolder h, int itemPosition) { + final HistoryVersamentoProdUL ul = mDataset.get(itemPosition); + final SingleItemViewHolder holder = h; + + + holder.binding.codMart.setText(ul.getCodMart()); + holder.binding.descrizione.setText(ul.getDescrizioneArt()); + holder.binding.numCollo.setText(String.valueOf(ul.getNumCollo())); + holder.binding.partitaMag.setText(ul.getPartitaMag()); + + holder.binding.qtaVersata.setText(String.valueOf(ul.getQtaCol())); + holder.binding.untMisQtaVersata.setText(ul.getUntMis()); + + + holder.binding.getRoot().setOnClickListener(v -> { +// ordine.setSelected(!ordine.isSelected()); + }); + + + } + + + @Override + public boolean onPlaceSubheaderBetweenItems(int position) { + return !this.mDataset.get(position).getCodJfas().equalsIgnoreCase(this.mDataset.get(position + 1).getCodJfas()); + + } + + @Override + public int getItemSize() { + return mDataset.size(); + } + + @Override + public String getSectionTitle(int position) { + return null; + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/core/ProdRecuperoMaterialeHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/core/ProdRecuperoMaterialeHelper.java index 63537308..a5b6b477 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/core/ProdRecuperoMaterialeHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/core/ProdRecuperoMaterialeHelper.java @@ -2,6 +2,18 @@ package it.integry.integrywmsnative.gest.prod_recupero_materiale.core; import android.content.Context; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdUL; + public class ProdRecuperoMaterialeHelper { @@ -10,4 +22,67 @@ public class ProdRecuperoMaterialeHelper { public ProdRecuperoMaterialeHelper(Context context) { this.mContext = context; } + + + public void loadLastULVersate(RunnableArgs> onComplete, RunnableArgs onFailed) { + + String sql = "SELECT jtb_fasi.cod_jfas, " + + "jtb_fasi.descrizione AS descrizione_fase, " + + "mtb_colr.gestione, " + + "mtb_colr.data_collo, " + + "mtb_colr.num_collo, " + + "mtb_colr.cod_mart, " + + "mtb_colr.cod_col, " + + "mtb_colr.cod_tagl, " + + "SUM(mtb_colr.qta_col) AS qta_col, " + + "SUM(mtb_colr.num_cnf) AS num_cnf, " + + "mtb_colr.ser_collo, " + + "mtb_colr.partita_mag, " + + "mtb_colr.cod_jcom, " + + "mtb_colt.segno, " + + "ISNULL(mtb_aart.descrizione_estesa, mtb_aart.descrizione) AS descrizione_art, " + + "mtb_aart.unt_mis, " + + "MAX(datetime_row) AS datetime_row " + + "FROM mtb_colr " + + "INNER JOIN mtb_colt " + + "ON mtb_colr.num_collo = mtb_colt.num_collo " + + "AND mtb_colr.data_collo = mtb_colt.data_collo " + + "AND mtb_colr.ser_collo = mtb_colt.ser_collo " + + "AND mtb_colr.gestione = mtb_colt.gestione " + + "INNER JOIN mtb_aart " + + "ON mtb_colr.cod_mart = mtb_aart.cod_mart " + + "LEFT OUTER JOIN jtb_fasi ON mtb_colt.cod_jfas = jtb_fasi.cod_jfas " + + "WHERE jtb_fasi.cod_jfas IS NOT NULL " + + "AND segno = -1 " + + "GROUP BY jtb_fasi.cod_jfas, " + + "jtb_fasi.descrizione, " + + "mtb_colr.gestione, " + + "mtb_colr.data_collo, " + + "mtb_colr.num_collo, " + + "mtb_colr.cod_mart, " + + "mtb_colr.cod_col, " + + "mtb_colr.cod_tagl, " + + "mtb_colr.ser_collo, " + + "mtb_colr.partita_mag, " + + "mtb_colr.cod_jcom, " + + "mtb_aart.descrizione_estesa, " + + "mtb_aart.descrizione, " + + "mtb_aart.unt_mis, " + + "mtb_colt.segno " + + "ORDER BY data_collo DESC"; + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + onFailed.run(ex); + } + }); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/dto/HistoryVersamentoProdUL.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/dto/HistoryVersamentoProdUL.java new file mode 100644 index 00000000..2ed7327b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/dto/HistoryVersamentoProdUL.java @@ -0,0 +1,168 @@ +package it.integry.integrywmsnative.gest.prod_recupero_materiale.dto; + +import java.math.BigDecimal; + +public class HistoryVersamentoProdUL { + + + private String gestione; + private String dataCollo; + private Integer numCollo; + private String segno; + private String codMart; + private String codCol; + private String codTagl; + private String codJfas; + private String descrizioneFase; + private BigDecimal qtaCol; + private BigDecimal numCnf; + private String partitaMag; + private String codJcom; + private String datetimeRow; + private String descrizioneArt; + private String untMis; + + public String getGestione() { + return gestione; + } + + public HistoryVersamentoProdUL setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public String getDataCollo() { + return dataCollo; + } + + public HistoryVersamentoProdUL setDataCollo(String dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public HistoryVersamentoProdUL setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public String getSegno() { + return segno; + } + + public HistoryVersamentoProdUL setSegno(String segno) { + this.segno = segno; + return this; + } + + public String getCodMart() { + return codMart; + } + + public HistoryVersamentoProdUL setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getCodCol() { + return codCol; + } + + public HistoryVersamentoProdUL setCodCol(String codCol) { + this.codCol = codCol; + return this; + } + + public String getCodTagl() { + return codTagl; + } + + public HistoryVersamentoProdUL setCodTagl(String codTagl) { + this.codTagl = codTagl; + return this; + } + + public String getCodJfas() { + return codJfas; + } + + public HistoryVersamentoProdUL setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public String getDescrizioneFase() { + return descrizioneFase; + } + + public HistoryVersamentoProdUL setDescrizioneFase(String descrizioneFase) { + this.descrizioneFase = descrizioneFase; + return this; + } + + public BigDecimal getQtaCol() { + return qtaCol; + } + + public HistoryVersamentoProdUL setQtaCol(BigDecimal qtaCol) { + this.qtaCol = qtaCol; + return this; + } + + public BigDecimal getNumCnf() { + return numCnf; + } + + public HistoryVersamentoProdUL setNumCnf(BigDecimal numCnf) { + this.numCnf = numCnf; + return this; + } + + public String getPartitaMag() { + return partitaMag; + } + + public HistoryVersamentoProdUL setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + public String getCodJcom() { + return codJcom; + } + + public HistoryVersamentoProdUL setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public String getDatetimeRow() { + return datetimeRow; + } + + public HistoryVersamentoProdUL setDatetimeRow(String datetimeRow) { + this.datetimeRow = datetimeRow; + return this; + } + + public String getDescrizioneArt() { + return descrizioneArt; + } + + public HistoryVersamentoProdUL setDescrizioneArt(String descrizioneArt) { + this.descrizioneArt = descrizioneArt; + return this; + } + + public String getUntMis() { + return untMis; + } + + public HistoryVersamentoProdUL setUntMis(String untMis) { + this.untMis = untMis; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java index 71dcde70..e8127549 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/viewmodel/ProdRecuperoMaterialeViewModel.java @@ -1,23 +1,30 @@ package it.integry.integrywmsnative.gest.prod_recupero_materiale.viewmodel; import android.app.Activity; +import android.app.ProgressDialog; import android.content.Context; import android.text.Html; import android.text.SpannableString; import androidx.databinding.ObservableField; +import androidx.recyclerview.widget.LinearLayoutManager; import java.math.BigDecimal; +import java.util.List; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityPosizione; +import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.databinding.FragmentProdRecuperoMaterialeBinding; +import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.HistoryULsListAdapter; import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.ProdRecuperoMaterialeHelper; +import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdUL; import it.integry.integrywmsnative.gest.prod_recupero_materiale.views.InputQuantityToReturnDialog; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; @@ -30,6 +37,9 @@ public class ProdRecuperoMaterialeViewModel { private ProdRecuperoMaterialeHelper mHelper; private Runnable mOnRecuperoCompleted; + + private HistoryULsListAdapter mAdapter; + public ObservableField mtbColt = new ObservableField<>(); @@ -39,7 +49,15 @@ public class ProdRecuperoMaterialeViewModel { mHelper = helper; mOnRecuperoCompleted = onRecuperoCompleted; - BarcodeManager.enable(); + ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + + mHelper.loadLastULVersate(historyULs -> { + progressDialog.dismiss(); + initRecyclerView(historyULs); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); } public void openLU() { @@ -103,4 +121,13 @@ public class ProdRecuperoMaterialeViewModel { } + + + private void initRecyclerView(List historyULs) { + mAdapter = new HistoryULsListAdapter(mContext, historyULs); + + mBinding.prodRecuperoMaterialeMainList.setLayoutManager(new LinearLayoutManager(mContext)); + mBinding.prodRecuperoMaterialeMainList.setAdapter(mAdapter); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java index 76cfa36f..1e7138ce 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/viewmodel/ProdVersamentoMaterialViewModel.java @@ -77,7 +77,7 @@ public class ProdVersamentoMaterialViewModel { ((IPoppableActivity)mContext).pop(); } else { - if (mtbDepoPosizione != null && mtbColt.get() != null) { + if (mtbDepoPosizione != null && mtbDepoPosizione.isFlagLineaProduzione() && mtbColt.get() != null) { createColloScarico(mtbDepoPosizione); } else { DialogSimpleMessageHelper.makeWarningDialog(mContext, @@ -98,6 +98,7 @@ public class ProdVersamentoMaterialViewModel { MtbColt cloneUL = ((MtbColt) mtbColt.get().clone()); cloneUL.setCodJfas(mtbDepoPosizione.getPosizione()); + cloneUL.setSerCollo(null); ColliMagazzinoRESTConsumer.createColloScaricoDaCarico(cloneUL, mtbDepoPosizione, generatedMtbColt -> { showDataSavedDialog(() -> { 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 index 0558da74..ce689be6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java @@ -111,7 +111,6 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_vendita, container, false); - mBinding.setView(this); mBinding.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity())); mBinding.venditaMainFab.hide(); @@ -128,18 +127,6 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS super.onCreateOptionsMenu(menu, inflater); } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - -// if(item.getItemId() == R.id.action_free_picking) { -// Intent myIntent = new Intent(getActivity(), PickingLiberoActivity.class); -// startActivity(myIntent); -// } - - return true; - - } - private void init(){ @@ -184,93 +171,11 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS public void refreshOrdini(List ordini){ - mRenderedOrderList.clear(); mRenderedOrderList.addAll(ordini); - - - -// -// //Splitto gli ordini per codAnagOrd (Cliente) -// Stream.of(ordini) -// .distinctBy(OrdineVenditaInevasoDTO::getCodAnagOrd) -// .sortBy(OrdineVenditaInevasoDTO::getRagSocOrd) -// .map(x -> x.getCodAnagOrd() + "#_#" + x.getRagSocOrd()) -// .forEach(anagOrd -> { -// -// String codAnagOrd = anagOrd.substring(0, anagOrd.indexOf("#_#")); -// String ragSocOrd = anagOrd.substring(anagOrd.indexOf("#_#") + 3); -// -// 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.getCodAnagOrd().equalsIgnoreCase(codAnagOrd)) -// .distinctBy(x -> x.getDataOrdS() + " - " + x.getDataConsS() + " - " + x.getNumOrd()) -// .sortBy(x -> x.getDataConsD() != null ? x.getDataConsD() : new Date(2000, 01, 01)) -// .forEach(ord -> { -// -// -// OrdineVenditaGroupedInevasoDTO.Ordine rigaOrdine = new OrdineVenditaGroupedInevasoDTO.Ordine(); -// -// rigaOrdine -// .setData(ord.getDataOrdS()) -// .setNumero(ord.getNumOrd()) -// .setCodMdep(ord.getCodMdep()) -// .setCodAnagOrd(ord.getCodAnagOrd()) -// .setCodAnagClie(groupedOrdine.codAnagClie) -// .setRagSocOrd(ord.getRagSocOrd()) -// .setPesoTotale(ord.getPesoTotale() != null ? ord.getPesoTotale().floatValue() : null) -// .setBarcode(ord.getBarcode()) -// .setTermCons(ord.getTermCons()) -// .setDataCons(ord.getDataConsS()) -// .setRifOrd(ord.getRifOrd()) -// .setGestione(ord.getGestione()) -// .setExistCollo(ord.flagExistCollo()); -// -// rigaOrdine.clienti = new ArrayList<>(); -// -// -// //Leggo tutti i clienti dell'ordine corrente -// Stream.of(ordini) -// .filter(x -> x.getCodAnagOrd().equalsIgnoreCase(codAnagOrd) && -// x.getNumOrd().equals(ord.getNumOrd()) && -// x.getDataOrdS().equalsIgnoreCase(ord.getDataOrdS()) && -// x.getDataConsS().equalsIgnoreCase(ord.getDataConsS())) -// .distinctBy(OrdineVenditaInevasoDTO::getCodJcom) -// .forEach(ordCliente -> { -// -// OrdineVenditaGroupedInevasoDTO.Cliente cliente = new OrdineVenditaGroupedInevasoDTO.Cliente(); -// -// cliente.codJcom = ordCliente.getCodJcom(); -// cliente.ragSocCom = ordCliente.getRagSocCom(); -// cliente.descrCom = ordCliente.getDescrizioneCom(); -// cliente.dataCons = ordCliente.getDataConsS(); -// cliente.numCnf = ordCliente.getNumCnfdaEvadere() != null ? ordCliente.getNumCnfdaEvadere().floatValue() : 0; -// cliente.rifOrd = ordCliente.getRifOrd(); -// -// rigaOrdine.clienti.add(cliente); -// -// }); -// -// groupedOrdine.ordini.add(rigaOrdine); -// -// -// }); -// -// mRenderedOrderList.add(groupedOrdine); -// -// }); - } private void initRecyclerView() { -// mAdapter = new MainListVenditaAdapter(getActivity(), mRenderedOrderList, onGroupSelectionChanged, onSingleSelectionChanged); mAdapter = new MainListVenditaAdapter(getActivity(), mRenderedOrderList, onSingleSelectionChanged); mBinding.venditaMainList.setAdapter(mAdapter); } @@ -283,24 +188,13 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS List selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); if(!SettingsManager.iDB().isFlagMultiClienteOrdV()){ - boolean allMatch = Stream.of(selectedOrders).allMatch(x -> dto.getCodAnagOrd().equalsIgnoreCase(x.getCodAnagOrd())); - - if(!allMatch) { + if(dto.isSelected()) { Stream.of(selectedOrders) - .filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(x.getCodAnagOrd())) + .filter(x -> !x.getCodAnagOrd().equalsIgnoreCase(dto.getCodAnagOrd())) .forEach(x -> x.setSelected(false)); } - -// -// if(selectedOrders != null && selectedOrders.size() > 1){ -// for (OrdineVenditaInevasoDTO selectedOrder : selectedOrders) { -// if(!dto.getCodAnagOrd().equalsIgnoreCase(selectedOrder.getCodAnagOrd())) { -// Stream.of(selectedOrder.ordini).forEach(x -> x.setCheckbox(false)); -// } -// } -// } } -// + if(selectedOrders != null && selectedOrders.size() > 0) { mBinding.venditaMainFab.show(); } @@ -310,7 +204,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS }; - public void onVenditaMainFabClick() { + private void onVenditaMainFabClick() { List selectedOrders = mHelper.getSelectedOrders(mOriginalOrderList); List barcodes = new ArrayList<>(); @@ -430,28 +324,46 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS .toList(); if (foundGestioni != null && foundGestioni.size() > 1) { - DialogSimpleMessageHelper.makeErrorDialog(getContext(), new SpannableString(getString(R.string.error_multiple_gest)), null, () -> { - onFailed.run(); - }).show(); + DialogSimpleMessageHelper.makeErrorDialog(getContext(), new SpannableString(getString(R.string.error_multiple_gest)), null, onFailed::run).show(); return; } //Definizione del deposito di default List foundCodMdep = Stream.of(selectedOrders) .map(OrdineVenditaInevasoDTO::getCodMdep) - .withoutNulls() +// .withoutNulls() .distinctBy(x -> x) .toList(); if (foundCodMdep != null && foundCodMdep.size() > 1) { - DialogSimpleMessageHelper.makeErrorDialog(getContext(), new SpannableString(getString(R.string.error_multiple_cod_mdep_ordv)), null, () -> { - onFailed.run(); - }).show(); + DialogSimpleMessageHelper.makeErrorDialog(getContext(), new SpannableString(getString(R.string.error_multiple_cod_mdep_ordv)), null, onFailed::run).show(); return; } - } - onComplete.run(); + + //NON-BLOCKING CHECKS + + //Definizione del codJfas di default + List foundCodJfas = Stream.of(selectedOrders) + .map(OrdineVenditaInevasoDTO::getCodJfas) +// .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if (foundCodJfas != null && foundCodJfas.size() > 1) { + DialogSimpleMessageHelper.makeWarningDialog(getContext(), new SpannableString(getString(R.string.error_multiple_cod_jfas_ordp)), null, () -> { + + + onComplete.run(); + + + }).show(); + } else { + onComplete.run(); + } + } else { + onComplete.run(); + } } private void startVenditaActivity(List ordini, List selectedOrders, List mtbColtList) { 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 index 4e17a907..573b4b59 100644 --- 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 @@ -101,10 +101,6 @@ public class MainListVenditaAdapter extends SectionedRecyclerViewAdapter x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())) .anyMatch(OrdineVenditaInevasoDTO::isSelected); - List ordersToSelect = - Stream.of(mDataset) - .filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())).toList(); - Stream.of(mDataset) .filter(x -> x.getCodAnagOrd().equals(mDataset.get(nextItemPosition).getCodAnagOrd())) .forEach(x -> x.setSelected(!anySelected)); @@ -178,77 +174,4 @@ public class MainListVenditaAdapter extends SectionedRecyclerViewAdapter currentFilteredOrderList; private ArrayAdapter arrayAdapterCodMdep; + private ArrayAdapter arrayAdapterIdViaggio; private ArrayAdapter arrayAdapterNumOrds; private ArrayAdapter arrayAdapterCliente; private ArrayAdapter arrayAdapterTermCons; private ArrayAdapter arrayAdapterVettore; + private ArrayAdapter arrayAdapterAgente; private ArrayAdapter arrayAdapterAutomezzo; private Predicate currentDepositoPredicate = null; + private Predicate currentIdViaggioPredicate = null; private Predicate currentNumOrdsPredicate = null; private Predicate currentClientePredicate = null; private Predicate currentDataConsPredicate = null; private Predicate currentTermConsPredicate = null; private Predicate currentVettorePredicate = null; + private Predicate currentAgentePredicate = null; private Predicate currentAutomezzoPredicate = null; private boolean firstInit = true; @@ -78,30 +85,29 @@ public class DialogVenditaFiltroAvanzato { LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); - DialogVenditaFiltroAvanzatoBinding contentView = DataBindingUtil.inflate(inflater, R.layout.dialog_vendita_filtro_avanzato, null, false); + DialogVenditaFiltroAvanzatoBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_vendita_filtro_avanzato, null, false); final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) - .setView(contentView.getRoot()) - .setPositiveButton(context.getText(R.string.confirm), null) - .setNegativeButton(context.getText(R.string.abort), null) - .setNeutralButton(context.getText(R.string.reset), null); + .setView(binding.getRoot()); - contentView.setViewmodel(viewModel); - // initViewModel(viewModel, contentView); - initViewModelNew(viewModel, contentView); - initView(contentView, viewModel); + binding.setViewmodel(viewModel); + initViewModelNew(viewModel, binding); + initView(binding, viewModel); currentAlert = alertDialog.create(); currentAlert.setCanceledOnTouchOutside(false); + currentAlert.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + currentAlert.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - currentAlert.setOnShowListener(dialogInterface -> { - Button button = ((AlertDialog) dialogInterface).getButton(AlertDialog.BUTTON_NEUTRAL); - button.setOnClickListener(view -> { - resetAll(viewModel); - }); + binding.positiveBtn.setOnClickListener(view -> { + currentAlert.dismiss(); + }); + + binding.neutralBtn.setOnClickListener(view -> { + resetAll(viewModel); }); @@ -114,12 +120,14 @@ public class DialogVenditaFiltroAvanzato { private void resetAll(DialogVenditaFiltroAvanzatoViewModel viewModel) { viewModel.deposito.set(null); + viewModel.idViaggio.set(null); viewModel.numOrds.set(null); viewModel.cliente.set(null); viewModel.dataConsegna.set(null); viewModel.terminiConsegna.set(null); viewModel.vettore.set(null); viewModel.automezzo.set(null); + viewModel.agente.set(null); } private void initView(DialogVenditaFiltroAvanzatoBinding bindings, DialogVenditaFiltroAvanzatoViewModel viewModel) { @@ -152,6 +160,16 @@ public class DialogVenditaFiltroAvanzato { bindings.inputCodMdepNew.setVisibility(filtroOrdiniVendita.shoudShowCodMdepFilter() ? View.VISIBLE : View.GONE); bindings.filledExposedDropdownCodMdep.setAdapter(arrayAdapterCodMdep); + arrayAdapterIdViaggio = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(false)); + bindings.inputIdViaggio.setVisibility(filtroOrdiniVendita.shoudShowIdViaggioFilter() ? View.VISIBLE : View.GONE); + bindings.filledExposedDropdownIdViaggio.setAdapter(arrayAdapterIdViaggio); + + arrayAdapterAgente = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); + arrayAdapterAgente.addAll(getAvailableAgente(false)); + bindings.inputAgente.setVisibility(filtroOrdiniVendita.shoudShowAgenteFilter() ? View.VISIBLE : View.GONE); + bindings.filledExposedDropdownAgente.setAdapter(arrayAdapterAgente); + arrayAdapterNumOrds = new ArrayAdapter(currentContext, R.layout.dialog_vendita_filtro_avanzato__single_item); arrayAdapterNumOrds.addAll(getAvailableNumOrds(false)); bindings.filledExposedDropdownNumOrds.setAdapter(arrayAdapterNumOrds); @@ -175,24 +193,38 @@ public class DialogVenditaFiltroAvanzato { viewModel.deposito.refresh(); + viewModel.idViaggio.refresh(); viewModel.numOrds.refresh(); viewModel.cliente.refresh(); viewModel.terminiConsegna.refresh(); viewModel.vettore.refresh(); viewModel.automezzo.refresh(); viewModel.dataConsegna.refresh(); + viewModel.agente.refresh(); } private void initViewModelNew(DialogVenditaFiltroAvanzatoViewModel viewModel, DialogVenditaFiltroAvanzatoBinding bindings) { - BindableString.registerListener(viewModel.deposito, value -> { - if(UtilityString.isNullOrEmpty(value)) currentDepositoPredicate = null; + BindableString.registerListener(viewModel.idViaggio, value -> { + if(UtilityString.isNullOrEmpty(value)) currentIdViaggioPredicate = null; else { - currentDepositoPredicate = o -> o.getCodMdep().toLowerCase().equalsIgnoreCase(value); + String[] idViaggiSplitted = value.split("[,\\ ]"); + + try{ + List idViaggiInteger = Stream.of(idViaggiSplitted) + .filter(x -> !UtilityString.isNullOrEmpty(x)) + .map(Integer::parseInt).toList(); + + currentIdViaggioPredicate = o -> idViaggiInteger.contains(o.getIdViaggio()); + } catch (NumberFormatException ex) { + currentNumOrdsPredicate = null; + } } refreshList(); + arrayAdapterCodMdep.clear(); + arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); arrayAdapterNumOrds.clear(); arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); arrayAdapterCliente.clear(); @@ -203,6 +235,32 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterVettore.addAll(getAvailableVettori(true)); arrayAdapterAutomezzo.clear(); arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); + arrayAdapterAgente.clear(); + arrayAdapterAgente.addAll(getAvailableAgente(true)); + }); + + BindableString.registerListener(viewModel.deposito, value -> { + if(UtilityString.isNullOrEmpty(value)) currentDepositoPredicate = null; + else { + currentDepositoPredicate = o -> o.getCodMdep().toLowerCase().equalsIgnoreCase(value); + } + + refreshList(); + + arrayAdapterNumOrds.clear(); + arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); + arrayAdapterIdViaggio.clear(); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); + arrayAdapterCliente.clear(); + arrayAdapterCliente.addAll(getAvailableCliente(true)); + arrayAdapterTermCons.clear(); + arrayAdapterTermCons.addAll(getAvailableTermCons(true)); + arrayAdapterVettore.clear(); + arrayAdapterVettore.addAll(getAvailableVettori(true)); + arrayAdapterAutomezzo.clear(); + arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); + arrayAdapterAgente.clear(); + arrayAdapterAgente.addAll(getAvailableAgente(true)); }); BindableString.registerListener(viewModel.numOrds, value -> { @@ -225,6 +283,8 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterCodMdep.clear(); arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); + arrayAdapterIdViaggio.clear(); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); arrayAdapterCliente.clear(); arrayAdapterCliente.addAll(getAvailableCliente(true)); arrayAdapterTermCons.clear(); @@ -233,6 +293,8 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterVettore.addAll(getAvailableVettori(true)); arrayAdapterAutomezzo.clear(); arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); + arrayAdapterAgente.clear(); + arrayAdapterAgente.addAll(getAvailableAgente(true)); }); BindableString.registerListener(viewModel.cliente, value -> { @@ -245,6 +307,8 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterCodMdep.clear(); arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); + arrayAdapterIdViaggio.clear(); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); arrayAdapterNumOrds.clear(); arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); arrayAdapterTermCons.clear(); @@ -253,6 +317,8 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterVettore.addAll(getAvailableVettori(true)); arrayAdapterAutomezzo.clear(); arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); + arrayAdapterAgente.clear(); + arrayAdapterAgente.addAll(getAvailableAgente(true)); }); BindableString.registerListener(viewModel.terminiConsegna, value -> { @@ -265,6 +331,8 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterCodMdep.clear(); arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); + arrayAdapterIdViaggio.clear(); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); arrayAdapterNumOrds.clear(); arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); arrayAdapterCliente.clear(); @@ -273,6 +341,8 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterVettore.addAll(getAvailableVettori(true)); arrayAdapterAutomezzo.clear(); arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); + arrayAdapterAgente.clear(); + arrayAdapterAgente.addAll(getAvailableAgente(true)); }); BindableString.registerListener(viewModel.vettore, value -> { @@ -285,6 +355,8 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterCodMdep.clear(); arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); + arrayAdapterIdViaggio.clear(); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); arrayAdapterNumOrds.clear(); arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); arrayAdapterCliente.clear(); @@ -293,18 +365,22 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterTermCons.addAll(getAvailableTermCons(true)); arrayAdapterAutomezzo.clear(); arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); + arrayAdapterAgente.clear(); + arrayAdapterAgente.addAll(getAvailableAgente(true)); }); BindableString.registerListener(viewModel.automezzo, value -> { if(UtilityString.isNullOrEmpty(value)) currentAutomezzoPredicate = null; else { - currentAutomezzoPredicate = o -> !UtilityString.isNullOrEmpty(o.getDescrizioneAuto()) && o.getDescrizioneAuto().toLowerCase().contains(value); + currentAutomezzoPredicate = o -> !UtilityString.isNullOrEmpty(o.getDescrizioneAuto()) && (o.getDescrizioneAuto().toLowerCase().contains(value) || o.getDescrizioneAuto().equalsIgnoreCase(value)); } refreshList(); arrayAdapterCodMdep.clear(); arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); + arrayAdapterIdViaggio.clear(); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); arrayAdapterNumOrds.clear(); arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); arrayAdapterCliente.clear(); @@ -313,6 +389,8 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterTermCons.addAll(getAvailableTermCons(true)); arrayAdapterVettore.clear(); arrayAdapterVettore.addAll(getAvailableVettori(true)); + arrayAdapterAgente.clear(); + arrayAdapterAgente.addAll(getAvailableAgente(true)); }); BindableString.resetListeners(viewModel.dataConsegna); @@ -326,6 +404,8 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterCodMdep.clear(); arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); + arrayAdapterIdViaggio.clear(); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); arrayAdapterNumOrds.clear(); arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); arrayAdapterCliente.clear(); @@ -334,138 +414,106 @@ public class DialogVenditaFiltroAvanzato { arrayAdapterTermCons.addAll(getAvailableTermCons(true)); arrayAdapterVettore.clear(); arrayAdapterVettore.addAll(getAvailableVettori(true)); + arrayAdapterAutomezzo.clear(); + arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); + arrayAdapterAgente.clear(); + arrayAdapterAgente.addAll(getAvailableAgente(true)); + }); + + BindableString.resetListeners(viewModel.agente); + BindableString.registerListener(viewModel.agente, value -> { + if(UtilityString.isNullOrEmpty(value)) currentAgentePredicate = null; + else { + currentAgentePredicate = o -> !UtilityString.isNullOrEmpty(o.getNomeAgente()) && (o.getNomeAgente().toLowerCase().contains(value) || o.getNomeAgente().equalsIgnoreCase(value)); + } + + refreshList(); + + arrayAdapterCodMdep.clear(); + arrayAdapterCodMdep.addAll(getAvailableCodMdeps(true)); + arrayAdapterIdViaggio.clear(); + arrayAdapterIdViaggio.addAll(getAvailableIdViaggio(true)); + arrayAdapterNumOrds.clear(); + arrayAdapterNumOrds.addAll(getAvailableNumOrds(true)); + arrayAdapterCliente.clear(); + arrayAdapterCliente.addAll(getAvailableCliente(true)); + arrayAdapterTermCons.clear(); + arrayAdapterTermCons.addAll(getAvailableTermCons(true)); + arrayAdapterVettore.clear(); + arrayAdapterVettore.addAll(getAvailableVettori(true)); + arrayAdapterAutomezzo.clear(); + arrayAdapterAutomezzo.addAll(getAvailableAutomezzi(true)); }); } - private void initViewModel(DialogVenditaFiltroAvanzatoViewModel viewModel, DialogVenditaFiltroAvanzatoBinding bindings) { - firstInit = true; - - BindableString.resetListeners(viewModel.numOrds); - BindableString.registerListener(viewModel.numOrds, value -> { - if(UtilityString.isNullOrEmpty(value)) currentNumOrdsPredicate = null; - else { - String[] numOrdsSplitted = value.split("[,\\ ]"); - - try{ - List numOrdsInteger = Stream.of(numOrdsSplitted) - .filter(x -> !UtilityString.isNullOrEmpty(x)) - .map(Integer::parseInt).toList(); - - currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumOrd()); - -// mBindings.inputNumOrds.setErrorEnabled(false); -// mBindings.inputNumOrds.setError(""); - } catch (NumberFormatException ex) { - currentNumOrdsPredicate = null; - -// mBindings.inputNumOrds.setErrorEnabled(true); -// mBindings.inputNumOrds.setError(currentContext.getResources().getString(R.string.error)); - } - - } - - if(!firstInit) refreshList(); - }); - viewModel.numOrds.refresh(); - - - BindableString.resetListeners(viewModel.cliente); - BindableString.registerListener(viewModel.cliente, value -> { - if(UtilityString.isNullOrEmpty(value)) currentClientePredicate = null; - else { - currentClientePredicate = o -> o.getRagSocOrd().toLowerCase().contains(value); - } - - if(!firstInit) refreshList(); - }); - viewModel.cliente.refresh(); - - - BindableString.resetListeners(viewModel.deposito); - BindableString.registerListener(viewModel.deposito, value -> { - if(UtilityString.isNullOrEmpty(value)) currentDepositoPredicate = null; - else { - currentDepositoPredicate = o -> o.getCodMdep().toLowerCase().contains(value); - } - - if(!firstInit) refreshList(); - }); - viewModel.deposito.refresh(); - - - - - BindableString.resetListeners(viewModel.dataConsegna); - BindableString.registerListener(viewModel.dataConsegna, value -> { - if(UtilityString.isNullOrEmpty(value)) currentDataConsPredicate = null; - else { - currentDataConsPredicate = o -> o.getDataConsD().equals(viewModel.dataConsegnaDate); - } - - if(!firstInit) refreshList(); - }); - viewModel.dataConsegna.refresh(); - - - - - BindableString.resetListeners(viewModel.terminiConsegna); - BindableString.registerListener(viewModel.terminiConsegna, value -> { - if(UtilityString.isNullOrEmpty(value)) currentTermConsPredicate = null; - else { - currentTermConsPredicate = o -> o.getTermCons() != null && o.getTermCons().equalsIgnoreCase(value); - } - - if(!firstInit) refreshList(); - }); - viewModel.terminiConsegna.refresh(); - - - BindableString.resetListeners(viewModel.vettore); - BindableString.registerListener(viewModel.vettore, value -> { - if(UtilityString.isNullOrEmpty(value)) currentVettorePredicate = null; - else { - currentVettorePredicate = o -> (o.getCodVvet() + " - " + o.getDescrizioneVettore()).equalsIgnoreCase(value); - } - - if(!firstInit) refreshList(); - }); - viewModel.vettore.refresh(); - - - - BindableString.resetListeners(viewModel.automezzo); - BindableString.registerListener(viewModel.automezzo, value -> { - if(UtilityString.isNullOrEmpty(value)) currentAutomezzoPredicate = null; - else { - currentAutomezzoPredicate = o -> o.getDescrizioneAuto().toLowerCase().contains(value); - } - - if(!firstInit) refreshList(); - }); - viewModel.automezzo.refresh(); - - if(firstInit) refreshList(); - firstInit = false; - - - } - - private List getAvailableCodMdeps(boolean skipRecalc) { - if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentTermConsPredicate == null){ + private List getAvailableIdViaggio(boolean skipRecalc) { + if(currentAgentePredicate == null && currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentTermConsPredicate == null && currentDepositoPredicate == null){ currentFilteredOrderList = currentOrderList; } else if(!skipRecalc){ Stream tmpStream = Stream.of(currentOrderList) .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && + (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) + ); + + currentFilteredOrderList = tmpStream.toList(); + } + + return Stream + .of(currentFilteredOrderList) + .map(x -> x.getIdViaggio() != null ? x.getIdViaggio().toString() : null) + .withoutNulls() + .distinct() + .sortBy(x -> x) + .toList(); + } + + private List getAvailableAgente(boolean skipRecalc) { + if(currentDepositoPredicate == null && currentIdViaggioPredicate == null && currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentTermConsPredicate == null){ + currentFilteredOrderList = currentOrderList; + } else if(!skipRecalc){ + Stream tmpStream = Stream.of(currentOrderList) + .filter(x -> + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && + (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && + (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) + ); + + currentFilteredOrderList = tmpStream.toList(); + } + + return Stream.of(currentFilteredOrderList).map(OrdineVenditaInevasoDTO::getNomeAgente).distinct().withoutNulls().toList(); + } + + private List getAvailableCodMdeps(boolean skipRecalc) { + if(currentAgentePredicate == null && currentIdViaggioPredicate == null && currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentTermConsPredicate == null){ + currentFilteredOrderList = currentOrderList; + } else if(!skipRecalc){ + Stream tmpStream = Stream.of(currentOrderList) + .filter(x -> + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && + (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) ); currentFilteredOrderList = tmpStream.toList(); @@ -475,17 +523,19 @@ public class DialogVenditaFiltroAvanzato { } private List getAvailableCliente(boolean skipRecalc) { - if(currentNumOrdsPredicate == null && currentDepositoPredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentTermConsPredicate == null){ + if(currentAgentePredicate == null && currentIdViaggioPredicate == null && currentNumOrdsPredicate == null && currentDepositoPredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentTermConsPredicate == null){ currentFilteredOrderList = currentOrderList; } else if(!skipRecalc){ Stream tmpStream = Stream.of(currentOrderList) .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && + (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) ); currentFilteredOrderList = tmpStream.toList(); @@ -495,17 +545,19 @@ public class DialogVenditaFiltroAvanzato { } private List getAvailableNumOrds(boolean skipRecalc) { - if(currentDepositoPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentTermConsPredicate == null){ + if(currentAgentePredicate == null && currentIdViaggioPredicate == null && currentDepositoPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentTermConsPredicate == null){ currentFilteredOrderList = currentOrderList; } else if(!skipRecalc){ Stream tmpStream = Stream.of(currentOrderList) .filter(x -> - (currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) + (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && + (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) ); currentFilteredOrderList = tmpStream.toList(); @@ -515,17 +567,19 @@ public class DialogVenditaFiltroAvanzato { } private List getAvailableTermCons(boolean skipRecalc) { - if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentDepositoPredicate == null){ + if(currentAgentePredicate == null && currentIdViaggioPredicate == null && currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentAutomezzoPredicate == null && currentVettorePredicate == null && currentDepositoPredicate == null){ currentFilteredOrderList = currentOrderList; } else if(!skipRecalc){ Stream tmpStream = Stream.of(currentOrderList) .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x))) + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && + (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && + (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) ); currentFilteredOrderList = tmpStream.toList(); @@ -535,17 +589,19 @@ public class DialogVenditaFiltroAvanzato { } private List getAvailableVettori(boolean skipRecalc) { - if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentAutomezzoPredicate == null && currentDepositoPredicate == null){ + if(currentAgentePredicate == null && currentIdViaggioPredicate == null && currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentAutomezzoPredicate == null && currentDepositoPredicate == null){ currentFilteredOrderList = currentOrderList; } else if(!skipRecalc){ Stream tmpStream = Stream.of(currentOrderList) .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate .test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x))) + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate .test(x))) && + (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && + (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) ); currentFilteredOrderList = tmpStream.toList(); @@ -555,17 +611,19 @@ public class DialogVenditaFiltroAvanzato { } private List getAvailableAutomezzi(boolean skipRecalc) { - if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentVettorePredicate == null && currentDepositoPredicate == null){ + if(currentAgentePredicate == null && currentIdViaggioPredicate == null && currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentVettorePredicate == null && currentDepositoPredicate == null){ currentFilteredOrderList = currentOrderList; } else if(!skipRecalc){ Stream tmpStream = Stream.of(currentOrderList) .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x))) + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && + (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && + (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && + (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) ); currentFilteredOrderList = tmpStream.toList(); @@ -576,18 +634,20 @@ public class DialogVenditaFiltroAvanzato { private void refreshList() { - if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentVettorePredicate == null && currentAutomezzoPredicate == null && currentDepositoPredicate == null){ + if(currentAgentePredicate == null && currentIdViaggioPredicate == null && currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null && currentVettorePredicate == null && currentAutomezzoPredicate == null && currentDepositoPredicate == null){ currentFilteredOrderList = currentOrderList; } else { Stream tmpStream = Stream.of(currentOrderList) .filter(x -> - (currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) && - (currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) && - (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && - (currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) && - (currentVettorePredicate == null || (currentVettorePredicate != null && currentVettorePredicate.test(x))) && - (currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) && - (currentDepositoPredicate == null || (currentDepositoPredicate != null && currentDepositoPredicate.test(x))) + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate.test(x))) && + (currentVettorePredicate == null || (currentVettorePredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate.test(x))) && + (currentDepositoPredicate == null || (currentDepositoPredicate.test(x))) && + (currentIdViaggioPredicate == null || (currentIdViaggioPredicate.test(x))) && + (currentAgentePredicate == null || (currentAgentePredicate.test(x))) ); currentFilteredOrderList = tmpStream.toList(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzatoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzatoViewModel.java index ef0104b1..42644ed8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzatoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzatoViewModel.java @@ -7,10 +7,12 @@ import it.integry.integrywmsnative.core.di.BindableString; public class DialogVenditaFiltroAvanzatoViewModel { public BindableString deposito = new BindableString(); + public BindableString idViaggio = new BindableString(); public BindableString numOrds = new BindableString(); public BindableString cliente = new BindableString(); public BindableString dataConsegna = new BindableString(); public BindableString terminiConsegna = new BindableString(); + public BindableString agente = new BindableString(); public BindableString vettore = new BindableString(); public BindableString automezzo = new BindableString(); 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 index 59e6bfc1..e7482603 100644 --- 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 @@ -16,6 +16,7 @@ public class OrdineVenditaInevasoDTO implements Parcelable { private String data; private Integer numero; + private Integer idViaggio; private String gestione; private String listino; private String termCons; @@ -48,6 +49,8 @@ public class OrdineVenditaInevasoDTO implements Parcelable { private String ragSocOrdV; private int colliRiservati; private String existCollo; + private String nomeAgente; + private String codJfas; public BindableBoolean selected; @@ -63,6 +66,11 @@ public class OrdineVenditaInevasoDTO implements Parcelable { } else { numero = in.readInt(); } + if (in.readByte() == 0) { + idViaggio = null; + } else { + idViaggio = in.readInt(); + } gestione = in.readString(); listino = in.readString(); termCons = in.readString(); @@ -99,6 +107,8 @@ public class OrdineVenditaInevasoDTO implements Parcelable { ragSocOrdV = in.readString(); colliRiservati = in.readInt(); existCollo = in.readString(); + nomeAgente = in.readString(); + codJfas = in.readString(); selected = new BindableBoolean(in.readByte() == 0x01); } @@ -112,6 +122,12 @@ public class OrdineVenditaInevasoDTO implements Parcelable { dest.writeByte((byte) 1); dest.writeInt(numero); } + if (idViaggio == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(idViaggio); + } dest.writeString(gestione); dest.writeString(listino); dest.writeString(termCons); @@ -150,6 +166,8 @@ public class OrdineVenditaInevasoDTO implements Parcelable { dest.writeString(ragSocOrdV); dest.writeInt(colliRiservati); dest.writeString(existCollo); + dest.writeString(nomeAgente); + dest.writeString(codJfas); dest.writeByte(selected.get() ? (byte) 1 : (byte) 0); } @@ -199,6 +217,15 @@ public class OrdineVenditaInevasoDTO implements Parcelable { return this; } + public Integer getIdViaggio() { + return idViaggio; + } + + public OrdineVenditaInevasoDTO setIdViaggio(Integer idViaggio) { + this.idViaggio = idViaggio; + return this; + } + public String getGestione() { return gestione; } @@ -511,6 +538,24 @@ public class OrdineVenditaInevasoDTO implements Parcelable { return this; } + public String getNomeAgente() { + return nomeAgente; + } + + public OrdineVenditaInevasoDTO setNomeAgente(String nomeAgente) { + this.nomeAgente = nomeAgente; + return this; + } + + public String getCodJfas() { + return codJfas; + } + + public OrdineVenditaInevasoDTO setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + public boolean isSelected() { return selected.get(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java index eaacf823..35609717 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java @@ -40,6 +40,8 @@ public class PickingObjectDTO implements Parcelable { private BigDecimal numCnf; private String codAlis; private BigDecimal colliPedana; + private BigDecimal qtaColloDisponibile; + private BigDecimal numCnfColloDisponibile; private MtbAart mtbAart; @@ -97,6 +99,16 @@ public class PickingObjectDTO implements Parcelable { } else { numCnfCollo = new BigDecimal(in.readFloat()); } + if (in.readByte() == 0) { + qtaColloDisponibile = null; + } else { + qtaColloDisponibile = new BigDecimal(in.readFloat()); + } + if (in.readByte() == 0) { + numCnfColloDisponibile = null; + } else { + numCnfColloDisponibile = new BigDecimal(in.readFloat()); + } mtbAart = (MtbAart) in.readValue(MtbAart.class.getClassLoader()); @@ -166,6 +178,18 @@ public class PickingObjectDTO implements Parcelable { dest.writeByte((byte) (0x01)); dest.writeFloat(numCnfCollo.floatValue()); } + if (qtaColloDisponibile == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(qtaColloDisponibile.floatValue()); + } + if (numCnfColloDisponibile == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(numCnfColloDisponibile.floatValue()); + } dest.writeValue(mtbAart); } @@ -251,7 +275,7 @@ public class PickingObjectDTO implements Parcelable { } public BigDecimal getQtaCollo() { - return qtaCollo; + return qtaCollo != null ? qtaCollo : BigDecimal.ZERO; } public PickingObjectDTO setQtaCollo(BigDecimal qtaCollo) { @@ -351,7 +375,7 @@ public class PickingObjectDTO implements Parcelable { } public BigDecimal getQtaOrd() { - return qtaOrd; + return qtaOrd != null ? qtaOrd : BigDecimal.ZERO; } public PickingObjectDTO setQtaOrd(BigDecimal qtaOrd) { @@ -395,6 +419,24 @@ public class PickingObjectDTO implements Parcelable { return this; } + public BigDecimal getQtaColloDisponibile() { + return qtaColloDisponibile; + } + + public PickingObjectDTO setQtaColloDisponibile(BigDecimal qtaColloDisponibile) { + this.qtaColloDisponibile = qtaColloDisponibile; + return this; + } + + public BigDecimal getNumCnfColloDisponibile() { + return numCnfColloDisponibile; + } + + public PickingObjectDTO setNumCnfColloDisponibile(BigDecimal numCnfColloDisponibile) { + this.numCnfColloDisponibile = numCnfColloDisponibile; + return this; + } + public MtbAart getMtbAart() { return mtbAart; } 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 index d96a7a80..d5ff84c6 100644 --- 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 @@ -15,6 +15,9 @@ public interface OrdiniVenditaRESTConsumerService { @GET("SM2GetOrdiniVenditaInevasi") Call>> listOrdiniInevasi(@Query("codMdep") String codMdep); + @GET("SM2GetOrdiniVenditaInevasi") + Call>> listOrdiniInevasi(@Query("codMdep") String codMdep, @Query("gestione") String gestione); + @GET("getPickingListFromOrdini") Call>> getPickingList(@Query("codMdep") String codMdep, @Query("dataCons") String dataCons, @Query("chiaviOrdini") String codBarreBacale); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java index f2f93dd4..d8997675 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java @@ -94,6 +94,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO private String defaultRifOrdOfUL = null; private Integer defaultNumOrdOfUL = null; private Date defaultDataOrdOfUL = null; + private String defaultCodJFasOfUL = null; private Integer mtbColtSessionID = null; @@ -179,7 +180,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO //Definizione del deposito di default List foundCodMdep = Stream.of(mTestateOrdini) .map(OrdineVenditaInevasoDTO::getCodMdep) - .withoutNulls() +// .withoutNulls() .distinctBy(x -> x) .toList(); @@ -211,7 +212,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO //Definizione del codAnag List foundCodAnag = Stream.of(mTestateOrdini) .map(OrdineVenditaInevasoDTO::getCodAnagOrd) - .withoutNulls() +// .withoutNulls() .distinctBy(x -> x) .toList(); @@ -223,7 +224,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO //Definizione del rifOrd List foundRifOrd = Stream.of(mTestateOrdini) .map(OrdineVenditaInevasoDTO::getRifOrd) - .withoutNulls() +// .withoutNulls() .distinctBy(x -> x) .toList(); @@ -255,6 +256,18 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO defaultDataOrdOfUL = foundDataOrd.get(0); } + + //Definizione del codJfas + List foundCodJfas = Stream.of(mTestateOrdini) + .map(OrdineVenditaInevasoDTO::getCodJfas) + //.withoutNulls() + .distinctBy(x -> x) + .toList(); + + if(foundCodJfas != null && foundCodJfas.size() == 1){ + defaultCodJFasOfUL = foundCodJfas.get(0); + } + } } @@ -808,6 +821,10 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO .setCodMdep(defaultCodMdepOfUL) .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + if(defaultGestioneOfUL == GestioneEnum.LAVORAZIONE) { + mtbColt.setPosizione(defaultCodJFasOfUL); + } + if(customNumCollo != null) { mtbColt.setNumCollo(customNumCollo); } diff --git a/app/src/main/res/layout/accettazione_main_list_group_clienti.xml b/app/src/main/res/layout/accettazione_main_list_group_clienti.xml index ea278f24..06626c62 100644 --- a/app/src/main/res/layout/accettazione_main_list_group_clienti.xml +++ b/app/src/main/res/layout/accettazione_main_list_group_clienti.xml @@ -1,23 +1,25 @@ - - - + + android:layout_height="wrap_content"> - - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/accettazione_main_list_group_model.xml b/app/src/main/res/layout/accettazione_main_list_group_model.xml index a908f7d7..8cf888b5 100644 --- a/app/src/main/res/layout/accettazione_main_list_group_model.xml +++ b/app/src/main/res/layout/accettazione_main_list_group_model.xml @@ -1,39 +1,53 @@ - + + + + - - + + + android:padding="8dp"> - + tools:layout_editor_absoluteX="0dp" + tools:layout_editor_absoluteY="1dp" /> - - - + android:layout_toEndOf="@id/accettazione_main_list_group_item_container_checkBox"> + + + + + + + + + - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/accettazione_main_list_model.xml b/app/src/main/res/layout/accettazione_main_list_model.xml index 4f70e1dd..19e7d913 100644 --- a/app/src/main/res/layout/accettazione_main_list_model.xml +++ b/app/src/main/res/layout/accettazione_main_list_model.xml @@ -1,60 +1,64 @@ - - - + + android:layout_height="wrap_content"> - - + + + + + + + + + - + + + + + + android:background="@color/mainGreen" + android:padding="8dp"> - + - + + + - + + + + + - + - + - + - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml index 2ea68f2a..373951bb 100644 --- a/app/src/main/res/layout/app_bar_main.xml +++ b/app/src/main/res/layout/app_bar_main.xml @@ -68,7 +68,8 @@ android:iconifiedByDefault="true" app:defaultQueryHint="@string/search" app:iconifiedByDefault="true" - android:layout_gravity="end"/> + android:layout_gravity="end" + android:tint="@android:color/black"/> + android:tint="@android:color/black"/> + android:tint="@android:color/black"/> diff --git a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml index dee17988..2e3cfb83 100644 --- a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml +++ b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml @@ -17,110 +17,163 @@ app:cardCornerRadius="12dp" app:cardElevation="0dp"> - + android:layout_height="match_parent"> - - + android:orientation="vertical" + android:padding="16dp"> - - - - - - - - - - - - - - - - - + style="@style/TextViewMaterial.DialogTitle" + android:text="@string/dialog_vendita_filtro_avanzato" + android:gravity="center_horizontal" + android:layout_marginBottom="12dp"/> - - + android:hint="@string/deposit"> - + + + - - - - - - - - - - - - + android:hint="@string/travel_id"> - + + + - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - + android:layout_marginStart="24dp" + android:layout_marginEnd="24dp" + android:layout_marginTop="8dp"> - + - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_main_vendita.xml b/app/src/main/res/layout/fragment_main_vendita.xml index e667f9e7..f6d2778c 100644 --- a/app/src/main/res/layout/fragment_main_vendita.xml +++ b/app/src/main/res/layout/fragment_main_vendita.xml @@ -6,7 +6,6 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_ordine_lavorazione__list_model.xml b/app/src/main/res/layout/fragment_prod_ordine_lavorazione__list_model.xml new file mode 100644 index 00000000..8f909427 --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_lavorazione__list_model.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_prod_ordine_lavorazione_elenco.xml b/app/src/main/res/layout/fragment_prod_ordine_lavorazione_elenco.xml new file mode 100644 index 00000000..8f25effa --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_lavorazione_elenco.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_clienti.xml b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_clienti.xml new file mode 100644 index 00000000..7bf0a50c --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_clienti.xml @@ -0,0 +1,25 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_model.xml b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_model.xml new file mode 100644 index 00000000..ad62dfd5 --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_group_model.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_ordine_produzione__list_model.xml b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_model.xml new file mode 100644 index 00000000..e100e8ab --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione__list_model.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml b/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml new file mode 100644 index 00000000..65baaedb --- /dev/null +++ b/app/src/main/res/layout/fragment_prod_ordine_produzione_elenco.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_recupero_materiale.xml b/app/src/main/res/layout/fragment_prod_recupero_materiale.xml index 19f84442..b0589ff2 100644 --- a/app/src/main/res/layout/fragment_prod_recupero_materiale.xml +++ b/app/src/main/res/layout/fragment_prod_recupero_materiale.xml @@ -6,12 +6,22 @@ - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/prod_recupero_materiale_list_header.xml b/app/src/main/res/layout/prod_recupero_materiale_list_header.xml new file mode 100644 index 00000000..9f99456e --- /dev/null +++ b/app/src/main/res/layout/prod_recupero_materiale_list_header.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/prod_recupero_materiale_list_item.xml b/app/src/main/res/layout/prod_recupero_materiale_list_item.xml new file mode 100644 index 00000000..46a04089 --- /dev/null +++ b/app/src/main/res/layout/prod_recupero_materiale_list_item.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index 0131e39b..30a46419 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -36,6 +36,14 @@ + + Termini di consegna Automezzo Deposito + ID Viaggio + Agente Vettore Nessun articolo trovato @@ -200,6 +202,7 @@ Impossibile caricare ordini di diverse gestioni Non è stato possibile identificare la gestione degli ordini selezionati Impossibile caricare ordini di diversi depositi + Non verrà salvata la linea di produzione poiché stai selezionando ordini di diverse produzioni Recupero dati Attendi qualche istante @@ -223,6 +226,8 @@ Generale Produzione + Picking produzione + Picking lavorazione Versamento materiale Recupero materiale diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index d13bfbdb..e166eb5b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -43,6 +43,9 @@ #388E3C + #F5F5F5 + #eeeeee + #e0e0e0 #BDBDBD #9E9E9E #757575 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 764bf300..e213b624 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -181,6 +181,8 @@ Terms of delivery Vehicle Deposit + Travel ID + Agent Carrier No items found @@ -201,6 +203,7 @@ Can\'t load orders of different type Can\'t load current order type Can\'t load orders of different deposits + The production line will not be saved because you are selecting orders for different productions Recovering data Wait a moment @@ -226,6 +229,8 @@ General Production + Production picking + Manufacture picking Deposit raw material Recover raw material @@ -236,5 +241,8 @@ Invalid recipient Module Title + + Hello blank fragment + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 1c1d7141..1c9b62d5 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -40,7 +40,8 @@