Compare commits

...

25 Commits

Author SHA1 Message Date
e55b6f4934 Finish v1.16.17(199) 2021-03-16 17:55:28 +01:00
19b0465569 -> v1.16.17 (199) 2021-03-16 17:55:22 +01:00
d4f44c1ab7 Fix vari 2021-03-16 17:53:39 +01:00
6bf183d73c Finish v1.16.16(198) 2021-03-15 16:02:56 +01:00
a939f0ba08 Finish v1.16.16(198) 2021-03-15 16:02:56 +01:00
08b44cb45b -> v1.16.116 (198) 2021-03-15 16:02:51 +01:00
fef57622cf Implementato blocco per scansione EAN128 nel caso non sia abilitato il Picking Manuale 2021-03-15 15:54:52 +01:00
cbf36ec962 Fix su qta negative in accettazione 2021-03-15 13:09:40 +01:00
adc7343352 Implementato flag per impostare automaticamente la qta ordinata in fase di picking per Spedizione.
Migliorata gestione dell'update dei campi nel caso si scansiona un ean con peso in fase di inserimento qta.
2021-03-12 17:05:20 +01:00
94b2959d29 Implementata lettura barcode pedane in gestione resi 2021-03-12 13:33:54 +01:00
11903d1a34 Refactoring ultimi arrivi fornitori 2021-03-11 15:45:42 +01:00
ff448b36b9 Refactoring ultime consegne cliente 2021-03-11 13:11:06 +01:00
aa8a54547c Implementato versamento in depositi diversi da quello dell'utente loggato 2021-03-10 16:11:50 +01:00
e1d1878131 Migliorato SimpleDialog 2021-03-10 12:33:58 +01:00
81bc85f854 Finish v1.16.15(197) 2021-03-08 16:46:28 +01:00
00c90021b5 Finish v1.16.15(197) 2021-03-08 16:46:28 +01:00
89e046cc78 -> v1.16.15 (197) 2021-03-08 16:46:22 +01:00
2b2cf3656c Sistemata cancellazione colli in fase di picking per fabbisogno linea prod. 2021-03-08 16:45:39 +01:00
47a2c36e04 Finish v1.16.14(196) 2021-03-05 15:36:29 +01:00
bca0d0cc52 Finish v1.16.14(196) 2021-03-05 15:36:28 +01:00
594a6fc9d2 -> v1.16.14 (196) 2021-03-05 15:36:23 +01:00
e633dcbc4d Fix su where cond flag_evaso_prod 2021-03-05 15:35:42 +01:00
99de98db28 Risolto problema di confezioni 0 quando scansiono un codice ean peso e il peso è sotto il peso medio. 2021-03-05 12:12:44 +01:00
cce8ea5ca0 Sistemato actionDone su soft keyboard 2021-03-05 12:01:38 +01:00
cc54dfb452 Finish v1.16.13(195) 2021-03-04 18:28:54 +01:00
71 changed files with 2330 additions and 1292 deletions

View File

@@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services'
android {
def appVersionCode = 195
def appVersionName = '1.16.13'
def appVersionCode = 199
def appVersionName = '1.16.17'
signingConfigs {
release {

View File

@@ -30,6 +30,7 @@ import it.integry.integrywmsnative.core.class_router.ClassRouter;
import it.integry.integrywmsnative.core.class_router.configs.BaseMenuConfiguration;
import it.integry.integrywmsnative.core.class_router.configs.MenuConfiguration;
import it.integry.integrywmsnative.core.class_router.interfaces.ICustomConfiguration;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.data_store.db.AppDatabase;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.OnSingleClickListener;
@@ -42,6 +43,7 @@ import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
import it.integry.integrywmsnative.core.rest.watcher.ServerStatusChecker;
import it.integry.integrywmsnative.core.update.UpdatesManager;
import it.integry.integrywmsnative.core.utility.UtilityContext;
import it.integry.integrywmsnative.core.utility.UtilitySettings;
import it.integry.integrywmsnative.databinding.ActivityMainBinding;
import it.integry.integrywmsnative.gest.login.LoginActivity;
@@ -59,6 +61,9 @@ public class MainActivity extends BaseActivity
@Inject
AppDatabase mAppDatabase;
@Inject
ColliDataRecoverService mColliDataRecoverService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -68,10 +73,13 @@ public class MainActivity extends BaseActivity
.create()
.inject(this);
mColliDataRecoverService.init(this);
mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false);
setContentView(mBinding.getRoot());
UpdatesManager.init(this);
UtilityContext.initMainActivity(this);
setSupportActionBar(mBinding.appBarMain.toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);

View File

@@ -27,6 +27,10 @@ import it.integry.integrywmsnative.gest.spedizione.SpedizioneComponent;
import it.integry.integrywmsnative.gest.spedizione.SpedizioneModule;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdComponent;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.prod_fabbisogno_linee_prod.DialogRowInfoProdFabbisognoLineeProdModule;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteComponent;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteModule;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreComponent;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreModule;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Component;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2Module;
import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtComponent;
@@ -44,6 +48,8 @@ import it.integry.integrywmsnative.view.dialogs.scan_art.DialogScanArtModule;
RettificaGiacenzeModule.class,
SpedizioneModule.class,
AccettazionePickingModule.class,
UltimeConsegneClienteModule.class,
UltimiArriviFornitoreModule.class,
PickingResiModule.class,
OrdiniUscitaElencoModule.class,
DialogInputQuantityV2Module.class,
@@ -60,6 +66,8 @@ public interface MainApplicationComponent {
RettificaGiacenzeComponent.Factory rettificaGiacenzeComponent();
SpedizioneComponent.Factory spedizioneComponent();
AccettazionePickingComponent.Factory accettazionePickingComponent();
UltimeConsegneClienteComponent.Factory ultimeConsegneClienteComponent();
UltimiArriviFornitoreComponent.Factory ultimiArriviFornitoreComponent();
PickingResiComponent.Factory pickingResiComponent();
OrdiniUscitaElencoComponent.Factory prodOrdineLavorazioneElencoComponent();
DialogInputQuantityV2Component.Factory dialogInputQuantityV2Component();

View File

@@ -38,7 +38,7 @@ public class MainApplicationModule {
@Provides
@Singleton
ColliDataRecoverService provideColliDataRecoverService() {
return new ColliDataRecoverService(mContext);
return new ColliDataRecoverService();
}
@Provides

View File

@@ -6,22 +6,21 @@ import android.content.pm.PackageManager;
import android.os.Bundle;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.widget.TextView;
import androidx.databinding.DataBindingUtil;
import java.util.ArrayList;
import java.util.List;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import it.integry.integrywmsnative.core.context.MainContext;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgsss;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.PermissionsHelper;
import it.integry.integrywmsnative.core.utility.UtilityContext;
import it.integry.integrywmsnative.databinding.ActivitySplashBinding;
import it.integry.integrywmsnative.gest.login.LoginActivity;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class SplashActivity extends BaseActivity {
@@ -39,6 +38,8 @@ public class SplashActivity extends BaseActivity {
mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_splash, null, false);
setContentView(mBinding.getRoot());
UtilityContext.initMainActivity(this);
initAppVersion();
initPermissions(this::init);
@@ -49,10 +50,10 @@ public class SplashActivity extends BaseActivity {
onComplete.run();
}, permanentlyDenied -> {
if(permanentlyDenied) {
DialogSimpleMessageHelper.makeErrorDialog(this,
new SpannableString(getText(R.string.permissions_permanently_denied)), null, () -> {
DialogSimpleMessageView.makeErrorDialog(new SpannableString(getText(R.string.permissions_permanently_denied)), null, () -> {
this.finish();
}).show();
})
.show(getSupportFragmentManager(), "tag");
} else {
initPermissions(onComplete);
}

View File

@@ -9,7 +9,6 @@ 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;
@@ -41,8 +40,6 @@ public class AppContext {
this.initCrashlytics();
this.initLogger();
this.initRecoverColli();
}
@@ -77,9 +74,5 @@ public class AppContext {
Logger.addLogAdapter(new AndroidLogAdapter());
}
private void initRecoverColli() {
ColliDataRecover.init(mContext);
}
}

View File

@@ -1,21 +1,25 @@
package it.integry.integrywmsnative.core.context;
import android.content.Context;
import android.text.Html;
import android.text.SpannableString;
import android.text.Spanned;
import androidx.appcompat.app.AppCompatActivity;
import java.lang.reflect.Method;
import java.net.ConnectException;
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.data_recover.ColliDataRecover;
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;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class MainContext {
@@ -37,6 +41,8 @@ public class MainContext {
this.initReflections();
this.initServerStatusChecker();
ColliDataRecover.init(mContext);
}
@@ -46,11 +52,23 @@ public class MainContext {
private void initDBData(Runnable onComplete) {
SettingsManager.loadDBVariables(onComplete, ex -> {
DialogSimpleMessageHelper.makeErrorDialog(mContext,
new SpannableString(ex.getMessage()), null, mContext::finish, R.string.logout, () -> {
Spanned message = null;
if (ex.getCause() != null && ex.getCause() instanceof ConnectException) {
message = Html.fromHtml("Impossibile collegarsi all'host <b>" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "</b>. Riprovare più tardi.");
} else if (ex.getMessage().startsWith("Status 404:")) {
message = Html.fromHtml("Errore 404. Non è stato possibile soddisfare la richiesta sull'host <b>" + SettingsManager.i().getServer().getHost() + ":" + SettingsManager.i().getServer().getPort() + "</b>. Riprovare più tardi.");
} else {
message = new SpannableString(ex.getMessage());
}
DialogSimpleMessageView.makeErrorDialog(
message, null, mContext::finish, R.string.logout, () -> {
UtilitySettings.logout();
MainApplication.exit();
}).show();
})
.show(mContext.getSupportFragmentManager(), "tag");
}
);
}

View File

@@ -2,6 +2,8 @@ package it.integry.integrywmsnative.core.data_recover;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.google.android.gms.common.util.IOUtils;
@@ -107,11 +109,11 @@ public class ColliDataRecover {
}
}
private static Context mContext;
private static AppCompatActivity mContext;
private static List<RecoverDTO> mtbColtsSessions = new ArrayList<>();
public static void init(Context context) {
public static void init(AppCompatActivity context) {
mContext = context;
if(isFilePresent(CommonConst.Files.RECOVER_COLLO_FILE)) {

View File

@@ -2,6 +2,8 @@ package it.integry.integrywmsnative.core.data_recover;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import com.google.android.gms.common.util.IOUtils;
@@ -28,20 +30,21 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions;
public class ColliDataRecoverService {
private final Context mContext;
private AppCompatActivity mContext;
private List<ColliDataRecoverDTO> mtbColtsSessions = new ArrayList<>();
@Inject
public ColliDataRecoverService(Context context) {
this.mContext = context;
public ColliDataRecoverService() {
}
public void init(AppCompatActivity appCompatActivity) {
this.mContext = appCompatActivity;
if(isFilePresent(CommonConst.Files.RECOVER_COLLO_FILE)) {
loadLocalFile();
}
}
public boolean thereIsAnExistantSession() {
return mtbColtsSessions.size() > 0;
}

View File

@@ -0,0 +1,56 @@
package it.integry.integrywmsnative.core.expansion.view;
import android.view.View;
import androidx.databinding.ObservableArrayList;
import androidx.databinding.ObservableList;
import androidx.recyclerview.widget.RecyclerView;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback;
public abstract class ExtendedSectionedRecyclerView<T, SH extends RecyclerView.ViewHolder, VH extends RecyclerView.ViewHolder>
extends SectionedRecyclerViewAdapter<SH, VH> {
protected ArrayList<T> mDataset = new ArrayList<>();
private View mEmptyView;
public ExtendedSectionedRecyclerView(ObservableArrayList<T> myDataset) {
mDataset.addAll(myDataset);
myDataset.addOnListChangedCallback(new OnListGeneralChangedCallback() {
@Override
public void onChanged(ObservableList sender) {
mDataset.clear();
mDataset.addAll(sender);
notifyDataSetChanged();
notifyDataChanged();
checkIfEmpty();
}
});
checkIfEmpty();
}
public ExtendedSectionedRecyclerView<T, SH, VH> setEmptyView(View emptyView) {
this.mEmptyView = emptyView;
this.checkIfEmpty();
return this;
}
@Override
public int getItemSize() {
return this.mDataset.size();
}
private void checkIfEmpty() {
if (mEmptyView != null) {
final boolean emptyViewVisible = getItemSize() == 0;
mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE);
}
}
}

View File

@@ -411,7 +411,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
List<MtbColt> mtbColtList = new ArrayList<>();
mtbColtList.add(mtbColt);
fillMtbAartsOfMtbColts(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed);
fillMtbAartsOfMtbColtsStatic(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed);
} else {
onComplete.run(mtbColt);
}
@@ -426,8 +426,11 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
});
}
public void fillMtbAartsOfMtbColts(List<MtbColt> mtbColts, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
fillMtbAartsOfMtbColtsStatic(mtbColts, onComplete, onFailed);
}
public static void fillMtbAartsOfMtbColts(List<MtbColt> mtbColts, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
public static void fillMtbAartsOfMtbColtsStatic(List<MtbColt> mtbColts, RunnableArgs<List<MtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
List<String> codMarts = new ArrayList<>();
for (MtbColt mtbColt : mtbColts) {
@@ -549,7 +552,9 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
mtbColtToSaveClone.setMtbColr(new ObservableArrayList<>());
if (posizione == null) mtbColtToSaveClone.setPosizione(null);
else mtbColtToSaveClone.setPosizione(posizione.getPosizione());
else mtbColtToSaveClone
.setPosizione(posizione.getPosizione())
.setCodMdep(posizione.getCodMdep());
ColliMagazzinoRESTConsumer.saveColloStatic(mtbColtToSaveClone, mtbColt -> {
if (onComplete != null) onComplete.run();
@@ -659,7 +664,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer {
@Override
public void onResponse(Call<ServiceRESTResponse<List<MtbColt>>> call, Response<ServiceRESTResponse<List<MtbColt>>> response) {
analyzeAnswer(response, "getColliInBasket", mtbColts -> {
fillMtbAartsOfMtbColts(mtbColts, onComplete, onFailed);
fillMtbAartsOfMtbColtsStatic(mtbColts, onComplete, onFailed);
}, onFailed);
}

View File

@@ -8,12 +8,11 @@ import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import retrofit2.Call;
import retrofit2.Callback;
@@ -28,8 +27,30 @@ public class PosizioniRESTConsumer extends _BaseRESTConsumer{
this.mSystemRESTConsumer = systemRESTConsumer;
}
public void getPosizioneFromString(String posizione, RunnableArgs<MtbDepoPosizione> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT TOP 1 mtb_depo_posizioni.*," +
" CASE WHEN jtb_fasi.cod_jfas IS NULL THEN 'N' ELSE 'S' END AS flag_linea_produzione " +
" FROM mtb_depo_posizioni " +
" LEFT OUTER JOIN jtb_fasi " +
" ON mtb_depo_posizioni.posizione = jtb_fasi.cod_jfas " +
" WHERE posizione = " + UtilityDB.valueToString(posizione);
SystemRESTConsumer.processSqlStatic(sql, MtbDepoPosizione.class, new ISimpleOperationCallback<MtbDepoPosizione>() {
@Override
public void onSuccess(MtbDepoPosizione value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
});
}
public static void getAvailablePosizioni(RunnableArgs<List<MtbDepoPosizione>> onComplete, RunnableArgs<Exception> onFailed) {
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
// String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
String codMdep = null;
PosizioniRESTConsumerService posizioniRESTConsumerService = RESTBuilder.getService(PosizioniRESTConsumerService.class);
posizioniRESTConsumerService.getAvailablePosizioni(codMdep).enqueue(new Callback<ServiceRESTResponse<List<MtbDepoPosizione>>>() {

View File

@@ -33,6 +33,7 @@ public class DBSettingsModel {
private boolean flagForceAllToColli;
private boolean flagSpedizioneEnableManualPick;
private boolean flagSpedizioneCanSelectMultipleOrders;
private boolean flagSpedizioneUseQtaOrd;
private String produzioneDefaultCodAnag;
private String reportNameSpedizionChiudiOrdine;
@@ -234,6 +235,15 @@ public class DBSettingsModel {
return this;
}
public boolean isFlagSpedizioneUseQtaOrd() {
return flagSpedizioneUseQtaOrd;
}
public DBSettingsModel setFlagSpedizioneUseQtaOrd(boolean flagSpedizioneUseQtaOrd) {
this.flagSpedizioneUseQtaOrd = flagSpedizioneUseQtaOrd;
return this;
}
public String getProduzioneDefaultCodAnag() {
return produzioneDefaultCodAnag;
}

View File

@@ -258,6 +258,10 @@ public class SettingsManager {
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("REPORT_PACKING_LIST"));
stbGestSetupList.add(new StbGestSetup()
.setGestName("PICKING")
.setSection("SPEDIZIONE")
.setKeySection("FLAG_USE_QTA_ORD"));
GestSetupRESTConsumer.getValues(stbGestSetupList, list -> {
@@ -281,6 +285,7 @@ public class SettingsManager {
dbSettingsModelIstance.setFlagSpedizioneEnableFakeGiacenza(getValueFromList(list, "SPEDIZIONE", "ENABLE_FAKE_GIACENZA", Boolean.class));
dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class));
dbSettingsModelIstance.setReportNameSpedizionChiudiOrdine(getValueFromList(list, "SPEDIZIONE", "REPORT_PACKING_LIST", String.class));
dbSettingsModelIstance.setFlagSpedizioneUseQtaOrd(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_QTA_ORD", Boolean.class));
if(onComplete != null) onComplete.run();
}, onFailed);

View File

@@ -33,19 +33,24 @@ public class UtilityBarcode {
}
public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) {
return isEtichettaPosizione(barcodeScanDTO, true);
}
public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, boolean enableCheckCodMdep) {
String currentCodMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
String barcode = barcodeScanDTO.getStringValue();
boolean isPosizione = false;
if(SettingsManager.iDB().getAvailablePosizioni() != null) {
Stream<MtbDepoPosizione> tmpStream = Stream.of(SettingsManager.iDB().getAvailablePosizioni())
.filter(x -> x.getPosizione().equalsIgnoreCase(barcode));
.filter(x -> x.getPosizione().equalsIgnoreCase(barcode) && (!enableCheckCodMdep || currentCodMdep.equalsIgnoreCase(x.getCodMdep())));
if(tmpStream.count() > 0){
isPosizione = true;
}
}
return isPosizione;
}

View File

@@ -2,17 +2,28 @@ package it.integry.integrywmsnative.core.utility;
import android.content.Context;
import androidx.appcompat.app.AppCompatActivity;
public class UtilityContext {
private static Context mApplicationContext;
private static AppCompatActivity mMainActivity;
public static void initApplicationContext(Context context) {
mApplicationContext = context;
}
public static void initMainActivity(AppCompatActivity mainActivity) {
mMainActivity = mainActivity;
}
public static Context getApplicationContext() {
return mApplicationContext;
}
public static AppCompatActivity getMainActivity() {
return mMainActivity;
}
}

View File

@@ -4,12 +4,15 @@ import android.app.Dialog;
import android.content.Context;
import android.text.SpannableString;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.google.firebase.crashlytics.FirebaseCrashlytics;
import com.orhanobut.logger.Logger;
import it.integry.integrywmsnative.BuildConfig;
import it.integry.integrywmsnative.core.rest.CommonRESTException;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class UtilityExceptions {
@@ -43,8 +46,17 @@ public class UtilityExceptions {
if(ex.getCause() != null) errorMessage += "<br />" + ex.getCause().getMessage();
}
if(context != null) {
DialogSimpleMessageHelper.makeErrorDialog(context, new SpannableString(errorMessage), null, null).show();
FragmentManager fm = null;
if(context != null && context instanceof FragmentActivity) {
fm = ((FragmentActivity) context).getSupportFragmentManager();
} else if(UtilityContext.getMainActivity() != null) {
fm = UtilityContext.getMainActivity().getSupportFragmentManager();
}
if(fm != null) {
DialogSimpleMessageView.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(fm, "tag");
}
if(!BuildConfig.DEBUG) {

View File

@@ -68,11 +68,11 @@ public class UtilityString {
}
public static Spanned formatHtmlString(String format, String... params){
return Html.fromHtml(String.format(format,params));
return Html.fromHtml(String.format(format, (Object[]) params));
}
public static Spanned formatHtmlStringFromResId(@StringRes int stringId, String... params){
return Html.fromHtml(String.format(UtilityResources.getString(stringId),params));
return Html.fromHtml(String.format(UtilityResources.getString(stringId), (Object[]) params));
}

View File

@@ -41,7 +41,7 @@ import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione.rest.OrdiniAccettazioneRESTConsumer;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class MainAccettazioneFragment extends Fragment implements ISearcableFragment, ITitledFragment, IScrollableFragment {
@@ -187,8 +187,7 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
.count();
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)),
@@ -203,14 +202,17 @@ public class MainAccettazioneFragment extends Fragment implements ISearcableFrag
myIntent.putExtra("keySitArts", cacheSitArtItemID);
getActivity().startActivity(myIntent);
}).show();
}).show(getActivity().getSupportFragmentManager(), "tag");
}, ex -> {
progress.dismiss();
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if(errorMessage == null) errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
});

View File

@@ -60,7 +60,7 @@ import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGExcep
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.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
@@ -245,7 +245,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -254,14 +254,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc qta col
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfDaEvadere());
@@ -308,7 +307,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -317,14 +316,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc qta col
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
if (SettingsManager.iDB().isFlagForceAllToColli() || (x.getMtbAart() == null || !x.getMtbAart().isFlagQtaCnfFissaBoolean())) {
accettazioneListModel.setQtaEvasa(numCnfEvasa);
accettazioneListModel.setQtaTot(x.getSitArtOrdDTO().getNumCnfDaEvadere());
@@ -371,7 +369,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -380,7 +378,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc qta col
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -431,7 +429,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc Num CNF
BigDecimal numCnfEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
numCnfEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getNumCnf)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -440,7 +438,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
//Calc qta col
BigDecimal qtaEvasa = BigDecimal.ZERO;
if(x.getWithdrawMtbColrs().size() > 0) {
if (x.getWithdrawMtbColrs().size() > 0) {
qtaEvasa = Stream.of(x.getWithdrawMtbColrs())
.map(MtbColr::getQtaCol)
.reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -535,7 +533,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
public void startListaBancaliRegistratiActivity(ArrayList<RecoverMtbColt> mtbColts) {
Intent myIntent = ListaBancaliActivity.createIntent(this,
Stream.of(mtbColts).map(x -> (MtbColt)x).toList(),
Stream.of(mtbColts).map(x -> (MtbColt) x).toList(),
input -> ((RecoverMtbColt) input).isFlagCanBeRecovered(),
PrinterRESTConsumer.Type.SECONDARIA,
ReportManager.getReportNameLUFromGestione(GestioneEnum.ACQUISTO));
@@ -546,7 +544,9 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
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();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getSupportFragmentManager(), "tag");
}
@Override
@@ -556,13 +556,13 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress();
DialogSimpleMessageHelper.makeErrorDialog(
this,
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(getSupportFragmentManager(), "tag");
}
@Override
@@ -599,7 +599,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
public void onError(Exception ex) {
this.closeProgress();
if(ex instanceof InvalidPesoKGException) {
if (ex instanceof InvalidPesoKGException) {
UtilityToast.showToast(ex.getMessage());
} else {
UtilityExceptions.defaultException(this, ex, mCurrentProgress);
@@ -664,12 +664,11 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(this,
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
).show(getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -98,10 +98,13 @@ public class AccettazionePickingViewModel {
public void init(List<OrdineAccettazioneInevasoDTO> orders, List<SitArtOrdDTO> sitArts, String codMdep) {
this.mOrders = orders;
this.mSitArts = sitArts;
this.mDefaultCodMdep = codMdep;
getEmptyPickingList(sitArts, pickingObjectList -> {
this.mSitArts = Stream.of(sitArts)
.filter(x -> UtilityBigDecimal.greaterThan(x.getNumCnfDaEvadere(), BigDecimal.ZERO) && UtilityBigDecimal.greaterThan(x.getQtaDaEvadere(), BigDecimal.ZERO))
.toList();
getEmptyPickingList(this.mSitArts, pickingObjectList -> {
this.mPickingList.postValue(pickingObjectList);
});
@@ -136,6 +139,7 @@ public class AccettazionePickingViewModel {
}
private void getEmptyPickingList(List<SitArtOrdDTO> sitArtOrdList, RunnableArgs<List<PickingObjectDTO>> onComplete) {
List<String> codMarts = Stream.of(sitArtOrdList)
.map(SitArtOrdDTO::getCodMart)
.toList();
@@ -169,7 +173,7 @@ public class AccettazionePickingViewModel {
public void retrieveExistentLU(RunnableArgs<ArrayList<RecoverMtbColt>> onComplete) {
this.sendOnLoadingStarted();
this.mAccettazionePickingRESTConsumer.getBancaliGiaRegistrati(this.mSitArts, mtbColtList -> {
this.mAccettazionePickingRESTConsumer.getBancaliGiaRegistrati(this.mOrders, mtbColtList -> {
this.sendOnLoadingEnded();
onComplete.run(mtbColtList);
}, this::sendError);

View File

@@ -16,7 +16,7 @@ import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityLogger;
import it.integry.integrywmsnative.core.utility.UtilityQuery;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
@Singleton
public class AccettazionePickingRESTConsumer {
@@ -28,18 +28,18 @@ public class AccettazionePickingRESTConsumer {
this.mSystemRestConsumer = systemRESTConsumer;
}
public void getBancaliGiaRegistrati(List<SitArtOrdDTO> ordiniToShow, RunnableArgs<ArrayList<RecoverMtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
public void getBancaliGiaRegistrati(List<OrdineAccettazioneInevasoDTO> ordiniToShow, RunnableArgs<ArrayList<RecoverMtbColt>> onComplete, RunnableArgs<Exception> onFailed) {
List<HashMap<String, Object>> whereCondListMap = new ArrayList<>();
Stream
.of(ordiniToShow)
.distinctBy(x -> x.getDataOrd() + " " + x.getGestione() + " " + x.getNumOrd())
.distinctBy(x -> x.getData() + " " + x.getGestione() + " " + x.getNumero())
.forEach(x -> {
try {
HashMap<String, Object> whereCondMap = new HashMap<>();
whereCondMap.put("mtb_colr.data_ord", UtilityDate.recognizeDate(x.getDataOrd()));
whereCondMap.put("mtb_colr.data_ord", UtilityDate.recognizeDate(x.getData()));
whereCondMap.put("mtb_colr.gestione", x.getGestione().equalsIgnoreCase("P") ? "L" : x.getGestione());
whereCondMap.put("mtb_colr.num_ord", x.getNumOrd());
whereCondMap.put("mtb_colr.num_ord", x.getNumero());
whereCondListMap.add(whereCondMap);
} catch (Exception ex) {

View File

@@ -24,7 +24,7 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity;
import it.integry.integrywmsnative.gest.contenuto_bancale.core.ContenutoBancaleListAdapter;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import static android.app.Activity.RESULT_OK;
@@ -118,7 +118,9 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
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();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(mContext.getSupportFragmentManager(), "tag");
}, ex -> UtilityExceptions.defaultException(mContext, ex, progress));
} catch (Exception ex) {
@@ -128,7 +130,9 @@ public class ContenutoBancaleViewModel implements IRecyclerItemClicked<MtbColr>
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, null).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(errorMessage), null, null)
.show(mContext.getSupportFragmentManager(), "tag");;
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);

View File

@@ -63,7 +63,7 @@ public class ListaBancaliViewModel implements IRecyclerItemClicked<MtbColt> {
ColliMagazzinoRESTConsumer.getByTestataStatic(item, mLoadOnlyResiduo, false, mtbColt -> {
ObservableArrayList<MtbColr> mtbColrObservableArrayList = new ObservableArrayList<>();
mtbColrObservableArrayList.addAll(mtbColt.getMtbColr());
if(mtbColt != null && mtbColt.getMtbColr() != null) mtbColrObservableArrayList.addAll(mtbColt.getMtbColr());
item.setMtbColr(mtbColrObservableArrayList);
progress.dismiss();

View File

@@ -28,7 +28,7 @@ import it.integry.integrywmsnative.gest.login.LoginActivity;
import it.integry.integrywmsnative.gest.login.core.LoginHelper;
import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO;
import it.integry.integrywmsnative.gest.login.dto.LoginDTO;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class LoginViewModel {
@@ -192,22 +192,22 @@ public class LoginViewModel {
private void onLoginFailed(final Spanned message){
mProgress.dismiss();
loginButtonEnabled.set(true);
mActivity.runOnUiThread(() -> DialogSimpleMessageHelper.makeErrorDialog(
mActivity,
mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeErrorDialog(
message,
null,
null).show());
null)
.show(mActivity.getSupportFragmentManager(), "tag"));
}
private void onLoginSuccess(final String title, final Spanned message, final String host, final int port, final List<String> availableProfiles){
mProgress.dismiss();
mActivity.runOnUiThread(() -> DialogSimpleMessageHelper.makeSuccessDialog(
mActivity,
mActivity.runOnUiThread(() -> DialogSimpleMessageView.makeSuccessDialog(
title,
message,
null,
() -> showProfileDBSelectionDialog(host, port, availableProfiles)).show());
() -> showProfileDBSelectionDialog(host, port, availableProfiles))
.show(mActivity.getSupportFragmentManager(), "tag"));
}
private void showProfileDBSelectionDialog(final String host, final int port, final List<String> availableProfiles){

View File

@@ -7,8 +7,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
@@ -33,7 +31,6 @@ import it.integry.integrywmsnative.core.di.BindableBoolean;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.IFilterableFragment;
import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment;
import it.integry.integrywmsnative.core.interfaces.IScrollableFragment;
import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment;
import it.integry.integrywmsnative.core.interfaces.ITitledFragment;
@@ -53,9 +50,9 @@ import it.integry.integrywmsnative.gest.ordini_uscita_elenco.list.OrdiniUscitaEl
import it.integry.integrywmsnative.gest.spedizione.SpedizioneActivity;
import it.integry.integrywmsnative.gest.spedizione.dialogs.row_info.BaseDialogRowInfoView;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledFragment, ILifecycleFragment, IScrollableFragment, ISelectAllFragment, IFilterableFragment, OrdiniUscitaElencoViewModel.Listener {
public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, ISelectAllFragment, IFilterableFragment, OrdiniUscitaElencoViewModel.Listener {
public BindableBoolean fabVisible = new BindableBoolean(false);
@@ -132,8 +129,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
public void onStart() {
super.onStart();
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep, mCurrentGestioneOrd, mCurrentGestioneCol, mCurrentSegnoCol);
@@ -141,6 +138,8 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
@Override
public void onDestroy() {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
@@ -259,12 +258,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.forEach(x -> x.getSelectedObservable().set(false));
}
@Override
public void onPreDestroy(Runnable onComplete) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
onComplete.run();
}
@Override
public void onCreateActionBar(AppCompatTextView titleText, Context context) {
titleText.setText(context.getText(R.string.prod_ordine_lavorazione_title_fragment).toString());
@@ -278,7 +271,6 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
.toList();
this.mViewModel.loadPicking(selectedOrders);
}
@@ -315,8 +307,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
int alreadyRegisteredUL = alreadyRegisteredMtbColts.size();
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, orders.size()), orders.size())
+ "<br />" +
"<b>" + codMarts.size() + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, codMarts.size())
@@ -324,7 +315,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF
"<b>" + alreadyRegisteredUL + "</b> " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)),
null,
() -> SpedizioneActivity.startActivity(getActivity(), sitArts, orders, alreadyRegisteredMtbColts, mCurrentGestioneCol, mCurrentSegnoCol, MtbColr.Causale.DEFAULT, mDialogRowInfo)
).show();
).show(getActivity().getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -18,6 +18,7 @@ import it.integry.integrywmsnative.core.exception.InvalidLUMultiGestioneExceptio
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoOrderFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.OrdineInevasoDTO;
@@ -282,10 +283,7 @@ public class OrdiniUscitaElencoViewModel {
if (this.mListener != null) mListener.onOrdersDispatched(orders, sitArts, alreadyRegisteredMtbColts);
}
public interface Listener {
void onLoadingStarted();
void onLoadingEnded();
public interface Listener extends ILoadingListener {
void onError(Exception ex);

View File

@@ -55,7 +55,7 @@ import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_cliente.DialogAskCliente;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
@@ -268,12 +268,11 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(getActivity(),
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
).show(getActivity().getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -35,6 +35,7 @@ import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
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;
@@ -49,9 +50,9 @@ 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_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.note_aggiuntive_lu.NoteAggiuntiveLUDialog;
public class PickingResiActivity extends BaseActivity implements BottomSheetFragmentLUContentView.Listener, BottomSheetFragmentLUContentViewModel.Listener, PickingResiViewModel.Listener {
@@ -179,9 +180,9 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
this.mBindings.mainList.setAdapter(pickingResiListAdapter);
this.mBindings.mainList.setLayoutManager(new LinearLayoutManager(this));
pickingResiListAdapter.setOnItemClicked(clickedItem -> {
pickingResiListAdapter.setOnItemClicked((clickedItem, refMtbColt) -> {
if (!noLUPresent.get()) {
this.mViewmodel.dispatchOrdineRow(clickedItem);
this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt);
}
});
}
@@ -190,7 +191,11 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
private List<PickingResiListModel> convertDataModelToListModel(List<WithdrawableDtbDocr> dataList) {
List<PickingResiListModel> pickingResiListModels = new ArrayList<>();
Stream.of(dataList)
List<WithdrawableDtbDocr> tmpList = Stream.of(dataList)
.filter(x -> !x.isHidden() && UtilityBigDecimal.greaterThan(x.getQtaDoc(), BigDecimal.ZERO))
.toList();
Stream.of(tmpList)
.sortBy(x -> x.getNumDoc() + " " + x.getDataDocS() + " " + x.getCodDtip() + " " + x.getSerDoc() + " " + x.getCodAnag() + " " + x.getIdRiga())
.forEach(x -> {
@@ -251,6 +256,10 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
});
}
public void removeListFilter() {
this.mViewmodel.resetMatchedRows();
}
@Override
public void onMtbColrEdit(MtbColr mtbColr) {
this.mViewmodel.dispatchRowEdit(mtbColr);
@@ -321,11 +330,23 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
this.openProgress();
onComplete.run(pickedQuantityDTO, shouldCloseLU);
}, () -> {
// this.mViewmodel.resetMatchedRows();
this.mViewmodel.resetMatchedRows();
})
.show(getSupportFragmentManager(), "tag");
}
@Override
public void onFilterApplied(String newValue) {
this.mBindings.filteredArtsInListExpandableLayout.expand(true);
this.mBindings.descriptionFilterText.setText(!UtilityString.isNullOrEmpty(newValue) ? newValue : "");
}
@Override
public void onFilterRemoved() {
this.mBindings.filteredArtsInListExpandableLayout.collapse(true);
this.mBindings.descriptionFilterText.setText("");
}
@Override
public void onRowSaved() {
FBToast.successToast(this, getResources().getString(R.string.data_saved), FBToast.LENGTH_SHORT);
@@ -334,12 +355,11 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(this,
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
).show(getSupportFragmentManager(), "tag");
}
@Override
@@ -362,7 +382,9 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
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();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getSupportFragmentManager(), "tag");
}
@Override
@@ -373,13 +395,13 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress();
DialogSimpleMessageHelper.makeErrorDialog(
this,
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -14,7 +14,11 @@ import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.CommonConst;
import it.integry.integrywmsnative.core.data_recover.ColliDataRecoverService;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoArtsFoundException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.exception.NoPrintersFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
@@ -25,6 +29,7 @@ import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
import it.integry.integrywmsnative.core.report.ReportManager;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
@@ -39,6 +44,7 @@ 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.exceptions.NotCurrentYearLUException;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
public class PickingResiViewModel {
@@ -229,23 +235,26 @@ public class PickingResiViewModel {
private void postCloseOperations(MtbColt mtbColt, Runnable onComplete) {
this.mColliRegistrati.add(mtbColt);
Stream.of(this.mPickingList.getValue())
.forEach(x -> {
List<MtbColr> withdraws = x.getWithdrawRows();
List<WithdrawableDtbDocr> tmpList = getPickingList().getValue();
for (int k = 0; k < withdraws.size(); k++) {
MtbColr withdrawRow = withdraws.get(k);
x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol()));
}
for (int i = 0; i < tmpList.size(); i++) {
WithdrawableDtbDocr x = tmpList.get(i);
List<MtbColr> withdraws = x.getWithdrawRows();
x.getWithdrawRows().clear();
for (int k = 0; k < withdraws.size(); k++) {
MtbColr withdrawRow = withdraws.get(k);
x.setQtaDoc(x.getQtaDoc().subtract(withdrawRow.getQtaCol()));
}
if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) {
this.mPickingList.getValue().remove(x);
}
});
x.getWithdrawRows().clear();
this.mPickingList.postValue(this.mPickingList.getValue());
if (UtilityBigDecimal.equalsOrLowerThan(x.getQtaDoc(), BigDecimal.ZERO)) {
tmpList.remove(x);
i--;
}
}
this.mPickingList.postValue(tmpList);
onComplete.run();
}
@@ -259,41 +268,232 @@ public class PickingResiViewModel {
//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);
this.executeEtichettaAnonimaNotOpenedLU(barcodeScanDTO, onComplete);
} else {
// this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete);
this.processBarcodeNotOpenedLU(barcodeScanDTO, onComplete);
}
} else {
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
//Cerco gli articoli presenti nell'ul dell'etichetta anonima
// this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete);
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onComplete);
} else {
// this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete);
this.processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete);
}
}
}
public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr) {
private void processBarcodeNotOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.createNewLU(
null,
null,
() -> processBarcodeAlreadyOpenedLU(barcodeScanDTO, onComplete));
}
private void processBarcodeAlreadyOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
//Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL)
this.executeEtichettaEan128(barcodeScanDTO, onComplete);
} else onComplete.run();
}
private void executeEtichettaAnonimaNotOpenedLU(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
mColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> {
if (mtbColt == null) {
if (!UtilityBarcode.isEtichettaAnonimaOfCurrentYear(barcodeScanDTO.getStringValue())) {
this.sendError(new NotCurrentYearLUException());
} else {
this.createNewLU(
UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()),
CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, onComplete);
}
} else {
this.createNewLU(
null,
null,
() -> searchArtFromUL(mtbColt, onComplete)
);
}
}, this::sendError);
}
private void executeEtichettaLU(String SSCC, Runnable onComplete) {
mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
if (mtbColt.getSegno() != -1) {
searchArtFromUL(mtbColt, onComplete);
} else this.sendError(new InvalidLUException());
} else {
this.sendError(new NoArtsFoundException());
}
}, this::sendError);
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
onComplete.run();
}
}, this::sendError);
}
private void searchArtFromUL(MtbColt scannedUL, Runnable onComplete) {
final List<WithdrawableDtbDocr> pickingList = mPickingList.getValue();
final List<WithdrawableDtbDocr> matchPickingObject = new ArrayList<>();
//Controllo se nel collo ho degli articoli che corrispondono per codice / taglia / colore / lotto
Stream.of(scannedUL.getMtbColr())
.filter(x -> !UtilityString.isNullOrEmpty(x.getCodMart()))
.forEach(x -> {
for (WithdrawableDtbDocr pickingObject : pickingList) {
//Da verificare se il controllo per partita deve essere sempre effettuato
if (UtilityString.equalsIgnoreCase(x.getCodMart(), pickingObject.getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), pickingObject.getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), pickingObject.getCodCol())) {
if (!matchPickingObject.contains(pickingObject)) {
matchPickingObject.add(pickingObject);
}
}
}
});
for (WithdrawableDtbDocr matchedObject : matchPickingObject) {
MtbColt cloneMtbColt = (MtbColt) scannedUL.clone();
ObservableArrayList<MtbColr> cloneMtbColrs = (ObservableArrayList<MtbColr>) cloneMtbColt.getMtbColr().clone();
Stream.of(cloneMtbColt.getMtbColr())
.filter(x -> !(UtilityString.equalsIgnoreCase(x.getCodMart(), matchedObject.getCodMart()) &&
UtilityString.equalsIgnoreCase(x.getCodTagl(), matchedObject.getCodTagl()) &&
UtilityString.equalsIgnoreCase(x.getCodCol(), matchedObject.getCodCol())))
.forEach(cloneMtbColrs::remove);
cloneMtbColt.setMtbColr(cloneMtbColrs);
PickDataDTO tempPickData = new PickDataDTO()
.setSourceMtbColt(cloneMtbColt);
matchedObject.setTempPickData(tempPickData);
}
this.loadMatchedRows(matchPickingObject);
onComplete.run();
}
private void loadMatchedRows(List<WithdrawableDtbDocr> matchedRows) {
if (matchedRows == null || matchedRows.size() == 0) {
this.sendError(new NoArtsFoundException());
} else if (matchedRows.size() == 1) {
WithdrawableDtbDocr matchedItem = matchedRows.get(0);
if (matchedItem.getWithdrawRows() != null && matchedItem.getWithdrawRows().size() > 1) {
List<WithdrawableDtbDocr> 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<WithdrawableDtbDocr> pickingList = mPickingList.getValue();
for (int i = 0; i < pickingList.size(); i++) {
if (!matchedRows.contains(pickingList.get(i))) {
pickingList.get(i).setHidden(true);
}
}
this.sendFilterApplied(null);
this.getPickingList().postValue(pickingList);
}
}
public void dispatchOrdineRow(final WithdrawableDtbDocr withdrawableDtbDocr, final MtbColt refMtbColt) {
BigDecimal totalQtaDoc = withdrawableDtbDocr.getQtaDoc();
BigDecimal totalNumCnfDoc = withdrawableDtbDocr.getNumCnf();
BigDecimal qtaCnfDoc = withdrawableDtbDocr.getQtaCnf();
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
MtbColr mtbColrToDispatch = withdrawableDtbDocr.getTempPickData() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ?
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
BigDecimal totalAvailableQtaCol;
BigDecimal totalAvailableQtaCnf;
BigDecimal totalAvailableNumCnf;
if (mtbColrToDispatch != null) {
totalAvailableQtaCol = mtbColrToDispatch.getQtaCol();
totalAvailableQtaCnf = mtbColrToDispatch.getQtaCnf();
totalAvailableNumCnf = mtbColrToDispatch.getNumCnf();
} else {
totalAvailableQtaCol = totalQtaDoc;
totalAvailableQtaCnf = qtaCnfDoc;
totalAvailableNumCnf = totalNumCnfDoc;
}
this.sendOnItemDispatched(
withdrawableDtbDocr.getMtbAart(),
totalNumCnfDoc,
qtaCnfDoc,
totalQtaDoc,
totalQtaDoc,
totalNumCnfDoc,
qtaCnfDoc,
totalAvailableNumCnf,
totalAvailableQtaCnf,
totalAvailableQtaCol,
totalAvailableQtaCol,
totalAvailableNumCnf,
totalAvailableQtaCnf,
withdrawableDtbDocr.getPartitaMag(),
withdrawableDtbDocr.getDataScadPartitaMagD(),
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(withdrawableDtbDocr,
refMtbColt,
pickedQuantityDTO.getNumCnf(),
pickedQuantityDTO.getQtaCnf(),
pickedQuantityDTO.getQtaTot(),
@@ -328,7 +528,7 @@ public class PickingResiViewModel {
}
public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
public void saveNewRow(WithdrawableDtbDocr withdrawableDtbDocr, MtbColt refMtbColt, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad, boolean shouldCloseLU) {
this.sendOnLoadingStarted();
final MtbColr mtbColr = new MtbColr()
@@ -348,6 +548,39 @@ public class PickingResiViewModel {
.setDataDoc(withdrawableDtbDocr.getDataDocS())
.setIdRigaDoc(withdrawableDtbDocr.getIdRiga());
//TODO: Al posto di prelevare la prima riga bisognerebbe controllare se c'è ne una che corrisponde con la partita richiesta
MtbColr mtbColrToDispatch = withdrawableDtbDocr.getTempPickData() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr() != null &&
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().size() > 0 ?
withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getMtbColr().get(0) : null;
if (mtbColrToDispatch != null) {
if (UtilityString.isNullOrEmpty(mCurrentMtbColt.getCodTcol()))
mCurrentMtbColt.setCodTcol(UtilityString.empty2null(withdrawableDtbDocr.getTempPickData().getSourceMtbColt().getCodTcol()));
mtbColr
.setCodJcom(UtilityString.empty2null(mtbColrToDispatch.getCodJcom()))
.setSerColloRif(UtilityString.empty2null(mtbColrToDispatch.getSerCollo()))
.setNumColloRif(mtbColrToDispatch.getNumCollo())
.setGestioneRif(UtilityString.empty2null(mtbColrToDispatch.getGestione()))
.setDataColloRif(UtilityString.empty2null(mtbColrToDispatch.getDataColloS()));
if (mtbColrToDispatch.getPesoNettoKg() != null) {
//Proporzione
BigDecimal pesoNettoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoNettoKg()), mtbColrToDispatch.getQtaCol());
mtbColr.setPesoNettoKg(pesoNettoKg);
}
if (mtbColrToDispatch.getPesoLordoKg() != null) {
//Proporzione
BigDecimal pesoLordoKg = UtilityBigDecimal.divide(UtilityBigDecimal.multiply(qtaTot, mtbColrToDispatch.getPesoLordoKg()), mtbColrToDispatch.getQtaCol());
mtbColr.setPesoLordoKg(pesoLordoKg);
}
}
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE);
MtbColt cloneMtbColt = (MtbColt) mCurrentMtbColt.clone();
@@ -482,6 +715,17 @@ public class PickingResiViewModel {
});
}
public void resetMatchedRows() {
for (WithdrawableDtbDocr pickingObjectDTO : this.mPickingList.getValue()) {
pickingObjectDTO
.setTempPickData(null)
.setHidden(false);
}
this.mPickingList.postValue(this.mPickingList.getValue());
this.sendFilterRemoved();
}
public MutableLiveData<List<WithdrawableDtbDocr>> getPickingList() {
return mPickingList;
@@ -549,6 +793,14 @@ public class PickingResiViewModel {
if (this.mListener != null) mListener.onRowSaved();
}
private void sendFilterApplied(String newValue) {
if (this.mListener != null) mListener.onFilterApplied(newValue);
}
private void sendFilterRemoved() {
if (this.mListener != null) mListener.onFilterRemoved();
}
public PickingResiViewModel setListener(Listener listener) {
this.mListener = listener;
@@ -572,5 +824,9 @@ public class PickingResiViewModel {
Date dataScad,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);
void onFilterApplied(String newValue);
void onFilterRemoved();
}
}

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.PickingResiMainListItemBinding;
@@ -31,7 +32,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
private Context mContext;
private final List<PickingResiListModel> mDataset = new ArrayList<>();
private RunnableArgs<WithdrawableDtbDocr> mOnItemClicked;
private RunnableArgss<WithdrawableDtbDocr, MtbColt> mOnItemClicked;
static class SubheaderHolder extends RecyclerView.ViewHolder {
PickingResiMainListItemHeaderBinding mBinding;
@@ -65,7 +66,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
});
}
public void setOnItemClicked(RunnableArgs<WithdrawableDtbDocr> onItemClicked) {
public void setOnItemClicked(RunnableArgss<WithdrawableDtbDocr, MtbColt> onItemClicked) {
this.mOnItemClicked = onItemClicked;
}
@@ -123,7 +124,7 @@ public class PickingResiListAdapter extends SectionedRecyclerViewAdapter<Picking
holder.mBinding.getRoot().setOnClickListener(v -> {
if (this.mOnItemClicked != null)
this.mOnItemClicked.run(pickingResiListModel.getOriginalModel());
this.mOnItemClicked.run(pickingResiListModel.getOriginalModel(), pickingResiListModel.getSourceMtbColt());
});
}

View File

@@ -2,6 +2,7 @@ package it.integry.integrywmsnative.gest.picking_resi.core;
import java.math.BigDecimal;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
public class PickingResiListModel {
@@ -19,6 +20,7 @@ public class PickingResiListModel {
private boolean active;
private WithdrawableDtbDocr mOriginalModel;
private MtbColt mSourceMtbColt;
public String getGroupTitle() {
return groupTitle;
@@ -100,4 +102,13 @@ public class PickingResiListModel {
this.mOriginalModel = originalModel;
return this;
}
public MtbColt getSourceMtbColt() {
return mSourceMtbColt;
}
public PickingResiListModel setSourceMtbColt(MtbColt sourceMtbColt) {
this.mSourceMtbColt = sourceMtbColt;
return this;
}
}

View File

@@ -5,13 +5,18 @@ import java.util.List;
import it.integry.integrywmsnative.core.model.DtbDocr;
import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.model.dto.PickDataDTO;
public class WithdrawableDtbDocr extends DtbDocr {
private String gestione;
private List<MtbColr> withdrawRows = new ArrayList<>();
private PickDataDTO tempPickData;
private MtbColt refMtbColt;
private boolean hidden = false;
public WithdrawableDtbDocr() {
super();
}
@@ -33,4 +38,31 @@ public class WithdrawableDtbDocr extends DtbDocr {
this.gestione = gestione;
return this;
}
public MtbColt getRefMtbColt() {
return refMtbColt;
}
public WithdrawableDtbDocr setRefMtbColt(MtbColt refMtbColt) {
this.refMtbColt = refMtbColt;
return this;
}
public PickDataDTO getTempPickData() {
return tempPickData;
}
public WithdrawableDtbDocr setTempPickData(PickDataDTO tempPickData) {
this.tempPickData = tempPickData;
return this;
}
public boolean isHidden() {
return hidden;
}
public WithdrawableDtbDocr setHidden(boolean hidden) {
this.hidden = hidden;
return this;
}
}

View File

@@ -41,7 +41,7 @@ import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.Or
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.core.OrdineProduzioneListAdapter;
import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
/**
* A simple {@link Fragment} subclass.
@@ -137,7 +137,9 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if (errorMessage == null) errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
}
);
}
@@ -197,8 +199,7 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
.distinctBy(x -> x.getDataOrd() + " " + x.getNumOrd() + " " + x.getGestione())
.count();
DialogSimpleMessageHelper.makeInfoDialog(getActivity(),
getText(R.string.orders).toString(),
DialogSimpleMessageView.makeInfoDialog(getText(R.string.orders).toString(),
Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, (int) ordsCounter), ordsCounter)
+ "<br /><br />" +
"<b>" + artsCounter + "</b> " + getActivity().getResources().getQuantityString(R.plurals.available_articles, (int) artsCounter)),
@@ -213,7 +214,7 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
myIntent.putExtra("keySitArts", cacheSitArtItemID);
getActivity().startActivity(myIntent);
}).show();
}).show(getActivity().getSupportFragmentManager(), "tag");
},
@@ -224,7 +225,9 @@ public class ProdOrdineProduzioneElencoFragment extends Fragment implements ITit
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if (errorMessage == null)
errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage();
DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
});

View File

@@ -76,6 +76,7 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer {
" CROSS APPLY input_values " +
" WHERE dtb_ordt.gestione = 'L' " +
" AND flag_evaso = 'I' " +
" AND flag_evaso_prod = 'I' " +
" AND dtb_ordr.flag_evaso_forzato = 'N' " +
" AND flag_annulla = 'N' " +
" AND dtb_ordt.cod_mdep = input_values.cod_mdep " +
@@ -144,7 +145,7 @@ public class ProdFabbisognoLineeProdRESTConsumer extends _BaseRESTConsumer {
"FROM ord_without_positioned_mtb_colt " +
"CROSS APPLY input_values " +
"GROUP BY cod_mart, unt_mis, input_values.data_inizio, input_values.data_fine " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 AND SUM(num_cnf_ord_calc - num_cnf_gia_posizionata) > 0 " +
"ORDER BY cod_mart";
@@ -391,7 +392,7 @@ ORDER BY cod_mart, posizione
"CROSS APPLY input_values " +
"WHERE cod_mart = " + UtilityDB.valueToString(codMart) + " " +
"GROUP BY cod_mart, unt_mis, cod_jfas, input_values.data_inizio, input_values.data_fine " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 " +
"HAVING SUM(qta_ord_calc - qta_gia_posizionata) > 0 AND SUM(num_cnf_ord_calc - num_cnf_gia_posizionata) > 0 " +
"ORDER BY cod_mart";

View File

@@ -42,7 +42,7 @@ import it.integry.integrywmsnative.gest.prod_recupero_materiale.core.ProdRecuper
import it.integry.integrywmsnative.gest.prod_recupero_materiale.dto.HistoryVersamentoProdULDTO;
import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU;
@@ -386,13 +386,13 @@ public class ProdRecuperoMaterialeViewModel {
}, ex -> {
progress.dismiss();
String errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(
mContext,
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(errorMessage),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(mContext.getSupportFragmentManager(), "tag");
});
} catch (Exception ex) {
@@ -402,7 +402,9 @@ public class ProdRecuperoMaterialeViewModel {
} else {
progress.dismiss();
String errorMessage = "Nessuna stampante configurata";
DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, onComplete).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(errorMessage), null, onComplete)
.show(mContext.getSupportFragmentManager(), "tag");
}
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progress);

View File

@@ -6,6 +6,7 @@ import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.Observable;
import androidx.recyclerview.widget.RecyclerView;
@@ -32,7 +33,7 @@ import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentChooseOrdsLavFromListItemModelBinding;
import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavorazioneDTO;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter<ChooseOrdsLavFromListAdapter.ViewHolder> {
@@ -57,11 +58,12 @@ public class ChooseOrdsLavFromListAdapter extends RecyclerView.Adapter<ChooseOrd
private void onItemChecked(CheckableOrdineLavoro itemModel) {
if (itemModel.isChecked() && itemModel.getItem().getOrdineLav().getHrNum() <= 0){
DialogSimpleMessageHelper.makeWarningDialog(mContext,
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml("Nessuna risorsa umana registrata per l'ordine selezionato! <br> Per una corretta suddivisione delle quantità registra le risorse.")),
null, () -> {
itemModel.getChecked().set(false);
}).show();
})
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
return;
}
if (!itemModel.isChecked()) {

View File

@@ -8,6 +8,7 @@ import android.text.SpannableString;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.ObservableField;
import androidx.recyclerview.widget.LinearLayoutManager;
@@ -44,7 +45,7 @@ import it.integry.integrywmsnative.gest.prod_versamento_materiale.dto.OrdineLavo
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU;
@@ -75,7 +76,7 @@ public class ProdVersamentoMaterialViewModel {
mMtbColr = mtbColr;
mBinding.descrArt.setText(mtbColr.getDescrizione());
mBinding.codArt.setText(mtbColr.getCodMart());
mBinding.batch.setText(mtbColr.getPartitaMag() + ((mtbColr.getMtbPartitaMag() != null) ? " - "+ mtbColr.getMtbPartitaMag().getDescrizione() : ""));
mBinding.batch.setText(mtbColr.getPartitaMag() + ((mtbColr.getMtbPartitaMag() != null) ? " - " + mtbColr.getMtbPartitaMag().getDescrizione() : ""));
if (!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())) {
String text = UtilityNumber.decimalToString(mtbColr.getQtaCol());
@@ -96,18 +97,20 @@ public class ProdVersamentoMaterialViewModel {
} else if ((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE || mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) && mtbColt.getSegno().equals(+1)) {
if (mtbColt.getMtbColr() == null || mtbColt.getMtbColr().size() == 0) {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml("E' stata scansionata una UL già vuota")),
null, this::openLU).show();
null, this::openLU)
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
} else {
setMtbColt(mtbColt);
choosePosition();
}
} else {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>")),
null, this::openLU).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>")),
null, this::openLU)
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
}
}).show();
}
@@ -123,28 +126,36 @@ public class ProdVersamentoMaterialViewModel {
createColloScarico(mtbDepoPosizione);
} else {
if (mtbColt == null || mtbColt.get() == null || mtbColt.get().getMtbColr() == null || mtbColt.get().getMtbColr().size() <= 0) {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Il collo selezionato non presenta articoli versabili sulla linea.")),
null, this::openLU).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Il collo selezionato non presenta articoli versabili sulla linea.")),
null, this::openLU)
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
return;
} else if (mtbColt.get().getMtbColr().size() > 1) {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Il collo selezionato contiene più articoli, solo il primo verrà versato in questa sessione. <br> Per versare i colli restanti ripetere l'operazione di versamento.")),
null, () -> {
cyclicGetOrdiniLavByCollo(mtbColt.get().getMtbColr().iterator(), mtbDepoPosizione);
}).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Il collo selezionato contiene più articoli, solo il primo verrà versato in questa sessione. <br> Per versare i colli restanti ripetere l'operazione di versamento.")),
null, () -> {
cyclicGetOrdiniLavByCollo(mtbColt.get().getMtbColr().iterator(), mtbDepoPosizione);
})
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
return;
}
MesRESTConsumer.getOrdiniLavorazioneMateriale(mtbDepoPosizione.getPosizione(), getIdMaterialeFromCollo(mtbColt.get()), ordini -> richiediOrdiniPerVersamento(ordini, mtbDepoPosizione), e -> DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml(e.getMessage())),
null, this::openLU).show());
MesRESTConsumer.getOrdiniLavorazioneMateriale(
mtbDepoPosizione.getPosizione(),
getIdMaterialeFromCollo(mtbColt.get()),
ordini -> richiediOrdiniPerVersamento(ordini, mtbDepoPosizione),
e -> DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(e.getMessage())),
null,
this::openLU)
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"));
}
} else {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Si è verificato un errore. Riprovare")),
null, this::openLU).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Si è verificato un errore. Riprovare")),
null, this::openLU)
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
}
}
@@ -243,8 +254,8 @@ public class ProdVersamentoMaterialViewModel {
richiediOrdiniPerVersamento(ordini, mtbDepoPosizione);
}
}
, e -> DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml(e.getMessage())),
null, this::openLU).show());
, e -> DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(e.getMessage())),
null, this::openLU)
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag"));
}
}

View File

@@ -42,7 +42,7 @@ import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrd
import it.integry.integrywmsnative.ui.FabMenuCustomAnimations;
import it.integry.integrywmsnative.view.dialogs.DialogAskAction;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class PVOrdineAcquistoEditActivity extends BaseActivity {
@@ -135,7 +135,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
private void deleteArticolo(ArticoloOrdine articoloOrdine) {
String text = "Stai per eliminare l'articolo <b> " + articoloOrdine.getDescrizione() + "</b> dall'ordine, <br> sei sicuro?";
DialogSimpleMessageHelper.makeWarningDialog(this, new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> this.runOnUiThread(() -> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(this);
mhelper.removeArticoloFromOrdine(articoloOrdine, () -> {
progress.dismiss();
@@ -146,7 +146,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity {
runOnUiThread(() -> UtilityExceptions.defaultException(this, e));
});
}), () -> {
}).show();
}).show(getSupportFragmentManager(), "tag");
}
private void handleException(Exception ex) {

View File

@@ -47,7 +47,7 @@ import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanLis
import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.DialogAskAction;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitledFragment, IScrollableFragment {
@@ -142,7 +142,9 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
}), (e) -> {
progress.dismiss();
String errorMessage = e.getMessage();
getActivity().runOnUiThread(() -> DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show());
getActivity().runOnUiThread(() -> DialogSimpleMessageView
.makeErrorDialog(new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag"));
});
}
@@ -198,7 +200,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
private void deleteOrdine(Ordine ordine) {
String text = "Stai per eliminare un ordine sei sicuro?";
DialogSimpleMessageHelper.makeWarningDialog(getActivity(), new SpannableString(Html.fromHtml(text)), null, () -> getActivity().runOnUiThread(() -> {
DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> getActivity().runOnUiThread(() -> {
final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity());
mHelper.deleteOrder(ordine, () -> {
getActivity().runOnUiThread(() -> {
@@ -211,7 +213,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled
getActivity().runOnUiThread(() -> UtilityExceptions.defaultException(getActivity(), e));
});
}), () -> {
}).show();
}).show(getActivity().getSupportFragmentManager(), "tag");
}
private void refreshRenderedOrdini(List<OrdineWrapper> ordini) {

View File

@@ -60,7 +60,7 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO;
import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView;
import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArts;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
@@ -360,12 +360,12 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(getActivity(),
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
@@ -471,29 +471,31 @@ public class RettificaGiacenzeFragment extends Fragment implements ITitledFragme
public void onLUSuccessullyPrinted() {
Resources res = getResources();
String errorMessage = res.getText(R.string.alert_print_completed_message).toString();
DialogSimpleMessageHelper.makeSuccessDialog(getActivity(), res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override
public void onLUPrintRequest(RunnableArgs<Boolean> onComplete) {
DialogSimpleMessageHelper.makeInfoDialog(
getActivity(),
DialogSimpleMessageView.makeInfoDialog(
getActivity().getResources().getString(R.string.action_print_ul),
new SpannableString(getActivity().getResources().getString(R.string.ask_print_message)),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)).show();
() -> onComplete.run(false))
.show(getActivity().getSupportFragmentManager(), "tag");;
}
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
DialogSimpleMessageHelper.makeErrorDialog(
getActivity(),
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(getActivity().getSupportFragmentManager(), "tag");
}
@Override

View File

@@ -67,7 +67,7 @@ import it.integry.integrywmsnative.view.dialogs.DialogConsts;
import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU;
import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.camera_barcode_reader.DialogCameraBarcodeReader;
import it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPeso;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
@@ -198,6 +198,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
boolean enableCheckPartitaMag = SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV();
boolean canOverflowOrderQuantity = SettingsManager.iDB().isFlagCanAddExtraQuantitySpedizione();
boolean shouldAskPesoLU = SettingsManager.iDB().isFlagAskPesoColloSpedizione();
boolean useQtaOrd = SettingsManager.iDB().isFlagSpedizioneUseQtaOrd();
if (mEnableGiacenza) this.openProgress();
mViewmodel.init(
@@ -211,7 +212,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
mColliRegistrati,
reportNameSpedizioneChiudiOrdine,
mGestioneCol, mSegnoCol, mDefaultCausaleUL,
mEnableQuantityReset);
mEnableQuantityReset,
useQtaOrd);
}
@Override
@@ -265,7 +267,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
((SettingsManager.iDB().isFlagSpedizioneEnableManualPick() &&
clickedItem.getSitArtOrdDTO().isFlagEnablePickManuale()) ||
clickedItem.getTempPickData() != null)) {
this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt);
this.mViewmodel.dispatchOrdineRow(clickedItem, refMtbColt,
SettingsManager.iDB().isFlagSpedizioneEnableManualPick() && clickedItem.getSitArtOrdDTO().isFlagEnablePickManuale());
}
});
}
@@ -719,7 +722,9 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
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();
DialogSimpleMessageView
.makeSuccessDialog(res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null)
.show(getSupportFragmentManager(), "tag");;
}
@Override
@@ -730,13 +735,14 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override
public void onLUPrintError(Exception ex, Runnable onComplete) {
this.closeProgress();
DialogSimpleMessageHelper.makeErrorDialog(
this,
DialogSimpleMessageView.makeErrorDialog(
new SpannableString(ex.getMessage()),
null,
null,
R.string.button_ignore_print,
onComplete).show();
onComplete)
.show(getSupportFragmentManager(), "tag");
;
}
@Override
@@ -754,12 +760,12 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
@Override
public void onMtbColrDeleteRequest(RunnableArgs<Boolean> onComplete) {
String text = getResources().getString(R.string.alert_delete_mtb_colr);
DialogSimpleMessageHelper.makeWarningDialog(this,
new SpannableString(text),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(text),
null,
() -> onComplete.run(true),
() -> onComplete.run(false)
).show();
)
.show(getSupportFragmentManager(), "tag");
}
@Override
@@ -793,6 +799,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
boolean canPartitaMagBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO()
.setMtbAart(mtbAart)
@@ -811,7 +818,8 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo
.setPartitaMag(partitaMag)
.setDataScad(dataScad)
.setCanOverflowOrderQuantity(canOverflowOrderQuantity)
.setCanLUBeClosed(true);
.setCanLUBeClosed(true)
.setCanPartitaMagBeChanged(canPartitaMagBeChanged);
DialogInputQuantityV2View
.newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> {

View File

@@ -95,6 +95,7 @@ public class SpedizioneViewModel {
private String mReportNameSpedizioneChiudiOrdine;
private boolean mIsNewLU;
private boolean mEnableQuantityReset;
private boolean mUseQtaOrd;
private MtbColt mCurrentMtbColt = null;
@@ -137,7 +138,8 @@ public class SpedizioneViewModel {
GestioneEnum gestioneCol,
int segnoCol,
Integer defaultCausaleUL,
boolean enableQuantityReset) {
boolean enableQuantityReset,
boolean useQtaOrd) {
this.sendOnLoadingStarted();
this.mDefaultCodMdep = codMdep;
@@ -150,6 +152,7 @@ public class SpedizioneViewModel {
this.mReportNameSpedizioneChiudiOrdine = reportNameSpedizioneChiudiOrdine;
this.mDefaultCausaleOfUL = defaultCausaleUL;
this.mEnableQuantityReset = enableQuantityReset;
this.mUseQtaOrd = useQtaOrd;
if (enableGiacenza) {
mOrdiniRestConsumerService.getSuggestedPickingList(this.mDefaultCodMdep, pickingList, pickingObjectList -> {
@@ -361,6 +364,7 @@ public class SpedizioneViewModel {
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
boolean canBatchLotBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete) {
if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO,
mtbAart,
@@ -379,6 +383,7 @@ public class SpedizioneViewModel {
partitaMag,
dataScad,
canOverflowOrderQuantity,
canBatchLotBeChanged,
onComplete);
}
@@ -437,6 +442,9 @@ public class SpedizioneViewModel {
this.sendError(new InvalidLUException());
onComplete.run();
} else {
//Reset of existant mtbColrs
mtbColt.setMtbColr(new ObservableArrayList<>());
this.mCurrentMtbColt = mtbColt;
mMtbColtSessionID = this.mColliDataRecoverService.startNewSession(mtbColt, mTestateOrdini);
this.mIsNewLU = false;
@@ -729,7 +737,7 @@ public class SpedizioneViewModel {
this.sendFilterApplied(null);
this.getPickingList().postValue(pickingList);
} else {
this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt());
this.dispatchOrdineRow(matchedItem, matchedItem.getRefMtbColt(), false);
}
} else {
@@ -748,7 +756,7 @@ public class SpedizioneViewModel {
}
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt) {
public void dispatchOrdineRow(final PickingObjectDTO pickingObjectDTO, MtbColt refMtbColt, boolean canPartitaMagBeChanged) {
BigDecimal totalQtaOrd = pickingObjectDTO.getSitArtOrdDTO().getQtaOrd();
BigDecimal totalNumCnfOrd = pickingObjectDTO.getSitArtOrdDTO().getNumCnfOrd();
@@ -897,7 +905,9 @@ public class SpedizioneViewModel {
this.sendOnItemDispatched(
pickingObjectDTO,
pickingObjectDTO.getMtbAart(),
null, null, null,
mUseQtaOrd ? numCnfDaPrelevare : null,
mUseQtaOrd ? qtaCnfDaPrelevare : null,
mUseQtaOrd ? qtaColDaPrelevare : null,
qtaDaEvadere,
numCnfDaEvadere,
qtaCnfDaEvadere,
@@ -910,6 +920,7 @@ public class SpedizioneViewModel {
partitaMag,
dataScad,
mCanOverflowOrderQuantity,
canPartitaMagBeChanged,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO,
finalRefMtbColt,
@@ -1002,6 +1013,12 @@ public class SpedizioneViewModel {
if (qtaColDaPrelevare != null && numCnfDaPrelevare == null) {
numCnfDaPrelevare = UtilityBigDecimal.divideToInteger(qtaColDaPrelevare, mtbAart.getQtaCnf());
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
if (!mtbAart.isFlagQtaCnfFissaBoolean()) {
if (UtilityBigDecimal.equalsTo(numCnfDaPrelevare, BigDecimal.ZERO))
numCnfDaPrelevare = BigDecimal.ONE;
qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare);
}
} else if (numCnfDaPrelevare != null && qtaColDaPrelevare == null) {
qtaCnfDaPrelevare = mtbAart.getQtaCnf();
qtaColDaPrelevare = UtilityBigDecimal.multiply(numCnfDaPrelevare, qtaCnfDaPrelevare);
@@ -1043,6 +1060,7 @@ public class SpedizioneViewModel {
partitaMag,
dataScad,
mCanOverflowOrderQuantity,
true,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveNewRow(pickingObjectDTO,
finalRefMtbColt,
@@ -1179,6 +1197,7 @@ public class SpedizioneViewModel {
partitaMag,
dataScad,
mCanOverflowOrderQuantity,
false,
(pickedQuantityDTO, shouldCloseLU) -> {
this.saveEditedRow(mtbColrToEdit,
pickedQuantityDTO.getNumCnf(),
@@ -1440,12 +1459,17 @@ public class SpedizioneViewModel {
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)
.setPesoLordoKg(null)
.setPesoNettoKg(null);
if(mCurrentMtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) {
mtbColr.setOperation(CommonModelConsts.OPERATION.DELETE);
} else {
mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT);
mtbColr.setQtaCol(mtbColr.getQtaCol().multiply(new BigDecimal(-1)))
.setNumCnf(mtbColr.getNumCnf().multiply(new BigDecimal(-1)))
.setRiga(null)
.setPesoLordoKg(null)
.setPesoNettoKg(null);
}
mtbColt.getMtbColr().add(mtbColr);
@@ -1570,7 +1594,8 @@ public class SpedizioneViewModel {
IOrdiniVendita ordiniVendita = ClassRouter.getInstance(ClassRouter.PATH.ORDINI_VENDITA);
ordiniVendita.distribuisciCollo(cloneMtbColt, mTestateOrdini, mtbColts -> {
mColliMagazzinoRESTConsumer.getMultipleByTestate(mtbColts, false, onComplete, this::sendError);
mColliMagazzinoRESTConsumer.fillMtbAartsOfMtbColts(mtbColts, onComplete, this::sendError);
// mColliMagazzinoRESTConsumer.getMultipleByTestate(mtbColts, false, onComplete, this::sendError);
}, this::sendError);
}
@@ -1834,6 +1859,7 @@ public class SpedizioneViewModel {
String partitaMag,
Date dataScad,
boolean canOverflowOrderQuantity,
boolean canBatchLotBeChanged,
RunnableArgss<PickedQuantityDTO, Boolean> onComplete);

View File

@@ -0,0 +1,14 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
import dagger.Subcomponent;
@Subcomponent
public interface UltimeConsegneClienteComponent {
@Subcomponent.Factory
interface Factory{
UltimeConsegneClienteComponent create();
}
void inject(UltimeConsegneClienteFragment ultimeConsegneClienteFragment);
}

View File

@@ -7,38 +7,62 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
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.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
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.ITitledFragment;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteBinding;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel.UltimeConsegneClienteViewModel;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzato;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
public class UltimeConsegneClienteFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment {
public class UltimeConsegneClienteFragment extends BaseFragment implements UltimeConsegneClienteViewModel.Listener, ITitledFragment, IScrollableFragment, IFilterableFragment {
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private ElevatedToolbar mToolbar;
private UltimeConsegneClienteViewModel mViewModel;
private int barcodeScannerIstanceID = -1;
private final ObservableArrayList<DocumentoResoDTO> mDocumentiMutableData = new ObservableArrayList<>();
@Inject
UltimeConsegneClienteViewModel mViewModel;
private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel;
private FragmentMainUltimeConsegneClienteBinding mBindings;
public UltimeConsegneClienteFragment() {
// Required empty public constructor
}
public static UltimeConsegneClienteFragment newInstance() {
UltimeConsegneClienteFragment fragment = new UltimeConsegneClienteFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
return new UltimeConsegneClienteFragment();
}
@@ -46,21 +70,158 @@ public class UltimeConsegneClienteFragment extends Fragment implements ITitledFr
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
FragmentMainUltimeConsegneClienteBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_main_ultime_consegne_cliente, container, false);
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_main_ultime_consegne_cliente, container, false);
mViewModel = new UltimeConsegneClienteViewModel(getActivity(), mBinding);
MainApplication.appComponent
.ultimeConsegneClienteComponent()
.create()
.inject(this);
mBinding.setViewmodel(mViewModel);
mViewModel.setListener(this);
mToolbar.setRecyclerView(mBinding.recyclerView);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
this.initRecyclerView();
// this.initBarcodeReader();
// Inflate the layout for this fragment
return mBinding.getRoot();
return mBindings.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep);
this.mBindings.mainFab.hide();
this.mBindings.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
this.mViewModel.getDocuments().observe(this, this::refreshList);
openFilterDialog();
}
public void openFilterDialog() {
this.mViewModel.loadCodAnagClienti(gtbAnags -> {
DialogUltimeConsegneFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
refreshItems();
}).show();
});
}
private void initRecyclerView() {
UltimeConsegneMainListAdapter mAdapter =
new UltimeConsegneMainListAdapter(getActivity(), mDocumentiMutableData);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mAdapter.setEmptyView(mBindings.emptyView);
mBindings.recyclerView.setHasFixedSize(true);
mBindings.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mBindings.recyclerView.setAdapter(mAdapter);
// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView);
if(mToolbar != null)
mToolbar.setRecyclerView(mBindings.recyclerView);
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable();
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
});
};
private void refreshList(List<DocumentoResoDTO> documentList) {
this.mDocumentiMutableData.clear();
this.mDocumentiMutableData.addAll(sort(documentList));
}
private void refreshItems() {
this.openProgress();
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(this.mViewModel.getGtbAnagClienti().getValue())
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if (singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
}
this.mViewModel.loadConsegneClienti(currentCodAnagFilter,
null,
-1,
548
);
}
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
List<DocumentoResoDTO> sortedDataset = Stream.of(dataset)
.sortBy(DocumentoResoDTO::getRagSoc)
.toList();
return sortedDataset;
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
if (dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if (selectedOrders != null && selectedOrders.size() > 0) {
mBindings.mainFab.show();
} else {
mBindings.mainFab.hide();
}
}
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mDocumentiMutableData)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_consegne_cliente_title).toString(), selectedConsegne, +1);
}
@Override
public void onDestroy() {
for(Runnable onPreDestroy : mOnPreDestroyList) {
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
super.onDestroy();
@@ -78,11 +239,30 @@ public class UltimeConsegneClienteFragment extends Fragment implements ITitledFr
@Override
public void onFilterClick() {
mViewModel.openFilterDialog();
openFilterDialog();
}
@Override
public void addOnPreDestroy(Runnable onPreDestroy) {
this.mOnPreDestroyList.add(onPreDestroy);
}
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
}
}

View File

@@ -0,0 +1,29 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
@Module(subcomponents = UltimeConsegneClienteComponent.class)
public class UltimeConsegneClienteModule {
@Singleton
@Provides
UltimeConsegneClienteRESTConsumer providesUltimeConsegneClienteRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new UltimeConsegneClienteRESTConsumer(systemRESTConsumer);
}
@Provides
UltimeConsegneClienteViewModel providesUltimeConsegneClienteViewModel(
UltimeConsegneClienteRESTConsumer ultimeConsegneClienteRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
return new UltimeConsegneClienteViewModel(ultimeConsegneClienteRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer);
}
}

View File

@@ -0,0 +1,181 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
import androidx.lifecycle.MutableLiveData;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoDTO;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
public class UltimeConsegneClienteViewModel {
private final MutableLiveData<List<GtbAnag>> mGtbAnagClienti = new MutableLiveData<>();
private final MutableLiveData<List<DocumentoResoDTO>> mDocuments = new MutableLiveData<>();
private final UltimeConsegneClienteRESTConsumer mUltimeConsegneClienteRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private Listener mListener;
private String mCodMdep;
@Inject
public UltimeConsegneClienteViewModel(
UltimeConsegneClienteRESTConsumer ultimeConsegneClienteRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
this.mUltimeConsegneClienteRESTConsumer = ultimeConsegneClienteRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
}
public void init(String codMdep) {
this.mCodMdep = codMdep;
}
public void loadCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete) {
this.sendOnLoadingStarted();
this.mUltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> {
mGtbAnagClienti.postValue(gtbAnags);
this.sendOnLoadingEnded();
onComplete.run(gtbAnags);
}, this::sendError);
}
public void loadConsegneClienti(String codAnag, String codMart, int limitDocsForCli, int limitDays) {
this.sendOnLoadingStarted();
this.mUltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti(mCodMdep, codAnag, codMart, limitDocsForCli, limitDays, documentList -> {
this.mDocuments.postValue(documentList);
this.sendOnLoadingEnded();
}, this::sendError);
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.sendOnLoadingStarted();
RunnableArgs<List<OrdiniUscitaElencoDTO>> onBarcodeScanComplete = orderList -> {
onComplete.run();
this.sendOnLoadingEnded();
};
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete);
} else {
onComplete.run();
}
}
private void executeEtichettaLU(String SSCC, RunnableArgs<List<OrdiniUscitaElencoDTO>> onComplete) {
this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
// if(mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) {
// //GET BY COMMESSA COLLO
// this.mOrdiniUscitaElencoRESTConsumer.getOrdiniFromCommessaCollo(mCurrentCodMdep, mtbColt, orderList -> {
//
// if(orderList != null && orderList.size() > 0) {
// List<Integer> numOrds = Stream.of(orderList)
// .map(DtbOrdt::getNumOrd)
// .toList();
//
// List<OrdiniUscitaElencoDTO> filteredOrders = Stream.of(mOrderList.getValue())
// .filter(x -> numOrds.contains(x.getNumOrd())).toList();
//
// onComplete.run(filteredOrders);
// } else {
// this.sendError(new NoOrderFoundException());
// }
//
// }, this::sendError);
//
// } else {
// this.sendError(new InvalidLUGestioneException(GestioneEnum.VENDITA));
// }
//
} else {
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, RunnableArgs<List<OrdiniUscitaElencoDTO>> onComplete) {
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
public MutableLiveData<List<GtbAnag>> getGtbAnagClienti() {
return mGtbAnagClienti;
}
public MutableLiveData<List<DocumentoResoDTO>> getDocuments() {
return mDocuments;
}
public UltimeConsegneClienteViewModel setListener(Listener listener) {
this.mListener = listener;
return this;
}
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);
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
}
}

View File

@@ -1,44 +1,31 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel;
package it.integry.integrywmsnative.gest.ultime_consegne_cliente;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListHeaderBinding;
import it.integry.integrywmsnative.databinding.FragmentMainUltimeConsegneClienteListSingleItemBinding;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter<UltimeConsegneMainListAdapter.SubheaderHolder, UltimeConsegneMainListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
public class UltimeConsegneMainListAdapter extends ExtendedSectionedRecyclerView<DocumentoResoDTO, UltimeConsegneMainListAdapter.SubheaderHolder, UltimeConsegneMainListAdapter.SingleItemViewHolder> {
private Context mContext;
private List<DocumentoResoDTO> mDataset;
private ArrayList<String> mSectionTitleItems;
private RunnableArgs<DocumentoResoDTO> mOnSelectionChanged;
@Override
public String getSectionTitle(int position) {
return mSectionTitleItems.get(position);
}
static class SubheaderHolder extends RecyclerView.ViewHolder {
@@ -65,12 +52,9 @@ public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter<
public UltimeConsegneMainListAdapter(Context context, ArrayList<DocumentoResoDTO> dataset) {
super();
public UltimeConsegneMainListAdapter(Context context, ObservableArrayList<DocumentoResoDTO> mutableDataSet) {
super(mutableDataSet);
this.mContext = context;
this.mDataset = new ArrayList<>();
updateItems(sort(dataset));
}
@@ -146,45 +130,6 @@ public class UltimeConsegneMainListAdapter extends SectionedRecyclerViewAdapter<
return false;
}
@Override
public int getItemSize() {
return this.mDataset.size();
}
public void updateItems(List<DocumentoResoDTO> updatedDataset) {
mDataset.clear();
mDataset.addAll(sort(updatedDataset));
notifyDataSetChanged();
notifyDataChanged();
}
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
this.mSectionTitleItems = new ArrayList<>();
List<DocumentoResoDTO> sortedDataset = Stream.of(dataset)
.sortBy(DocumentoResoDTO::getRagSoc)
.toList();
Stream.of(sortedDataset)
.map(DocumentoResoDTO::getRagSoc)
.distinct()
.forEach(x -> {
this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
long count = Stream.of(dataset)
.filter(y -> y.getRagSoc().equalsIgnoreCase(x))
.count();
for(int i = 0; i < count; i++) this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
});
return sortedDataset;
}
public void setOnSelectionChanged(RunnableArgs<DocumentoResoDTO> mSelectionChanged) {
this.mOnSelectionChanged = mSelectionChanged;

View File

@@ -8,6 +8,8 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
@@ -20,65 +22,61 @@ import it.integry.integrywmsnative.core.utility.UtilityQuery;
import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
@Singleton
public class UltimeConsegneClienteRESTConsumer {
public static void getAvailableCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
private final SystemRESTConsumer systemRESTConsumer;
public UltimeConsegneClienteRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.systemRESTConsumer = systemRESTConsumer;
}
public void getAvailableCodAnagClienti(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " +
"FROM gtb_anag " +
"INNER JOIN vtb_clie ON vtb_clie.cod_anag = gtb_anag.cod_anag " +
"WHERE flag_stato = 'A'";
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<GtbAnag>>() {
@Override
public void onSuccess(ArrayList<GtbAnag> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {
}.getType();
systemRESTConsumer.<ArrayList<GtbAnag>>processSql(sql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
public static void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
public void getUltimeConsegneClienti(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT consegne.*, " +
" rag_soc," +
" dtb_doct.gestione " +
"FROM WMS_GetUltimeConsegneClienti(" +
UtilityDB.valueToString(limitConsegnePerCli) + ", " +
UtilityDB.valueToString(codAnag) + ", " +
UtilityDB.valueToString(codMart) + ", " +
UtilityDB.valueToString(codMdep) + ", " +
UtilityDB.valueToString(limitDays) + ") consegne " +
UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " +
UtilityDB.valueToString(codAnag) + ", " +
UtilityDB.valueToString(codMart) + ", " +
UtilityDB.valueToString(codMdep) + ", " +
UtilityDB.valueToString(limitDays) + ") consegne " +
"INNER JOIN dtb_doct ON consegne.num_doc = dtb_doct.num_doc AND consegne.data_doc = dtb_doct.data_doc AND consegne.cod_anag = dtb_doct.cod_anag AND consegne.cod_dtip = dtb_doct.cod_dtip AND consegne.ser_doc = dtb_doct.ser_doc " +
"LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " +
"ORDER BY rag_soc, " +
" counter_consegna ";
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<DocumentoResoDTO>>() {
@Override
public void onSuccess(ArrayList<DocumentoResoDTO> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {
}.getType();
systemRESTConsumer.<ArrayList<DocumentoResoDTO>>processSql(sql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
public static void loadDocRowFromConsegna(List<DocumentoResoDTO> consegne, RunnableArgs<ArrayList<WithdrawableDtbDocr>> onComplete, RunnableArgs<Exception> onFailed) {
List<HashMap<String, Object>> filterCond = new ArrayList<>();
for(int i = 0; i < consegne.size(); i++) {
for (int i = 0; i < consegne.size(); i++) {
HashMap<String, Object> filter = new HashMap<>();
filter.put("dtb_docr.data_doc", consegne.get(i).getDataDocD());
@@ -172,17 +170,18 @@ public class UltimeConsegneClienteRESTConsumer {
" (ctb_grup.sezione <> 1 OR ctb_grup.sezione IS NULL) AND " +
" dtb_docr.[qta_doc] - ISNULL(mtb_colr.qta_col, 0) > 0 AND" +
" ( " +
UtilityQuery.concatFieldListInWhereCond(filterCond) +
UtilityQuery.concatFieldListInWhereCond(filterCond) +
" ) " +
"ORDER BY cod_mart";
Type typeOfObjectsList = new TypeToken<ArrayList<WithdrawableDtbDocr>>() {}.getType();
Type typeOfObjectsList = new TypeToken<ArrayList<WithdrawableDtbDocr>>() {
}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<WithdrawableDtbDocr>>() {
@Override
public void onSuccess(ArrayList<WithdrawableDtbDocr> values) {
if(values != null && values.size() > 0){
if (values != null && values.size() > 0) {
List<String> codMarts = Stream.of(values)
.map(DtbDocr::getCodMart)
.withoutNulls()
@@ -191,7 +190,7 @@ public class UltimeConsegneClienteRESTConsumer {
ArticoloRESTConsumer.getByCodMartStatic(codMarts, arts -> {
if(arts != null && arts.size() > 0) {
if (arts != null && arts.size() > 0) {
for (DtbDocr value : values) {
MtbAart foundMtbAart = null;
@@ -199,7 +198,7 @@ public class UltimeConsegneClienteRESTConsumer {
List<MtbAart> mtbAartStream = Stream.of(arts)
.filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList();
if(mtbAartStream != null && mtbAartStream.size() > 0){
if (mtbAartStream != null && mtbAartStream.size() > 0) {
foundMtbAart = mtbAartStream.get(0);
}
@@ -207,19 +206,19 @@ public class UltimeConsegneClienteRESTConsumer {
}
if(onComplete != null) onComplete.run(values);
if (onComplete != null) onComplete.run(values);
}
}, onFailed);
} else {
if(onComplete != null) onComplete.run(values);
if (onComplete != null) onComplete.run(values);
}
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
if (onFailed != null) onFailed.run(ex);
}
});
}

View File

@@ -1,146 +0,0 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel;
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import androidx.recyclerview.widget.LinearLayoutManager;
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.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
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.FragmentMainUltimeConsegneClienteBinding;
import it.integry.integrywmsnative.gest.picking_resi.PickingResiActivity;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog.DialogUltimeConsegneFiltroAvanzato;
import it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest.UltimeConsegneClienteRESTConsumer;
public class UltimeConsegneClienteViewModel {
private Context mContext;
private FragmentMainUltimeConsegneClienteBinding mBinding;
private UltimeConsegneMainListAdapter mAdapter;
private List<DocumentoResoDTO> mItems;
private List<DocumentoResoDTO> mRenderedItems = new ArrayList<>();
private List<GtbAnag> mAvailableGtbAnags = null;
private DialogUltimeConsegneFiltroAvanzato.DialogUltimeConsegneFiltroAvanzatoViewModel mAppliedFilterViewModel;
public UltimeConsegneClienteViewModel(Context context, FragmentMainUltimeConsegneClienteBinding binding) {
this.mContext = context;
this.mBinding = binding;
this.mBinding.mainFab.hide();
this.mBinding.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
openFilterDialog();
}
public void openFilterDialog() {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
UltimeConsegneClienteRESTConsumer.getAvailableCodAnagClienti(gtbAnags -> {
mAvailableGtbAnags = gtbAnags;
progressDialog.dismiss();
DialogUltimeConsegneFiltroAvanzato.make(mContext, gtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
refreshItems();
}).show();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void initDataAdapter(ArrayList<DocumentoResoDTO> dataset) {
mAdapter = new UltimeConsegneMainListAdapter(mContext, dataset);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mBinding.recyclerView.setHasFixedSize(true);
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
mBinding.recyclerView.setAdapter(mAdapter);
mBinding.fastscroll.setRecyclerView(mBinding.recyclerView);
}
private void refreshItems(){
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(mAvailableGtbAnags)
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if(singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
}
UltimeConsegneClienteRESTConsumer.getUltimeConsegneClienti(
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
currentCodAnagFilter,
null,
null,
548,
consegne -> {
this.mItems = consegne;
this.initDataAdapter(consegne);
mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE);
mRenderedItems.clear();
if(this.mItems != null) mRenderedItems.addAll(this.mItems);
mAdapter.updateItems(mRenderedItems);
progressDialog.dismiss();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
if(dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if(selectedOrders != null && selectedOrders.size() > 0) {
mBinding.mainFab.show();
}
else {
mBinding.mainFab.hide();
}
}
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mItems)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_consegne_cliente_title).toString(), selectedConsegne, +1);
}
}

View File

@@ -0,0 +1,15 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore;
import dagger.Subcomponent;
@Subcomponent
public interface UltimiArriviFornitoreComponent {
@Subcomponent.Factory
interface Factory{
UltimiArriviFornitoreComponent create();
}
void inject(UltimiArriviFornitoreFragment ultimiArriviFornitoreFragment);
}

View File

@@ -7,41 +7,70 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.databinding.DataBindingUtil;
import androidx.fragment.app.Fragment;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
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.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
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.ITitledFragment;
import it.integry.integrywmsnative.core.model.GtbAnag;
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.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
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.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts;
/**
* A simple {@link Fragment} subclass.
* A simple {@link BaseFragment} subclass.
*/
public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment {
public class UltimiArriviFornitoreFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, IFilterableFragment, UltimiArriviFornitoreViewModel.Listener {
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
private ElevatedToolbar mToolbar;
private UltimiArriviFornitoreViewModel mViewModel;
private int barcodeScannerIstanceID = -1;
private final ObservableArrayList<DocumentoResoDTO> mDocumentiMutableData = new ObservableArrayList<>();
@Inject
UltimiArriviFornitoreViewModel mViewModel;
private FragmentUltimiArriviFornitoreBinding mBindings;
private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel;
public UltimiArriviFornitoreFragment() {
// Required empty public constructor
}
public static UltimiArriviFornitoreFragment newInstance() {
UltimiArriviFornitoreFragment fragment = new UltimiArriviFornitoreFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
return new UltimiArriviFornitoreFragment();
}
@@ -49,21 +78,155 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
FragmentUltimiArriviFornitoreBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false);
mBindings = DataBindingUtil.inflate(LayoutInflater.from(getActivity()), R.layout.fragment_ultimi_arrivi_fornitore, container, false);
mViewModel = new UltimiArriviFornitoreViewModel(getActivity(), mBinding);
MainApplication.appComponent
.ultimiArriviFornitoreComponent()
.create()
.inject(this);
mBinding.setViewmodel(mViewModel);
mViewModel.setListener(this);
mToolbar.setRecyclerView(mBinding.recyclerView);
mBindings.setLifecycleOwner(this);
mBindings.setView(this);
mBindings.setViewmodel(mViewModel);
this.initRecyclerView();
this.initBarcodeReader();
// Inflate the layout for this fragment
return mBinding.getRoot();
return mBindings.getRoot();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep();
mViewModel.init(codMdep);
this.mBindings.mainFab.hide();
this.mBindings.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
this.mViewModel.getDocuments().observe(this.getViewLifecycleOwner(), this::refreshList);
openFilterDialog();
}
public void openFilterDialog() {
this.mViewModel.loadCodAnagFornitori(gtbAnags -> {
DialogUltimiArriviFornitoreFiltroAvanzato.make(getActivity(), gtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
filterItems(null);
}).show();
});
}
private void initRecyclerView() {
UltimiArriviFornitoreListAdapter mAdapter =
new UltimiArriviFornitoreListAdapter(getActivity(), mDocumentiMutableData);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mAdapter.setEmptyView(mBindings.emptyView);
mBindings.recyclerView.setHasFixedSize(true);
mBindings.recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mBindings.recyclerView.setAdapter(mAdapter);
// mBindings.fastscroll.setRecyclerView(mBindings.recyclerView);
if (mToolbar != null)
mToolbar.setRecyclerView(mBindings.recyclerView);
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessfull(onScanSuccessful)
.setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false)));
BarcodeManager.enable();
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
});
};
private void refreshList(List<DocumentoResoDTO> documentList) {
this.mDocumentiMutableData.clear();
this.mDocumentiMutableData.addAll(sort(documentList));
}
private void filterItems(List<MtbAart> filteredMtbAarts) {
this.openProgress();
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(mViewModel.getGtbAnagClienti().getValue())
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if (singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
}
this.mViewModel.loadArriviFornitori(currentCodAnagFilter,
filteredMtbAarts,
-1,
365);
}
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
List<DocumentoResoDTO> items = Stream.of(dataset)
.sortBy(DocumentoResoDTO::getRagSoc)
.toList();
return items;
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
if(dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if(selectedOrders != null && selectedOrders.size() > 0) {
mBindings.mainFab.show();
}
else {
mBindings.mainFab.hide();
}
}
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mDocumentiMutableData)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
PickingResiActivity.startActivity(getActivity(), getActivity().getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1);
}
@Override
public void onDestroy() {
for(Runnable onPreDestroy : mOnPreDestroyList) {
BarcodeManager.removeCallback(barcodeScannerIstanceID);
for (Runnable onPreDestroy : mOnPreDestroyList) {
onPreDestroy.run();
}
super.onDestroy();
@@ -80,12 +243,9 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
}
@Override
public void onFilterClick() {
mViewModel.openFilterDialog();
openFilterDialog();
}
@@ -93,4 +253,40 @@ public class UltimiArriviFornitoreFragment extends Fragment implements ITitledFr
public void addOnPreDestroy(Runnable onPreDestroy) {
this.mOnPreDestroyList.add(onPreDestroy);
}
@Override
public void onLoadingStarted() {
BarcodeManager.disable();
this.openProgress();
}
@Override
public void onLoadingEnded() {
this.closeProgress();
BarcodeManager.enable();
}
@Override
public void onError(Exception ex) {
this.closeProgress();
UtilityExceptions.defaultException(getActivity(), ex, mCurrentProgress);
BarcodeManager.enable();
}
@Override
public void onMtbColtScanned(MtbColt scannedMtbColt) {
DialogChooseArtsFromListaArts
.make(getActivity(), scannedMtbColt.getMtbColr(), items -> {
List<MtbAart> mtbAarts = Stream.of(items)
.map(MtbColr::getMtbAart)
.toList();
filterItems(mtbAarts);
}, null)
.show();
}
}

View File

@@ -0,0 +1,30 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
@Module(subcomponents = UltimiArriviFornitoreComponent.class)
public class UltimiArriviFornitoreModule {
@Singleton
@Provides
UltimiArriviFornitoreRESTConsumer providesUltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
return new UltimiArriviFornitoreRESTConsumer(systemRESTConsumer);
}
@Provides
UltimiArriviFornitoreViewModel providesUltimiArriviFornitoreViewModel(
UltimiArriviFornitoreRESTConsumer ultimiArriviFornitoreRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
return new UltimiArriviFornitoreViewModel(ultimiArriviFornitoreRESTConsumer, barcodeRESTConsumer, colliMagazzinoRESTConsumer);
}
}

View File

@@ -6,38 +6,29 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.databinding.DataBindingUtil;
import androidx.databinding.ObservableArrayList;
import androidx.recyclerview.widget.RecyclerView;
import com.annimon.stream.Stream;
import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.view.ExtendedSectionedRecyclerView;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityExceptions;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListHeaderBinding;
import it.integry.integrywmsnative.databinding.FragmentUltimiArriviFornitoreListSingleItemBinding;
import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider;
public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapter<UltimiArriviFornitoreListAdapter.SubheaderHolder, UltimiArriviFornitoreListAdapter.SingleItemViewHolder> implements SectionTitleProvider {
public class UltimiArriviFornitoreListAdapter extends ExtendedSectionedRecyclerView<DocumentoResoDTO,
UltimiArriviFornitoreListAdapter.SubheaderHolder,
UltimiArriviFornitoreListAdapter.SingleItemViewHolder> {
private Context mContext;
private List<DocumentoResoDTO> mDataset;
private ArrayList<String> mSectionTitleItems;
private RunnableArgs<DocumentoResoDTO> mOnSelectionChanged;
@Override
public String getSectionTitle(int position) {
return mSectionTitleItems.get(position);
}
static class SubheaderHolder extends RecyclerView.ViewHolder {
@@ -64,13 +55,9 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt
public UltimiArriviFornitoreListAdapter(Context context, ArrayList<DocumentoResoDTO> dataset) {
super();
public UltimiArriviFornitoreListAdapter(Context context, ObservableArrayList<DocumentoResoDTO> mutableDataSet) {
super(mutableDataSet);
this.mContext = context;
this.mDataset = new ArrayList<>();
this.mSectionTitleItems = new ArrayList<>();
mDataset.addAll(sort(dataset));
}
@@ -152,7 +139,7 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt
public void updateItems(List<DocumentoResoDTO> updatedDataset) {
mDataset.clear();
mDataset.addAll(sort(updatedDataset));
mDataset.addAll(updatedDataset);
notifyDataSetChanged();
notifyDataChanged();
}
@@ -163,28 +150,5 @@ public class UltimiArriviFornitoreListAdapter extends SectionedRecyclerViewAdapt
}
private List<DocumentoResoDTO> sort(List<DocumentoResoDTO> dataset) {
List<DocumentoResoDTO> items = Stream.of(dataset)
.sortBy(DocumentoResoDTO::getRagSoc)
.toList();
Stream.of(items)
.map(DocumentoResoDTO::getRagSoc)
.distinct()
.forEach(x -> {
this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
long count = Stream.of(dataset)
.filter(y -> y.getRagSoc().equalsIgnoreCase(x))
.count();
for(int i = 0; i < count; i++) this.mSectionTitleItems.add(String.valueOf(x.charAt(0)));
});
return items;
}
}

View File

@@ -1,154 +1,192 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core;
import android.app.Dialog;
import android.content.Context;
import android.view.View;
import androidx.lifecycle.MutableLiveData;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.annimon.stream.Optional;
import com.annimon.stream.Stream;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.R;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.core.exception.InvalidLUException;
import it.integry.integrywmsnative.core.exception.NoLUFoundException;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
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.dialog.DialogUltimiArriviFornitoreFiltroAvanzato;
import it.integry.integrywmsnative.core.utility.UtilityBarcode;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest.UltimiArriviFornitoreRESTConsumer;
public class UltimiArriviFornitoreViewModel {
private Context mContext;
private FragmentUltimiArriviFornitoreBinding mBinding;
private final MutableLiveData<List<GtbAnag>> mGtbAnagClienti = new MutableLiveData<>();
private final MutableLiveData<List<DocumentoResoDTO>> mDocuments = new MutableLiveData<>();
private List<DocumentoResoDTO> mItems;
private List<DocumentoResoDTO> mRenderedItems = new ArrayList<>();
private final UltimiArriviFornitoreRESTConsumer mUltimiArriviFornitoreRESTConsumer;
private final BarcodeRESTConsumer mBarcodeRESTConsumer;
private final ColliMagazzinoRESTConsumer mColliMagazzinoRESTConsumer;
private List<GtbAnag> mAvailableGtbAnags = null;
private Listener mListener;
private UltimiArriviFornitoreListAdapter mAdapter;
private String mCodMdep;
private DialogUltimiArriviFornitoreFiltroAvanzato.DialogUltimiArriviFiltroAvanzatoViewModel mAppliedFilterViewModel;
public UltimiArriviFornitoreViewModel(Context context, FragmentUltimiArriviFornitoreBinding binding) {
this.mContext = context;
this.mBinding = binding;
this.mBinding.mainFab.hide();
this.mBinding.mainFab.setOnClickListener(v -> {
dispatchConsegne();
});
openFilterDialog();
@Inject
public UltimiArriviFornitoreViewModel(
UltimiArriviFornitoreRESTConsumer ultimiArriviFornitoreRESTConsumer,
BarcodeRESTConsumer barcodeRESTConsumer,
ColliMagazzinoRESTConsumer colliMagazzinoRESTConsumer) {
this.mUltimiArriviFornitoreRESTConsumer = ultimiArriviFornitoreRESTConsumer;
this.mBarcodeRESTConsumer = barcodeRESTConsumer;
this.mColliMagazzinoRESTConsumer = colliMagazzinoRESTConsumer;
}
private void initDataAdapter(ArrayList<DocumentoResoDTO> dataset) {
mAdapter = new UltimiArriviFornitoreListAdapter(mContext, dataset);
mAdapter.setOnSelectionChanged(this::onSingleSelectionChanged);
mBinding.recyclerView.setHasFixedSize(true);
mBinding.recyclerView.setLayoutManager(new LinearLayoutManager(mContext));
mBinding.recyclerView.setAdapter(mAdapter);
mBinding.fastscroll.setRecyclerView(mBinding.recyclerView);
public void init(String codMdep) {
this.mCodMdep = codMdep;
}
public void openFilterDialog() {
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
public void loadCodAnagFornitori(RunnableArgs<List<GtbAnag>> onComplete) {
this.sendOnLoadingStarted();
UltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> {
mAvailableGtbAnags = gtbAnags;
progressDialog.dismiss();
this.mUltimiArriviFornitoreRESTConsumer.getAvailableCodAnagFornitori(gtbAnags -> {
mGtbAnagClienti.postValue(gtbAnags);
this.sendOnLoadingEnded();
DialogUltimiArriviFornitoreFiltroAvanzato.make(mContext, mAvailableGtbAnags, mAppliedFilterViewModel, (filter) -> {
mAppliedFilterViewModel = filter;
refreshItems();
}).show();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
onComplete.run(gtbAnags);
}, this::sendError);
}
public void loadArriviFornitori(String codAnag, List<MtbAart> mtbAarts, int limitDocsForCli, int limitDays) {
this.sendOnLoadingStarted();
this.mUltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(mCodMdep, codAnag, mtbAarts, limitDocsForCli, limitDays, documentList -> {
this.mDocuments.postValue(documentList);
this.sendOnLoadingEnded();
}, this::sendError);
}
private void dispatchConsegne() {
List<DocumentoResoDTO> selectedConsegne = getSelectedItems();
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
PickingResiActivity.startActivity(mContext, mContext.getText(R.string.ultime_arrivi_fornitore_title).toString(), selectedConsegne, -1);
}
this.sendOnLoadingStarted();
private List<DocumentoResoDTO> getSelectedItems() {
return Stream.of(this.mItems)
.filter(DocumentoResoDTO::isSelected)
.toList();
}
Runnable onBarcodeScanComplete = () -> {
onComplete.run();
this.sendOnLoadingEnded();
};
private void refreshItems(){
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
String currentAnagFilter = mAppliedFilterViewModel != null ? mAppliedFilterViewModel.ragSoc.get() : null;
String currentCodAnagFilter = null;
Optional<GtbAnag> singleGtbAnag = Stream.of(mAvailableGtbAnags)
.filter(x -> (x.getCodAnag() + " - " + x.getRagSoc()).equals(currentAnagFilter))
.findSingle();
if(singleGtbAnag.isPresent()) {
currentCodAnagFilter = singleGtbAnag.get().getCodAnag();
if (UtilityBarcode.isEtichettaAnonima(barcodeScanDTO)) {
this.executeEtichettaLU(barcodeScanDTO.getStringValue(), onBarcodeScanComplete);
} else if (UtilityBarcode.isEtichetta128(barcodeScanDTO)) {
this.executeEtichettaEan128(barcodeScanDTO, onBarcodeScanComplete);
} else {
onComplete.run();
}
UltimiArriviFornitoreRESTConsumer.getUltimeConsegneFornitori(
SettingsManager.i().getUserSession().getDepo().getCodMdep(),
currentCodAnagFilter,
null,
null,
365,
consegne -> {
this.mItems = consegne;
this.initDataAdapter(consegne);
mBinding.emptyView.setVisibility((this.mItems != null && this.mItems.size() > 0) ? View.GONE : View.VISIBLE);
mRenderedItems.clear();
if(this.mItems != null) mRenderedItems.addAll(this.mItems);
mAdapter.updateItems(mRenderedItems);
progressDialog.dismiss();
}, ex -> {
UtilityExceptions.defaultException(mContext, ex, progressDialog);
});
}
private void onSingleSelectionChanged(DocumentoResoDTO dto) {
List<DocumentoResoDTO> selectedOrders = getSelectedItems();
private void executeEtichettaLU(String SSCC, Runnable onComplete) {
this.mColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> {
if(dto.isSelected()) {
Stream.of(selectedOrders)
.filter(x -> !x.getRagSoc().equalsIgnoreCase(dto.getRagSoc()))
.forEach(x -> x.setSelected(false));
}
if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) {
if(mtbColt.getSegno() > 0) {
if(selectedOrders != null && selectedOrders.size() > 0) {
mBinding.mainFab.show();
}
else {
mBinding.mainFab.hide();
}
this.sendOnMtbColtScanned(mtbColt);
// this.mOrdiniUscitaElencoRESTConsumer.getOrdiniFromCommessaCollo(mCurrentCodMdep, mtbColt, orderList -> {
//
// if(orderList != null && orderList.size() > 0) {
// List<Integer> numOrds = Stream.of(orderList)
// .map(DtbOrdt::getNumOrd)
// .toList();
//
// List<OrdiniUscitaElencoDTO> filteredOrders = Stream.of(mOrderList.getValue())
// .filter(x -> numOrds.contains(x.getNumOrd())).toList();
//
// onComplete.run(filteredOrders);
// } else {
// this.sendError(new NoOrderFoundException());
// }
//
// }, this::sendError);
} else {
this.sendError(new InvalidLUException());
}
} else {
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.mBarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> {
String barcodeProd = null;
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) barcodeProd = ean128Model.Sscc;
if (!UtilityString.isNullOrEmpty(ean128Model.Gtin)) barcodeProd = ean128Model.Gtin;
if (!UtilityString.isNullOrEmpty(ean128Model.Content))
barcodeProd = ean128Model.Content;
if (!UtilityString.isNullOrEmpty(barcodeProd)) {
if (!UtilityString.isNullOrEmpty(ean128Model.Sscc)) {
this.executeEtichettaLU(ean128Model.Sscc, onComplete);
} else {
this.sendError(new NoLUFoundException());
}
} else {
//EAN 128 non completo o comunque mancano i riferimenti al prodotto
this.sendError(new NoLUFoundException());
}
}, this::sendError);
}
public MutableLiveData<List<GtbAnag>> getGtbAnagClienti() {
return mGtbAnagClienti;
}
public MutableLiveData<List<DocumentoResoDTO>> getDocuments() {
return mDocuments;
}
public UltimiArriviFornitoreViewModel setListener(UltimiArriviFornitoreViewModel.Listener listener) {
this.mListener = listener;
return this;
}
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 sendOnMtbColtScanned(MtbColt scannedMtbColt) {
if (this.mListener != null) mListener.onMtbColtScanned(scannedMtbColt);
}
public interface Listener extends ILoadingListener {
void onError(Exception ex);
void onMtbColtScanned(MtbColt scannedMtbColt);
}
}

View File

@@ -1,49 +1,62 @@
package it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.rest;
import com.annimon.stream.Stream;
import com.google.gson.reflect.TypeToken;
import org.apache.commons.lang3.StringUtils;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.utility.UtilityDB;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.model.MtbAart;
import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDB;
@Singleton
public class UltimiArriviFornitoreRESTConsumer {
public static void getAvailableCodAnagFornitori(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
private final SystemRESTConsumer systemRESTConsumer;
public UltimiArriviFornitoreRESTConsumer(SystemRESTConsumer systemRESTConsumer) {
this.systemRESTConsumer = systemRESTConsumer;
}
public void getAvailableCodAnagFornitori(RunnableArgs<List<GtbAnag>> onComplete, RunnableArgs<Exception> onFailed) {
String sql = "SELECT DISTINCT gtb_anag.cod_anag, gtb_anag.rag_soc " +
"FROM gtb_anag " +
"INNER JOIN atb_forn ON atb_forn.cod_anag = gtb_anag.cod_anag " +
"WHERE flag_stato = 'A'";
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<GtbAnag>>() {
@Override
public void onSuccess(ArrayList<GtbAnag> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
Type typeOfObjectsList = new TypeToken<ArrayList<GtbAnag>>() {
}.getType();
this.systemRESTConsumer.<ArrayList<GtbAnag>>processSql(sql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}
public static void getUltimeConsegneFornitori(String codMdep, String codAnag, String codMart, Integer limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
public void getUltimeConsegneFornitori(String codMdep, String codAnag, List<MtbAart> mtbAarts, int limitConsegnePerCli, int limitDays, RunnableArgs<ArrayList<DocumentoResoDTO>> onComplete, RunnableArgs<Exception> onFailed) {
String codMarts = null;
if (mtbAarts != null && mtbAarts.size() > 0) {
codMarts = StringUtils.join(Stream.of(mtbAarts)
.map(MtbAart::getCodMart)
.toList(), "|");
}
String sql = "SELECT consegne.*, " +
" rag_soc " +
"FROM WMS_GetUltimeConsegneFornitori(" +
UtilityDB.valueToString(limitConsegnePerCli) + ", " +
UtilityDB.valueToString(limitConsegnePerCli >= 0 ? limitConsegnePerCli : null) + ", " +
UtilityDB.valueToString(codAnag) + ", " +
UtilityDB.valueToString(codMart) + ", " +
UtilityDB.valueToString(codMarts) + ", " +
UtilityDB.valueToString(codMdep) + ", " +
UtilityDB.valueToString(limitDays) + ") consegne " +
"LEFT OUTER JOIN gtb_anag ON consegne.cod_anag = gtb_anag.cod_anag " +
@@ -51,17 +64,12 @@ public class UltimiArriviFornitoreRESTConsumer {
" counter_consegna ";
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {}.getType();
SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback<ArrayList<DocumentoResoDTO>>() {
@Override
public void onSuccess(ArrayList<DocumentoResoDTO> value) {
if(onComplete != null) onComplete.run(value);
}
@Override
public void onFailed(Exception ex) {
if(onFailed != null) onFailed.run(ex);
}
Type typeOfObjectsList = new TypeToken<ArrayList<DocumentoResoDTO>>() {
}.getType();
this.systemRESTConsumer.<ArrayList<DocumentoResoDTO>>processSql(sql, typeOfObjectsList, value -> {
if (onComplete != null) onComplete.run(value);
}, ex -> {
if (onFailed != null) onFailed.run(ex);
});
}

View File

@@ -40,7 +40,7 @@ import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBindin
import it.integry.integrywmsnative.gest.versamento_merce.core.VersamentoMerceHelper;
import it.integry.integrywmsnative.view.dialogs.DialogAskLivelloPosizione;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View;
import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO;
@@ -76,9 +76,10 @@ public class VersamentoMerceViewModel {
} else if (mtbColt.getGestioneEnum() == GestioneEnum.VENDITA) {
setMtbColt(mtbColt);
} else {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(Html.fromHtml("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>")),
null, this::openLU).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(Html.fromHtml("Sono accettate solamente UL di <b>Acquisto</b> o <b>Lavorazione</b> di <b>CARICO</b>")),
null, this::openLU)
.show(mContext.getSupportFragmentManager(), "tag");;
}
}).show();
}
@@ -96,7 +97,7 @@ public class VersamentoMerceViewModel {
BarcodeManager.disable();
Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext);
if (UtilityBarcode.isEtichettaPosizione(data)) {
if (UtilityBarcode.isEtichettaPosizione(data, false)) {
progressDialog.show();
this.executeEtichettaPosizione(data, progressDialog);
} else if (data.getType() == BarcodeType.EAN8 || data.getType() == BarcodeType.EAN13 || data.getType() == BarcodeType.UPCA) {
@@ -151,9 +152,10 @@ public class VersamentoMerceViewModel {
}
private void showTooMuchULFound() {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(mContext.getResources().getText(R.string.too_much_lu_found_message_in_mono_lu)),
null, null).show();
null, null)
.show(mContext.getSupportFragmentManager(), "tag");
}
private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, Dialog progressDialog) {
@@ -429,18 +431,19 @@ public class VersamentoMerceViewModel {
private void askULVenditaConfirm(RunnableArgs<Boolean> callback) {
DialogSimpleMessageHelper.makeWarningDialog(
mContext,
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(mContext.getResources().getString(R.string.lu_gest_v_loading_alert)),
null,
() -> callback.run(true),
() -> callback.run(false)).show();
() -> callback.run(false))
.show(mContext.getSupportFragmentManager(), "tag");
}
private void showWrongGestioneUL() {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(Html.fromHtml(mContext.getResources().getText(R.string.gestione_V_not_accepted_message).toString())),
null, null).show();
null, null)
.show(mContext.getSupportFragmentManager(), "tag");
}

View File

@@ -3,48 +3,52 @@ package it.integry.integrywmsnative.view.dialogs;
import android.content.Context;
import android.text.SpannableString;
import androidx.appcompat.app.AppCompatActivity;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class DialogCommon {
public static void showNoArtFoundDialog(@NotNull Context context, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeWarningDialog(context,
new SpannableString(context.getResources().getText(R.string.no_result_from_barcode)),
null, onPositiveClick).show();
DialogSimpleMessageView
.makeWarningDialog(new SpannableString(context.getResources().getText(R.string.no_result_from_barcode)),
null, onPositiveClick)
.show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");
}
public static void showNoULFound(@NotNull Context context, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeWarningDialog(context,
new SpannableString(context.getResources().getText(R.string.no_lu_found_message)),
null, onPositiveClick).show();
DialogSimpleMessageView.makeWarningDialog(new SpannableString(context.getResources().getText(R.string.no_lu_found_message)),
null, onPositiveClick)
.show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");
}
public static void showNoOrderFound(@NotNull Context context, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeWarningDialog(context,
new SpannableString(context.getResources().getText(R.string.no_orders_found_message)),
null, onPositiveClick).show();
DialogSimpleMessageView.makeWarningDialog(new SpannableString(context.getResources().getText(R.string.no_orders_found_message)),
null, onPositiveClick)
.show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");;
}
public static void showDataSaved(@NotNull Context context, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeSuccessDialog(
context,
DialogSimpleMessageView.makeSuccessDialog(
context.getResources().getString(R.string.completed),
new SpannableString(context.getResources().getString(R.string.data_saved)),
null, onPositiveClick).show();
null, onPositiveClick)
.show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");
}
public static void showRestError(@NotNull Context context, Exception ex, @Nullable Runnable onPositiveClick) {
DialogSimpleMessageHelper.makeErrorDialog(context,
new SpannableString(ex.getMessage()), null, onPositiveClick).show();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(ex.getMessage()), null, onPositiveClick)
.show(((AppCompatActivity) context).getSupportFragmentManager(), "tag");
}
}

View File

@@ -1,243 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.base;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.text.SpannableString;
import android.text.Spanned;
import android.view.LayoutInflater;
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.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
import java.util.HashMap;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.databinding.DialogBaseBinding;
/**
* Created by GiuseppeS on 22/03/2018.
*/
public class DialogSimpleMessageHelper {
public enum TYPE {
INFO(1),
SUCCESS(2),
WARNING(3),
ERROR(4);
private int value;
TYPE(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
public static TYPE fromInt(int value) {
for (TYPE b : TYPE.values()) {
if (b.value == value) return b;
}
return null;
}
}
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) {
case INFO:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.light_blue_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_info_78dp, null);
break;
case SUCCESS:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.green_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_done_white_24dp, null);
break;
case WARNING:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.yellow_600);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_warning_white_24dp, null);
break;
case ERROR:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.red_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_mood_bad_24dp, null);
break;
}
DialogSimpleMessageViewModel viewModel = new DialogSimpleMessageViewModel(dialog);
viewModel
.setOnPositive(onPositiveClick)
.setOnNeutral(onNeutralClick)
.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);
mBinding.setViewmodel(viewModel);
Rect displayRectangle = new Rect();
Window window = ((Activity) mContext).getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);
mBinding.titleContainer.setMinimumWidth((int) (displayRectangle.width() * 0.8f));
//Title VIEW
mBinding.titleText.setText(titleText);
ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE);
mBinding.titleIcon.setImageTintList(colorStateList);
mBinding.titleIcon.setImageDrawable(titleIconRes);
mBinding.titleContainer.setBackgroundColor(colorBackgroundTitle);
//Content View
mBinding.descriptionText.setText(messageText);
LinearLayout hashMapContainer = mBinding.dialogContentHashmap;
if (hashmapContent != null) {
for (int i = 0; i < hashmapContent.keySet().size(); i++) {
String currentKey = hashmapContent.keySet().toArray()[i].toString();
String currentValue = hashmapContent.get(currentKey);
RelativeLayout singleMapContent = (RelativeLayout) inflater.inflate(R.layout.dialog_custom_content_hashmap_viewmodel, null);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_key)).setText(currentKey);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_value)).setText(currentValue);
hashMapContainer.addView(singleMapContent);
}
}
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
dialog.setContentView(mBinding.getRoot());
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
return dialog;
}
public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.INFO,
mContext,
titleText,
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static Dialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return makeBase(TYPE.INFO,
mContext,
titleText,
messageText,
hashmapContent,
onPositiveClick,
onNegativeClick, -1, null);
}
public static Dialog makeSuccessDialog(Context mContext, String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.SUCCESS,
mContext,
titleText,
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
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);
}
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(),
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static void showSimpleWarningDialog(Context context, String message) {
makeErrorDialog(
context,
new SpannableString(message),
null,
null).show();
}
public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return makeBase(TYPE.ERROR,
mContext,
mContext.getText(R.string.ops).toString(),
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static void showSimpleErrorDialog(Context context, String message) {
makeErrorDialog(
context,
new SpannableString(message),
null,
null).show();
}
public static Dialog makeErrorDialog(Context mContext, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) {
return makeBase(TYPE.ERROR,
mContext,
mContext.getText(R.string.ops).toString(),
messageText,
hashmapContent,
onPositiveClick,
null, rNeutralButtonString, onNeutralClick);
}
}

View File

@@ -0,0 +1,289 @@
package it.integry.integrywmsnative.view.dialogs.base;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Spanned;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.widget.LinearLayoutCompat;
import androidx.core.content.ContextCompat;
import androidx.core.content.res.ResourcesCompat;
import androidx.databinding.DataBindingUtil;
import java.util.HashMap;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.utility.UtilityDialog;
import it.integry.integrywmsnative.core.utility.UtilityResources;
import it.integry.integrywmsnative.databinding.DialogBaseBinding;
/**
* Created by GiuseppeS on 22/03/2018.
*/
public class DialogSimpleMessageView extends BaseDialogFragment {
public enum TYPE {
INFO(1),
SUCCESS(2),
WARNING(3),
ERROR(4);
private int value;
TYPE(int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
public static TYPE fromInt(int value) {
for (TYPE b : TYPE.values()) {
if (b.value == value) return b;
}
return null;
}
}
private final TYPE mType;
private final String mTitleText;
private final Spanned mMessageText;
private final HashMap<String, String> mHashmapContent;
private final Runnable mOnPositiveClick;
private final Runnable mOnNegativeClick;
private final @StringRes Integer mRNeutralButtonString;
private final Runnable mOnNeutralClick;
private String positiveButtonText;
private String neutralButtonText;
private String negativeButtonText;
private DialogBaseBinding mBindings;
private Context mContext;
public static DialogSimpleMessageView newInstance(@NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap<String, String> hashmapContent , Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) {
return new DialogSimpleMessageView(type, titleText, messageText, hashmapContent, onPositiveClick, onNegativeClick, rNeutralButtonString, onNeutralClick);
}
private DialogSimpleMessageView(@NonNull TYPE type, @NonNull String titleText, @NonNull Spanned messageText, HashMap<String, String> hashmapContent , Runnable onPositiveClick, Runnable onNegativeClick, @StringRes Integer rNeutralButtonString, Runnable onNeutralClick) {
super();
this.mType = type;
this.mTitleText = titleText;
this.mMessageText = messageText;
this.mHashmapContent = hashmapContent;
this.mOnPositiveClick = onPositiveClick;
this.mOnNegativeClick = onNegativeClick;
this.mRNeutralButtonString = rNeutralButtonString;
this.mOnNeutralClick = onNeutralClick;
}
@Override
public void onStart() {
super.onStart();
UtilityDialog.setTo90PercentWidth(this.mContext, this);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
this.mContext = getActivity();
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_base, container, false);
mBindings.setView(this);
mBindings.setLifecycleOwner(this);
getDialog().setCanceledOnTouchOutside(false);
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
int colorBackgroundTitle = -1;
Drawable titleIconRes = null;
switch (mType) {
case INFO:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.light_blue_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_info_78dp, null);
break;
case SUCCESS:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.green_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_done_white_24dp, null);
break;
case WARNING:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.yellow_600);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_warning_white_24dp, null);
break;
case ERROR:
colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.red_300);
titleIconRes = ResourcesCompat.getDrawable(mContext.getResources(), R.drawable.ic_mood_bad_24dp, null);
break;
}
this.positiveButtonText = mContext.getText(R.string.ok).toString();
this.negativeButtonText = mContext.getText(R.string.no).toString();
//Title VIEW
mBindings.titleText.setText(mTitleText);
ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE);
mBindings.titleIcon.setImageTintList(colorStateList);
mBindings.titleIcon.setImageDrawable(titleIconRes);
mBindings.titleContainer.setBackgroundColor(colorBackgroundTitle);
//Content View
mBindings.descriptionText.setText(mMessageText);
LinearLayoutCompat hashMapContainer = mBindings.dialogContentHashmap;
if (mHashmapContent != null) {
for (int i = 0; i < mHashmapContent.keySet().size(); i++) {
String currentKey = mHashmapContent.keySet().toArray()[i].toString();
String currentValue = mHashmapContent.get(currentKey);
RelativeLayout singleMapContent = (RelativeLayout) inflater.inflate(R.layout.dialog_custom_content_hashmap_viewmodel, null);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_key)).setText(currentKey);
((TextView) singleMapContent.findViewById(R.id.dialog_content_hashmap_value)).setText(currentValue);
hashMapContainer.addView(singleMapContent);
}
}
return mBindings.getRoot();
}
public boolean isPositiveVisible() {
return mOnPositiveClick != null;
}
public boolean isNeutralVisible() {
return mOnNeutralClick != null;
}
public boolean isNegativeVisible() {
return mOnNegativeClick != null;
}
public String getPositiveButtonText() {
return positiveButtonText;
}
public String getNeutralButtonText() {
return mRNeutralButtonString != null && mRNeutralButtonString != -1 ? mContext.getText(mRNeutralButtonString).toString() : null;
}
public String getNegativeButtonText() {
return negativeButtonText;
}
public void onPositiveClick() {
dismiss();
if(mOnPositiveClick != null) mOnPositiveClick.run();
}
public void onNeutralClick() {
dismiss();
if(mOnNeutralClick != null) mOnNeutralClick.run();
}
public void onNegativeClick() {
dismiss();
if(mOnNegativeClick != null) mOnNegativeClick.run();
}
public static DialogSimpleMessageView makeInfoDialog(String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.INFO,
titleText,
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static DialogSimpleMessageView makeInfoDialog(String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return newInstance(TYPE.INFO,
titleText,
messageText,
hashmapContent,
onPositiveClick,
onNegativeClick, -1, null);
}
public static DialogSimpleMessageView makeSuccessDialog(String titleText, Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.SUCCESS,
titleText,
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static DialogSimpleMessageView makeWarningDialog(Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick) {
return newInstance(TYPE.WARNING,
UtilityResources.getString(R.string.warning),
messageText,
hashmapContent,
onPositiveClick,
() -> {
if (onNegativeClick != null) onNegativeClick.run();
}, -1, null);
}
public static DialogSimpleMessageView makeWarningDialog(Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.WARNING,
UtilityResources.getString(R.string.warning),
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static DialogSimpleMessageView makeErrorDialog(Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick) {
return newInstance(TYPE.ERROR,
UtilityResources.getString(R.string.ops),
messageText,
hashmapContent,
onPositiveClick,
null, -1, null);
}
public static DialogSimpleMessageView makeErrorDialog(Spanned messageText, HashMap<String, String> hashmapContent, Runnable onPositiveClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick) {
return newInstance(TYPE.ERROR,
UtilityResources.getString(R.string.ops),
messageText,
hashmapContent,
onPositiveClick,
null, rNeutralButtonString, onNeutralClick);
}
}

View File

@@ -1,91 +0,0 @@
package it.integry.integrywmsnative.view.dialogs.base;
import android.app.Dialog;
public class DialogSimpleMessageViewModel {
private Dialog mDialog;
private Runnable onPositive;
private Runnable onNeutral;
private Runnable onNegative;
private String positiveButtonText;
private String neutralButtonText;
private String negativeButtonText;
public DialogSimpleMessageViewModel(Dialog dialog) {
mDialog = dialog;
}
public DialogSimpleMessageViewModel setOnPositive(Runnable onPositive) {
this.onPositive = onPositive;
return this;
}
public DialogSimpleMessageViewModel setOnNeutral(Runnable onNeutral) {
this.onNeutral = onNeutral;
return this;
}
public DialogSimpleMessageViewModel setOnNegative(Runnable onNegative) {
this.onNegative = onNegative;
return this;
}
public boolean isPositiveVisible() {
return onPositive != null;
}
public boolean isNeutralVisible() {
return onNeutral != null;
}
public boolean isNegativeVisible() {
return onNegative != null;
}
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();
}
public void onNeutralClick() {
mDialog.dismiss();
if(onNeutral != null) onNeutral.run();
}
public void onNegativeClick() {
mDialog.dismiss();
if(onNegative != null) onNegative.run();
}
}

View File

@@ -1,6 +1,5 @@
package it.integry.integrywmsnative.view.dialogs.camera_barcode_reader;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
@@ -53,7 +52,6 @@ public class DialogCameraBarcodeReader extends DialogFragment implements Barcode
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_camera_barcode_reader, container, false);
UtilityDialog.setTo95PercentWidth(mContext, this);
getDialog().setCanceledOnTouchOutside(false);
getDialog().setCancelable(false);
@@ -68,6 +66,13 @@ public class DialogCameraBarcodeReader extends DialogFragment implements Barcode
return mBindings.getRoot();
}
@Override
public void onStart() {
super.onStart();
UtilityDialog.setTo95PercentWidth(mContext, this);
}
@Override
public void onStop() {
super.onStop();

View File

@@ -25,7 +25,7 @@ public class DialogInputQuantityV2DTO {
private BigDecimal totalNumCnfAvailable;
private BigDecimal qtaCnfAvailable;
private boolean canPartitaMagBeChanged;
private boolean canPartitaMagBeChanged = true;
private boolean canLUBeClosed;
private String partitaMag;

View File

@@ -41,7 +41,7 @@ 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.databinding.DialogInputQuantityV2Binding;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class DialogInputQuantityV2View extends BaseDialogFragment implements DialogInputQuantityV2ViewModel.Listener {
@@ -66,7 +66,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
public ObservableField<Boolean> enabledChangePartitaMag = new ObservableField<>(true);
public ObservableField<Boolean> enabledLUCloseButton = new ObservableField<>(true);
public Context context;
private Context context;
private DialogInputQuantityV2Binding mBindings;
private boolean mEnableDataCallback = true;
@@ -99,6 +99,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
this.context = getActivity();
mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_v2, container, false);
mBindings.setLifecycleOwner(this);
mBindings.toolbar.setTitle("Inserimento articolo");
@@ -144,12 +145,11 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
BarcodeManager.disable();
this.openProgress();
this.mViewModel.processBarcodeDTO(data, () -> {
BarcodeManager.enable();
this.closeProgress();
BarcodeManager.enable();
});
};
@@ -318,6 +318,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
}));
this.mViewModel.setCanPartitaMagBeChanged(this.mDialogInputQuantityV2DTO.isCanPartitaMagBeChanged());
this.enabledChangePartitaMag.set(this.mDialogInputQuantityV2DTO.isCanPartitaMagBeChanged());
this.enabledLUCloseButton.set(this.mDialogInputQuantityV2DTO.isCanLUBeClosed());
}
@@ -356,6 +357,8 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia
@Override
public void onError(Exception ex) {
DialogSimpleMessageHelper.makeErrorDialog(this.context, new SpannableString(Html.fromHtml(ex.getMessage())), null, null).show();
DialogSimpleMessageView
.makeErrorDialog(new SpannableString(Html.fromHtml(ex.getMessage())), null, null)
.show(getActivity().getSupportFragmentManager(), "tag");;
}
}

View File

@@ -59,6 +59,7 @@ public class DialogInputQuantityV2ViewModel {
private Date internalDataScad;
private boolean canOverflowOrderQuantity;
private boolean canPartitaMagBeChanged;
private Listener mListener;
@@ -124,6 +125,9 @@ public class DialogInputQuantityV2ViewModel {
this.setNumCnf(BigDecimal.ONE);
this.setQtaCnf(UtilityBigDecimal.divide(this.getQtaTot(), this.getNumCnf()));
}
this.unlockNumCnf();
this.unlockQtaCnf();
}
onComplete.run();
@@ -135,18 +139,21 @@ public class DialogInputQuantityV2ViewModel {
return;
}
if (!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) {
this.setPartitaMag(ean128Model.BatchLot);
}
if(canPartitaMagBeChanged) {
try {
if (!UtilityString.isNullOrEmpty(ean128Model.BestBefore)) {
this.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore));
} else if (!UtilityString.isNullOrEmpty(ean128Model.Expiry)) {
this.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry));
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);
}
} catch (Exception ex) {
this.mListener.onError(ex);
}
if (ean128Model.Count != null && ean128Model.Count > 0) {
@@ -160,6 +167,9 @@ public class DialogInputQuantityV2ViewModel {
this.setNumCnf(BigDecimal.ONE);
this.setQtaCnf(UtilityBigDecimal.divide(this.getQtaTot(), this.getNumCnf()));
}
this.unlockNumCnf();
this.unlockQtaCnf();
}
this.mListener.onDataChanged();
@@ -262,6 +272,11 @@ public class DialogInputQuantityV2ViewModel {
return this;
}
public DialogInputQuantityV2ViewModel setCanPartitaMagBeChanged(boolean canPartitaMagBeChanged) {
this.canPartitaMagBeChanged = canPartitaMagBeChanged;
return this;
}
public DialogInputQuantityV2ViewModel setPartitaMag(String internalPartitaMag) {
this.internalPartitaMag = internalPartitaMag;
return this;
@@ -289,10 +304,10 @@ public class DialogInputQuantityV2ViewModel {
// return;
}
if (!this.blockedQtaTot.get() && this.internalQtaCnf != null)
if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalQtaTot != null)
this.internalQtaCnf = UtilityBigDecimal.divide(internalQtaTot, newValue);
else if (!this.blockedQtaTot.get() && this.internalQtaCnf != null)
this.internalQtaTot = UtilityBigDecimal.multiply(newValue, this.internalQtaCnf);
else if (!this.blockedQtaCnf.get() && !this.mtbAart.get().isFlagQtaCnfFissaBoolean() && this.internalQtaTot != null)
this.internalQtaCnf = UtilityBigDecimal.divide(newValue, internalQtaTot);
this.mListener.onDataChanged();
}
@@ -336,6 +351,18 @@ public class DialogInputQuantityV2ViewModel {
this.mListener.onDataChanged();
}
private void unlockNumCnf() {
this.blockedNumCnf.set(false);
}
private void unlockQtaCnf() {
this.blockedQtaCnf.set(false);
}
private void unlockQtaCol() {
this.blockedQtaTot.set(false);
}
public boolean validate() {
if (this.internalQtaCnf == null || UtilityBigDecimal.equalsTo(this.internalQtaCnf, BigDecimal.ZERO)) {

View File

@@ -8,6 +8,7 @@ import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import com.annimon.stream.Stream;
@@ -31,7 +32,7 @@ import it.integry.integrywmsnative.core.utility.UtilityProgress;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding;
import it.integry.integrywmsnative.view.dialogs.DialogCommon;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
import it.integry.integrywmsnative.view.dialogs.basket_lu.DialogBasketLU;
public class DialogScanOrCreateLU {
@@ -198,13 +199,13 @@ public class DialogScanOrCreateLU {
} else {
if(mtbColt.getCodDtip() != null && mShouldCheckIfExistDoc) {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(mContext.getResources().getText(R.string.lu_already_attache_to_doc)),
null, () -> {
BarcodeManager.enable();
progressDialog.dismiss();
})
.show();
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
} else {
BarcodeManager.enable();
@@ -231,17 +232,15 @@ public class DialogScanOrCreateLU {
if(mtbColt != null) {
if(mtbColt.getCodDtip() != null && mShouldCheckIfExistDoc) {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(mContext.getResources().getText(R.string.lu_already_attache_to_doc)),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(mContext.getResources().getText(R.string.lu_already_attache_to_doc)),
null, () -> {
BarcodeManager.enable();
progressDialog.dismiss();
})
.show();
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
} else {
if(mtbColt.getGestioneEnum() == GestioneEnum.VENDITA && mtbColt.getSegno() == -1) {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
new SpannableString(mContext.getResources().getText(R.string.lu_gest_v_loading_alert)),
DialogSimpleMessageView.makeWarningDialog(new SpannableString(mContext.getResources().getText(R.string.lu_gest_v_loading_alert)),
null, () -> {
BarcodeManager.enable();
sendMtbColt(mtbColt, progressDialog, false);
@@ -249,7 +248,7 @@ public class DialogScanOrCreateLU {
BarcodeManager.enable();
progressDialog.dismiss();
})
.show();
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
} else {
BarcodeManager.enable();
@@ -287,9 +286,10 @@ public class DialogScanOrCreateLU {
private void showTooMuchULFound() {
DialogSimpleMessageHelper.makeWarningDialog(mContext,
DialogSimpleMessageView.makeWarningDialog(
new SpannableString(mContext.getResources().getText(R.string.too_much_lu_found_message_in_mono_lu)),
null, null).show();
null, null)
.show(((AppCompatActivity) mContext).getSupportFragmentManager(), "tag");
}
private void sendMtbColt(MtbColt mtbColtToSend, Dialog progressDialog, boolean created) {

View File

@@ -63,6 +63,64 @@
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:paddingLeft="8dp"
android:paddingTop="12dp"
android:paddingRight="8dp"
android:paddingBottom="12dp">
<androidx.appcompat.widget.LinearLayoutCompat
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">
<androidx.appcompat.widget.AppCompatTextView
style="@style/AppTheme.NewMaterial.Text.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/filtered_arts_in_list" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/description_filter_text"
style="@style/AppTheme.NewMaterial.Text.Medium"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@android:color/black"
android:textSize="16sp"
android:textStyle="bold"
tools:text="COD_ART_HERE" />
</androidx.appcompat.widget.LinearLayoutCompat>
<com.google.android.material.button.MaterialButton
android:id="@+id/remove_art_filter_list"
style="@style/Button.DangerOutline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:onClick="@{() -> pickingResiView.removeListFilter()}"
android:text="@string/remove_filter_button"
app:strokeColor="@color/red_600" />
</RelativeLayout>
</net.cachapa.expandablelayout.ExpandableLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_list"

View File

@@ -7,22 +7,21 @@
<import type="android.view.View" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageViewModel" />
name="view"
type="it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView" />
</data>
<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/base_root"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:orientation="vertical"
app:cardCornerRadius="12dp"
app:cardElevation="0dp">
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
@@ -38,207 +37,193 @@
android:id="@+id/title_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_error_white_24dp"
android:layout_margin="24dp"/>
android:layout_margin="24dp"
android:src="@drawable/ic_error_white_24dp" />
</RelativeLayout>
<LinearLayout
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/base_buttons_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingTop="24dp"
android:paddingStart="8dp"
android:paddingEnd="8dp">
android:paddingEnd="16dp"
android:paddingBottom="16dp">
<LinearLayout
<TextView
android:id="@+id/title_text"
style="@style/TextViewMaterial.DialogTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
tools:text="Title here" />
<TextView
android:id="@+id/description_text"
style="@style/TextViewMaterial"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:gravity="left"
tools:text="Description here" />
<androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/dialog_content_hashmap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:orientation="vertical"
android:paddingStart="16dp"
android:paddingEnd="16dp">
<TextView
android:id="@+id/title_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TextViewMaterial.DialogTitle"
tools:text="Title here"
android:gravity="center_horizontal"/>
<TextView
android:id="@+id/description_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/TextViewMaterial"
tools:text="Description here"
android:gravity="left"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp" />
android:paddingLeft="12dp"
android:paddingRight="12dp">
<LinearLayout
android:id="@+id/dialog_content_hashmap"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:layout_marginTop="12dp">
</androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout>
<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_guideline"
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_guideline"
app:strokeColor="@color/colorPrimary"
android:onClick="@{() -> viewmodel.onNegativeClick()}"
android:text="@{viewmodel.negativeButtonText}"/>
<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_guideline"
app:layout_constraintEnd_toEndOf="parent"
android:onClick="@{() -> viewmodel.onPositiveClick()}"
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/ok_left_buttons_guideline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.25"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/ok_right_buttons_guideline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.75"/>
<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/ok_left_buttons_guideline"
app:layout_constraintEnd_toEndOf="@id/ok_right_buttons_guideline"
android:onClick="@{() -> viewmodel.onPositiveClick()}"
android:text="@{viewmodel.positiveButtonText}"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
<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}">
android:visibility="@{view.negativeVisible &amp;&amp; !view.neutralVisible ? View.VISIBLE : View.GONE}">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/center_guideline"
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
style="@style/Button.PrimaryOutline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:onClick="@{() -> view.onNegativeClick()}"
android:text="@{view.negativeButtonText}"
app:layout_constraintEnd_toStartOf="@id/center_guideline"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:strokeColor="@color/colorPrimary" />
<com.google.android.material.button.MaterialButton
style="@style/Button.PrimaryFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:onClick="@{() -> view.onPositiveClick()}"
android:text="@{view.positiveButtonText}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/center_guideline"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="@{!view.negativeVisible &amp;&amp; !view.neutralVisible ? View.VISIBLE : View.GONE}">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/ok_left_buttons_guideline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.25" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/ok_right_buttons_guideline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.75" />
<com.google.android.material.button.MaterialButton
style="@style/Button.PrimaryFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:onClick="@{() -> view.onPositiveClick()}"
android:text="@{view.positiveButtonText}"
app:layout_constraintEnd_toEndOf="@id/ok_right_buttons_guideline"
app:layout_constraintStart_toStartOf="@id/ok_left_buttons_guideline"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:visibility="@{view.negativeVisible &amp;&amp; view.neutralVisible ? View.VISIBLE : View.GONE}">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/left_buttons_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.33"/>
app:layout_constraintGuide_percent="0.33" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/right_buttons_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.66"/>
app:layout_constraintGuide_percent="0.66" />
<com.google.android.material.button.MaterialButton
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Button.DangerFull"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:onClick="@{() -> view.onNegativeClick()}"
android:text="@{view.negativeButtonText}"
app:layout_constraintEnd_toStartOf="@id/left_buttons_guideline"
android:onClick="@{() -> viewmodel.onNegativeClick()}"
android:text="@{viewmodel.negativeButtonText}"/>
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Button.PrimaryOutline"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="@id/left_buttons_guideline"
android:onClick="@{() -> view.onNeutralClick()}"
android:text="@{view.neutralButtonText}"
app:layout_constraintEnd_toStartOf="@id/right_buttons_guideline"
app:strokeColor="@color/colorPrimary"
android:onClick="@{() -> viewmodel.onNeutralClick()}"
android:text="@{viewmodel.neutralButtonText}"/>
app:layout_constraintStart_toStartOf="@id/left_buttons_guideline"
app:layout_constraintTop_toTopOf="parent"
app:strokeColor="@color/colorPrimary" />
<com.google.android.material.button.MaterialButton
style="@style/Button.PrimaryFull"
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/right_buttons_guideline"
android:onClick="@{() -> view.onPositiveClick()}"
android:text="@{view.positiveButtonText}"
app:layout_constraintEnd_toEndOf="parent"
android:onClick="@{() -> viewmodel.onPositiveClick()}"
android:text="@{viewmodel.positiveButtonText}"/>
app:layout_constraintStart_toStartOf="@id/right_buttons_guideline"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -247,50 +232,49 @@
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}">
android:visibility="@{!view.negativeVisible &amp;&amp; view.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"/>
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_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:onClick="@{() -> view.onNeutralClick()}"
android:text="@{view.neutralButtonText}"
app:layout_constraintEnd_toStartOf="@id/center_guideline2"
app:strokeColor="@color/colorPrimary"
android:onClick="@{() -> viewmodel.onNeutralClick()}"
android:text="@{viewmodel.neutralButtonText}"/>
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:strokeColor="@color/colorPrimary" />
<com.google.android.material.button.MaterialButton
style="@style/Button.PrimaryFull"
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"
android:onClick="@{() -> view.onPositiveClick()}"
android:text="@{view.positiveButtonText}"
app:layout_constraintEnd_toEndOf="parent"
android:onClick="@{() -> viewmodel.onPositiveClick()}"
android:text="@{viewmodel.positiveButtonText}"/>
app:layout_constraintStart_toStartOf="@id/center_guideline2"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</LinearLayout>
</androidx.appcompat.widget.LinearLayoutCompat>
</androidx.cardview.widget.CardView>

View File

@@ -393,7 +393,8 @@
android:layout_height="wrap_content"
android:hint="@string/batch_lot"
android:inputType="text"
app:binding="@{view.currentPartitaMag}" />
app:binding="@{view.currentPartitaMag}"
android:imeOptions="actionDone" />
</com.google.android.material.textfield.TextInputLayout>
@@ -446,7 +447,8 @@
android:layout_height="wrap_content"
android:hint="@string/num_pcks"
android:inputType="number"
app:binding="@{view.currentNumCnf}" />
app:binding="@{view.currentNumCnf}"
android:imeOptions="actionDone" />
</com.google.android.material.textfield.TextInputLayout>
@@ -468,7 +470,8 @@
android:layout_height="wrap_content"
android:hint="@string/qty_x_pck"
android:inputType="numberDecimal"
app:binding="@{view.currentQtaCnf}" />
app:binding="@{view.currentQtaCnf}"
android:imeOptions="actionDone" />
</com.google.android.material.textfield.TextInputLayout>
@@ -480,7 +483,8 @@
android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}"
android:enabled="@{view.enabledQtaTot}"
android:focusableInTouchMode="false"
tools:layout_weight="1">
tools:layout_weight="1"
android:imeOptions="actionDone">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/input_qta_tot_text"

View File

@@ -6,7 +6,11 @@
<data>
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.ultime_consegne_cliente.viewmodel.UltimeConsegneClienteViewModel" />
type="it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteViewModel" />
<variable
name="view"
type="it.integry.integrywmsnative.gest.ultime_consegne_cliente.UltimeConsegneClienteFragment" />
</data>
@@ -29,12 +33,12 @@
android:scrollbars="none"
android:paddingEnd="4dp"/>
<it.integry.integrywmsnative.ui.fastscroll.FastScroller
android:id="@+id/fastscroll"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"/>
<!-- <it.integry.integrywmsnative.ui.fastscroll.FastScroller-->
<!-- android:id="@+id/fastscroll"-->
<!-- android:orientation="vertical"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_alignParentEnd="true"/>-->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/empty_view"

View File

@@ -4,6 +4,10 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="view"
type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.UltimiArriviFornitoreFragment" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.ultimi_arrivi_fornitore.core.UltimiArriviFornitoreViewModel" />
@@ -29,12 +33,12 @@
android:scrollbars="none"
android:paddingEnd="4dp"/>
<it.integry.integrywmsnative.ui.fastscroll.FastScroller
android:id="@+id/fastscroll"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"/>
<!-- <it.integry.integrywmsnative.ui.fastscroll.FastScroller-->
<!-- android:id="@+id/fastscroll"-->
<!-- android:orientation="vertical"-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="match_parent"-->
<!-- android:layout_alignParentEnd="true"/>-->
<androidx.constraintlayout.widget.ConstraintLayout