diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
index 3316d15e..ad7fcb1d 100644
Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 096280d9..2105900b 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -9,6 +9,7 @@
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 75da5c86..246b1bce 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -4,6 +4,7 @@
+
diff --git a/app/build.gradle b/app/build.gradle
index 03dbf57d..96c23c70 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,7 +33,6 @@ dependencies {
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
-
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.orhanobut:logger:2.2.0'
implementation 'com.android.support:appcompat-v7:27.1.1'
@@ -48,7 +47,6 @@ dependencies {
implementation 'org.parceler:parceler-api:1.1.10'
annotationProcessor 'org.parceler:parceler:1.1.10'
implementation 'com.annimon:stream:1.2.1'
-
//MVVM
implementation 'android.arch.lifecycle:extensions:1.1.1'
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"
@@ -60,11 +58,9 @@ dependencies {
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'br.com.zbra:android-linq:1.1.0'
-
//FAB
//implementation 'com.getbase:floatingactionbutton:1.10.1'
implementation 'com.github.clans:fab:1.6.4'
-
//CUSTOM VIEWS
implementation 'de.hdodenhof:circleimageview:2.2.0'
implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2'
@@ -74,8 +70,9 @@ dependencies {
implementation 'com.fxn769:stash:1.2'
testImplementation 'junit:junit:4.12'
implementation project(':waterfall_toolbar')
-
implementation 'com.mikhaellopez:lazydatepicker:1.0.0'
+ implementation project(':pointmobilescannerlibrary')
+ implementation project(path: ':barcode_base_library')
}
repositories {
mavenCentral()
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6d39ff28..eb15bd10 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+
{
if(value && (!mIsOnline || firstCheckExecution)){
diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplication.java b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java
index f9480c22..13d746ae 100644
--- a/app/src/main/java/it/integry/integrywmsnative/MainApplication.java
+++ b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java
@@ -10,6 +10,7 @@ import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker;
+import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.settings.Stash;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
@@ -30,6 +31,7 @@ public class MainApplication extends Application {
SettingsManager.init(this);
ServerStatusChecker.init();
+ BarcodeManager.init(this);
// UtilityExceptions.init(this);
UtilityResources.init(this);
@@ -39,6 +41,8 @@ public class MainApplication extends Application {
res = getResources();
Context = this;
+
+
}
// Called by the system when the device configuration changes while your component is running.
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java b/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java
index 4f9ada5c..073abf4a 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java
@@ -16,6 +16,8 @@ public class CommonConst {
public static class Config {
public static String COMMESSA_MAG = "MAG";
+
+ public static String DEFAULT_ANONYMOUS_UL_SERIE = "UL";
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java
new file mode 100644
index 00000000..446c0b5a
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java
@@ -0,0 +1,32 @@
+package it.integry.integrywmsnative.core.REST.consumers;
+
+import java.util.List;
+
+import it.integry.integrywmsnative.core.REST.RESTBuilder;
+import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse;
+import it.integry.integrywmsnative.core.expansion.RunnableArgs;
+import it.integry.integrywmsnative.core.model.MtbAart;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+public class ArticoloRESTConsumer extends _BaseRESTConsumer {
+
+ public static void getByBarcodeProd(String barcodeProd, RunnableArgs> onComplete, RunnableArgs onFailed) {
+ ArticoloRESTConsumerService articoloRESTConsumerService = RESTBuilder.getService(ArticoloRESTConsumerService.class);
+ articoloRESTConsumerService.getByBarcodeProd(barcodeProd).enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ analyzeAnswer(response, "getByBarcodeProd", (m) -> {
+ onComplete.run(response.body().getEntityList());
+ }, onFailed);
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ onFailed.run(new Exception(t));
+ }
+ });
+ }
+
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java
new file mode 100644
index 00000000..9be5e171
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java
@@ -0,0 +1,17 @@
+package it.integry.integrywmsnative.core.REST.consumers;
+
+import java.util.List;
+
+import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse;
+import it.integry.integrywmsnative.core.model.MtbAart;
+import retrofit2.Call;
+import retrofit2.http.POST;
+import retrofit2.http.Query;
+
+public interface ArticoloRESTConsumerService {
+
+
+ @POST("SM2getArticoloByBarcode")
+ Call> getByBarcodeProd(@Query("barcode") String barcodeProd);
+
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumer.java
new file mode 100644
index 00000000..7ba74db8
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumer.java
@@ -0,0 +1,34 @@
+package it.integry.integrywmsnative.core.REST.consumers;
+
+import com.google.gson.JsonObject;
+
+import it.integry.integrywmsnative.core.REST.RESTBuilder;
+import it.integry.integrywmsnative.core.REST.model.Ean128Model;
+import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse;
+import it.integry.integrywmsnative.core.expansion.RunnableArgs;
+import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO;
+import retrofit2.Call;
+import retrofit2.Callback;
+import retrofit2.Response;
+
+public class BarcodeRESTConsumer extends _BaseRESTConsumer {
+
+ public static void decodeEan128(BarcodeScanDTO barcodeObj, RunnableArgs onComplete, RunnableArgs onFailed) {
+
+ String ean128 = barcodeObj.getStringValue().replaceAll("" + ((char) 29), "|");
+
+ BarcodeRESTConsumerService barcodeRESTConsumerService = RESTBuilder.getService(BarcodeRESTConsumerService.class);
+ barcodeRESTConsumerService.decodeEan128(ean128).enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ analyzeAnswer(response, "DecodeEan128", onComplete, onFailed);
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ onFailed.run(new Exception(t));
+ }
+ });
+
+ }
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumerService.java
new file mode 100644
index 00000000..108eb2dc
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumerService.java
@@ -0,0 +1,19 @@
+package it.integry.integrywmsnative.core.REST.consumers;
+
+import com.google.gson.JsonObject;
+
+import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO;
+import it.integry.integrywmsnative.core.REST.model.Ean128Model;
+import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse;
+import retrofit2.Call;
+import retrofit2.http.Body;
+import retrofit2.http.GET;
+import retrofit2.http.POST;
+import retrofit2.http.Query;
+
+public interface BarcodeRESTConsumerService {
+
+ @GET("decodeEan128")
+ Call> decodeEan128(@Query("ean128") String ean128);
+
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java
index c58d016e..d133c1f5 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java
@@ -40,7 +40,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{
}
-
public static void distribuisciCollo(MtbColt mtbColtToDistribute, Runnable onComplete, RunnableArgs onFailed) {
DistribuzioneColloDTO distribuzioneColloDTO = new DistribuzioneColloDTO()
@@ -55,7 +54,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{
.enqueue(new Callback>() {
@Override
public void onResponse(Call> call, Response> response) {
- analyzeAnswer(response, "GetAvailablePrinters", obj -> onComplete.run(), onFailed);
+ analyzeAnswer(response, "DistribuzioneCollo", obj -> onComplete.run(), onFailed);
}
@Override
@@ -66,6 +65,24 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{
}
+ public static void getBySSCC(String ssccString, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs onComplete, RunnableArgs onFailed) {
+ ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class);
+ colliMagazzinoRESTConsumerService.getColloByBarcode(ssccString, onlyResiduo, throwExcIfNull).enqueue(new Callback>() {
+ @Override
+ public void onResponse(Call> call, Response> response) {
+ analyzeAnswer(response, "GetBySSCC", onComplete, onFailed);
+ }
+
+ @Override
+ public void onFailure(Call> call, Throwable t) {
+ onFailed.run(new Exception(t));
+ }
+ });
+ }
+
+
+
+
public static void deleteRiga(MtbColr mtbColrToDelete, Runnable onComplete, RunnableArgs onFailed){
MtbColr newMtbColr = new MtbColr();
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java
index d30493f4..a91f2f4c 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java
@@ -4,9 +4,12 @@ import com.google.gson.JsonObject;
import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO;
import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse;
+import it.integry.integrywmsnative.core.model.MtbColr;
+import it.integry.integrywmsnative.core.model.MtbColt;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;
+import retrofit2.http.Query;
public interface ColliMagazzinoRESTConsumerService {
@@ -14,4 +17,7 @@ public interface ColliMagazzinoRESTConsumerService {
@POST("SM2DistribuzioneRigheCollo")
Call> distribuisciCollo(@Body DistribuzioneColloDTO distribuzioneCollo);
+ @POST("getColloByBarcode")
+ Call> getColloByBarcode(@Query("codBarreCollo") String sscc, @Query("onlyResiduo") boolean onlyResiduo, @Query("throwExcIfNull") boolean throwExcIfNull);
+
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean128Model.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean128Model.java
new file mode 100644
index 00000000..99a78afb
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean128Model.java
@@ -0,0 +1,342 @@
+package it.integry.integrywmsnative.core.REST.model;
+
+
+public class Ean128Model {
+
+ ///Numero sequenziale del collo
+ public String Sscc;
+
+ ///Codice EAN/UCC unità logistica
+ public String Gtin;
+
+ ///Codice EAN/UCC dei prodotti contenuti all'interno di unità log
+ public String Content;
+
+ ///Numero del lotto di fabbricazione
+ public String BatchLot;
+
+ ///Data di produzione (yymmdd) 0~50 (2000~2050) - 51~99 (1951~1999)
+ public String ProdString;
+
+ ///Data di scadenza pagamento fattura
+ public String DueString;
+
+ ///Data di confezionamento
+ public String PackString;
+
+ ///Data minima di validità
+ public String BestBefore;
+
+ ///Data massima di validità
+ public String Expiry;
+
+ ///Variante di prodotto - uso interno aziendale
+ public String Variant;
+
+ ///Numero di serie
+ public String Serial;
+
+ ///Dati supplementari per prodotti farmaceutici
+ public String QtyStringBatch;
+
+ ///Numedi di identificazione supplementare del prodotto
+ public String AdditionalID;
+
+ ///Codice prodotto interno del cliente
+ public String CustPartNumber;
+
+ ///Numero di serie secondario
+ public String SecondarySerial;
+
+ ///Entità di origine o marca auricolare
+ public String RefToSource;
+
+ ///Quantità variabile
+ public String VarCount;
+
+ ///Peso netto in Kg
+ public Float NetWeightKg;
+
+ ///Lunghezza o 1° dimensione, in mt, uso commerciale
+ public Float LengthM;
+
+ ///Larghezza, diametro o 2° dimensione, in mt, uso commerciale
+ public Float WidthM;
+
+ ///Profondità, spessore, altezza o 3° dimensione, in mt, uso commerciale
+ public Float HeightM;
+
+ ///Superficie, in metriquadri, uso commerciale
+ public Float AreaM2;
+
+ ///Volume, in litri, uso commerciale
+ public Float NetVolumeL;
+
+ ///Volume, in metricubi, uso commerciale
+ public Float NetVolumeM3;
+
+ ///Peso netto, in libbre, uso commerciale
+ public Float NetWeightLb;
+
+ ///Lunghezza o 1° dimensione, in pollici, uso commerciale
+ public Float LengthI;
+
+ ///Lunghezza o 1° dimensione, in piedi, uso commerciale
+ public Float LengthF;
+
+ ///Lunghezza o 1° dimensione, in yards, uso commerciale
+ public Float LengthY;
+
+ ///Larghezza, diametro o 2° dimensione, in pollici, uso commerciale
+ public Float WidthI;
+
+ ///Larghezza, diametro o 2° dimensione, in piedi, uso commerciale
+ public Float WidthF;
+
+ ///Larghezza, diametro o 2° dimensione, in yards, uso commerciale
+ public Float WidthY;
+
+ ///Profondità, spessore, altezza o 3° dimensione, in pollici, uso commerciale
+ public Float HeightI;
+
+ ///Profondità, spessore, altezza o 3° dimensione, in piedi, uso commerciale
+ public Float HeightF;
+
+ ///Profondità, spessore, altezza o 3° dimensione, in yards, uso commerciale
+ public Float HeightY;
+
+ ///Peso lordo, in Kg, uso logistico
+ public Float CrossweightKgLog;
+
+ ///Peso lordo, in libbre, uso logistico
+ public Float CrossweightLbLog;
+
+ ///Lunghezza o 1° dimensione, in metri, uso logistico
+ public Float LengthMLog;
+
+ ///Larghezza, diametro o 2° dimensione, in metri, uso logistico
+ public Float WidthMLog;
+
+ ///Profondità, spessore, altezza o 3° dimensione, in metri, uso logistico
+ public Float HeigthMLog;
+
+ ///Superficie, in metriquadri, uso logistico
+ public Float AreaM2Log;
+
+ ///Volume lordo, in litri, uso logistico
+ public Float VolumeLLog;
+
+ ///Volume lordo, in metricubi, uso logistico
+ public Float VolumeM3Log;
+
+ ///Lunghezza o 1° dimensione, in pollici, uso logistico
+ public Float LengthILog;
+
+ ///Lunghezza o 1° dimensione, in piedi, uso logistico
+ public Float LengthFLog;
+
+ ///Lunghezza o 1° dimensione, in yards, uso logistico
+ public Float LengthYLog;
+
+ ///Larghezza, diametro o 2° dimensione, in pollici, uso logistico
+ public Float WidthILog;
+
+ ///Larghezza, diametro o 2° dimensione, in piedi, uso logistico
+ public Float WidthFLog;
+
+ ///Larghezza, diametro o 2° dimensione, in yards, uso logistico
+ public Float WidthYLog;
+
+ ///Profondità, spessore, altezza o 3° dimensione, in pollici, uso logistico
+ public Float HeigthILog;
+
+ ///Profondità, spessore, altezza o 3° dimensione, in piedi, uso logistico
+ public Float HeigthFLog;
+
+ ///Profondità, spessore, altezza o 3° dimensione, in yards, uso logistico
+ public Float HeigthYLog;
+
+ ///Superficie, in pollici quadrati, uso commerciale
+ public Float AreaI2;
+
+ ///Superficie, in piedi quadrati, uso commerciale
+ public Float AreaF2;
+
+ ///Superficie, in yards quadrati, uso commerciale
+ public Float AreaY2;
+
+ ///Superficie, in pollici quadrati, uso logistico
+ public Float AreaI2Log;
+
+ ///Superficie, in piedi quadrati, uso logistico
+ public Float AreaF2Log;
+
+ ///Superficie, in yards quadrati, uso logistico
+ public Float AreaY2Log;
+
+ ///Peso netto, in once troy, uso commerciale
+ public Float NetWeightT;
+
+ ///Peso netto, in once (U.S.), uso commerciale
+ public Float NetVolumeOz;
+
+ ///Peso netto, in quarti di gallone, uso commerciale
+ public Float NetVolumeLb;
+
+ ///Peso netto, in galloni (U.S.), uso commerciale
+ public Float NetVolumeG;
+
+ ///Volume lordo, in quarti di gallone, uso logistico
+ public Float VolumeQLog;
+
+ ///Volume lordo, in galloni (U.S.), uso logistico
+ public Float VolumeGLog;
+
+ ///Volume netto, in pollici cubi, uso commerciale
+ public Float NetVolumeI3;
+
+ ///Volume netto, in piedi cubi, uso commerciale
+ public Float NetVolumeF3;
+
+ ///Volume netto, in yards cubi, uso commerciale
+ public Float NetVolumeY3;
+
+ ///Volume lordo, in pollici cubi, uso logistico
+ public Float VolumeI3Log;
+
+ ///Volume lordo, in piedi cubi, uso logistico
+ public Float VolumeF3Log;
+
+ ///Volume lordo, in yards cubi, uso logistico
+ public Float VolumeY3Log;
+
+ ///Quantità prodotti contenuti in un'unità logistica
+ public Integer Count;
+
+ ///Importo da pagare singola area monetaria
+ public Float Amount;
+
+ ///Importo da pagare singola unità monetaria (prodotti a peso variabile)
+ public Float Price;
+
+ ///Numero d'ordine d'acquisto cliente
+ public String OrderNumber;
+
+ ///Numero di consegna
+ public String Consignment;
+
+ ///Numero di spedizione
+ public String ShipmentNo;
+
+ ///Codice di smistamento pacchi
+ public String Route;
+
+ ///Codice di locazione EAN/UCC "Spedire a, Consegnare a"
+ public String ShipToLoc;
+
+ ///Codice di locazione EAN/UCC "Fatturare a"
+ public String BillToLoc;
+
+ ///Codice di locazione EAN/UCC "Acquistato da"
+ public String PurchaseFromLoc;
+
+ ///Codice di locazione EAN/UCC "Sperdire per, Consegnare per, Inoltrare a"
+ public String ShipForLoc;
+
+ ///Codice di locazione EAN/UCC: identificazione di una locazione fisica
+ public String LocationNumber;
+
+ ///Codice di locazione EAN/UCC di chi emette la fattura
+ public String PayToLoc;
+
+ ///Codice postale "Spedire a, Consegnare a" (nazionale)
+ public String ShipToPost;
+
+ ///Paese di origine del prodotto
+ public String Origin;
+
+ ///Paese di lavorazione con codice nazionale ISO
+ public String CountryProcess;
+
+ ///Paese di scomposizione con codice nazionale ISO
+ public String CountryDisassembly;
+
+ ///Paese di lavorazione completa con codice nazionale ISO
+ public String CountryFullProcess;
+
+ ///Numero di stock NATO
+ public String NSN;
+
+ ///Carcasse animali e classificazione dei tagli UN/ECE
+ public String MeatCut;
+
+ ///Prodotti in rotoli - larghezza, lunghezza, diametro interno, senso di svolgimento e giunte
+ public String Dimensions;
+
+ ///Numero sequenziale elettronico per applicazioni di telefonia cellulare
+ public String CmtNo;
+
+ ///Numero di identificazione per beni a rendere,
+ public String Grai;
+
+ ///Numero di identificazione globale per beni individuali
+ public String Giai;
+
+ ///Prezzo per unità di misura
+ public String PricePerUnit;
+
+ ///Identificazione dei componenti di un prodotto
+ public String Gctin;
+
+ ///Numero di contocorrente bancario internazionale
+ public String Iban;
+
+ ///Data e ora di produzione
+ public String ProdTime;
+
+ ///Numedo Globale di Relazione di Servizio
+ public String Gsrn;
+
+ ///Numero del bollettino di pagamento
+ public String RefNo;
+
+ ///Codice esteso per i coupons, UCC
+ public String Coupon1;
+
+ ///Codice esteso per i coupons, UCC
+ public String Coupon2;
+
+ ///Codice esteso per i coupons, UCC
+ public String Coupon3;
+
+ ///Informazioni concordate tra i partners commerciali
+ public String InternalPart;
+
+ ///Informazioni interne
+ public String Internal1;
+
+ ///Informazioni interne
+ public String Internal2;
+
+ ///Informazioni interne
+ public String Internal3;
+
+ ///Informazioni interne
+ public String Internal4;
+
+ ///Informazioni interne
+ public String Internal5;
+
+ ///Informazioni interne
+ public String Internal6;
+
+ ///Informazioni interne
+ public String Internal7;
+
+ ///Informazioni interne
+ public String Internal8;
+
+ ///Informazioni interne
+ public String Internal9;
+
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean13PesoModel.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean13PesoModel.java
new file mode 100644
index 00000000..c5436078
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean13PesoModel.java
@@ -0,0 +1,48 @@
+package it.integry.integrywmsnative.core.REST.model;
+
+public class Ean13PesoModel {
+
+ private String precode;
+ private Float peso;
+
+ public String getPrecode() {
+ return precode;
+ }
+
+ public Ean13PesoModel setPrecode(String precode) {
+ this.precode = precode;
+ return this;
+ }
+
+ public Float getPeso() {
+ return peso;
+ }
+
+ public Ean13PesoModel setPeso(Float peso) {
+ this.peso = peso;
+ return this;
+ }
+
+ public Ean128Model toEan128() {
+ Ean128Model ean128Model = new Ean128Model();
+ ean128Model.NetWeightKg = getPeso();
+
+ return ean128Model;
+ }
+
+ public static Ean13PesoModel fromBarcode(String barcode) throws Exception {
+ if(barcode == null || barcode.length() != 13) {
+ throw new Exception("Errore durante il parse del barcode (" + barcode + ")");
+ }
+
+ String precode = barcode.substring(1, 7);
+ String pesoString = barcode.substring(7, barcode.length() - 1);
+
+ Float pesoFloat = Integer.parseInt(pesoString) / (float) 1000;
+
+ return new Ean13PesoModel()
+ .setPrecode(precode)
+ .setPeso(pesoFloat);
+
+ }
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeCallbackDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeCallbackDTO.java
new file mode 100644
index 00000000..a8b03bae
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeCallbackDTO.java
@@ -0,0 +1,39 @@
+package it.integry.integrywmsnative.core.barcode_reader;
+
+import it.integry.integrywmsnative.core.expansion.RunnableArgs;
+import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO;
+
+public class BarcodeCallbackDTO {
+
+ private int ID = -1;
+
+ private RunnableArgs onScanSuccessfull;
+ private RunnableArgs onScanFailed;
+
+ public int getID() {
+ return ID;
+ }
+
+ public BarcodeCallbackDTO setID(int ID) {
+ this.ID = ID;
+ return this;
+ }
+
+ public RunnableArgs getOnScanSuccessfull() {
+ return onScanSuccessfull;
+ }
+
+ public BarcodeCallbackDTO setOnScanSuccessfull(RunnableArgs onScanSuccessfull) {
+ this.onScanSuccessfull = onScanSuccessfull;
+ return this;
+ }
+
+ public RunnableArgs getOnScanFailed() {
+ return onScanFailed;
+ }
+
+ public BarcodeCallbackDTO setOnScanFailed(RunnableArgs onScanFailed) {
+ this.onScanFailed = onScanFailed;
+ return this;
+ }
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeManager.java b/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeManager.java
new file mode 100644
index 00000000..f9160f86
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeManager.java
@@ -0,0 +1,137 @@
+package it.integry.integrywmsnative.core.barcode_reader;
+
+import android.content.Context;
+import android.text.SpannableString;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.List;
+
+import it.integry.integrywmsnative.core.utility.UtilityExceptions;
+import it.integry.integrywmsnative.core.utility.UtilityLogger;
+import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper;
+import it.integry.plugins.barcode_base_library.exception.BarcodeAdapterNotFoundException;
+import it.integry.plugins.barcode_base_library.interfaces.BarcodeReaderInterface;
+import it.integry.pointmobilescannerlibrary.PointMobileBarcodeReader;
+
+public class BarcodeManager {
+
+ private static Context context;
+
+ private static BarcodeReaderInterface mCurrentBarcodeInterface;
+ private static List mBarcodeCallbacksStacktrace = new ArrayList<>();
+
+ private static boolean mEnabled = true;
+
+
+ private static Class extends BarcodeReaderInterface>[] registeredBarcodeReaderInterfaces = new Class[]{
+ PointMobileBarcodeReader.class
+ };
+
+
+ public static void init(Context context) {
+ BarcodeManager.context = context;
+
+ initBarcodeReader();
+ }
+
+ private static void initBarcodeReader() {
+
+ for (Class extends BarcodeReaderInterface> readerInterface : registeredBarcodeReaderInterfaces){
+
+ Constructor> cons = null;
+ try {
+ cons = Class.forName(readerInterface.getName()).getConstructors()[0];
+ BarcodeReaderInterface object = (BarcodeReaderInterface) cons.newInstance(context);
+
+ if(object.isRightAdapter()) {
+ mCurrentBarcodeInterface = object;
+ break;
+ }
+
+
+ } catch (Exception e) {
+ UtilityLogger.errorMe(e);
+ }
+ }
+
+ if(mCurrentBarcodeInterface != null) {
+
+ try {
+ mCurrentBarcodeInterface.init();
+ } catch (BarcodeAdapterNotFoundException ex) {
+ UtilityExceptions.defaultException(context, ex);
+ }
+
+ mCurrentBarcodeInterface.register(data -> {
+ BarcodeCallbackDTO callback = getValidCallback();
+ if(callback != null && mEnabled) {
+ callback.getOnScanSuccessfull().run(data);
+ }
+ }, ex -> {
+ BarcodeCallbackDTO callback = getValidCallback();
+ if(callback != null && mEnabled) {
+ callback.getOnScanFailed().run(ex);
+ }
+ });
+ }
+
+ }
+
+
+ private static BarcodeCallbackDTO getValidCallback() {
+
+ if(mBarcodeCallbacksStacktrace.size() > 0) {
+ return mBarcodeCallbacksStacktrace.get(mBarcodeCallbacksStacktrace.size() -1);
+ } else {
+ return null;
+ }
+
+ }
+
+ public static BarcodeReaderInterface getCurrentBarcodeInterface() {
+ return mCurrentBarcodeInterface;
+ }
+
+ public static int addCallback(BarcodeCallbackDTO barcodeCallbackDTO) {
+
+ int newID = -1;
+
+ if(mBarcodeCallbacksStacktrace.size() > 0) {
+ newID = mBarcodeCallbacksStacktrace.get(mBarcodeCallbacksStacktrace.size() -1).getID() + 1;
+ } else {
+ newID = 1;
+ }
+
+ barcodeCallbackDTO.setID(newID);
+ mBarcodeCallbacksStacktrace.add(barcodeCallbackDTO);
+
+ return newID;
+ }
+
+ public static void removeCallback(int ID) {
+ boolean callbackObjFound = false;
+
+ //Rimuovo la callback con l'ID trovato e tutte quelle con >ID in modo che rimuovo tutte le call aggiunte successivamente
+
+ for (int i = 0; i < mBarcodeCallbacksStacktrace.size(); i++) {
+ if(mBarcodeCallbacksStacktrace.get(i).getID() == ID || callbackObjFound) {
+ mBarcodeCallbacksStacktrace.remove(i);
+
+ callbackObjFound = true;
+ }
+ }
+ }
+
+
+ public static void disable() {
+ mEnabled = false;
+ }
+
+ public static void enable() {
+ mEnabled = true;
+ }
+
+
+
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java
index 952e7c70..4e0b5389 100644
--- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java
+++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java
@@ -56,6 +56,8 @@ public class MtbColt extends EntityBase implements Parcelable {
private BigDecimal larghezzaCm;
private BigDecimal altezzaCm;
+ private Boolean disablePrint;
+
protected MtbColt(Parcel in) {
type = "mtb_colt";
gestione = in.readString();
@@ -632,7 +634,14 @@ public class MtbColt extends EntityBase implements Parcelable {
return this;
}
+ public Boolean getDisablePrint() {
+ return disablePrint;
+ }
+ public MtbColt setDisablePrint(Boolean disablePrint) {
+ this.disablePrint = disablePrint;
+ return this;
+ }
public void generaFiltroOrdineFromDTO(List filtroOrdineDtos) {
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java
new file mode 100644
index 00000000..c23f86b2
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java
@@ -0,0 +1,56 @@
+package it.integry.integrywmsnative.core.utility;
+
+import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO;
+import it.integry.plugins.barcode_base_library.model.BarcodeType;
+
+public class UtilityBarcode {
+
+ public static boolean isEtichettaAnonima(BarcodeScanDTO barcodeScanDTO){
+ return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.CODE128 && barcodeScanDTO.getStringValue().startsWith("U");
+ }
+
+ public static boolean isEanPeso(BarcodeScanDTO barcodeScanDTO) {
+ return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.EAN13 && barcodeScanDTO.getStringValue().startsWith("2");
+ }
+
+
+
+ public static Integer getNumColloFromULAnonima(BarcodeScanDTO barcodeScanDTO) {
+ if(barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.CODE128){
+ return Integer.parseInt(barcodeScanDTO.getStringValue().substring(3));
+ } else
+ return null;
+ }
+
+
+
+ public static String convertITF14toEAN13(String barcodeITF14) {
+ String barcodeEAN13 = null;
+
+ if(barcodeITF14.length() == 14) {
+ barcodeEAN13 = barcodeEAN13.substring(1, barcodeEAN13.length() - 1);
+ barcodeEAN13 += calculateCheckDigitEan13(barcodeEAN13);
+ }
+
+ return barcodeEAN13;
+ }
+
+
+ public static int calculateCheckDigitEan13(String barcodeEan13) {
+ String[] barcodeCharArray = barcodeEan13.split("");
+
+ int somma = 0;
+
+ for(int i = 0; i < barcodeCharArray.length; i++){
+ if(i % 2 == 1){
+ somma += Integer.parseInt(barcodeCharArray[i]) * 3;
+ } else {
+ somma += Integer.parseInt(barcodeCharArray[i]);
+ }
+ }
+
+
+ return 10 - (somma % 10);
+ }
+
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java
new file mode 100644
index 00000000..96049ebd
--- /dev/null
+++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java
@@ -0,0 +1,17 @@
+package it.integry.integrywmsnative.core.utility;
+
+import android.app.ProgressDialog;
+import android.content.Context;
+
+import it.integry.integrywmsnative.R;
+
+public class UtilityProgress {
+
+ public static ProgressDialog createDefaultProgressDialog(Context mContext) {
+ final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting),
+ mContext.getText(R.string.loading) + " ...", true);
+
+ return progress;
+ }
+
+}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java
index c06c57f0..aed2be5f 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java
@@ -44,6 +44,7 @@ public class OrdineAccettazioneDTO implements Parcelable {
public MtbAart mtbAart;
public PickingObjectDTO[] colliAssociati;
public Boolean hidden = null;
+ public Boolean tempHidden = null;
public String partitaMag;
public String codArtFor;
public String descrizioneEstesa;
@@ -100,6 +101,10 @@ public class OrdineAccettazioneDTO implements Parcelable {
return hidden;
}
+ public Boolean isTempHidden() {
+ return tempHidden;
+ }
+
public String getPartitaMag() {
return partitaMag;
}
@@ -187,6 +192,11 @@ public class OrdineAccettazioneDTO implements Parcelable {
return this;
}
+ public Riga setTempHidden(boolean hidden) {
+ this.tempHidden = hidden;
+ return this;
+ }
+
public Riga setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java
index b2721294..b559f1d2 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java
@@ -11,7 +11,10 @@ import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
+import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
+import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.model.MtbColt;
+import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding;
import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
@@ -27,6 +30,8 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity {
private static final int PICK_UL_REQUEST = 1; // The request code
+ private int barcodeScannerIstanceID = -1;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -44,6 +49,10 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity {
setTitle(orders);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
+ barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
+ .setOnScanSuccessfull(mAccettazioneOrdineInevasoViewModel.onScanSuccessfull)
+ .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex)));
+
}
@Override
@@ -58,7 +67,10 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity {
mArticoliInColloBottomSheetViewModel.collapse();
} else if(mAccettazioneOrdineInevasoViewModel.thereIsAnOpenedUL()) {
mArticoliInColloBottomSheetViewModel.closeCurrentUL();
- } else super.onBackPressed();
+ } else {
+ BarcodeManager.removeCallback(barcodeScannerIstanceID);
+ super.onBackPressed();
+ }
}
@Override
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java
index 781cd3aa..e60c39af 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java
@@ -74,15 +74,14 @@ public class AccettazioneOrdineInevasoHelper {
if(mDataset.get(i).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) mDataset.get(i).descrizioneCommessa = null;
}
+ boolean anyNull = codArtForns.contains(null);
+
codArtForns = Stream.of(codArtForns)
+ .withoutNulls()
.sortBy(x -> x).toList();
-// Collections.sort(codArtForns, (str1, str2) -> {
-// if(str1 != null && str2 != null) {
-// return str1.compareToIgnoreCase(str2);
-// }
-// return 0;
-// });
+ if(anyNull) codArtForns.add(null);
+
List> groupedRighe = new ArrayList<>();
for (String codArtForn : codArtForns) {
@@ -96,6 +95,9 @@ public class AccettazioneOrdineInevasoHelper {
//tmpList.remove(i);
//i--;
} else tmpList.get(i).setHidden(false);
+
+
+ tmpList.get(i).setTempHidden(false);
}
}
@@ -133,6 +135,9 @@ public class AccettazioneOrdineInevasoHelper {
//tmpList.remove(i);
//i--;
} else tmpList.get(i).setHidden(false);
+
+
+ tmpList.get(i).setTempHidden(false);
}
}
@@ -196,15 +201,13 @@ public class AccettazioneOrdineInevasoHelper {
//tmpList.remove(i);
//i--;
} else tmpList.get(i).setHidden(false);
+
+ tmpList.get(i).setTempHidden(false);
}
}
Collections.sort(tmpList, (obj1, obj2) -> obj1.mtbAart.descrizioneEstesa.compareToIgnoreCase(obj2.mtbAart.descrizioneEstesa));
- for(int i = 0; i < tmpList.size(); i++) {
- Logger.d(tmpList.get(i));
- }
-
if(tmpList.size() > 0){
groupedRighe.add(tmpList);
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java
index 181f89b6..91f1ee83 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java
@@ -1,9 +1,10 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core;
+import it.integry.integrywmsnative.core.REST.model.Ean128Model;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
public interface IOnOrdineAccettazioneRowDispatchCallback {
- void onOrdineRowDispatch(OrdineAccettazioneDTO.Riga item);
+ void onOrdineRowDispatch(OrdineAccettazioneDTO.Riga item, Ean128Model ean128Model);
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java
index beb2ea84..5b78e721 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java
@@ -144,7 +144,10 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter {
if (mOrdineRowDispatch != null) {
- mOrdineRowDispatch.onOrdineRowDispatch(rowItem.getOriginalModel());
+ mOrdineRowDispatch.onOrdineRowDispatch(rowItem.getOriginalModel(), null);
}
});
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoListViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoListViewModel.java
index b32a76fc..bac1ea7e 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoListViewModel.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoListViewModel.java
@@ -18,7 +18,9 @@ public class AccettazioneOrdineInevasoListViewModel {
public boolean isHidden(){
if(rows == null || rows.size() == 0) return true;
- return Stream.of(rows).filter(x -> x.originalModel.isHidden() != null && !x.originalModel.isHidden()).count() == 0;
+ return Stream.of(rows).filter(
+ x -> (x.originalModel.isHidden() != null && !x.originalModel.isHidden()) &&
+ (x.originalModel.isTempHidden() != null && !x.originalModel.isTempHidden())).count() == 0;
}
public static class SubItem {
diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java
index 9d14b4b2..7cc7e5b9 100644
--- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java
+++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java
@@ -16,17 +16,29 @@ import java.util.List;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.R;
+import it.integry.integrywmsnative.core.CommonConst;
+import it.integry.integrywmsnative.core.REST.consumers.ArticoloRESTConsumer;
+import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.GestSetupRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer;
+import it.integry.integrywmsnative.core.REST.model.Ean128Model;
+import it.integry.integrywmsnative.core.REST.model.Ean13PesoModel;
+import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
+import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
+import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.settings.SettingsManager;
+import it.integry.integrywmsnative.core.utility.UtilityBarcode;
+import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
+import it.integry.integrywmsnative.core.utility.UtilityLogger;
+import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity;
@@ -42,6 +54,8 @@ import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBot
import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
+import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO;
+import it.integry.plugins.barcode_base_library.model.BarcodeType;
import static br.com.zbra.androidlinq.Linq.stream;
@@ -49,7 +63,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
public ObservableField isFabVisible = new ObservableField<>();
- private final AccettazioneOrdineInevasoActivity mActivity;
+ private AccettazioneOrdineInevasoActivity mActivity;
private final ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel;
private final List mOrders;
@@ -135,6 +149,26 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
}
}
+ public void applyFilter(String descriptionText) {
+
+ mActivity.bindings.filteredArtsInListExpandableLayout.expand(true);
+
+ mActivity.bindings.descriptionFilterText.setText(descriptionText);
+
+
+
+
+ }
+
+ public void removeListFilter() {
+ for(int i = 0; i < groupedOrdini.size(); i++) {
+ groupedOrdini.get(i).setTempHidden(false);
+ }
+
+ refreshOrderBy(false);
+ mActivity.bindings.filteredArtsInListExpandableLayout.collapse(true);
+ }
+
public void recoverUL(MtbColt recoveredMtbColt){
for(int i = 0; i < recoveredMtbColt.getMtbColr().size(); i++){
@@ -162,31 +196,190 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
}
+
+
+ public RunnableArgs onScanSuccessfull = data -> {
+
+ ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity);
+ progressDialog.show();
+
+ BarcodeManager.disable();
+
+ if(UtilityBarcode.isEtichettaAnonima(data) && !thereIsAnOpenedUL()){
+ this.executeEtichettaAnonima(data, progressDialog);
+ } else if(data.getType() == BarcodeType.EAN128) {
+ this.executeEtichettaEan128(data, progressDialog);
+ } else if(UtilityBarcode.isEanPeso(data)){
+ this.executeEtichettaEanPeso(data, progressDialog);
+ } else {
+ this.loadArticolo(data.getStringValue(), null, progressDialog);
+ }
+
+ };
+
+
+ private void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) {
+ ColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), false, false, mtbColt -> {
+
+ if(mtbColt == null) {
+ this.createNewUL(UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO), CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, progressDialog, true, null);
+ BarcodeManager.enable();
+ } else {
+ progressDialog.dismiss();
+ BarcodeManager.enable();
+ DialogSimpleMessageHelper.makeWarningDialog(mActivity,
+ new SpannableString(mActivity.getResources().getText(R.string.already_used_anonymous_barcode)),
+ null, null).show();
+ }
+
+ }, ex -> {
+ UtilityExceptions.defaultException(mActivity, ex, progressDialog);
+ BarcodeManager.enable();
+ });
+ }
+
+
+ private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) {
+ BarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
+
+ String barcodeProd = null;
+
+ if(ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc;
+ if(ean128Model.Gtin != null) barcodeProd = ean128Model.Gtin;
+ if(ean128Model.Content != null) barcodeProd = ean128Model.Content;
+
+
+ if(!UtilityString.isNullOrEmpty(barcodeProd)) {
+ if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) {
+ barcodeProd = barcodeProd.substring(1, barcodeProd.length());
+ }
+ this.loadArticolo(barcodeProd, ean128Model, progressDialog);
+ } else {
+ //EAN 128 non completo o comunque mancano i riferimenti al prodotto
+ progressDialog.dismiss();
+ BarcodeManager.enable();
+ }
+ }, ex-> {
+ UtilityExceptions.defaultException(mActivity, ex, progressDialog);
+ BarcodeManager.enable();
+ });
+ }
+
+ private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) {
+
+ try {
+ Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue());
+
+ this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128(), progressDialog);
+ } catch (Exception ex) {
+ UtilityExceptions.defaultException(mActivity, ex, progressDialog);
+ BarcodeManager.enable();
+ }
+ }
+
+
+
+ private void loadArticolo(String barcodeProd, Ean128Model ean128Model, ProgressDialog progressDialog) {
+ if(barcodeProd.length() == 14) {
+ barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd);
+ }
+
+ ArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> {
+
+ if(mtbAartList != null && mtbAartList.size() > 0) {
+
+ if(!thereIsAnOpenedUL()){
+
+ this.createNewUL(null, null, progressDialog, false, () -> {
+ BarcodeManager.enable();
+ this.searchArtInList(mtbAartList.get(0), ean128Model);
+ });
+
+ } else {
+ this.searchArtInList(mtbAartList.get(0), ean128Model);
+
+ BarcodeManager.enable();
+ progressDialog.dismiss();
+ }
+
+ } else {
+ BarcodeManager.enable();
+ progressDialog.dismiss();
+
+ DialogSimpleMessageHelper.makeWarningDialog(mActivity,
+ new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)),
+ null, null, null)
+ .show();
+ }
+
+
+ }, ex -> {
+ BarcodeManager.enable();
+ UtilityExceptions.defaultException(mActivity, ex, progressDialog);
+ });
+ }
+
+ private void searchArtInList(MtbAart mtbAart, Ean128Model ean128Model) {
+ removeListFilter();
+
+ List foundRowsList = Stream.of(groupedOrdini)
+ .filter(x -> x.getMtbAart().getCodMart().equalsIgnoreCase(mtbAart.codMart) &&
+ (x.isHidden() != null && !x.isHidden()) && (x.isTempHidden() != null && !x.isTempHidden()))
+ .toList();
+
+ if(foundRowsList.size() == 0) {
+ showNoArtFoundDialog();
+ } else if(foundRowsList.size() == 1) {
+ onOrdineRowDispatch(foundRowsList.get(0), ean128Model);
+ } else {
+ for(int i = 0; i < groupedOrdini.size(); i++) {
+ if(!foundRowsList.contains(groupedOrdini.get(i))) {
+ groupedOrdini.get(i).setTempHidden(true);
+ }
+ }
+
+ applyFilter("COD: " + mtbAart.getCodMart());
+ refreshOrderBy(false);
+ }
+ }
+
+
+ private void showNoArtFoundDialog() {
+ DialogSimpleMessageHelper.makeWarningDialog(mActivity,
+ new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)),
+ null, null).show();
+ }
+
public void showOrderDialog() {
AlertDialog dialog = new AlertDialog.Builder(mActivity)
.setTitle(mActivity.getText(R.string.action_orderBy))
.setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, currentOrderBy.getVal(), (dialog12, which) -> currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(which))
- .setPositiveButton("Ok", (dialog1, which) -> refreshOrderBy(true))
+ .setPositiveButton("Ok", (dialog1, which) -> refreshOrderBy(false))
.create();
dialog.show();
}
public void createNewUL() {
+ this.createNewUL(null, null, null, false, null);
+ }
+
+ public void createNewUL(Integer customNumCollo, String customSerCollo, ProgressDialog progress, boolean disablePrint, Runnable onComplete) {
mActivity.bindings.accettazioneOrdineInevasoFab.close(true);
- final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting),
- mActivity.getText(R.string.loading) + " ...", true);
+ if (progress == null){
+ progress = UtilityProgress.createDefaultProgressDialog(mActivity);
+ }
+ ProgressDialog finalProgress = progress;
NoteAggiuntiveNuovaULDialog.show(mActivity, new NoteAggiuntiveNuovaULDialog.Callback() {
@Override
public void onSuccess(String noteString) {
//Add loading dialog here
- progress.show();
-
+ finalProgress.show();
GestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_POSIZIONE_COLLI_ACCETTAZIONE", defaultPosAccettazioneDTO -> {
@@ -201,8 +394,17 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
.setOraInizPrep(new Date())
.setAnnotazioni(noteString)
.setPosizione(defaultPosAccettazione)
+ .setSerCollo("/")
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
+ if(customNumCollo != null) {
+ mtbColt.setNumCollo(customNumCollo);
+ }
+
+ if(!UtilityString.isNullOrEmpty(customSerCollo)) {
+ mtbColt.setSerCollo(customSerCollo);
+ }
+
List codAnags =
stream(mOrders)
.select(c -> c.codAnag)
@@ -246,11 +448,15 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
@Override
public void onSuccess(MtbColt value) {
- value.setMtbColr(new ObservableArrayList<>());
+ value
+ .setDisablePrint(disablePrint)
+ .setMtbColr(new ObservableArrayList<>());
+
+
setULToCurrentContext(value);
- progress.dismiss();
+ finalProgress.dismiss();
new StatusBarAlert.Builder(mActivity)
.autoHide(true)
@@ -260,14 +466,16 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
.withAlertColor(R.color.mainGreen)
.build();
+ if(onComplete != null) onComplete.run();
+
}
@Override
public void onFailed(Exception ex) {
- UtilityExceptions.defaultException(mActivity, ex, progress);
+ UtilityExceptions.defaultException(mActivity, ex, finalProgress);
}
});
- }, ex -> UtilityExceptions.defaultException(mActivity, ex, progress));
+ }, ex -> UtilityExceptions.defaultException(mActivity, ex, finalProgress));
@@ -275,7 +483,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
@Override
public void onAbort() {
- progress.dismiss();
+ finalProgress.dismiss();
}
});
@@ -315,9 +523,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
public void onColloClosed() {
if(thereIsAnOpenedUL()) {
- final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting),
- mActivity.getText(R.string.loading) + " ...", true);
-
+ final ProgressDialog progress = UtilityProgress.createDefaultProgressDialog(mActivity);
progress.show();
if(thereIsAnyRowInUL()) {
@@ -352,6 +558,13 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
}
private void printCollo(ProgressDialog progress) {
+ MtbColt currentMtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get();
+
+ if(currentMtbColt.getDisablePrint() != null && currentMtbColt.getDisablePrint()){
+ postCloseOperations();
+ progress.dismiss();
+ return;
+ }
PrinterRESTConsumer.getAvailablePrinters(SettingsManager.i().userSession.depo.getCodMdep(), new ISimpleOperationCallback>() {
@Override
@@ -359,7 +572,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
if(value.size() > 0) {
try{
- MtbColt currentMtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get();
+
ReportManager.getRightReportNameByMtbColt(currentMtbColt, reportName -> {
@@ -463,7 +676,7 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
}
@Override
- public void onOrdineRowDispatch(final OrdineAccettazioneDTO.Riga item) {
+ public void onOrdineRowDispatch(final OrdineAccettazioneDTO.Riga item, Ean128Model ean128Model) {
if(mArticoliInColloBottomSheetViewModel.mtbColt.get() != null){
List currentMtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr();
@@ -492,6 +705,44 @@ public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColl
.setQtaEvasa(new BigDecimal(qtaEvasa))
.setCanPartitaMagBeChanged(true);
+ if(ean128Model != null){
+ if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) {
+ dto.setBatchLot(ean128Model.BatchLot);
+ }
+
+ try {
+ if(!UtilityString.isNullOrEmpty(ean128Model.BestBefore)){
+ dto.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore));
+ } else if(!UtilityString.isNullOrEmpty(ean128Model.Expiry)) {
+ dto.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry));
+ }
+
+ } catch (Exception e) {
+ UtilityLogger.errorMe(e);
+ }
+
+
+ if(ean128Model.Count != null && ean128Model.Count > 0) {
+ //if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
+ dto.setNumCnf(ean128Model.Count);
+ //} else {
+ // dto.setQtaTot(new BigDecimal(ean128Model.Count));
+ //}
+ }
+
+ if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) {
+ dto.setQtaTot(new BigDecimal(ean128Model.NetWeightKg));
+ }
+
+ if(dto.getQtaTot() != null && dto.getQtaTot().floatValue() > 0 && dto.getNumCnf() != null && dto.getNumCnf() > 0) {
+ dto.setQtaCnf(dto.getQtaTot().divide(new BigDecimal(dto.getNumCnf())));
+ }
+
+ dto.setCanPartitaMagBeChanged(false);
+ dto.setCanDataScadBeChanged(false);
+ dto.setShouldAskDataScad(true);
+ }
+
DialogInputQuantity.makeBase(mActivity, dto, true, value -> onOrdineRowDispatched(item, value)).show();
}
}
diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java
index 5df4ebc7..1eca644b 100644
--- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java
+++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java
@@ -21,6 +21,7 @@ import android.widget.EditText;
import java.math.BigDecimal;
import java.util.Calendar;
+import java.util.Date;
import java.util.GregorianCalendar;
import it.integry.integrywmsnative.BR;
@@ -34,16 +35,20 @@ import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper;
public class DialogInputQuantity {
public static class DTO {
- public MtbAart mtbAart;
- public String batchLot;
- public BigDecimal qtaDaEvadere;
- public BigDecimal qtaOrd;
- public BigDecimal qtaTot;
- public BigDecimal qtaCnf;
- public BigDecimal qtaEvasa;
- public BigDecimal maxQta;
- public String codArtFor;
- public boolean canPartitaMagBeChanged;
+ private MtbAart mtbAart;
+ private String batchLot;
+ private BigDecimal qtaDaEvadere;
+ private BigDecimal qtaEvasa;
+ private BigDecimal qtaOrd;
+ private BigDecimal qtaTot;
+ private BigDecimal qtaCnf;
+ private Integer numCnf;
+ private BigDecimal maxQta;
+ private String codArtFor;
+ private Date dataScad;
+ private boolean canPartitaMagBeChanged;
+ private Boolean canDataScadBeChanged;
+ private Boolean shouldAskDataScad;
public MtbAart getMtbAart() {
return mtbAart;
@@ -99,6 +104,15 @@ public class DialogInputQuantity {
return this;
}
+ public Integer getNumCnf() {
+ return numCnf;
+ }
+
+ public DTO setNumCnf(Integer numCnf) {
+ this.numCnf = numCnf;
+ return this;
+ }
+
public BigDecimal getQtaEvasa() {
return qtaEvasa;
}
@@ -126,6 +140,15 @@ public class DialogInputQuantity {
return this;
}
+ public Date getDataScad() {
+ return dataScad;
+ }
+
+ public DTO setDataScad(Date dataScad) {
+ this.dataScad = dataScad;
+ return this;
+ }
+
public boolean getCanPartitaMagBeChanged() {
return canPartitaMagBeChanged;
}
@@ -134,6 +157,24 @@ public class DialogInputQuantity {
this.canPartitaMagBeChanged = canPartitaMagBeChanged;
return this;
}
+
+ public Boolean isCanDataScadBeChanged() {
+ return canDataScadBeChanged;
+ }
+
+ public DTO setCanDataScadBeChanged(boolean canDataScadBeChanged) {
+ this.canDataScadBeChanged = canDataScadBeChanged;
+ return this;
+ }
+
+ public Boolean getShouldAskDataScad() {
+ return shouldAskDataScad;
+ }
+
+ public DTO setShouldAskDataScad(Boolean shouldAskDataScad) {
+ this.shouldAskDataScad = shouldAskDataScad;
+ return this;
+ }
}
private static ColorStateList originalColorStateList = null;
@@ -232,14 +273,30 @@ public class DialogInputQuantity {
quantityDTO.qtaTot.set(qtaDaEvadere);
}
+ if(dto.getNumCnf() != null) {
+ quantityDTO.numCnf.set(new BigDecimal(dto.getNumCnf()).floatValue());
+ }
+
if(quantityDTO.numCnf.get(false) == null) {
quantityDTO.numCnf.set(quantityDTO.qtaTot.get() / quantityDTO.qtaCnf.get());
}
quantityDTO.canPartitaMagBeChanged.set(dto.getCanPartitaMagBeChanged());
+ if(dto.isCanDataScadBeChanged() != null){
+ quantityDTO.canDataScadBeChanged.set(dto.isCanDataScadBeChanged());
+ }
+
quantityDTO.shouldAskDataScad.set(dto.mtbAart.isFlagTracciabilita() && dto.mtbAart.getGgScadPartita() != null && dto.mtbAart.getGgScadPartita() > 0);
+ if(dto.getShouldAskDataScad() != null) {
+ quantityDTO.shouldAskDataScad.set(dto.getShouldAskDataScad());
+ }
+
+ if(dto.getDataScad() != null) {
+ quantityDTO.expireDate = dto.getDataScad();
+ }
+
if(quantityDTO.expireDate == null && dto.mtbAart.getGgScadPartita() != null && dto.mtbAart.getGgScadPartita() > 0) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, dto.mtbAart.getGgScadPartita()); // number of days to add
diff --git a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml
index a80a0768..199ef273 100644
--- a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml
+++ b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml
@@ -1,4 +1,4 @@
-
+
@@ -50,17 +50,74 @@
-
-
-
+ android:orientation="vertical"
+ app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/dialog_input_quantity_articolo.xml b/app/src/main/res/layout/dialog_input_quantity_articolo.xml
index cf094ea1..c2d458c6 100644
--- a/app/src/main/res/layout/dialog_input_quantity_articolo.xml
+++ b/app/src/main/res/layout/dialog_input_quantity_articolo.xml
@@ -196,6 +196,7 @@
android:layout_height="wrap_content"
tools:text="11 nov 2018"
android:textSize="16sp"
+ android:enabled="@{quantityViewModel.canDataScadBeChanged}"
android:visibility="@{quantityViewModel.shouldAskDataScad.get() == false ? View.GONE : View.VISIBLE}"
app:binding="@{quantityViewModel.expireDateString}"
app:layout_constraintStart_toEndOf="@id/guideline_partita_data"
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index a0403d26..7c716f07 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -121,4 +121,10 @@
Nessuna UL registrata a magazzino
Nessun articolo da prelevare
+
+ Il barcode scansionato non ha fornito alcun risultato
+
+ Filtro articoli applicato
+ Rimuovi filtro
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 2847d09c..3773cf98 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -44,7 +44,10 @@
#EF6C00
+ #EF5350
+ #F44336
#E53935
+ #D32F2F
#FDD835
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9131beee..77622ad9 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -129,4 +129,10 @@
No LU already registered
No items to pick
+ The scanned label has already been used
+ The scanned barcode did not produce any results
+
+ Item filter applied
+ Remove filter
+
diff --git a/barcode_base_library/.gitignore b/barcode_base_library/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/barcode_base_library/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/barcode_base_library/build.gradle b/barcode_base_library/build.gradle
new file mode 100644
index 00000000..68bb7760
--- /dev/null
+++ b/barcode_base_library/build.gradle
@@ -0,0 +1,8 @@
+apply plugin: 'java-library'
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+}
+
+sourceCompatibility = "7"
+targetCompatibility = "7"
diff --git a/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/exception/BarcodeAdapterNotFoundException.java b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/exception/BarcodeAdapterNotFoundException.java
new file mode 100644
index 00000000..063a539d
--- /dev/null
+++ b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/exception/BarcodeAdapterNotFoundException.java
@@ -0,0 +1,9 @@
+package it.integry.plugins.barcode_base_library.exception;
+
+public class BarcodeAdapterNotFoundException extends Exception {
+
+ public BarcodeAdapterNotFoundException(String adapterName) {
+ super("L'adapter " + adapterName + " non è stato rilevato sul dispositivo corrente");
+ }
+
+}
diff --git a/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/extension/RunnableArgs.java b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/extension/RunnableArgs.java
new file mode 100644
index 00000000..c0cfd124
--- /dev/null
+++ b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/extension/RunnableArgs.java
@@ -0,0 +1,7 @@
+package it.integry.plugins.barcode_base_library.extension;
+
+public interface RunnableArgs {
+
+ void run(T data);
+
+}
\ No newline at end of file
diff --git a/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/interfaces/BarcodeReaderInterface.java b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/interfaces/BarcodeReaderInterface.java
new file mode 100644
index 00000000..1fd91786
--- /dev/null
+++ b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/interfaces/BarcodeReaderInterface.java
@@ -0,0 +1,17 @@
+package it.integry.plugins.barcode_base_library.interfaces;
+
+import it.integry.plugins.barcode_base_library.extension.RunnableArgs;
+import it.integry.plugins.barcode_base_library.exception.BarcodeAdapterNotFoundException;
+import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO;
+
+public interface BarcodeReaderInterface {
+
+ boolean isRightAdapter();
+
+ void init() throws BarcodeAdapterNotFoundException;
+
+ void register(RunnableArgs onScanSuccessfull, RunnableArgs onScanFailed);
+
+ String getAdapterName();
+
+}
diff --git a/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/model/BarcodeScanDTO.java b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/model/BarcodeScanDTO.java
new file mode 100644
index 00000000..5ac0a3f2
--- /dev/null
+++ b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/model/BarcodeScanDTO.java
@@ -0,0 +1,55 @@
+package it.integry.plugins.barcode_base_library.model;
+
+public class BarcodeScanDTO {
+
+ private BarcodeType type;
+ private String stringValue;
+ private byte[] byteValue;
+ private String name;
+ private int decodingTime;
+
+ public BarcodeType getType() {
+ return type;
+ }
+
+ public BarcodeScanDTO setType(BarcodeType type) {
+ this.type = type;
+ return this;
+ }
+
+ public String getStringValue() {
+ return stringValue;
+ }
+
+ public BarcodeScanDTO setStringValue(String stringValue) {
+ this.stringValue = stringValue;
+ return this;
+ }
+
+ public byte[] getByteValue() {
+ return byteValue;
+ }
+
+ public BarcodeScanDTO setByteValue(byte[] byteValue) {
+ this.byteValue = byteValue;
+ return this;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public BarcodeScanDTO setName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public int getDecodingTime() {
+ return decodingTime;
+ }
+
+ public BarcodeScanDTO setDecodingTime(int decodingTime) {
+ this.decodingTime = decodingTime;
+ return this;
+ }
+}
diff --git a/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/model/BarcodeType.java b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/model/BarcodeType.java
new file mode 100644
index 00000000..67b65c01
--- /dev/null
+++ b/barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/model/BarcodeType.java
@@ -0,0 +1,91 @@
+package it.integry.plugins.barcode_base_library.model;
+
+public enum BarcodeType {
+
+ NIL(0),
+ AIRLINE_2OF5_13_DIGIT(1),
+ AIRLINE_2OF5_15_DIGIT(2),
+ AZTEC(3),
+ AUSTRALIAN_POSTAL(4),
+ BOOKLAND_EAN(5),
+ BPO(6),
+ CANPOST(7),
+ CHINAPOST(8),
+ CHINESE_2OF5(9),
+ CODABAR(10),
+ CODABLOCK(11),
+ CODE11(12),
+ CODE128(13),
+ CODE16K(14),
+ CODE32(15),
+ CODE39(16),
+ CODE49(17),
+ CODE93(18),
+ COMPOSITE(19),
+ COUPON_CODE(20),
+ DATAMATRIX(21),
+ DISCRETE_2OF5(22),
+ DUTCH_POSTAL(23),
+ EAN128(24),
+ EAN13(25),
+ EAN8(26),
+ GS1_DATABAR_14(27),
+ GS1_DATABAR_EXPANDED(28),
+ GS1_DATABAR_LIMITED(29),
+ HONGKONG_2OF5(30),
+ IATA_2OF5(31),
+ IDTAG(32),
+ INTERLEAVED_2OF5(33),
+ ISBT128(34),
+ JAPANESE_POSTAL(35),
+ KOREAN_POSTAL(36),
+ MATRIX_2OF5(37),
+ MAXICODE(38),
+ MESA(39),
+ MICRO_PDF417(40),
+ MICRO_QR(41),
+ MSI(42),
+ NEC_2OF5(43),
+ OCR(44),
+ PDF417(45),
+ PLESSEY(46),
+ POSICODE(47),
+ POST_US4(48),
+ QR(49),
+ STRAIGHT_2OF5(50),
+ STANDARD_2OF5(51),
+ TELEPEN(52),
+ TLCODE39(53),
+ TRIOPTIC(54),
+ UK_POSTAL(55),
+ UPCA(56),
+ UPCE(57),
+ UPCE1(58),
+ US_PLANET(59),
+ US_POSTNET(60),
+ USPS_4CB(61),
+ RSS(62),
+ LABEL(63),
+ HANXIN(64),
+ GRIDMATRIX(65),
+ INFO_MAIL(66),
+ INTELLIGENT_MAIL(67),
+ SWEDENPOST(68),
+ LAST(69);
+
+ private Integer text;
+ BarcodeType(Integer text) {
+ this.text = text;
+ }
+ public Integer getValue() {
+ return this.text;
+ }
+
+ public static BarcodeType fromInt(Integer text) {
+ for (BarcodeType b : BarcodeType.values()) {
+ if (b.text.equals(text)) return b;
+ }
+ return null;
+ }
+
+}
diff --git a/pointmobilescannerlibrary/build.gradle b/pointmobilescannerlibrary/build.gradle
index 14a5bf75..e8596ef8 100644
--- a/pointmobilescannerlibrary/build.gradle
+++ b/pointmobilescannerlibrary/build.gradle
@@ -25,10 +25,10 @@ android {
}
dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
-
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:27.1.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ implementation project(':barcode_base_library')
}
diff --git a/pointmobilescannerlibrary/libs/device.sdk.jar b/pointmobilescannerlibrary/libs/device.sdk.jar
new file mode 100644
index 00000000..a22055a5
Binary files /dev/null and b/pointmobilescannerlibrary/libs/device.sdk.jar differ
diff --git a/pointmobilescannerlibrary/src/main/AndroidManifest.xml b/pointmobilescannerlibrary/src/main/AndroidManifest.xml
index 93192785..6e9286be 100644
--- a/pointmobilescannerlibrary/src/main/AndroidManifest.xml
+++ b/pointmobilescannerlibrary/src/main/AndroidManifest.xml
@@ -1,2 +1,25 @@
+ package="it.integry.pointmobilescannerlibrary">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pointmobilescannerlibrary/src/main/java/it/integry/pointmobilescannerlibrary/PointMobileBarcodeReader.java b/pointmobilescannerlibrary/src/main/java/it/integry/pointmobilescannerlibrary/PointMobileBarcodeReader.java
new file mode 100644
index 00000000..e2c92bdc
--- /dev/null
+++ b/pointmobilescannerlibrary/src/main/java/it/integry/pointmobilescannerlibrary/PointMobileBarcodeReader.java
@@ -0,0 +1,100 @@
+package it.integry.pointmobilescannerlibrary;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import device.common.DecodeResult;
+import device.common.ScanConst;
+import device.sdk.ScanManager;
+import it.integry.plugins.barcode_base_library.exception.BarcodeAdapterNotFoundException;
+import it.integry.plugins.barcode_base_library.interfaces.BarcodeReaderInterface;
+import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO;
+import it.integry.plugins.barcode_base_library.extension.RunnableArgs;
+import it.integry.plugins.barcode_base_library.model.BarcodeType;
+
+public class PointMobileBarcodeReader implements BarcodeReaderInterface {
+
+ private Context mContext;
+ private static ScanManager mScanManager;
+ private static DecodeResult mDecodeResult;
+
+ private static RunnableArgs mOnScanSuccessfull;
+ private static RunnableArgs mOnScanFailed;
+
+ private static String TAG = PointMobileBarcodeReader.class.getName();
+
+
+ private int mBackupResultType = ScanConst.ResultType.DCD_RESULT_COPYPASTE;
+
+ public PointMobileBarcodeReader(Context context) {
+ this.mContext = context;
+
+ mScanManager = new ScanManager();
+ mDecodeResult = new DecodeResult();
+ }
+
+ @Override
+ public boolean isRightAdapter() {
+ return mScanManager != null;
+ }
+
+ @Override
+ public void init() throws BarcodeAdapterNotFoundException {
+ if(isRightAdapter()){
+ mBackupResultType = mScanManager.aDecodeGetResultType();
+ mScanManager.aDecodeSetResultType(ScanConst.ResultType.DCD_RESULT_USERMSG);
+ } else {
+ throw new BarcodeAdapterNotFoundException(getAdapterName());
+ }
+ }
+
+ @Override
+ public void register(RunnableArgs onScanSuccessfull, RunnableArgs onScanFailed) {
+ mOnScanSuccessfull = onScanSuccessfull;
+ mOnScanFailed = onScanFailed;
+ }
+
+ @Override
+ public String getAdapterName() {
+ return "PointMobile";
+ }
+
+
+
+
+
+ public static class ScanResultReceiver extends BroadcastReceiver {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (mScanManager != null) {
+ if (ScanConst.INTENT_USERMSG.equals(intent.getAction())) {
+ mScanManager.aDecodeGetResult(mDecodeResult.recycle());
+
+ if (mOnScanSuccessfull != null) {
+
+ try {
+
+ BarcodeScanDTO barcodeScanDTO = new BarcodeScanDTO()
+ .setByteValue(mDecodeResult.decodeValue)
+ .setStringValue(mDecodeResult.toString().replaceAll("\n", "").replaceAll("\r", "").trim())
+ .setType(BarcodeType.fromInt(mDecodeResult.symType))
+ .setName(mDecodeResult.symName)
+ .setDecodingTime(mDecodeResult.decodeTimeMillisecond);
+
+ mOnScanSuccessfull.run(barcodeScanDTO);
+
+ } catch (Exception ex) {
+ Log.e(TAG, ex.getMessage());
+
+ if(mOnScanFailed != null) mOnScanFailed.run(ex);
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+}
diff --git a/settings.gradle b/settings.gradle
index 7f56acbc..d6bcdaf1 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':app', ':pointmobilescannerlibrary', ':waterfall_toolbar'
+include ':app', ':pointmobilescannerlibrary', ':waterfall_toolbar', ':barcode_base_library'