Compare commits

...

61 Commits

Author SHA1 Message Date
61b0049a87 Finish v1.13.19(175) 2020-12-22 13:29:05 +01:00
5c4d72dae2 -> v1.13.20 (176) 2020-12-22 13:28:58 +01:00
39f52bf3dd Rimosse alcune viste non più utilizzate.
Aggiunta history dei lotti accettati.
2020-12-22 13:20:31 +01:00
e50aa1f014 Finish v1.13.28(174) 2020-12-17 13:03:50 +01:00
b1d06605cd Finish v1.13.28(174) 2020-12-17 13:03:50 +01:00
ed55eb4279 -> v1.13.28(174) 2020-12-17 13:03:42 +01:00
9ac96ac8fd Risolta anomalia del filtro ordine quando si recupera una UL.
Risolta anomalia dello spazio nel campo del Lotto.
2020-12-17 13:03:00 +01:00
5be3fd9c25 Merge branch 'master' into develop 2020-12-10 16:26:34 +01:00
bab558252a Finish Hotfix-QtaDaEvadere 2020-12-10 16:26:33 +01:00
c256b39119 Fix su qta da evadere in Accettazione.
-> v1.13.27 (173)
2020-12-10 16:26:28 +01:00
af76627c50 Finish v1.13.26(172) 2020-11-27 11:11:15 +01:00
f9544566e9 Finish v1.13.26(172) 2020-11-27 11:11:14 +01:00
4f02c3a4bc -> v1.13.26 (172) 2020-11-27 11:11:09 +01:00
ea8d8835cd Sostituita query load doc rows con vista 2020-11-27 11:09:53 +01:00
61e07e8f76 Finish v1.13.25(171) 2020-11-23 13:01:16 +01:00
962e1f7fa4 Finish v1.13.25(171) 2020-11-23 13:01:15 +01:00
07d889bcd5 -> v1.13.25 (171) 2020-11-23 13:01:07 +01:00
170db3eb0a Fix su unt mis accettazione 2020-11-23 13:00:39 +01:00
856a807e3e Finish v1.13.24(170) 2020-11-17 18:30:00 +01:00
c56aa812ff Finish v1.13.24(170) 2020-11-17 18:30:00 +01:00
770f014a70 -> v1.13.24 (170) 2020-11-17 18:29:56 +01:00
f6ff7aa80d Aggiunto controllo su refMtbColt 2020-11-17 18:29:15 +01:00
4cd3e7e102 Finish v1.13.23(169) 2020-11-17 10:40:22 +01:00
69bf5e319e Finish v1.13.23(169) 2020-11-17 10:40:21 +01:00
88fe4d82cd -> v1.13.23 (169) 2020-11-17 10:40:16 +01:00
c8cd794cfc Risolto problema di refMtbColt nulla in alcuni casi particolari della spedizione 2020-11-17 10:39:37 +01:00
5dcc567eab Merge branch 'master' into develop 2020-11-16 15:13:16 +01:00
89eafaf6ca Finish Hotfix-QueryDoc 2020-11-16 15:13:15 +01:00
6fc7f80ed4 -> v1.13.22 (168) 2020-11-16 15:13:08 +01:00
2464d44222 Merge branch 'master' into develop 2020-11-13 11:50:31 +01:00
96d544f2ad Finish Hotfix-Docs 2020-11-13 11:50:31 +01:00
e85ddc6580 Fix sum num_cnf query load righe doc 2020-11-13 11:50:25 +01:00
89f6b9ce71 Finish v1.13.21(167) 2020-11-13 10:25:30 +01:00
c7d0ed1747 Finish v1.13.21(167) 2020-11-13 10:25:30 +01:00
b84b3c28f3 -> v1.13.21 (167) 2020-11-13 10:25:23 +01:00
3a3bf4c2dd Fix su scannedMtbColr nullo in spedizione. 2020-11-13 10:24:42 +01:00
4809a96e5b Finish v1.13.20(166) 2020-11-11 12:33:21 +01:00
5f206feb12 Finish v1.13.20(166) 2020-11-11 12:33:20 +01:00
575762da2f -> v1.13.20 (166) 2020-11-11 12:33:14 +01:00
a96078c9e6 Risolto problema di picking diverso dal collo suggerito. 2020-11-11 12:32:38 +01:00
b1941d5c34 Aggiornato Gradle.
Sistemati i testi dei bottoni in dialog base.
Implementato logout nel dialog di errore all'avvio dell'app.
2020-11-11 10:48:08 +01:00
4dc688af14 Finish v1.13.19(165) 2020-11-10 15:21:50 +01:00
6675757317 Finish v1.13.19(165) 2020-11-10 15:21:50 +01:00
1310b34a8d Aggiunto supporto a Zebra TC20.
Fix vari.
2020-11-10 15:20:50 +01:00
4e8fe26c6b Merge branch 'master' into develop 2020-11-09 15:24:02 +01:00
32ff7bfa39 Finish v1.13.18(164) 2020-11-09 15:24:01 +01:00
c8cfa486e1 -> v1.13.18 (164) 2020-11-09 15:23:38 +01:00
0356c912e6 Finish v1.13.17(163) 2020-11-09 13:21:38 +01:00
7f448bbbb3 Finish v1.13.17(163) 2020-11-09 13:21:37 +01:00
f940b6f239 -> v1.13.17 (163) 2020-11-09 13:21:32 +01:00
a3de73dc66 Implementato suggerimento data scad in base alla shelf life del prodotto 2020-11-09 13:20:49 +01:00
9fa1aa156e Finish Refactoring_PickingResi 2020-11-09 12:29:17 +01:00
03e1a186b8 Completato refactoring picking resi 2020-11-09 12:29:12 +01:00
598372675f Merge branch 'develop' into feature/Refactoring_PickingResi
# Conflicts:
#	app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java
2020-11-05 18:31:13 +01:00
ffccd2f3d3 Sistemata scansione barcode in DialogInputQuantityV2 2020-11-05 18:29:52 +01:00
4252e13323 Finish v1.13.16(162) 2020-11-05 12:52:26 +01:00
7c55cce6ae Finish v1.13.16(162) 2020-11-05 12:52:25 +01:00
45caece076 -> v1.13.16 (162) 2020-11-05 12:52:20 +01:00
79dc75fc89 Implementata visualizzazione dei colli di riferimento in contenuto LU. 2020-11-05 12:51:20 +01:00
f9483e14be Ricreato caricamento lista principale 2020-11-04 12:40:28 +01:00
d3396cdb63 Finish v1.13.15(161) 2020-10-28 11:06:30 +01:00
79 changed files with 2592 additions and 2325 deletions

View File

@@ -7,8 +7,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 161
def appVersionName = '1.13.15'
def appVersionCode = 175
def appVersionName = '1.13.29'
signingConfigs {
release {
@@ -91,27 +91,27 @@ dependencies {
//Firebase
// Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:25.12.0')
implementation platform('com.google.firebase:firebase-bom:26.0.0')
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.firebase:firebase-core'
implementation 'com.google.firebase:firebase-crash'
implementation 'com.google.firebase:firebase-perf'
implementation 'com.google.firebase:firebase-crashlytics'
implementation 'com.google.firebase:firebase-analytics'
implementation 'com.google.android.gms:play-services-basement:17.4.0'
implementation 'com.google.firebase:firebase-perf'
implementation 'com.google.android.gms:play-services-basement:17.5.0'
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.3.0-alpha03'
implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
implementation 'com.google.android.material:material:1.3.0-alpha04'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
implementation 'androidx.preference:preference:1.1.1'
implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.annimon:stream:1.2.1'
implementation 'androidx.lifecycle:lifecycle-runtime:2.2.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0'
implementation 'org.apache.commons:commons-text:1.9'

View File

@@ -14,14 +14,6 @@
}
},
"oauth_client": [
{
"client_id": "963231271247-b50hgcd89u9ksfc7189mri044kq8aq1p.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "it.integry.integrywmsnative",
"certificate_hash": "864b69dcc40196befa65638a868cec1c61245fa6"
}
},
{
"client_id": "963231271247-59qdc1vobbnjfp135ce4hv12c53s9hse.apps.googleusercontent.com",
"client_type": 1,
@@ -30,6 +22,14 @@
"certificate_hash": "3b6d97a981f446f5011049d781aeb9960f9352af"
}
},
{
"client_id": "963231271247-b50hgcd89u9ksfc7189mri044kq8aq1p.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "it.integry.integrywmsnative",
"certificate_hash": "864b69dcc40196befa65638a868cec1c61245fa6"
}
},
{
"client_id": "963231271247-6jof105pci1g0g7m2e7kjbtrtk2443g4.apps.googleusercontent.com",
"client_type": 3
@@ -41,20 +41,13 @@
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 2,
"other_platform_oauth_client": [
{
"client_id": "963231271247-6jof105pci1g0g7m2e7kjbtrtk2443g4.apps.googleusercontent.com",
"client_type": 3
}
]
},
"ads_service": {
"status": 2
}
}
}

View File

@@ -25,10 +25,14 @@
android:windowSoftInputMode="adjustNothing" />
<activity android:name=".gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity" />
<activity
android:name=".gest.picking_resi.PickingResiActivity"
android:name=".gest.picking_resi_OLD.PickingResiActivity"
android:label="@string/activity_ultime_consegne_title"
android:screenOrientation="portrait"
android:theme="@style/Light" />
<activity
android:name=".gest.picking_resi.PickingResiActivity"
android:screenOrientation="portrait"
android:theme="@style/Light" />
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"

View File

@@ -175,8 +175,8 @@ public class MainActivity extends BaseActivity
break;
case R.id.nav_logout:
UtilitySettings.logout(this.mAppDatabase);
ServerStatusChecker.dispose();
UtilitySettings.logout();
startLoginActivity();
break;

View File

@@ -34,6 +34,8 @@ public class MainApplication extends Application {
.roomModule(roomModule)
.build();
appComponent.inject(appContext);
appContext.init();
res = getResources();
}

View File

@@ -3,11 +3,14 @@ package it.integry.integrywmsnative;
import javax.inject.Singleton;
import dagger.Component;
import it.integry.integrywmsnative.core.context.AppContext;
import it.integry.integrywmsnative.core.data_store.db.RoomModule;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingComponent;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingModule;
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoComponent;
import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoModule;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiComponent;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiModule;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditComponent;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditModule;
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdineAcquistoGrigliaComponent;
@@ -16,6 +19,8 @@ import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeComp
import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeModule;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
// Definition of the Application graph
@Singleton
@@ -28,7 +33,9 @@ import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
PickingLiberoModule.class,
RettificaGiacenzeModule.class,
SpedizioneModule.class,
AccettazionePickingModule.class})
AccettazionePickingModule.class,
PickingResiModule.class,
DialogInputQuantityV2Module.class})
public interface MainApplicationComponent {
MainActivityComponent.Factory mainActivityComponent();
@@ -38,5 +45,11 @@ public interface MainApplicationComponent {
RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent();
SpedizioneComponent.Factory spedizioneComponent();
AccettazionePickingComponent.Factory accettazionePickingComponent();
PickingResiComponent.Factory pickingResiComponent();
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();
void inject(AppContext appContext);
}

View File

@@ -6,12 +6,16 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
import javax.inject.Inject;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecover;
import it.integry.integrywmsnative.core.data_store.db.AppDatabase;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.settings.Stash;
import it.integry.integrywmsnative.core.utility.UtilityContext;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilitySettings;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
@@ -20,6 +24,9 @@ public class AppContext {
//Note: this is the Application Context NOT the Activity Context
private final Context mContext;
@Inject
AppDatabase mAppDatabase;
public AppContext(Context context) {
this.mContext = context;
}
@@ -63,6 +70,7 @@ public class AppContext {
UtilityContext.initApplicationContext(mContext);
UtilityResources.init(mContext);
UtilityToast.init(mContext);
UtilitySettings.init(mAppDatabase);
}
private void initLogger() {

View File

@@ -3,15 +3,18 @@ package it.integry.integrywmsnative.core.context;
import android.content.Context;
import android.text.SpannableString;
import java.lang.reflect.Method;
import androidx.appcompat.app.AppCompatActivity;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import java.lang.reflect.Method;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilitySettings;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
public class MainContext {
@@ -44,7 +47,10 @@ public class MainContext {
private void initDBData(Runnable onComplete) {
SettingsManager.loadDBVariables(onComplete, ex -> {
DialogSimpleMessageHelper.makeErrorDialog(mContext,
new SpannableString(ex.getMessage()), null, mContext::finish).show();
new SpannableString(ex.getMessage()), null, mContext::finish, R.string.logout, () -> {
UtilitySettings.logout();
MainApplication.exit();
}).show();
}
);
}

View File

@@ -6,7 +6,7 @@ import androidx.room.ForeignKey;
import androidx.room.Index;
import androidx.room.PrimaryKey;
import java.util.Date;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@Entity(
tableName = "articoli_griglia",
@@ -159,7 +159,7 @@ public class ArticoloGriglia {
articolo.setQtaCnf(this.getQtaCnf());
articolo.setUntMis(this.getUntMis());
articolo.setDescrizione(this.getDescrizione());
articolo.setDataIns(new Date());
articolo.setDataIns(UtilityDate.getDateInstance());
articolo.setQtaOrd(0);
return articolo;

View File

@@ -1,23 +1,6 @@
package it.integry.integrywmsnative.core.di;
import androidx.annotation.ColorRes;
import androidx.annotation.IdRes;
import androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.BindingAdapter;
import androidx.databinding.BindingConversion;
import androidx.constraintlayout.widget.Guideline;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import androidx.core.util.Pair;
import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.appcompat.widget.AppCompatTextView;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.res.ColorStateList;
import android.util.Log;
import android.view.View;
@@ -25,10 +8,25 @@ import android.widget.AutoCompleteTextView;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import androidx.annotation.ColorRes;
import androidx.appcompat.widget.AppCompatCheckBox;
import androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.constraintlayout.widget.Guideline;
import androidx.core.content.res.ResourcesCompat;
import androidx.core.util.Pair;
import androidx.databinding.BindingAdapter;
import androidx.databinding.BindingConversion;
import androidx.databinding.Observable;
import androidx.databinding.ObservableField;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
@@ -37,15 +35,10 @@ import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import androidx.databinding.Observable;
import androidx.databinding.ObservableField;
import androidx.lifecycle.MutableLiveData;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityContext;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString;
@@ -178,7 +171,7 @@ public class Converters {
view.addTextChangedListener(watcher);
}
String newValue = observableString.get();
String viewValue = view.getText().toString().trim();
String viewValue = view.getText().toString();
if(!viewValue.equalsIgnoreCase(newValue)) {
view.setText(newValue);
@@ -386,7 +379,7 @@ public class Converters {
}
@BindingAdapter({"app:visibility"})
@BindingAdapter({"visibility"})
public static void bindViewVisibility(View view, final BindableBoolean bindableBoolean) {
if (view.getTag(R.id.bound_observable) != bindableBoolean) {
view.setTag(R.id.bound_observable, bindableBoolean);

View File

@@ -1,10 +1,15 @@
package it.integry.integrywmsnative.core.interfaces.viewmodel_listeners;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
public interface ILUBaseOperationsListener {
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
void onLUOpened(MtbColt mtbColt);
void onLUClosed();
void onRowSaved();
}

View File

@@ -1,7 +1,9 @@
package it.integry.integrywmsnative.core.interfaces.viewmodel_listeners;
public interface ILoadingListener {
void onLoadingStarted();
void onLoadingEnded();
}

View File

@@ -141,6 +141,8 @@ public class DtbDocr {
private MtbAart mtbAart;
private String dataScadPartitaMag;
public String getCodAnag() {
return codAnag;
}
@@ -739,6 +741,19 @@ public class DtbDocr {
return this;
}
public String getDataScadPartitaMag() {
return dataScadPartitaMag;
}
public Date getDataScadPartitaMagD() {
return UtilityDate.recognizeDateWithExceptionHandler(getDataScadPartitaMag());
}
public DtbDocr setDataScadPartitaMag(String dataScadPartitaMag) {
this.dataScadPartitaMag = dataScadPartitaMag;
return this;
}
public MtbAart getMtbAart() {
return mtbAart;
}

View File

@@ -10,9 +10,19 @@ import it.integry.integrywmsnative.core.utility.UtilityString;
public class PickDataDTO {
private MtbColt refMtbColt;
private MtbColt sourceMtbColt;
private ManualPickDTO manualPickDTO;
public MtbColt getRefMtbColt() {
return refMtbColt;
}
public PickDataDTO setRefMtbColt(MtbColt refMtbColt) {
this.refMtbColt = refMtbColt;
return this;
}
public MtbColt getSourceMtbColt() {
return sourceMtbColt;
}

View File

@@ -11,7 +11,7 @@ import retrofit2.http.Query;
public interface MesRESTConsumerService {
@GET("mes/getOrdiniLavorazioneMateriale")
@GET("mes_v2/getOrdiniLavorazioneMateriale")
Call<ServiceRESTResponse<List<OrdineLavorazioneDTO>>> getOrdiniLavorazioneMateriale(@Query("codJfas") String codJfas, @Query("idMateriale") String idMateriale);
}

View File

@@ -6,7 +6,6 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
@@ -18,6 +17,7 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityThread;
import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.ArtDTO;
@@ -84,7 +84,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
}
ordineDTO.setChiaveGriglia(griglia.getCodAlis());
ordineDTO.setDataConsD(new Date());
ordineDTO.setDataConsD(UtilityDate.getDateInstance());
ordineDTO.setArtRows(artRows);
saveDTO.setGestione("O");
saveDTO.setOrdineDTO(ordineDTO);
@@ -101,7 +101,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
if (dtoList.size() > 0){
DtbOrdt dto = dtoList.get(0);
ordine.setTransmitted(true);
ordine.setTransmissionDate(new Date());
ordine.setTransmissionDate(UtilityDate.getDateInstance());
ordine.setGestione(dto.getGestione());
ordine.setDataOrdS(dto.getDataOrd());
ordine.setCodMdep(dto.getCodMdep());

View File

@@ -3,6 +3,7 @@ package it.integry.integrywmsnative.core.rest.model;
public class Ean13PesoModel {
private String precode;
//TODO: Change to bigdecimal
private Float peso;
public String getPrecode() {

View File

@@ -26,6 +26,14 @@ public class UtilityBigDecimal {
return input.compareTo(toCompareWith) < 0;
}
public static boolean equalsOrLowerThan(BigDecimal input, BigDecimal toCompareWith) {
return equalsTo(input, toCompareWith) || lowerThan(input, toCompareWith);
}
public static boolean equalsOrGreaterThan(BigDecimal input, BigDecimal toCompareWith) {
return equalsTo(input, toCompareWith) || greaterThan(input, toCompareWith);
}
public static BigDecimal getLowerBetween(BigDecimal input1, BigDecimal input2) {
if(input1 == null) return input2;
if(input2 == null) return input1;

View File

@@ -6,10 +6,16 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
public class UtilitySettings {
public static void logout(AppDatabase appDatabase){
private static AppDatabase mAppDatabase;
public static void init(AppDatabase appDatabase) {
mAppDatabase = appDatabase;
}
public static void logout(){
SettingsManager.i().setUser(null);
SettingsManager.i().setUserSession(null);
UtilityThread.executeParallel(appDatabase::clearAllTables);
UtilityThread.executeParallel(mAppDatabase::clearAllTables);
SettingsManager.update();
}

View File

@@ -42,6 +42,7 @@ import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding;
@@ -245,8 +246,8 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
}
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
accettazioneListModel.setUntMis("col");
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfDaEvadere());
accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
} else {
BigDecimal qtaEvasa = BigDecimal.ZERO;
@@ -262,9 +263,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
accettazioneListModel.setUntMis(x.getMtbAart().getUntMis());
}
if (x.getMtbAart() != null)
accettazioneListModel.setUntMis(x.getMtbAart().getUntMis());
accettazioneListModel.setOriginalModel(x);
list.add(accettazioneListModel);
@@ -299,7 +297,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
accettazioneListModel.setUntMis("col");
accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
} else {
BigDecimal qtaEvasa = BigDecimal.ZERO;
@@ -353,7 +351,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
accettazioneListModel.setUntMis("col");
accettazioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
} else {
BigDecimal qtaEvasa = BigDecimal.ZERO;
@@ -411,7 +409,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
.anyMatch(x -> !x.isHidden());
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();

View File

@@ -1,5 +1,6 @@
package it.integry.integrywmsnative.gest.accettazione_picking;
import androidx.annotation.NonNull;
import androidx.databinding.ObservableArrayList;
import androidx.lifecycle.MutableLiveData;
@@ -8,7 +9,9 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.inject.Inject;
@@ -48,6 +51,7 @@ import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.HistoryMtbAartDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.dto.PickingObjectDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.rest.AccettazionePickingRESTConsumer;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
@@ -67,12 +71,14 @@ public class AccettazionePickingViewModel {
private List<OrdineAccettazioneInevasoDTO> mOrders;
private List<SitArtOrdDTO> mSitArts;
private MutableLiveData<List<PickingObjectDTO>> mPickingList = new MutableLiveData<>();
private final MutableLiveData<List<PickingObjectDTO>> mPickingList = new MutableLiveData<>();
private MtbColt mCurrentMtbColt = null;
private GestioneEnum defaultGestioneOfUL = null;
private String mDefaultCodMdep = null;
private final List<HistoryMtbAartDTO> mHistoryUsedAarts = new ArrayList<>();
@Inject
public AccettazionePickingViewModel(ArticoloRESTConsumer articoloRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
@@ -419,7 +425,7 @@ public class AccettazionePickingViewModel {
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO) {
if(this.mCurrentMtbColt == null) return;
if (this.mCurrentMtbColt == null) return;
BigDecimal totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd();
BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd();
@@ -434,8 +440,8 @@ public class AccettazionePickingViewModel {
qtaColWithdrawRows.addAndGet(row.getQtaCol());
});
BigDecimal numCnfDaEvadere = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd().subtract(numCnfWithdrawRows.getBigDecimalValue());
BigDecimal qtaDaEvadere = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd().subtract(qtaColWithdrawRows.getBigDecimalValue());
BigDecimal numCnfDaEvadere = pickingObjectDTO.getSitArtOrdDTO().getNumCnfDaEvadere().subtract(numCnfWithdrawRows.getBigDecimalValue());
BigDecimal qtaDaEvadere = pickingObjectDTO.getSitArtOrdDTO().getQtaDaEvadere().subtract(qtaColWithdrawRows.getBigDecimalValue());
BigDecimal qtaCnfDaEvadere = qtaCnfOrd;
numCnfDaEvadere = UtilityBigDecimal.getGreaterBetween(numCnfDaEvadere, BigDecimal.ZERO);
@@ -493,10 +499,47 @@ public class AccettazionePickingViewModel {
}
}
BigDecimal initialNumCnf;
BigDecimal initialQtaCnf;
BigDecimal initialQtaTot;
if (qtaColDaPrelevare != null) {
initialNumCnf = numCnfDaPrelevare;
initialQtaCnf = qtaCnfDaPrelevare;
initialQtaTot = qtaColDaPrelevare;
} else {
initialNumCnf = totalNumCnfOrd;
initialQtaCnf = qtaCnfOrd;
initialQtaTot = totalQtaOrd;
}
if (UtilityBigDecimal.greaterThan(pickingObjectDTO.getMtbAart().getColliPedana(), BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(initialNumCnf, pickingObjectDTO.getMtbAart().getColliPedana())) {
initialNumCnf = pickingObjectDTO.getMtbAart().getColliPedana();
initialQtaTot = initialNumCnf.multiply(initialQtaCnf);
}
if (dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) {
dataScad = UtilityDate.getDateInstance();
Calendar c = new GregorianCalendar();
c.setTime(dataScad);
c.add(Calendar.DATE, pickingObjectDTO.getMtbAart().getGgScadPartita());
dataScad = c.getTime();
}
if(partitaMag == null && dataScad == null) {
HistoryMtbAartDTO historyMtbAartDTO = this.getHistoryItemIfExists(pickingObjectDTO.getMtbAart().getCodMart());
if(historyMtbAartDTO != null) {
partitaMag = historyMtbAartDTO.getPartitaMag();
dataScad = historyMtbAartDTO.getDataScad();
}
}
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
null, null, null,
initialNumCnf, initialQtaCnf, initialQtaTot,
qtaDaEvadere,
numCnfDaEvadere,
qtaCnfDaEvadere,
@@ -543,6 +586,8 @@ public class AccettazionePickingViewModel {
.setRigaOrd(pickingObjectDTO.getSitArtOrdDTO().getRigaOrd());
this.addHistoryItem(mtbColr);
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
@@ -638,6 +683,8 @@ public class AccettazionePickingViewModel {
mtbColt.getMtbColr().add(mtbColr);
this.addHistoryItem(mtbColr);
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
mtbColr.setNumCnf(numCnf)
@@ -648,7 +695,7 @@ public class AccettazionePickingViewModel {
.filter(x -> Stream.of(x.getWithdrawMtbColrs()).anyMatch(y -> y == mtbColrToUpdate))
.findSingle();
if(pickingObjectDTO.isPresent()) {
if (pickingObjectDTO.isPresent()) {
pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToUpdate);
pickingObjectDTO.get().getWithdrawMtbColrs().add(mtbColr);
}
@@ -744,7 +791,7 @@ public class AccettazionePickingViewModel {
return;
}
String reportName = ReportManager.getReportNameLUFromGestione(mCurrentMtbColt.getGestioneEnum());
String reportName = ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO);
this.mPrinterRESTConsumer.printCollo(
printerList.get(0),
@@ -783,6 +830,30 @@ public class AccettazionePickingViewModel {
this.sendFilterRemoved();
}
private void addHistoryItem(@NonNull MtbColr mtbColr) {
Optional<HistoryMtbAartDTO> optional = Stream.of(this.mHistoryUsedAarts)
.filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart()))
.findFirst();
if (optional.isPresent()) {
optional.get()
.setPartitaMag(mtbColr.getPartitaMag())
.setDataScad(mtbColr.getDataScadPartitaD());
} else {
this.mHistoryUsedAarts.add(new HistoryMtbAartDTO()
.setCodMart(mtbColr.getCodMart())
.setPartitaMag(mtbColr.getPartitaMag())
.setDataScad(mtbColr.getDataScadPartitaD()));
}
}
private HistoryMtbAartDTO getHistoryItemIfExists(@NonNull String codMart) {
Optional<HistoryMtbAartDTO> optional = Stream.of(this.mHistoryUsedAarts)
.filter(x -> x.getCodMart().equalsIgnoreCase(codMart))
.findFirst();
return optional.isPresent() ? optional.get() : null;
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
@@ -904,14 +975,10 @@ public class AccettazionePickingViewModel {
boolean canOverflowQuantity,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onRowSaved();
void onFilterApplied(String newValue);
void onFilterRemoved();
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
}
}

View File

@@ -0,0 +1,37 @@
package it.integry.integrywmsnative.gest.accettazione_picking.dto;
import java.util.Date;
public class HistoryMtbAartDTO {
private String codMart;
private String partitaMag;
private Date dataScad;
public String getCodMart() {
return codMart;
}
public HistoryMtbAartDTO setCodMart(String codMart) {
this.codMart = codMart;
return this;
}
public String getPartitaMag() {
return partitaMag;
}
public HistoryMtbAartDTO setPartitaMag(String partitaMag) {
this.partitaMag = partitaMag;
return this;
}
public Date getDataScad() {
return dataScad;
}
public HistoryMtbAartDTO setDataScad(Date dataScad) {
this.dataScad = dataScad;
return this;
}
}

View File

@@ -3,21 +3,22 @@ package it.integry.integrywmsnative.gest.contenuto_bancale.viewmodel;
import android.app.Dialog;
import android.content.Intent;
import android.content.res.Resources;
import androidx.databinding.ObservableField;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.text.SpannableString;
import androidx.core.content.ContextCompat;
import androidx.databinding.ObservableField;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.DepositoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
@@ -42,7 +43,7 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
private PrinterRESTConsumer.Type mPrinterType;
private String mReportName;
public ContenutoBancaleViewModel(ContenutoBancaleActivity context, MtbColt mtbColt, boolean canRecoverUL, PrinterRESTConsumer.Type printerType, String defaultReportName){
public ContenutoBancaleViewModel(ContenutoBancaleActivity context, MtbColt mtbColt, boolean canRecoverUL, PrinterRESTConsumer.Type printerType, String defaultReportName) {
mContext = context;
this.mtbColt = new ObservableField<>(mtbColt);
this.isFabVisible.set(true);
@@ -85,8 +86,7 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
}
public void recoverUL(){
public void recoverUL() {
Intent data = new Intent();
String key = DataCache.addItem(mtbColt.get());
data.putExtra("key", key);
@@ -102,39 +102,37 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().getUserSession().getDepo().getCodMdep(), mPrinterType, value -> {
if(value.size() > 0) {
if (value.size() > 0) {
try {
ReportManager.getReportNameLUFromGestione(mtbColt.get().getGestioneEnum(), reportName -> {
try {
String reportName = ReportManager.getReportNameLUFromGestione(mtbColt.get().getGestioneEnum());
reportName = mReportName != null ? mReportName : reportName;
reportName = mReportName != null ? mReportName : reportName;
PrinterRESTConsumer.printColloStatic(value.get(0),
mtbColt.get(),
1,
reportName,
() -> {
progress.dismiss();
PrinterRESTConsumer.printColloStatic(value.get(0),
mtbColt.get(),
1,
reportName,
() -> {
progress.dismiss();
Resources res = mContext.getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageHelper.makeSuccessDialog(mContext, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
}, ex -> UtilityExceptions.defaultException(mContext,ex, progress));
Resources res = mContext.getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageHelper.makeSuccessDialog(mContext, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
}, ex -> UtilityExceptions.defaultException(mContext, ex, progress));
}, ex -> UtilityExceptions.defaultException(mContext, ex, progress)
);
} catch (Exception ex){
UtilityExceptions.defaultException(mContext, ex, progress);
}
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, null).show();
} catch (Exception ex) {
UtilityExceptions.defaultException(mContext, ex, progress);
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);
});
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, null).show();
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);
});
}

View File

@@ -2,18 +2,18 @@ package it.integry.integrywmsnative.gest.lista_bancali;
import android.content.Context;
import android.content.Intent;
import androidx.databinding.DataBindingUtil;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.databinding.DataBindingUtil;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity;
import it.integry.integrywmsnative.gest.lista_bancali.viewmodel.ListaBancaliViewModel;
@@ -25,6 +25,7 @@ public class ListaBancaliActivity extends BaseActivity {
private static final String CanRecoverUL = "canRecoverUL";
private static final String PrinterType = "printerType";
private static final String ReportName = "reportName";
private static final String FlagOnlyResiduo = "flagOnlyResiduo";
}
public ActivityListaBancaliBinding bindings;
@@ -34,6 +35,7 @@ public class ListaBancaliActivity extends BaseActivity {
private boolean mCanRecoverUl;
private PrinterRESTConsumer.Type mPrinterType;
private String mReportName;
private boolean mFlagOnlyResiduo;
private static final int PICK_UL_REQUEST = 1; // The request code
@@ -54,10 +56,13 @@ public class ListaBancaliActivity extends BaseActivity {
String reportNameKey = DataCache.addItem(reportName);
myIntent.putExtra(Key.ReportName, reportNameKey);
String flagOnlyResiduoKey = DataCache.addItem(true);
myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey);
return myIntent;
}
public static Intent createIntent(Context context, ArrayList<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType) {
public static Intent createIntent(Context context, ArrayList<MtbColt> items, boolean canRecoverUl, PrinterRESTConsumer.Type printerType, boolean onlyResiduo) {
Intent myIntent = new Intent(context, ListaBancaliActivity.class);
String mtbColtsKey = DataCache.addItem(items);
@@ -69,6 +74,9 @@ public class ListaBancaliActivity extends BaseActivity {
String printerTypeKey = DataCache.addItem(printerType);
myIntent.putExtra(Key.PrinterType, printerTypeKey);
String flagOnlyResiduoKey = DataCache.addItem(onlyResiduo);
myIntent.putExtra(Key.FlagOnlyResiduo, flagOnlyResiduoKey);
return myIntent;
}
@@ -81,9 +89,10 @@ public class ListaBancaliActivity extends BaseActivity {
mCanRecoverUl = DataCache.retrieveItem(getIntent().getStringExtra(Key.CanRecoverUL));
mPrinterType = DataCache.retrieveItem(getIntent().getStringExtra(Key.PrinterType));
mReportName = DataCache.retrieveItem(getIntent().getStringExtra(Key.ReportName));
mFlagOnlyResiduo = DataCache.retrieveItem(getIntent().getStringExtra(Key.FlagOnlyResiduo));
List<MtbColt> mtbColts = DataCache.retrieveItem(getIntent().getStringExtra(Key.MtbColtsKey));
mViewModel = new ListaBancaliViewModel(this, mtbColts);
mViewModel = new ListaBancaliViewModel(this, mtbColts, mFlagOnlyResiduo);
setSupportActionBar(this.bindings.toolbar);

View File

@@ -26,11 +26,15 @@ public class ListaBancaliViewModel implements IRecyclerItemClicked<MtbColt> {
private MainListListaColliAdapter mAdapter;
public ListaBancaliViewModel(ListaBancaliActivity context, List<MtbColt> mtbColts){
private boolean mLoadOnlyResiduo;
public ListaBancaliViewModel(ListaBancaliActivity context, List<MtbColt> mtbColts, boolean loadOnlyResiduo){
mContext = context;
mMtbColts = new ObservableArrayList<>();
mMtbColts.addAll(mtbColts);
this.mLoadOnlyResiduo = loadOnlyResiduo;
initRecyclerView();
}
@@ -56,7 +60,7 @@ public class ListaBancaliViewModel implements IRecyclerItemClicked<MtbColt> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(mContext);
try {
ColliMagazzinoRESTConsumer.getByTestataStatic(item, true, false, mtbColt -> {
ColliMagazzinoRESTConsumer.getByTestataStatic(item, mLoadOnlyResiduo, false, mtbColt -> {
ObservableArrayList<MtbColr> mtbColrObservableArrayList = new ObservableArrayList<>();
mtbColrObservableArrayList.addAll(mtbColt.getMtbColr());

View File

@@ -191,7 +191,7 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
mAdapter = null;
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
@@ -258,6 +258,8 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
@Override
public void onLUOpened(MtbColt mtbColt) {
mToolbarTitleText.setText(String.format(getActivity().getText(R.string.lu_number_text).toString(), mtbColt.getNumCollo()));
initAdapter();
thereIsAnOpenedUL.set(true);
@@ -275,6 +277,7 @@ public class PickingLiberoFragment extends Fragment implements ITitledFragment,
@Override
public void onLUClosed() {
mToolbarTitleText.setText(getActivity().getText(R.string.free_picking_title_fragment).toString());
destroyAdapter();
thereIsAnyRowInUL.set(false);

View File

@@ -7,7 +7,6 @@ import dagger.Provides;
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.PrinterRESTConsumer;
@Module(subcomponents = {PickingLiberoComponent.class})
public class PickingLiberoModule {
@@ -16,8 +15,7 @@ public class PickingLiberoModule {
@Singleton
PickingLiberoViewModel providesPickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer) {
return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, barcodeRESTConsumer);
return new PickingLiberoViewModel(articoloRESTConsumer, colliMagazzinoRESTConsumer, barcodeRESTConsumer);
}
}

View File

@@ -6,7 +6,9 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.List;
@@ -24,11 +26,11 @@ 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.VtbDest;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
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.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean128Model;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.settings.SettingsManager;
@@ -37,7 +39,6 @@ import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
@@ -48,7 +49,6 @@ public class PickingLiberoViewModel {
private final ArticoloRESTConsumer mArticoloRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final PrinterRESTConsumer mPrinterRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
@@ -62,11 +62,9 @@ public class PickingLiberoViewModel {
@Inject
public PickingLiberoViewModel(ArticoloRESTConsumer articoloRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer) {
this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mPrinterRESTConsumer = printerRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
}
@@ -815,7 +813,6 @@ public class PickingLiberoViewModel {
}
public interface Listener extends ILoadingListener, ILUBaseOperationsListener {
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
void onError(Exception ex);
@@ -840,8 +837,6 @@ public class PickingLiberoViewModel {
boolean canPartitaMagBeChanged,
boolean canLUBeClosed,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onRowSaved();
}

View File

@@ -1,109 +1,135 @@
package it.integry.integrywmsnative.gest.picking_resi;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.SpannableString;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.SpannableString;
import com.annimon.stream.Stream;
import com.tfb.fbtoast.FBToast;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_cache.DataCache;
import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
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.report.ReportManager;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivityPickingResiBinding;
import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.core.PickingResiListAdapter;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback;
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
import it.integry.integrywmsnative.gest.picking_resi.core.PickingResiListModel;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
public class PickingResiActivity extends BaseActivity implements IOnColloClosedCallback {
public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener {
private ActivityPickingResiBinding mBindings;
@Inject
PickingResiViewModel mViewmodel;
private BottomSheetFragmentLUContentViewModel mBottomSheetFragmentLUContentViewModel;
private ObservableArrayList<PickingResiListModel> mPickingResiMutableData = new ObservableArrayList<>();
public BindableBoolean noLUPresent = new BindableBoolean(true);
public BindableBoolean noItemsToPick = new BindableBoolean(false);
public BindableBoolean bottomSheetEnabled = new BindableBoolean(false);
private String mTitle;
private List<DocumentoResoDTO> mDocumentiResiList;
public ObservableList<WithdrawableDtbDocr> mDtbDocrList;
private final List<MtbColt> mColliRegistrati = new ArrayList<>();
private ActivityPickingResiBinding mBinding;
private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel;
public ObservableField<MtbColt> currentMtbColt = new ObservableField<>();
private PickingResiListAdapter mAdapter;
private int barcodeScannerIstanceID = -1;
private String mActivityTitle;
private String mDefaultGestioneOfUL;
private String mDefaultCodAnagOfUL;
private Integer mDefaultSegnoOfUL;
private boolean mShouldCloseActivity;
public static void startActivity(Context context, String activityTitle, List<DocumentoResoDTO> documentoResoDTOList, Integer segno) {
String consegneCacheKey = DataCache.addItem(documentoResoDTOList);
Intent intent = new Intent(context, PickingResiActivity.class);
intent.putExtra("activity_title", activityTitle);
String consegneCacheKey = DataCache.addItem(documentoResoDTOList);
intent.putExtra("key", consegneCacheKey);
intent.putExtra("segno", segno);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi);
mBinding.setViewmodel(this);
this.mDtbDocrList = new ObservableArrayList<>();
mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, this.mBinding.bottomSheetInclude);
mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this);
mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(this::onItemEdited);
mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(this::onItemDeleted);
mTitle = getIntent().getStringExtra("activity_title");
mDocumentiResiList = DataCache.retrieveItem(getIntent().getStringExtra("key"));
mDefaultSegnoOfUL = getIntent().getIntExtra("segno", +1);
int defaultSegnoLU = getIntent().getIntExtra("segno", +1);
mActivityTitle = getIntent().getStringExtra("activity_title");
mBindings = DataBindingUtil.setContentView(this, R.layout.activity_picking_resi);
this.initView();
MainApplication.appComponent
.pickingResiComponent()
.create()
.inject(this);
mViewmodel.setListener(this);
setSupportActionBar(mBindings.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(mTitle);
mBindings.setLifecycleOwner(this);
mBindings.setPickingResiView(this);
mBindings.bottomSheetLuContent.init(mBindings.bottomSheetLuContent, null);
mBottomSheetFragmentLUContentViewModel = mBindings.bottomSheetLuContent.getViewModelInstance();
mBindings.bottomSheetLuContent.setListener(this);
mBottomSheetFragmentLUContentViewModel.setListener(this);
this.initVars();
this.initBarcodeReader();
this.initRecyclerView();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
this.mViewmodel.init(mDocumentiResiList, defaultSegnoLU, codMdep);
}
@Override
@@ -114,435 +140,255 @@ public class PickingResiActivity extends BaseActivity implements IOnColloClosedC
@Override
public void onBackPressed() {
if(mArticoliInColloBottomSheetViewModel.isExpanded()){
mArticoliInColloBottomSheetViewModel.collapse();
}
else if(thereIsAnOpenedUL()) {
mArticoliInColloBottomSheetViewModel.closeCurrentUL(() -> {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
});
}
else {
if (this.mBindings.bottomSheetLuContent.isExpanded()) {
this.mBindings.bottomSheetLuContent.collapse();
} else if (!noLUPresent.get()) {
this.mShouldCloseActivity = true;
BarcodeManager.removeCallback(barcodeScannerIstanceID);
this.mViewmodel.closeLU(true);
} else {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
super.onBackPressed();
}
}
private void initView() {
private void initVars() {
this.noLUPresent.addOnPropertyChangedCallback(() -> {
this.bottomSheetEnabled.set(!this.noLUPresent.get());
});
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(this::onScanSuccessful)
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false)));
}
private void initRecyclerView() {
this.mBindings.elevatedToolbar.setRecyclerView(this.mBindings.mainList);
setSupportActionBar(this.mBinding.toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
this.mViewmodel.getPickingList().observe(this, updatedData -> {
this.mPickingResiMutableData.clear();
this.mPickingResiMutableData.addAll(convertDataModelToListModel(updatedData));
this.noItemsToPick.set(updatedData.isEmpty());
});
getSupportActionBar().setTitle(mActivityTitle);
PickingResiListAdapter pickingResiListAdapter = new PickingResiListAdapter(this, mPickingResiMutableData);
this.mBindings.mainList.setAdapter(pickingResiListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this));
this.mBinding.elevatedToolbar.setRecyclerView(this.mBinding.mainList);
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(this);
UltimeConsegneClienteRESTConsumer.loadDocRowFromConsegna(mDocumentiResiList, dtbDocrToPick -> {
progressDialog.dismiss();
this.mDtbDocrList.addAll(dtbDocrToPick);
try {
this.initDatiPicking();
} catch (Exception ex) {
DialogSimpleMessageHelper.showSimpleErrorDialog(this, ex.getMessage());
pickingResiListAdapter.setOnItemClicked(clickedItem -> {
if (!noLUPresent.get()) {
this.mViewmodel.dispatchOrdineRow(clickedItem);
}
this.initList();
}, ex -> {
UtilityExceptions.defaultException(this, ex, progressDialog);
});
}
private void initList() {
mAdapter = new PickingResiListAdapter(this, this.mDtbDocrList);
mAdapter.setOnItemClicked(this::onOrdineRowDispatch);
private List<PickingResiListModel> convertDataModelToListModel(List<WithdrawableDtbDocr> dataList) {
List<PickingResiListModel> pickingResiListModels = new ArrayList<>();
this.mBinding.mainList.setLayoutManager(new LinearLayoutManager(this));
this.mBinding.mainList.setAdapter(mAdapter);
Stream.of(dataList)
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
.forEach(x -> {
PickingResiListModel pickingResiListModel = new PickingResiListModel();
pickingResiListModel.setGroupTitle(x.getCodDtip() + " - N° " + x.getNumDoc() + " del " + UtilityDate.formatDate(x.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN));
pickingResiListModel.setBadge1(x.getCodMart());
pickingResiListModel.setDescrizione(UtilityString.isNull(x.getDescrizioneEstesa(), x.getDescrizione()));
pickingResiListModel.setActive(true);
pickingResiListModel.setOriginalModel(x);
BigDecimal qtaColEvasa = BigDecimal.ZERO;
BigDecimal numCnfColEvasa = BigDecimal.ZERO;
for (MtbColr mtbColr : x.getWithdrawRows()) {
qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol());
numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf());
}
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
pickingResiListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
pickingResiListModel.setQtaEvasa(numCnfColEvasa);
pickingResiListModel.setQtaTot(x.getNumCnf());
} else {
if (x.getMtbAart() != null)
pickingResiListModel.setUntMis(x.getMtbAart().getUntMis());
else pickingResiListModel.setUntMis(x.getUntDoc());
pickingResiListModel.setQtaEvasa(qtaColEvasa);
pickingResiListModel.setQtaTot(x.getQtaDoc());
}
pickingResiListModels.add(pickingResiListModel);
});
return pickingResiListModels;
}
private void initDatiPicking() throws Exception {
List<String> foundGestioni = Stream.of(this.mDocumentiResiList)
.map(DocumentoResoDTO::getGestione)
.distinct()
.withoutNulls()
.toList();
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
if(foundGestioni.size() > 1) {
throw new Exception("Sono stati caricati documenti con diverse gestioni");
} else mDefaultGestioneOfUL = foundGestioni.get(0);
this.openProgress();
this.mViewmodel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
this.closeProgress();
});
};
List<String> foundCodAnags = Stream.of(this.mDocumentiResiList)
.map(DocumentoResoDTO::getCodAnag)
.distinct()
.toList();
public void createNewLU() {
this.mBindings.mainFab.close(true);
if(foundCodAnags.size() > 1) {
throw new Exception("Sono stati caricati documenti con diversi codici anagrafici");
} else mDefaultCodAnagOfUL = foundCodAnags.get(0);
this.openProgress();
}
private void onScanSuccessful(BarcodeScanDTO data) {
}
public void createNewUL() {
this.createNewUL(null, null, null, false, true, null);
}
public void createNewUL(Integer customNumCollo, String customSerCollo, Dialog progress, boolean disablePrint, boolean closeProgress, Runnable onComplete) {
this.mBinding.mainFab.close(true);
if (progress == null){
progress = UtilityProgress.createDefaultProgressDialog(this);
}
MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields();
mtbColt .setGestione(mDefaultGestioneOfUL)
.setSegno(mDefaultSegnoOfUL)
.setCodAnag(mDefaultCodAnagOfUL)
.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep())
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if(customNumCollo != null) {
mtbColt.setNumCollo(customNumCollo);
}
if(!UtilityString.isNullOrEmpty(customSerCollo)) {
mtbColt.setSerCollo(customSerCollo);
}
Dialog finalProgress = progress;
ColliMagazzinoRESTConsumer.saveColloStatic(mtbColt, value -> {
value.setDisablePrint(disablePrint);
setULToCurrentContext(value);
if(closeProgress) finalProgress.dismiss();
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
if(onComplete != null) onComplete.run();
}, ex -> {
UtilityExceptions.defaultException(this, ex, finalProgress);
});
}
private void setULToCurrentContext(MtbColt mtbColt){
if(mtbColt != null && mtbColt.getMtbColr() == null) {
mtbColt.setMtbColr(new ObservableArrayList<>());
}
this.currentMtbColt.set(mtbColt);
mArticoliInColloBottomSheetViewModel.mtbColt.set(mtbColt);
}
public void onOrdineRowDispatch(final WithdrawableDtbDocr item) {
if(currentMtbColt.get() != null){
List<MtbColr> currentMtbColrs = item.getWithdrawRows();
BigDecimal qtaEvasaTotaleInMtbColr = BigDecimal.ZERO;
for (MtbColr mtbColr : currentMtbColrs) {
qtaEvasaTotaleInMtbColr.add(mtbColr.getQtaCol());
}
BigDecimal qtaDaEvadere = item.getQtaDoc().subtract(qtaEvasaTotaleInMtbColr);
if(qtaDaEvadere.floatValue() < 0) qtaDaEvadere = BigDecimal.ZERO;
DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
.setBatchLot(item.getPartitaMag())
.setCodArtFor(item.getCodArtFor())
.setMtbAart(item.getMtbAart())
.setQtaDisponibile(qtaDaEvadere)
.setQtaTot(qtaDaEvadere)
.setQtaEvasa(qtaEvasaTotaleInMtbColr)
.setCanPartitaMagBeChanged(false)
.setMaxQta(qtaDaEvadere);
DialogInputQuantity.makeBase(this, dto, false, (quantityDTO, closeUL) -> {
onOrdineRowDispatched(item, quantityDTO, closeUL);
}, null).show();
}
}
private void onOrdineRowDispatched(WithdrawableDtbDocr item, QuantityDTO quantityDTO, boolean closeUL){
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
final MtbColr mtbColr = new MtbColr()
.setCodMart(item.getCodMart())
.setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get()))
.setQtaCol(quantityDTO.qtaTot.getBigDecimal())
.setQtaCnf(quantityDTO.qtaCnf.getBigDecimal())
.setNumCnf(quantityDTO.numCnf.getBigDecimal())
.setDescrizione(item.getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance())
.setCodAnagDoc(item.getCodAnag())
.setCodDtipDoc(item.getCodDtip())
.setSerDoc(item.getSerDoc())
.setNumDoc(item.getNumDoc())
.setDataDoc(item.getDataDocS())
.setIdRigaDoc(item.getIdRiga());
// .setCodJcom(item.getCodJcom());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) currentMtbColt.get().clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
cloneMtbColt.getMtbColr().add(mtbColr);
ColliMagazzinoRESTConsumer.saveColloStatic(cloneMtbColt, value -> {
mtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(0).getRiga())
.setUntMis(item.getMtbAart().getUntMis())
.setMtbAart(item.getMtbAart());
item.getWithdrawRows().add(mtbColr);
this.refreshDtbDocrItem(item);
currentMtbColt.get().getMtbColr().add(mtbColr);
//Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei
removeListFilter();
FBToast.successToast(this, this.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
progress.dismiss();
// if(closeUL) onColloClosed(null);
}, ex -> {
UtilityExceptions.defaultException(this, ex, progress);
this.mViewmodel.createNewLU(null, null, () -> {
this.closeProgress();
});
}
@Override
public void onColloClosed(Runnable onComplete, boolean shouldPrint) {
if(thereIsAnOpenedUL()) {
public void onMtbColrEdit(MtbColr mtbColr) {
this.mViewmodel.dispatchRowEdit(mtbColr);
}
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
progress.show();
@Override
public void onMtbColrDelete(MtbColr mtbColr) {
this.mViewmodel.deleteRow(mtbColr);
}
if(thereIsAnyRowInUL()) {
NoteAggiuntiveLUDialog.make(this, noteString -> {
@Override
public void onBottomSheetLUClose() {
this.mViewmodel.closeLU(true);
}
MtbColt currentLU = currentMtbColt.get();
@Override
public void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort) {
NoteAggiuntiveLUDialog.make(this, onComplete, onAbort).show();
}
Runnable postNoteSave = () -> {
ColliMagazzinoRESTConsumer.updateDataFineStatic(
currentLU,
() -> printCollo(progress, currentMtbColt.get(), onComplete),
ex -> UtilityExceptions.defaultException(this, ex, progress));
};
if(!UtilityString.isNullOrEmpty(noteString)) {
currentLU.setAnnotazioni(noteString);
ColliMagazzinoRESTConsumer.saveColloStatic(currentLU, mtbColt -> {
postNoteSave.run();
}, ex -> UtilityExceptions.defaultException(this, ex, progress));
} else postNoteSave.run();
}, () -> {
}).show();
} else {
deleteCollo(progress, onComplete);
}
@Override
public void onError(Exception ex) {
this.closeProgress();
if(ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
if(onComplete != null) onComplete.run();
}
}
private void onItemEdited(MtbColr mtbColrOriginal, MtbColr mtbColrEdited) {
for(int i = 0; i < mDtbDocrList.size(); i++) {
int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrOriginal);
if(foundIndex >= 0){
mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex);
mDtbDocrList.get(i).getWithdrawRows().add(foundIndex, mtbColrEdited);
refreshDtbDocrItem(this.mDtbDocrList.get(i));
break;
}
}
}
private void onItemDeleted(MtbColr mtbColrDeleted) {
for(int i = 0; i < mDtbDocrList.size(); i++) {
int foundIndex = mDtbDocrList.get(i).getWithdrawRows().indexOf(mtbColrDeleted);
if(foundIndex >= 0){
mDtbDocrList.get(i).getWithdrawRows().remove(foundIndex);
refreshDtbDocrItem(this.mDtbDocrList.get(i));
break;
}
}
}
private void printCollo(Dialog progress, MtbColt mtbColtToPrint, Runnable onComplete) {
DialogAskShouldPrint.make(this, "Packing List", shouldPrint -> {
if(shouldPrint) {
PrinterRESTConsumer.getAvailablePrintersStatic(SettingsManager.i().getUserSession().getDepo().getCodMdep(), PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
if (printerList.size() > 0) {
try {
singlePrint(mtbColtToPrint, printerList.get(0), () -> {
postCloseOperations(mtbColtToPrint, onComplete);
progress.dismiss();
}, ex -> {
progress.dismiss();
String errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(
this,
new SpannableString(errorMessage),
null,
null,
R.string.button_ignore_print,
() -> postCloseOperations(mtbColtToPrint, onComplete)).show();
});
} catch (Exception ex) {
UtilityExceptions.defaultException(this, ex, progress);
postCloseOperations(mtbColtToPrint, onComplete);
}
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(errorMessage), null, () -> postCloseOperations(mtbColtToPrint, onComplete)).show();
}
}, ex -> {
UtilityExceptions.defaultException(this, ex, progress);
});
} else {
postCloseOperations(mtbColtToPrint, onComplete);
progress.dismiss();
}
}).show();
}
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onAbort) {
ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
PrinterRESTConsumer.printColloStatic(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onAbort);
}, onAbort);
}
private void postCloseOperations(MtbColt generatedMtbColt, Runnable onComplete) {
this.mColliRegistrati.add(generatedMtbColt);
setULToCurrentContext(null);
for(int i = 0; i < this.mDtbDocrList.size(); i++) {
WithdrawableDtbDocr dtbDocr = this.mDtbDocrList.get(i);
List<MtbColr> withdraws = dtbDocr.getWithdrawRows();
for(int k = 0; k < withdraws.size(); k++) {
MtbColr withdrawRow = withdraws.get(k);
dtbDocr.setQtaDoc(dtbDocr.getQtaDoc().subtract(withdrawRow.getQtaCol()));
}
dtbDocr.getWithdrawRows().clear();
if(UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc()) <= 0) {
this.mDtbDocrList.remove(dtbDocr);
i--;
} else this.refreshDtbDocrItem(dtbDocr);
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
}
removeListFilter();
if(onComplete != null) onComplete.run();
BarcodeManager.enable();
}
@Override
public void onItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
.setInitialNumCnf(initialNumCnf)
.setInitialQtaCnf(initialQtaCnf)
.setInitialQtaTot(initialQtaTot)
.setTotalQtaAvailable(totalQtaAvailable)
.setTotalNumCnfAvailable(totalNumCnfAvailable)
.setQtaCnfAvailable(qtaCnfAvailable)
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(false)
.setCanLUBeClosed(false)
.setCanPartitaMagBeChanged(false);
private void deleteCollo(Dialog progress, Runnable onComplete) {
DialogInputQuantityV2
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {
PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO()
.setNumCnf(resultDTO.getNumCnf())
.setQtaCnf(resultDTO.getQtaCnf())
.setQtaTot(resultDTO.getQtaTot())
.setPartitaMag(resultDTO.getPartitaMag())
.setDataScad(resultDTO.getDataScad());
ColliMagazzinoRESTConsumer.deleteColloStatic(currentMtbColt.get(), () -> {
setULToCurrentContext(null);
progress.dismiss();
if(onComplete != null) onComplete.run();
}, ex -> UtilityExceptions.defaultException(this, ex, progress)
);
this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> {
// this.mViewmodel.resetMatchedRows();
})
.show(getSupportFragmentManager(), "tag");
}
public boolean thereIsAnOpenedUL() {
return currentMtbColt.get() != null;
@Override
public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
}
public boolean thereIsAnyRowInUL() {
return currentMtbColt.get() != null &&
currentMtbColt.get().getMtbColr() != null &&
currentMtbColt.get().getMtbColr().size() > 0;
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(this,
new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
}
@Override
public void onLUOpened(MtbColt mtbColt) {
noLUPresent.set(false);
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
private void refreshDtbDocrItem(WithdrawableDtbDocr dtbDocr) {
int index = this.mDtbDocrList.indexOf(dtbDocr);
this.mDtbDocrList.remove(dtbDocr);
this.mDtbDocrList.add(index, dtbDocr);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(mtbColt);
}
@Override
public void onLUClosed() {
noLUPresent.set(true);
this.mBottomSheetFragmentLUContentViewModel.setMtbColt(null);
public void removeListFilter() {
if (this.mShouldCloseActivity) super.onBackPressed();
}
@Override
public void onLUSuccessullyPrinted() {
Resources res = getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageHelper.makeSuccessDialog(this, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
}
@Override
public void onLUPrintRequest(RunnableArgs<Boolean> onComplete) {
DialogAskShouldPrint.make(this, "Packing List", onComplete).show();
}
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress();
DialogSimpleMessageHelper.makeErrorDialog(
this,
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
}
@Override
public void onLoadingStarted() {
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.picking_resi;
import dagger.Subcomponent;
@Subcomponent
public interface PickingResiComponent {
@Subcomponent.Factory
interface Factory {
PickingResiComponent create();
}
void inject(PickingResiActivity pickingResiActivity);
}

View File

@@ -0,0 +1,33 @@
package it.integry.integrywmsnative.gest.picking_resi;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
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.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer;
import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel;
@Module(subcomponents = PickingResiComponent.class)
public class PickingResiModule {
@Provides
PickingResiRESTConsumer providesPickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new PickingResiRESTConsumer(systemRESTConsumer);
}
@Provides
BottomSheetFragmentLUContentViewModel providesBottomSheetFragmentLUContentViewModel() {
return new BottomSheetFragmentLUContentViewModel();
}
@Provides
PickingResiViewModel providesPickingResiViewModel(ArticoloRESTConsumer articoloRESTConsumer, ColliDataRecoverService colliDataRecoverService, OrdiniRESTConsumer ordiniRESTConsumer, ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer, PrinterRESTConsumer printerRESTConsumer, BarcodeRESTConsumer barcodeRESTConsumer, PickingResiRESTConsumer pickingResiRESTConsumer) {
return new PickingResiViewModel(articoloRESTConsumer, barcodeRESTConsumer, colliDataRecoverService, ordiniRESTConsumer, colliMagazzinoRESTConsumer, printerRESTConsumer, pickingResiRESTConsumer);
}
}

View File

@@ -0,0 +1,576 @@
package it.integry.integrywmsnative.gest.picking_resi;
import androidx.databinding.ObservableArrayList;
import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUBaseOperationsListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILUPrintListener;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
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.report.ReportManager;
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.OrdiniRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.PrinterRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.picking_resi.exceptions.DocumentsLoadException;
import it.integry.integrywmsnative.gest.picking_resi.rest.PickingResiRESTConsumer;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class PickingResiViewModel {
private Listener mListener;
private final MutableLiveData<List<WithdrawableDtbDocr>> mPickingList = new MutableLiveData<>();
private final List<MtbColt> mColliRegistrati = new ArrayList<>();
private MtbColt mCurrentMtbColt = null;
private String mDefaultGestioneOfLU;
private String mDefaultCodAnagOfLU;
private int mDefaultSegnoOfLU;
private String mDefaultCodMdepOfLU;
private final ArticoloRESTConsumer mArticoloRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliDataRecoverService mColliDataRecoverService;
private final OrdiniRESTConsumer mOrdiniRestConsumerService;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private final PrinterRESTConsumer mPrinterRESTConsumer;
private final PickingResiRESTConsumer mPickingResiRESTConsumer;
@Inject
public PickingResiViewModel(ArticoloRESTConsumer articoloRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliDataRecoverService colliDataRecoverService,
OrdiniRESTConsumer ordiniRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer,
PickingResiRESTConsumer mPickingResiRESTConsumer) {
this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliDataRecoverService = colliDataRecoverService;
this.mOrdiniRestConsumerService = ordiniRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
this.mPrinterRESTConsumer = printerRESTConsumer;
this.mPickingResiRESTConsumer = mPickingResiRESTConsumer;
}
public void init(List<DocumentoResoDTO> documentList, int defaultSegnoLU, String codMdep) {
this.mDefaultSegnoOfLU = defaultSegnoLU;
this.mDefaultCodMdepOfLU = codMdep;
this.sendOnLoadingStarted();
this.initDatiPicking(documentList);
this.mPickingResiRESTConsumer.loadDocRows(documentList, withdrawableDtbDocr -> {
this.mPickingList.postValue(withdrawableDtbDocr);
this.sendOnLoadingEnded();
}, ex -> this.sendError(new DocumentsLoadException(ex)));
}
private void initDatiPicking(List<DocumentoResoDTO> documentList) {
List<String> foundGestioni = Stream.of(documentList)
.map(DocumentoResoDTO::getGestione)
.distinct()
.withoutNulls()
.toList();
if (foundGestioni.size() > 1) {
this.sendError(new Exception("Sono stati caricati documenti con diverse gestioni"));
} else mDefaultGestioneOfLU = foundGestioni.get(0);
List<String> foundCodAnags = Stream.of(documentList)
.map(DocumentoResoDTO::getCodAnag)
.distinct()
.toList();
if (foundCodAnags.size() > 1) {
this.sendError(new Exception("Sono stati caricati documenti con diversi codici anagrafici"));
} else mDefaultCodAnagOfLU = foundCodAnags.get(0);
}
public void createNewLU(Integer customNumCollo, String customSerCollo, Runnable onComplete) {
MtbColt mtbColt = new MtbColt();
mtbColt.initDefaultFields();
mtbColt.setGestione(mDefaultGestioneOfLU)
.setSegno(mDefaultSegnoOfLU)
.setCodAnag(mDefaultCodAnagOfLU)
.setCodMdep(mDefaultCodMdepOfLU)
.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
if (customNumCollo != null) mtbColt.setNumCollo(customNumCollo);
if (!UtilityString.isNullOrEmpty(customSerCollo)) mtbColt.setSerCollo(customSerCollo);
mColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> {
mtbColt
.setNumCollo(value.getNumCollo())
.setDataCollo(value.getDataColloS())
.setMtbColr(new ObservableArrayList<>());
this.mCurrentMtbColt = mtbColt;
if (onComplete != null) onComplete.run();
this.sendLUOpened(mtbColt);
}, this::sendError);
}
public void closeLU(boolean shouldPrint) {
if (mCurrentMtbColt == null) return;
this.sendOnLoadingStarted();
mColliMagazzinoRESTConsumer.canLUBeDeleted(mCurrentMtbColt, canBeDeleted -> {
if (canBeDeleted) {
deleteLU(() -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
});
} else {
this.sendOnNoteAggiuntiveRequired(noteAggiuntive -> {
if (!UtilityString.isNullOrEmpty(noteAggiuntive)) {
this.mCurrentMtbColt.setAnnotazioni(noteAggiuntive);
}
this.mColliMagazzinoRESTConsumer.updateDataFine(mCurrentMtbColt, () -> {
if (shouldPrint) {
printCollo(mCurrentMtbColt, () -> {
postCloseOperations(mCurrentMtbColt, () -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
});
});
} else {
postCloseOperations(mCurrentMtbColt, () -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
});
}
}, this::sendError);
}, () -> {
this.sendLUClosed();
this.sendOnLoadingEnded();
});
}
}, this::sendError);
}
private void deleteLU(Runnable onComplete) {
mColliMagazzinoRESTConsumer.deleteCollo(mCurrentMtbColt, () -> {
this.mCurrentMtbColt = null;
if (onComplete != null) onComplete.run();
}, this::sendError);
}
private void printCollo(MtbColt mtbColtToPrint, Runnable onComplete) {
this.sendLUPrintRequest(shouldPrint -> {
if (!shouldPrint) {
onComplete.run();
} else {
this.mPrinterRESTConsumer.getAvailablePrinters(mDefaultCodMdepOfLU, PrinterRESTConsumer.Type.PRIMARIA, printerList -> {
if (printerList == null || printerList.size() == 0) {
this.sendError(new NoPrintersFoundException());
onComplete.run();
return;
}
singlePrint(mtbColtToPrint, printerList.get(0), onComplete, ex -> this.sendLUPrintError(ex, onComplete));
}, this::sendError);
}
});
}
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onFailed) {
String reportName = ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum());
this.mPrinterRESTConsumer.printCollo(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onFailed);
}
private void postCloseOperations(MtbColt mtbColt, Runnable onComplete) {
this.mColliRegistrati.add(mtbColt);
Stream.of(this.mPickingList.getValue())
.forEach(x -> {
List<MtbColr> withdraws = x.getWithdrawRows();
for (int k = 0; k < withdraws.size(); k++) {
MtbColr withdrawRow = withdraws.get(k);
x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol()));
}
x.getWithdrawRows().clear();
if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) {
this.mPickingList.getValue().remove(x);
}
});
this.mPickingList.postValue(this.mPickingList.getValue());
onComplete.run();
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
//Se non c'è una UL aperta
if (mCurrentMtbColt == null) {
//Se è un'etichetta anonima
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Se il collo non esiste allora lo creo associandolo a questa etichetta anonima
//invece se esiste apro un collo nuovo e cerco gli articoli presenti nell'ul
//dell'etichetta anonima
// this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete);
} else {
// this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete);
}
} else {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
// this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete);
} else {
// this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete);
}
}
}
public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr) {
BigDecimal totalQtaDoc = withdrawableDtbDocr.getQtaDoc();
BigDecimal totalNumCnfDoc = withdrawableDtbDocr.getNumCnf();
BigDecimal qtaCnfDoc = withdrawableDtbDocr.getQtaCnf();
this.sendOnItemDispatched(
withdrawableDtbDocr.getMtbAart(),
totalNumCnfDoc,
qtaCnfDoc,
totalQtaDoc,
totalQtaDoc,
totalNumCnfDoc,
qtaCnfDoc,
withdrawableDtbDocr.getPartitaMag(),
withdrawableDtbDocr.getDataScadPartitaMagD(),
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(withdrawableDtbDocr,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
pickedQuantityDTO.getPartitaMag(),
pickedQuantityDTO.getDataScad(),
shouldCloseLU);
});
}
public void dispatchRowEdit(final MtbColr mtbColrToEdit) {
this.sendOnItemDispatched(
mtbColrToEdit.getMtbAart(),
mtbColrToEdit.getNumCnf(),
mtbColrToEdit.getQtaCnf(),
mtbColrToEdit.getQtaCol(),
null,
null,
null,
mtbColrToEdit.getPartitaMag(),
mtbColrToEdit.getDataScadPartitaD(),
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveEditedRow(mtbColrToEdit,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
pickedQuantityDTO.getPartitaMag(),
pickedQuantityDTO.getDataScad(),
shouldCloseLU);
});
}
public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
final MtbColr mtbColr = new MtbColr()
.setCodMart(withdrawableDtbDocr.getMtbAart().getCodMart())
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad)
.setQtaCol(qtaTot)
.setQtaCnf(qtaCnf)
.setNumCnf(numCnf)
.setDescrizione(withdrawableDtbDocr.getMtbAart().getDescrizioneEstesa())
.setDatetimeRow(UtilityDate.getDateInstance())
.setCodAnagDoc(withdrawableDtbDocr.getCodAnag())
.setCodDtipDoc(withdrawableDtbDocr.getCodDtip())
.setSerDoc(withdrawableDtbDocr.getSerDoc())
.setNumDoc(withdrawableDtbDocr.getNumDoc())
.setDataDoc(withdrawableDtbDocr.getDataDocS())
.setIdRigaDoc(withdrawableDtbDocr.getIdRiga());
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
cloneMtbColt.setOperation(CommonModelConsts.OPERATION.UPDATE);
cloneMtbColt.setMtbColr(new ObservableArrayList<>());
cloneMtbColt.getMtbColr().add((MtbColr) mtbColr.clone());
boolean shouldPrint = true;
//Se è l'unico articolo del collo (controllo se è uguale a 0 perché ancora non è stato aggiunto nella lista delle righe)
if (shouldCloseLU && mCurrentMtbColt.getMtbColr().size() == 0) {
shouldPrint = false;
}
if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(shouldPrint);
return;
}
boolean finalShouldPrint = shouldPrint;
this.mColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, value -> {
mtbColr
.setDataCollo(value.getDataColloS())
.setNumCollo(value.getNumCollo())
.setGestione(value.getGestione())
.setSerCollo(value.getSerCollo())
.setRiga(value.getMtbColr().get(0).getRiga())
.setUntMis(withdrawableDtbDocr.getMtbAart().getUntMis())
.setMtbAart(withdrawableDtbDocr.getMtbAart());
withdrawableDtbDocr.getWithdrawRows().add(mtbColr);
mCurrentMtbColt.getMtbColr().add(mtbColr);
this.mPickingList.postValue(this.mPickingList.getValue());
this.sendOnRowSaved();
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(finalShouldPrint);
}, this::sendError);
}
private void saveEditedRow(MtbColr mtbColrToUpdate, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToUpdate.getNumCollo())
.setDataCollo(mtbColrToUpdate.getDataColloS())
.setSerCollo(mtbColrToUpdate.getSerCollo())
.setGestione(mtbColrToUpdate.getGestione())
.setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
final MtbColr mtbColr = (MtbColr) mtbColrToUpdate.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColr.setRiga(null)
.setNumCnf(numCnf.subtract(mtbColrToUpdate.getNumCnf()))
.setQtaCnf(qtaCnf)
.setQtaCol(qtaTot.subtract(mtbColrToUpdate.getQtaCol()))
.setPartitaMag(partitaMag)
.setDataScadPartita(dataScad);
mtbColt.getMtbColr().add(mtbColr);
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
mtbColr.setNumCnf(numCnf)
.setQtaCnf(qtaCnf)
.setQtaCol(qtaTot);
Optional<WithdrawableDtbDocr> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
.filter(x -> Stream.of(x.getWithdrawRows()).anyMatch(y -> y == mtbColrToUpdate))
.findSingle();
if (pickingObjectDTO.isPresent()) {
pickingObjectDTO.get().getWithdrawRows().remove(mtbColrToUpdate);
pickingObjectDTO.get().getWithdrawRows().add(mtbColr);
}
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToUpdate);
this.mCurrentMtbColt.getMtbColr().add(mtbColr);
this.sendOnRowSaved();
this.sendOnLoadingEnded();
}, this::sendError);
}
public void deleteRow(MtbColr mtbColrToDelete) {
this.sendMtbColrDeleteRequest(canDelete -> {
if (canDelete) {
this.sendOnLoadingStarted();
MtbColt mtbColt = new MtbColt()
.setNumCollo(mtbColrToDelete.getNumCollo())
.setDataCollo(mtbColrToDelete.getDataColloS())
.setSerCollo(mtbColrToDelete.getSerCollo())
.setGestione(mtbColrToDelete.getGestione())
.setMtbColr(new ObservableArrayList<>());
mtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP);
MtbColr mtbColr = (MtbColr) mtbColrToDelete.clone();
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColr.setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1)))
.setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1)))
.setRiga(null);
mtbColt.getMtbColr().add(mtbColr);
this.mColliMagazzinoRESTConsumer.saveCollo(mtbColt, (value) -> {
Optional<WithdrawableDtbDocr> pickingObjectDTO = Stream.of(this.mPickingList.getValue())
.filter(x -> Stream.of(x.getWithdrawRows()).anyMatch(y -> y == mtbColrToDelete))
.findSingle();
if (pickingObjectDTO.isPresent()) {
pickingObjectDTO.get().getWithdrawRows().remove(mtbColrToDelete);
}
this.mCurrentMtbColt.getMtbColr().remove(mtbColrToDelete);
this.sendOnRowSaved();
this.sendOnLoadingEnded();
}, this::sendError);
}
});
}
public MutableLiveData<List<WithdrawableDtbDocr>> getPickingList() {
return mPickingList;
}
private void sendOnNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort) {
if (this.mListener != null) this.mListener.onNoteAggiuntiveRequired(onComplete, onAbort);
}
private void sendOnLoadingStarted() {
if (this.mListener != null) mListener.onLoadingStarted();
}
private void sendOnLoadingEnded() {
if (this.mListener != null) mListener.onLoadingEnded();
}
private void sendError(Exception ex) {
if (this.mListener != null) mListener.onError(ex);
}
private void sendLUOpened(MtbColt mtbColt) {
if (this.mListener != null) mListener.onLUOpened(mtbColt);
}
private void sendLUClosed() {
if (this.mListener != null) mListener.onLUClosed();
}
private void sendLUPrintRequest(RunnableArgs<Boolean> onComplete) {
if (this.mListener != null) mListener.onLUPrintRequest(onComplete);
}
private void sendLUPrintError(Exception ex, Runnable onComplete) {
if (this.mListener != null) mListener.onLUPrintError(ex, onComplete);
}
private void sendMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
if (this.mListener != null) mListener.onMtbColrDeleteRequest(onComplete);
}
private void sendOnItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(mtbAart,
initialNumCnf,
initialQtaCnf,
initialQtaTot,
totalQtaAvailable,
totalNumCnfAvailable,
qtaCnfAvailable,
partitaMag,
dataScad,
onComplete);
}
private void sendOnRowSaved() {
if (this.mListener != null) mListener.onRowSaved();
}
public PickingResiViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener {
void onNoteAggiuntiveRequired(RunnableArgs<String> onComplete, Runnable onAbort);
void onError(Exception ex);
void onItemDispatched(MtbAart mtbAart,
BigDecimal initialNumCnf,
BigDecimal initialQtaCnf,
BigDecimal initialQtaTot,
BigDecimal totalQtaAvailable,
BigDecimal totalNumCnfAvailable,
BigDecimal qtaCnfAvailable,
String partitaMag,
Date dataScad,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
}
}

View File

@@ -1,197 +1,149 @@
package it.integry.integrywmsnative.gest.picking_resi.core;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbDocr;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.UltimeConsegneMainListItemBinding;
import it.integry.integrywmsnative.databinding.UltimeConsegneMainListItemHeaderBinding;
import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr;
import it.integry.integrywmsnative.databinding.PickingResiMainListItemBinding;
import it.integry.integrywmsnative.databinding.PickingResiMainListItemHeaderBinding;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<PickingResiListAdapter.SubheaderHolder, PickingResiListAdapter.SingleItemViewHolder> {
private Context mContext;
private List<WithdrawableDtbDocr> mDataset;
private final List<PickingResiListModel> mDataset = new ArrayList<>();
private RunnableArgs<WithdrawableDtbDocr> mOnItemClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
PickingResiMainListItemHeaderBinding mBinding;
UltimeConsegneMainListItemHeaderBinding mBinding;
SubheaderHolder(UltimeConsegneMainListItemHeaderBinding binding) {
SubheaderHolder(PickingResiMainListItemHeaderBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
static class SingleItemViewHolder extends RecyclerView.ViewHolder {
PickingResiMainListItemBinding mBinding;
UltimeConsegneMainListItemBinding mBinding;
SingleItemViewHolder(UltimeConsegneMainListItemBinding binding) {
SingleItemViewHolder(PickingResiMainListItemBinding binding) {
super(binding.getRoot());
this.mBinding = binding;
}
}
public PickingResiListAdapter(Context context, ObservableList<WithdrawableDtbDocr> data) {
public PickingResiListAdapter(AppCompatActivity context, ObservableArrayList<PickingResiListModel> mutableDataSet) {
this.mContext = context;
this.mDataset = new ArrayList<>();
refreshData(data);
data.addOnListChangedCallback(new ObservableList.OnListChangedCallback<ObservableList<WithdrawableDtbDocr>>() {
mutableDataSet.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList<WithdrawableDtbDocr> sender) {
refreshData(sender);
}
@Override
public void onItemRangeChanged(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
refreshData(sender);
}
@Override
public void onItemRangeInserted(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
refreshData(sender);
}
@Override
public void onItemRangeMoved(ObservableList<WithdrawableDtbDocr> sender, int fromPosition, int toPosition, int itemCount) {
refreshData(sender);
}
@Override
public void onItemRangeRemoved(ObservableList<WithdrawableDtbDocr> sender, int positionStart, int itemCount) {
refreshData(sender);
public void onChanged(ObservableList sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
}
});
}
private void refreshData(List<WithdrawableDtbDocr> data) {
this.mDataset.clear();
this.mDataset.addAll(Stream.of(data)
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
.toList());
this.notifyDataChanged();
}
public void setOnItemClicked(RunnableArgs<WithdrawableDtbDocr> onItemClicked) {
this.mOnItemClicked = onItemClicked;
}
@Override
public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
UltimeConsegneMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.ultime_consegne_main_list__item, parent, false);
return new SingleItemViewHolder(binding);
public PickingResiListAdapter.SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {
PickingResiMainListItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item, parent, false);
return new PickingResiListAdapter.SingleItemViewHolder(binding);
}
@Override
public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
UltimeConsegneMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.ultime_consegne_main_list__item_header, parent, false);
return new SubheaderHolder(binding);
public PickingResiListAdapter.SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) {
PickingResiMainListItemHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.picking_resi_main_list__item_header, parent, false);
return new PickingResiListAdapter.SubheaderHolder(binding);
}
@Override
public void onBindSubheaderViewHolder(PickingResiListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) {
PickingResiListModel pickingResiListModel = this.mDataset.get(nextItemPosition);
subheaderHolder.mBinding.groupTitle.setVisibility(UtilityString.isNullOrEmpty(pickingResiListModel.getGroupTitle()) ? View.GONE : View.VISIBLE);
subheaderHolder.mBinding.groupTitle.setText(pickingResiListModel.getGroupTitle());
}
@Override
public void onBindItemViewHolder(final SingleItemViewHolder holder, final int position) {
final WithdrawableDtbDocr dtbDocr = this.mDataset.get(position);
public void onBindItemViewHolder(final PickingResiListAdapter.SingleItemViewHolder holder, final int position) {
PickingResiListModel pickingResiListModel = this.mDataset.get(position);
BigDecimal qtaColEvasa = BigDecimal.ZERO;
BigDecimal numCnfColEvasa = BigDecimal.ZERO;
for(MtbColr mtbColr : dtbDocr.getWithdrawRows()) {
qtaColEvasa = qtaColEvasa.add(mtbColr.getQtaCol());
numCnfColEvasa = numCnfColEvasa.add(mtbColr.getNumCnf());
}
Float qtaDaEvadere = UtilityNumber.decimalToFloat(dtbDocr.getQtaDoc().subtract(qtaColEvasa));
holder.mBinding.badge1.setText(dtbDocr.getCodMart());
holder.mBinding.descrizione.setText(UtilityString.isNullOrEmpty(dtbDocr.getDescrizioneEstesa()) ? dtbDocr.getDescrizioneEstesa() : dtbDocr.getDescrizione());
//Setting qty with unt_mis
if(!SettingsManager.iDB().isFlagForceAllToColli() && (dtbDocr.getMtbAart() == null || dtbDocr.getMtbAart().isFlagQtaCnfFissaBoolean())){
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(qtaColEvasa));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getQtaDoc()));
holder.mBinding.untMis.setText(dtbDocr.getUntDoc());
} else {
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(numCnfColEvasa));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(dtbDocr.getNumCnf()));
holder.mBinding.untMis.setText(UtilityResources.getString(R.string.unt_mis_col));
}
if (qtaDaEvadere <= 0 ) {
if (pickingResiListModel.getQtaEvasa().subtract(pickingResiListModel.getQtaTot()).floatValue() >= 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha));
} else if (qtaDaEvadere > 0 && qtaColEvasa.floatValue() > 0) {
} else if (pickingResiListModel.getQtaEvasa().floatValue() > 0) {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha));
} else if (position % 2 == 1) {
holder.mBinding.getRoot().setBackgroundColor(Color.WHITE);
} else {
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.full_white));
holder.mBinding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
}
holder.mBinding.deactivatedOverBg.setVisibility(!pickingResiListModel.isActive() ? View.VISIBLE : View.GONE);
holder.mBinding.getRoot().setAlpha(!pickingResiListModel.isActive() ? 0.8f : 1);
holder.mBinding.badge1.setBackground(mContext.getResources().getDrawable(!pickingResiListModel.isActive() ? R.drawable.badge_gray_round_corner : R.drawable.badge1_round_corner));
holder.mBinding.qtaEvasa.setTextColor(mContext.getResources().getColor(!pickingResiListModel.isActive() ? R.color.gray_600 : R.color.green_700));
holder.mBinding.descrizione.setText(pickingResiListModel.getDescrizione());
holder.mBinding.descrizione.setTextColor(pickingResiListModel.isDescrizionePresente() ? Color.BLACK : Color.GRAY);
holder.mBinding.badge1.setText(pickingResiListModel.getBadge1());
holder.mBinding.qtaEvasa.setText(UtilityNumber.decimalToString(pickingResiListModel.getQtaEvasa()));
holder.mBinding.qtaTot.setText(UtilityNumber.decimalToString(pickingResiListModel.getQtaTot()));
holder.mBinding.untMis.setText(pickingResiListModel.getUntMis());
holder.mBinding.untMis.setVisibility(UtilityString.isNullOrEmpty(pickingResiListModel.getUntMis()) ? View.GONE : View.VISIBLE);
holder.mBinding.getRoot().setOnClickListener(v -> {
if(this.mOnItemClicked != null) this.mOnItemClicked.run(dtbDocr);
if (this.mOnItemClicked != null)
this.mOnItemClicked.run(pickingResiListModel.getOriginalModel());
});
}
@Override
public void onBindSubheaderViewHolder(SubheaderHolder subheaderHolder, int nextItemPosition) {
DtbDocr nextDtbDocr = this.mDataset.get(nextItemPosition);
subheaderHolder.mBinding.descrizione.setText(nextDtbDocr.getCodDtip() + " - N° " + nextDtbDocr.getNumDoc() + " del " + UtilityDate.formatDate(nextDtbDocr.getDataDocD(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN));
}
@Override
public boolean onPlaceSubheaderBetweenItems(int position) {
if (getItemSize() == 1) return true;
else if (getItemSize() > 1) {
PickingResiListModel compare1 = this.mDataset.get(position);
PickingResiListModel compare2 = this.mDataset.get(position + 1);
DtbDocr compare1 = this.mDataset.get(position);
DtbDocr compare2 = this.mDataset.get(position + 1);
if( !compare1.getDataDocS().equalsIgnoreCase(compare2.getDataDocS()) ||
!compare1.getSerDoc().equalsIgnoreCase(compare2.getSerDoc()) ||
!compare1.getNumDoc().equals(compare2.getNumDoc()) ||
!compare1.getCodAnag().equalsIgnoreCase(compare2.getCodAnag()) ||
!compare1.getCodDtip().equalsIgnoreCase(compare2.getCodDtip())) {
return true;
if (UtilityString.equalsIgnoreCase(compare1.getGroupTitle(), compare2.getGroupTitle())) {
return false;
}
}
return false;
return true;
}
@Override
public int getItemSize() {
return this.mDataset.size();
}
}

View File

@@ -0,0 +1,103 @@
package it.integry.integrywmsnative.gest.picking_resi.core;
import java.math.BigDecimal;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
public class PickingResiListModel {
private String groupTitle;
private String badge1;
private String descrizione;
private boolean descrizionePresente;
private BigDecimal qtaEvasa;
private BigDecimal qtaTot;
private String untMis;
private boolean active;
private WithdrawableDtbDocr mOriginalModel;
public String getGroupTitle() {
return groupTitle;
}
public PickingResiListModel setGroupTitle(String groupTitle) {
this.groupTitle = groupTitle;
return this;
}
public String getBadge1() {
return badge1;
}
public PickingResiListModel setBadge1(String badge1) {
this.badge1 = badge1;
return this;
}
public String getDescrizione() {
return descrizione;
}
public PickingResiListModel setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public boolean isDescrizionePresente() {
return descrizionePresente;
}
public PickingResiListModel setDescrizionePresente(boolean descrizionePresente) {
this.descrizionePresente = descrizionePresente;
return this;
}
public BigDecimal getQtaEvasa() {
return qtaEvasa;
}
public PickingResiListModel setQtaEvasa(BigDecimal qtaEvasa) {
this.qtaEvasa = qtaEvasa;
return this;
}
public BigDecimal getQtaTot() {
return qtaTot;
}
public PickingResiListModel setQtaTot(BigDecimal qtaTot) {
this.qtaTot = qtaTot;
return this;
}
public String getUntMis() {
return untMis;
}
public PickingResiListModel setUntMis(String untMis) {
this.untMis = untMis;
return this;
}
public boolean isActive() {
return active;
}
public PickingResiListModel setActive(boolean active) {
this.active = active;
return this;
}
public WithdrawableDtbDocr getOriginalModel() {
return mOriginalModel;
}
public PickingResiListModel setOriginalModel(WithdrawableDtbDocr originalModel) {
this.mOriginalModel = originalModel;
return this;
}
}

View File

@@ -0,0 +1,10 @@
package it.integry.integrywmsnative.gest.picking_resi.exceptions;
public class DocumentsLoadException extends Exception {
public DocumentsLoadException(Throwable cause) {
super("Errore durante il caricamento dei documenti");
initCause(cause);
}
}

View File

@@ -0,0 +1,102 @@
package it.integry.integrywmsnative.gest.picking_resi.rest;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbDocr;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityQuery;
@Singleton
public class PickingResiRESTConsumer {
private final SystemRESTConsumer mSystemRestConsumer;
@Inject
public PickingResiRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.mSystemRestConsumer = systemRESTConsumer;
}
public void loadDocRows(List<DocumentoResoDTO> documents, RunnableArgs<ArrayList<WithdrawableDtbDocr>> onComplete, RunnableArgs<Exception> onFailed) {
List<HashMap<String, Object>> filterCond = new ArrayList<>();
for(int i = 0; i < documents.size(); i++) {
HashMap<String, Object> filter = new HashMap<>();
filter.put("data_doc", documents.get(i).getDataDocD());
filter.put("num_doc", documents.get(i).getNumDoc());
filter.put("ser_doc", documents.get(i).getSerDoc());
filter.put("cod_anag", documents.get(i).getCodAnag());
filter.put("cod_dtip", documents.get(i).getCodDtip());
filterCond.add(filter);
}
String sql = "SELECT * FROM dvw_situazione_qta_docs " +
"WHERE " +
UtilityQuery.concatFieldListInWhereCond(filterCond) +
"ORDER BY cod_mart";
Type typeOfObjectsList = new TypeToken<ArrayList<WithdrawableDtbDocr>>() {}.getType();
this.mSystemRestConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<WithdrawableDtbDocr>>() {
@Override
public void onSuccess(ArrayList<WithdrawableDtbDocr> values) {
if(values != null && values.size() > 0){
List<String> codMarts = Stream.of(values)
.map(DtbDocr::getCodMart)
.withoutNulls()
.distinct()
.toList();
ArticoloRESTConsumer.getByCodMart(codMarts, arts -> {
if(arts != null && arts.size() > 0) {
for (DtbDocr value : values) {
MtbAart foundMtbAart = null;
List<MtbAart> mtbAartStream = Stream.of(arts)
.filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList();
if(mtbAartStream != null && mtbAartStream.size() > 0){
foundMtbAart = mtbAartStream.get(0);
}
value.setMtbAart(foundMtbAart);
}
if(onComplete != null) onComplete.run(values);
}
}, onFailed);
} else {
if(onComplete != null) onComplete.run(values);
}
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
});
}
}

View File

@@ -1,4 +1,4 @@
package it.integry.integrywmsnative.gest.picking_resi.dto;
package it.integry.integrywmsnative.gest.picking_resi.rest;
import java.util.ArrayList;
import java.util.List;

View File

@@ -79,7 +79,6 @@ public class ProdRecuperoMaterialeViewModel {
}
private void initBarcode() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
@@ -97,13 +96,12 @@ public class ProdRecuperoMaterialeViewModel {
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
if(UtilityBarcode.isEtichettaAnonima(data) || UtilityBarcode.isEtichetta128(data)){
if (UtilityBarcode.isEtichettaAnonima(data) || UtilityBarcode.isEtichetta128(data)) {
this.executeEtichettaUL(data, progressDialog);
}
@@ -112,10 +110,10 @@ public class ProdRecuperoMaterialeViewModel {
private void executeEtichettaUL(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) {
ColliMagazzinoRESTConsumer.getBySSCCStatic(barcodeScanDTO.getStringValue(), true, false, mtbColt -> {
if(mtbColt != null) {
if (mtbColt != null) {
HistoryVersamentoProdULDTO historyVersamentoProdULRestDTO = this.getHistoryElementFromMtbColt(mtbColt);
if(historyVersamentoProdULRestDTO != null) {
if (historyVersamentoProdULRestDTO != null) {
this.dispatchItem(historyVersamentoProdULRestDTO, mtbColt, progressDialog);
} else {
DialogCommon.showNoULFound(mContext, () -> {
@@ -144,9 +142,9 @@ public class ProdRecuperoMaterialeViewModel {
x.getDataColloRif().equals(mtbColt.getDataColloS()) &&
x.getSerColloRif().equalsIgnoreCase(mtbColt.getSerCollo()) &&
x.getGestioneRif().equalsIgnoreCase(mtbColt.getGestione()))
.toList();
.toList();
if(filteredItems != null && filteredItems.size() > 0) {
if (filteredItems != null && filteredItems.size() > 0) {
return filteredItems.get(0);
}
@@ -175,17 +173,14 @@ public class ProdRecuperoMaterialeViewModel {
DialogInputQuantity.makeBase(mContext, dto, false, quantity -> {
onItemDispatched(item, quantity.qtaTot.getBigDecimal(), sourceMtbColt, dialogProgress);
}, () -> {
if(dialogProgress != null) dialogProgress.dismiss();
if (dialogProgress != null) dialogProgress.dismiss();
}).show();
}
private void onItemDispatched(HistoryVersamentoProdULDTO item, BigDecimal quantity, MtbColt sourceMtbColt, Dialog progress) {
if(progress == null) {
if (progress == null) {
progress = UtilityProgress.createDefaultProgressDialog(mContext);
}
Dialog finalProgress = progress;
@@ -197,7 +192,7 @@ public class ProdRecuperoMaterialeViewModel {
.setGestione(item.getGestione())
.setMtbColr(new ObservableArrayList<>());
for(HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) {
for (HistoryVersamentoProdULDTO.OrdineDto ordine : item.getOrdini()) {
BigDecimal qtaCol = quantity.multiply(new BigDecimal(-1).multiply(new BigDecimal(ordine.getPercentageHr()))).divide(new BigDecimal(100), 3, RoundingMode.HALF_EVEN);
final MtbColr mtbColrScarico = new MtbColr()
@@ -220,18 +215,17 @@ public class ProdRecuperoMaterialeViewModel {
}
mtbColtScarico.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
RunnableArgss<MtbColt, Boolean> saveRunnable = (mtbColt, createdLU) -> {
if(mtbColt != null) {
if (mtbColt != null) {
List<MtbColt> colliToSave = new ArrayList<>();
boolean shouldPrint = false;
if(!Objects.equals(mtbColt.getNumCollo(), item.getNumColloRif()) ||
if (!Objects.equals(mtbColt.getNumCollo(), item.getNumColloRif()) ||
!Objects.equals(mtbColt.getSerCollo(), item.getSerColloRif()) ||
!Objects.equals(mtbColt.getDataColloS(), item.getDataColloRif()) ||
!Objects.equals(mtbColt.getGestione(), item.getGestioneRif())) {
@@ -267,7 +261,7 @@ public class ProdRecuperoMaterialeViewModel {
FBToast.successToast(mContext, mContext.getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
if(finalShouldPrint) {
if (finalShouldPrint) {
printCollo(finalProgress, value.get(0), () -> {
this.refreshAdapter();
mOnRecuperoCompleted.run();
@@ -287,7 +281,7 @@ public class ProdRecuperoMaterialeViewModel {
}
};
if(sourceMtbColt != null) saveRunnable.run(sourceMtbColt, false);
if (sourceMtbColt != null) saveRunnable.run(sourceMtbColt, false);
else DialogScanOrCreateLU.make(mContext, true, false, saveRunnable).show();
}
@@ -329,21 +323,18 @@ public class ProdRecuperoMaterialeViewModel {
}
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onAbort) {
ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
String reportName = ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum());
PrinterRESTConsumer.printColloStatic(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onAbort);
PrinterRESTConsumer.printColloStatic(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onAbort);
}, onAbort);
}
private void refreshAdapter() {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
@@ -360,5 +351,4 @@ public class ProdRecuperoMaterialeViewModel {
}
}

View File

@@ -75,7 +75,7 @@ public class DialogScanLisA {
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();
final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);

View File

@@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper;
import android.app.Activity;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
@@ -16,6 +15,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepositor
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDate;
public class OrdineAcquistoPvHelper {
@@ -67,7 +67,7 @@ public class OrdineAcquistoPvHelper {
public void createNewOrder(Griglia griglia, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onError) {
Ordine ordine = new Ordine();
ordine.setDataIns(new Date());
ordine.setDataIns(UtilityDate.getDateInstance());
ordine.setIdGriglia(griglia.getGrigliaId());
mOrdineRepository.insert(ordine, id -> {
ordine.setOrdineId(id);

View File

@@ -6,7 +6,9 @@ import com.annimon.stream.Stream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.inject.Inject;
@@ -277,6 +279,14 @@ public class RettificaGiacenzeViewModel {
initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf);
}
if(dataScad == null && pickingObjectDTO.getMtbAart().getGgScadPartita() != null && pickingObjectDTO.getMtbAart().getGgScadPartita() > 0) {
dataScad = UtilityDate.getDateInstance();
Calendar c = new GregorianCalendar();
c.setTime(dataScad);
c.add(Calendar.DATE, pickingObjectDTO.getMtbAart().getGgScadPartita());
dataScad = c.getTime();
}
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
@@ -343,7 +353,7 @@ public class RettificaGiacenzeViewModel {
this.sendOnRowSaved();
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(false, null);
if (shouldCloseLU) closeLU(true, null);
}, this::sendError);
} else {
mtbColr
@@ -373,7 +383,7 @@ public class RettificaGiacenzeViewModel {
this.sendOnRowSaved();
this.sendOnLoadingEnded();
if (shouldCloseLU) closeLU(false, null);
if (shouldCloseLU) closeLU(true, null);
}, this::sendError);
}
}
@@ -417,7 +427,7 @@ public class RettificaGiacenzeViewModel {
}, this::sendError);
};
if (!UtilityString.isNullOrEmpty(mDefaultCausale) && saveCausale) {
if (!UtilityString.isNullOrEmpty(mDefaultCausale)) {
this.saveCausaleRettificaGiacenze(saveAction);
} else {
saveAction.run();

View File

@@ -1,5 +1,6 @@
package it.integry.integrywmsnative.gest.spedizione;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
@@ -44,6 +45,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.core.utility.UtilityToast;
import it.integry.integrywmsnative.databinding.ActivitySpedizioneBinding;
@@ -96,6 +98,21 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
private final int PICK_UL_REQUEST = 1;
public static void startActivity(Context context, List<SitArtOrdDTO> ordini, List<OrdineVenditaInevasoDTO> selectedOrders, List<MtbColt> mtbColtList) {
Intent myIntent = new Intent(context, SpedizioneActivity.class);
String keyPickingList = DataCache.addItem(ordini);
myIntent.putExtra("keyPickingList", keyPickingList);
String keyTestateOrdini = DataCache.addItem(selectedOrders);
myIntent.putExtra("keyTestateOrdini", keyTestateOrdini);
String keyColliRegistrati = DataCache.addItem(mtbColtList);
myIntent.putExtra("keyColliRegistrati", keyColliRegistrati);
context.startActivity(myIntent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -187,9 +204,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
this.mBindings.spedizionePickingList.setAdapter(spedizioneListAdapter);
this.mBindings.spedizionePickingList.setLayoutManager(new LinearLayoutManager(this));
spedizioneListAdapter.setOnItemClicked(clickedItem -> {
spedizioneListAdapter.setOnItemClicked((clickedItem, refMtbColt) -> {
if (!noLUPresent.get() && SettingsManager.iDB().isFlagSpedizioneEnableManualPick() && clickedItem.getSitArtOrdDTO().isFlagEnablePickManuale()) {
this.mViewmodel.dispatchOrdineRow(clickedItem);
this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt);
}
});
}
@@ -249,7 +266,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom());
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
spedizioneListModel.setUntMis("col");
spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
} else {
@@ -287,7 +304,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
cloneModel.setSubDescrizione2(String.format(getString(R.string.lu_number_data_text), mtbColtToPick.getNumCollo(), UtilityDate.formatDate(mtbColtToPick.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
cloneModel.setUntMis("col");
cloneModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
BigDecimal numCnfOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter);
@@ -412,7 +429,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
spedizioneListModel.setBadge2(x.getSitArtOrdDTO().getCodJcom());
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
spedizioneListModel.setUntMis("col");
spedizioneListModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
spedizioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfOrd());
spedizioneListModel.setQtaEvasa(numCnfWithdrawRows.getBigDecimalValue());
} else {
@@ -450,7 +467,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
cloneModel.setSubDescrizione2(String.format(getString(R.string.lu_number_data_text), mtbColtToPick.getNumCollo(), UtilityDate.formatDate(mtbColtToPick.getDataColloD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
cloneModel.setUntMis("col");
cloneModel.setUntMis(UtilityResources.getString(R.string.unt_mis_col));
BigDecimal numCnfOrdToSubstract = UtilityBigDecimal.getLowerBetween(mtbColrToDispatch.getNumCnf(), numCnfOrdCounter);
@@ -528,7 +545,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
@@ -584,7 +601,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
ArrayList<MtbColt> createdMtbColts = this.mViewmodel.getCreatedMtbColts();
Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, PrinterRESTConsumer.Type.PRIMARIA);
Intent myIntent = ListaBancaliActivity.createIntent(this, createdMtbColts, true, PrinterRESTConsumer.Type.PRIMARIA, false);
this.startActivityForResult(myIntent, PICK_UL_REQUEST);
}

View File

@@ -103,12 +103,12 @@ public class SpedizioneViewModel {
private final PrinterRESTConsumer mPrinterRESTConsumer;
@Inject
public SpedizioneViewModel( ArticoloRESTConsumer articoloRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliDataRecoverService colliDataRecoverService,
OrdiniRESTConsumer ordiniRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer) {
public SpedizioneViewModel(ArticoloRESTConsumer articoloRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliDataRecoverService colliDataRecoverService,
OrdiniRESTConsumer ordiniRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer,
PrinterRESTConsumer printerRESTConsumer) {
this.mArticoloRESTConsumer = articoloRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliDataRecoverService = colliDataRecoverService;
@@ -298,7 +298,8 @@ public class SpedizioneViewModel {
}
private void sendLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete) {
if (this.mListener != null) mListener.onLUPesoRequired(codTcol, netWeightKG, grossWeightKG, onComplete);
if (this.mListener != null)
mListener.onLUPesoRequired(codTcol, netWeightKG, grossWeightKG, onComplete);
}
private void sendLUPrintRequest(RunnableArgs<Boolean> onComplete) {
@@ -489,7 +490,7 @@ public class SpedizioneViewModel {
mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
if(mtbColt.getSegno() != -1) {
if (mtbColt.getSegno() != -1) {
searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidLUException());
} else {
@@ -587,7 +588,7 @@ public class SpedizioneViewModel {
if (UtilityString.equalsIgnoreCase(x.getCodMart(), pickingObject.getSitArtOrdDTO().getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), pickingObject.getSitArtOrdDTO().getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), pickingObject.getSitArtOrdDTO().getCodCol()) &&
(!mEnableCheckPartitaMag || UtilityString.equalsIgnoreCase(x.getPartitaMag(), pickingObject.getSitArtOrdDTO().getPartitaMag()))) {
(!mEnableCheckPartitaMag || UtilityString.equalsIgnoreCase(x.getPartitaMag(), pickingObject.getSitArtOrdDTO().getPartitaMag()) || UtilityString.isNullOrEmpty(pickingObject.getSitArtOrdDTO().getPartitaMag()))) {
if (!matchPickingObject.contains(pickingObject)) {
matchPickingObject.add(pickingObject);
@@ -606,7 +607,7 @@ public class SpedizioneViewModel {
.filter(x -> !(UtilityString.equalsIgnoreCase(x.getCodMart(), matchedObject.getSitArtOrdDTO().getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), matchedObject.getSitArtOrdDTO().getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getSitArtOrdDTO().getCodCol()) &&
(!mEnableCheckPartitaMag || UtilityString.equalsIgnoreCase(x.getPartitaMag(), matchedObject.getSitArtOrdDTO().getPartitaMag()))))
(!mEnableCheckPartitaMag || UtilityString.equalsIgnoreCase(x.getPartitaMag(), matchedObject.getSitArtOrdDTO().getPartitaMag()) || UtilityString.isNullOrEmpty(matchedObject.getSitArtOrdDTO().getPartitaMag()))))
.forEach(cloneMtbColrs::remove);
cloneMtbColt.setMtbColr(cloneMtbColrs);
@@ -647,7 +648,23 @@ public class SpedizioneViewModel {
if (matchedRows == null || matchedRows.size() == 0) {
this.sendError(new NoArtsFoundException());
} else if (matchedRows.size() == 1) {
this.dispatchOrdineRow(matchedRows.get(0));
PickingObjectDTO matchedItem = matchedRows.get(0);
if (matchedItem.getMtbColts() != null && matchedItem.getMtbColts().size() > 1) {
List<PickingObjectDTO> pickingList = mPickingList.getValue();
Stream.of(pickingList)
.filter(x -> x != matchedItem)
.forEach(x -> x.setHidden(true));
this.sendFilterApplied(null);
this.getPickingList().postValue(pickingList);
} else {
this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt());
}
} else {
List<PickingObjectDTO> pickingList = mPickingList.getValue();
@@ -664,7 +681,7 @@ public class SpedizioneViewModel {
}
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO) {
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt) {
BigDecimal totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd();
BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd();
@@ -700,27 +717,47 @@ public class SpedizioneViewModel {
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
MtbColr mtbColrToDispatch = pickingObjectDTO.getTempPickData() != null &&
MtbColr scannedMtbColr = pickingObjectDTO.getTempPickData() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr() != null &&
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ?
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
if (mtbColrToDispatch != null) {
if (UtilityBigDecimal.lowerThan(mtbColrToDispatch.getQtaCol(), qtaDaEvadere)) {
numCnfDaPrelevare = mtbColrToDispatch.getNumCnf();
qtaColDaPrelevare = mtbColrToDispatch.getQtaCol();
if (refMtbColt == null && pickingObjectDTO.getMtbColts() != null && pickingObjectDTO.getMtbColts().size() == 1) {
refMtbColt = pickingObjectDTO.getMtbColts().get(0);
}
MtbColr refMtbColr = null;
if (scannedMtbColr != null && refMtbColt != null && refMtbColt.getMtbColr().size() > 0) {
Optional<MtbColr> optionalMtbColr = Stream.of(refMtbColt.getMtbColr())
.filter(y -> UtilityString.equalsIgnoreCase(y.getCodMart(), scannedMtbColr.getCodMart()) &&
UtilityString.equalsIgnoreCase(y.getCodTagl(), scannedMtbColr.getCodTagl()) &&
UtilityString.equalsIgnoreCase(y.getCodCol(), scannedMtbColr.getCodCol()) &&
(!mEnableCheckPartitaMag || UtilityString.equalsIgnoreCase(y.getPartitaMag(), scannedMtbColr.getPartitaMag()) || UtilityString.isNullOrEmpty(scannedMtbColr.getPartitaMag())))
.findFirst();
if (optionalMtbColr.isPresent()) refMtbColr = optionalMtbColr.get();
}
MtbColr mtbColrToUse = refMtbColr != null ? refMtbColr : scannedMtbColr;
if (mtbColrToUse != null) {
if (UtilityBigDecimal.equalsOrLowerThan(mtbColrToUse.getQtaCol(), qtaDaEvadere)) {
numCnfDaPrelevare = mtbColrToUse.getNumCnf();
qtaColDaPrelevare = mtbColrToUse.getQtaCol();
} else {
numCnfDaPrelevare = numCnfDaEvadere;
qtaColDaPrelevare = qtaDaEvadere;
}
qtaCnfDaPrelevare = mtbColrToDispatch.getQtaCnf();
qtaCnfDaPrelevare = mtbColrToUse.getQtaCnf();
totalQtaAvailable = mtbColrToDispatch.getQtaCol();
totalNumCnfAvailable = mtbColrToDispatch.getNumCnf();
qtaCnfAvailable = mtbColrToDispatch.getQtaCnf();
totalQtaAvailable = mtbColrToUse.getQtaCol();
totalNumCnfAvailable = mtbColrToUse.getNumCnf();
qtaCnfAvailable = mtbColrToUse.getQtaCnf();
if (UtilityBigDecimal.lowerThan(numCnfDaPrelevare, BigDecimal.ZERO))
@@ -729,8 +766,8 @@ public class SpedizioneViewModel {
if (UtilityBigDecimal.lowerThan(qtaColDaPrelevare, BigDecimal.ZERO))
qtaColDaPrelevare = BigDecimal.ZERO;
partitaMag = mtbColrToDispatch.getPartitaMag();
dataScad = mtbColrToDispatch.getDataScadPartitaD();
partitaMag = scannedMtbColr.getPartitaMag();
dataScad = scannedMtbColr.getDataScadPartitaD();
} else if (pickingObjectDTO.getTempPickData() != null && pickingObjectDTO.getTempPickData().getManualPickDTO() != null) {
//Oppure le info del barcode scansionato
@@ -744,8 +781,8 @@ public class SpedizioneViewModel {
if (mtbAart.isFlagQtaCnfFissaBoolean()) {
qtaCnfDaPrelevare = mtbAart.getQtaCnf();
if(manualPickDTO.isEanPeso()) {
if(mtbAart.getUntMisRifPeso() == MtbAart.UntMisRifPesoEnum.M) {
if (manualPickDTO.isEanPeso()) {
if (mtbAart.getUntMisRifPeso() == MtbAart.UntMisRifPesoEnum.M) {
if (UtilityBigDecimal.equalsTo(mtbAart.getPesoKg(), BigDecimal.ZERO)) {
this.sendError(new InvalidPesoKGException());
} else {
@@ -761,8 +798,9 @@ public class SpedizioneViewModel {
if (qtaColDaPrelevare != null && numCnfDaPrelevare == null) {
numCnfDaPrelevare = UtilityBigDecimal.divideToInteger(qtaColDaPrelevare, mtbAart.getQtaCnf());
if(!mtbAart.isFlagQtaCnfFissaBoolean()) {
if(UtilityBigDecimal.equalsTo(numCnfDaPrelevare, BigDecimal.ZERO)) numCnfDaPrelevare = BigDecimal.ONE;
if (!mtbAart.isFlagQtaCnfFissaBoolean()) {
if (UtilityBigDecimal.equalsTo(numCnfDaPrelevare, BigDecimal.ZERO))
numCnfDaPrelevare = BigDecimal.ONE;
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
}
} else if (numCnfDaPrelevare != null && qtaColDaPrelevare == null) {
@@ -776,6 +814,7 @@ public class SpedizioneViewModel {
}
}
MtbColt finalRefMtbColt = refMtbColt;
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
@@ -794,6 +833,7 @@ public class SpedizioneViewModel {
mCanOverflowOrderQuantity,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO,
finalRefMtbColt,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
@@ -853,7 +893,7 @@ public class SpedizioneViewModel {
initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf);
}
if(numCnfDaPrelevare == null && qtaColDaPrelevare == null && initialNumCnf == null && initialQtaTot == null) {
if (numCnfDaPrelevare == null && qtaColDaPrelevare == null && initialNumCnf == null && initialQtaTot == null) {
initialNumCnf = BigDecimal.ONE;
initialQtaCnf = mtbAart.getQtaCnf();
initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf);
@@ -880,6 +920,7 @@ public class SpedizioneViewModel {
mCanOverflowOrderQuantity,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO,
null,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
@@ -899,7 +940,7 @@ public class SpedizioneViewModel {
PickingObjectDTO pickingObjectDTO = null;
if(optionalPickingObjectDTO.isPresent()) {
if (optionalPickingObjectDTO.isPresent()) {
pickingObjectDTO = optionalPickingObjectDTO.get();
}
@@ -915,7 +956,7 @@ public class SpedizioneViewModel {
BigDecimal qtaDaEvadere = null;
BigDecimal qtaCnfDaEvadere = null;
if(finalPickingObjectDTO != null) {
if (finalPickingObjectDTO != null) {
totalQtaOrd = finalPickingObjectDTO.getSitArtOrdDTO().getQtaOrd();
totalNumCnfOrd = finalPickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd();
qtaCnfOrd = finalPickingObjectDTO.getSitArtOrdDTO().getQtaCnfOrd();
@@ -954,12 +995,14 @@ public class SpedizioneViewModel {
if (mtbColrRifs != null && mtbColrRifs.size() > 0) {
//TODO: Da capire se è necessario controllare anche il cod_jcom
mtbColrRif = Stream.of(mtbColrRifs)
Optional<MtbColr> optionalMtbColr = Stream.of(mtbColrRifs)
.filter(x -> UtilityString.equalsIgnoreCase(x.getCodMart(), mtbColrToEdit.getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), mtbColrToEdit.getCodCol()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), mtbColrToEdit.getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getPartitaMag(), mtbColrToEdit.getPartitaMag()))
.single();
.findSingle();
mtbColrRif = optionalMtbColr.isPresent() ? optionalMtbColr.get() : null;
}
@@ -969,6 +1012,9 @@ public class SpedizioneViewModel {
totalNumCnfAvailable = mtbColrRif.getNumCnf();
qtaCnfAvailable = mtbColrRif.getQtaCnf();
totalNumCnfAvailable = totalNumCnfAvailable.add(mtbColrToEdit.getNumCnf());
totalQtaAvailable = totalQtaAvailable.add(mtbColrToEdit.getQtaCol());
} else {
totalQtaAvailable = mtbColrToEdit.getQtaCol();
@@ -977,9 +1023,6 @@ public class SpedizioneViewModel {
}
totalNumCnfAvailable = totalNumCnfAvailable.add(mtbColrToEdit.getNumCnf());
totalQtaAvailable = totalQtaAvailable.add(mtbColrToEdit.getQtaCol());
if (UtilityBigDecimal.lowerThan(numCnfDaPrelevare, BigDecimal.ZERO))
numCnfDaPrelevare = BigDecimal.ZERO;
@@ -1082,7 +1125,7 @@ public class SpedizioneViewModel {
}
public void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
public void saveNewRow(PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
final MtbColr mtbColr = new MtbColr()
@@ -1103,7 +1146,7 @@ public class SpedizioneViewModel {
pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
if (mtbColrToDispatch != null) {
if(UtilityString.isNullOrEmpty(mCurrentMtbColt.getCodTcol()))
if (UtilityString.isNullOrEmpty(mCurrentMtbColt.getCodTcol()))
mCurrentMtbColt.setCodTcol(UtilityString.empty2null(pickingObjectDTO.getTempPickData().getSourceMtbColt().getCodTcol()));
mtbColr
@@ -1114,13 +1157,13 @@ public class SpedizioneViewModel {
.setDataColloRif(UtilityString.empty2null(mtbColrToDispatch.getDataColloS()));
if(mtbColrToDispatch.getPesoNettoKg() != null) {
if (mtbColrToDispatch.getPesoNettoKg() != null) {
//Proporzione
BigDecimal pesoNettoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoNettoKg()), mtbColrToDispatch.getQtaCol());
mtbColr.setPesoNettoKg(pesoNettoKg);
}
if(mtbColrToDispatch.getPesoLordoKg() != null) {
if (mtbColrToDispatch.getPesoLordoKg() != null) {
//Proporzione
BigDecimal pesoLordoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoLordoKg()), mtbColrToDispatch.getQtaCol());
mtbColr.setPesoLordoKg(pesoLordoKg);
@@ -1150,14 +1193,10 @@ public class SpedizioneViewModel {
//Se è l'unico articolo del collo (controllo se è uguale a 0 perché ancora non è stato aggiunto nella lista delle righe)
if (shouldCloseLU && mCurrentMtbColt.getMtbColr().size() == 0) {
shouldPrint = false;
// if(UtilityString.isNullOrEmpty(cloneMtbColt.getCodTcol())) {
// cloneMtbColt.setCodTcol(pickingObjectDTO.getSitArtOrdDTO().getCodTcol());
// cloneMtbColt.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
// }
}
if(UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
if (UtilityBigDecimal.equalsTo(numCnf, BigDecimal.ZERO) && UtilityBigDecimal.equalsTo(qtaTot, BigDecimal.ZERO)) {
resetMatchedRows();
this.sendOnLoadingEnded();
@@ -1177,7 +1216,18 @@ public class SpedizioneViewModel {
.setUntMis(pickingObjectDTO.getMtbAart().getUntMis())
.setMtbAart(pickingObjectDTO.getMtbAart());
mtbColr.setRefMtbColr(mtbColrToDispatch);
if(mEnableGiacenza) {
mtbColr.setRefMtbColr(new MtbColr()
.setCodMart(mtbColr.getCodMart())
.setPartitaMag(mtbColr.getPartitaMag())
.setCodTagl(mtbColr.getCodTagl())
.setCodCol(mtbColr.getCodCol())
.setNumCollo(refMtbColt.getNumCollo())
.setDataCollo(refMtbColt.getDataColloS())
.setSerCollo(refMtbColt.getSerCollo())
.setGestione(refMtbColt.getGestione()));
}
pickingObjectDTO.getWithdrawMtbColrs().add(mtbColr);
mCurrentMtbColt.getMtbColr().add(mtbColr);
@@ -1226,7 +1276,7 @@ public class SpedizioneViewModel {
.filter(x -> Stream.of(x.getWithdrawMtbColrs()).anyMatch(y -> y == mtbColrToUpdate))
.findSingle();
if(pickingObjectDTO.isPresent()) {
if (pickingObjectDTO.isPresent()) {
pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToUpdate);
pickingObjectDTO.get().getWithdrawMtbColrs().add(mtbColr);
}
@@ -1270,7 +1320,7 @@ public class SpedizioneViewModel {
.filter(x -> Stream.of(x.getWithdrawMtbColrs()).anyMatch(y -> y == mtbColrToDelete))
.findSingle();
if(pickingObjectDTO.isPresent()) {
if (pickingObjectDTO.isPresent()) {
pickingObjectDTO.get().getWithdrawMtbColrs().remove(mtbColrToDelete);
}
@@ -1380,15 +1430,14 @@ public class SpedizioneViewModel {
}
private void singlePrint(MtbColt mtbColtToPrint, String printerName, Runnable onComplete, RunnableArgs<Exception> onFailed) {
ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum(), reportName -> {
String reportName = ReportManager.getReportNameLUFromGestione(mtbColtToPrint.getGestioneEnum());
PrinterRESTConsumer.printColloStatic(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onFailed);
this.mPrinterRESTConsumer.printCollo(
printerName,
mtbColtToPrint,
1,
reportName, onComplete, onFailed);
}, onFailed);
}
@@ -1396,14 +1445,18 @@ public class SpedizioneViewModel {
this.mCurrentMtbColt = mtbColt;
mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini);
this.mCurrentMtbColt.generaFiltroOrdineFromDTO(mDefaultFiltroOrdine);
this.resetMatchedRows();
this.sendLUOpened(this.mCurrentMtbColt);
}
private void postCloseOperations(List<MtbColt> mtbColtList) {
this.mColliRegistrati.addAll(mtbColtList);
Stream.of(mtbColtList)
.filter(x -> !this.mColliRegistrati.contains(x))
.forEach(x -> this.mColliRegistrati.add(x));
for(MtbColt mtbColt : mtbColtList) {
for (MtbColt mtbColt : mtbColtList) {
Stream.of(mTestateOrdini)
.filter(x -> x.getNumOrd().equals(mtbColt.getNumOrd()) && x.getDataOrdD().equals(mtbColt.getDataOrdD()) && x.getGestioneEnum() == mtbColt.getGestioneEnum())
.forEach(x -> x.setExistColloBoolean(true));
@@ -1437,7 +1490,7 @@ public class SpedizioneViewModel {
.findFirst();
if(optionalMtbColrReference.isPresent()) {
if (optionalMtbColrReference.isPresent()) {
//looking for real refMtbColr instance
MtbColr mtbColr = optionalMtbColrReference.get();
@@ -1508,15 +1561,12 @@ public class SpedizioneViewModel {
public interface Listener extends ILUPrintListener, ILoadingListener, ILUBaseOperationsListener {
void onLUPesoRequired(String codTcol, BigDecimal netWeightKG, BigDecimal grossWeightKG, RunnableArgsss<String, BigDecimal, BigDecimal> onComplete);
void onFilterApplied(String newValue);
void onFilterRemoved();
void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete);
void onError(Exception ex);
void onItemDispatched(PickingObjectDTO pickingObjectDTO,
@@ -1537,8 +1587,6 @@ public class SpedizioneViewModel {
Date dataScad,
boolean canOverflowOrderQuantity,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onRowSaved();
}
}

View File

@@ -20,7 +20,8 @@ import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.SpedizioneMainListGroupHeaderBinding;
@@ -29,11 +30,10 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<SpedizioneListAdapter.SubheaderHolder, SpedizioneListAdapter.SingleItemViewHolder> {
private Context mContext;
private List<SpedizioneListModel> mDataset = new ArrayList<>();
private final List<SpedizioneListModel> mDataset = new ArrayList<>();
private RunnableArgs<PickingObjectDTO> mOnItemClicked;
private RunnableArgss<PickingObjectDTO, MtbColt> mOnItemClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
@@ -71,7 +71,7 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<Spedizio
});
}
public void setOnItemClicked(RunnableArgs<PickingObjectDTO> onItemClicked) {
public void setOnItemClicked(RunnableArgss<PickingObjectDTO, MtbColt> onItemClicked) {
this.mOnItemClicked = onItemClicked;
}
@@ -139,7 +139,7 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter<Spedizio
holder.mBinding.getRoot().setOnClickListener(v -> {
if (this.mOnItemClicked != null)
this.mOnItemClicked.run(pickingObjectDTO.getOriginalModel());
this.mOnItemClicked.run(pickingObjectDTO.getOriginalModel(), pickingObjectDTO.getSourceMtbColt());
});
}

View File

@@ -1,5 +1,7 @@
package it.integry.integrywmsnative.gest.spedizione.model;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
@@ -9,17 +11,32 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.rest.model.SitArtOrdDTO;
public class PickingObjectDTO {
public class PickingObjectDTO implements Cloneable {
private SitArtOrdDTO sitArtOrdDTO;
private MtbAart mtbAart;
private List<MtbColt> mtbColts;
private PickDataDTO tempPickData;
private MtbColt refMtbColt;
private List<MtbColr> withdrawMtbColrs = new ArrayList<>();
private boolean hidden = false;
@NotNull
@Override
public Object clone() {
try {
return super.clone();
} catch (Exception ex) {
return null;
}
}
public PickingObjectDTO cloneObject() {
return (PickingObjectDTO) this.clone();
}
public SitArtOrdDTO getSitArtOrdDTO() {
return sitArtOrdDTO;
@@ -66,6 +83,15 @@ public class PickingObjectDTO {
return this;
}
public MtbColt getRefMtbColt() {
return refMtbColt;
}
public PickingObjectDTO setRefMtbColt(MtbColt refMtbColt) {
this.refMtbColt = refMtbColt;
return this;
}
public List<MtbColr> getWithdrawMtbColrs() {
return withdrawMtbColrs;
}

View File

@@ -17,7 +17,7 @@ import it.integry.integrywmsnative.core.model.DtbDocr;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.utility.UtilityQuery;
import it.integry.integrywmsnative.gest.picking_resi.dto.WithdrawableDtbDocr;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
public class UltimeConsegneClienteRESTConsumer {

View File

@@ -1,40 +1,23 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreBinding;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreListAdapter;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
/**

View File

@@ -2,7 +2,6 @@ package it.integry.integrywmsnative.gest.vendita;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.Html;
import android.text.SpannableString;
@@ -25,13 +24,11 @@ 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.data_cache.DataCache;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.secondary.GestioneEnum;
import it.integry.integrywmsnative.core.rest.CommonRESTException;
import it.integry.integrywmsnative.core.rest.consumers.OrdiniRESTConsumer;
@@ -234,7 +231,7 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
+ "<br />" +
"<b>" + alreadyRegisteredUL + "</b> " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)),
null,
() -> startVenditaActivity(sitArtsDTO, selectedOrders, mtbColtList)
() -> SpedizioneActivity.startActivity(getActivity(), sitArtsDTO, selectedOrders, mtbColtList)
).show();
}, ex -> UtilityExceptions.defaultException(getActivity(), ex, progress));
@@ -350,19 +347,4 @@ public class MainVenditaFragment extends Fragment implements ITitledFragment, IS
onComplete.run();
}
}
private void startVenditaActivity(List<SitArtOrdDTO> ordini, List<OrdineVenditaInevasoDTO> selectedOrders, List<MtbColt> mtbColtList) {
Intent myIntent = new Intent(getActivity(), SpedizioneActivity.class);
String keyPickingList = DataCache.addItem(ordini);
myIntent.putExtra("keyPickingList", keyPickingList);
String keyTestateOrdini = DataCache.addItem(selectedOrders);
myIntent.putExtra("keyTestateOrdini", keyTestateOrdini);
String keyColliRegistrati = DataCache.addItem(mtbColtList);
myIntent.putExtra("keyColliRegistrati", keyColliRegistrati);
getActivity().startActivity(myIntent);
}
}

View File

@@ -93,12 +93,14 @@ public class SimpleAutoCompleteDropdownAdapter extends ArrayAdapter {
protected void publishResults(CharSequence constraint,
FilterResults results) {
// NOTE: this function is *always* called from the UI thread.
ArrayList<T> filtered = (ArrayList<T>) results.values;
notifyDataSetChanged();
clear();
for (int i = 0, l = filtered.size(); i < l; i++)
add(filtered.get(i));
notifyDataSetInvalidated();
if(constraint != null && constraint.length() > 2) {
ArrayList<T> filtered = (ArrayList<T>) results.values;
notifyDataSetChanged();
clear();
for (int i = 0, l = filtered.size(); i < l; i++)
add(filtered.get(i));
notifyDataSetInvalidated();
}
}
}

View File

@@ -101,6 +101,10 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie
mBinding.textviewArtDescription.setText(mContext.getResources().getQuantityString(R.plurals.articles, mtbColrs.size()));
}
public void collapseMtbColrActionSheet(){
this.mBinding.bottomSheetMtbColrEdit.collapse();
}
public BottomSheetFragmentLUContentView setListener(Listener listener) {
this.mListener = listener;
return this;

View File

@@ -1,124 +0,0 @@
package it.integry.integrywmsnative.view.bottomsheet;
import androidx.annotation.NonNull;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.view.View;
import android.widget.RelativeLayout;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding;
public class ArticoliInColloBottomSheetHelper extends BottomSheetBehavior.BottomSheetCallback {
private AppCompatActivity mActivity;
private FragmentArticoliInColloBottomSheetBinding mBinding;
private BottomSheetBehavior mBottomSheetBehavior;
public ArticoliInColloBottomSheetHelper(AppCompatActivity context, FragmentArticoliInColloBottomSheetBinding binding){
mActivity = context;
mBinding = binding;
mBottomSheetBehavior = BottomSheetBehavior.from(mBinding.getRoot());
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
mBottomSheetBehavior.setBottomSheetCallback(this);
mBinding.appbarBottomSheet.setVisibility(View.INVISIBLE);
mBinding.toolbarBottomSheet.setNavigationIcon(R.drawable.ic_close_24dp);
mBinding.toolbarBottomSheet.setNavigationOnClickListener(view -> {
if(mBottomSheetBehavior.getState()==BottomSheetBehavior.STATE_EXPANDED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
});
mBinding.tapActionLayout.setOnClickListener(v -> {
if(mBottomSheetBehavior.getState()==BottomSheetBehavior.STATE_COLLAPSED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
mBinding.articoliInColloCloseCollo.setText(mActivity.getText(R.string.action_close_ul));
updateRigheNumber(0);
mBinding.articoliInColloSheetButton.setOnClickListener(view -> {
if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
} else {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
});
}
public void initCollo(MtbColt mtbColt){
mBinding.articoliInColloTitle.setText(String.format(mActivity.getText(R.string.articoli_in_collo_sheet_title).toString(), mtbColt.getNumCollo()));
mBinding.articoliInColloDetailsDate.setText(mtbColt.getDataColloHumanLong());
mBinding.articoliInColloDetailsPosizione.setText(mtbColt.getPosizione() != null ? mtbColt.getPosizione() : "N/A");
}
public void updateRigheNumber(int newRigheNumber){
mBinding.articoliInColloSheetButton.setText(newRigheNumber + " " + mActivity.getResources().getQuantityString(R.plurals.articles, newRigheNumber));
}
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
switch (newState) {
case BottomSheetBehavior.STATE_HIDDEN:
// mRootView.scrollTo(0, 0);
break;
case BottomSheetBehavior.STATE_EXPANDED:
mBinding.appbarBottomSheet.setClickable(true);
mBinding.appbarBottomSheet.setFocusable(true);
mBinding.tapActionLayout.setClickable(false);
mBinding.tapActionLayout.setFocusable(false);
break;
case BottomSheetBehavior.STATE_COLLAPSED:
mBinding.appbarBottomSheet.setVisibility(View.INVISIBLE);
mBinding.appbarBottomSheet.setClickable(false);
mBinding.appbarBottomSheet.setFocusable(false);
mBinding.tapActionLayout.setClickable(true);
mBinding.tapActionLayout.setFocusable(true);
break;
case BottomSheetBehavior.STATE_DRAGGING:
mBinding.appbarBottomSheet.setVisibility(View.VISIBLE);
// mRootView.scrollTo(0, 0);
break;
case BottomSheetBehavior.STATE_SETTLING:
mBinding.appbarBottomSheet.setVisibility(View.VISIBLE);
// mRootView.scrollTo(0, 0);
break;
}
}
public boolean isExpanded() {
return mBottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED;
}
public void expand() {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
public void collapse() {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
mBinding.appbarBottomSheet.setAlpha(slideOffset);
mBinding.tapActionLayout.setAlpha(1-slideOffset);
}
}

View File

@@ -1,7 +0,0 @@
package it.integry.integrywmsnative.view.bottomsheet.interfaces;
public interface IOnColloClosedCallback {
void onColloClosed(Runnable onComplete, boolean shouldPrint);
}

View File

@@ -1,7 +0,0 @@
package it.integry.integrywmsnative.view.bottomsheet.interfaces;
public interface IOnSimpleListChangedCallback {
void onChange();
}

View File

@@ -1,94 +0,0 @@
package it.integry.integrywmsnative.view.bottomsheet.view;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableField;
import androidx.databinding.ObservableList;
import java.lang.ref.WeakReference;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.WeakReferenceOnListChangedCallback;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetMtbcolrItemBinding;
public class ArticoliInColloBottomSheetMtbColrAdapter extends BaseAdapter {
private final WeakReferenceOnListChangedCallback onListChangedCallback;
private Context mContext;
private ObservableField<MtbColt> mtbColt;
public ArticoliInColloBottomSheetMtbColrAdapter(Context context, ObservableField<MtbColt> mtbColt) {
super();
this.mContext = context;
this.mtbColt = mtbColt;
this.onListChangedCallback = new WeakReferenceOnListChangedCallback(this);
this.mtbColt.get().getMtbColr().addOnListChangedCallback(onListChangedCallback);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
FragmentArticoliInColloBottomSheetMtbcolrItemBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_articoli_in_collo_bottom_sheet__mtbcolr_item, parent, false);
final MtbColr mtbColr = mtbColt.get().getMtbColr().get(position);
binding.setMtbColr(mtbColr);
//Setting qty with unt_mis
if(!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())){
String text = UtilityNumber.decimalToString(mtbColr.getQtaCol());
if(mtbColr.getMtbAart() != null) {
text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? "\n" + mtbColr.getMtbAart().getUntMis() : "";
}
binding.qtaTextview.setText(text);
} else {
binding.qtaTextview.setText(UtilityNumber.decimalToString(mtbColr.getNumCnf()) + "\n" + UtilityResources.getString(R.string.unt_mis_col));
}
binding.executePendingBindings();
if(position % 2 == 1) binding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
return binding.getRoot();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public int getCount() {
if(mtbColt.get() != null && mtbColt.get().getMtbColr() != null) {
return mtbColt.get().getMtbColr().size();
} else return 0;
}
}

View File

@@ -1,247 +0,0 @@
package it.integry.integrywmsnative.view.bottomsheet.viewmodel;
import android.app.Dialog;
import android.content.Context;
import androidx.databinding.Observable;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableField;
import androidx.annotation.NonNull;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import androidx.appcompat.app.AppCompatActivity;
import android.text.SpannableString;
import android.view.View;
import java.math.BigDecimal;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityNumber;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding;
import it.integry.integrywmsnative.view.bottomsheet.ArticoliInColloBottomSheetHelper;
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback;
import it.integry.integrywmsnative.view.bottomsheet.view.ArticoliInColloBottomSheetMtbColrAdapter;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity;
public class ArticoliInColloBottomSheetViewModel {
public ObservableField<MtbColt> mtbColt = new ObservableField<>();
private Context mContext;
private ArticoliInColloBottomSheetHelper mArticoliInColloBottomSheetHelper;
private IOnColloClosedCallback onCloseColloCallback;
private FragmentArticoliInColloBottomSheetBinding mBindings;
private BottomSheetBehavior mBottomSheetBehavior;
private RunnableArgs<MtbColr> mOnItemDeletedCallback;
private RunnableArgss<MtbColr, MtbColr> mOnItemEditedCallback;
public ArticoliInColloBottomSheetViewModel(AppCompatActivity context, final FragmentArticoliInColloBottomSheetBinding bindings){
mContext = context;
mBindings = bindings;
mArticoliInColloBottomSheetHelper = new ArticoliInColloBottomSheetHelper(context, mBindings);
mBindings.setViewModel(this);
mtbColt.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() {
@Override
public void onPropertyChanged(Observable sender, int propertyId) {
if(mtbColt.get() != null) {
mBindings.linearListview.setAdapter(new ArticoliInColloBottomSheetMtbColrAdapter(mContext, mtbColt));
mBindings.linearListview.setOnItemClickListener((parent, view, position, id) -> {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
onItemClicked.run(position);
});
mArticoliInColloBottomSheetHelper.updateRigheNumber(mtbColt.get().getMtbColr().size());
mArticoliInColloBottomSheetHelper.initCollo(mtbColt.get());
mtbColt.get().getMtbColr().addOnListChangedCallback(new SimpleListChangedCallback(() -> {
mArticoliInColloBottomSheetHelper.updateRigheNumber(mtbColt.get().getMtbColr().size());
}));
}
}
});
initBottomSheetActions();
}
public void setOnItemEditedCallback(RunnableArgss<MtbColr, MtbColr> onItemEditedCallback) {
this.mOnItemEditedCallback = onItemEditedCallback;
}
public void setOnItemDeletedCallback(RunnableArgs<MtbColr> onItemDeletedCallback) {
this.mOnItemDeletedCallback = onItemDeletedCallback;
}
private void initBottomSheetActions() {
mBindings.bg.setOnClickListener(v -> mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED));
mBottomSheetBehavior = BottomSheetBehavior.from(mBindings.bottomSheetActions);
mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED)
mBindings.bg.setVisibility(View.GONE);
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
mBindings.bg.setVisibility(View.VISIBLE);
mBindings.bg.setAlpha(slideOffset);
}
});
}
public void setOnCloseColloCallbackListener(final IOnColloClosedCallback onCloseColloCallback){
this.onCloseColloCallback = onCloseColloCallback;
}
public void closeCurrentUL(){
closeCurrentUL(null);
}
public void closeCurrentUL(Runnable onComplete){
if(onCloseColloCallback != null) onCloseColloCallback.onColloClosed(onComplete, true);
}
public boolean isExpanded() {
return mArticoliInColloBottomSheetHelper.isExpanded();
}
public void expand() {
mArticoliInColloBottomSheetHelper.expand();
}
public void collapse() {
mArticoliInColloBottomSheetHelper.collapse();
}
private RunnableArgs<Integer> onItemClicked = (position) -> {
MtbColr clickedItem = mtbColt.get().getMtbColr().get(position);
mBindings.bottomSheetActionsTitle.setText(clickedItem.getDescrizione());
mBindings.bottomSheetActionsSubtitle.setText(clickedItem.getCodMart());
//Setting qty with unt_mis
if(clickedItem.getMtbAart() != null) {
if (clickedItem.getMtbAart().isFlagQtaCnfFissaBoolean()) {
mBindings.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getQtaCol()) + (!UtilityString.isNullOrEmpty(clickedItem.getMtbAart().getUntMis()) ? ("" + clickedItem.getMtbAart().getUntMis()) : ""));
} else {
mBindings.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getNumCnf()) + " " + mContext.getString(R.string.unt_mis_col));
}
} else {
mBindings.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getQtaCol()));
}
mBindings.bottomSheetActionsEditBtn.setOnClickListener(v -> onItemEdit(position));
mBindings.bottomSheetActionsDeleteBtn.setOnClickListener(v -> onItemDelete(position));
};
private void onItemEdit(int position) {
MtbColr itemToEdit = mtbColt.get().getMtbColr().get(position);
MtbColr cloneItemToEdit = (MtbColr) itemToEdit.clone();
MtbColr originalItem = (MtbColr) itemToEdit.clone();
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO()
.setBatchLot(itemToEdit.getPartitaMag())
.setQtaDaEvadere(null)
.setQtaOrd(null)
.setMtbAart(itemToEdit.getMtbAart())
.setCanPartitaMagBeChanged(false)
.setQtaTot(itemToEdit.getQtaCol())
.setMaxQta(itemToEdit.getQtaCol());
DialogInputQuantity.makeBase(mContext, dto, false, quantityDTO -> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(mContext);
cloneItemToEdit.setQtaCol(quantityDTO.qtaTot.getBigDecimal());
cloneItemToEdit.setNumCnf(quantityDTO.numCnf.getBigDecimal());
ColliMagazzinoRESTConsumer.updateRigaStatic(cloneItemToEdit, () ->{
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
itemToEdit.setQtaCol(quantityDTO.qtaTot.getBigDecimal());
itemToEdit.setNumCnf(quantityDTO.numCnf.getBigDecimal());
progress.dismiss();
mtbColt.get().getMtbColr().set(position, itemToEdit);
if(mOnItemEditedCallback != null) mOnItemEditedCallback.run(originalItem, itemToEdit);
},
ex -> UtilityExceptions.defaultException(mContext, ex, progress));
}, null).show();
}
private void onItemDelete(int position) {
String text = mContext.getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(text), null, () -> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(mContext);
MtbColt mtbColtClone = (MtbColt) mtbColt.get().clone();
mtbColtClone.setMtbColr(new ObservableArrayList<>());
mtbColtClone.setOperation(CommonModelConsts.OPERATION.NO_OP);
MtbColr itemToDelete = (MtbColr) mtbColt.get().getMtbColr().get(position).clone();
itemToDelete.setQtaCol(itemToDelete.getQtaCol().multiply(new BigDecimal(-1)));
itemToDelete.setNumCnf(itemToDelete.getNumCnf().multiply(new BigDecimal(-1)));
itemToDelete.setRiga(null);
itemToDelete.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
mtbColtClone.getMtbColr().add(itemToDelete);
ColliMagazzinoRESTConsumer.saveColloStatic(mtbColtClone, (newMtbColt) -> {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
MtbColr deletedItem = mtbColt.get().getMtbColr().get(position);
mtbColt.get().getMtbColr().remove(deletedItem);
progress.dismiss();
if(this.mOnItemDeletedCallback != null) this.mOnItemDeletedCallback.run(deletedItem);
}, ex -> UtilityExceptions.defaultException(mContext, ex, progress));
}, null).show();
}
}

View File

@@ -1,40 +0,0 @@
package it.integry.integrywmsnative.view.bottomsheet.viewmodel;
import androidx.databinding.ObservableList;
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnSimpleListChangedCallback;
public class SimpleListChangedCallback extends ObservableList.OnListChangedCallback {
private IOnSimpleListChangedCallback mOnSimpleListChangedCallback;
public SimpleListChangedCallback(IOnSimpleListChangedCallback onSimpleListChangedCallback) {
mOnSimpleListChangedCallback = onSimpleListChangedCallback;
}
@Override
public void onChanged(ObservableList sender) {
mOnSimpleListChangedCallback.onChange();
}
@Override
public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) {
mOnSimpleListChangedCallback.onChange();
}
@Override
public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) {
mOnSimpleListChangedCallback.onChange();
}
@Override
public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) {
mOnSimpleListChangedCallback.onChange();
}
@Override
public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) {
mOnSimpleListChangedCallback.onChange();
mOnSimpleListChangedCallback.onChange();
}
}

View File

@@ -146,7 +146,7 @@ public class DialogAskPositionOfLU {
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();

View File

@@ -1,7 +1,6 @@
package it.integry.integrywmsnative.view.dialogs.base;
import android.app.Activity;
import androidx.appcompat.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -9,22 +8,20 @@ import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import androidx.appcompat.widget.AppCompatImageView;
import android.text.SpannableString;
import android.text.Spanned;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import java.util.HashMap;
import androidx.databinding.DataBindingUtil;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.databinding.DialogBaseBinding;
@@ -41,9 +38,11 @@ public class DialogSimpleMessageHelper {
ERROR(4);
private int value;
TYPE(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
@@ -56,15 +55,15 @@ public class DialogSimpleMessageHelper {
}
}
private static Dialog makeBase(TYPE type, Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
private static Dialog makeBase(TYPE type, Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int colorBackgroundTitle = -1;
Drawable titleIconRes = null;
Dialog dialog = new Dialog(mContext);
switch (type){
switch (type) {
case INFO:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.light_blue_300);
titleIconRes = mContext.getResources().getDrawable(R.drawable.ic_info_78dp);
@@ -91,7 +90,11 @@ public class DialogSimpleMessageHelper {
viewModel
.setOnPositive(onPositiveClick)
.setOnNeutral(onNeutralClick)
.setOnNegative(onNegativeClick);
.setOnNegative(onNegativeClick)
.setPositiveButtonText(mContext.getText(R.string.ok).toString())
.setNeutralButtonText(rNeutralButtonString != null && rNeutralButtonString != -1 ? mContext.getText(rNeutralButtonString).toString() : null)
.setNegativeButtonText(mContext.getText(R.string.no).toString());
DialogBaseBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.dialog_base, null, false);
@@ -99,12 +102,10 @@ public class DialogSimpleMessageHelper {
mBinding.setViewmodel(viewModel);
Rect displayRectangle = new Rect();
Window window = ((Activity) mContext).getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);
mBinding.titleContainer.setMinimumWidth((int)(displayRectangle.width() * 0.8f));
mBinding.titleContainer.setMinimumWidth((int) (displayRectangle.width() * 0.8f));
//Title VIEW
@@ -120,7 +121,7 @@ public class DialogSimpleMessageHelper {
LinearLayout hashMapContainer = mBinding.dialogContentHashmap;
if(hashmapContent != null) {
if (hashmapContent != null) {
for (int i = 0; i < hashmapContent.keySet().size(); i++) {
String currentKey = hashmapContent.keySet().toArray()[i].toString();
String currentValue = hashmapContent.get(currentKey);
@@ -142,7 +143,7 @@ public class DialogSimpleMessageHelper {
}
public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick){
public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.INFO,
mContext,
titleText,
@@ -153,7 +154,7 @@ public class DialogSimpleMessageHelper {
}
public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick){
public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return makeBase(TYPE.INFO,
mContext,
titleText,
@@ -164,7 +165,7 @@ public class DialogSimpleMessageHelper {
}
public static Dialog makeSuccessDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick){
public static Dialog makeSuccessDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.SUCCESS,
mContext,
titleText,
@@ -175,18 +176,20 @@ public class DialogSimpleMessageHelper {
}
public static Dialog makeWarningDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick){
public static Dialog makeWarningDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return makeBase(TYPE.WARNING,
mContext,
mContext.getText(R.string.warning).toString(),
messageText,
hashmapContent,
onPositiveClick,
() -> { if(onNegativeClick != null) onNegativeClick.run(); }, -1, null);
() -> {
if (onNegativeClick != null) onNegativeClick.run();
}, -1, null);
}
public static Dialog makeWarningDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick){
public static Dialog makeWarningDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.WARNING,
mContext,
mContext.getText(R.string.warning).toString(),
@@ -196,7 +199,7 @@ public class DialogSimpleMessageHelper {
null, -1, null);
}
public static void showSimpleWarningDialog(Context context, String message){
public static void showSimpleWarningDialog(Context context, String message) {
makeErrorDialog(
context,
new SpannableString(message),
@@ -204,7 +207,7 @@ public class DialogSimpleMessageHelper {
null).show();
}
public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick){
public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.ERROR,
mContext,
@@ -215,7 +218,7 @@ public class DialogSimpleMessageHelper {
null, -1, null);
}
public static void showSimpleErrorDialog(Context context, String message){
public static void showSimpleErrorDialog(Context context, String message) {
makeErrorDialog(
context,
new SpannableString(message),
@@ -223,7 +226,7 @@ public class DialogSimpleMessageHelper {
null).show();
}
public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick){
public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) {
return makeBase(TYPE.ERROR,
mContext,
@@ -236,5 +239,4 @@ public class DialogSimpleMessageHelper {
}
}

View File

@@ -11,6 +11,9 @@ public class DialogSimpleMessageViewModel {
private Runnable onNeutral;
private Runnable onNegative;
private String positiveButtonText;
private String neutralButtonText;
private String negativeButtonText;
public DialogSimpleMessageViewModel(Dialog dialog) {
mDialog = dialog;
@@ -46,6 +49,33 @@ public class DialogSimpleMessageViewModel {
}
public String getPositiveButtonText() {
return positiveButtonText;
}
public DialogSimpleMessageViewModel setPositiveButtonText(String positiveButtonText) {
this.positiveButtonText = positiveButtonText;
return this;
}
public String getNeutralButtonText() {
return neutralButtonText;
}
public DialogSimpleMessageViewModel setNeutralButtonText(String neutralButtonText) {
this.neutralButtonText = neutralButtonText;
return this;
}
public String getNegativeButtonText() {
return negativeButtonText;
}
public DialogSimpleMessageViewModel setNegativeButtonText(String negativeButtonText) {
this.negativeButtonText = negativeButtonText;
return this;
}
public void onPositiveClick() {
mDialog.dismiss();
if(onPositive != null) onPositive.run();

View File

@@ -138,7 +138,7 @@ public class DialogChooseArtsFromListaArts {
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext);

View File

@@ -409,7 +409,7 @@ public class DialogInputQuantity {
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();
if(UtilityBarcode.isEanPeso(data)){

View File

@@ -1,5 +1,6 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.ColorStateList;
@@ -27,16 +28,26 @@ import org.jetbrains.annotations.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.MainApplication;
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.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.MtbUntMis;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityObservable;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.databinding.DialogInputQuantityV2Binding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
public class DialogInputQuantityV2 extends DialogFragment implements DialogInputQuantityV2ViewModel.Listener {
private DialogInputQuantityV2ViewModel mViewModel;
@Inject
DialogInputQuantityV2ViewModel mViewModel;
private DialogInputQuantityV2DTO mDialogInputQuantityV2DTO;
private RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> mOnComplete;
private Runnable mOnAbort;
@@ -60,6 +71,9 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
private DialogInputQuantityV2Binding mBindings;
private boolean mEnableDataCallback = true;
private int mBarcodeScannerIstanceID;
private Dialog mCurrentProgress;
public static DialogInputQuantityV2 newInstance(@NotNull DialogInputQuantityV2DTO dialogInputQuantityV2DTO, @NotNull RunnableArgss<DialogInputQuantityV2ResultDTO, Boolean> onComplete, @NotNull Runnable onAbort) {
return new DialogInputQuantityV2(dialogInputQuantityV2DTO, onComplete, onAbort);
}
@@ -74,6 +88,8 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
this.initBarcode();
}
@Nullable
@@ -85,7 +101,12 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
mBindings.toolbar.setTitle("Inserimento articolo");
this.mViewModel = new DialogInputQuantityV2ViewModel()
MainApplication.appComponent
.dialogInputQuantityV2Component()
.create()
.inject(this);
this.mViewModel
.setMtbAart(mDialogInputQuantityV2DTO.getMtbAart())
.setInitialNumCnf(mDialogInputQuantityV2DTO.getInitialNumCnf())
.setInitialQtaCnf(mDialogInputQuantityV2DTO.getInitialQtaCnf())
@@ -114,6 +135,35 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
return mBindings.getRoot();
}
private void initBarcode() {
mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(this.context, ex, false)));
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
this.closeProgress();
});
};
private void openProgress() {
if (this.mCurrentProgress == null) {
this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(this.context);
}
}
private void closeProgress() {
if (mCurrentProgress != null) {
mCurrentProgress.dismiss();
mCurrentProgress = null;
}
}
public void save() {
if (this.mViewModel.validate()) {
@@ -131,6 +181,7 @@ public class DialogInputQuantityV2 extends DialogFragment implements DialogInput
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
this.mOnAbort.run();
super.onDismiss(dialog);
}

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import dagger.Subcomponent;
@Subcomponent
public interface DialogInputQuantityV2Component {
@Subcomponent.Factory
interface Factory {
DialogInputQuantityV2Component create();
}
void inject(DialogInputQuantityV2 dialogInputQuantityV2);
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity_v2;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
@Module(subcomponents = DialogInputQuantityV2Component.class)
public class DialogInputQuantityV2Module {
@Provides
DialogInputQuantityV2ViewModel providesDialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer) {
return new DialogInputQuantityV2ViewModel(barcodeRESTConsumer);
}
}

View File

@@ -5,8 +5,15 @@ import androidx.databinding.ObservableField;
import java.math.BigDecimal;
import java.util.Date;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidBatchLotException;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.exception.InvalidExpireDateException;
@@ -55,6 +62,13 @@ public class DialogInputQuantityV2ViewModel {
private Listener mListener;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
@Inject
public DialogInputQuantityV2ViewModel(BarcodeRESTConsumer barcodeRESTConsumer) {
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
}
public void init() {
if(this.initialNumCnf != null && this.initialQtaTot != null && this.initialQtaCnf != null) {
this.internalNumCnf = this.initialNumCnf;
@@ -87,6 +101,61 @@ public class DialogInputQuantityV2ViewModel {
this.mListener.onDataChanged();
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if(UtilityBarcode.isEanPeso(barcodeScanDTO)) {
Ean13PesoModel ean13PesoModel;
try {
ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue());
} catch (Exception ex) {
this.mListener.onError(ex);
onComplete.run();
return;
}
if(this.mtbAart.get() != null && this.mtbAart.get().getBarCode() != null && ean13PesoModel.getPrecode().contains(this.mtbAart.get().getBarCode())) {
this.setQtaTot(BigDecimal.valueOf(ean13PesoModel.getPeso()));
}
onComplete.run();
} else if(UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
if(ean128Model == null) {
onComplete.run();
return;
}
if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) {
this.setPartitaMag(ean128Model.BatchLot);
}
try {
if(!UtilityString.isNullOrEmpty(ean128Model.BestBefore)){
this.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore));
} else if(!UtilityString.isNullOrEmpty(ean128Model.Expiry)) {
this.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry));
}
} catch (Exception ex) {
this.mListener.onError(ex);
}
if(ean128Model.Count != null && ean128Model.Count > 0) {
this.setNumCnf(BigDecimal.valueOf(ean128Model.Count));
} else if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) {
this.setQtaTot(BigDecimal.valueOf(ean128Model.NetWeightKg));
}
this.mListener.onDataChanged();
onComplete.run();
}, ex -> {
this.mListener.onError(ex);
onComplete.run();
});
}
}
public String getPartitaMag() {
return internalPartitaMag;
}

View File

@@ -82,7 +82,7 @@ public class DialogScanArt {
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);

View File

@@ -126,7 +126,7 @@ public class DialogScanOrCreateLU {
}
private RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();
final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);

View File

@@ -4,9 +4,11 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="viewmodel"
name="pickingResiView"
type="it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity" />
</data>
@@ -24,8 +26,7 @@
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/empty_space_padding">
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
@@ -62,65 +63,6 @@
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<net.cachapa.expandablelayout.ExpandableLayout
android:id="@+id/filtered_arts_in_list_expandable_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:el_duration="400"
app:el_expanded="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:paddingLeft="8dp"
android:paddingRight="8dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_toStartOf="@+id/remove_art_filter_list"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="14sp"
android:text="@string/filtered_arts_in_list" />
<TextView
android:id="@+id/description_filter_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
android:ellipsize="end"
android:maxLines="1"
tools:text="COD_ART_HERE"/>
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/remove_art_filter_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.DangerOutline"
android:layout_alignParentEnd="true"
android:text="@string/remove_filter_button"
android:onClick="@{() -> viewmodel.removeListFilter()}"
app:strokeColor="@color/red_600"/>
</RelativeLayout>
</net.cachapa.expandablelayout.ExpandableLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_list"
@@ -137,7 +79,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.3"
android:visibility="@{viewmodel.mDtbDocrList.size() > 0 ? View.GONE : View.VISIBLE}"
app:visibility="@{pickingResiView.noItemsToPick}"
tools:context=".gest.lista_bancali.ListaBancaliActivity">
<androidx.constraintlayout.widget.Guideline
@@ -192,7 +134,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:visibility="@{viewmodel.currentMtbColt == null ? View.VISIBLE : View.GONE}"
app:visibility="@{pickingResiView.noLUPresent}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
@@ -233,36 +175,33 @@
app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF"
app:onClick="@{() -> viewmodel.createNewUL()}"
app:onClick="@{() -> pickingResiView.createNewLU()}"
fab:fab_label="@string/action_create_ul" />
</com.github.clans.fab.FloatingActionMenu>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<RelativeLayout
android:id="@+id/empty_space_padding"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:visibility="@{viewmodel.currentMtbColt != null ? View.VISIBLE : View.GONE}"
android:layout_alignParentBottom="true">
<!-- <RelativeLayout-->
<!-- android:id="@+id/empty_space_padding"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="?attr/actionBarSize"-->
<!-- android:visibility="@{viewmodel.currentMtbColt != null ? View.VISIBLE : View.GONE}"-->
<!-- android:layout_alignParentBottom="true">-->
</RelativeLayout>
<!-- </RelativeLayout>-->
</RelativeLayout>
<View
android:id="@+id/shadow"
android:layout_width="match_parent"
android:layout_height="16dp"
android:background="@drawable/shape_gradient_top_shadow"
android:visibility="@{viewmodel.currentMtbColt != null ? View.VISIBLE : View.GONE}"
app:layout_anchor="@id/bottom_sheet_include" />
<include
android:id="@+id/bottom_sheet_include"
layout="@layout/fragment_articoli_in_collo_bottom_sheet"
android:visibility="@{viewmodel.currentMtbColt != null ? View.VISIBLE : View.GONE}" />
<it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentView
android:id="@+id/bottom_sheet_lu_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:visibility="@{pickingResiView.bottomSheetEnabled}"
app:behavior_hideable="false"
app:behavior_peekHeight="66dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -390,7 +390,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#99000000"
android:visibility="gone" />
android:visibility="gone"
singleClick="@{() -> view.collapseMtbColrActionSheet()}"/>
<it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView
android:id="@+id/bottom_sheet__mtb_colr_edit"

View File

@@ -1,16 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate.COMMONS_DATE_FORMATS" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="it.integry.integrywmsnative.core.settings.SettingsManager" />
<variable
name="mtbColr"
type="it.integry.integrywmsnative.core.model.MtbColr"/>
type="it.integry.integrywmsnative.core.model.MtbColr" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
@@ -18,101 +27,290 @@
android:layout_height="wrap_content"
android:padding="8dp">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/art_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@+id/qta_box"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/qta_box"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
tools:text="COD MART" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:background="@drawable/badge2_round_corner"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:text="@{UtilityNumber.decimalToString(mtbColr.qtaCol) + mtbColr.mtbAart.untMis}"
android:textColor="@android:color/white"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="@{SettingsManager.iDB().isFlagForceAllToColli() || (mtbColr.mtbAart != null &amp;&amp; !mtbColr.mtbAart.flagQtaCnfFissaBoolean) ? View.VISIBLE : View.GONE}"
tools:text="PESO KG" />
</RelativeLayout>
<TextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:paddingStart="0dp"
android:paddingEnd="8dp"
android:text="@{mtbColr.getDescrizione()}"
android:textColor="@android:color/black"
android:textSize="16sp"
tools:text="Descrizione lunga articolo" />
<TextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{`Lotto: ` + mtbColr.getPartitaMag()}"
android:textSize="14sp"
android:visibility="@{UtilityString.isNullOrEmpty(mtbColr.getPartitaMag()) ? View.INVISIBLE : View.VISIBLE}"
tools:text="Lotto: ABCDE" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="COD MART" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(mtbColr.qtaCol) + mtbColr.mtbAart.untMis}"
android:visibility="@{SettingsManager.iDB().isFlagForceAllToColli() || (mtbColr.mtbAart != null &amp;&amp; !mtbColr.mtbAart.flagQtaCnfFissaBoolean) ? View.VISIBLE : View.GONE}"
android:textSize="14sp"
android:textStyle="bold"
android:layout_alignParentEnd="true"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:background="@drawable/badge2_round_corner"
android:textColor="@android:color/white"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="PESO KG" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@{mtbColr.getDescrizione()}"
android:textColor="@android:color/black"
android:textSize="16sp"
android:paddingStart="0dp"
android:paddingEnd="8dp"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="Descrizione lunga articolo" />
<TextView
android:id="@+id/qta_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{`Lotto: ` + mtbColr.getPartitaMag()}"
android:textSize="14sp"
android:visibility="@{UtilityString.isNullOrEmpty(mtbColr.getPartitaMag()) ? View.INVISIBLE : View.VISIBLE}"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="Lotto: ABCDE" />
android:paddingStart="12dp"
android:paddingEnd="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
</LinearLayout>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/qta_textview"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/badge1_round_corner"
android:gravity="center"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:textAllCaps="true"
android:textColor="@android:color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="280.45\nCONF" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<RelativeLayout
android:id="@+id/qta_box"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:layout_marginEnd="10dp"
android:visibility="@{mtbColr.numColloRif != null ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/art_detail">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/qta_textview"
android:layout_width="wrap_content"
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@drawable/badge1_round_corner"
android:gravity="center"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:textSize="16sp"
android:textColor="@android:color/white"
android:textStyle="bold"
android:textAllCaps="true"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="280.45\nCONF" />
android:backgroundTint="@color/green_600"
android:orientation="horizontal"
android:padding="2dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/badge1_round_corner"
android:backgroundTint="@android:color/white"
android:orientation="horizontal"
android:padding="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="2dp"
android:paddingEnd="4dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_horizontal"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:src="@drawable/ic_box"
android:tint="@color/green_600" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/refs_title"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Prelevato da"
android:textColor="@color/green_600"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="2dp"
android:layout_height="match_parent"
android:background="@color/green_600" />
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp"
android:weightSum="2">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Num: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.numColloRif.toString()}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="5230" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Gest: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.gestioneRif}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="V" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityDate.formatDate(mtbColr.dataColloRifD, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="02 mar 2020" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Serie: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.serColloRif}"
android:textColor="@android:color/black"
android:textStyle="bold"
tools:text="UL" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>

View File

@@ -123,7 +123,7 @@
app:layout_constraintEnd_toStartOf="@id/center_guideline"
app:strokeColor="@color/colorPrimary"
android:onClick="@{() -> viewmodel.onNegativeClick()}"
android:text="@string/no"/>
android:text="@{viewmodel.negativeButtonText}"/>
<com.google.android.material.button.MaterialButton
@@ -136,7 +136,7 @@
app:layout_constraintStart_toStartOf="@id/center_guideline"
app:layout_constraintEnd_toEndOf="parent"
android:onClick="@{() -> viewmodel.onPositiveClick()}"
android:text="@string/yes"/>
android:text="@{viewmodel.positiveButtonText}"/>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -173,7 +173,7 @@
app:layout_constraintStart_toStartOf="@id/ok_left_buttons_guideline"
app:layout_constraintEnd_toEndOf="@id/ok_right_buttons_guideline"
android:onClick="@{() -> viewmodel.onPositiveClick()}"
android:text="@string/ok"/>
android:text="@{viewmodel.positiveButtonText}"/>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -184,7 +184,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="@{viewmodel.neutralVisible ? View.VISIBLE : View.GONE}">
android:visibility="@{viewmodel.negativeVisible &amp;&amp; viewmodel.neutralVisible ? View.VISIBLE : View.GONE}">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/left_buttons_guideline"
@@ -211,7 +211,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/left_buttons_guideline"
android:onClick="@{() -> viewmodel.onNegativeClick()}"
android:text="@string/no"/>
android:text="@{viewmodel.negativeButtonText}"/>
<com.google.android.material.button.MaterialButton
@@ -225,7 +225,7 @@
app:layout_constraintEnd_toStartOf="@id/right_buttons_guideline"
app:strokeColor="@color/colorPrimary"
android:onClick="@{() -> viewmodel.onNeutralClick()}"
android:text="@string/abort"/>
android:text="@{viewmodel.neutralButtonText}"/>
<com.google.android.material.button.MaterialButton
@@ -238,7 +238,50 @@
app:layout_constraintStart_toStartOf="@id/right_buttons_guideline"
app:layout_constraintEnd_toEndOf="parent"
android:onClick="@{() -> viewmodel.onPositiveClick()}"
android:text="@string/yes"/>
android:text="@{viewmodel.positiveButtonText}"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="@{!viewmodel.negativeVisible &amp;&amp; viewmodel.neutralVisible ? View.VISIBLE : View.GONE}">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/center_guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5"/>
<com.google.android.material.button.MaterialButton
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Button.PrimaryOutline"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/center_guideline2"
app:strokeColor="@color/colorPrimary"
android:onClick="@{() -> viewmodel.onNeutralClick()}"
android:text="@{viewmodel.neutralButtonText}"/>
<com.google.android.material.button.MaterialButton
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Button.PrimaryFull"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/center_guideline2"
app:layout_constraintEnd_toEndOf="parent"
android:onClick="@{() -> viewmodel.onPositiveClick()}"
android:text="@{viewmodel.positiveButtonText}"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -1,540 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="viewModel"
type="it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel"
/>
<import type="android.view.View" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/bottom_sheet1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
app:behavior_peekHeight="?attr/actionBarSize"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
app:behavior_hideable="false">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/tap_action_layout"
android:padding="4dp"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:background="@android:color/white">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/articoli_in_collo_sheet_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_box"
tools:text="2 REFERENCES"
android:textStyle="bold"
android:drawablePadding="12dp"
android:textColor="@color/colorPrimary"
android:paddingTop="12dp"
android:paddingBottom="8dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:elevation="0dp"
android:textAllCaps="true"
android:textSize="16sp"
style="@style/AppTheme.NewMaterial.Text"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/articoli_in_collo_close_collo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Button.DangerOutline"
android:layout_alignParentEnd="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:text="@string/action_close_ul"
android:onClick="@{() -> viewModel.closeCurrentUL()}"
app:strokeColor="@color/red_600"/>
</RelativeLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.cardview.widget.CardView
app:cardBackgroundColor="@android:color/white"
app:cardCornerRadius="4dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:textColor="@android:color/black"
android:layout_marginTop="10dp"
android:layout_marginStart="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/details_text"
style="@style/AppTheme.NewMaterial.Text"
android:textAllCaps="true"
android:textStyle="bold"/>
<LinearLayout
android:padding="15dp"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/date_text"
android:textColor="@android:color/black"
app:layout_constraintTop_toTopOf="parent"
style="@style/AppTheme.NewMaterial.Text.Small"
app:layout_constraintEnd_toStartOf="@+id/guideline1"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/articoli_in_collo_details_date"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
style="@style/AppTheme.NewMaterial.Text.Small"
app:layout_constraintStart_toStartOf="@+id/guideline1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/articoli_in_collo_details_posizione"
app:layout_constraintTop_toTopOf="parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/position_text"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline2"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toTopOf="parent"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.posizione}"
style="@style/AppTheme.NewMaterial"
app:layout_constraintStart_toStartOf="@+id/guideline2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toTopOf="parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/prepared_by_text"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline3"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toTopOf="parent"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.preparatoDa}"
style="@style/AppTheme.NewMaterial.Text.Small"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.40" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toTopOf="parent"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:text="@string/customer"
android:textColor="@android:color/black"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
app:layout_constraintTop_toTopOf="parent"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="@{viewModel.mtbColt.ragSocCliente}"
style="@style/AppTheme.NewMaterial.Text.Small"
app:layout_constraintStart_toStartOf="@+id/guideline4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
tools:text="TextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
app:cardBackgroundColor="@android:color/white"
app:cardCornerRadius="4dp"
android:layout_margin="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:textColor="@android:color/black"
android:layout_marginTop="10dp"
android:layout_marginStart="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/already_read_articles"
style="@style/AppTheme.NewMaterial.Text"
android:textAllCaps="true"
android:textStyle="bold"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="14dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:visibility="@{viewModel.mtbColt == null || viewModel.mtbColt.mtbColr.size() == 0 ? View.VISIBLE : View.GONE}">
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tint="@color/empty_view_gray"
android:src="@drawable/ic_info_78dp"/>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/empty_rows_in_mtbcolt"
android:textSize="20sp"
android:gravity="center"
style="@style/AppTheme.NewMaterial.Text"
android:textColor="@color/empty_view_gray"/>
</LinearLayout>
<com.linearlistview.LinearListView
android:id="@+id/linear_listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:orientation="vertical"
app:dividerThickness="0.5dp" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:background="?attr/colorPrimary"
android:alpha="0">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar_bottom_sheet"
android:layout_height="?attr/actionBarSize"
android:minHeight="?attr/actionBarSize"
android:layout_width="match_parent"
android:background="?attr/colorPrimary"
app:titleTextColor="@android:color/white"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/articoli_in_collo_title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginEnd="8dp"
android:gravity="center"
android:textAppearance="@android:style/TextAppearance.Material.Title"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
style="@style/AppTheme.NewMaterial.Text.ToolbarTitle.DarkActionBar"
tools:text="Num UL"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
</RelativeLayout>
</RelativeLayout>
<View
android:visibility="gone"
android:id="@+id/bg"
android:background="#99000000"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<LinearLayout
android:id="@+id/bottom_sheet_actions"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#fff"
android:orientation="vertical"
android:padding="16dp"
app:behavior_hideable="true"
app:behavior_peekHeight="160dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginBottom="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@id/bottom_sheet_actions_quantity"
app:layout_constraintStart_toStartOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/bottom_sheet_actions_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Descrizione articolo"
android:textColor="#444"
android:maxLines="2"
android:ellipsize="end"
android:paddingStart="0dp"
android:paddingEnd="8dp"
android:textStyle="bold"
style="@style/AppTheme.NewMaterial.Text.Medium"/>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/bottom_sheet_actions_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="ABF52IL"
style="@style/AppTheme.NewMaterial.Text.Small" />
</LinearLayout>
<TextView
android:id="@+id/bottom_sheet_actions_quantity"
android:layout_width="wrap_content"
android:gravity="end"
android:layout_height="wrap_content"
android:textStyle="bold"
tools:text="250 PZ"
style="@style/AppTheme.NewMaterial.Text.Small"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.50" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@id/guideline_action"
app:layout_constraintStart_toStartOf="parent"
android:gravity="center">
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/bottom_sheet_actions_edit_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:background="@android:color/white"
android:scaleX="1.5"
android:scaleY="1.5"
android:src="@drawable/ic_edit_24dp"
android:tint="@color/green_600" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/AppTheme.NewMaterial.Text.Small"
android:text="@string/edit"/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/guideline_action"
android:gravity="center">
<androidx.appcompat.widget.AppCompatImageButton
android:id="@+id/bottom_sheet_actions_delete_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:background="@android:color/white"
android:scaleX="1.5"
android:scaleY="1.5"
android:src="@drawable/ic_delete_24dp"
android:tint="@color/red_600" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/AppTheme.NewMaterial.Text.Small"
android:text="@string/delete"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View File

@@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="android.view.View" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="it.integry.integrywmsnative.core.settings.SettingsManager" />
<variable
name="mtbColr"
type="it.integry.integrywmsnative.core.model.MtbColr"/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@+id/qta_box"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="COD MART" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(mtbColr.qtaCol) + mtbColr.mtbAart.untMis}"
android:visibility="@{SettingsManager.iDB().isFlagForceAllToColli() || (mtbColr.mtbAart != null &amp;&amp; !mtbColr.mtbAart.flagQtaCnfFissaBoolean) ? View.VISIBLE : View.GONE}"
android:textSize="14sp"
android:textStyle="bold"
android:layout_alignParentEnd="true"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:background="@drawable/badge2_round_corner"
android:textColor="@android:color/white"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="PESO KG" />
</RelativeLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@{mtbColr.getDescrizione()}"
android:textColor="@android:color/black"
android:textSize="16sp"
android:paddingStart="0dp"
android:paddingEnd="8dp"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="Descrizione lunga articolo" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{`Lotto: ` + mtbColr.getPartitaMag()}"
android:textSize="14sp"
android:visibility="@{UtilityString.isNullOrEmpty(mtbColr.getPartitaMag()) ? View.INVISIBLE : View.VISIBLE}"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="Lotto: ABCDE" />
</LinearLayout>
<RelativeLayout
android:id="@+id/qta_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingStart="12dp"
android:paddingEnd="12dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/qta_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/badge1_round_corner"
android:gravity="center"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:textSize="16sp"
android:textColor="@android:color/white"
android:textStyle="bold"
android:textAllCaps="true"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="280.45\nCONF" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>

View File

@@ -317,7 +317,7 @@
android:layout_alignParentBottom="true"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:onClick="@{() -> viewmodel.closeLU(false)}"
android:onClick="@{() -> viewmodel.closeLU(true)}"
android:tint="@android:color/white"
app:visibility="@{view.thereIsAnOpenedUL}"
app:srcCompat="@drawable/ic_check_black_24dp" />

View File

@@ -1,131 +1,329 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto">
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate.COMMONS_DATE_FORMATS" />
<import type="it.integry.integrywmsnative.core.utility.UtilityDate" />
<import type="it.integry.integrywmsnative.core.utility.UtilityString" />
<import type="it.integry.integrywmsnative.core.utility.UtilityNumber" />
<import type="it.integry.integrywmsnative.core.settings.SettingsManager" />
<variable
name="mtbColr"
type="it.integry.integrywmsnative.core.model.MtbColr" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/art_detail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintEnd_toStartOf="@+id/qta_box"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintEnd_toStartOf="@+id/qta_box"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_mart"
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
tools:text="COD MART" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/diacod"
style="@style/AppTheme.NewMaterial.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_toEndOf="@id/cod_mart"
android:text="@{`(` + mtbColr.mtbAart.diacod + `)`}"
android:textColor="@color/red_600"
android:textSize="13sp"
android:textStyle="bold"
android:visibility="@{(mtbColr.mtbAart != null &amp;&amp; !UtilityString.isNullOrEmpty(mtbColr.mtbAart.diacod)) ? View.VISIBLE : View.GONE}"
tools:text="(12345)" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:background="@drawable/badge2_round_corner"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:text="@{UtilityNumber.decimalToString(mtbColr.qtaCol) + mtbColr.mtbAart.untMis}"
android:textColor="@android:color/white"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="@{SettingsManager.iDB().isFlagForceAllToColli() || (mtbColr.mtbAart != null &amp;&amp; !mtbColr.mtbAart.flagQtaCnfFissaBoolean) ? View.VISIBLE : View.GONE}"
tools:text="PESO KG" />
</RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@{mtbColr.getDescrizione()}"
android:textColor="@android:color/black"
android:textSize="16sp"
tools:text="Descrizione lunga articolo" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{`Lotto: ` + mtbColr.getPartitaMag()}"
android:visibility="@{UtilityString.isNullOrEmpty(mtbColr.getPartitaMag()) ? View.INVISIBLE : View.VISIBLE}"
tools:text="Lotto: ABCDE" />
</LinearLayout>
<RelativeLayout
android:id="@+id/qta_box"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
android:paddingStart="12dp"
android:paddingEnd="12dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/cod_mart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.codMart}"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
android:textStyle="bold"
android:id="@+id/qta_textview"
style="@style/AppTheme.NewMaterial.Text"
tools:text="COD MART" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/diacod"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{`(` + mtbColr.mtbAart.diacod + `)`}"
android:textColor="@color/red_600"
android:textSize="13sp"
android:textStyle="bold"
android:layout_marginStart="8dp"
android:layout_toEndOf="@id/cod_mart"
android:visibility="@{(mtbColr.mtbAart != null &amp;&amp; !UtilityString.isNullOrEmpty(mtbColr.mtbAart.diacod)) ? View.VISIBLE : View.GONE}"
style="@style/AppTheme.NewMaterial.Text"
tools:text="(12345)" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityNumber.decimalToString(mtbColr.qtaCol) + mtbColr.mtbAart.untMis}"
android:visibility="@{SettingsManager.iDB().isFlagForceAllToColli() || (mtbColr.mtbAart != null &amp;&amp; !mtbColr.mtbAart.flagQtaCnfFissaBoolean) ? View.VISIBLE : View.GONE}"
android:textSize="14sp"
android:textStyle="bold"
android:layout_alignParentEnd="true"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:background="@drawable/badge2_round_corner"
android:background="@drawable/badge1_round_corner"
android:gravity="center"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:textAllCaps="true"
android:textColor="@android:color/white"
style="@style/AppTheme.NewMaterial.Text.Small"
tools:text="PESO KG" />
android:textSize="16sp"
android:textStyle="bold"
tools:text="280.45\nCONF" />
</RelativeLayout>
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:text="@{mtbColr.getDescrizione()}"
android:textColor="@android:color/black"
android:textSize="16sp"
tools:text="Descrizione lunga articolo"
style="@style/AppTheme.NewMaterial.Text.Small" />
<androidx.appcompat.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{`Lotto: ` + mtbColr.getPartitaMag()}"
android:visibility="@{UtilityString.isNullOrEmpty(mtbColr.getPartitaMag()) ? View.INVISIBLE : View.VISIBLE}"
tools:text="Lotto: ABCDE"
style="@style/AppTheme.NewMaterial.Text.Small" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<RelativeLayout
android:id="@+id/qta_box"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:layout_marginEnd="10dp"
android:visibility="@{mtbColr.numColloRif != null ? View.VISIBLE : View.GONE}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/art_detail">
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/qta_textview"
android:layout_width="wrap_content"
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@drawable/badge1_round_corner"
android:gravity="center"
android:paddingLeft="6dp"
android:paddingTop="2dp"
android:paddingRight="6dp"
android:paddingBottom="2dp"
android:textSize="16sp"
android:textColor="@android:color/white"
android:textStyle="bold"
android:textAllCaps="true"
style="@style/AppTheme.NewMaterial.Text"
tools:text="280.45\nCONF" />
android:backgroundTint="@color/green_600"
android:orientation="horizontal"
android:padding="2dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/badge1_round_corner"
android:backgroundTint="@android:color/white"
android:orientation="horizontal"
android:padding="0dp">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="2dp"
android:paddingEnd="4dp">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/image"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_horizontal"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:src="@drawable/ic_box"
android:tint="@color/green_600" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/refs_title"
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Prelevato da"
android:textColor="@color/green_600"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="2dp"
android:layout_height="match_parent"
android:background="@color/green_600"/>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:padding="10dp"
android:weightSum="2">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Num: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.numColloRif.toString()}"
tools:text="5230"
android:textColor="@android:color/black"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="2dp">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Gest: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.gestioneRif}"
tools:text="V"
android:textColor="@android:color/black"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="vertical">
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{UtilityDate.formatDate(mtbColr.dataColloRifD, &quot;dd MMM yy&quot;)}"
tools:text="02 mar 2020"
android:textColor="@android:color/black"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="2dp">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Serie: "
android:textColor="@android:color/black" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{mtbColr.serColloRif}"
tools:text="UL"
android:textColor="@android:color/black"
android:textStyle="bold" />
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat>
</RelativeLayout>

View File

@@ -9,6 +9,7 @@
android:focusable="true">
<LinearLayout
android:id="@+id/content_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
@@ -37,7 +38,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="right">
android:gravity="end">
<TextView
android:id="@+id/qta_evasa"
@@ -96,5 +97,14 @@
</LinearLayout>
<View
android:id="@+id/deactivated_over_bg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/content_view"
android:layout_alignBottom="@id/content_view"
android:background="@android:color/black"
android:alpha="0.15" />
</RelativeLayout>
</layout>

View File

@@ -10,7 +10,7 @@
android:background="@color/mainGreen">
<TextView
android:id="@+id/descrizione"
android:id="@+id/group_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:text="DESCRIZIONE"

View File

@@ -10,10 +10,10 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.android.tools.build:gradle:4.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.4'
classpath 'com.google.firebase:perf-plugin:1.3.2'
classpath 'com.google.firebase:perf-plugin:1.3.3'
// Add the Firebase Crashlytics Gradle plugin.
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.3.0'

View File

@@ -35,6 +35,8 @@ public class ZebraBarcodeReader implements BarcodeReaderInterface {
return true;
} else if(model.equalsIgnoreCase("TC200J")) {
return true;
} else if(model.equalsIgnoreCase("TC20")) {
return true;
} else return false;
}