diff --git a/app/build.gradle b/app/build.gradle index 5731358c..72479f10 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 273 - def appVersionName = '1.24.5' + def appVersionCode = 277 + def appVersionName = '1.25.0' signingConfigs { release { @@ -78,11 +78,11 @@ android { } } - lintOptions { - abortOnError false - } dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti"] + lint { + abortOnError false + } } @@ -113,6 +113,7 @@ dependencies { implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.preference:preference-ktx:1.2.0' + implementation "androidx.slidingpanelayout:slidingpanelayout:1.2.0" implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' @@ -164,6 +165,14 @@ dependencies { // testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.1" // androidTestImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' // androidTestImplementation 'org.testng:testng:7.4.0' + + + //Bluetooth device manager + implementation 'com.github.harry1453:android-bluetooth-serial:v1.1' + + // RxJava is also required. + implementation 'io.reactivex.rxjava2:rxjava:2.1.12' + implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' } repositories { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b8226a96..b0409f1f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,6 +8,7 @@ + optCodAnagForn = Stream.of(SettingsManager.iDB().getInternalCodAnags()) .filter(InternalCodAnagsDTO::isFornitore) .findFirst(); - if(optCodAnagForn.isEmpty()) break; + if (optCodAnagForn.isEmpty()) break; codAnagToUse = optCodAnagForn.get().getCodAnag(); break; case VENDITA: - if(SettingsManager.iDB().getInternalCodAnags() == null) break; + if (SettingsManager.iDB().getInternalCodAnags() == null) break; Optional optCodAnagClie = Stream.of(SettingsManager.iDB().getInternalCodAnags()) .filter(InternalCodAnagsDTO::isCliente) .findFirst(); - if(optCodAnagClie.isEmpty()) break; + if (optCodAnagClie.isEmpty()) break; codAnagToUse = optCodAnagClie.get().getCodAnag(); break; @@ -574,9 +577,41 @@ public class MtbColt extends EntityBase { String xmlPrefix = "{\"whereCond\": \""; String xmlSuffix = "\"}"; - StringBuilder whereCond = new StringBuilder(); +// StringBuilder whereCond = new StringBuilder(); + String whereCond; + List conditions = new ArrayList<>(); + String existingFilter; + if (this.filtroOrdini != null) { + existingFilter = this.filtroOrdini; + existingFilter = existingFilter.replace(xmlPrefix, "").replace(xmlSuffix, ""); + conditions.add(existingFilter); + } else { + existingFilter = ""; + } - if (filtroOrdineDtos != null && filtroOrdineDtos.size() > 0) { + + for (FiltroOrdineDTO filtroOrdineDTO : filtroOrdineDtos) { + try { + String condition = (String.format("(d.g = %s AND d.d = %s and d.n = %s", + UtilityDB.valueToString(filtroOrdineDTO.getGestioneOrd()), + UtilityDB.valueToString(UtilityDate.formatDate(filtroOrdineDTO.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)), + UtilityDB.valueToString(filtroOrdineDTO.getNumOrd()))); + + if (!UtilityString.isNullOrEmpty(filtroOrdineDTO.getDataConsS())) { + condition += (String.format(" AND dr.dc = %s", + UtilityDB.valueToString(UtilityDate.formatDate(filtroOrdineDTO.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)))); + } + + condition += ")"; + if (!existingFilter.contains(condition)) { + conditions.add(condition); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /*if (filtroOrdineDtos != null && filtroOrdineDtos.size() > 0) { for (int i = 0; i < filtroOrdineDtos.size(); i++) { FiltroOrdineDTO x = filtroOrdineDtos.get(i); @@ -602,7 +637,8 @@ public class MtbColt extends EntityBase { } } - } + }*/ + whereCond = TextUtils.join(" OR ", conditions); this.filtroOrdini = xmlPrefix + whereCond + xmlSuffix; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/OrdiniRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/OrdiniRESTConsumer.java index 177a0c9b..219ba5c5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/OrdiniRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/OrdiniRESTConsumer.java @@ -161,7 +161,15 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer { service.getArticoliFromOrdini(codMdep, getPickingListDTOs).enqueue(new Callback<>() { @Override public void onResponse(Call>> call, Response>> response) { - analyzeAnswer(response, "retrieveListaArticoliFromOrdiniUscita", onComplete, onFailed); + analyzeAnswer(response, "retrieveListaArticoliFromOrdiniUscita", sitArtOrds -> { + if (sitArtOrds != null) { + for (SitArtOrdDTO sitArtOrd : sitArtOrds) { + sitArtOrd.setCodMart(sitArtOrd.getCodMart().trim()); + } + } + + onComplete.run(sitArtOrds); + }, onFailed); } @Override @@ -189,7 +197,7 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer { " 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 " + - " WHERE " + whereCondGestione + + " WHERE " + whereCondGestione + " AND mtb_colt.segno = " + UtilityDB.valueToString(segno) + " " + " AND mtb_colt.data_doc IS NULL AND "; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java index 56f4a086..85bda60e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java @@ -9,7 +9,6 @@ import java.util.List; import javax.inject.Singleton; -import it.integry.integrywmsnative.BuildConfig; import it.integry.integrywmsnative.core.exception.NoPrintersFoundException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.MtbColt; @@ -55,7 +54,7 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer { }); } - public void printCollo(Type printerType, MtbColt testataColloToPrint, Runnable onComplete, RunnableArgs onFailed) { + public void printCollo(MtbColt testataColloToPrint, Runnable onComplete, RunnableArgs onFailed) { // if (BuildConfig.DEBUG) { // onComplete.run(); @@ -64,9 +63,6 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer { PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class); Call> callable = null; - if (printerType != null) - callable = printerService.printCollo(printerType.toString(), testataColloToPrint); - else callable = printerService.printCollo(testataColloToPrint); callable.enqueue(new Callback<>() { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumerService.java index f74f94e9..ebde3247 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumerService.java @@ -26,13 +26,6 @@ public interface PrinterRESTConsumerService { @Body JasperDTO jasperDTO ); - - @POST("wms/printEtichettaSSCC") - Call> printCollo( - @Query("printerType") String printerType, - @Body MtbColt mtbColtToPrint - ); - @POST("wms/printEtichettaSSCC") Call> printCollo( @Body MtbColt mtbColtToPrint diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java index af9ff373..c68e7828 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java @@ -3,16 +3,15 @@ package it.integry.integrywmsnative.core.utility; import android.Manifest; import android.content.pm.PackageManager; import android.os.Build; -import android.widget.Toast; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; import com.annimon.stream.Stream; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; import it.integry.integrywmsnative.SplashActivity; import it.integry.integrywmsnative.core.expansion.RunnableArgs; @@ -31,6 +30,11 @@ public class PermissionsHelper { if(Build.VERSION.SDK_INT >= 23) { //permissionsToAsk.add(Manifest.permission.REQUEST_INSTALL_PACKAGES); } + if(Build.VERSION.SDK_INT >= 31) { + permissionsToAsk.add(Manifest.permission.BLUETOOTH_CONNECT); + } + + String[] permissionArray = new String[permissionsToAsk.size()]; permissionsToAsk.toArray(permissionArray); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java index 6bf1e31b..8ce4f321 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java @@ -44,7 +44,6 @@ import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.report.ReportManager; -import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.model.VersamentoAutomaticoULResponseDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; @@ -732,7 +731,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta Intent myIntent = ListaBancaliActivity.createIntent(this, Stream.of(mtbColts).map(x -> (MtbColt) x).toList(), input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(), - PrinterRESTConsumer.Type.SECONDARIA, ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO)); this.startActivityForResult(myIntent, PICK_UL_REQUEST); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java index 8f5d4457..8500f479 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingViewModel.java @@ -837,7 +837,6 @@ public class AccettazionePickingViewModel { cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum()); this.mPrinterRESTConsumer.printCollo( - PrinterRESTConsumer.Type.SECONDARIA, cloneMtbColt, () -> { this.sendLUSuccessfullyPrinted(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleActivity.java index 2304a33c..20086b1d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleActivity.java @@ -45,16 +45,14 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB public ObservableField recoverFabMenuVisible = new ObservableField<>(false); private String mReportName; - private PrinterRESTConsumer.Type mPrinterType; private static class Key { private static final String MtbColtKey = "mtbColtKey"; private static final String CanRecoverUL = "canRecoverUL"; - private static final String PrinterType = "printerType"; private static final String ReportName = "reportName"; } - public static Intent createIntent(Context context, MtbColt item, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, String reportName) { + public static Intent createIntent(Context context, MtbColt item, boolean canRecoverUl, String reportName) { Intent myIntent = new Intent(context, ContenutoBancaleActivity.class); String keyMtbColt = DataCache.addItem(item); @@ -63,9 +61,6 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB String keyCanRecoverUL = DataCache.addItem(canRecoverUl); myIntent.putExtra(Key.CanRecoverUL, keyCanRecoverUL); - String keyPrinterType = DataCache.addItem(printerType); - myIntent.putExtra(Key.PrinterType, keyPrinterType); - String keyReportName = DataCache.addItem(reportName); myIntent.putExtra(Key.ReportName, keyReportName); @@ -79,7 +74,6 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB boolean canRecoverUL = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL)); mtbColt.set(DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtKey))); mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName)); - mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType)); bindings = DataBindingUtil.setContentView(this, R.layout.activity_contenuto_bancale); @@ -97,7 +91,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB getSupportActionBar().setDisplayHomeAsUpEnabled(true); mViewModel.setListener(this); - mViewModel.init(mtbColt.get(), mPrinterType, mReportName); + mViewModel.init(mtbColt.get(), mReportName); recoverFabMenuVisible.set(canRecoverUL); @@ -143,7 +137,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB this.bindings.contenutoBancaleFab.close(true); this.onLoadingStarted(); try { - this.mPrinterRESTConsumer.printCollo(mPrinterType, mtbColt.get(), + this.mPrinterRESTConsumer.printCollo(mtbColt.get(), () -> { this.onLoadingEnded(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleViewModel.java index ef70a79d..b1e242bd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleViewModel.java @@ -5,7 +5,6 @@ import javax.inject.Inject; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; public class ContenutoBancaleViewModel { @@ -19,7 +18,7 @@ public class ContenutoBancaleViewModel { this.mDepositoRESTConsumer = depositoRESTConsumer; } - public void init(MtbColt mtbColt, PrinterRESTConsumer.Type printerType, String defaultReportName) { + public void init(MtbColt mtbColt, String defaultReportName) { } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java index 6d9afe15..17c27e32 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java @@ -19,7 +19,6 @@ import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn; import it.integry.integrywmsnative.core.model.MtbColt; -import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; import it.integry.integrywmsnative.gest.lista_bancali.ui.ListaColliMainListAdapter; @@ -30,7 +29,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi private static class Key { private static final String MtbColtsKey = "mtbColtsKey"; private static final String CanRecoverUL = "canRecoverUL"; - private static final String PrinterType = "printerType"; private static final String ReportName = "reportName"; private static final String FlagOnlyResiduo = "flagOnlyResiduo"; } @@ -43,7 +41,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi private final ObservableArrayList mtbColts = new ObservableArrayList<>(); private RunnableArgsWithReturn mCanRecoverUl; - private PrinterRESTConsumer.Type mPrinterType; private String mReportName; private boolean mFlagOnlyResiduo; @@ -51,19 +48,19 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi - public static Intent createIntent(Context context, List items, RunnableArgsWithReturn canRecoverUlAction, PrinterRESTConsumer.Type printerType, String reportName) { - return createIntent(context, items, canRecoverUlAction, printerType, true, reportName); + public static Intent createIntent(Context context, List items, RunnableArgsWithReturn canRecoverUlAction, String reportName) { + return createIntent(context, items, canRecoverUlAction, true, reportName); } - public static Intent createIntent(Context context, List items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) { - return createIntent(context, items, input -> canRecoverUl, printerType, onlyResiduo); + public static Intent createIntent(Context context, List items, boolean canRecoverUl, boolean onlyResiduo) { + return createIntent(context, items, input -> canRecoverUl, onlyResiduo); } - public static Intent createIntent(Context context, List items, RunnableArgsWithReturn canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) { - return createIntent(context, items, canRecoverUlAction, printerType, onlyResiduo, null); + public static Intent createIntent(Context context, List items, RunnableArgsWithReturn canRecoverUlAction, boolean onlyResiduo) { + return createIntent(context, items, canRecoverUlAction, onlyResiduo, null); } - public static Intent createIntent(Context context, List items, RunnableArgsWithReturn canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo, String reportName) { + public static Intent createIntent(Context context, List items, RunnableArgsWithReturn canRecoverUlAction, boolean onlyResiduo, String reportName) { Intent myIntent = new Intent(context, ListaBancaliActivity.class); String mtbColtsKey = DataCache.addItem(items); @@ -72,9 +69,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi String canRecoverULKey = DataCache.addItem(canRecoverUlAction); myIntent.putExtra(Key.CanRecoverUL, canRecoverULKey); - String printerTypeKey = DataCache.addItem(printerType); - myIntent.putExtra(Key.PrinterType, printerTypeKey); - String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo); myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey); @@ -97,7 +91,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL)); - mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType)); mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName)); mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo)); @@ -138,7 +131,7 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi } public void startContenutoBancaleActivity(MtbColt item){ - Intent myIntent = ContenutoBancaleActivity.createIntent(this, item, mCanRecoverUl.run(item), mPrinterType, mReportName); + Intent myIntent = ContenutoBancaleActivity.createIntent(this, item, mCanRecoverUl.run(item), mReportName); startActivityForResult(myIntent, PICK_UL_REQUEST); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java index b2ad2ada..d73cde89 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiViewModel.java @@ -218,7 +218,6 @@ public class PickingResiViewModel { private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs onFailed) { this.mPrinterRESTConsumer.printCollo( - PrinterRESTConsumer.Type.PRIMARIA, mtbColtToPrint, onComplete, onFailed); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java index 7c8ef39d..5ea748b6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_recupero_materiale/ProdRecuperoMaterialeViewModel.java @@ -291,7 +291,6 @@ public class ProdRecuperoMaterialeViewModel { private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs onAbort) { this.mPrinterRESTConsumer.printCollo( - PrinterRESTConsumer.Type.PRIMARIA, mtbColtToPrint, onComplete, onAbort); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java index fd35f254..735dd909 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java @@ -117,10 +117,12 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra public void onDestroyView() { super.onDestroyView(); - for (Runnable onPreDestroy : - mOnPreDestroyList) { + for (Runnable onPreDestroy : mOnPreDestroyList) { onPreDestroy.run(); } + + mProdRientroMerceOrderDetailFragment.onDetach(); + mProdRientroMerceOrderListFragment.onDetach(); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceViewModel.java index df1bbf7e..8d8a13a5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceViewModel.java @@ -8,8 +8,8 @@ import javax.inject.Inject; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; -import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; +import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException; public class ProdRientroMerceViewModel { @@ -31,7 +31,7 @@ public class ProdRientroMerceViewModel { this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> { this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList); this.sendOnLoadingEnded(); - }, ex -> this.sendError(new DocumentsLoadException(ex))); + }, ex -> this.sendError(new OrdersLoadException(ex))); } public MutableLiveData> getOrdiniLavorazioneAperti() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java index 80329f6d..b3d0c409 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/order_detail/ProdRientroMerceOrderDetailFragment.java @@ -1,10 +1,13 @@ package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail; +import android.bluetooth.BluetoothDevice; +import android.content.SharedPreferences; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Toast; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; @@ -12,10 +15,13 @@ import androidx.databinding.ObservableArrayList; import androidx.databinding.ObservableField; import androidx.fragment.app.Fragment; import androidx.lifecycle.MutableLiveData; +import androidx.preference.PreferenceManager; import androidx.recyclerview.widget.LinearLayoutManager; import com.annimon.stream.Stream; import com.google.gson.reflect.TypeToken; +import com.harrysoft.androidbluetoothserial.BluetoothManager; +import com.harrysoft.androidbluetoothserial.BluetoothSerialDevice; import java.math.BigDecimal; import java.util.ArrayList; @@ -23,8 +29,11 @@ import java.util.List; import javax.inject.Inject; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.schedulers.Schedulers; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.exception.BluetoothConnectionException; import it.integry.integrywmsnative.core.expansion.AtomicBigDecimal; import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; @@ -36,6 +45,7 @@ import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.utility.UtilityDB; import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailBinding; import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; +import it.integry.integrywmsnative.gest.settings.MainSettingsFragment; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdDTO; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView; @@ -64,6 +74,9 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements private RunnableArgs onMtbColtClicked; + private BluetoothManager bluetoothManager; + private BluetoothSerialDevice mConnectedBluetoothDevice; + public ObservableField sumLUNumber = new ObservableField<>(BigDecimal.ZERO); public ObservableField sumColliNumber = new ObservableField<>(BigDecimal.ZERO); @@ -103,6 +116,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList); this.initRecyclerView(); + this.initULScaleBluetoothConnection(); return mBindings.getRoot(); } @@ -121,10 +135,52 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements mBindings.mainList.setAdapter(mAdapter); mAdapter.setOnItemClickListener(item -> { - if(this.onMtbColtClicked != null) this.onMtbColtClicked.run(item); + if (this.onMtbColtClicked != null) this.onMtbColtClicked.run(item); }); } + private void initULScaleBluetoothConnection() { + bluetoothManager = BluetoothManager.getInstance(); + if (bluetoothManager == null) { + // Bluetooth unavailable on this device :( tell the user + Toast.makeText(requireActivity(), "Bluetooth not available.", Toast.LENGTH_LONG).show(); // Replace context with your context instance. + + return; + } + + SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext()); + var btMacAddress = sharedPreferences.getString(MainSettingsFragment.KEY_PALLET_BT_DEVICE, null); + + if (btMacAddress == null) { + Toast.makeText(requireActivity(), "Nessun dispositivo BLUETOOTH configurato nelle impostazioni.", Toast.LENGTH_LONG).show(); // Replace context with your context instance. + return; + } + + var btName = Stream.of(bluetoothManager.getPairedDevicesList()) + .filter(x -> x.getAddress().equalsIgnoreCase(btMacAddress)) + .map(BluetoothDevice::getName) + .findFirstOrElse(null); + + var disposableBluetooth = bluetoothManager.openSerialDevice(btMacAddress) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(this::onConnected, x -> this.onError(new BluetoothConnectionException(btName, btMacAddress, x))); + + } + + private void onConnected(BluetoothSerialDevice connectedDevice) { + Toast.makeText(requireActivity(), "Connesso a: " + connectedDevice.getMac(), Toast.LENGTH_LONG).show(); + mConnectedBluetoothDevice = connectedDevice; + } + + @Override + public void onDetach() { + if (mConnectedBluetoothDevice != null) + bluetoothManager.close(); + + super.onDetach(); + } + public void setOrder(OrdineLavorazioneDTO order) { currentOrder.postValue(order); mBindings.invalidateAll(); @@ -134,7 +190,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements } private void refreshList(List mtbColts) { - if(mtbColts != null) { + if (mtbColts != null) { sumLUNumber.set(new BigDecimal(mtbColts.size())); AtomicBigDecimal sumColli = new AtomicBigDecimal(BigDecimal.ZERO); @@ -186,7 +242,8 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements " AND (data_fine IS NULL OR last_step = id_step) " + "ORDER BY id_step DESC"; - mSystemRESTConsumer.>processSql(sql, new TypeToken>() {}.getType(), dtbOrdStep -> { + mSystemRESTConsumer.>processSql(sql, new TypeToken>() { + }.getType(), dtbOrdStep -> { this.onLoadingEnded(); @@ -203,7 +260,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements DialogInputLUProdView - .newInstance(dialogInputLUProdDTO, resultDTO -> { + .newInstance(mConnectedBluetoothDevice.toSimpleDeviceInterface(), dialogInputLUProdDTO, resultDTO -> { ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO = new ProdRientroMerceOrderDetailPickedQuantityDTO() .setNumCnf(resultDTO.getNumCnf()) .setPesoCollo(resultDTO.getPesoCollo()) @@ -255,8 +312,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements default: return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp); } - } - else + } else return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp); } @@ -271,8 +327,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements default: return ContextCompat.getColor(requireActivity(), R.color.blue_800); } - } - else + } else return ContextCompat.getColor(requireActivity(), R.color.blue_800); } @@ -287,8 +342,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements default: return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text); } - } - else + } else return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text); } @@ -303,8 +357,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements default: return ContextCompat.getColor(requireActivity(), R.color.blue_800); } - } - else + } else return ContextCompat.getColor(requireActivity(), R.color.blue_800); } } \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java index aa1fabf9..6874e361 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java @@ -494,7 +494,7 @@ public class RettificaGiacenzeViewModel { onComplete.run(); } else { - this.mPrinterRESTConsumer.printCollo(null, mCurrentMtbColt, () -> { + this.mPrinterRESTConsumer.printCollo(mCurrentMtbColt, () -> { this.sendLUSuccessfullyPrinted(); onComplete.run(); }, ex -> this.sendLUPrintError(ex, onComplete)); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java index aded4d53..cf454c0b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java @@ -1,20 +1,34 @@ package it.integry.integrywmsnative.gest.settings; +import android.bluetooth.BluetoothDevice; import android.content.Context; import android.os.Bundle; +import android.widget.Toast; +import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatTextView; +import androidx.preference.ListPreference; +import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import com.annimon.stream.Stream; +import com.harrysoft.androidbluetoothserial.BluetoothManager; + import java.util.ArrayList; +import java.util.Collection; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.utility.UtilityResources; -public class MainSettingsFragment extends PreferenceFragmentCompat implements ITitledFragment { +public class MainSettingsFragment extends PreferenceFragmentCompat implements ITitledFragment, Preference.OnPreferenceChangeListener { private final ArrayList onPreDestroyList = new ArrayList<>(); + public static final String KEY_PALLET_BT_DEVICE = "pallet_scale_bt_device"; + + private Collection btPairedDevices; + @Override public void onCreateActionBar(AppCompatTextView titleText, Context context) { titleText.setText(context.getText(R.string.settings_category).toString()); @@ -23,8 +37,52 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { setPreferencesFromResource(R.xml.app_preferences, rootKey); + + var palletScaleBtDeviceListPref = (ListPreference) findPreference(KEY_PALLET_BT_DEVICE); + setListPreferenceData(palletScaleBtDeviceListPref); + palletScaleBtDeviceListPref.setOnPreferenceChangeListener(this); } + + protected void setListPreferenceData(ListPreference lp) { + BluetoothManager bluetoothManager = BluetoothManager.getInstance(); + if (bluetoothManager == null) { + // Bluetooth unavailable on this device :( tell the user + Toast.makeText(requireActivity(), "Bluetooth not available", Toast.LENGTH_LONG).show(); // Replace context with your context instance. + return; + } + + btPairedDevices = bluetoothManager.getPairedDevicesList(); + + if(!Stream.of(btPairedDevices).anyMatch(x -> x.getAddress().equalsIgnoreCase(lp.getValue()))) { + lp.setValue(null); + } + + updatePalletBtDeviceSummary(lp, lp.getValue()); + + if (!btPairedDevices.isEmpty()) { + CharSequence[] entries = new CharSequence[btPairedDevices.size()]; + Stream.of(btPairedDevices) + .map(BluetoothDevice::getName) + .toList() + .toArray(entries); + + CharSequence[] entryValues = new CharSequence[btPairedDevices.size()]; + Stream.of(btPairedDevices) + .map(BluetoothDevice::getAddress) + .toList() + .toArray(entryValues); + + lp.setEntries(entries); + lp.setEntryValues(entryValues); + } else { + lp.setEntries(new CharSequence[0]); + lp.setEntryValues(new CharSequence[0]); + lp.setDialogMessage("Nessun dispositivo bluetooth associato. Associane uno dalle impostazioni bluetooth prima di procedere."); + } + } + + @Override public void addOnPreDestroy(Runnable onPreDestroy) { onPreDestroyList.add(onPreDestroy); @@ -34,9 +92,34 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT public void onDestroyView() { super.onDestroyView(); - for (Runnable onPreDestroy : - onPreDestroyList) { + for (Runnable onPreDestroy : onPreDestroyList) { onPreDestroy.run(); } } + + @Override + public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) { + + final int idx; + switch (preference.getKey()) { + case KEY_PALLET_BT_DEVICE: + final var palletScaleBtDeviceListPref = (ListPreference) preference; + updatePalletBtDeviceSummary(palletScaleBtDeviceListPref, (String) newValue); + break; + + } + // Set result so knows to refresh itself +// getActivity().setResult(RESULT_OK); + return true; + } + + + private void updatePalletBtDeviceSummary(ListPreference listPref, String btDeviceAddress) { + String btDeviceName = Stream.of(btPairedDevices) + .filter(x -> x.getAddress().equalsIgnoreCase(btDeviceAddress)) + .map(BluetoothDevice::getName) + .findFirstOrElse(UtilityResources.getString(R.string.pallet_scale_bt_device_selection_info)); + listPref.setSummary(btDeviceName); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java index 38cf6c30..e8e8da53 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneActivity.java @@ -44,7 +44,6 @@ import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; -import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer; import it.integry.integrywmsnative.core.rest.model.OrdineUscitaInevasoDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.settings.SettingsManager; @@ -56,12 +55,12 @@ import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.core.utility.UtilityToast; import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding; import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; -import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListAdapter; -import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel; import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; +import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListAdapter; +import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListModel; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.dialogs.DialogConsts; @@ -669,7 +668,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo ArrayList createdMtbColts = this.mViewmodel.getCreatedMtbColts(); - Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, PrinterRESTConsumer.Type.PRIMARIA, false); + Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, false); this.startActivityForResult(myIntent, PICK_UL_REQUEST); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index 0ea058d8..f63c79af 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -1722,26 +1722,25 @@ public class SpedizioneViewModel { if (!shouldPrint) { onComplete.run(); } else { - cyclicPrint(PrinterRESTConsumer.Type.PRIMARIA, mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete)); + cyclicPrint(mtbColtsToPrint.iterator(), onComplete, ex -> this.sendLUPrintError(ex, onComplete)); } }); } - private void cyclicPrint(PrinterRESTConsumer.Type printerType, @NotNull Iterator sourceMtbColts, Runnable onComplete, RunnableArgs onAbort) { + private void cyclicPrint(@NotNull Iterator sourceMtbColts, Runnable onComplete, RunnableArgs onAbort) { if (sourceMtbColts.hasNext()) { - singlePrint(printerType, sourceMtbColts.next(), () -> { - cyclicPrint(printerType, sourceMtbColts, onComplete, onAbort); + singlePrint(sourceMtbColts.next(), () -> { + cyclicPrint(sourceMtbColts, onComplete, onAbort); }, onAbort); } else { onComplete.run(); } } - private void singlePrint(PrinterRESTConsumer.Type printerType, MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs onFailed) { + private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs onFailed) { this.mPrinterRESTConsumer.printCollo( - printerType, mtbColtToPrint, onComplete, onFailed); @@ -1752,7 +1751,7 @@ public class SpedizioneViewModel { this.sendOnLoadingStarted(); this.mCurrentMtbColt = mtbColt; mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini); - + this.mCurrentMtbColt.generaFiltroOrdineFromDTO(mDefaultFiltroOrdine); this.mColliMagazzinoRESTConsumer.saveCollo(this.mCurrentMtbColt, savedMtbColt -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceViewModel.java index a49654b7..22dabfba 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceViewModel.java @@ -91,14 +91,22 @@ public class VersamentoMerceViewModel { if (!UtilityString.equalsIgnoreCase(mCurrentMtbColt.getValue().getCodMdep(), foundPosizione.getCodMdep())) { this.sendOnSpostamentoTraDepConfirmRequired(mCurrentMtbColt.getValue().getCodMdep(), foundPosizione.getCodMdep(), canContinue -> { + onComplete.run(); if (canContinue) { - updatePosizione(foundPosizione, UtilityPosizione.isPosizioneWithLivello(foundPosizione)); - } else { - onComplete.run(); + if (UtilityPosizione.isPosizioneWithLivello(foundPosizione)) { + askLivelloPosizione(foundPosizione); + } else { + updatePosizione(foundPosizione); + } } }); } else { - updatePosizione(foundPosizione, UtilityPosizione.isPosizioneWithLivello(foundPosizione)); + onComplete.run(); + if (UtilityPosizione.isPosizioneWithLivello(foundPosizione)) { + askLivelloPosizione(foundPosizione); + } else { + updatePosizione(foundPosizione); + } } } @@ -239,26 +247,23 @@ public class VersamentoMerceViewModel { } - public void updatePosizione(MtbDepoPosizione mtbDepoPosizione, boolean shouldAskLivello) { + public void askLivelloPosizione(MtbDepoPosizione mtbDepoPosizione) { + this.sendOnLivelloPosizioneRequired(mtbDepoPosizione, newPosizione -> { + if (newPosizione == null) { + askLivelloPosizione(mtbDepoPosizione); + } else { + updatePosizione(newPosizione); + } - if (shouldAskLivello) { - this.sendOnLivelloPosizioneRequired(mtbDepoPosizione, newPosizione -> { - - if (newPosizione == null) { - updatePosizione(mtbDepoPosizione, shouldAskLivello); - } else { - updatePosizione(newPosizione, false); - } - - }); - } else { - this.sendOnLoadingStarted(); - mColliMagazzinoRESTConsumer.changePosizione(mCurrentMtbColt.getValue(), mtbDepoPosizione, () -> { - this.sendOnLoadingEnded(); - this.sendOnDataSaved(); - }, this::sendError); - } + }); + } + public void updatePosizione(MtbDepoPosizione mtbDepoPosizione) { + this.sendOnLoadingStarted(); + mColliMagazzinoRESTConsumer.changePosizione(mCurrentMtbColt.getValue(), mtbDepoPosizione, () -> { + this.sendOnLoadingEnded(); + this.sendOnDataSaved(); + }, this::sendError); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java index 1c72ce25..50707e25 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdView.java @@ -22,6 +22,7 @@ import androidx.fragment.app.DialogFragment; import com.annimon.stream.Optional; import com.annimon.stream.Stream; import com.google.android.material.textfield.TextInputLayout; +import com.harrysoft.androidbluetoothserial.SimpleBluetoothDeviceInterface; import com.pedromassango.doubleclick.DoubleClick; import com.pedromassango.doubleclick.DoubleClickListener; @@ -52,10 +53,13 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI @Inject DialogInputLUProdViewModel mViewModel; + private final SimpleBluetoothDeviceInterface mBluetoothDeviceInterface; private final DialogInputLUProdDTO mDialogInputLUProdDTO; private final RunnableArgs mOnComplete; private final Runnable mOnAbort; + public ObservableField enabledBluetoothDevice = new ObservableField<>(); + public ObservableField selectedMtbTcol = new ObservableField<>(); public ObservableField currentMtbTCol = new ObservableField<>(); @@ -87,13 +91,14 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null; private DialogInputLULineeProdAdapter lineeProdArrayAdapter = null; - public static DialogInputLUProdView newInstance(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs onComplete, @NotNull Runnable onAbort) { - return new DialogInputLUProdView(dialogInputLUProdDTO, onComplete, onAbort); + public static DialogInputLUProdView newInstance(SimpleBluetoothDeviceInterface bluetoothDeviceInterface, @NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs onComplete, @NotNull Runnable onAbort) { + return new DialogInputLUProdView(bluetoothDeviceInterface, dialogInputLUProdDTO, onComplete, onAbort); } - private DialogInputLUProdView(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs onComplete, @NotNull Runnable onAbort) { + private DialogInputLUProdView(SimpleBluetoothDeviceInterface bluetoothDeviceInterface, @NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs onComplete, @NotNull Runnable onAbort) { super(); + this.mBluetoothDeviceInterface = bluetoothDeviceInterface; this.mDialogInputLUProdDTO = dialogInputLUProdDTO; this.mOnComplete = onComplete; this.mOnAbort = onAbort; @@ -104,7 +109,6 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog); - } @@ -142,6 +146,13 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI super.onStart(); this.init(); + + if(mBluetoothDeviceInterface != null) { + // Listen to bluetooth events + mBluetoothDeviceInterface.setListeners(this::onMessageReceived, this::onMessageSent, x -> this.onError(new Exception(x))); + enabledBluetoothDevice.set(true); + } + this.mViewModel.setListener(this); this.mViewModel.init(mDialogInputLUProdDTO.getCodJfasParent()); } @@ -385,10 +396,37 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI this.onDataChanged(); } + public void readWeightFromDevice() { +// Toast.makeText(requireActivity(), "Leggo peso uaglio", Toast.LENGTH_SHORT).show(); + + // Let's send a message: + mBluetoothDeviceInterface.sendMessage("GW\r"); + } + + private void onMessageSent(String request) { +// Toast.makeText(requireActivity(), "Aspitt nu mument", Toast.LENGTH_SHORT).show(); + } + + private void onMessageReceived(String response) { +// Toast.makeText(requireActivity(), "Ne awa: " + response, Toast.LENGTH_SHORT).show(); + + String tmpResp = response.replace(".", ""); + + BigDecimal grossWeight = new BigDecimal(tmpResp.substring(2,7)); + BigDecimal netWeight = new BigDecimal(tmpResp.substring(8,13)); + + mViewModel.setPesoNetto(netWeight); + mViewModel.setPesoLordo(grossWeight); + } + public void save() { if (this.mViewModel.validate()) { this.mOnComplete.run(this.mViewModel.getResult()); + + if(mBluetoothDeviceInterface != null) + mBluetoothDeviceInterface.setListeners(null, null, null); + dismiss(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdViewModel.java index 92c6a88a..f87b2999 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_lu_prod/DialogInputLUProdViewModel.java @@ -158,8 +158,8 @@ public class DialogInputLUProdViewModel { this.mListener.onDataChanged(); } - public void setPesoNetto(BigDecimal qtaTot) { - this.internalPesoNetto = qtaTot; + public void setPesoNetto(BigDecimal pesoNetto) { + this.internalPesoNetto = pesoNetto; } public void setTaraPed(BigDecimal taraPed) { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index 13b28764..e7490833 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -166,6 +166,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia }); } this.onLoadingEnded(); + mBindings.inputNumCnfText.requestFocus(); return mBindings.getRoot(); } @@ -203,7 +204,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia public void onDismiss(@NonNull DialogInterface dialog) { BarcodeManager.removeCallback(mBarcodeScannerIstanceID); - if(mAbort) this.mOnAbort.run(); + if (mAbort) this.mOnAbort.run(); super.onDismiss(dialog); } @@ -212,7 +213,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia super.onStart(); // if(!mFirstStart) { - this.init(); + this.init(); // mFirstStart = false; // } diff --git a/app/src/main/res/drawable/ic_scale.png b/app/src/main/res/drawable/ic_scale.png new file mode 100644 index 00000000..f5c5ca11 Binary files /dev/null and b/app/src/main/res/drawable/ic_scale.png differ diff --git a/app/src/main/res/layout-land-hdpi/dialog_input_lu_prod.xml b/app/src/main/res/layout-land-hdpi/dialog_input_lu_prod.xml index c02e5843..48d60ac4 100644 --- a/app/src/main/res/layout-land-hdpi/dialog_input_lu_prod.xml +++ b/app/src/main/res/layout-land-hdpi/dialog_input_lu_prod.xml @@ -65,6 +65,18 @@ android:src="@drawable/ic_erase_96" android:tint="@android:color/white" /> + + diff --git a/app/src/main/res/layout/dialog_input_lu_prod.xml b/app/src/main/res/layout/dialog_input_lu_prod.xml index a3cdb519..c4d51048 100644 --- a/app/src/main/res/layout/dialog_input_lu_prod.xml +++ b/app/src/main/res/layout/dialog_input_lu_prod.xml @@ -52,6 +52,18 @@ android:onClick="@{() -> view.resetValues()}" android:tint="@android:color/white"/> + + diff --git a/app/src/main/res/layout/dialog_input_quantity_v2.xml b/app/src/main/res/layout/dialog_input_quantity_v2.xml index 312fb1f0..40ef5b7f 100644 --- a/app/src/main/res/layout/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout/dialog_input_quantity_v2.xml @@ -27,792 +27,787 @@ type="it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View" /> - + android:layout_height="match_parent"> - - + android:layout_height="match_parent" + android:background="@color/full_white" + android:orientation="vertical"> - - - - - - - + android:background="?attr/colorPrimary" + android:minHeight="?attr/actionBarSize" + app:titleTextColor="@android:color/white"> - - - - - - - - - - - - - - - + + + + + + android:orientation="vertical"> - - - - + android:layout_marginTop="8dp"> + android:layout_alignParentStart="true" + android:layout_toStartOf="@id/unt_mis" + android:ellipsize="end" + android:text="@{viewmodel.mtbAart.codMart}" + android:textColor="@color/colorPrimary" + tools:text="COD MART (Partita mag)" /> - - - - - - - + android:textColor="@color/colorPrimary" + android:visibility="@{viewmodel.mtbAart.untMis != null ? View.VISIBLE : View.GONE}" + tools:text="UM" /> + + + + + + + + + + + + + + android:orientation="horizontal"> + + + + - + + + + + + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + android:weightSum="1"> - - - + android:layout_gravity="center" + android:layout_marginEnd="2dp" + android:layout_weight="0.5" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/green_600" + android:orientation="vertical" + android:padding="8dp" + android:visibility="@{viewmodel.totalNumCnfToBeTaken != null || viewmodel.totalQtaToBeTaken != null ? View.VISIBLE : View.GONE}"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + android:layout_weight="0.5" + android:background="@drawable/badge_round_corner" + android:backgroundTint="@color/colorPrimary" + android:orientation="vertical" + android:padding="8dp" + android:visibility="@{viewmodel.totalNumCnfAvailable != null || viewmodel.totalQtaAvailable != null ? View.VISIBLE : View.GONE}"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + android:layout_marginTop="8dp" + android:orientation="horizontal" + android:weightSum="2"> - - + android:layout_weight="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? 1f : 2f}" + android:enabled="@{view.enabledChangePartitaMag}" + android:paddingEnd="4dp" + android:visibility="@{viewmodel.canPartitaMagBeChanged() || viewmodel.partitaMag != null ? View.VISIBLE : View.GONE}" + tools:layout_weight="1"> - + + + + + android:layout_weight="1" + android:enabled="@{view.enabledChangePartitaMag}" + android:visibility="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? View.VISIBLE : View.GONE}"> - + android:focusableInTouchMode="false" + android:hint="@string/expire_date" + android:inputType="text" + app:binding="@{view.currentDataScad}" + app:parentView="@{view}" + app:warningOnOldDates="@{true}" /> - - - - - - - - - - - - - - - - - - + + android:layout_marginTop="8dp" + android:orientation="horizontal" + android:weightSum="3"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:paddingEnd="4dp" + tools:layout_weight="1"> - + + - - - - - - - + + + + + + + tools:layout_weight="1"> - + - - - - - - - - - - - + - + - - - + android:layout_marginTop="8dp" + android:orientation="horizontal" + android:visibility="@{viewmodel.mtbAart.isFlagQtaCnfFissaBoolean() ? View.GONE : View.VISIBLE}" + android:weightSum="3"> - + android:focusableInTouchMode="false" + android:paddingEnd="4dp" + tools:layout_weight="1"> - + - + - + + + + + + + tools:enabled="false" + tools:layout_weight="1"> - + - + + + + + + android:layout_marginTop="8dp" + android:orientation="horizontal"> - + android:enabled="@{view.enabledNotes}" + android:visibility="@{view.enabledNotes ? View.VISIBLE : View.GONE }"> - + + + - + - - - + android:layout_margin="16dp" + android:gravity="center_horizontal" + android:orientation="horizontal" + android:weightSum="1"> - + android:layout_marginStart="0dp" + android:layout_marginEnd="4dp" + android:layout_weight="0.4" + android:onClick="@{() -> view.saveAndCloseLU()}" + android:text="@string/action_close_ul" + app:strokeColor="@color/colorPrimary" + app:visibility="@{view.enabledLUCloseButton}" /> - + + + + + + + - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index c801f0ae..1ed3a1d1 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -30,6 +30,9 @@ Resetta Evasi UL + Bilancia UL + Dispositivo bluetooth + Seleziona un dispositivo bluetooth già associato Questi permessi sono necessari al funzionamento dell\'app Picking non disponibile diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1a3ecbc5..1d061efb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -81,6 +81,9 @@ Insert info about LU TYPE and NET / GROSS weight Info LU\'s info + Pallet scale + Bluetooth device + Please select a paired bluetooth device Continue diff --git a/app/src/main/res/xml/app_preferences.xml b/app/src/main/res/xml/app_preferences.xml index 6106853a..3e312aac 100644 --- a/app/src/main/res/xml/app_preferences.xml +++ b/app/src/main/res/xml/app_preferences.xml @@ -1,42 +1,42 @@ - + + app:title="@string/accettazione_title_fragment" + app:iconSpaceReserved="false"> - + + + + app:title="@string/vendita_title_fragment" + app:iconSpaceReserved="false"> - + - - - - + + - - - - - - - + - - - - - - - + \ No newline at end of file diff --git a/barcode_base_android_library/build.gradle b/barcode_base_android_library/build.gradle index 82f65226..b13e7245 100644 --- a/barcode_base_android_library/build.gradle +++ b/barcode_base_android_library/build.gradle @@ -22,11 +22,11 @@ android { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } - - lintOptions { + lint { abortOnError false } + } dependencies { diff --git a/build.gradle b/build.gradle index dfb93232..c6257b55 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.1.3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.10' diff --git a/dynamic__base/build.gradle b/dynamic__base/build.gradle index e3f751bf..ae988304 100644 --- a/dynamic__base/build.gradle +++ b/dynamic__base/build.gradle @@ -13,10 +13,10 @@ android { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } - - lintOptions { + lint { abortOnError false } + } dependencies { diff --git a/ext_sources/ICONS/icons8-bilancia-96.png b/ext_sources/ICONS/icons8-bilancia-96.png new file mode 100644 index 00000000..f5c5ca11 Binary files /dev/null and b/ext_sources/ICONS/icons8-bilancia-96.png differ diff --git a/honeywellscannerlibrary/build.gradle b/honeywellscannerlibrary/build.gradle index 48543a16..43494729 100644 --- a/honeywellscannerlibrary/build.gradle +++ b/honeywellscannerlibrary/build.gradle @@ -22,10 +22,10 @@ android { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } - - lintOptions { + lint { abortOnError false } + } dependencies { diff --git a/keyobardemulatorscannerlibrary/build.gradle b/keyobardemulatorscannerlibrary/build.gradle index 57f18f1d..2b890c40 100644 --- a/keyobardemulatorscannerlibrary/build.gradle +++ b/keyobardemulatorscannerlibrary/build.gradle @@ -22,10 +22,10 @@ android { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } - - lintOptions { + lint { abortOnError false } + } dependencies { diff --git a/pointmobilescannerlibrary/build.gradle b/pointmobilescannerlibrary/build.gradle index 51b0f771..bc2847d7 100644 --- a/pointmobilescannerlibrary/build.gradle +++ b/pointmobilescannerlibrary/build.gradle @@ -21,10 +21,10 @@ android { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } - - lintOptions { + lint { abortOnError false } + } dependencies { diff --git a/zebrascannerlibrary/build.gradle b/zebrascannerlibrary/build.gradle index c77b13fc..961758a6 100644 --- a/zebrascannerlibrary/build.gradle +++ b/zebrascannerlibrary/build.gradle @@ -21,10 +21,10 @@ android { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } - - lintOptions { + lint { abortOnError false } + } dependencies {