Implementata comunicazione con dispositivo bluetooth in fase di rientro merce da lav.

Rimosso printerName e quantity dalla stampa delle SSCC.
This commit is contained in:
Giuseppe Scorrano 2022-04-11 12:08:58 +02:00
parent 6806290d98
commit 852edf1b13
37 changed files with 337 additions and 131 deletions

View File

@ -78,11 +78,11 @@ android {
} }
} }
lintOptions {
abortOnError false
}
dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti"] dynamicFeatures = [":dynamic__base", ":dynamic_vgalimenti"]
lint {
abortOnError false
}
} }
@ -113,6 +113,7 @@ dependencies {
implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'androidx.preference:preference-ktx:1.2.0' 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.okhttp3:okhttp:4.9.1'
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson: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" // testImplementation "org.junit.jupiter:junit-jupiter-api:5.8.1"
// androidTestImplementation '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' // 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 { repositories {

View File

@ -8,6 +8,7 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<application <application
android:name=".MainApplication" android:name=".MainApplication"

View File

@ -0,0 +1,10 @@
package it.integry.integrywmsnative.core.exception;
public class BluetoothConnectionException extends Exception {
public BluetoothConnectionException(String btDeviceName, String btDeviceMac, Throwable th) {
super("Impossibile collegarsi al dispositivo bluetooth: " + btDeviceName + " [" + btDeviceMac + "]. Riprovare.");
initCause(th);
}
}

View File

@ -161,7 +161,15 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
service.getArticoliFromOrdini(codMdep, getPickingListDTOs).enqueue(new Callback<>() { service.getArticoliFromOrdini(codMdep, getPickingListDTOs).enqueue(new Callback<>() {
@Override @Override
public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> response) { public void onResponse(Call<ServiceRESTResponse<List<SitArtOrdDTO>>> call, Response<ServiceRESTResponse<List<SitArtOrdDTO>>> 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 @Override
@ -189,7 +197,7 @@ public class OrdiniRESTConsumer extends _BaseRESTConsumer {
" AND mtb_colt.ser_collo = mtb_colr.ser_collo " + " AND mtb_colt.ser_collo = mtb_colr.ser_collo " +
" AND mtb_colt.data_collo = mtb_colr.data_collo " + " AND mtb_colt.data_collo = mtb_colr.data_collo " +
" AND mtb_colt.num_collo = mtb_colr.num_collo " + " AND mtb_colt.num_collo = mtb_colr.num_collo " +
" WHERE " + whereCondGestione + " WHERE " + whereCondGestione +
" AND mtb_colt.segno = " + UtilityDB.valueToString(segno) + " " + " AND mtb_colt.segno = " + UtilityDB.valueToString(segno) + " " +
" AND mtb_colt.data_doc IS NULL AND "; " AND mtb_colt.data_doc IS NULL AND ";

View File

@ -9,7 +9,6 @@ import java.util.List;
import javax.inject.Singleton; import javax.inject.Singleton;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException; import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt; 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<Exception> onFailed) { public void printCollo(MtbColt testataColloToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
// if (BuildConfig.DEBUG) { // if (BuildConfig.DEBUG) {
// onComplete.run(); // onComplete.run();
@ -64,9 +63,6 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer {
PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class); PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class);
Call<ServiceRESTResponse<Object>> callable = null; Call<ServiceRESTResponse<Object>> callable = null;
if (printerType != null)
callable = printerService.printCollo(printerType.toString(), testataColloToPrint);
else
callable = printerService.printCollo(testataColloToPrint); callable = printerService.printCollo(testataColloToPrint);
callable.enqueue(new Callback<>() { callable.enqueue(new Callback<>() {

View File

@ -26,13 +26,6 @@ public interface PrinterRESTConsumerService {
@Body JasperDTO jasperDTO @Body JasperDTO jasperDTO
); );
@POST("wms/printEtichettaSSCC")
Call<ServiceRESTResponse<Object>> printCollo(
@Query("printerType") String printerType,
@Body MtbColt mtbColtToPrint
);
@POST("wms/printEtichettaSSCC") @POST("wms/printEtichettaSSCC")
Call<ServiceRESTResponse<Object>> printCollo( Call<ServiceRESTResponse<Object>> printCollo(
@Body MtbColt mtbColtToPrint @Body MtbColt mtbColtToPrint

View File

@ -3,16 +3,15 @@ package it.integry.integrywmsnative.core.utility;
import android.Manifest; import android.Manifest;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Build; import android.os.Build;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import it.integry.integrywmsnative.SplashActivity; import it.integry.integrywmsnative.SplashActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@ -31,6 +30,11 @@ public class PermissionsHelper {
if(Build.VERSION.SDK_INT >= 23) { if(Build.VERSION.SDK_INT >= 23) {
//permissionsToAsk.add(Manifest.permission.REQUEST_INSTALL_PACKAGES); //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()]; String[] permissionArray = new String[permissionsToAsk.size()];
permissionsToAsk.toArray(permissionArray); permissionsToAsk.toArray(permissionArray);

View File

@ -44,7 +44,6 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager; 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.rest.model.VersamentoAutomaticoULResponseDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
@ -732,7 +731,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
Intent myIntent = ListaBancaliActivity.createIntent(this, Intent myIntent = ListaBancaliActivity.createIntent(this,
Stream.of(mtbColts).map(x -> (MtbColt) x).toList(), Stream.of(mtbColts).map(x -> (MtbColt) x).toList(),
input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(), input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(),
PrinterRESTConsumer.Type.SECONDARIA,
ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO)); ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO));
this.startActivityForResult(myIntent, PICK_UL_REQUEST); this.startActivityForResult(myIntent, PICK_UL_REQUEST);
} }

View File

@ -837,7 +837,6 @@ public class AccettazionePickingViewModel {
cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum()); cloneMtbColt.setGestione(cloneMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE ? GestioneEnum.PRODUZIONE : cloneMtbColt.getGestioneEnum());
this.mPrinterRESTConsumer.printCollo( this.mPrinterRESTConsumer.printCollo(
PrinterRESTConsumer.Type.SECONDARIA,
cloneMtbColt, cloneMtbColt,
() -> { () -> {
this.sendLUSuccessfullyPrinted(); this.sendLUSuccessfullyPrinted();

View File

@ -45,16 +45,14 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
public ObservableField<Boolean> recoverFabMenuVisible = new ObservableField<>(false); public ObservableField<Boolean> recoverFabMenuVisible = new ObservableField<>(false);
private String mReportName; private String mReportName;
private PrinterRESTConsumer.Type mPrinterType;
private static class Key { private static class Key {
private static final String MtbColtKey = "mtbColtKey"; private static final String MtbColtKey = "mtbColtKey";
private static final String CanRecoverUL = "canRecoverUL"; private static final String CanRecoverUL = "canRecoverUL";
private static final String PrinterType = "printerType";
private static final String ReportName = "reportName"; 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); Intent myIntent = new Intent(context, ContenutoBancaleActivity.class);
String keyMtbColt = DataCache.addItem(item); String keyMtbColt = DataCache.addItem(item);
@ -63,9 +61,6 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
String keyCanRecoverUL = DataCache.addItem(canRecoverUl); String keyCanRecoverUL = DataCache.addItem(canRecoverUl);
myIntent.putExtra(Key.CanRecoverUL, keyCanRecoverUL); myIntent.putExtra(Key.CanRecoverUL, keyCanRecoverUL);
String keyPrinterType = DataCache.addItem(printerType);
myIntent.putExtra(Key.PrinterType, keyPrinterType);
String keyReportName = DataCache.addItem(reportName); String keyReportName = DataCache.addItem(reportName);
myIntent.putExtra(Key.ReportName, keyReportName); myIntent.putExtra(Key.ReportName, keyReportName);
@ -79,7 +74,6 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
boolean canRecoverUL = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL)); boolean canRecoverUL = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mtbColt.set(DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtKey))); mtbColt.set(DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtKey)));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName)); mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType));
bindings = DataBindingUtil.setContentView(this, R.layout.activity_contenuto_bancale); bindings = DataBindingUtil.setContentView(this, R.layout.activity_contenuto_bancale);
@ -97,7 +91,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mViewModel.setListener(this); mViewModel.setListener(this);
mViewModel.init(mtbColt.get(), mPrinterType, mReportName); mViewModel.init(mtbColt.get(), mReportName);
recoverFabMenuVisible.set(canRecoverUL); recoverFabMenuVisible.set(canRecoverUL);
@ -143,7 +137,7 @@ public class ContenutoBancaleActivity extends BaseActivity implements ContenutoB
this.bindings.contenutoBancaleFab.close(true); this.bindings.contenutoBancaleFab.close(true);
this.onLoadingStarted(); this.onLoadingStarted();
try { try {
this.mPrinterRESTConsumer.printCollo(mPrinterType, mtbColt.get(), this.mPrinterRESTConsumer.printCollo(mtbColt.get(),
() -> { () -> {
this.onLoadingEnded(); this.onLoadingEnded();

View File

@ -5,7 +5,6 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
public class ContenutoBancaleViewModel { public class ContenutoBancaleViewModel {
@ -19,7 +18,7 @@ public class ContenutoBancaleViewModel {
this.mDepositoRESTConsumer = depositoRESTConsumer; this.mDepositoRESTConsumer = depositoRESTConsumer;
} }
public void init(MtbColt mtbColt, PrinterRESTConsumer.Type printerType, String defaultReportName) { public void init(MtbColt mtbColt, String defaultReportName) {
} }

View File

@ -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.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn; import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn;
import it.integry.integrywmsnative.core.model.MtbColt; 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.databinding.ActivityListaBancaliBinding;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity;
import it.integry.integrywmsnative.gest.lista_bancali.ui.ListaColliMainListAdapter; 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 class Key {
private static final String MtbColtsKey = "mtbColtsKey"; private static final String MtbColtsKey = "mtbColtsKey";
private static final String CanRecoverUL = "canRecoverUL"; private static final String CanRecoverUL = "canRecoverUL";
private static final String PrinterType = "printerType";
private static final String ReportName = "reportName"; private static final String ReportName = "reportName";
private static final String FlagOnlyResiduo = "flagOnlyResiduo"; private static final String FlagOnlyResiduo = "flagOnlyResiduo";
} }
@ -43,7 +41,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
private final ObservableArrayList<MtbColt> mtbColts = new ObservableArrayList<>(); private final ObservableArrayList<MtbColt> mtbColts = new ObservableArrayList<>();
private RunnableArgsWithReturn<MtbColt, Boolean> mCanRecoverUl; private RunnableArgsWithReturn<MtbColt, Boolean> mCanRecoverUl;
private PrinterRESTConsumer.Type mPrinterType;
private String mReportName; private String mReportName;
private boolean mFlagOnlyResiduo; private boolean mFlagOnlyResiduo;
@ -51,19 +48,19 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, String reportName) { public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, String reportName) {
return createIntent(context, items, canRecoverUlAction, printerType, true, reportName); return createIntent(context, items, canRecoverUlAction, true, reportName);
} }
public static Intent createIntent(Context context, List<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) { public static Intent createIntent(Context context, List<MtbColt> items, boolean canRecoverUl, boolean onlyResiduo) {
return createIntent(context, items, input -> canRecoverUl, printerType, onlyResiduo); return createIntent(context, items, input -> canRecoverUl, onlyResiduo);
} }
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) { public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, boolean onlyResiduo) {
return createIntent(context, items, canRecoverUlAction, printerType, onlyResiduo, null); return createIntent(context, items, canRecoverUlAction, onlyResiduo, null);
} }
public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, PrinterRESTConsumer.Type printerType, boolean onlyResiduo, String reportName) { public static Intent createIntent(Context context, List<MtbColt> items, RunnableArgsWithReturn<MtbColt, Boolean> canRecoverUlAction, boolean onlyResiduo, String reportName) {
Intent myIntent = new Intent(context, ListaBancaliActivity.class); Intent myIntent = new Intent(context, ListaBancaliActivity.class);
String mtbColtsKey = DataCache.addItem(items); String mtbColtsKey = DataCache.addItem(items);
@ -72,9 +69,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
String canRecoverULKey = DataCache.addItem(canRecoverUlAction); String canRecoverULKey = DataCache.addItem(canRecoverUlAction);
myIntent.putExtra(Key.CanRecoverUL, canRecoverULKey); myIntent.putExtra(Key.CanRecoverUL, canRecoverULKey);
String printerTypeKey = DataCache.addItem(printerType);
myIntent.putExtra(Key.PrinterType, printerTypeKey);
String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo); String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo);
myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey); myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey);
@ -97,7 +91,6 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL)); mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName)); mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo)); mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo));
@ -138,7 +131,7 @@ public class ListaBancaliActivity extends BaseActivity implements ListaBancaliVi
} }
public void startContenutoBancaleActivity(MtbColt item){ 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); startActivityForResult(myIntent, PICK_UL_REQUEST);
} }

View File

@ -218,7 +218,6 @@ public class PickingResiViewModel {
private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) { private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
this.mPrinterRESTConsumer.printCollo( this.mPrinterRESTConsumer.printCollo(
PrinterRESTConsumer.Type.PRIMARIA,
mtbColtToPrint, mtbColtToPrint,
onComplete, onFailed); onComplete, onFailed);

View File

@ -291,7 +291,6 @@ public class ProdRecuperoMaterialeViewModel {
private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onAbort) { private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onAbort) {
this.mPrinterRESTConsumer.printCollo( this.mPrinterRESTConsumer.printCollo(
PrinterRESTConsumer.Type.PRIMARIA,
mtbColtToPrint, mtbColtToPrint,
onComplete, onAbort); onComplete, onAbort);

View File

@ -117,10 +117,12 @@ public class ProdRientroMerceFragment extends BaseFragment implements ITitledFra
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
for (Runnable onPreDestroy : for (Runnable onPreDestroy : mOnPreDestroyList) {
mOnPreDestroyList) {
onPreDestroy.run(); onPreDestroy.run();
} }
mProdRientroMerceOrderDetailFragment.onDetach();
mProdRientroMerceOrderListFragment.onDetach();
} }
@Override @Override

View File

@ -8,8 +8,8 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.MesRESTConsumer; 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.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.gest.spedizione.exceptions.OrdersLoadException;
public class ProdRientroMerceViewModel { public class ProdRientroMerceViewModel {
@ -31,7 +31,7 @@ public class ProdRientroMerceViewModel {
this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> { this.mMesRESTConsumer.getOrdiniLavorazione("I", null, ordiniLavorazioneList -> {
this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList); this.mOrdiniLavorazioneAperti.postValue(ordiniLavorazioneList);
this.sendOnLoadingEnded(); this.sendOnLoadingEnded();
}, ex -> this.sendError(new DocumentsLoadException(ex))); }, ex -> this.sendError(new OrdersLoadException(ex)));
} }
public MutableLiveData<List<OrdineLavorazioneDTO>> getOrdiniLavorazioneAperti() { public MutableLiveData<List<OrdineLavorazioneDTO>> getOrdiniLavorazioneAperti() {

View File

@ -1,10 +1,13 @@
package it.integry.integrywmsnative.gest.prod_rientro_merce.order_detail; 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.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil; import androidx.databinding.DataBindingUtil;
@ -12,10 +15,13 @@ import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField; import androidx.databinding.ObservableField;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.harrysoft.androidbluetoothserial.BluetoothManager;
import com.harrysoft.androidbluetoothserial.BluetoothSerialDevice;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
@ -23,8 +29,11 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R; 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.AtomicBigDecimal;
import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs; 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.core.utility.UtilityDB;
import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailBinding; import it.integry.integrywmsnative.databinding.FragmentProdRientroMerceOrderDetailBinding;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO; 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.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdDTO; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdDTO;
import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.DialogInputLUProdView;
@ -64,6 +74,9 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
private RunnableArgs<MtbColt> onMtbColtClicked; private RunnableArgs<MtbColt> onMtbColtClicked;
private BluetoothManager bluetoothManager;
private BluetoothSerialDevice mConnectedBluetoothDevice;
public ObservableField<BigDecimal> sumLUNumber = new ObservableField<>(BigDecimal.ZERO); public ObservableField<BigDecimal> sumLUNumber = new ObservableField<>(BigDecimal.ZERO);
public ObservableField<BigDecimal> sumColliNumber = new ObservableField<>(BigDecimal.ZERO); public ObservableField<BigDecimal> sumColliNumber = new ObservableField<>(BigDecimal.ZERO);
@ -103,6 +116,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList); this.mViewModel.mtbColtsOfOrder.observe(getViewLifecycleOwner(), this::refreshList);
this.initRecyclerView(); this.initRecyclerView();
this.initULScaleBluetoothConnection();
return mBindings.getRoot(); return mBindings.getRoot();
} }
@ -121,10 +135,52 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
mBindings.mainList.setAdapter(mAdapter); mBindings.mainList.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(item -> { 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) { public void setOrder(OrdineLavorazioneDTO order) {
currentOrder.postValue(order); currentOrder.postValue(order);
mBindings.invalidateAll(); mBindings.invalidateAll();
@ -134,7 +190,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
} }
private void refreshList(List<MtbColt> mtbColts) { private void refreshList(List<MtbColt> mtbColts) {
if(mtbColts != null) { if (mtbColts != null) {
sumLUNumber.set(new BigDecimal(mtbColts.size())); sumLUNumber.set(new BigDecimal(mtbColts.size()));
AtomicBigDecimal sumColli = new AtomicBigDecimal(BigDecimal.ZERO); 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) " + " AND (data_fine IS NULL OR last_step = id_step) " +
"ORDER BY id_step DESC"; "ORDER BY id_step DESC";
mSystemRESTConsumer.<List<DtbOrdSteps>>processSql(sql, new TypeToken<ArrayList<DtbOrdSteps>>() {}.getType(), dtbOrdStep -> { mSystemRESTConsumer.<List<DtbOrdSteps>>processSql(sql, new TypeToken<ArrayList<DtbOrdSteps>>() {
}.getType(), dtbOrdStep -> {
this.onLoadingEnded(); this.onLoadingEnded();
@ -203,7 +260,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
DialogInputLUProdView DialogInputLUProdView
.newInstance(dialogInputLUProdDTO, resultDTO -> { .newInstance(mConnectedBluetoothDevice.toSimpleDeviceInterface(), dialogInputLUProdDTO, resultDTO -> {
ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO = new ProdRientroMerceOrderDetailPickedQuantityDTO() ProdRientroMerceOrderDetailPickedQuantityDTO pickedQuantityDTO = new ProdRientroMerceOrderDetailPickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf()) .setNumCnf(resultDTO.getNumCnf())
.setPesoCollo(resultDTO.getPesoCollo()) .setPesoCollo(resultDTO.getPesoCollo())
@ -255,8 +312,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
default: default:
return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp); return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp);
} }
} } else
else
return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp); return ContextCompat.getDrawable(requireActivity(), R.drawable.ic_clock_circle_outline_24dp);
} }
@ -271,8 +327,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
default: default:
return ContextCompat.getColor(requireActivity(), R.color.blue_800); return ContextCompat.getColor(requireActivity(), R.color.blue_800);
} }
} } else
else
return ContextCompat.getColor(requireActivity(), R.color.blue_800); return ContextCompat.getColor(requireActivity(), R.color.blue_800);
} }
@ -287,8 +342,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
default: default:
return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text); return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text);
} }
} } else
else
return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text); return ContextCompat.getDrawable(requireActivity(), R.drawable.label_primary_text);
} }
@ -303,8 +357,7 @@ public class ProdRientroMerceOrderDetailFragment extends BaseFragment implements
default: default:
return ContextCompat.getColor(requireActivity(), R.color.blue_800); return ContextCompat.getColor(requireActivity(), R.color.blue_800);
} }
} } else
else
return ContextCompat.getColor(requireActivity(), R.color.blue_800); return ContextCompat.getColor(requireActivity(), R.color.blue_800);
} }
} }

View File

@ -494,7 +494,7 @@ public class RettificaGiacenzeViewModel {
onComplete.run(); onComplete.run();
} else { } else {
this.mPrinterRESTConsumer.printCollo(null, mCurrentMtbColt, () -> { this.mPrinterRESTConsumer.printCollo(mCurrentMtbColt, () -> {
this.sendLUSuccessfullyPrinted(); this.sendLUSuccessfullyPrinted();
onComplete.run(); onComplete.run();
}, ex -> this.sendLUPrintError(ex, onComplete)); }, ex -> this.sendLUPrintError(ex, onComplete));

View File

@ -1,20 +1,34 @@
package it.integry.integrywmsnative.gest.settings; package it.integry.integrywmsnative.gest.settings;
import android.bluetooth.BluetoothDevice;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.widget.AppCompatTextView; import androidx.appcompat.widget.AppCompatTextView;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceFragmentCompat;
import com.annimon.stream.Stream;
import com.harrysoft.androidbluetoothserial.BluetoothManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment; 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<Runnable> onPreDestroyList = new ArrayList<>(); private final ArrayList<Runnable> onPreDestroyList = new ArrayList<>();
public static final String KEY_PALLET_BT_DEVICE = "pallet_scale_bt_device";
private Collection<BluetoothDevice> btPairedDevices;
@Override @Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) { public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.settings_category).toString()); titleText.setText(context.getText(R.string.settings_category).toString());
@ -23,8 +37,52 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
@Override @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.app_preferences, 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 @Override
public void addOnPreDestroy(Runnable onPreDestroy) { public void addOnPreDestroy(Runnable onPreDestroy) {
onPreDestroyList.add(onPreDestroy); onPreDestroyList.add(onPreDestroy);
@ -34,9 +92,34 @@ public class MainSettingsFragment extends PreferenceFragmentCompat implements IT
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
for (Runnable onPreDestroy : for (Runnable onPreDestroy : onPreDestroyList) {
onPreDestroyList) {
onPreDestroy.run(); 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);
}
} }

View File

@ -44,7 +44,6 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione; import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.model.MtbPartitaMag;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; 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.OrdineUscitaInevasoDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO; import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager; 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.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding; import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding;
import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; 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.dialogs.row_info.BaseDialogRowInfoView;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; 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.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.DialogConsts; import it.integry.integrywmsnative.view.dialogs.DialogConsts;
@ -669,7 +668,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
ArrayList<MtbColt> createdMtbColts = this.mViewmodel.getCreatedMtbColts(); ArrayList<MtbColt> 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); this.startActivityForResult(myIntent, PICK_UL_REQUEST);
} }

View File

@ -1722,26 +1722,25 @@ public class SpedizioneViewModel {
if (!shouldPrint) { if (!shouldPrint) {
onComplete.run(); onComplete.run();
} else { } 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<MtbColt> sourceMtbColts, Runnable onComplete, RunnableArgs<Exception> onAbort) { private void cyclicPrint(@NotNull Iterator<MtbColt> sourceMtbColts, Runnable onComplete, RunnableArgs<Exception> onAbort) {
if (sourceMtbColts.hasNext()) { if (sourceMtbColts.hasNext()) {
singlePrint(printerType, sourceMtbColts.next(), () -> { singlePrint(sourceMtbColts.next(), () -> {
cyclicPrint(printerType, sourceMtbColts, onComplete, onAbort); cyclicPrint(sourceMtbColts, onComplete, onAbort);
}, onAbort); }, onAbort);
} else { } else {
onComplete.run(); onComplete.run();
} }
} }
private void singlePrint(PrinterRESTConsumer.Type printerType, MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) { private void singlePrint(MtbColt mtbColtToPrint, Runnable onComplete, RunnableArgs<Exception> onFailed) {
this.mPrinterRESTConsumer.printCollo( this.mPrinterRESTConsumer.printCollo(
printerType,
mtbColtToPrint, mtbColtToPrint,
onComplete, onComplete,
onFailed); onFailed);

View File

@ -22,6 +22,7 @@ import androidx.fragment.app.DialogFragment;
import com.annimon.stream.Optional; import com.annimon.stream.Optional;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import com.google.android.material.textfield.TextInputLayout; import com.google.android.material.textfield.TextInputLayout;
import com.harrysoft.androidbluetoothserial.SimpleBluetoothDeviceInterface;
import com.pedromassango.doubleclick.DoubleClick; import com.pedromassango.doubleclick.DoubleClick;
import com.pedromassango.doubleclick.DoubleClickListener; import com.pedromassango.doubleclick.DoubleClickListener;
@ -52,10 +53,13 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
@Inject @Inject
DialogInputLUProdViewModel mViewModel; DialogInputLUProdViewModel mViewModel;
private final SimpleBluetoothDeviceInterface mBluetoothDeviceInterface;
private final DialogInputLUProdDTO mDialogInputLUProdDTO; private final DialogInputLUProdDTO mDialogInputLUProdDTO;
private final RunnableArgs<DialogInputLUProdResultDTO> mOnComplete; private final RunnableArgs<DialogInputLUProdResultDTO> mOnComplete;
private final Runnable mOnAbort; private final Runnable mOnAbort;
public ObservableField<Boolean> enabledBluetoothDevice = new ObservableField<>();
public ObservableField<String> selectedMtbTcol = new ObservableField<>(); public ObservableField<String> selectedMtbTcol = new ObservableField<>();
public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>(); public ObservableField<DialogInputLUProdTipoColloListModel> currentMtbTCol = new ObservableField<>();
@ -87,13 +91,14 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null; private DialogInputLUProdTipoColloAdapter codTcolArrayAdapter = null;
private DialogInputLULineeProdAdapter lineeProdArrayAdapter = null; private DialogInputLULineeProdAdapter lineeProdArrayAdapter = null;
public static DialogInputLUProdView newInstance(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) { public static DialogInputLUProdView newInstance(SimpleBluetoothDeviceInterface bluetoothDeviceInterface, @NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
return new DialogInputLUProdView(dialogInputLUProdDTO, onComplete, onAbort); return new DialogInputLUProdView(bluetoothDeviceInterface, dialogInputLUProdDTO, onComplete, onAbort);
} }
private DialogInputLUProdView(@NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) { private DialogInputLUProdView(SimpleBluetoothDeviceInterface bluetoothDeviceInterface, @NotNull DialogInputLUProdDTO dialogInputLUProdDTO, @NotNull RunnableArgs<DialogInputLUProdResultDTO> onComplete, @NotNull Runnable onAbort) {
super(); super();
this.mBluetoothDeviceInterface = bluetoothDeviceInterface;
this.mDialogInputLUProdDTO = dialogInputLUProdDTO; this.mDialogInputLUProdDTO = dialogInputLUProdDTO;
this.mOnComplete = onComplete; this.mOnComplete = onComplete;
this.mOnAbort = onAbort; this.mOnAbort = onAbort;
@ -104,7 +109,6 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
public void onCreate(@Nullable Bundle savedInstanceState) { public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog); setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
} }
@ -142,6 +146,13 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
super.onStart(); super.onStart();
this.init(); 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.setListener(this);
this.mViewModel.init(mDialogInputLUProdDTO.getCodJfasParent()); this.mViewModel.init(mDialogInputLUProdDTO.getCodJfasParent());
} }
@ -385,10 +396,37 @@ public class DialogInputLUProdView extends BaseDialogFragment implements DialogI
this.onDataChanged(); 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() { public void save() {
if (this.mViewModel.validate()) { if (this.mViewModel.validate()) {
this.mOnComplete.run(this.mViewModel.getResult()); this.mOnComplete.run(this.mViewModel.getResult());
if(mBluetoothDeviceInterface != null)
mBluetoothDeviceInterface.setListeners(null, null, null);
dismiss(); dismiss();
} }
} }

View File

@ -158,8 +158,8 @@ public class DialogInputLUProdViewModel {
this.mListener.onDataChanged(); this.mListener.onDataChanged();
} }
public void setPesoNetto(BigDecimal qtaTot) { public void setPesoNetto(BigDecimal pesoNetto) {
this.internalPesoNetto = qtaTot; this.internalPesoNetto = pesoNetto;
} }
public void setTaraPed(BigDecimal taraPed) { public void setTaraPed(BigDecimal taraPed) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 889 B

View File

@ -65,6 +65,18 @@
android:src="@drawable/ic_erase_96" android:src="@drawable/ic_erase_96"
android:tint="@android:color/white" /> android:tint="@android:color/white" />
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/read_weight_form_device"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:adjustViewBounds="true"
android:backgroundTint="@android:color/transparent"
android:onClick="@{() -> view.readWeightFromDevice()}"
android:scaleType="fitCenter"
android:src="@drawable/ic_scale"
android:tint="@android:color/white" />
</androidx.appcompat.widget.Toolbar> </androidx.appcompat.widget.Toolbar>

View File

@ -52,6 +52,18 @@
android:onClick="@{() -> view.resetValues()}" android:onClick="@{() -> view.resetValues()}"
android:tint="@android:color/white"/> android:tint="@android:color/white"/>
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/read_weight_form_device"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_gravity="end"
android:adjustViewBounds="true"
android:backgroundTint="@android:color/transparent"
android:onClick="@{() -> view.readWeightFromDevice()}"
android:scaleType="fitCenter"
android:src="@drawable/ic_scale"
android:tint="@android:color/white" />
</androidx.appcompat.widget.Toolbar> </androidx.appcompat.widget.Toolbar>

View File

@ -30,6 +30,9 @@
<string name="reset">Resetta</string> <string name="reset">Resetta</string>
<string name="dispatched_abbr">Evasi</string> <string name="dispatched_abbr">Evasi</string>
<string name="logistic_unit">UL</string> <string name="logistic_unit">UL</string>
<string name="pallet_scale">Bilancia UL</string>
<string name="pallet_scale_bt_device_selection_title">Dispositivo bluetooth</string>
<string name="pallet_scale_bt_device_selection_info">Seleziona un dispositivo bluetooth già associato</string>
<string name="permission_request_message">Questi permessi sono necessari al funzionamento dell\'app</string> <string name="permission_request_message">Questi permessi sono necessari al funzionamento dell\'app</string>
<string name="picking_not_available">Picking non disponibile</string> <string name="picking_not_available">Picking non disponibile</string>

View File

@ -81,6 +81,9 @@
<string name="dialog_input_peso_lu_description">Insert info about LU TYPE and NET / GROSS weight</string> <string name="dialog_input_peso_lu_description">Insert info about LU TYPE and NET / GROSS weight</string>
<string name="info">Info</string> <string name="info">Info</string>
<string name="lu_info">LU\'s info</string> <string name="lu_info">LU\'s info</string>
<string name="pallet_scale">Pallet scale</string>
<string name="pallet_scale_bt_device_selection_title">Bluetooth device</string>
<string name="pallet_scale_bt_device_selection_info">Please select a paired bluetooth device</string>
<string name="action_continue">Continue</string> <string name="action_continue">Continue</string>

View File

@ -1,42 +1,42 @@
<androidx.preference.PreferenceScreen <androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
xmlns:app="http://schemas.android.com/apk/res-auto">
<PreferenceCategory <PreferenceCategory
app:title="@string/accettazione_title_fragment"/> app:title="@string/accettazione_title_fragment"
app:iconSpaceReserved="false">
<SwitchPreferenceCompat <SwitchPreferenceCompat
app:key="picking_ingresso_enable_sec_unt_mis" app:iconSpaceReserved="false"
app:title="Abilita seconda unità di misura" app:defaultValue="true"
app:defaultValue="true"/> app:key="picking_ingresso_enable_sec_unt_mis"
app:singleLineTitle="false"
app:title="Abilita seconda unità di misura" />
</PreferenceCategory>
<PreferenceCategory <PreferenceCategory
app:title="@string/vendita_title_fragment"/> app:title="@string/vendita_title_fragment"
app:iconSpaceReserved="false">
<SwitchPreferenceCompat <SwitchPreferenceCompat
app:key="picking_uscita_enable_quantity_reset" app:iconSpaceReserved="false"
app:title="Resetta le quantità ad ogni Chiudi UL" app:defaultValue="true"
app:defaultValue="true"/> app:singleLineTitle="false"
app:key="picking_uscita_enable_quantity_reset"
app:title="Resetta le quantità ad ogni Chiudi UL" />
<!-- <Preference--> </PreferenceCategory>
<!-- app:key="feedback"-->
<!-- app:title="Send feedback"-->
<!-- app:summary="Report technical issues or suggest new features"/>-->
<PreferenceCategory
app:title="@string/pallet_scale"
app:iconSpaceReserved="false">
<!-- <ListPreference--> <ListPreference
<!-- app:key="check_in_printer"--> app:iconSpaceReserved="false"
<!-- app:title="@string/check_in_printer"--> app:dialogTitle="@string/pallet_scale"
<!-- app:summary="%s"--> app:key="pallet_scale_bt_device"
<!-- app:entries="@array/printerTypes"--> app:summary="@string/pallet_scale_bt_device_selection_info"
<!-- app:entryValues="@array/printerTypes"--> app:title="@string/pallet_scale_bt_device_selection_title" />
<!-- app:defaultValue="0" />-->
<!-- <ListPreference--> </PreferenceCategory>
<!-- app:key="check_out_printer"-->
<!-- app:title="@string/check_out_printer"-->
<!-- app:summary="%s"-->
<!-- app:entries="@array/printerTypes"-->
<!-- app:entryValues="@array/printerTypes"-->
<!-- app:defaultValue="0" />-->
</androidx.preference.PreferenceScreen> </androidx.preference.PreferenceScreen>

View File

@ -22,11 +22,11 @@ android {
sourceCompatibility JavaVersion.VERSION_11 sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11
} }
lint {
lintOptions {
abortOnError false abortOnError false
} }
} }
dependencies { dependencies {

View File

@ -10,7 +10,7 @@ buildscript {
mavenCentral() mavenCentral()
} }
dependencies { 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 "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.10' classpath 'com.google.gms:google-services:4.3.10'

View File

@ -13,10 +13,10 @@ android {
sourceCompatibility JavaVersion.VERSION_11 sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11
} }
lint {
lintOptions {
abortOnError false abortOnError false
} }
} }
dependencies { dependencies {

Binary file not shown.

After

Width:  |  Height:  |  Size: 889 B

View File

@ -22,10 +22,10 @@ android {
sourceCompatibility JavaVersion.VERSION_11 sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11
} }
lint {
lintOptions {
abortOnError false abortOnError false
} }
} }
dependencies { dependencies {

View File

@ -22,10 +22,10 @@ android {
sourceCompatibility JavaVersion.VERSION_11 sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11
} }
lint {
lintOptions {
abortOnError false abortOnError false
} }
} }
dependencies { dependencies {

View File

@ -21,10 +21,10 @@ android {
sourceCompatibility JavaVersion.VERSION_11 sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11
} }
lint {
lintOptions {
abortOnError false abortOnError false
} }
} }
dependencies { dependencies {

View File

@ -21,10 +21,10 @@ android {
sourceCompatibility JavaVersion.VERSION_11 sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11
} }
lint {
lintOptions {
abortOnError false abortOnError false
} }
} }
dependencies { dependencies {