From 218a86cdb1ac558b58bc7994ba35917199c97257 Mon Sep 17 00:00:00 2001 From: Giuseppe Scorrano Date: Tue, 27 Nov 2018 13:09:54 +0100 Subject: [PATCH] Implementata lettura barcode in Accettazione --- .idea/caches/build_file_checksums.ser | Bin 667 -> 729 bytes .idea/gradle.xml | 1 + .idea/modules.xml | 1 + app/build.gradle | 7 +- app/src/main/AndroidManifest.xml | 1 + .../integrywmsnative/MainActivity.java | 11 + .../integrywmsnative/MainApplication.java | 4 + .../integrywmsnative/core/CommonConst.java | 2 + .../REST/consumers/ArticoloRESTConsumer.java | 32 ++ .../ArticoloRESTConsumerService.java | 17 + .../REST/consumers/BarcodeRESTConsumer.java | 34 ++ .../consumers/BarcodeRESTConsumerService.java | 19 + .../consumers/ColliMagazzinoRESTConsumer.java | 21 +- .../ColliMagazzinoRESTConsumerService.java | 6 + .../core/REST/model/Ean128Model.java | 342 ++++++++++++++++++ .../core/REST/model/Ean13PesoModel.java | 48 +++ .../barcode_reader/BarcodeCallbackDTO.java | 39 ++ .../core/barcode_reader/BarcodeManager.java | 137 +++++++ .../integrywmsnative/core/model/MtbColt.java | 9 + .../core/utility/UtilityBarcode.java | 56 +++ .../core/utility/UtilityProgress.java | 17 + .../dto/OrdineAccettazioneDTO.java | 10 + .../AccettazioneOrdineInevasoActivity.java | 14 +- .../core/AccettazioneOrdineInevasoHelper.java | 23 +- ...OrdineAccettazioneRowDispatchCallback.java | 3 +- .../MainListOrdineAccettazioneAdapter.java | 7 +- ...ccettazioneOrdineInevasoListViewModel.java | 4 +- ...eOnOrdineAccettazioneInevasoViewModel.java | 283 ++++++++++++++- .../input_quantity/DialogInputQuantity.java | 77 +++- .../activity_accettazione_ordine_inevaso.xml | 73 +++- .../activity_vendita_ordine_inevaso.xml | 1 - .../layout/dialog_input_quantity_articolo.xml | 1 + app/src/main/res/values-it/strings.xml | 6 + app/src/main/res/values/colors.xml | 3 + app/src/main/res/values/strings.xml | 6 + barcode_base_library/.gitignore | 1 + barcode_base_library/build.gradle | 8 + .../BarcodeAdapterNotFoundException.java | 9 + .../extension/RunnableArgs.java | 7 + .../interfaces/BarcodeReaderInterface.java | 17 + .../model/BarcodeScanDTO.java | 55 +++ .../model/BarcodeType.java | 91 +++++ pointmobilescannerlibrary/build.gradle | 4 +- pointmobilescannerlibrary/libs/device.sdk.jar | Bin 0 -> 168157 bytes .../src/main/AndroidManifest.xml | 25 +- .../PointMobileBarcodeReader.java | 100 +++++ settings.gradle | 2 +- 47 files changed, 1573 insertions(+), 61 deletions(-) create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumer.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumerService.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean128Model.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean13PesoModel.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeCallbackDTO.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeManager.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java create mode 100644 app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java create mode 100644 barcode_base_library/.gitignore create mode 100644 barcode_base_library/build.gradle create mode 100644 barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/exception/BarcodeAdapterNotFoundException.java create mode 100644 barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/extension/RunnableArgs.java create mode 100644 barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/interfaces/BarcodeReaderInterface.java create mode 100644 barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/model/BarcodeScanDTO.java create mode 100644 barcode_base_library/src/main/java/it/integry/plugins/barcode_base_library/model/BarcodeType.java create mode 100644 pointmobilescannerlibrary/libs/device.sdk.jar create mode 100644 pointmobilescannerlibrary/src/main/java/it/integry/pointmobilescannerlibrary/PointMobileBarcodeReader.java diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 3316d15e31b26fc9477f9c5af8bb21ad5f42a046..ad7fcb1d773b4efaa99215ef29e75bc59dcefd2f 100644 GIT binary patch delta 143 zcmV;A0C4}C1=$6Vm;_I;S|gF1OaTdz=_()~zc_i4?z^RzK;o=>jAD9p03l*wa$|2~ zWnW@pb7fzXJ^~&*Enq7}uso9mO~Pu5*2G-ObN~-?Wps3DZfA2YXL4a=Y-M$E0Db@l x0000Gmdd2s(=oVb8E`<`lrvlsvrhpH0T91sb08Km@_cY@C)`ebDk76?0xt?dHtzrc delta 83 zcmV-Z0IdJn1)Bwsm;^T$ld+MUOaTay=_(MkB2Yz{?yqR`M@uqCV}opyVF4Tv-;Ct@ p{VB17*6Zz~UJx=SvyA}_0T36QlH{P-oG;3mjgD5T%NdiZ0x#*TB}4!K 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[] registeredBarcodeReaderInterfaces = new Class[]{ + PointMobileBarcodeReader.class + }; + + + public static void init(Context context) { + BarcodeManager.context = context; + + initBarcodeReader(); + } + + private static void initBarcodeReader() { + + for (Class 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 0000000000000000000000000000000000000000..a22055a55e1ffcc3382e313dd688d399449288ea GIT binary patch literal 168157 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 z
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

!3bB*d_S9;-9dQB*5 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 K_@UhHwK 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 CG;<69 literal 0 HcmV?d00001 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'