diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 2f087de4..103a38e0 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 a549ce41..8027f5d4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ buildscript { } apply plugin: 'com.android.application' apply plugin: 'com.google.firebase.firebase-perf' -//apply plugin: 'io.fabric' +apply plugin: 'io.fabric' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'com.google.gms.google-services' @@ -17,8 +17,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 28 - def appVersionName = '1.0.25' + def appVersionCode = 29 + def appVersionName = '1.0.26' signingConfigs { release { diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java index ebaa3bca..172420a0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java @@ -13,21 +13,17 @@ import androidx.drawerlayout.widget.DrawerLayout; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.SearchView; -import androidx.appcompat.widget.Toolbar; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; import androidx.fragment.app.FragmentTransaction; import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; -import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment; +import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ISearcableFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.settings.SettingsManager; @@ -207,8 +203,8 @@ public class MainActivity extends AppCompatActivity mBinding.appBarMain.toolbarTitleLeft.setVisibility(View.GONE); } - if(fragment instanceof IRecyclerFragment) { - ((IRecyclerFragment) fragment).setWaterfallToolbar(mBinding.appBarMain.waterfallToolbar); + if(fragment instanceof IScrollableFragment) { + ((IScrollableFragment) fragment).setWaterfallToolbar(mBinding.appBarMain.waterfallToolbar); } if(fragment instanceof ISelectAllFragment && ((ISelectAllFragment)fragment).isEnabled()) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java b/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java index d4ce4766..8109b3a8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java @@ -8,12 +8,16 @@ import com.orhanobut.logger.Logger; import io.fabric.sdk.android.Fabric; import it.integry.integrywmsnative.BuildConfig; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.data_recover.ColliDataRecover; 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.settings.Stash; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityResources; import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityToast; @@ -84,12 +88,6 @@ public class AppContext { private void initRecoverColli() { ColliDataRecover.init(mContext); - - if(ColliDataRecover.thereIsAnExistantSession()){ - MtbColt recoveredMtbColt = ColliDataRecover.getFirstSession(); - - - } } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCache.java b/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCache.java new file mode 100644 index 00000000..85870e11 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCache.java @@ -0,0 +1,43 @@ +package it.integry.integrywmsnative.core.data_cache; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class DataCache { + + private static List dataCacheList = new ArrayList<>(); + + + public static String addItem(Object item) { + String uniqueID = UUID.randomUUID().toString(); + + DataCacheDTO dataCacheDTO = new DataCacheDTO() + .setItem(item) + .setUUID(uniqueID); + + dataCacheList.add(dataCacheDTO); + + return uniqueID; + } + + public static T retrieveItem(String uuid) { + + List dataCacheTemp = Stream.of(dataCacheList) + .filter(x -> x.getUUID().equals(uuid)).toList(); + + Object foundDataCache = null; + + if(dataCacheTemp != null && dataCacheTemp.size() > 0) { + foundDataCache = dataCacheTemp.get(0).getItem(); + dataCacheList.remove(dataCacheTemp.get(0)); + } + + return (T)foundDataCache; + + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCacheDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCacheDTO.java new file mode 100644 index 00000000..7244aabe --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_cache/DataCacheDTO.java @@ -0,0 +1,25 @@ +package it.integry.integrywmsnative.core.data_cache; + +public class DataCacheDTO { + + private String UUID; + private Object item; + + public String getUUID() { + return UUID; + } + + public DataCacheDTO setUUID(String UUID) { + this.UUID = UUID; + return this; + } + + public Object getItem() { + return item; + } + + public DataCacheDTO setItem(Object item) { + this.item = item; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecover.java b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecover.java index 76378d38..d5925631 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecover.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_recover/ColliDataRecover.java @@ -2,9 +2,18 @@ package it.integry.integrywmsnative.core.data_recover; import android.content.Context; +import com.google.android.gms.common.util.IOUtils; import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -19,6 +28,7 @@ public class ColliDataRecover { private String serCollo; private String dataCollo; private String gestioneCollo; + private String filtro; public int getNumCollo() { return numCollo; @@ -55,6 +65,15 @@ public class ColliDataRecover { this.gestioneCollo = gestioneCollo; return this; } + + public String getFiltro() { + return filtro; + } + + public RecoverDTO setFiltro(String filtro) { + this.filtro = filtro; + return this; + } } private static Context mContext; @@ -63,36 +82,48 @@ public class ColliDataRecover { public static void init(Context context) { mContext = context; + + if(isFilePresent(CommonConst.Files.RECOVER_COLLO_FILE)) { + loadLocalFile(); + } } public static boolean thereIsAnExistantSession() { return mtbColtsSessions.size() > 0; } - public static MtbColt getFirstSession() { + public static Integer getFirstSessionID() { if(thereIsAnExistantSession()){ - RecoverDTO dto = mtbColtsSessions.get(0); - mtbColtsSessions.remove(dto); - - return new MtbColt() - .setNumCollo(dto.getNumCollo()) - .setSerCollo(dto.getSerCollo()) - .setGestione(dto.getGestioneCollo()) - .setDataCollo(dto.getDataCollo()); + return 0; } else return null; } + public static MtbColt getSession(Integer sessionID) { + + if(sessionID == null) return null; + + RecoverDTO dto = mtbColtsSessions.get(sessionID); + + return new MtbColt() + .setNumCollo(dto.getNumCollo()) + .setSerCollo(dto.getSerCollo()) + .setGestione(dto.getGestioneCollo()) + .setDataCollo(dto.getDataCollo()) + .setFiltroOrdini(dto.getFiltro()); + } + public static int startNewSession(MtbColt mtbColtSession) { RecoverDTO recoverDTO = new RecoverDTO() .setDataCollo(mtbColtSession.getDataColloS()) .setNumCollo(mtbColtSession.getNumCollo()) .setSerCollo(mtbColtSession.getSerCollo()) - .setGestioneCollo(mtbColtSession.getGestione()); + .setGestioneCollo(mtbColtSession.getGestione()) + .setFiltro(mtbColtSession.getFiltroOrdini()); mtbColtsSessions.add(recoverDTO); updateLocalFile(); @@ -105,6 +136,28 @@ public class ColliDataRecover { } + private static void loadLocalFile() { + InputStream inputStream; + + Gson gson = new Gson(); + + try { + inputStream = mContext.openFileInput(CommonConst.Files.RECOVER_COLLO_FILE); + + byte[] bytes = IOUtils.readInputStreamFully(inputStream); + String jsonString = new String(bytes); + + Type listType = new TypeToken>(){}.getType(); + mtbColtsSessions = gson.fromJson(jsonString, listType); + + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + UtilityExceptions.defaultException(mContext, e); + } + } + + private static void updateLocalFile() { FileOutputStream outputStream; @@ -119,7 +172,13 @@ public class ColliDataRecover { e.printStackTrace(); UtilityExceptions.defaultException(mContext, e); } - } + private static boolean isFilePresent(String fileName) { + String path = mContext.getFilesDir().getAbsolutePath() + "/" + fileName; + File file = new File(path); + return file.exists(); + } + + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IRecyclerFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IScrollableFragment.java similarity index 82% rename from app/src/main/java/it/integry/integrywmsnative/core/interfaces/IRecyclerFragment.java rename to app/src/main/java/it/integry/integrywmsnative/core/interfaces/IScrollableFragment.java index ef17dcba..9bf27421 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IRecyclerFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IScrollableFragment.java @@ -2,7 +2,7 @@ package it.integry.integrywmsnative.core.interfaces; import it.integry.plugins.waterfalltoolbar.WaterfallToolbar; -public interface IRecyclerFragment { +public interface IScrollableFragment { void setWaterfallToolbar(WaterfallToolbar waterfallToolbar); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java b/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java index 598ed761..64f152a8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java @@ -7,7 +7,7 @@ import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; public class ReportManager { - public static void getRightReportNameByMtbColt(MtbColt mtbColt, RunnableArgs onComplete, RunnableArgs onFailed) throws Exception{ + public static void getRightReportNameByMtbColt(MtbColt mtbColt, RunnableArgs onComplete, RunnableArgs onFailed) { if(mtbColt != null){ @@ -28,7 +28,7 @@ public class ReportManager { } } else { - throw new Exception("mtbColt cannot be NULL"); + onFailed.run(new Exception("mtbColt cannot be NULL")); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index 9c9da9de..34c64775 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -3,6 +3,7 @@ package it.integry.integrywmsnative.core.settings; import java.util.List; import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.model.Azienda; import it.integry.integrywmsnative.core.model.MtbDepo; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; @@ -19,6 +20,7 @@ public class DBSettingsModel { private boolean flagMultiClienteOrdV; private String defaultCodAnag; private String defaultCausaleRettificaGiacenze; + private DistribuzioneColloDTO.CriterioDistribuzione defaultCriterioDistribuzione; public List getAvailableProfiles() { return availableProfiles; @@ -88,4 +90,13 @@ public class DBSettingsModel { this.defaultCausaleRettificaGiacenze = defaultCausaleRettificaGiacenze; return this; } + + public DistribuzioneColloDTO.CriterioDistribuzione getDefaultCriterioDistribuzione() { + return defaultCriterioDistribuzione; + } + + public DBSettingsModel setDefaultCriterioDistribuzione(String defaultCriterioDistribuzione) { + this.defaultCriterioDistribuzione = DistribuzioneColloDTO.CriterioDistribuzione.fromString(defaultCriterioDistribuzione); + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 1aa1c002..2fa70fe4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -184,7 +184,15 @@ public class SettingsManager { GestSetupRESTConsumer.getValue("PICKING", "SETUP", "COD_ANAG_DEFAULT", valueCodAnagDefault -> { dbSettingsModelIstance.setDefaultCodAnag(valueCodAnagDefault.value); - if(onComplete != null) onComplete.run(); + GestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_CRITERIO_DISTRIBUZIONE", valueDefaultCriterioDistribuzione -> { + dbSettingsModelIstance.setDefaultCriterioDistribuzione(valueDefaultCriterioDistribuzione.value); + + if(onComplete != null) onComplete.run(); + + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); + }, ex -> { if(onFailed != null) onFailed.run(ex); }); 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 4d5a9ed5..35250094 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 @@ -5,13 +5,12 @@ import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; -import androidx.appcompat.app.ActionBar; import androidx.appcompat.widget.AppCompatTextView; import androidx.databinding.DataBindingUtil; import android.os.Bundle; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.appcompat.widget.SearchView; + import android.text.Html; import android.text.SpannableString; import android.view.LayoutInflater; @@ -31,6 +30,7 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.REST.CommonRESTException; import it.integry.integrywmsnative.core.coollection.Coollection; +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; @@ -39,7 +39,7 @@ 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.IRecyclerFragment; +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; @@ -48,7 +48,7 @@ import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.Accettazione import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; import it.integry.plugins.waterfalltoolbar.WaterfallToolbar; -public class MainAccettazioneFragment extends Fragment implements ISearcableFragment, ITitledFragment, IRecyclerFragment { +public class MainAccettazioneFragment extends Fragment implements ISearcableFragment, ITitledFragment, IScrollableFragment { private static WaterfallToolbar mWaterfallToolbar; @@ -212,12 +212,12 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag .and("data", Coollection.eq(filteredByCodAnagOrders.get(j).data)).all(); - String prevCodJcom = ""; + String prevCodJcomAndDataCons = ""; - //Splitto gli ordini per codJcom + //Splitto gli ordini per codJcom e dataCons for(int k = 0; k < filteredByCodAnagAndDateAndNumberOrders.size(); k++) { - if(prevCodJcom.equalsIgnoreCase(filteredByCodAnagAndDateAndNumberOrders.get(k).codJcom)) continue; - else prevCodJcom = filteredByCodAnagAndDateAndNumberOrders.get(k).codJcom; + if(prevCodJcomAndDataCons.equalsIgnoreCase(filteredByCodAnagAndDateAndNumberOrders.get(k).codJcom + "_" + filteredByCodAnagAndDateAndNumberOrders.get(k).dataCons)) continue; + else prevCodJcomAndDataCons = filteredByCodAnagAndDateAndNumberOrders.get(k).codJcom + "_" + filteredByCodAnagAndDateAndNumberOrders.get(k).dataCons; OrdineAccettazioneGroupedInevasoDTO.Cliente cliente = new OrdineAccettazioneGroupedInevasoDTO.Cliente(); @@ -239,9 +239,7 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag } mAdapter = new MainListAccettazioneAdapter(getActivity(), groupedOrdiniInevasi, onGroupSelectionChanged); - // mAdapter.setHasStableIds(true); mBinding.accettazioneMainList.setAdapter(mAdapter); - //mRecyclerView.setAdapter(mAdapter); } @OnClick(R.id.accettazione_main_fab) @@ -286,8 +284,10 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag null, () -> { + String cacheItemID = DataCache.addItem(ordini); + Intent myIntent = new Intent(getActivity(), AccettazioneOrdineInevasoActivity.class); - myIntent.putExtra("key", (ArrayList) ordini); //Optional parameters + myIntent.putExtra("key", cacheItemID); getActivity().startActivity(myIntent); }).show(); 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 dfeba83b..1b19bb7d 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 @@ -14,6 +14,7 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding; @@ -41,7 +42,7 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity { FragmentArticoliInColloBottomSheetBinding bindings = this.bindings.bottomSheetInclude; mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings); - List orders = (ArrayList)getIntent().getSerializableExtra("key"); + List orders = DataCache.retrieveItem(getIntent().getStringExtra("key")); mAccettazioneOrdineInevasoViewModel = new AccettazioneOnOrdineAccettazioneInevasoViewModel( this, mArticoliInColloBottomSheetViewModel, orders); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java index fe7ff7f9..cf570082 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java @@ -748,7 +748,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl dto.setShouldAskDataScad(true); } - DialogInputQuantity.makeBase(mActivity, dto, true, value -> onOrdineRowDispatched(item, value)).show(); + DialogInputQuantity.makeBase(mActivity, dto, true, value -> onOrdineRowDispatched(item, value), null).show(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java index 123d91a2..a1c23d4a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java @@ -6,6 +6,7 @@ import android.os.Bundle; import androidx.appcompat.app.ActionBar; import androidx.appcompat.widget.AppCompatTextView; +import androidx.databinding.DataBindingUtil; import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; @@ -22,25 +23,31 @@ import butterknife.OnClick; import de.hdodenhof.circleimageview.CircleImageView; import it.integry.integrywmsnative.MainActivity; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker; +import it.integry.integrywmsnative.core.data_recover.ColliDataRecover; +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.UtilityString; import it.integry.integrywmsnative.core.wifi.WiFiCheckerViewHolder; +import it.integry.integrywmsnative.databinding.FragmentMainBinding; +import it.integry.plugins.waterfalltoolbar.WaterfallToolbar; /** * A simple {@link Fragment} subclass. * Use the {@link MainFragment#newInstance} factory method to * create an instance of this fragment. */ -public class MainFragment extends Fragment implements ITitledFragment { +public class MainFragment extends Fragment implements ITitledFragment, IScrollableFragment { + private FragmentMainBinding mBindings; - @BindView(R.id.no_connection_top_layout) ExpandableLayout mNoConnectionLayout; - @BindView(R.id.current_user_name) TextView currentUsername; - @BindView(R.id.current_deposito) TextView currentDeposito; -// @BindView(R.id.drawer_logoAzienda) CircleImageView currentLogoAzienda; - - private View mView; + private WaterfallToolbar mWaterfallToolbar; public MainFragment() { } @@ -61,24 +68,26 @@ public class MainFragment extends Fragment implements ITitledFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - // Inflate the layout for this fragment - mView = inflater.inflate(R.layout.fragment_main, container, false); - ButterKnife.bind(this, mView); + mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false); + + ButterKnife.bind(this, mBindings.getRoot()); + + mWaterfallToolbar.setNestedScrollView(mBindings.fragmentMainScrollview); init(); - return mView; + return mBindings.getRoot(); } private void init(){ ServerStatusChecker.getIstance().addCallback(value -> { - if(value && mNoConnectionLayout.isExpanded()){ + if(value && mBindings.noConnectionTopLayout.isExpanded()){ collapseNoConnectionLayout(); - } else if(!value && !mNoConnectionLayout.isExpanded()){ + } else if(!value && !mBindings.noConnectionTopLayout.isExpanded()){ expandNoConnectionLayout(); } }); @@ -88,26 +97,57 @@ public class MainFragment extends Fragment implements ITitledFragment { initSessionData(); + initRecuperoCollo(); } private void initSessionData() { - currentUsername.setText(SettingsManager.i().user.fullname); - currentDeposito.setText(String.format("%s - %s", SettingsManager.i().userSession.depo.getCodMdep(), SettingsManager.i().userSession.depo.getDescrizione())); + mBindings.currentUserName.setText(SettingsManager.i().user.fullname); + mBindings.currentDeposito.setText(String.format("Deposito: %s • %s", SettingsManager.i().userSession.depo.getCodMdep(), SettingsManager.i().userSession.depo.getDescrizione())); if(SettingsManager.iDB().getDatiAzienda() != null && SettingsManager.iDB().getDatiAzienda().isLogoAvailable()) { // currentLogoAzienda.setImageBitmap(SettingsManager.iDB().getDatiAzienda().getLogo()); } } + private void initRecuperoCollo() { + if(ColliDataRecover.thereIsAnExistantSession()){ + startRecoverMode(); + + Integer recoveredMtbColtID = ColliDataRecover.getFirstSessionID(); + MtbColt recoveredMtbColt = ColliDataRecover.getSession(recoveredMtbColtID); + + if(recoveredMtbColt != null && recoveredMtbColt.getGestioneEnum() == GestioneEnum.VENDITA && !UtilityString.isNullOrEmpty(recoveredMtbColt.getFiltroOrdini())) { + ColliMagazzinoRESTConsumer.distribuisciCollo(recoveredMtbColt, SettingsManager.iDB().getDefaultCriterioDistribuzione(), + mtbColts -> { + ColliDataRecover.closeSession(recoveredMtbColtID); + endRecoverMode(); + }, + ex -> { + UtilityExceptions.defaultException(getActivity(), ex); + endRecoverMode(); + }); + } else { + ColliDataRecover.closeSession(recoveredMtbColtID); + endRecoverMode(); + } + } + } + private void collapseNoConnectionLayout(){ - if(getActivity() != null) getActivity().runOnUiThread(() -> mNoConnectionLayout.collapse(true)); + if(getActivity() != null) getActivity().runOnUiThread(() -> mBindings.noConnectionTopLayout.collapse(true)); } private void expandNoConnectionLayout(){ - if(getActivity() != null) getActivity().runOnUiThread(() -> mNoConnectionLayout.expand(true)); + if(getActivity() != null) getActivity().runOnUiThread(() -> mBindings.noConnectionTopLayout.expand(true)); } + private void startRecoverMode() { + mBindings.recoverDataExpandableLayout.expand(true); + } + private void endRecoverMode() { + mBindings.recoverDataExpandableLayout.collapse(true); + } @Override public void onCreateActionBar(AppCompatTextView titleText, Context context) { @@ -139,4 +179,8 @@ public class MainFragment extends Fragment implements ITitledFragment { ((MainActivity) getActivity()).setItem(R.id.nav_free_picking); } + @Override + public void setWaterfallToolbar(WaterfallToolbar waterfallToolbar) { + mWaterfallToolbar = waterfallToolbar; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java index 45265cd6..1a0943ff 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/viewmodel/PickingLiberoViewModel.java @@ -217,7 +217,22 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); BarcodeManager.disable(); + if(!thereIsAnOpenedUL.get()) { + createNewLU(null, null, progressDialog, () -> { + executeEtichetteBehaviour(data, progressDialog); + }, () -> { + progressDialog.dismiss(); + BarcodeManager.enable(); + }); + } else { + executeEtichetteBehaviour(data, progressDialog); + } + + + }; + + private void executeEtichetteBehaviour(BarcodeScanDTO data, ProgressDialog progressDialog){ if(UtilityBarcode.isEtichettaAnonima(data)){ //Cerco gli articoli presenti nell'ul dell'etichetta anonima this.executeEtichettaLU(data.getStringValue(), progressDialog); @@ -229,8 +244,7 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { progressDialog.dismiss(); BarcodeManager.enable(); } - - }; + } private void executeEtichettaLU(String sscc, ProgressDialog progressDialog) { @@ -341,6 +355,9 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { saveLU(clonedTestata); } + }, () -> { + progressDialog.dismiss(); + BarcodeManager.enable(); }); }, () -> { @@ -350,21 +367,19 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { } - private void askQuantities(Iterator sourceMtbColrs, List destMtbColr, Runnable onComplete){ - + private void askQuantities(Iterator sourceMtbColrs, List destMtbColr, Runnable onComplete, Runnable onAbort){ if(sourceMtbColrs.hasNext()){ - askSingleQuantity(sourceMtbColrs.next(), mtbColr -> { destMtbColr.add(mtbColr); - askQuantities(sourceMtbColrs, destMtbColr, onComplete); - }); + askQuantities(sourceMtbColrs, destMtbColr, onComplete, onAbort); + }, onAbort); } else { onComplete.run(); } } - private void askSingleQuantity(MtbColr mtbColr, RunnableArgs onComplete) { + private void askSingleQuantity(MtbColr mtbColr, RunnableArgs onComplete, Runnable onAbort) { DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() .setBatchLot(mtbColr.getPartitaMag()) .setDataScad(mtbColr.getDataScadPartitaD()) @@ -378,14 +393,14 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { .setMaxQta(mtbColr.getQtaCol()); DialogInputQuantity.makeBase(mContext, dto, false, quantityDTO -> { - mtbColr - .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) - .setQtaCnf(new BigDecimal(quantityDTO.qtaCnf.get())) - .setNumCnf(new BigDecimal(quantityDTO.numCnf.get())) - .setDatetimeRow(new Date()); + mtbColr + .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) + .setQtaCnf(new BigDecimal(quantityDTO.qtaCnf.get())) + .setNumCnf(new BigDecimal(quantityDTO.numCnf.get())) + .setDatetimeRow(new Date()); - onComplete.run(mtbColr); - }).show(); + onComplete.run(mtbColr); + }, onAbort).show(); } @@ -438,12 +453,13 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { public void createNewLU() { - createNewLU(null, null, null); + createNewLU(null, null, null, null, null); } - private void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) { + private void createNewLU(Integer customNumCollo, String customSerCollo, ProgressDialog progressDialog, Runnable onComplete, Runnable onFailed) { - ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + boolean shouldCloseProgress = progressDialog == null; + final ProgressDialog progressDialogFinal = progressDialog == null ? UtilityProgress.createDefaultProgressDialog(mContext) : progressDialog; MtbColt mtbColt = new MtbColt(); mtbColt .setGestione(GestioneEnum.VENDITA) @@ -462,7 +478,7 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { savedMtbColt.setMtbColr(new ObservableArrayList<>()); setULToCurrentContext(savedMtbColt); - progressDialog.dismiss(); + if(shouldCloseProgress) progressDialogFinal.dismiss(); new StatusBarAlert.Builder(mContext) .autoHide(true) @@ -474,7 +490,10 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { if(onComplete != null) onComplete.run(); - }, ex -> UtilityExceptions.defaultException(mContext, ex, progressDialog)); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialogFinal); + if(onFailed != null) onFailed.run(); + }); } @@ -485,13 +504,15 @@ public class PickingLiberoViewModel implements IRecyclerItemClicked { this.mtbColt.set(mtbColt); } - public void closeLU() { if(thereIsAnOpenedUL.get()) { final ProgressDialog progress = UtilityProgress.createDefaultProgressDialog(mContext); if(thereIsAnyRowInUL.get()) { - updateDataFine(progress, null); //() -> distribuisciCollo(progress, () -> printCollo(progress))); + updateDataFine(progress, () -> { + progress.dismiss(); + setULToCurrentContext(null); + }); //() -> distribuisciCollo(progress, () -> printCollo(progress))); } else { deleteCollo(progress); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java index 6c1e7a18..f82491ce 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java @@ -301,7 +301,7 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked DialogInputQuantity.makeBase(mContext, qtaDto, true, (quantityDTO) -> { onPostDispatch(mtbAart, quantityDTO); - }).show(); + }, null).show(); } @@ -520,7 +520,7 @@ public class RettificaGiacenzeViewModel implements IRecyclerItemClicked UtilityExceptions.defaultException(mContext, ex, progressDialog); }); - }).show(); + }, null).show(); } 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 5713d1a0..55e982f6 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 @@ -4,7 +4,6 @@ import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; -import androidx.appcompat.app.ActionBar; import androidx.appcompat.widget.AppCompatTextView; import androidx.databinding.DataBindingUtil; import android.os.Bundle; @@ -30,9 +29,10 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.REST.CommonRESTException; import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; -import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment; +import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.settings.SettingsManager; @@ -52,7 +52,7 @@ import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.VenditaOrdineInev import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; import it.integry.plugins.waterfalltoolbar.WaterfallToolbar; -public class MainVenditaFragment extends Fragment implements ITitledFragment, IRecyclerFragment, ISelectAllFragment, IFilterableFragment { +public class MainVenditaFragment extends Fragment implements ITitledFragment, IScrollableFragment, ISelectAllFragment, IFilterableFragment { private static WaterfallToolbar mWaterfallToolbar; @@ -190,7 +190,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR .forEach(anagOrd -> { String codAnagOrd = anagOrd.substring(0, anagOrd.indexOf("#_#")); - String ragSocOrd = anagOrd.substring(anagOrd.indexOf("#_#") + 3, anagOrd.length()); + String ragSocOrd = anagOrd.substring(anagOrd.indexOf("#_#") + 3); OrdineVenditaGroupedInevasoDTO groupedOrdine = new OrdineVenditaGroupedInevasoDTO(); @@ -354,11 +354,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR null, () -> { - Intent myIntent = new Intent(getActivity(), VenditaOrdineInevasoActivity.class); - myIntent.putExtra("keyPickingList", (ArrayList) ordini); //Optional parameters - myIntent.putExtra("keyTestateOrdini", (ArrayList)selectedOrders); - myIntent.putExtra("keyColliRegistrati", (ArrayList)mtbColtList); - getActivity().startActivity(myIntent); + startVenditaActivity(ordini, selectedOrders, mtbColtList); }).show(); @@ -404,7 +400,6 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR public void onFilterClick() { DialogVenditaFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> { - mAppliedFilterViewModel = filter; if(filteredOrderList != null){ @@ -414,6 +409,25 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IR } }).show(); + } + + private void startVenditaActivity(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/vendita/dto/PickingObjectDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java index f84225e9..7216625c 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 @@ -47,7 +47,7 @@ public class PickingObjectDTO implements Parcelable { private Boolean tempHidden = null; private PickData tempPickData = null; - private List withdrawRows = new ArrayList<>(); + private ArrayList withdrawRows = new ArrayList<>(); protected PickingObjectDTO(Parcel in) { if (in.readByte() == 0) { @@ -423,11 +423,12 @@ public class PickingObjectDTO implements Parcelable { return this; } - public List getWithdrawRows() { + public ArrayList getWithdrawRows() { + if(withdrawRows == null) withdrawRows = new ArrayList<>(); return withdrawRows; } - public PickingObjectDTO setWithdrawRows(List withdrawRows) { + public PickingObjectDTO setWithdrawRows(ArrayList withdrawRows) { this.withdrawRows = withdrawRows; return this; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/VenditaOrdineInevasoActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/VenditaOrdineInevasoActivity.java index 37d9df78..6eb0277c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/VenditaOrdineInevasoActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/VenditaOrdineInevasoActivity.java @@ -14,6 +14,7 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.ActivityVenditaOrdineInevasoBinding; @@ -44,9 +45,9 @@ public class VenditaOrdineInevasoActivity extends AppCompatActivity { FragmentArticoliInColloBottomSheetBinding bindings = this.bindings.bottomSheetInclude; mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings); - List pickingList = (ArrayList)getIntent().getSerializableExtra("keyPickingList"); - List testateOrdini = (ArrayList)getIntent().getSerializableExtra("keyTestateOrdini"); - List colliRegistrati = (ArrayList) getIntent().getSerializableExtra("keyColliRegistrati"); + ArrayList pickingList = DataCache.retrieveItem(getIntent().getStringExtra("keyPickingList")); + ArrayList testateOrdini = DataCache.retrieveItem(getIntent().getStringExtra("keyTestateOrdini")); + ArrayList colliRegistrati = DataCache.retrieveItem(getIntent().getStringExtra("keyColliRegistrati")); mVenditaOrdineInevasoViewModel = new VenditaOrdineInevasoViewModel( this, mArticoliInColloBottomSheetViewModel, pickingList, testateOrdini, colliRegistrati); 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 3dd0f1e1..3dcdc995 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 @@ -11,6 +11,7 @@ import com.annimon.stream.Stream; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; +import java.util.Iterator; import java.util.List; import java.util.Objects; @@ -707,7 +708,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO progress.show(); if(thereIsAnyRowInUL()) { - updateDataFine(progress, () -> distribuisciCollo(progress, (generatedMtbColts) -> printCollo(progress))); + updateDataFine(progress, () -> distribuisciCollo(progress, (generatedMtbColts) -> printCollo(progress, generatedMtbColts))); } else { ColliDataRecover.closeSession(mtbColtSessionID); deleteCollo(progress); @@ -742,7 +743,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone(); - ColliMagazzinoRESTConsumer.distribuisciCollo(cloneMtbColt, DistribuzioneColloDTO.CriterioDistribuzione.UPDATE, + ColliMagazzinoRESTConsumer.distribuisciCollo(cloneMtbColt, SettingsManager.iDB().getDefaultCriterioDistribuzione(), mtbColts -> { ColliDataRecover.closeSession(mtbColtSessionID); onComplete.run(mtbColts); @@ -750,7 +751,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO ex -> UtilityExceptions.defaultException(mActivity, ex, progress)); } - private void printCollo(ProgressDialog progress) { + private void printCollo(ProgressDialog progress, List mtbColtsToPrint) { DialogAskShouldPrint.make(mActivity, "Packing List", shouldPrint -> { if(shouldPrint) { @@ -760,41 +761,29 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO if (value.size() > 0) { try { - MtbColt currentMtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); + cyclicPrint(mtbColtsToPrint.iterator(), value.get(0), () -> { + postCloseOperations(mtbColtsToPrint); + progress.dismiss(); + }, ex -> { + progress.dismiss(); + String errorMessage = ex.getMessage(); + DialogSimpleMessageHelper.makeErrorDialog( + mActivity, + new SpannableString(errorMessage), + null, + null, + R.string.button_ignore_print, + () -> postCloseOperations(mtbColtsToPrint)).show(); + }); - ReportManager.getRightReportNameByMtbColt(currentMtbColt, reportName -> { - - PrinterRESTConsumer.printCollo( - value.get(0), - currentMtbColt, - 1, reportName, () -> { - - postCloseOperations(); - progress.dismiss(); - - }, ex -> { - - progress.dismiss(); - String errorMessage = ex.getMessage(); - DialogSimpleMessageHelper.makeErrorDialog( - mActivity, - new SpannableString(errorMessage), - null, - null, - R.string.button_ignore_print, - () -> postCloseOperations()).show(); - }); - - }, ex -> UtilityExceptions.defaultException(mActivity, ex, progress) - ); } catch (Exception ex) { UtilityExceptions.defaultException(mActivity, ex, progress); - postCloseOperations(); + postCloseOperations(mtbColtsToPrint); } } else { progress.dismiss(); String errorMessage = "Nessuna stampante configurata"; - DialogSimpleMessageHelper.makeWarningDialog(mActivity, new SpannableString(errorMessage), null, () -> postCloseOperations()).show(); + DialogSimpleMessageHelper.makeWarningDialog(mActivity, new SpannableString(errorMessage), null, () -> postCloseOperations(mtbColtsToPrint)).show(); } } @@ -804,12 +793,36 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO } }); } else { - postCloseOperations(); + postCloseOperations(mtbColtsToPrint); progress.dismiss(); } }).show(); } + + private void cyclicPrint(Iterator sourceMtbColts, String printerName, Runnable onComplete, RunnableArgs onAbort) { + if(sourceMtbColts.hasNext()){ + singlePrint(sourceMtbColts.next(), printerName, () -> { + cyclicPrint(sourceMtbColts, printerName, onComplete, onAbort); + }, onAbort); + } else { + onComplete.run(); + } + } + + private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs onAbort) { + ReportManager.getRightReportNameByMtbColt(mtbColtToPrint, reportName -> { + + PrinterRESTConsumer.printCollo( + printerName, + mtbColtToPrint, + 1, + reportName, onComplete, onAbort); + + }, onAbort); + } + + private void deleteCollo(ProgressDialog progress) { ColliMagazzinoRESTConsumer.deleteCollo(mArticoliInColloBottomSheetViewModel.mtbColt.get(), () -> { @@ -833,11 +846,11 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO } - private void postCloseOperations() { + private void postCloseOperations(List generatedMtbColt) { MtbColt mtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); - this.mColliRegistrati.add(mtbColt); + this.mColliRegistrati.addAll(generatedMtbColt); mArticoliInColloBottomSheetViewModel.mtbColt.set(null); isFabVisible.set(true); @@ -965,7 +978,7 @@ public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IO } - DialogInputQuantity.makeBase(mActivity, dto, false, value -> onOrdineRowDispatched(item, value)).show(); + DialogInputQuantity.makeBase(mActivity, dto, false, value -> onOrdineRowDispatched(item, value), null).show(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java index b13b7843..6d227aed 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java @@ -333,7 +333,7 @@ public class VersamentoMerceViewModel { .setDatetimeRow(new Date()); onComplete.run(mtbColr); - }).show(); + }, null).show(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java index 7486f38d..b17e32ee 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java @@ -188,7 +188,7 @@ public class ArticoliInColloBottomSheetViewModel { }, ex -> UtilityExceptions.defaultException(mContext, ex, progress)); - }).show(); + }, null).show(); } private void onItemDelete(int position) { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java index c8d65cee..858cbe39 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java @@ -4,6 +4,7 @@ import android.app.AlertDialog; import android.app.DatePickerDialog; import android.app.ProgressDialog; import android.content.Context; +import android.content.DialogInterface; import android.content.res.ColorStateList; import androidx.databinding.DataBindingUtil; import androidx.databinding.Observable; @@ -213,11 +214,11 @@ public class DialogInputQuantity { private QuantityDTO currentQuantityDto; private DTO currentDTO; - public static AlertDialog makeBase(final Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { - return new DialogInputQuantity(context, dto, canOverflowQuantity, dialogCallback).currentAlert; + public static AlertDialog makeBase(final Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback, final Runnable onAbort) { + return new DialogInputQuantity(context, dto, canOverflowQuantity, dialogCallback, onAbort).currentAlert; } - public DialogInputQuantity(Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { + public DialogInputQuantity(Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback, final Runnable onAbort) { currentContext = context; currentMtbAart = dto.getMtbAart(); currentDTO = dto; @@ -251,7 +252,9 @@ public class DialogInputQuantity { final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) .setView(currentBinding.getRoot()) .setPositiveButton(context.getText(R.string.confirm), null) - .setNegativeButton(context.getText(R.string.abort), null); + .setNegativeButton(context.getText(R.string.abort), (dialog, which) -> { + if(onAbort != null) onAbort.run(); + }); currentAlert = alertDialog.create(); currentAlert.setCanceledOnTouchOutside(false); @@ -275,8 +278,8 @@ public class DialogInputQuantity { }, 100); Button positiveButton = currentAlert.getButton(AlertDialog.BUTTON_POSITIVE); - positiveButton.setOnClickListener(view -> onConfirm(context, currentQuantityDto, dialogCallback)); + }); diff --git a/app/src/main/res/drawable/curved_progress_bar.xml b/app/src/main/res/drawable/curved_progress_bar.xml new file mode 100644 index 00000000..414b5395 --- /dev/null +++ b/app/src/main/res/drawable/curved_progress_bar.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_recover_96.png b/app/src/main/res/drawable/ic_recover_96.png new file mode 100644 index 00000000..3fdf95d8 Binary files /dev/null and b/app/src/main/res/drawable/ic_recover_96.png differ diff --git a/app/src/main/res/drawable/progress_bar_background.xml b/app/src/main/res/drawable/progress_bar_background.xml new file mode 100644 index 00000000..2fa1399b --- /dev/null +++ b/app/src/main/res/drawable/progress_bar_background.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml index 071e1444..238aed23 100644 --- a/app/src/main/res/layout/activity_splash.xml +++ b/app/src/main/res/layout/activity_splash.xml @@ -52,10 +52,10 @@ android:id="@+id/progressBar2" style="?android:attr/progressBarStyleHorizontal" android:layout_width="0dp" - android:layout_height="wrap_content" + android:layout_height="8dp" android:layout_marginTop="24dp" android:indeterminate="true" - android:indeterminateTint="@android:color/white" + android:indeterminateDrawable="@drawable/curved_progress_bar" app:layout_constraintLeft_toRightOf="@+id/guideline_left_progress" app:layout_constraintRight_toLeftOf="@+id/guideline_right_progress" app:layout_constraintTop_toBottomOf="@id/imageView" /> diff --git a/app/src/main/res/layout/dialog_ask_should_print.xml b/app/src/main/res/layout/dialog_ask_should_print.xml index 43804dc3..66e92ec5 100644 --- a/app/src/main/res/layout/dialog_ask_should_print.xml +++ b/app/src/main/res/layout/dialog_ask_should_print.xml @@ -27,7 +27,8 @@ + android:layout_height="match_parent" + android:padding="16dp"> diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index f51af0cc..2ea257ff 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -1,386 +1,404 @@ - + - + android:layout_height="wrap_content" + android:background="@color/full_white" + tools:context=".gest.main.MainFragment"> - + android:orientation="vertical"> - - - - - - - - - - - - - - + android:background="@drawable/gray_detail_background" + app:el_duration="400" + app:el_expanded="false"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:weightSum="1" + android:padding="8dp"> - - + android:orientation="vertical" + android:layout_weight="0.5"> - + android:layout_margin="8dp" + app:cardBackgroundColor="@android:color/white" + app:cardCornerRadius="4dp"> - + + + + + + + + + + android:layout_margin="8dp" + app:cardBackgroundColor="@android:color/white" + app:cardCornerRadius="4dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + @@ -391,80 +409,79 @@ - - - + + + - - - - - - - - - + + + + + + + + + - - - - - + + + + + - - - + + + - - - - - - + + + + + + + - + + + - - - + + + + + + - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + + + - - - - - - - - - - - - - - + - - + + + + @@ -475,171 +492,172 @@ - - - + + + - - - - - - - - - + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml b/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml index b057bd18..e28c711f 100644 --- a/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml +++ b/app/src/main/res/layout/lista_contenuto_bancale_list_model.xml @@ -24,7 +24,8 @@ android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintEnd_toStartOf="@+id/qta_box" - app:layout_constraintStart_toStartOf="parent"> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> + + + Scansiona un articolo per iniziare Picking libero + Recupero dati + Attendi qualche istante + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2964c12b..7d294cc2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -179,5 +179,7 @@ Please press + button to start with picking Scan an item to start + Recovering data + Wait a moment diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index bcde4e13..bbfed21a 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -21,26 +21,24 @@ @font/open_sans_regular - -