diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml new file mode 100644 index 00000000..a06c805b --- /dev/null +++ b/.idea/assetWizardSettings.xml @@ -0,0 +1,46 @@ + + + + + + \ No newline at end of file diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser new file mode 100644 index 00000000..f32d8f4d Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..30aa626c --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 96cc43ef..00000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf33..00000000 --- a/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 40b03484..2105900b 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -3,13 +3,15 @@ - + diff --git a/.idea/modules.xml b/.idea/modules.xml index 7af1a597..e0a9141b 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,8 +2,11 @@ - + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Integry.jks b/Integry.jks new file mode 100644 index 00000000..1b30e196 Binary files /dev/null and b/Integry.jks differ diff --git a/app/.gitignore b/app/.gitignore index 796b96d1..956c004d 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1 +1,2 @@ /build +/release \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index bf435e74..636a418b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,14 +1,16 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' android { - compileSdkVersion 25 - buildToolsVersion "27.0.0" + compileSdkVersion 28 + buildToolsVersion '28.0.3' defaultConfig { applicationId "it.integry.integrywmsnative" minSdkVersion 21 - targetSdkVersion 25 - versionCode 1 - versionName "1.0" + targetSdkVersion 28 + versionCode 4 + versionName "1.0.1" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { @@ -17,26 +19,69 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + dataBinding { + enabled = true + } + + compileOptions { + targetCompatibility 1.8 + sourceCompatibility 1.8 + } } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + implementation fileTree(include: ['*.jar'], dir: 'libs') + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:25.3.1' - compile 'com.android.support:support-v4:25.3.1' - compile 'com.android.support:design:25.3.1' - compile 'com.android.support.constraint:constraint-layout:1.0.2' - compile 'com.android.support:cardview-v7:25.3.1' - compile 'com.android.support:recyclerview-v7:25.3.1' - - compile 'com.squareup.retrofit2:retrofit:2.3.0' - compile 'com.squareup.retrofit2:converter-gson:2.0.0' - - compile 'com.jakewharton:butterknife:8.8.1' + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + implementation 'com.orhanobut:logger:2.2.0' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support:support-v4:28.0.0' + implementation 'com.android.support:design:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + implementation 'com.android.support:cardview-v7:28.0.0' + implementation 'com.android.support:recyclerview-v7:28.0.0' + implementation 'com.android.support:preference-v7:28.0.0' + implementation 'com.squareup.retrofit2:retrofit:2.3.0' + implementation 'com.squareup.retrofit2:converter-gson:2.0.0' + implementation 'org.parceler:parceler-api:1.1.10' + annotationProcessor 'org.parceler:parceler:1.1.10' + implementation 'com.annimon:stream:1.2.1' + //MVVM + implementation 'android.arch.lifecycle:extensions:1.1.1' + annotationProcessor "android.arch.lifecycle:compiler:1.1.1" + implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1' + implementation 'com.jakewharton.rxbinding2:rxbinding-support-v4:2.1.1' + implementation 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.1.1' + implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.1.1' + implementation 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.1.1' + implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' + implementation 'br.com.zbra:android-linq:1.1.0' + //FAB + //implementation 'com.getbase:floatingactionbutton:1.10.1' + implementation 'com.github.clans:fab:1.6.4' + //CUSTOM VIEWS + implementation 'de.hdodenhof:circleimageview:2.2.0' + implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2' + implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar' + implementation 'com.github.andrefrsousa:SuperBottomSheet:1.2.1@aar' + implementation 'com.fede987:status-bar-alert:1.0.1' + implementation 'com.fxn769:stash:1.2' + testImplementation 'junit:junit:4.12' + implementation project(':waterfall_toolbar') + implementation 'com.mikhaellopez:lazydatepicker:1.0.0' + implementation 'com.github.demoNo:AutoScrollViewPager:v1.0.2' + + //AppUpdate + implementation 'com.github.javiersantos:AppUpdater:2.7' - testCompile 'junit:junit:4.12' + //Barcode + implementation project(':pointmobilescannerlibrary') + implementation project(path: ':barcode_base_library') +} +repositories { + mavenCentral() } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cbeb923f..062f1753 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,8 +3,10 @@ package="it.integry.integrywmsnative"> + + android:theme="@style/Light" + android:windowSoftInputMode="adjustPan" + android:screenOrientation="portrait"> @@ -24,7 +28,28 @@ + android:theme="@style/Light" + android:screenOrientation="portrait" + android:windowSoftInputMode="adjustNothing" /> + + + + \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java index 1131dda7..1f5340a0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainActivity.java @@ -1,66 +1,103 @@ package it.integry.integrywmsnative; -import android.graphics.Color; -import android.graphics.ColorMatrixColorFilter; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; +import android.content.Intent; +import android.databinding.DataBindingUtil; import android.os.Bundle; -import android.support.annotation.ColorRes; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.design.widget.NavigationView; -import android.support.v4.content.ContextCompat; -import android.support.v4.graphics.drawable.DrawableCompat; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.support.v7.widget.Toolbar; -import android.text.SpannableString; -import android.text.style.ForegroundColorSpan; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; import butterknife.BindView; import butterknife.ButterKnife; +import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; +import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment; +import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.update.UpdatesManager; +import it.integry.integrywmsnative.core.utility.UtilitySettings; +import it.integry.integrywmsnative.databinding.ActivityMainBinding; import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment; -import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.gest.login.LoginActivity; +import it.integry.integrywmsnative.gest.main.MainFragment; +import it.integry.integrywmsnative.gest.rettifica_giacenze.RettificaGiacenzeFragment; +import it.integry.integrywmsnative.gest.settings.MainSettingsFragment; +import it.integry.integrywmsnative.gest.vendita.MainVenditaFragment; +import it.integry.integrywmsnative.gest.versamento_merce.VersamentoMerceFragment; +import it.integry.plugins.waterfalltoolbar.WaterfallToolbar; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { - @BindView(R.id.main_search) SearchView mSearchView; + //@BindView(R.id.drawer_username) TextView mDrawerUsername; + //@BindView(R.id.drawer_logoAzienda) ImageView mDrawerLogo; - @BindView(R.id.nav_view) NavigationView mNavigationView; + private ActivityMainBinding mBinding; + + private boolean firstCheckExecution = true; + private boolean mIsOnline = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - ButterKnife.bind(this); + if(SettingsManager.i().user.username == null && SettingsManager.i().user.password == null){ + startLoginActivity(); + } else { + mBinding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.activity_main, null, false); + setContentView(mBinding.getRoot()); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); - setSupportActionBar(toolbar); + UpdatesManager.init(this); - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); - ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( - this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); - drawer.setDrawerListener(toggle); - toggle.syncState(); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); - mNavigationView = (NavigationView) findViewById(R.id.nav_view); - mNavigationView.setNavigationItemSelectedListener(this); - mSearchView.setVisibility(View.GONE); + ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( + this, mBinding.drawerLayout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); + mBinding.drawerLayout.setDrawerListener(toggle); + toggle.syncState(); + + + mBinding.navView.setNavigationItemSelectedListener(this); + mBinding.appBarMain.mainSearch.setVisibility(View.GONE); + + changeContentFragment(MainFragment.newInstance()); + + init(); + + } + } + private void startLoginActivity(){ + Intent myIntent = new Intent(this, LoginActivity.class); + startActivity(myIntent); + this.finish(); + } + + + @Override public void onBackPressed() { - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + DrawerLayout drawer = findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { @@ -93,69 +130,66 @@ public class MainActivity extends AppCompatActivity @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { + + mBinding.appBarMain.waterfallToolbar.resetElevation(); + mBinding.appBarMain.waterfallToolbar.setRecyclerView(null); + // Handle navigation view item clicks here. -// resetAllMenuItemsTextColor(mNavigationView); - -// int[] menuColorArray = this.getResources().getIntArray(R.array.menuColors); - - Fragment fragment = null; int id = item.getItemId(); if (id == R.id.nav_accettazione) { -// setTextColorForMenuItem(item, menuColorArray[0]); - fragment = MainAccettazioneFragment.newInstance(); this.adaptViewToFragment(fragment); } else if (id == R.id.nav_gallery) { - + fragment = MainVenditaFragment.newInstance(); + this.adaptViewToFragment(fragment); } else if (id == R.id.nav_slideshow) { - + fragment = RettificaGiacenzeFragment.newInstance(); + this.adaptViewToFragment(fragment); } else if (id == R.id.nav_manage) { - - } else if (id == R.id.nav_share) { + fragment = VersamentoMerceFragment.newInstance(); + this.adaptViewToFragment(fragment); + } + /*else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { + }*/ + + + else if(id == R.id.nav_settings){ + fragment = new MainSettingsFragment(); + this.adaptViewToFragment(fragment); } - if (fragment != null) { - FragmentManager fragmentManager = getSupportFragmentManager(); - fragmentManager.beginTransaction() - .replace(R.id.frame_container, fragment).commit(); - + else if(id == R.id.nav_logout){ + UtilitySettings.logout(); + startLoginActivity(); } - DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); + changeContentFragment(fragment); + + DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } - private void resetAllMenuItemsTextColor(NavigationView navigationView) { - for (int i = 0; i < navigationView.getMenu().size(); i++) - setTextColorForMenuItem(navigationView.getMenu().getItem(i), R.color.colorPrimary); + public void popToMain() { + MainFragment mainFragment = MainFragment.newInstance(); + + adaptViewToFragment(mainFragment); + + changeContentFragment(mainFragment); } - private void setTextColorForMenuItem(MenuItem menuItem, int color) { - SpannableString spanString = new SpannableString(menuItem.getTitle().toString()); - spanString.setSpan(new ForegroundColorSpan(color), 0, spanString.length(), 0); - menuItem.setTitle(spanString); - - if(menuItem.getIcon() != null){ - Drawable icon = menuItem.getIcon(); - icon.mutate(); - icon.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); - } - } - - private void adaptViewToFragment(Fragment fragment){ if(fragment instanceof SearchView.OnQueryTextListener) { - mSearchView.setOnQueryTextListener((SearchView.OnQueryTextListener) fragment); - mSearchView.setVisibility(View.VISIBLE); + mBinding.appBarMain.mainSearch.setOnQueryTextListener((SearchView.OnQueryTextListener) fragment); + mBinding.appBarMain.mainSearch.setVisibility(View.VISIBLE); } else { - mSearchView.setOnQueryTextListener(null); - mSearchView.setVisibility(View.GONE); + mBinding.appBarMain.mainSearch.setOnQueryTextListener(null); + mBinding.appBarMain.mainSearch.setVisibility(View.GONE); } @@ -164,5 +198,82 @@ public class MainActivity extends AppCompatActivity } else { getSupportActionBar().setTitle(R.string.app_name); } + + if(fragment instanceof IRecyclerFragment) { + ((IRecyclerFragment) fragment).setWaterfallToolbar(mBinding.appBarMain.waterfallToolbar); + } + + if(fragment instanceof ISelectAllFragment && ((ISelectAllFragment)fragment).isEnabled()) { + mBinding.appBarMain.mainSelectAll.setVisibility(View.VISIBLE); + mBinding.appBarMain.mainSelectAll.setOnClickListener(v -> ((ISelectAllFragment)fragment).onSelectAll()); + } else { + mBinding.appBarMain.mainSelectAll.setVisibility(View.GONE); + mBinding.appBarMain.mainSelectAll.setOnClickListener(null); + } + + if(fragment instanceof IFilterableFragment) { + mBinding.appBarMain.mainFilter.setVisibility(View.VISIBLE); + mBinding.appBarMain.mainFilter.setOnClickListener(v -> ((IFilterableFragment)fragment).onFilterClick()); + } else { + mBinding.appBarMain.mainFilter.setVisibility(View.GONE); + mBinding.appBarMain.mainFilter.setOnClickListener(null); + } } + + private void changeContentFragment(Fragment fragment){ + if (fragment != null) { + FragmentManager fragmentManager = getSupportFragmentManager(); + fragmentManager.beginTransaction() + .replace(R.id.frame_container, fragment).commit(); + + } + } + + + + + + + private void init(){ + + if(BarcodeManager.getCurrentBarcodeInterface() != null) { +// DialogSimpleMessageHelper.makeInfoDialog(this, +// "Lettore barcode", +// new SpannableString("Trovato adattatore " + BarcodeManager.getCurrentBarcodeInterface().getAdapterName() + " installato nel sistema"), +// null, null).show(); + } + + ServerStatusChecker.getIstance().addCallback(value -> { + if(value && (!mIsOnline || firstCheckExecution)){ + + SettingsManager.reloadDBVariables(() -> { + mIsOnline = true; + firstCheckExecution = false; + + onDBLoaded(); + }, ex -> { + //mNoConnectionLayout.expand(true); + if(!mIsOnline) mIsOnline = false; + } + ); + + } else if(!value && mIsOnline){ + mIsOnline = false; + } + }); + + } + + + private void onDBLoaded() { + LinearLayout headerLayout = (LinearLayout) mBinding.navView.getHeaderView(0); + + ((TextView) headerLayout.findViewById(R.id.drawer_username)).setText(SettingsManager.i().user.fullname); + ((TextView) headerLayout.findViewById(R.id.drawer_deposito)).setText(SettingsManager.i().userSession.depo.getCodMdep() + " - " + SettingsManager.i().userSession.depo.getDescrizione()); + + if(SettingsManager.iDB().getDatiAzienda().isLogoAvailable()) { + ((ImageView) headerLayout.findViewById(R.id.drawer_logoAzienda)).setImageBitmap(SettingsManager.iDB().getDatiAzienda().getLogo()); + } + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplication.java b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java new file mode 100644 index 00000000..1457a234 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java @@ -0,0 +1,62 @@ +package it.integry.integrywmsnative; + +import android.app.Application; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.text.SpannableString; + +import com.orhanobut.logger.AndroidLogAdapter; +import com.orhanobut.logger.Logger; + +import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.settings.Stash; +import it.integry.integrywmsnative.core.update.UpdatesManager; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityResources; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; + +public class MainApplication extends Application { + + public static Resources res; + public static Context Context; + + // Called when the application is starting, before any other application objects have been created. + // Overriding this method is totally optional! + @Override + public void onCreate() { + super.onCreate(); + Stash.init(this); + + SettingsManager.init(this); + ServerStatusChecker.init(); + BarcodeManager.init(this); + +// UtilityExceptions.init(this); + UtilityResources.init(this); + + Logger.addLogAdapter(new AndroidLogAdapter()); + + res = getResources(); + Context = this; + } + + // Called by the system when the device configuration changes while your component is running. + // Overriding this method is totally optional! + @Override + public void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + } + + // This is called when the overall system is running low on memory, + // and would like actively running processes to tighten their belts. + // Overriding this method is totally optional! + @Override + public void onLowMemory() { + super.onLowMemory(); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java b/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java new file mode 100644 index 00000000..073abf4a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/CommonConst.java @@ -0,0 +1,33 @@ +package it.integry.integrywmsnative.core; + +public class CommonConst { + + public static class Login { + + public static class Azienda { +// public static String host = "192.168.2.13"; +// public static int port = 8080; + + public static String host = "www2.studioml.it"; + public static int port = 80; + } + + } + + public static class Config { + public static String COMMESSA_MAG = "MAG"; + + public static String DEFAULT_ANONYMOUS_UL_SERIE = "UL"; + } + + + public static class Mail { + + public static String[] forErrors = { +// "syslogs@integry.it", + "g.scorrano@integry.it" + }; + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/CommonRESTException.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/CommonRESTException.java index 13d27c25..6bcd686e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/CommonRESTException.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/CommonRESTException.java @@ -1,7 +1,16 @@ package it.integry.integrywmsnative.core.REST; +import android.util.Log; + import java.net.SocketException; import java.net.SocketTimeoutException; +import java.util.List; + +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.model.EsitoType; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.utility.UtilityString; +import retrofit2.Response; /** * Created by GiuseppeS on 22/03/2018. @@ -9,14 +18,17 @@ import java.net.SocketTimeoutException; public class CommonRESTException { + public static String tryRecognizeThenGetMessage(Exception ex){ if(ex instanceof SocketException){ return "Errore di comunicazione con il server remoto. Riprova."; } else if(ex instanceof SocketTimeoutException){ return "Errore di timeout durante la comunicazione con il server remoto. Riprova."; + } else if(ex.getMessage().startsWith("Printer not found")){ + return "Stampante non trovata"; } else { - return null; + return ex.getMessage(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/HttpInterceptor.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/HttpInterceptor.java index 2de8038b..455fd0ed 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/HttpInterceptor.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/HttpInterceptor.java @@ -4,6 +4,7 @@ import android.util.Base64; import java.io.IOException; +import it.integry.integrywmsnative.core.settings.SettingsManager; import okhttp3.HttpUrl; import okhttp3.Interceptor; import okhttp3.Request; @@ -15,12 +16,13 @@ import okhttp3.Response; public class HttpInterceptor implements Interceptor { - private final String USERNAME = "magazzino"; - private final String PASSWORD = "m"; - private final String PROFILE_DB = "IME_TE"; - @Override public Response intercept(Chain chain) throws IOException { + + final String PROFILE_DB = SettingsManager.i().userSession.profileDB; + final String USERNAME = SettingsManager.i().user.username; + final String PASSWORD = SettingsManager.i().user.password; + final Request request = chain.request(); final HttpUrl url = request.url().newBuilder() .addQueryParameter("profileDb", PROFILE_DB) @@ -32,8 +34,8 @@ public class HttpInterceptor implements Interceptor { .addHeader("Authorization", string) .addHeader("Content-Type", "application/json") .addHeader("Accept", "*/*") - .addHeader("username", USERNAME) - .addHeader("password", PASSWORD) + .addHeader("username", USERNAME != null ? USERNAME : "") + .addHeader("password", PASSWORD != null ? PASSWORD : "") .url(url).build(); return chain.proceed(newRequest); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/RESTBuilder.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/RESTBuilder.java index 7f4f9b20..68fdd481 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/RESTBuilder.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/RESTBuilder.java @@ -1,5 +1,8 @@ package it.integry.integrywmsnative.core.REST; +import java.util.concurrent.TimeUnit; + +import it.integry.integrywmsnative.core.settings.SettingsManager; import okhttp3.OkHttpClient; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; @@ -11,11 +14,31 @@ import retrofit2.converter.gson.GsonConverterFactory; public class RESTBuilder { public static T getService(final Class service) { - OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new HttpInterceptor()).build(); +// return getService(service, "192.168.2.13", 8080); + return getService(service, SettingsManager.i().server.host, SettingsManager.i().server.port, true); + + } + public static T getService(final Class service, long timeout) { +// return getService(service, "192.168.2.13", 8080); + return getService(service, SettingsManager.i().server.host, SettingsManager.i().server.port, true); + + } + + public static T getService(final Class service, String host, int port, boolean addInterceptors){ + OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); + + clientBuilder.connectTimeout(30, TimeUnit.SECONDS); + clientBuilder.readTimeout(30, TimeUnit.SECONDS); + clientBuilder.writeTimeout(30, TimeUnit.SECONDS); + + if(addInterceptors) clientBuilder.addInterceptor(new HttpInterceptor()); + + OkHttpClient client = clientBuilder.build(); + + String endpoint = "http://" + host + ":" + port + "/ems-api/"; Retrofit retrofit = new Retrofit.Builder() - .baseUrl("http://192.168.2.13:8080/ems-api/") -// .baseUrl("http://www2.studioml.it/ems-api/") + .baseUrl(endpoint) .client(client) .addConverterFactory(GsonConverterFactory.create()) .build(); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java new file mode 100644 index 00000000..b7e5b40b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumer.java @@ -0,0 +1,60 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import com.annimon.stream.Collectors; +import com.annimon.stream.Stream; + +import java.util.List; + +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.utility.UtilityDB; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class ArticoloRESTConsumer extends _BaseRESTConsumer { + + public static void getByBarcodeProd(String barcodeProd, RunnableArgs> onComplete, RunnableArgs onFailed) { + ArticoloRESTConsumerService articoloRESTConsumerService = RESTBuilder.getService(ArticoloRESTConsumerService.class); + articoloRESTConsumerService.getByBarcodeProd(barcodeProd).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "getByBarcodeProd", (m) -> { + onComplete.run(response.body().getEntityList()); + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + + public static void getByCodMart(List codMartToFind, RunnableArgs> onComplete, RunnableArgs onFailed) { + + String joinedCods = Stream.of(codMartToFind) + .collect(Collectors.joining(",")); + + + ArticoloRESTConsumerService articoloRESTConsumer = RESTBuilder.getService(ArticoloRESTConsumerService.class); + articoloRESTConsumer.getByCodMart(joinedCods).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "getByCodMart", (m) -> { + onComplete.run(response.body().getEntityList()); + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java new file mode 100644 index 00000000..5d476b84 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ArticoloRESTConsumerService.java @@ -0,0 +1,21 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import java.util.List; + +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.model.MtbAart; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface ArticoloRESTConsumerService { + + + @POST("SM2getArticoloByBarcode") + Call> getByBarcodeProd(@Query("barcode") String barcodeProd); + + @GET("SM2getArticoloByCodMart") + Call> getByCodMart(@Query("codMart") String barcodeProd); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumer.java new file mode 100644 index 00000000..7ba74db8 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumer.java @@ -0,0 +1,34 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import com.google.gson.JsonObject; + +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.model.Ean128Model; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class BarcodeRESTConsumer extends _BaseRESTConsumer { + + public static void decodeEan128(BarcodeScanDTO barcodeObj, RunnableArgs onComplete, RunnableArgs onFailed) { + + String ean128 = barcodeObj.getStringValue().replaceAll("" + ((char) 29), "|"); + + BarcodeRESTConsumerService barcodeRESTConsumerService = RESTBuilder.getService(BarcodeRESTConsumerService.class); + barcodeRESTConsumerService.decodeEan128(ean128).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "DecodeEan128", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumerService.java new file mode 100644 index 00000000..108eb2dc --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/BarcodeRESTConsumerService.java @@ -0,0 +1,19 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import com.google.gson.JsonObject; + +import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; +import it.integry.integrywmsnative.core.REST.model.Ean128Model; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface BarcodeRESTConsumerService { + + @GET("decodeEan128") + Call> decodeEan128(@Query("ean128") String ean128); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java new file mode 100644 index 00000000..c9755991 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumer.java @@ -0,0 +1,349 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import com.annimon.stream.Stream; +import com.google.gson.JsonObject; + +import java.text.SimpleDateFormat; +import java.util.List; + +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer{ + + + public static void getAvailablePosizioni(RunnableArgs> onComplete, RunnableArgs onFailed) { + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); + + ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); + colliMagazzinoRESTConsumerService.getAvailablePosizioni(codMdep).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "getAvailablePosizioni", (m) -> { + onComplete.run(response.body().getDto()); + }, onFailed); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + + public static void saveCollo(MtbColt mtbColtToSave, final ISimpleOperationCallback callback){ + + EntityRESTConsumer.processEntity(mtbColtToSave, callback, MtbColt.class); + + } + + + public static void saveCollo(MtbColt mtbColtToSave, RunnableArgs onComplete, RunnableArgs onFailed){ + + EntityRESTConsumer.processEntity(mtbColtToSave, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }, MtbColt.class); + + } + + public static void createColloLavorazione(int segno, RunnableArgs onComplete, RunnableArgs onFailed) { + MtbColt mtbColtToCreate = new MtbColt() + .setSegno(segno) + .setGestione(GestioneEnum.LAVORAZIONE); + + mtbColtToCreate + .setOperation(CommonModelConsts.OPERATION.INSERT); + + + saveCollo(mtbColtToCreate, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + + + public static void createColloFromEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, GestioneEnum gestione, RunnableArgs onComplete, RunnableArgs onFailed) { + createColloFromEtichettaAnonima(barcodeScanDTO.getStringValue(), gestione, onComplete, onFailed); + } + + + public static void createColloFromEtichettaAnonima(String barcode, GestioneEnum gestione, RunnableArgs onComplete, RunnableArgs onFailed) { + + MtbColt mtbColtToCreate = new MtbColt() + .setGestione(gestione); + + Integer customNumCollo = UtilityBarcode.getNumColloFromULAnonima(barcode); + String customSerCollo = CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE; + + if(customNumCollo != null) { + mtbColtToCreate.setNumCollo(customNumCollo); + } + + if(!UtilityString.isNullOrEmpty(customSerCollo)) { + mtbColtToCreate.setSerCollo(customSerCollo); + } + + mtbColtToCreate + .setOperation(CommonModelConsts.OPERATION.INSERT); + + saveCollo(mtbColtToCreate, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + + public static void deleteCollo(MtbColt mtbColtToDelete, Runnable onComplete, RunnableArgs onFailed){ + + mtbColtToDelete.setOperation(CommonModelConsts.OPERATION.DELETE); + + saveCollo(mtbColtToDelete, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + if(onComplete != null) onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + + } + + public static void distribuisciCollo(MtbColt mtbColtToDistribute, Runnable onComplete, RunnableArgs onFailed) { + + DistribuzioneColloDTO distribuzioneColloDTO = new DistribuzioneColloDTO() + .setCriterioDistribuzione(DistribuzioneColloDTO.CriterioDistribuzione.UPDATE) + .setDataCollo(mtbColtToDistribute.getDataColloS()) + .setNumCollo(mtbColtToDistribute.getNumCollo()) + .setGestione(mtbColtToDistribute.getGestione()) + .setSerCollo(mtbColtToDistribute.getSerCollo()); + + ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); + colliMagazzinoRESTConsumerService.distribuisciCollo(distribuzioneColloDTO) + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "DistribuzioneCollo", obj -> onComplete.run(), onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + + } + + public static void getBySSCC(String ssccString, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs onComplete, RunnableArgs onFailed) { + ColliMagazzinoRESTConsumerService colliMagazzinoRESTConsumerService = RESTBuilder.getService(ColliMagazzinoRESTConsumerService.class); + colliMagazzinoRESTConsumerService.getColloByBarcode(ssccString, onlyResiduo, throwExcIfNull).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "GetBySSCC", mtbColt -> { + + if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0){ + List codMarts = Stream.of(mtbColt.getMtbColr()) + .map(MtbColr::getCodMart) + .withoutNulls() + .distinct() + .toList(); + + ArticoloRESTConsumer.getByCodMart(codMarts, arts -> { + + if(arts != null && arts.size() > 0) { + for (MtbColr mtbColr : mtbColt.getMtbColr()) { + + MtbAart foundMtbAart = null; + + List mtbAartStream = Stream.of(arts) + .filter(x -> x.getCodMart().equalsIgnoreCase(mtbColr.getCodMart())).toList(); + + if(mtbAartStream != null && mtbAartStream.size() > 0){ + foundMtbAart = mtbAartStream.get(0); + } + + mtbColr.setMtbAart(foundMtbAart); + mtbColr.setGestione(mtbColt.getGestione()); + mtbColr.setSerCollo(mtbColt.getSerCollo()); + mtbColr.setNumCollo(mtbColt.getNumCollo()); + mtbColr.setDataCollo(mtbColt.getDataColloS()); + } + + + onComplete.run(mtbColt); + } + + }, onFailed); + + } else { + onComplete.run(mtbColt); + } + + }, onFailed); + + + + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + + public static void getByTestata(MtbColt testata, boolean onlyResiduo, boolean throwExcIfNull, RunnableArgs onComplete, RunnableArgs onFailed) { + String ssccString = null; + + if(testata.getSerCollo().equalsIgnoreCase(CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE)){ + ssccString = "U"; + + SimpleDateFormat sdf = new SimpleDateFormat("yy"); + ssccString += sdf.format(testata.getDataColloD()); + + ssccString += String.format("%07d", testata.getNumCollo()); + } else { + ssccString = ""; + + switch (testata.getGestioneEnum()) { + case ACQUISTO: + ssccString += "1"; + break; + + case LAVORAZIONE: + ssccString += "2"; + break; + + case VENDITA: + ssccString += "3"; + break; + } + + SimpleDateFormat sdf = new SimpleDateFormat("yy"); + ssccString += sdf.format(testata.getDataColloD()); + + ssccString += String.format("%05d", testata.getNumCollo()); + ssccString += "0"; + } + + getBySSCC(ssccString, onlyResiduo, throwExcIfNull, onComplete, onFailed); + } + + + + + public static void changePosizione(MtbColt testata, MtbDepoPosizione posizione, Runnable onComplete, RunnableArgs onFailed) { + + testata.setOperation(CommonModelConsts.OPERATION.UPDATE); + + if(posizione == null) testata.setPosizione(null); + else testata.setPosizione(posizione.getPosizione()); + + ColliMagazzinoRESTConsumer.saveCollo(testata, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + if(onComplete != null) onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + + } + + + + public static void deleteRiga(MtbColr mtbColrToDelete, Runnable onComplete, RunnableArgs onFailed){ + MtbColr newMtbColr = new MtbColr(); + + newMtbColr.setNumCollo(mtbColrToDelete.getNumCollo()); + newMtbColr.setDataCollo(mtbColrToDelete.getDataColloS()); + newMtbColr.setSerCollo(mtbColrToDelete.getSerCollo()); + newMtbColr.setGestione(mtbColrToDelete.getGestione()); + newMtbColr.setRiga(mtbColrToDelete.getRiga()); + + + newMtbColr.setOperation(CommonModelConsts.OPERATION.DELETE); + + EntityRESTConsumer.processEntity(newMtbColr, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColr value) { + if(onComplete != null) onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }, MtbColr.class); + + } + + public static void updateRiga(MtbColr mtbColrToUpdate, Runnable onComplete, RunnableArgs onFailed){ + + mtbColrToUpdate.setOperation(CommonModelConsts.OPERATION.UPDATE); + + EntityRESTConsumer.processEntity(mtbColrToUpdate, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColr value) { + if(onComplete != null) onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }, MtbColr.class); + + } + + + + + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java new file mode 100644 index 00000000..571a9399 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ColliMagazzinoRESTConsumerService.java @@ -0,0 +1,29 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import com.google.gson.JsonObject; + +import java.util.List; + +import it.integry.integrywmsnative.core.REST.model.DistribuzioneColloDTO; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface ColliMagazzinoRESTConsumerService { + + @GET("getAvailablePosizioni") + Call>> getAvailablePosizioni(@Query("codMdep") String codMdep); + + @POST("SM2DistribuzioneRigheCollo") + Call> distribuisciCollo(@Body DistribuzioneColloDTO distribuzioneCollo); + + @POST("getColloByBarcode") + Call> getColloByBarcode(@Query("codBarreCollo") String sscc, @Query("onlyResiduo") boolean onlyResiduo, @Query("throwExcIfNull") boolean throwExcIfNull); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/DepositoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/DepositoRESTConsumer.java new file mode 100644 index 00000000..7e69f23a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/DepositoRESTConsumer.java @@ -0,0 +1,35 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import java.util.List; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.MtbDepo; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.generated.callback.Runnable; + +public class DepositoRESTConsumer { + + public static void getDepoByCodMdep(String codMdep, RunnableArgs onComplete) { + + MtbDepo mtbDepo = new MtbDepo(); + mtbDepo.setCodMdep(codMdep); + mtbDepo.setOperation(CommonModelConsts.OPERATION.SELECT); + mtbDepo.setOnlyPkMaster(false); + + EntityRESTConsumer.selectEntity(mtbDepo, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + if(value != null && value.size() > 0) { + onComplete.run(value.get(0)); + } + } + + @Override + public void onFailed(Exception ex) { + UtilityLogger.errorMe(ex); + } + }, MtbDepo.class); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumer.java new file mode 100644 index 00000000..dc7ba934 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumer.java @@ -0,0 +1,114 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import android.util.Log; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.model.EsitoType; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.model.EntityBase; +import it.integry.integrywmsnative.core.model.MtbColt; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class EntityRESTConsumer { + + public static void processEntity(T entityToSave, final ISimpleOperationCallback callback, Class type){ + + EntityRESTConsumerService service = RESTBuilder.getService(EntityRESTConsumerService.class); + Call> request = service.processEntity(entityToSave); + request.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + Gson gson = new Gson(); + T object = gson.fromJson(response.body().getEntity(), type); + + callback.onSuccess(object); + } else { + Log.e("EntityRESTConsumer", response.body().getErrorMessage()); + callback.onFailed(new Exception(response.body().getErrorMessage())); + } + } else { + Log.e("EntityRESTConsumer", response.message()); + callback.onFailed(new Exception(response.message())); + } + } else { + Log.e("EntityRESTConsumer", "Status " + response.code() + ": " + response.message()); + callback.onFailed(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("EntityRESTConsumer", t.toString()); + callback.onFailed(new Exception(t)); + } + }); + + } + + + + + public static void selectEntity(T entityToSave, final ISimpleOperationCallback> callback, Class type){ + + EntityRESTConsumerService service = RESTBuilder.getService(EntityRESTConsumerService.class); + Call> request = service.processEntity(entityToSave); + request.enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + Gson gson = new Gson(); + List jsons = response.body().getEntityList(); + + List newList = new ArrayList(); + + if(jsons != null) { + for (int i = 0; i < jsons.size(); i ++){ + JsonObject jsonTmp = jsons.get(i); + + newList.add((T) gson.fromJson(jsonTmp, type)); + } + } + + + callback.onSuccess(newList); + } else { + Log.e("EntityRESTConsumer", response.body().getErrorMessage()); + callback.onFailed(new Exception(response.body().getErrorMessage())); + } + } else { + Log.e("EntityRESTConsumer", response.message()); + callback.onFailed(new Exception(response.message())); + } + } else { + Log.e("EntityRESTConsumer", "Status " + response.code() + ": " + response.message()); + callback.onFailed(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("EntityRESTConsumer", t.toString()); + callback.onFailed(new Exception(t)); + } + }); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumerService.java new file mode 100644 index 00000000..d74ed113 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/EntityRESTConsumerService.java @@ -0,0 +1,17 @@ +package it.integry.integrywmsnative.core.REST.consumers; + + +import com.google.gson.JsonObject; + +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.model.EntityBase; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.POST; + +public interface EntityRESTConsumerService { + + @POST("processEntity") + Call> processEntity(@Body Object entity); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/GestSetupRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/GestSetupRESTConsumer.java new file mode 100644 index 00000000..dc0c96a7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/GestSetupRESTConsumer.java @@ -0,0 +1,72 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import android.util.Log; + +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.model.GestSetupDTO; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.generated.callback.Runnable; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class GestSetupRESTConsumer extends _BaseRESTConsumer { + + public static void getValue(String gestName, String sectionName, String keySection, RunnableArgs onComplete, RunnableArgs onFailed) { + GestSetupRESTConsumerService service = RESTBuilder.getService(GestSetupRESTConsumerService.class); + service.getGestSetupValue(gestName, sectionName, keySection).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "GestSetup", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("PrintCollo", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + if(onFailed != null) onFailed.run(new Exception(t)); + } + }); + } + + public static void getBooleanValue(String gestName, String sectionName, String keySection, RunnableArgs onComplete, RunnableArgs onFailed) { + getValue(gestName, sectionName, keySection, value -> { + if(value != null){ + onComplete.run("S".equalsIgnoreCase(value.value)); + } else onComplete.run(false); + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); + } + + public static void getValue(String gestName, String sectionName, String keySection, String codMdep, RunnableArgs onComplete, RunnableArgs onFailed) { + GestSetupRESTConsumerService service = RESTBuilder.getService(GestSetupRESTConsumerService.class); + service.getGestSetupValue(gestName, sectionName, keySection, codMdep).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "GestSetup", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("PrintCollo", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + if(onFailed != null) onFailed.run(new Exception(t)); + } + }); + } + + public static void getBooleanValue(String gestName, String sectionName, String keySection, String codMdep, RunnableArgs onComplete, RunnableArgs onFailed) { + getValue(gestName, sectionName, keySection, codMdep, value -> { + if(value != null){ + onComplete.run("S".equalsIgnoreCase(value.value)); + } else onComplete.run(false); + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/GestSetupRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/GestSetupRESTConsumerService.java new file mode 100644 index 00000000..3ae911c7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/GestSetupRESTConsumerService.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import java.util.List; + +import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.REST.model.GestSetupDTO; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface GestSetupRESTConsumerService { + + @GET("gestSetup") + Call> getGestSetupValue( + @Query("gestName") String gestName, + @Query("section") String section, + @Query("keySection") String keySection); + + @GET("gestSetup") + Call> getGestSetupValue( + @Query("gestName") String gestName, + @Query("section") String section, + @Query("keySection") String keySection, + @Query("codMdep") String codMdep); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ISimpleOperationCallback.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ISimpleOperationCallback.java new file mode 100644 index 00000000..3c61004f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ISimpleOperationCallback.java @@ -0,0 +1,9 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +public interface ISimpleOperationCallback { + + void onSuccess(T value); + + void onFailed(Exception ex ); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ISingleOperationDoubleCallback.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ISingleOperationDoubleCallback.java new file mode 100644 index 00000000..8fc0af74 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ISingleOperationDoubleCallback.java @@ -0,0 +1,9 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +public interface ISingleOperationDoubleCallback { + + void onSuccess(T firstValue, U secondValue); + + void onFailed(Exception ex ); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ISingleValueOperationCallback.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ISingleValueOperationCallback.java new file mode 100644 index 00000000..1163f409 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/ISingleValueOperationCallback.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +public interface ISingleValueOperationCallback { + + void onResult(T value); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PosizioneRESTonsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PosizioneRESTonsumer.java new file mode 100644 index 00000000..cc970746 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PosizioneRESTonsumer.java @@ -0,0 +1,41 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import com.annimon.stream.Stream; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +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.utility.UtilityDB; + +public class PosizioneRESTonsumer extends _BaseRESTConsumer { + + + + public static void getBancaliInPosizione(MtbDepoPosizione mtbDepoPosizione, RunnableArgs> onComplete, RunnableArgs onFailed) { + + + String sql = "SELECT * FROM mtb_colt WHERE cod_mdep = " + UtilityDB.valueToString(mtbDepoPosizione.getCodMdep()) + " AND posizione = " + UtilityDB.valueToString(mtbDepoPosizione.getPosizione()); + + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PrinterRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PrinterRESTConsumer.java new file mode 100644 index 00000000..8b498f50 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PrinterRESTConsumer.java @@ -0,0 +1,121 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import android.util.Log; + +import java.util.List; +import java.util.stream.Stream; + +import it.integry.integrywmsnative.core.REST.CommonRESTException; +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.model.EsitoType; +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.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityString; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +import static br.com.zbra.androidlinq.Linq.stream; + +public class PrinterRESTConsumer extends _BaseRESTConsumer { + + public enum Type { + PRIMARY, + SECONDARY + } + + + public static void getAvailablePrinters(final ISimpleOperationCallback> callback) { + PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class); + printerService.getAvailablePrinters().enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "GetAvailablePrinters", callback); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + + } + }); + } + + + public static void getAvailablePrinters(String codMdep, final ISimpleOperationCallback> callback) { + + PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class); + printerService.getAvailablePrinters(codMdep).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "GetAvailablePrinters", new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + callback.onSuccess(value != null ? stream(value).where(x -> x != null).toList() : null); + } + + @Override + public void onFailed(Exception ex) { + callback.onFailed(ex); + } + }); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + Log.e("GetAvailablePrinters", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + callback.onFailed(new Exception(t)); + } + }); + } + + + public static void getAvailablePrinters(String codMdep, Type printerType, final ISimpleOperationCallback> callback) { + + PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class); + printerService.getAvailablePrinters(codMdep, printerType.toString()).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "GetAvailablePrinters", callback); + } + + @Override + public void onFailure(Call>> call, Throwable t) { + Log.e("GetAvailablePrinters", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + callback.onFailed(new Exception(t)); + } + }); + } + + public static void printCollo(String printerName, MtbColt testataColloToPrint, int quantity, String reportName, Runnable onComplete, RunnableArgs onFailed) { + + PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class); + printerService.printCollo( + printerName, + testataColloToPrint.getDataColloS(), + testataColloToPrint.getGestione(), + testataColloToPrint.getSerCollo(), + testataColloToPrint.getNumCollo(), + quantity, + reportName) + + .enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "PrintCollo", data -> { + onComplete.run(); + }, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PrinterRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PrinterRESTConsumerService.java new file mode 100644 index 00000000..63ef3b2d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/PrinterRESTConsumerService.java @@ -0,0 +1,39 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import java.util.List; + +import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.http.Field; +import retrofit2.http.FormUrlEncoded; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface PrinterRESTConsumerService { + + @POST("getAvailablePrinters") + Call>> getAvailablePrinters(); + + @POST("getAvailablePrinters") + Call>> getAvailablePrinters(@Query("codMdep") String codMdep); + + @POST("getAvailablePrinters") + Call>> getAvailablePrinters(@Query("codMdep") String codMdep, @Query("printerType") String printerType); + + + @POST("pkgPrintLabel") + @FormUrlEncoded + Call> printCollo( + @Query("printerName") String printerName, + @Field("dataCollo") String dataCollo, + @Field("gestione") String gestione, + @Field("serCollo") String serCollo, + @Field("numCollo") int numCollo, + @Query("printQuantity") int printQuantity, + @Query("reportName") String reportName + ); + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/SystemRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/SystemRESTConsumer.java new file mode 100644 index 00000000..94d8e468 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/SystemRESTConsumer.java @@ -0,0 +1,176 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import android.text.TextUtils; +import android.util.Log; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.REST.model.MailRequestDTO; +import it.integry.integrywmsnative.core.REST.model.NativeSqlRequestDTO; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.Azienda; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.generated.callback.Runnable; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class SystemRESTConsumer extends _BaseRESTConsumer { + + public static void processSql(String nativeSql, final Type clazz, final ISimpleOperationCallback callback) { + + NativeSqlRequestDTO nativeSqlDTO = new NativeSqlRequestDTO(); + nativeSqlDTO.nativeSql = nativeSql; + + SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class); + service.processSql(nativeSqlDTO).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "ProcessSql", new ISimpleOperationCallback() { + @Override + public void onSuccess(Object value) { + Gson gson = new Gson(); + String json = gson.toJson(value); + + InputStream ims = new ByteArrayInputStream(json.getBytes()); + Reader reader = new InputStreamReader(ims); + T gsonObj = gson.fromJson(reader, clazz); + + callback.onSuccess(gsonObj); + } + + @Override + public void onFailed(Exception ex) { + callback.onFailed(ex); + } + }); + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("ProcessSql", t.toString()); + callback.onFailed(new Exception(t)); + UtilityLogger.errorMe(new Exception(t)); + } + }); + + } + + + public static void getAvailableProfiles(final ISimpleOperationCallback> callback){ + + SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class); + service.getAvailableProfiles(SettingsManager.i().user.username, SettingsManager.i().user.password).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "ProfilesAvailable", callback); + } + + @Override + public void onFailure(Call>> call, final Throwable t) { + Log.e("ProfilesAvailable", t.toString()); + callback.onFailed(new Exception(t)); + UtilityLogger.errorMe(new Exception(t)); + } + }); + + + } + + + + + + public static void getAvailableCodMdeps(final ISimpleOperationCallback> callback){ + + SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class); + service.getAvailableCodMdeps().enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + analyzeAnswer(response, "CodMdepsAvailable", callback); + } + + @Override + public void onFailure(Call>> call, final Throwable t) { + Log.e("CodMdepsAvailable", t.toString()); + callback.onFailed(new Exception(t)); + UtilityLogger.errorMe(new Exception(t)); + } + }); + } + + + public static void sendErrorLogMail(String message) { + + String currentAzienda = UtilityString.isNullOrEmpty(SettingsManager.i().userSession.profileDB) ? "" : " [" + SettingsManager.i().userSession.profileDB + "]"; + + + MailRequestDTO mailDTO = new MailRequestDTO() + .setFrom("sender@integry.it") + .setFromName("WMS Android") + .setTo(TextUtils.join(";", CommonConst.Mail.forErrors)) + .setSubject("Bug notification" + currentAzienda) + .setMsgText(message) + .setHtml(true); + + sendMail(mailDTO, null, ex -> { + Log.e(SystemRESTConsumer.class.getName(), "", ex); + }); + } + + + public static void sendMail(MailRequestDTO mailDTO, Runnable onComplete, RunnableArgs onFailed) { + + SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class); + service.sendMail(mailDTO).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if(onComplete != null) onComplete.run(); + } + + @Override + public void onFailure(Call> call, Throwable t) { + if(onFailed != null) { + onFailed.run(new Exception(t)); + } + } + }); + } + + + + public static void getAzienda(RunnableArgs onComplete, RunnableArgs onFailed) { + + String sql = "SELECT TOP 1 * FROM azienda"; + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + if(onComplete != null) onComplete.run(value.get(0)); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/SystemRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/SystemRESTConsumerService.java new file mode 100644 index 00000000..4ad90c04 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/SystemRESTConsumerService.java @@ -0,0 +1,29 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import java.util.List; + +import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.REST.model.MailRequestDTO; +import it.integry.integrywmsnative.core.REST.model.NativeSqlRequestDTO; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface SystemRESTConsumerService { + + @POST("processSql") + Call> processSql(@Body NativeSqlRequestDTO nativeSqlDTO); + + @GET("getAvailableProfiles") + Call>> getAvailableProfiles(@Query("username") String username, @Query("password") String password); + + @GET("getAvailableCodMdepsForUser") + Call>> getAvailableCodMdeps(); + + @POST("sendEmail") + Call> sendMail(@Body MailRequestDTO mailDto); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/_BaseRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/_BaseRESTConsumer.java new file mode 100644 index 00000000..b1f2761f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/consumers/_BaseRESTConsumer.java @@ -0,0 +1,49 @@ +package it.integry.integrywmsnative.core.REST.consumers; + +import android.util.Log; + +import it.integry.integrywmsnative.core.REST.model.EsitoType; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityString; +import retrofit2.Response; + +public class _BaseRESTConsumer { + + + public static void analyzeAnswer(Response> response, String logTitle, final ISimpleOperationCallback callback){ + if(response.isSuccessful()) { + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + if(!UtilityString.isNullOrEmpty(response.body().getErrorMessage())){ + callback.onFailed(new Exception(response.body().getErrorMessage())); + } else callback.onSuccess(response.body().getDto()); + } else { + Log.e(logTitle, response.body().getErrorMessage()); + callback.onFailed(new Exception(response.body().getErrorMessage())); + } + } else { + Log.e(logTitle, response.message()); + callback.onFailed(new Exception(response.message())); + } + } else { + Log.e(logTitle, "Status " + response.code() + ": " + response.message()); + callback.onFailed(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + public static void analyzeAnswer(Response> response, String logTitle, RunnableArgs onComplete, RunnableArgs onFailed){ + analyzeAnswer(response, logTitle, new ISimpleOperationCallback() { + @Override + public void onSuccess(T value) { + onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + onFailed.run(ex); + } + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/AvailableCodMdepsDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/AvailableCodMdepsDTO.java new file mode 100644 index 00000000..befd7941 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/AvailableCodMdepsDTO.java @@ -0,0 +1,23 @@ +package it.integry.integrywmsnative.core.REST.model; + +public class AvailableCodMdepsDTO { + + private String codMdep; + private String descrizione; + + public String getCodMdep() { + return codMdep; + } + + public String getDescrizione() { + return descrizione; + } + + @Override + public boolean equals(Object obj) { + if((obj) != null) { + return ((AvailableCodMdepsDTO) obj).codMdep.equalsIgnoreCase(codMdep); + } + return false; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/DistribuzioneColloDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/DistribuzioneColloDTO.java new file mode 100644 index 00000000..bb84832d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/DistribuzioneColloDTO.java @@ -0,0 +1,83 @@ +package it.integry.integrywmsnative.core.REST.model; + +public class DistribuzioneColloDTO { + + private String gestione; + private String dataCollo; + private Integer numCollo; + private String serCollo; + private String criterioDistribuzione; + + public String getGestione() { + return gestione; + } + + public DistribuzioneColloDTO setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public String getDataCollo() { + return dataCollo; + } + + public DistribuzioneColloDTO setDataCollo(String dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public DistribuzioneColloDTO setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public DistribuzioneColloDTO setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public String getCriterioDistribuzione() { + return criterioDistribuzione; + } + + public CriterioDistribuzione getCriterioDistribuzioneEnum() { + return CriterioDistribuzione.fromString(criterioDistribuzione); + } + + public DistribuzioneColloDTO setCriterioDistribuzione(String criterioDistribuzione) { + this.criterioDistribuzione = criterioDistribuzione; + return this; + } + + public DistribuzioneColloDTO setCriterioDistribuzione(CriterioDistribuzione criterioDistribuzione) { + this.criterioDistribuzione = criterioDistribuzione != null ? criterioDistribuzione.getText() : null; + return this; + } + + public enum CriterioDistribuzione { + UPDATE("U"); //UPDATE COLLO GIA' ESISTENTE + + private String text; + CriterioDistribuzione(String text) { + this.text = text; + } + public String getText() { + return this.text; + } + + public static CriterioDistribuzione fromString(String text) { + for (CriterioDistribuzione b : CriterioDistribuzione.values()) { + if (b.text.equalsIgnoreCase(text)) return b; + } + return null; + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean128Model.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean128Model.java new file mode 100644 index 00000000..99a78afb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean128Model.java @@ -0,0 +1,342 @@ +package it.integry.integrywmsnative.core.REST.model; + + +public class Ean128Model { + + ///Numero sequenziale del collo + public String Sscc; + + ///Codice EAN/UCC unità logistica + public String Gtin; + + ///Codice EAN/UCC dei prodotti contenuti all'interno di unità log + public String Content; + + ///Numero del lotto di fabbricazione + public String BatchLot; + + ///Data di produzione (yymmdd) 0~50 (2000~2050) - 51~99 (1951~1999) + public String ProdString; + + ///Data di scadenza pagamento fattura + public String DueString; + + ///Data di confezionamento + public String PackString; + + ///Data minima di validità + public String BestBefore; + + ///Data massima di validità + public String Expiry; + + ///Variante di prodotto - uso interno aziendale + public String Variant; + + ///Numero di serie + public String Serial; + + ///Dati supplementari per prodotti farmaceutici + public String QtyStringBatch; + + ///Numedi di identificazione supplementare del prodotto + public String AdditionalID; + + ///Codice prodotto interno del cliente + public String CustPartNumber; + + ///Numero di serie secondario + public String SecondarySerial; + + ///Entità di origine o marca auricolare + public String RefToSource; + + ///Quantità variabile + public String VarCount; + + ///Peso netto in Kg + public Float NetWeightKg; + + ///Lunghezza o 1° dimensione, in mt, uso commerciale + public Float LengthM; + + ///Larghezza, diametro o 2° dimensione, in mt, uso commerciale + public Float WidthM; + + ///Profondità, spessore, altezza o 3° dimensione, in mt, uso commerciale + public Float HeightM; + + ///Superficie, in metriquadri, uso commerciale + public Float AreaM2; + + ///Volume, in litri, uso commerciale + public Float NetVolumeL; + + ///Volume, in metricubi, uso commerciale + public Float NetVolumeM3; + + ///Peso netto, in libbre, uso commerciale + public Float NetWeightLb; + + ///Lunghezza o 1° dimensione, in pollici, uso commerciale + public Float LengthI; + + ///Lunghezza o 1° dimensione, in piedi, uso commerciale + public Float LengthF; + + ///Lunghezza o 1° dimensione, in yards, uso commerciale + public Float LengthY; + + ///Larghezza, diametro o 2° dimensione, in pollici, uso commerciale + public Float WidthI; + + ///Larghezza, diametro o 2° dimensione, in piedi, uso commerciale + public Float WidthF; + + ///Larghezza, diametro o 2° dimensione, in yards, uso commerciale + public Float WidthY; + + ///Profondità, spessore, altezza o 3° dimensione, in pollici, uso commerciale + public Float HeightI; + + ///Profondità, spessore, altezza o 3° dimensione, in piedi, uso commerciale + public Float HeightF; + + ///Profondità, spessore, altezza o 3° dimensione, in yards, uso commerciale + public Float HeightY; + + ///Peso lordo, in Kg, uso logistico + public Float CrossweightKgLog; + + ///Peso lordo, in libbre, uso logistico + public Float CrossweightLbLog; + + ///Lunghezza o 1° dimensione, in metri, uso logistico + public Float LengthMLog; + + ///Larghezza, diametro o 2° dimensione, in metri, uso logistico + public Float WidthMLog; + + ///Profondità, spessore, altezza o 3° dimensione, in metri, uso logistico + public Float HeigthMLog; + + ///Superficie, in metriquadri, uso logistico + public Float AreaM2Log; + + ///Volume lordo, in litri, uso logistico + public Float VolumeLLog; + + ///Volume lordo, in metricubi, uso logistico + public Float VolumeM3Log; + + ///Lunghezza o 1° dimensione, in pollici, uso logistico + public Float LengthILog; + + ///Lunghezza o 1° dimensione, in piedi, uso logistico + public Float LengthFLog; + + ///Lunghezza o 1° dimensione, in yards, uso logistico + public Float LengthYLog; + + ///Larghezza, diametro o 2° dimensione, in pollici, uso logistico + public Float WidthILog; + + ///Larghezza, diametro o 2° dimensione, in piedi, uso logistico + public Float WidthFLog; + + ///Larghezza, diametro o 2° dimensione, in yards, uso logistico + public Float WidthYLog; + + ///Profondità, spessore, altezza o 3° dimensione, in pollici, uso logistico + public Float HeigthILog; + + ///Profondità, spessore, altezza o 3° dimensione, in piedi, uso logistico + public Float HeigthFLog; + + ///Profondità, spessore, altezza o 3° dimensione, in yards, uso logistico + public Float HeigthYLog; + + ///Superficie, in pollici quadrati, uso commerciale + public Float AreaI2; + + ///Superficie, in piedi quadrati, uso commerciale + public Float AreaF2; + + ///Superficie, in yards quadrati, uso commerciale + public Float AreaY2; + + ///Superficie, in pollici quadrati, uso logistico + public Float AreaI2Log; + + ///Superficie, in piedi quadrati, uso logistico + public Float AreaF2Log; + + ///Superficie, in yards quadrati, uso logistico + public Float AreaY2Log; + + ///Peso netto, in once troy, uso commerciale + public Float NetWeightT; + + ///Peso netto, in once (U.S.), uso commerciale + public Float NetVolumeOz; + + ///Peso netto, in quarti di gallone, uso commerciale + public Float NetVolumeLb; + + ///Peso netto, in galloni (U.S.), uso commerciale + public Float NetVolumeG; + + ///Volume lordo, in quarti di gallone, uso logistico + public Float VolumeQLog; + + ///Volume lordo, in galloni (U.S.), uso logistico + public Float VolumeGLog; + + ///Volume netto, in pollici cubi, uso commerciale + public Float NetVolumeI3; + + ///Volume netto, in piedi cubi, uso commerciale + public Float NetVolumeF3; + + ///Volume netto, in yards cubi, uso commerciale + public Float NetVolumeY3; + + ///Volume lordo, in pollici cubi, uso logistico + public Float VolumeI3Log; + + ///Volume lordo, in piedi cubi, uso logistico + public Float VolumeF3Log; + + ///Volume lordo, in yards cubi, uso logistico + public Float VolumeY3Log; + + ///Quantità prodotti contenuti in un'unità logistica + public Integer Count; + + ///Importo da pagare singola area monetaria + public Float Amount; + + ///Importo da pagare singola unità monetaria (prodotti a peso variabile) + public Float Price; + + ///Numero d'ordine d'acquisto cliente + public String OrderNumber; + + ///Numero di consegna + public String Consignment; + + ///Numero di spedizione + public String ShipmentNo; + + ///Codice di smistamento pacchi + public String Route; + + ///Codice di locazione EAN/UCC "Spedire a, Consegnare a" + public String ShipToLoc; + + ///Codice di locazione EAN/UCC "Fatturare a" + public String BillToLoc; + + ///Codice di locazione EAN/UCC "Acquistato da" + public String PurchaseFromLoc; + + ///Codice di locazione EAN/UCC "Sperdire per, Consegnare per, Inoltrare a" + public String ShipForLoc; + + ///Codice di locazione EAN/UCC: identificazione di una locazione fisica + public String LocationNumber; + + ///Codice di locazione EAN/UCC di chi emette la fattura + public String PayToLoc; + + ///Codice postale "Spedire a, Consegnare a" (nazionale) + public String ShipToPost; + + ///Paese di origine del prodotto + public String Origin; + + ///Paese di lavorazione con codice nazionale ISO + public String CountryProcess; + + ///Paese di scomposizione con codice nazionale ISO + public String CountryDisassembly; + + ///Paese di lavorazione completa con codice nazionale ISO + public String CountryFullProcess; + + ///Numero di stock NATO + public String NSN; + + ///Carcasse animali e classificazione dei tagli UN/ECE + public String MeatCut; + + ///Prodotti in rotoli - larghezza, lunghezza, diametro interno, senso di svolgimento e giunte + public String Dimensions; + + ///Numero sequenziale elettronico per applicazioni di telefonia cellulare + public String CmtNo; + + ///Numero di identificazione per beni a rendere, + public String Grai; + + ///Numero di identificazione globale per beni individuali + public String Giai; + + ///Prezzo per unità di misura + public String PricePerUnit; + + ///Identificazione dei componenti di un prodotto + public String Gctin; + + ///Numero di contocorrente bancario internazionale + public String Iban; + + ///Data e ora di produzione + public String ProdTime; + + ///Numedo Globale di Relazione di Servizio + public String Gsrn; + + ///Numero del bollettino di pagamento + public String RefNo; + + ///Codice esteso per i coupons, UCC + public String Coupon1; + + ///Codice esteso per i coupons, UCC + public String Coupon2; + + ///Codice esteso per i coupons, UCC + public String Coupon3; + + ///Informazioni concordate tra i partners commerciali + public String InternalPart; + + ///Informazioni interne + public String Internal1; + + ///Informazioni interne + public String Internal2; + + ///Informazioni interne + public String Internal3; + + ///Informazioni interne + public String Internal4; + + ///Informazioni interne + public String Internal5; + + ///Informazioni interne + public String Internal6; + + ///Informazioni interne + public String Internal7; + + ///Informazioni interne + public String Internal8; + + ///Informazioni interne + public String Internal9; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean13PesoModel.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean13PesoModel.java new file mode 100644 index 00000000..c5436078 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/Ean13PesoModel.java @@ -0,0 +1,48 @@ +package it.integry.integrywmsnative.core.REST.model; + +public class Ean13PesoModel { + + private String precode; + private Float peso; + + public String getPrecode() { + return precode; + } + + public Ean13PesoModel setPrecode(String precode) { + this.precode = precode; + return this; + } + + public Float getPeso() { + return peso; + } + + public Ean13PesoModel setPeso(Float peso) { + this.peso = peso; + return this; + } + + public Ean128Model toEan128() { + Ean128Model ean128Model = new Ean128Model(); + ean128Model.NetWeightKg = getPeso(); + + return ean128Model; + } + + public static Ean13PesoModel fromBarcode(String barcode) throws Exception { + if(barcode == null || barcode.length() != 13) { + throw new Exception("Errore durante il parse del barcode (" + barcode + ")"); + } + + String precode = barcode.substring(1, 7); + String pesoString = barcode.substring(7, barcode.length() - 1); + + Float pesoFloat = Integer.parseInt(pesoString) / (float) 1000; + + return new Ean13PesoModel() + .setPrecode(precode) + .setPeso(pesoFloat); + + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/GestSetupDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/GestSetupDTO.java new file mode 100644 index 00000000..8e883c04 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/GestSetupDTO.java @@ -0,0 +1,6 @@ +package it.integry.integrywmsnative.core.REST.model; + +public class GestSetupDTO { + + public String value; +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/MailRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/MailRequestDTO.java new file mode 100644 index 00000000..c2d3989a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/MailRequestDTO.java @@ -0,0 +1,115 @@ +package it.integry.integrywmsnative.core.REST.model; + +public class MailRequestDTO { + + private String from; + private String fromName; + private String to; + private String replyTo; + private String replyToName; + private String cc; + private String ccn; + private String subject; + private String msgText; + private boolean isHtml = false; + private boolean isDebug = false; + + public String getFrom() { + return from; + } + + public MailRequestDTO setFrom(String from) { + this.from = from; + return this; + } + + public String getFromName() { + return fromName; + } + + public MailRequestDTO setFromName(String fromName) { + this.fromName = fromName; + return this; + } + + public String getTo() { + return to; + } + + public MailRequestDTO setTo(String to) { + this.to = to; + return this; + } + + public String getReplyTo() { + return replyTo; + } + + public MailRequestDTO setReplyTo(String replyTo) { + this.replyTo = replyTo; + return this; + } + + public String getReplyToName() { + return replyToName; + } + + public MailRequestDTO setReplyToName(String replyToName) { + this.replyToName = replyToName; + return this; + } + + public String getCc() { + return cc; + } + + public MailRequestDTO setCc(String cc) { + this.cc = cc; + return this; + } + + public String getCcn() { + return ccn; + } + + public MailRequestDTO setCcn(String ccn) { + this.ccn = ccn; + return this; + } + + public String getSubject() { + return subject; + } + + public MailRequestDTO setSubject(String subject) { + this.subject = subject; + return this; + } + + public String getMsgText() { + return msgText; + } + + public MailRequestDTO setMsgText(String msgText) { + this.msgText = msgText; + return this; + } + + public boolean isHtml() { + return isHtml; + } + + public MailRequestDTO setHtml(boolean html) { + isHtml = html; + return this; + } + + public boolean isDebug() { + return isDebug; + } + + public MailRequestDTO setDebug(boolean debug) { + isDebug = debug; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/NativeSqlRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/NativeSqlRequestDTO.java new file mode 100644 index 00000000..36110c61 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/NativeSqlRequestDTO.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.core.REST.model; + +public class NativeSqlRequestDTO { + + public String nativeSql; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/ServiceRESTResponse.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/ServiceRESTResponse.java index 694e09dc..e8e8b0bb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/REST/model/ServiceRESTResponse.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/model/ServiceRESTResponse.java @@ -3,6 +3,7 @@ package it.integry.integrywmsnative.core.REST.model; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; /** * Created by GiuseppeS on 06/03/2018. @@ -17,6 +18,7 @@ public class ServiceRESTResponse { private T dto; private T entity; + private List entityList; public EsitoType getEsito() { return EsitoType.fromIntValue(esito); @@ -25,7 +27,7 @@ public class ServiceRESTResponse { public Date getExecDate() { try { return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(execDate); - } catch (ParseException e) { + } catch (Exception e) { e.printStackTrace(); } return null; @@ -46,4 +48,8 @@ public class ServiceRESTResponse { public T getEntity() { return entity; } + + public List getEntityList() { + return entityList; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/REST/watcher/ServerStatusChecker.java b/app/src/main/java/it/integry/integrywmsnative/core/REST/watcher/ServerStatusChecker.java new file mode 100644 index 00000000..4001ba3e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/REST/watcher/ServerStatusChecker.java @@ -0,0 +1,64 @@ +package it.integry.integrywmsnative.core.REST.watcher; + +import android.os.Handler; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityServer; +import it.integry.integrywmsnative.core.utility.UtilityString; + +public class ServerStatusChecker { + + private static ServerStatusChecker istance = new ServerStatusChecker(); + + private List> mCallback = new ArrayList<>(); + + private ISingleValueOperationCallback mInternalCallback = value -> { + for (ISingleValueOperationCallback callback : mCallback) { + callback.onResult(value); + } + }; + + private boolean shouldExecute = true; + private final long MILLIS_DELAY = 5 * 1000; + + + private Handler handler = new Handler(); + private Runnable runnableCode = new Runnable() { + @Override + public void run() { + if(shouldExecute && !UtilityString.isNullOrEmpty(SettingsManager.i().server.host)) { + UtilityServer.isHostReachable(SettingsManager.i().server.host, SettingsManager.i().server.port, mInternalCallback); + handler.postDelayed(this, MILLIS_DELAY); + } + } + }; + + public void addCallback(ISingleValueOperationCallback callback){ + this.mCallback.add(callback); + + } + + public void removeCallback(ISingleValueOperationCallback callback){ + this.mCallback.remove(callback); + } + + + public static void init(){ + istance.shouldExecute = true; + + istance.handler.post(istance.runnableCode); + } + + public static void dispose() { + istance.shouldExecute = false; + } + + public static ServerStatusChecker getIstance() { + return istance; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeCallbackDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeCallbackDTO.java new file mode 100644 index 00000000..a8b03bae --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeCallbackDTO.java @@ -0,0 +1,39 @@ +package it.integry.integrywmsnative.core.barcode_reader; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; + +public class BarcodeCallbackDTO { + + private int ID = -1; + + private RunnableArgs onScanSuccessfull; + private RunnableArgs onScanFailed; + + public int getID() { + return ID; + } + + public BarcodeCallbackDTO setID(int ID) { + this.ID = ID; + return this; + } + + public RunnableArgs getOnScanSuccessfull() { + return onScanSuccessfull; + } + + public BarcodeCallbackDTO setOnScanSuccessfull(RunnableArgs onScanSuccessfull) { + this.onScanSuccessfull = onScanSuccessfull; + return this; + } + + public RunnableArgs getOnScanFailed() { + return onScanFailed; + } + + public BarcodeCallbackDTO setOnScanFailed(RunnableArgs onScanFailed) { + this.onScanFailed = onScanFailed; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeManager.java b/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeManager.java new file mode 100644 index 00000000..f9160f86 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/barcode_reader/BarcodeManager.java @@ -0,0 +1,137 @@ +package it.integry.integrywmsnative.core.barcode_reader; + +import android.content.Context; +import android.text.SpannableString; + +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.plugins.barcode_base_library.exception.BarcodeAdapterNotFoundException; +import it.integry.plugins.barcode_base_library.interfaces.BarcodeReaderInterface; +import it.integry.pointmobilescannerlibrary.PointMobileBarcodeReader; + +public class BarcodeManager { + + private static Context context; + + private static BarcodeReaderInterface mCurrentBarcodeInterface; + private static List mBarcodeCallbacksStacktrace = new ArrayList<>(); + + private static boolean mEnabled = true; + + + private static Class[] registeredBarcodeReaderInterfaces = new Class[]{ + PointMobileBarcodeReader.class + }; + + + public static void init(Context context) { + BarcodeManager.context = context; + + initBarcodeReader(); + } + + private static void initBarcodeReader() { + + for (Class readerInterface : registeredBarcodeReaderInterfaces){ + + Constructor cons = null; + try { + cons = Class.forName(readerInterface.getName()).getConstructors()[0]; + BarcodeReaderInterface object = (BarcodeReaderInterface) cons.newInstance(context); + + if(object.isRightAdapter()) { + mCurrentBarcodeInterface = object; + break; + } + + + } catch (Exception e) { + UtilityLogger.errorMe(e); + } + } + + if(mCurrentBarcodeInterface != null) { + + try { + mCurrentBarcodeInterface.init(); + } catch (BarcodeAdapterNotFoundException ex) { + UtilityExceptions.defaultException(context, ex); + } + + mCurrentBarcodeInterface.register(data -> { + BarcodeCallbackDTO callback = getValidCallback(); + if(callback != null && mEnabled) { + callback.getOnScanSuccessfull().run(data); + } + }, ex -> { + BarcodeCallbackDTO callback = getValidCallback(); + if(callback != null && mEnabled) { + callback.getOnScanFailed().run(ex); + } + }); + } + + } + + + private static BarcodeCallbackDTO getValidCallback() { + + if(mBarcodeCallbacksStacktrace.size() > 0) { + return mBarcodeCallbacksStacktrace.get(mBarcodeCallbacksStacktrace.size() -1); + } else { + return null; + } + + } + + public static BarcodeReaderInterface getCurrentBarcodeInterface() { + return mCurrentBarcodeInterface; + } + + public static int addCallback(BarcodeCallbackDTO barcodeCallbackDTO) { + + int newID = -1; + + if(mBarcodeCallbacksStacktrace.size() > 0) { + newID = mBarcodeCallbacksStacktrace.get(mBarcodeCallbacksStacktrace.size() -1).getID() + 1; + } else { + newID = 1; + } + + barcodeCallbackDTO.setID(newID); + mBarcodeCallbacksStacktrace.add(barcodeCallbackDTO); + + return newID; + } + + public static void removeCallback(int ID) { + boolean callbackObjFound = false; + + //Rimuovo la callback con l'ID trovato e tutte quelle con >ID in modo che rimuovo tutte le call aggiunte successivamente + + for (int i = 0; i < mBarcodeCallbacksStacktrace.size(); i++) { + if(mBarcodeCallbacksStacktrace.get(i).getID() == ID || callbackObjFound) { + mBarcodeCallbacksStacktrace.remove(i); + + callbackObjFound = true; + } + } + } + + + public static void disable() { + mEnabled = false; + } + + public static void enable() { + mEnabled = true; + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/AppComponent.java b/app/src/main/java/it/integry/integrywmsnative/core/di/AppComponent.java deleted file mode 100644 index a6e5c330..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/AppComponent.java +++ /dev/null @@ -1,8 +0,0 @@ -package it.integry.integrywmsnative.core.di; - -/** - * Created by GiuseppeS on 06/03/2018. - */ - -public class AppComponent { -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBoolean.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBoolean.java new file mode 100644 index 00000000..fe2013ca --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBoolean.java @@ -0,0 +1,28 @@ +package it.integry.integrywmsnative.core.di; + +import android.databinding.BaseObservable; + +import org.parceler.Parcel; + +@Parcel +public class BindableBoolean extends BaseObservable { + boolean mValue; + + public BindableBoolean() {} + + public BindableBoolean(boolean startValue) { + this.mValue = startValue; + } + + public boolean get() { + return mValue; + } + + public void set(boolean value) { + if (mValue != value) { + this.mValue = value; + notifyChange(); + } + } +} + diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java new file mode 100644 index 00000000..44993c4e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java @@ -0,0 +1,34 @@ +package it.integry.integrywmsnative.core.di; + +import android.databinding.BaseObservable; + +import org.parceler.Parcel; + +@Parcel +public class BindableFloat extends BaseObservable { + Float value; + + public Float get() { + return get(true); + } + + public Float get(boolean defaultIfNull) { + + if(value == null){ + if(defaultIfNull) return 0f; + else return null; + } else return value; + } + + public void set(Float value) { + if (!Objects.equals(this.value, value)) { + this.value = value; + notifyChange(); + } + } + + public boolean isEmpty() { + return value == null; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableInteger.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableInteger.java new file mode 100644 index 00000000..4a509d0a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableInteger.java @@ -0,0 +1,34 @@ +package it.integry.integrywmsnative.core.di; + +import android.databinding.BaseObservable; + +import org.parceler.Parcel; + +@Parcel +public class BindableInteger extends BaseObservable { + Integer value; + + public Integer get() { + return get(true); + } + + public Integer get(boolean defaultIfNull) { + + if(value == null){ + if(defaultIfNull) return 0; + else return null; + } else return value; + } + + public void set(Integer value) { + if (!Objects.equals(this.value, value)) { + this.value = value; + notifyChange(); + } + } + + public boolean isEmpty() { + return value == null; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableString.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableString.java new file mode 100644 index 00000000..0a3a9a7b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableString.java @@ -0,0 +1,50 @@ +package it.integry.integrywmsnative.core.di; + +import android.databinding.BaseObservable; +import android.databinding.Observable; + +import org.parceler.Parcel; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +@Parcel +public class BindableString extends BaseObservable { + String value; + + public String get() { + return value != null ? value : ""; + } + + public void set(String value) { + if (!Objects.equals(this.value, value)) { + this.value = value; + notifyChange(); + } + } + + public boolean isEmpty() { + return value == null || value.isEmpty(); + } + + public void refresh() { + notifyChange(); + } + + + + + public static void registerListener(BindableString bindableString, RunnableArgs onValueChanged) { + bindableString.addOnPropertyChangedCallback(new OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + if(onValueChanged != null) onValueChanged.run(bindableString.get()); + } + }); + } + + public static void resetListeners(BindableString bindableString){ + String oldValue = bindableString.get(); + bindableString = new BindableString(); + bindableString.set(oldValue); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java new file mode 100644 index 00000000..746fc636 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java @@ -0,0 +1,180 @@ +package it.integry.integrywmsnative.core.di; + +import android.databinding.BindingAdapter; +import android.databinding.BindingConversion; +import android.support.constraint.Guideline; +import android.support.design.widget.TextInputEditText; +import android.support.v4.util.Pair; +import android.support.v7.widget.AppCompatCheckBox; +import android.support.v7.widget.AppCompatTextView; +import android.util.Log; +import android.view.View; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.Toast; + +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Locale; + +import it.integry.integrywmsnative.R; + +public class Converters { + + @BindingConversion + public static String convertBindableToString(BindableString bindableString) { + return bindableString.get(); + } + + @BindingConversion + public static boolean convertBindableToBoolean(BindableBoolean bindableBoolean) { + return bindableBoolean.get(); + } + + @BindingAdapter("app:binding") + public static void bindEditText(EditText view, final BindableString bindableString) { + Pair pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != bindableString) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override public void onTextChanged(CharSequence s, int start, int before, int count) { + bindableString.set(s.toString()); + } + }; + view.setTag(R.id.bound_observable, new Pair<>(bindableString, watcher)); + view.addTextChangedListener(watcher); + } + String newValue = bindableString.get(); + if (!view.getText().toString().equals(newValue)) { + view.setText(newValue); + } + } + + @BindingAdapter("app:binding") + public static void bindTextInputEditText(TextInputEditText view, final BindableString bindableString) { + Pair pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != bindableString) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override public void onTextChanged(CharSequence s, int start, int before, int count) { + bindableString.set(s.toString()); + } + }; + view.setTag(R.id.bound_observable, new Pair<>(bindableString, watcher)); + view.addTextChangedListener(watcher); + } + String newValue = bindableString.get(); + if (!view.getText().toString().equals(newValue)) { + view.setText(newValue); + } + } + + @BindingAdapter("app:binding") + public static void bindTextView(AppCompatTextView view, final BindableString bindableString) { + Pair pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != bindableString) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override public void onTextChanged(CharSequence s, int start, int before, int count) { + bindableString.set(s.toString()); + } + }; + view.setTag(R.id.bound_observable, new Pair<>(bindableString, watcher)); + view.addTextChangedListener(watcher); + } + String newValue = bindableString.get(); + if (!view.getText().toString().equals(newValue)) { + view.setText(newValue); + } + } + + @BindingAdapter("app:binding") + public static void bindTextInputEditText(TextInputEditText view, final BindableFloat bindableFloat) { + DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.getDefault()); + otherSymbols.setDecimalSeparator('.'); + otherSymbols.setGroupingSeparator(','); + + + final DecimalFormat decimalFormat = new DecimalFormat(); + decimalFormat.setMaximumFractionDigits(2); + decimalFormat.setDecimalFormatSymbols(otherSymbols); + + Pair pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != bindableFloat) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override public void onTextChanged(CharSequence s, int start, int before, int count) { + try { + if(s.toString().trim().isEmpty()){ + bindableFloat.set(null); + } else bindableFloat.set(decimalFormat.parse(s.toString()).floatValue()); + } catch (Exception ex){ + Log.e("FloatFormat", ex.getMessage()); + } + } + }; + view.setTag(R.id.bound_observable, new Pair<>(bindableFloat, watcher)); + view.addTextChangedListener(watcher); + } + + Float newValue = bindableFloat.get(); + if (!view.getText().toString().equals(decimalFormat.format(newValue))) { + + view.setText(decimalFormat.format(newValue)); + view.setSelection(view.getText().toString().length()); + } + } + + @BindingAdapter("app:binding") + public static void bindRadioGroup(RadioGroup view, final BindableBoolean bindableBoolean) { + if (view.getTag(R.id.bound_observable) != bindableBoolean) { + view.setTag(R.id.bound_observable, bindableBoolean); + view.setOnCheckedChangeListener((group, checkedId) -> bindableBoolean.set(checkedId == group.getChildAt(1).getId())); + } + Boolean newValue = bindableBoolean.get(); + ((RadioButton) view.getChildAt(newValue ? 1 : 0)).setChecked(true); + } + + @BindingAdapter("app:checked") + public static void bindCheckbox(AppCompatCheckBox view, final BindableBoolean bindableBoolean) { + if (view.getTag(R.id.bound_observable) != bindableBoolean) { + view.setTag(R.id.bound_observable, bindableBoolean); + view.setOnCheckedChangeListener((compoundButton, b) -> { + bindableBoolean.set(b); + }); + } + Boolean newValue = bindableBoolean.get(); + view.setChecked(newValue); + } + + @BindingAdapter("app:checked") + public static void bindCheckbox(CheckBox view, final BindableBoolean bindableBoolean) { + if (view.getTag(R.id.bound_observable) != bindableBoolean) { + view.setTag(R.id.bound_observable, bindableBoolean); + view.setOnCheckedChangeListener((compoundButton, b) -> bindableBoolean.set(b)); + } + Boolean newValue = bindableBoolean.get(); + view.setChecked(newValue); + } + + @BindingAdapter({"app:onClick"}) + public static void bindOnClick(View view, final Runnable runnable) { + view.setOnClickListener(v -> runnable.run()); + } + + @BindingAdapter({"app:layout_constraintGuide_percent"}) + public static void bindFloatPercetageOnGuideline(View view, final float percentage) { + ((Guideline)view).setGuidelinePercent(percentage); + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Objects.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Objects.java new file mode 100644 index 00000000..60251305 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Objects.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.core.di; + +public class Objects { + public static boolean equals(Object a, Object b) { + return (a == b) || (a != null && a.equals(b)); + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/TextWatcherAdapter.java b/app/src/main/java/it/integry/integrywmsnative/core/di/TextWatcherAdapter.java new file mode 100644 index 00000000..4ce6099b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/TextWatcherAdapter.java @@ -0,0 +1,19 @@ +package it.integry.integrywmsnative.core.di; + +import android.text.Editable; +import android.text.TextWatcher; + +public class TextWatcherAdapter implements TextWatcher +{ + public void afterTextChanged(Editable editable) + { + } + + public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) + { + } + + public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) + { + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/ExpandableLayoutBinders.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/ExpandableLayoutBinders.java new file mode 100644 index 00000000..4077a281 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/ExpandableLayoutBinders.java @@ -0,0 +1,41 @@ +package it.integry.integrywmsnative.core.di.binders; + +import android.databinding.BindingAdapter; +import android.support.design.widget.TextInputEditText; +import android.support.v4.util.Pair; + +import net.cachapa.expandablelayout.ExpandableLayout; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.di.BindableBoolean; + +public class ExpandableLayoutBinders { + + @BindingAdapter("app:el_expanded_bind") + public static void bindExpandableLayout(final ExpandableLayout view, final BindableBoolean bindableBoolean) { + + Pair pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != bindableBoolean) { + if (pair != null) { + view.setOnExpansionUpdateListener(null); + } + + ExpandableLayout.OnExpansionUpdateListener watcher = new ExpandableLayout.OnExpansionUpdateListener() { + @Override + public void onExpansionUpdate(float expansionFraction, int state) { + if(view.isExpanded() == bindableBoolean.get()) return; + bindableBoolean.set(state == 1); + } + }; + + view.setTag(R.id.bound_observable, new Pair<>(bindableBoolean, watcher)); + view.setOnExpansionUpdateListener(watcher); + } + boolean newValue = bindableBoolean.get(); + if (!view.isExpanded() == newValue) { + if(newValue) view.expand(true); + else view.collapse(true); + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/RecyclerViewAdapterBinders.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/RecyclerViewAdapterBinders.java new file mode 100644 index 00000000..3afa44fe --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/RecyclerViewAdapterBinders.java @@ -0,0 +1,43 @@ +package it.integry.integrywmsnative.core.di.binders; + +import android.databinding.BindingAdapter; +import android.databinding.ObservableArrayList; +import android.support.v7.widget.RecyclerView; +import android.view.ViewGroup; + +import java.util.List; + +public class RecyclerViewAdapterBinders { + + + +// @BindingAdapter("app:adapter") +// public static void setItems(RecyclerView recyclerView, Class clazz) { +// setItems(recyclerView, null, clazz); +// } +// +// @BindingAdapter("app:items") +// public static void setItems(RecyclerView recyclerView, ObservableArrayList entries) { +// setItems(recyclerView, entries, null); +// } +// +// @BindingAdapter({"app:items", "app:adapter"}) +// public static void setItems(RecyclerView recyclerView, +// ObservableArrayList entries, Class clazz) { +// +//// recyclerView.removeAllViews(); +//// if (entries != null) { +//// LayoutInflater inflater = (LayoutInflater) +//// viewGroup.getContext() +//// .getSystemService(Context.LAYOUT_INFLATER_SERVICE); +//// for (int i = 0; i < entries.size(); i++) { +//// T entry = entries.get(i); +//// ViewDataBinding bindings = DataBindingUtil +//// .inflate(inflater, layoutId, viewGroup, true); +//// bindings.setVariable(BR.data, entry); +//// } +//// } +// } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/TextInputLayoutBinders.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/TextInputLayoutBinders.java new file mode 100644 index 00000000..ad2e5294 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/TextInputLayoutBinders.java @@ -0,0 +1,13 @@ +package it.integry.integrywmsnative.core.di.binders; + +import android.databinding.BindingAdapter; +import android.support.design.widget.TextInputLayout; + +public class TextInputLayoutBinders { + + @BindingAdapter("app:errorText") + public static void setErrorMessage(TextInputLayout view, String errorMessage) { + view.setError(errorMessage); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/BindingRecyclerViewAdapter.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/BindingRecyclerViewAdapter.java new file mode 100644 index 00000000..654e0e0c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/BindingRecyclerViewAdapter.java @@ -0,0 +1,216 @@ +package it.integry.integrywmsnative.core.di.binders.recyclerview; + +import android.databinding.DataBindingUtil; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableList; +import android.databinding.ViewDataBinding; +import android.support.annotation.Nullable; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import java.lang.ref.WeakReference; +import java.util.Collection; + +public class BindingRecyclerViewAdapter extends RecyclerView.Adapter implements View.OnClickListener, View.OnLongClickListener +{ + private static final int ITEM_MODEL = -124; + private final WeakReferenceOnListChangedCallback onListChangedCallback; + private final ItemBinder itemBinder; + private ObservableList items; + private LayoutInflater inflater; + private ClickHandler clickHandler; + private LongClickHandler longClickHandler; + + public BindingRecyclerViewAdapter(ItemBinder itemBinder, @Nullable Collection items) + { + this.itemBinder = itemBinder; + this.onListChangedCallback = new WeakReferenceOnListChangedCallback<>(this); + setItems(items); + } + + public ObservableList getItems() + { + return items; + } + + public void setItems(@Nullable Collection items) + { + if (this.items == items) + { + return; + } + + if (this.items != null) + { + this.items.removeOnListChangedCallback(onListChangedCallback); + notifyItemRangeRemoved(0, this.items.size()); + } + + if (items instanceof ObservableList) + { + this.items = (ObservableList) items; + notifyItemRangeInserted(0, this.items.size()); + this.items.addOnListChangedCallback(onListChangedCallback); + } + else if (items != null) + { + this.items = new ObservableArrayList<>(); + this.items.addOnListChangedCallback(onListChangedCallback); + this.items.addAll(items); + } + else + { + this.items = null; + } + } + + @Override + public void onDetachedFromRecyclerView(RecyclerView recyclerView) + { + if (items != null) + { + items.removeOnListChangedCallback(onListChangedCallback); + } + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int layoutId) + { + if (inflater == null) + { + inflater = LayoutInflater.from(viewGroup.getContext()); + } + + ViewDataBinding binding = DataBindingUtil.inflate(inflater, layoutId, viewGroup, false); + return new ViewHolder(binding); + } + + @Override + public void onBindViewHolder(ViewHolder viewHolder, int position) + { + final T item = items.get(position); + viewHolder.binding.setVariable(itemBinder.getBindingVariable(item), item); + viewHolder.binding.getRoot().setTag(ITEM_MODEL, item); + viewHolder.binding.getRoot().setOnClickListener(this); + viewHolder.binding.getRoot().setOnLongClickListener(this); + viewHolder.binding.executePendingBindings(); + } + + @Override + public int getItemViewType(int position) + { + return itemBinder.getLayoutRes(items.get(position)); + } + + @Override + public int getItemCount() + { + return items == null ? 0 : items.size(); + } + + @Override + public void onClick(View v) + { + if (clickHandler != null) + { + T item = (T) v.getTag(ITEM_MODEL); + clickHandler.onClick(item); + } + } + + @Override + public boolean onLongClick(View v) + { + if (longClickHandler != null) + { + T item = (T) v.getTag(ITEM_MODEL); + longClickHandler.onLongClick(item); + return true; + } + return false; + } + + public static class ViewHolder extends RecyclerView.ViewHolder + { + final ViewDataBinding binding; + + ViewHolder(ViewDataBinding binding) + { + super(binding.getRoot()); + this.binding = binding; + } + } + + private static class WeakReferenceOnListChangedCallback extends ObservableList.OnListChangedCallback + { + + private final WeakReference> adapterReference; + + public WeakReferenceOnListChangedCallback(BindingRecyclerViewAdapter bindingRecyclerViewAdapter) + { + this.adapterReference = new WeakReference<>(bindingRecyclerViewAdapter); + } + + @Override + public void onChanged(ObservableList sender) + { + RecyclerView.Adapter adapter = adapterReference.get(); + if (adapter != null) + { + adapter.notifyDataSetChanged(); + } + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) + { + RecyclerView.Adapter adapter = adapterReference.get(); + if (adapter != null) + { + adapter.notifyItemRangeChanged(positionStart, itemCount); + } + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) + { + RecyclerView.Adapter adapter = adapterReference.get(); + if (adapter != null) + { + adapter.notifyItemRangeInserted(positionStart, itemCount); + } + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) + { + RecyclerView.Adapter adapter = adapterReference.get(); + if (adapter != null) + { + adapter.notifyItemMoved(fromPosition, toPosition); + } + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) + { + RecyclerView.Adapter adapter = adapterReference.get(); + if (adapter != null) + { + adapter.notifyItemRangeRemoved(positionStart, itemCount); + } + } + } + + public void setClickHandler(ClickHandler clickHandler) + { + this.clickHandler = clickHandler; + } + + public void setLongClickHandler(LongClickHandler clickHandler) + { + this.longClickHandler = clickHandler; + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/ClickHandler.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/ClickHandler.java new file mode 100644 index 00000000..2c35050e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/ClickHandler.java @@ -0,0 +1,6 @@ +package it.integry.integrywmsnative.core.di.binders.recyclerview; + +public interface ClickHandler +{ + void onClick(T viewModel); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/ItemBinder.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/ItemBinder.java new file mode 100644 index 00000000..956a914b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/ItemBinder.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.core.di.binders.recyclerview; + +public interface ItemBinder +{ + int getLayoutRes(T model); + int getBindingVariable(T model); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/ItemBinderBase.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/ItemBinderBase.java new file mode 100644 index 00000000..754b7f33 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/ItemBinderBase.java @@ -0,0 +1,23 @@ +package it.integry.integrywmsnative.core.di.binders.recyclerview; + +public class ItemBinderBase implements ItemBinder +{ + protected final int bindingVariable; + protected final int layoutId; + + public ItemBinderBase(int bindingVariable, int layoutId) + { + this.bindingVariable = bindingVariable; + this.layoutId = layoutId; + } + + public int getLayoutRes(T model) + { + return layoutId; + } + + public int getBindingVariable(T model) + { + return bindingVariable; + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/LongClickHandler.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/LongClickHandler.java new file mode 100644 index 00000000..3896a1f6 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/LongClickHandler.java @@ -0,0 +1,6 @@ +package it.integry.integrywmsnative.core.di.binders.recyclerview; + +public interface LongClickHandler +{ + void onLongClick(T viewModel); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/RecyclerViewBindings.java b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/RecyclerViewBindings.java new file mode 100644 index 00000000..43aa99c5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/binders/recyclerview/RecyclerViewBindings.java @@ -0,0 +1,73 @@ +package it.integry.integrywmsnative.core.di.binders.recyclerview; + +import android.databinding.BindingAdapter; +import android.support.v7.widget.RecyclerView; + +import java.util.Collection; + +public class RecyclerViewBindings { + + private static final int KEY_ITEMS = -123; + private static final int KEY_CLICK_HANDLER = -124; + private static final int KEY_LONG_CLICK_HANDLER = -125; + + @SuppressWarnings("unchecked") + @BindingAdapter("items") + public static void setItems(RecyclerView recyclerView, Collection items) + { + BindingRecyclerViewAdapter adapter = (BindingRecyclerViewAdapter) recyclerView.getAdapter(); + if (adapter != null) + { + adapter.setItems(items); + } + else + { + recyclerView.setTag(KEY_ITEMS, items); + } + } + + @SuppressWarnings("unchecked") + @BindingAdapter("clickHandler") + public static void setHandler(RecyclerView recyclerView, ClickHandler handler) + { + BindingRecyclerViewAdapter adapter = (BindingRecyclerViewAdapter) recyclerView.getAdapter(); + if (adapter != null) + { + adapter.setClickHandler(handler); + } + else + { + recyclerView.setTag(KEY_CLICK_HANDLER, handler); + } + } + + @SuppressWarnings("unchecked") + @BindingAdapter("longClickHandler") + public static void setHandler(RecyclerView recyclerView, LongClickHandler handler) + { + BindingRecyclerViewAdapter adapter = (BindingRecyclerViewAdapter) recyclerView.getAdapter(); + if (adapter != null) + { + adapter.setLongClickHandler(handler); + } + else + { + recyclerView.setTag(KEY_LONG_CLICK_HANDLER, handler); + } + } + + @SuppressWarnings("unchecked") + @BindingAdapter("itemViewBinder") + public static void setItemViewBinder(RecyclerView recyclerView, ItemBinder itemViewMapper) + { + Collection items = (Collection) recyclerView.getTag(KEY_ITEMS); + ClickHandler clickHandler = (ClickHandler) recyclerView.getTag(KEY_CLICK_HANDLER); + BindingRecyclerViewAdapter adapter = new BindingRecyclerViewAdapter<>(itemViewMapper, items); + if(clickHandler != null) + { + adapter.setClickHandler(clickHandler); + } + recyclerView.setAdapter(adapter); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/exception/ExceptionsHandler.java b/app/src/main/java/it/integry/integrywmsnative/core/exception/ExceptionsHandler.java new file mode 100644 index 00000000..c87d9a82 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/exception/ExceptionsHandler.java @@ -0,0 +1,382 @@ +package it.integry.integrywmsnative.core.exception; + +import android.app.Activity; +import android.app.ActivityManager; +import android.app.ApplicationErrorReport; +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.os.Build; +import android.os.Debug; +import android.support.annotation.NonNull; +import android.util.Log; + +import java.io.PrintWriter; +import java.io.StringWriter; + +public class ExceptionsHandler implements Thread.UncaughtExceptionHandler{ + + + private ExceptionsHandler(Activity activity){ + + mPackageName = getPackageName(activity); + } + + + + public static ExceptionsHandler getINSTANCE(Activity activity){ + + if (mExceptionsHandler == null){ + + mExceptionsHandler = new ExceptionsHandler(activity); + } + + return mExceptionsHandler; + } + + + private static String getPackageName(Context pContext){ + + String packageName = ""; + + try{ + + ActivityManager activityManager = (ActivityManager) pContext + .getSystemService(Context.ACTIVITY_SERVICE); + + if (Build.VERSION.SDK_INT > 20){ + + packageName = activityManager.getRunningAppProcesses().get(0).processName; + }else{ + + // + packageName = activityManager.getRunningTasks(1).get(0).topActivity + .getPackageName(); + } + + // There is a limit to the tag length of 23. + packageName = packageName + .substring(0, packageName.length() > 22 ? 22 : packageName.length()); + + }catch (Exception ex){ + } + + if (packageName.isEmpty()){ + packageName = pContext.getPackageName(); + } + + return packageName; + } + + + + + public static void toCatch(Activity activity){ + + Thread.setDefaultUncaughtExceptionHandler(getINSTANCE(activity)); + } + + + + + + + + public static void logError(String message){ + + if (message.isEmpty()){ + + return; + } + + logError(new Throwable(message.trim())); + } + + + + + public static void logError(Throwable exception){ + + try{ + + logCrash(exception); + + }catch (Exception e){ + + Log.e(mPackageName, e.getMessage()); + } + } + + + + // Return the last error message + public static String getErrorMessage(){ + + return mErrorMessage; + } + + + + + public static void setErrorMessage(String errMsg){ + + mErrorMessage = errMsg; + } + + + + // Return the last crash information + public static ApplicationErrorReport.CrashInfo crashInfo(){ + + return mCrashInfo; + } + + + + + private static String getAppLabel(Context pContext){ + + PackageManager lPackageManager = pContext.getPackageManager(); + + ApplicationInfo lApplicationInfo = null; + + try{ + + lApplicationInfo = lPackageManager + .getApplicationInfo(pContext.getApplicationInfo().packageName, 0); + + }catch (final PackageManager.NameNotFoundException e){ + } + + return (String) (lApplicationInfo != null ? lPackageManager + .getApplicationLabel(lApplicationInfo) : "Unknown"); + } + + + + public static boolean inDebugger(){ + + // If in Debugger Environment + boolean debugging = Debug.isDebuggerConnected(); + + return debugging; + } + + + @NonNull + private static String errorMsg(Throwable exception, String exceptError){ + + if (!exceptError.contains("error")){ + + mReportBuilder.append(reportError(exception)); + } + + if (!exceptError.contains("callstack")){ + + mReportBuilder.append(reportCallStack(exception)); + } + + if (!exceptError.contains("deviceinfo")){ + + mReportBuilder.append(reportDeviceInfo()); + } + + if (!exceptError.contains("firmware")){ + + mReportBuilder.append(reportFirmware()); + } + + return mReportBuilder.toString(); + } + + + + + private static String reportError(Throwable exception){ + + mCrashInfo = new ApplicationErrorReport.CrashInfo(exception); + + if (mCrashInfo.exceptionMessage == null){ + + mErrorMessage = ""; + }else{ + + mErrorMessage = mCrashInfo.exceptionMessage + .replace(": " + mCrashInfo.exceptionClassName, ""); + } + + String throwFile = mCrashInfo.throwFileName == null ? "" + : mCrashInfo.throwFileName; + + return "\n************ " + mCrashInfo.exceptionClassName + " ************\n" + + mErrorMessage + LINE_SEPARATOR + + "\n File: " + throwFile + + "\n Method: " + mCrashInfo.throwMethodName + "()" + + "\n Line No.: " + Integer.toString(mCrashInfo.throwLineNumber) + + LINE_SEPARATOR; + // + "Class: " + crashInfo.throwClassName + LINE_SEPARATOR + } + + + + + private static String reportCallStack(Throwable exception){ + + StringWriter stackTrace = new StringWriter(); + + exception.printStackTrace(new PrintWriter(stackTrace)); + + String callStack = stackTrace.toString(); + + String errMsg = exception.toString(); + + return "\n************ CALLSTACK ************\n" + + callStack.replace(errMsg, "") + + LINE_SEPARATOR; + } + + + + + private static String reportDeviceInfo(){ + + return "\n************ DEVICE INFORMATION ***********\n" + + "Brand: " + + Build.BRAND + + LINE_SEPARATOR + + "Device: " + + Build.DEVICE + + LINE_SEPARATOR + + "Model: " + + Build.MODEL + + LINE_SEPARATOR + + "Id: " + + Build.ID + + LINE_SEPARATOR + + "Product: " + + Build.PRODUCT + + LINE_SEPARATOR; + } + + + + + private static String reportFirmware(){ + + return "\n************ FIRMWARE ************\n" + + "SDK: " + + Build.VERSION.SDK_INT + + LINE_SEPARATOR + + "Release: " + + Build.VERSION.RELEASE + + LINE_SEPARATOR + + "Incremental: " + + Build.VERSION.INCREMENTAL + + LINE_SEPARATOR; + } + + + + + // Empty the report as it is begin re-populated. + private static void reportEmptied(){ + + // No need to empty + if (mReportBuilder.length() == 0){ + + return; + } + + mReportBuilder.setLength(0); + + mReportBuilder.trimToSize(); + } + + + + + @Override + public void uncaughtException(Thread thread, Throwable exception){ + + // Don't re-enter -- avoid infinite loops if crash-reporting crashes. + if (mCrashing) return; + + mCrashing = true; + + catchException(thread, exception); + + defaultExceptionHandler(thread, exception); + } + + + + + public String catchException(Thread thread, Throwable exception){ + + String errorMsg = ""; + + try{ + + errorMsg = logCrash(exception); + + }catch (Exception ex){ + + Log.e(mPackageName, ex.getMessage()); + } + + return errorMsg; + } + + + + + public static void defaultExceptionHandler(Thread thread, Throwable exception){ + + try{ + + // Execute the old handler. + if (mOldHandler != null){ + + mOldHandler.uncaughtException(thread, exception); + } + + }catch (Exception ex){ + + Log.e(mPackageName, ex.getMessage()); + } + } + + + + + public static String logCrash(Throwable exception){ + + return errorMsg(exception, "deviceinfo firmware"); + } + + + + + public void onDestroy(){ + + mExceptionsHandler = null; + } + + // Prevents infinite loops. + private static volatile boolean mCrashing = false; + + private static final StringBuilder mReportBuilder = new StringBuilder(); + + private static final String LINE_SEPARATOR = "\n"; + + private static final Thread.UncaughtExceptionHandler mOldHandler = Thread + .getDefaultUncaughtExceptionHandler(); + + private static ExceptionsHandler mExceptionsHandler; + + private static String mPackageName; + + private static ApplicationErrorReport.CrashInfo mCrashInfo; + + private static String mErrorMessage = ""; +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgs.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgs.java new file mode 100644 index 00000000..fd726a32 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgs.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.core.expansion; + +public interface RunnableArgs { + + void run(T data); + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgss.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgss.java new file mode 100644 index 00000000..8969733d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgss.java @@ -0,0 +1,6 @@ +package it.integry.integrywmsnative.core.expansion; + +public interface RunnableArgss { + + void run(S data1, T data2); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IFilterableFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IFilterableFragment.java new file mode 100644 index 00000000..499017bd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IFilterableFragment.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.core.interfaces; + +public interface IFilterableFragment { + + void onFilterClick(); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IRecyclerFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IRecyclerFragment.java new file mode 100644 index 00000000..61f8146d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IRecyclerFragment.java @@ -0,0 +1,11 @@ +package it.integry.integrywmsnative.core.interfaces; + +import android.support.v7.widget.RecyclerView; + +import it.integry.plugins.waterfalltoolbar.WaterfallToolbar; + +public interface IRecyclerFragment { + + void setWaterfallToolbar(WaterfallToolbar waterfallToolbar); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IRecyclerItemClicked.java b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IRecyclerItemClicked.java new file mode 100644 index 00000000..ddb0416d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/IRecyclerItemClicked.java @@ -0,0 +1,5 @@ +package it.integry.integrywmsnative.core.interfaces; + +public interface IRecyclerItemClicked { + void onItemClick(T item, int position); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/ISelectAllFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/ISelectAllFragment.java new file mode 100644 index 00000000..1f32fff7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/ISelectAllFragment.java @@ -0,0 +1,9 @@ +package it.integry.integrywmsnative.core.interfaces; + +public interface ISelectAllFragment { + + boolean isEnabled(); + + void onSelectAll(); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/interfaces/ITitledFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/ITitledFragment.java similarity index 69% rename from app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/interfaces/ITitledFragment.java rename to app/src/main/java/it/integry/integrywmsnative/core/interfaces/ITitledFragment.java index 0426dfa8..4acc415b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/interfaces/ITitledFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/ITitledFragment.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.accettazione.core.interfaces; +package it.integry.integrywmsnative.core.interfaces; import android.content.Context; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/Azienda.java b/app/src/main/java/it/integry/integrywmsnative/core/model/Azienda.java new file mode 100644 index 00000000..d0b4e967 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/Azienda.java @@ -0,0 +1,711 @@ +package it.integry.integrywmsnative.core.model; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.util.Base64; + +import java.math.BigDecimal; + +import it.integry.integrywmsnative.core.utility.UtilityString; + +public class Azienda { + + private String nomeDitta; + private String indirizzo; + private String cap; + private String citta; + private String prov; + private String partIva; + private String numTel; + private String numFax; + private String eMail; + private Integer annoContab; + private Integer annoMagaz; + private Integer annoAttuale; + private String ultDataGio; + private Integer ultNumGio; + private String ribaRSoc1; + private String ribaRSoc2; + private String ribaRSocBreve; + private String dataInizMsg; + private String dataFineMsg; + private String messaggioDoc; + private String liquidazioniIva; + private String lastUpgDb; + private String logoFile; + private String logoB64; + private BigDecimal ultDareAv; + private Integer sollTop; + private Integer sollLeft; + private Integer ggUtili; + private String codSia; + private String flagFattDiff; + private String sollHeadPersonal; + private String lastUpgSp; + private String sitoWeb; + private BigDecimal capitaleSoc; + private String cciaa; + private String iscRegImp; + private String ragSocMod; + private String prefissoEan; + private String codFiscale; + private String persFisicaCognome; + private String persFisicaNome; + private String persFisicaSesso; + private String persFisicaDataNascita; + private String persFisicaComuneNascita; + private String persFisicaProvNascita; + private String flagPersFisica; + private String persFisicaCodFisc; + private String rapprLegale; + private String rapprLegaleCodFisc; + private String sedeAmm; + private String flagSetIvaOmaggi; + private String applicationName; + private String flagTipoFatturazione; + private String tribunale; + private Integer settRitardoAnno; + private String dbDistributore; + private String coStringco; + private String lastUpgQc; + private String tipoAzienda; + private String nazione; + private String codDiviContab; + private String codIvaOmaggi; + private String codCconQuadra; + + /** + * Regime Fiscale + */ + private String regFisc; + private String statoLiquidazione; + + /** + * Indirizzo PEC Sistema di Interscambio + */ + + private String emailSdi; + + /** + * Indirizzo PEC di invio mail verso lo SDI + */ + + private String fromEmailSdi; + + + public String getNomeDitta() { + return nomeDitta; + } + + public Azienda setNomeDitta(String nomeDitta) { + this.nomeDitta = nomeDitta; + return this; + } + + public String getIndirizzo() { + return indirizzo; + } + + public Azienda setIndirizzo(String indirizzo) { + this.indirizzo = indirizzo; + return this; + } + + public String getCap() { + return cap; + } + + public Azienda setCap(String cap) { + this.cap = cap; + return this; + } + + public String getCitta() { + return citta; + } + + public Azienda setCitta(String citta) { + this.citta = citta; + return this; + } + + public String getProv() { + return prov; + } + + public Azienda setProv(String prov) { + this.prov = prov; + return this; + } + + public String getPartIva() { + return partIva; + } + + public Azienda setPartIva(String partIva) { + this.partIva = partIva; + return this; + } + + public String getNumTel() { + return numTel; + } + + public Azienda setNumTel(String numTel) { + this.numTel = numTel; + return this; + } + + public String getNumFax() { + return numFax; + } + + public Azienda setNumFax(String numFax) { + this.numFax = numFax; + return this; + } + + public String geteMail() { + return eMail; + } + + public Azienda seteMail(String eMail) { + this.eMail = eMail; + return this; + } + + public Integer getAnnoContab() { + return annoContab; + } + + public Azienda setAnnoContab(Integer annoContab) { + this.annoContab = annoContab; + return this; + } + + public Integer getAnnoMagaz() { + return annoMagaz; + } + + public Azienda setAnnoMagaz(Integer annoMagaz) { + this.annoMagaz = annoMagaz; + return this; + } + + public Integer getAnnoAttuale() { + return annoAttuale; + } + + public Azienda setAnnoAttuale(Integer annoAttuale) { + this.annoAttuale = annoAttuale; + return this; + } + + public String getUltDataGio() { + return ultDataGio; + } + + public Azienda setUltDataGio(String ultDataGio) { + this.ultDataGio = ultDataGio; + return this; + } + + public Integer getUltNumGio() { + return ultNumGio; + } + + public Azienda setUltNumGio(Integer ultNumGio) { + this.ultNumGio = ultNumGio; + return this; + } + + public String getRibaRSoc1() { + return ribaRSoc1; + } + + public Azienda setRibaRSoc1(String ribaRSoc1) { + this.ribaRSoc1 = ribaRSoc1; + return this; + } + + public String getRibaRSoc2() { + return ribaRSoc2; + } + + public Azienda setRibaRSoc2(String ribaRSoc2) { + this.ribaRSoc2 = ribaRSoc2; + return this; + } + + public String getRibaRSocBreve() { + return ribaRSocBreve; + } + + public Azienda setRibaRSocBreve(String ribaRSocBreve) { + this.ribaRSocBreve = ribaRSocBreve; + return this; + } + + public String getDataInizMsg() { + return dataInizMsg; + } + + public Azienda setDataInizMsg(String dataInizMsg) { + this.dataInizMsg = dataInizMsg; + return this; + } + + public String getDataFineMsg() { + return dataFineMsg; + } + + public Azienda setDataFineMsg(String dataFineMsg) { + this.dataFineMsg = dataFineMsg; + return this; + } + + public String getMessaggioDoc() { + return messaggioDoc; + } + + public Azienda setMessaggioDoc(String messaggioDoc) { + this.messaggioDoc = messaggioDoc; + return this; + } + + public String getLiquidazioniIva() { + return liquidazioniIva; + } + + public Azienda setLiquidazioniIva(String liquidazioniIva) { + this.liquidazioniIva = liquidazioniIva; + return this; + } + + public String getLastUpgDb() { + return lastUpgDb; + } + + public Azienda setLastUpgDb(String lastUpgDb) { + this.lastUpgDb = lastUpgDb; + return this; + } + + public String getLogoFile() { + return logoFile; + } + + public Azienda setLogoFile(String logoFile) { + this.logoFile = logoFile; + return this; + } + + public String getLogoB64() { + return logoB64; + } + + public boolean isLogoAvailable() { + return !UtilityString.isNullOrEmpty(getLogoB64()); + } + + public Bitmap getLogo() { + if(getLogoB64() != null) { + byte[] decodedString = Base64.decode(getLogoB64(), Base64.DEFAULT); + Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); + return decodedByte; + } else return null; + + } + + public Azienda setLogoB64(String logoB64) { + this.logoB64 = logoB64; + return this; + } + + public BigDecimal getUltDareAv() { + return ultDareAv; + } + + public Azienda setUltDareAv(BigDecimal ultDareAv) { + this.ultDareAv = ultDareAv; + return this; + } + + public Integer getSollTop() { + return sollTop; + } + + public Azienda setSollTop(Integer sollTop) { + this.sollTop = sollTop; + return this; + } + + public Integer getSollLeft() { + return sollLeft; + } + + public Azienda setSollLeft(Integer sollLeft) { + this.sollLeft = sollLeft; + return this; + } + + public Integer getGgUtili() { + return ggUtili; + } + + public Azienda setGgUtili(Integer ggUtili) { + this.ggUtili = ggUtili; + return this; + } + + public String getCodSia() { + return codSia; + } + + public Azienda setCodSia(String codSia) { + this.codSia = codSia; + return this; + } + + public String getFlagFattDiff() { + return flagFattDiff; + } + + public Azienda setFlagFattDiff(String flagFattDiff) { + this.flagFattDiff = flagFattDiff; + return this; + } + + public String getSollHeadPersonal() { + return sollHeadPersonal; + } + + public Azienda setSollHeadPersonal(String sollHeadPersonal) { + this.sollHeadPersonal = sollHeadPersonal; + return this; + } + + public String getLastUpgSp() { + return lastUpgSp; + } + + public Azienda setLastUpgSp(String lastUpgSp) { + this.lastUpgSp = lastUpgSp; + return this; + } + + public String getSitoWeb() { + return sitoWeb; + } + + public Azienda setSitoWeb(String sitoWeb) { + this.sitoWeb = sitoWeb; + return this; + } + + public BigDecimal getCapitaleSoc() { + return capitaleSoc; + } + + public Azienda setCapitaleSoc(BigDecimal capitaleSoc) { + this.capitaleSoc = capitaleSoc; + return this; + } + + public String getCciaa() { + return cciaa; + } + + public Azienda setCciaa(String cciaa) { + this.cciaa = cciaa; + return this; + } + + public String getIscRegImp() { + return iscRegImp; + } + + public Azienda setIscRegImp(String iscRegImp) { + this.iscRegImp = iscRegImp; + return this; + } + + public String getRagSocMod() { + return ragSocMod; + } + + public Azienda setRagSocMod(String ragSocMod) { + this.ragSocMod = ragSocMod; + return this; + } + + public String getPrefissoEan() { + return prefissoEan; + } + + public Azienda setPrefissoEan(String prefissoEan) { + this.prefissoEan = prefissoEan; + return this; + } + + public String getCodFiscale() { + return codFiscale; + } + + public Azienda setCodFiscale(String codFiscale) { + this.codFiscale = codFiscale; + return this; + } + + public String getPersFisicaCognome() { + return persFisicaCognome; + } + + public Azienda setPersFisicaCognome(String persFisicaCognome) { + this.persFisicaCognome = persFisicaCognome; + return this; + } + + public String getPersFisicaNome() { + return persFisicaNome; + } + + public Azienda setPersFisicaNome(String persFisicaNome) { + this.persFisicaNome = persFisicaNome; + return this; + } + + public String getPersFisicaSesso() { + return persFisicaSesso; + } + + public Azienda setPersFisicaSesso(String persFisicaSesso) { + this.persFisicaSesso = persFisicaSesso; + return this; + } + + public String getPersFisicaDataNascita() { + return persFisicaDataNascita; + } + + public Azienda setPersFisicaDataNascita(String persFisicaDataNascita) { + this.persFisicaDataNascita = persFisicaDataNascita; + return this; + } + + public String getPersFisicaComuneNascita() { + return persFisicaComuneNascita; + } + + public Azienda setPersFisicaComuneNascita(String persFisicaComuneNascita) { + this.persFisicaComuneNascita = persFisicaComuneNascita; + return this; + } + + public String getPersFisicaProvNascita() { + return persFisicaProvNascita; + } + + public Azienda setPersFisicaProvNascita(String persFisicaProvNascita) { + this.persFisicaProvNascita = persFisicaProvNascita; + return this; + } + + public String getFlagPersFisica() { + return flagPersFisica; + } + + public Azienda setFlagPersFisica(String flagPersFisica) { + this.flagPersFisica = flagPersFisica; + return this; + } + + public String getPersFisicaCodFisc() { + return persFisicaCodFisc; + } + + public Azienda setPersFisicaCodFisc(String persFisicaCodFisc) { + this.persFisicaCodFisc = persFisicaCodFisc; + return this; + } + + public String getRapprLegale() { + return rapprLegale; + } + + public Azienda setRapprLegale(String rapprLegale) { + this.rapprLegale = rapprLegale; + return this; + } + + public String getRapprLegaleCodFisc() { + return rapprLegaleCodFisc; + } + + public Azienda setRapprLegaleCodFisc(String rapprLegaleCodFisc) { + this.rapprLegaleCodFisc = rapprLegaleCodFisc; + return this; + } + + public String getSedeAmm() { + return sedeAmm; + } + + public Azienda setSedeAmm(String sedeAmm) { + this.sedeAmm = sedeAmm; + return this; + } + + public String getFlagSetIvaOmaggi() { + return flagSetIvaOmaggi; + } + + public Azienda setFlagSetIvaOmaggi(String flagSetIvaOmaggi) { + this.flagSetIvaOmaggi = flagSetIvaOmaggi; + return this; + } + + public String getApplicationName() { + return applicationName; + } + + public Azienda setApplicationName(String applicationName) { + this.applicationName = applicationName; + return this; + } + + public String getFlagTipoFatturazione() { + return flagTipoFatturazione; + } + + public Azienda setFlagTipoFatturazione(String flagTipoFatturazione) { + this.flagTipoFatturazione = flagTipoFatturazione; + return this; + } + + public String getTribunale() { + return tribunale; + } + + public Azienda setTribunale(String tribunale) { + this.tribunale = tribunale; + return this; + } + + public Integer getSettRitardoAnno() { + return settRitardoAnno; + } + + public Azienda setSettRitardoAnno(Integer settRitardoAnno) { + this.settRitardoAnno = settRitardoAnno; + return this; + } + + public String getDbDistributore() { + return dbDistributore; + } + + public Azienda setDbDistributore(String dbDistributore) { + this.dbDistributore = dbDistributore; + return this; + } + + public String getCoStringco() { + return coStringco; + } + + public Azienda setCoStringco(String coStringco) { + this.coStringco = coStringco; + return this; + } + + public String getLastUpgQc() { + return lastUpgQc; + } + + public Azienda setLastUpgQc(String lastUpgQc) { + this.lastUpgQc = lastUpgQc; + return this; + } + + public String getTipoAzienda() { + return tipoAzienda; + } + + public Azienda setTipoAzienda(String tipoAzienda) { + this.tipoAzienda = tipoAzienda; + return this; + } + + public String getNazione() { + return nazione; + } + + public Azienda setNazione(String nazione) { + this.nazione = nazione; + return this; + } + + public String getCodDiviContab() { + return codDiviContab; + } + + public Azienda setCodDiviContab(String codDiviContab) { + this.codDiviContab = codDiviContab; + return this; + } + + public String getCodIvaOmaggi() { + return codIvaOmaggi; + } + + public Azienda setCodIvaOmaggi(String codIvaOmaggi) { + this.codIvaOmaggi = codIvaOmaggi; + return this; + } + + public String getCodCconQuadra() { + return codCconQuadra; + } + + public Azienda setCodCconQuadra(String codCconQuadra) { + this.codCconQuadra = codCconQuadra; + return this; + } + + public String getRegFisc() { + return regFisc; + } + + public Azienda setRegFisc(String regFisc) { + this.regFisc = regFisc; + return this; + } + + public String getStatoLiquidazione() { + return statoLiquidazione; + } + + public Azienda setStatoLiquidazione(String statoLiquidazione) { + this.statoLiquidazione = statoLiquidazione; + return this; + } + + public String getEmailSdi() { + return emailSdi; + } + + public Azienda setEmailSdi(String emailSdi) { + this.emailSdi = emailSdi; + return this; + } + + public String getFromEmailSdi() { + return fromEmailSdi; + } + + public Azienda setFromEmailSdi(String fromEmailSdi) { + this.fromEmailSdi = fromEmailSdi; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbAart.java b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbAart.java new file mode 100644 index 00000000..6a4b2e8b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbAart.java @@ -0,0 +1,35 @@ +package it.integry.integrywmsnative.core.model; + +import it.integry.integrywmsnative.core.di.BindableBoolean; + +public class CheckableMtbAart { + + private MtbAart mtbAart; + private BindableBoolean checked = new BindableBoolean(false); + + public CheckableMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + } + + public MtbAart getMtbAart() { + return mtbAart; + } + + public CheckableMtbAart setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } + + public BindableBoolean getChecked() { + return checked; + } + + public CheckableMtbAart setChecked(BindableBoolean checked) { + this.checked = checked; + return this; + } + + public void toggleCheck() { + this.checked.set(!this.checked.get()); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbColr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbColr.java new file mode 100644 index 00000000..f6cc9751 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/CheckableMtbColr.java @@ -0,0 +1,36 @@ +package it.integry.integrywmsnative.core.model; + +import it.integry.integrywmsnative.core.di.BindableBoolean; + +public class CheckableMtbColr { + + + private MtbColr mtbColr; + private BindableBoolean checked = new BindableBoolean(false); + + public CheckableMtbColr(MtbColr mtbColr) { + this.mtbColr = mtbColr; + } + + public MtbColr getMtbColr() { + return mtbColr; + } + + public CheckableMtbColr setMtbColr(MtbColr mtbColr) { + this.mtbColr = mtbColr; + return this; + } + + public BindableBoolean getChecked() { + return checked; + } + + public CheckableMtbColr setChecked(BindableBoolean checked) { + this.checked = checked; + return this; + } + + public void toggleCheck() { + this.checked.set(!this.checked.get()); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/CommonModelConsts.java b/app/src/main/java/it/integry/integrywmsnative/core/model/CommonModelConsts.java new file mode 100644 index 00000000..4d66c266 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/CommonModelConsts.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.core.model; + +public class CommonModelConsts { + + public static class OPERATION { + public static String INSERT_OR_UPDATE = "INSERT_OR_UPDATE"; + public static String INSERT = "INSERT"; + public static String UPDATE = "UPDATE"; + public static String SELECT = "SELECT"; + public static String SELECT_OBJECT = "SELECT_OBJECT"; + public static String SUBSTITUTE = "SUBSTITUTE"; + public static String DELETE = "DELETE"; + public static String NO_OP = "NO_OP"; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/DtbOrdt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/DtbOrdt.java new file mode 100644 index 00000000..43d0db37 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/DtbOrdt.java @@ -0,0 +1,1018 @@ +package it.integry.integrywmsnative.core.model; + +import java.math.BigDecimal; + +public class DtbOrdt extends EntityBase { + + private String dataOrd; + private String gestione; + private Integer numOrd; + private BigDecimal acconto; + private String activityId; + private String activityTypeId; + private String aspettoBeni; + private String causaleTrasp; + private String codAbi; + private String codAnag; + private String codAuto; + private String codBanc; + private String codBancAzi; + private String codCab; + private String codDgrpArt; + private String codDivi; + private String codEtic; + private String codFornTd; + private String codJcom; + private String codJfas; + private String codMdep; + private String codPaga; + private String codProd; + private String codTcolUi; + private String codTcolUl; + private String codVage; + private String codVage2; + private String codVdes; + private String codVvet; + private String codVvet2; + private String codVzon; + private BigDecimal colliPedana; + private String compilatoDa; + private String controllatoDa; + private String dataConsProd; + private String dataConsProdMax; + private String dataEsportazione; + private String dataConferma; + private String dataInizProd; + private String dataInizTrasp; + private String dataInsOrd; + private String dataOrdRif; + private String rifDdataOrd; + private String dataRicezione; + private String dataRifScad; + private String dataUltMod; + private String descrEstesaProd; + private String descrizionePaga; + private String descrizioneProd; + private String eanFidelity; + private String flagAnnulla; + private String flagEscRoyal; + private String flagEvasoForzato; + private String flagEvasoProd; + private String flagPrzScontati; + private String flagSospeso; + private String flagTipologia; + private String gestioneRif; + private String itemId; + private String listino; + private Integer livello; + private String mezzo; + private String modificatoDa; + private BigDecimal nettoMerce; + private BigDecimal nolo; + private String note; + private String numColli; + private String numCons; + private Integer numFase; + private Integer numOrdProvv; + private Integer numOrdRif; + private Integer rifNumOrd; + private String partitaMag; + private BigDecimal percEsclStat; + private String personaRif; + private String peso; + private String porto; + private BigDecimal qtaEvasaProd; + private BigDecimal qtaPrenotataRep; + private BigDecimal qtaProd; + private BigDecimal rapConvProd; + private String rfid; + private String rifOrd; + private Integer rigaOrdRif; + private BigDecimal sconto1; + private BigDecimal sconto2; + private BigDecimal sconto3; + private BigDecimal sconto4; + private String serie; + private String termCons; + private String tipoAnag; + private Integer totFasi; + private BigDecimal totImponib; + private BigDecimal totIva; + private BigDecimal totMerce; + private BigDecimal totOmaggi; + private BigDecimal totProvvig; + private String untMisProd; + private String flagPrzIva; + private String noteConferma; + private String codJflav; + + + public String getDataOrd() { + return dataOrd; + } + + public DtbOrdt setDataOrd(String dataOrd) { + this.dataOrd = dataOrd; + return this; + } + + public String getGestione() { + return gestione; + } + + public DtbOrdt setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public Integer getNumOrd() { + return numOrd; + } + + public DtbOrdt setNumOrd(Integer numOrd) { + this.numOrd = numOrd; + return this; + } + + public BigDecimal getAcconto() { + return acconto; + } + + public DtbOrdt setAcconto(BigDecimal acconto) { + this.acconto = acconto; + return this; + } + + public String getActivityId() { + return activityId; + } + + public DtbOrdt setActivityId(String activityId) { + this.activityId = activityId; + return this; + } + + public String getActivityTypeId() { + return activityTypeId; + } + + public DtbOrdt setActivityTypeId(String activityTypeId) { + this.activityTypeId = activityTypeId; + return this; + } + + public String getAspettoBeni() { + return aspettoBeni; + } + + public DtbOrdt setAspettoBeni(String aspettoBeni) { + this.aspettoBeni = aspettoBeni; + return this; + } + + public String getCausaleTrasp() { + return causaleTrasp; + } + + public DtbOrdt setCausaleTrasp(String causaleTrasp) { + this.causaleTrasp = causaleTrasp; + return this; + } + + public String getCodAbi() { + return codAbi; + } + + public DtbOrdt setCodAbi(String codAbi) { + this.codAbi = codAbi; + return this; + } + + public String getCodAnag() { + return codAnag; + } + + public DtbOrdt setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getCodAuto() { + return codAuto; + } + + public DtbOrdt setCodAuto(String codAuto) { + this.codAuto = codAuto; + return this; + } + + public String getCodBanc() { + return codBanc; + } + + public DtbOrdt setCodBanc(String codBanc) { + this.codBanc = codBanc; + return this; + } + + public String getCodBancAzi() { + return codBancAzi; + } + + public DtbOrdt setCodBancAzi(String codBancAzi) { + this.codBancAzi = codBancAzi; + return this; + } + + public String getCodCab() { + return codCab; + } + + public DtbOrdt setCodCab(String codCab) { + this.codCab = codCab; + return this; + } + + public String getCodDgrpArt() { + return codDgrpArt; + } + + public DtbOrdt setCodDgrpArt(String codDgrpArt) { + this.codDgrpArt = codDgrpArt; + return this; + } + + public String getCodDivi() { + return codDivi; + } + + public DtbOrdt setCodDivi(String codDivi) { + this.codDivi = codDivi; + return this; + } + + public String getCodEtic() { + return codEtic; + } + + public DtbOrdt setCodEtic(String codEtic) { + this.codEtic = codEtic; + return this; + } + + public String getCodFornTd() { + return codFornTd; + } + + public DtbOrdt setCodFornTd(String codFornTd) { + this.codFornTd = codFornTd; + return this; + } + + public String getCodJcom() { + return codJcom; + } + + public DtbOrdt setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public String getCodJfas() { + return codJfas; + } + + public DtbOrdt setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public String getCodMdep() { + return codMdep; + } + + public DtbOrdt setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getCodPaga() { + return codPaga; + } + + public DtbOrdt setCodPaga(String codPaga) { + this.codPaga = codPaga; + return this; + } + + public String getCodProd() { + return codProd; + } + + public DtbOrdt setCodProd(String codProd) { + this.codProd = codProd; + return this; + } + + public String getCodTcolUi() { + return codTcolUi; + } + + public DtbOrdt setCodTcolUi(String codTcolUi) { + this.codTcolUi = codTcolUi; + return this; + } + + public String getCodTcolUl() { + return codTcolUl; + } + + public DtbOrdt setCodTcolUl(String codTcolUl) { + this.codTcolUl = codTcolUl; + return this; + } + + public String getCodVage() { + return codVage; + } + + public DtbOrdt setCodVage(String codVage) { + this.codVage = codVage; + return this; + } + + public String getCodVage2() { + return codVage2; + } + + public DtbOrdt setCodVage2(String codVage2) { + this.codVage2 = codVage2; + return this; + } + + public String getCodVdes() { + return codVdes; + } + + public DtbOrdt setCodVdes(String codVdes) { + this.codVdes = codVdes; + return this; + } + + public String getCodVvet() { + return codVvet; + } + + public DtbOrdt setCodVvet(String codVvet) { + this.codVvet = codVvet; + return this; + } + + public String getCodVvet2() { + return codVvet2; + } + + public DtbOrdt setCodVvet2(String codVvet2) { + this.codVvet2 = codVvet2; + return this; + } + + public String getCodVzon() { + return codVzon; + } + + public DtbOrdt setCodVzon(String codVzon) { + this.codVzon = codVzon; + return this; + } + + public BigDecimal getColliPedana() { + return colliPedana; + } + + public DtbOrdt setColliPedana(BigDecimal colliPedana) { + this.colliPedana = colliPedana; + return this; + } + + public String getCompilatoDa() { + return compilatoDa; + } + + public DtbOrdt setCompilatoDa(String compilatoDa) { + this.compilatoDa = compilatoDa; + return this; + } + + public String getControllatoDa() { + return controllatoDa; + } + + public DtbOrdt setControllatoDa(String controllatoDa) { + this.controllatoDa = controllatoDa; + return this; + } + + public String getDataConsProd() { + return dataConsProd; + } + + public DtbOrdt setDataConsProd(String dataConsProd) { + this.dataConsProd = dataConsProd; + return this; + } + + public String getDataConsProdMax() { + return dataConsProdMax; + } + + public DtbOrdt setDataConsProdMax(String dataConsProdMax) { + this.dataConsProdMax = dataConsProdMax; + return this; + } + + public String getDataEsportazione() { + return dataEsportazione; + } + + public DtbOrdt setDataEsportazione(String dataEsportazione) { + this.dataEsportazione = dataEsportazione; + return this; + } + + public String getDataConferma() { + return dataConferma; + } + + public DtbOrdt setDataConferma(String dataConferma) { + this.dataConferma = dataConferma; + return this; + } + + public String getDataInizProd() { + return dataInizProd; + } + + public DtbOrdt setDataInizProd(String dataInizProd) { + this.dataInizProd = dataInizProd; + return this; + } + + public String getDataInizTrasp() { + return dataInizTrasp; + } + + public DtbOrdt setDataInizTrasp(String dataInizTrasp) { + this.dataInizTrasp = dataInizTrasp; + return this; + } + + public String getDataInsOrd() { + return dataInsOrd; + } + + public DtbOrdt setDataInsOrd(String dataInsOrd) { + this.dataInsOrd = dataInsOrd; + return this; + } + + public String getDataOrdRif() { + return dataOrdRif; + } + + public DtbOrdt setDataOrdRif(String dataOrdRif) { + this.dataOrdRif = dataOrdRif; + return this; + } + + public String getRifDdataOrd() { + return rifDdataOrd; + } + + public DtbOrdt setRifDdataOrd(String rifDdataOrd) { + this.rifDdataOrd = rifDdataOrd; + return this; + } + + public String getDataRicezione() { + return dataRicezione; + } + + public DtbOrdt setDataRicezione(String dataRicezione) { + this.dataRicezione = dataRicezione; + return this; + } + + public String getDataRifScad() { + return dataRifScad; + } + + public DtbOrdt setDataRifScad(String dataRifScad) { + this.dataRifScad = dataRifScad; + return this; + } + + public String getDataUltMod() { + return dataUltMod; + } + + public DtbOrdt setDataUltMod(String dataUltMod) { + this.dataUltMod = dataUltMod; + return this; + } + + public String getDescrEstesaProd() { + return descrEstesaProd; + } + + public DtbOrdt setDescrEstesaProd(String descrEstesaProd) { + this.descrEstesaProd = descrEstesaProd; + return this; + } + + public String getDescrizionePaga() { + return descrizionePaga; + } + + public DtbOrdt setDescrizionePaga(String descrizionePaga) { + this.descrizionePaga = descrizionePaga; + return this; + } + + public String getDescrizioneProd() { + return descrizioneProd; + } + + public DtbOrdt setDescrizioneProd(String descrizioneProd) { + this.descrizioneProd = descrizioneProd; + return this; + } + + public String getEanFidelity() { + return eanFidelity; + } + + public DtbOrdt setEanFidelity(String eanFidelity) { + this.eanFidelity = eanFidelity; + return this; + } + + public String getFlagAnnulla() { + return flagAnnulla; + } + + public DtbOrdt setFlagAnnulla(String flagAnnulla) { + this.flagAnnulla = flagAnnulla; + return this; + } + + public String getFlagEscRoyal() { + return flagEscRoyal; + } + + public DtbOrdt setFlagEscRoyal(String flagEscRoyal) { + this.flagEscRoyal = flagEscRoyal; + return this; + } + + public String getFlagEvasoForzato() { + return flagEvasoForzato; + } + + public DtbOrdt setFlagEvasoForzato(String flagEvasoForzato) { + this.flagEvasoForzato = flagEvasoForzato; + return this; + } + + public String getFlagEvasoProd() { + return flagEvasoProd; + } + + public DtbOrdt setFlagEvasoProd(String flagEvasoProd) { + this.flagEvasoProd = flagEvasoProd; + return this; + } + + public String getFlagPrzScontati() { + return flagPrzScontati; + } + + public DtbOrdt setFlagPrzScontati(String flagPrzScontati) { + this.flagPrzScontati = flagPrzScontati; + return this; + } + + public String getFlagSospeso() { + return flagSospeso; + } + + public DtbOrdt setFlagSospeso(String flagSospeso) { + this.flagSospeso = flagSospeso; + return this; + } + + public String getFlagTipologia() { + return flagTipologia; + } + + public DtbOrdt setFlagTipologia(String flagTipologia) { + this.flagTipologia = flagTipologia; + return this; + } + + public String getGestioneRif() { + return gestioneRif; + } + + public DtbOrdt setGestioneRif(String gestioneRif) { + this.gestioneRif = gestioneRif; + return this; + } + + public String getItemId() { + return itemId; + } + + public DtbOrdt setItemId(String itemId) { + this.itemId = itemId; + return this; + } + + public String getListino() { + return listino; + } + + public DtbOrdt setListino(String listino) { + this.listino = listino; + return this; + } + + public Integer getLivello() { + return livello; + } + + public DtbOrdt setLivello(Integer livello) { + this.livello = livello; + return this; + } + + public String getMezzo() { + return mezzo; + } + + public DtbOrdt setMezzo(String mezzo) { + this.mezzo = mezzo; + return this; + } + + public String getModificatoDa() { + return modificatoDa; + } + + public DtbOrdt setModificatoDa(String modificatoDa) { + this.modificatoDa = modificatoDa; + return this; + } + + public BigDecimal getNettoMerce() { + return nettoMerce; + } + + public DtbOrdt setNettoMerce(BigDecimal nettoMerce) { + this.nettoMerce = nettoMerce; + return this; + } + + public BigDecimal getNolo() { + return nolo; + } + + public DtbOrdt setNolo(BigDecimal nolo) { + this.nolo = nolo; + return this; + } + + public String getNote() { + return note; + } + + public DtbOrdt setNote(String note) { + this.note = note; + return this; + } + + public String getNumColli() { + return numColli; + } + + public DtbOrdt setNumColli(String numColli) { + this.numColli = numColli; + return this; + } + + public String getNumCons() { + return numCons; + } + + public DtbOrdt setNumCons(String numCons) { + this.numCons = numCons; + return this; + } + + public Integer getNumFase() { + return numFase; + } + + public DtbOrdt setNumFase(Integer numFase) { + this.numFase = numFase; + return this; + } + + public Integer getNumOrdProvv() { + return numOrdProvv; + } + + public DtbOrdt setNumOrdProvv(Integer numOrdProvv) { + this.numOrdProvv = numOrdProvv; + return this; + } + + public Integer getNumOrdRif() { + return numOrdRif; + } + + public DtbOrdt setNumOrdRif(Integer numOrdRif) { + this.numOrdRif = numOrdRif; + return this; + } + + public Integer getRifNumOrd() { + return rifNumOrd; + } + + public DtbOrdt setRifNumOrd(Integer rifNumOrd) { + this.rifNumOrd = rifNumOrd; + return this; + } + + public String getPartitaMag() { + return partitaMag; + } + + public DtbOrdt setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + public BigDecimal getPercEsclStat() { + return percEsclStat; + } + + public DtbOrdt setPercEsclStat(BigDecimal percEsclStat) { + this.percEsclStat = percEsclStat; + return this; + } + + public String getPersonaRif() { + return personaRif; + } + + public DtbOrdt setPersonaRif(String personaRif) { + this.personaRif = personaRif; + return this; + } + + public String getPeso() { + return peso; + } + + public DtbOrdt setPeso(String peso) { + this.peso = peso; + return this; + } + + public String getPorto() { + return porto; + } + + public DtbOrdt setPorto(String porto) { + this.porto = porto; + return this; + } + + public BigDecimal getQtaEvasaProd() { + return qtaEvasaProd; + } + + public DtbOrdt setQtaEvasaProd(BigDecimal qtaEvasaProd) { + this.qtaEvasaProd = qtaEvasaProd; + return this; + } + + public BigDecimal getQtaPrenotataRep() { + return qtaPrenotataRep; + } + + public DtbOrdt setQtaPrenotataRep(BigDecimal qtaPrenotataRep) { + this.qtaPrenotataRep = qtaPrenotataRep; + return this; + } + + public BigDecimal getQtaProd() { + return qtaProd; + } + + public DtbOrdt setQtaProd(BigDecimal qtaProd) { + this.qtaProd = qtaProd; + return this; + } + + public BigDecimal getRapConvProd() { + return rapConvProd; + } + + public DtbOrdt setRapConvProd(BigDecimal rapConvProd) { + this.rapConvProd = rapConvProd; + return this; + } + + public String getRfid() { + return rfid; + } + + public DtbOrdt setRfid(String rfid) { + this.rfid = rfid; + return this; + } + + public String getRifOrd() { + return rifOrd; + } + + public DtbOrdt setRifOrd(String rifOrd) { + this.rifOrd = rifOrd; + return this; + } + + public Integer getRigaOrdRif() { + return rigaOrdRif; + } + + public DtbOrdt setRigaOrdRif(Integer rigaOrdRif) { + this.rigaOrdRif = rigaOrdRif; + return this; + } + + public BigDecimal getSconto1() { + return sconto1; + } + + public DtbOrdt setSconto1(BigDecimal sconto1) { + this.sconto1 = sconto1; + return this; + } + + public BigDecimal getSconto2() { + return sconto2; + } + + public DtbOrdt setSconto2(BigDecimal sconto2) { + this.sconto2 = sconto2; + return this; + } + + public BigDecimal getSconto3() { + return sconto3; + } + + public DtbOrdt setSconto3(BigDecimal sconto3) { + this.sconto3 = sconto3; + return this; + } + + public BigDecimal getSconto4() { + return sconto4; + } + + public DtbOrdt setSconto4(BigDecimal sconto4) { + this.sconto4 = sconto4; + return this; + } + + public String getSerie() { + return serie; + } + + public DtbOrdt setSerie(String serie) { + this.serie = serie; + return this; + } + + public String getTermCons() { + return termCons; + } + + public DtbOrdt setTermCons(String termCons) { + this.termCons = termCons; + return this; + } + + public String getTipoAnag() { + return tipoAnag; + } + + public DtbOrdt setTipoAnag(String tipoAnag) { + this.tipoAnag = tipoAnag; + return this; + } + + public Integer getTotFasi() { + return totFasi; + } + + public DtbOrdt setTotFasi(Integer totFasi) { + this.totFasi = totFasi; + return this; + } + + public BigDecimal getTotImponib() { + return totImponib; + } + + public DtbOrdt setTotImponib(BigDecimal totImponib) { + this.totImponib = totImponib; + return this; + } + + public BigDecimal getTotIva() { + return totIva; + } + + public DtbOrdt setTotIva(BigDecimal totIva) { + this.totIva = totIva; + return this; + } + + public BigDecimal getTotMerce() { + return totMerce; + } + + public DtbOrdt setTotMerce(BigDecimal totMerce) { + this.totMerce = totMerce; + return this; + } + + public BigDecimal getTotOmaggi() { + return totOmaggi; + } + + public DtbOrdt setTotOmaggi(BigDecimal totOmaggi) { + this.totOmaggi = totOmaggi; + return this; + } + + public BigDecimal getTotProvvig() { + return totProvvig; + } + + public DtbOrdt setTotProvvig(BigDecimal totProvvig) { + this.totProvvig = totProvvig; + return this; + } + + public String getUntMisProd() { + return untMisProd; + } + + public DtbOrdt setUntMisProd(String untMisProd) { + this.untMisProd = untMisProd; + return this; + } + + public String getFlagPrzIva() { + return flagPrzIva; + } + + public DtbOrdt setFlagPrzIva(String flagPrzIva) { + this.flagPrzIva = flagPrzIva; + return this; + } + + public String getNoteConferma() { + return noteConferma; + } + + public DtbOrdt setNoteConferma(String noteConferma) { + this.noteConferma = noteConferma; + return this; + } + + public String getCodJflav() { + return codJflav; + } + + public DtbOrdt setCodJflav(String codJflav) { + this.codJflav = codJflav; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/EntityBase.java b/app/src/main/java/it/integry/integrywmsnative/core/model/EntityBase.java new file mode 100644 index 00000000..732682f0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/EntityBase.java @@ -0,0 +1,41 @@ +package it.integry.integrywmsnative.core.model; + +import android.util.Log; + +public abstract class EntityBase implements Cloneable{ + + public String operation; + public String type; + public boolean onlyPkMaster = false; + + public String getOperation() { + return operation; + } + + public EntityBase setOperation(String operation) { + this.operation = operation; + return this; + } + + public boolean isOnlyPkMaster() { + return onlyPkMaster; + } + + public EntityBase setOnlyPkMaster(boolean onlyPkMaster) { + this.onlyPkMaster = onlyPkMaster; + return this; + } + + @Override + public EntityBase clone(){ + EntityBase clone = null; + + try { + clone = (EntityBase) super.clone(); + } catch (CloneNotSupportedException ex){ + Log.e("CloneError", ex.getMessage()); + } + + return clone; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/FiltroOrdineDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/model/FiltroOrdineDTO.java new file mode 100644 index 00000000..0e9e5ea1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/FiltroOrdineDTO.java @@ -0,0 +1,50 @@ +package it.integry.integrywmsnative.core.model; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class FiltroOrdineDTO { + + private String gestioneOrd; + private String dataOrd; + private int numOrd; + + public String getGestioneOrd() { + return gestioneOrd; + } + + public FiltroOrdineDTO setGestioneOrd(String gestioneOrd) { + this.gestioneOrd = gestioneOrd; + return this; + } + + public String getDataOrdS() { + return dataOrd; + } + + public Date getDataOrdD() throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataOrdS()); + } + + public FiltroOrdineDTO setDataOrd(String dataOrd) { + this.dataOrd = dataOrd; + return this; + } + + public FiltroOrdineDTO setDataOrd(Date dataOrd) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataOrd = sdf.format(dataOrd); + return this; + } + + public int getNumOrd() { + return numOrd; + } + + public FiltroOrdineDTO setNumOrd(int numOrd) { + this.numOrd = numOrd; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAart.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAart.java index 878853bc..d5168a05 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAart.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAart.java @@ -12,86 +12,96 @@ import java.util.Date; public class MtbAart implements Parcelable{ - public String codMart; - public String descrizione; - public String untMis; - public String barCode; - public BigDecimal pesoKg; - public BigDecimal qtaCnf; - public String codAliq; - public String codScoArt; - public String codTcolUi; - public String codTcolUl; - public String articoloComposto; - public String esposizioneComp; - public String descrizioneEstesa; - public String codUltForn; - public String dataUltCar; - public BigDecimal valUltCar; - public String codUltClie; - public String dataUltScar; - public BigDecimal valUltScar; - public String tipoCodice; - public String note; - public String posizione; - public BigDecimal colliPedana; - public String untMis2; - public BigDecimal rapConv2; - public String flagInclListino; - public String untMis3; - public BigDecimal rapConv3; - public String codMartStat; - public String codMcon; - public String codMgrp; - public String codMsfa; - public String codMsgr; - public String codMstp; - public String codMtip; - public String descrizioneStat; - public String flagStato; - public BigDecimal cambioDiviCar; - public BigDecimal cambioDiviScar; - public Integer ggScadPartita; - public BigDecimal volumeMc; - public String flagEsponiPrz; - public String dataUltVar; - public BigDecimal percSfrido; - public String codBarreImb; - public String flagCalcPrz; - public String esposizioneCompAcq; - public String flagCalcPrzAcq; - public String diacod; - public String plu; - public String partIvaProd; - public String ragSocProd; - public String flagRapConvVariabile; - public String flagMovArtMag; - public String flagTracciabilita; - public BigDecimal taraKg; - public BigDecimal colliStrato; - public String flagQtaCnfFissa; - public String flagColliPedanaFisso; - public String codCconCosti; - public String codCconRicavi; - public String codDgrpArt; - public String codDiviCar; - public String codDiviScar; - public String codEcrCat; - public String codEcrMcat; - public String codEcrRep; - public String codEcrStipo; - public String codEcrTipo; - public String codGrpBolla; - public String ingredienti; - public String idArtEqui; - public String descrCassa; - public String codNcIntracee; - public String marchio; - public Integer sezione; + private String codMart; + private String descrizione; + private String untMis; + private String barCode; + private BigDecimal pesoKg; + private BigDecimal qtaCnf; + private String codAliq; + private String codScoArt; + private String codTcolUi; + private String codTcolUl; + private String articoloComposto; + private String esposizioneComp; + private String descrizioneEstesa; + private String codUltForn; + private String dataUltCar; + private BigDecimal valUltCar; + private String codUltClie; + private String dataUltScar; + private BigDecimal valUltScar; + private String tipoCodice; + private String note; + private String posizione; + private BigDecimal colliPedana; + private String untMis2; + private BigDecimal rapConv2; + private String flagInclListino; + private String untMis3; + private BigDecimal rapConv3; + private String codMartStat; + private String codMcon; + private String codMgrp; + private String codMsfa; + private String codMsgr; + private String codMstp; + private String codMtip; + private String descrizioneStat; + private String flagStato; + private BigDecimal cambioDiviCar; + private BigDecimal cambioDiviScar; + private Integer ggScadPartita; + private BigDecimal volumeMc; + private String flagEsponiPrz; + private String dataUltVar; + private BigDecimal percSfrido; + private String codBarreImb; + private String flagCalcPrz; + private String esposizioneCompAcq; + private String flagCalcPrzAcq; + private String diacod; + private String plu; + private String partIvaProd; + private String ragSocProd; + private String flagRapConvVariabile; + private String flagMovArtMag; + private String flagTracciabilita; + private BigDecimal taraKg; + private BigDecimal colliStrato; + private String flagQtaCnfFissa; + private String flagColliPedanaFisso; + private String codCconCosti; + private String codCconRicavi; + private String codDgrpArt; + private String codDiviCar; + private String codDiviScar; + private String codEcrCat; + private String codEcrMcat; + private String codEcrRep; + private String codEcrStipo; + private String codEcrTipo; + private String codGrpBolla; + private String ingredienti; + private String idArtEqui; + private String descrCassa; + private String codNcIntracee; + private String marchio; + private Integer sezione; public MtbAart(){} + + public boolean isFlagTracciabilita() { + return flagTracciabilita != null && flagTracciabilita.equalsIgnoreCase("S"); + } + + + + + + protected MtbAart(Parcel in) { codMart = in.readString(); descrizione = in.readString(); @@ -176,6 +186,690 @@ public class MtbAart implements Parcelable{ return 0; } + public String getCodMart() { + return codMart; + } + + public MtbAart setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public MtbAart setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getUntMis() { + return untMis; + } + + public MtbAart setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + public String getBarCode() { + return barCode; + } + + public MtbAart setBarCode(String barCode) { + this.barCode = barCode; + return this; + } + + public BigDecimal getPesoKg() { + return pesoKg; + } + + public MtbAart setPesoKg(BigDecimal pesoKg) { + this.pesoKg = pesoKg; + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public MtbAart setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + + public String getCodAliq() { + return codAliq; + } + + public MtbAart setCodAliq(String codAliq) { + this.codAliq = codAliq; + return this; + } + + public String getCodScoArt() { + return codScoArt; + } + + public MtbAart setCodScoArt(String codScoArt) { + this.codScoArt = codScoArt; + return this; + } + + public String getCodTcolUi() { + return codTcolUi; + } + + public MtbAart setCodTcolUi(String codTcolUi) { + this.codTcolUi = codTcolUi; + return this; + } + + public String getCodTcolUl() { + return codTcolUl; + } + + public MtbAart setCodTcolUl(String codTcolUl) { + this.codTcolUl = codTcolUl; + return this; + } + + public String getArticoloComposto() { + return articoloComposto; + } + + public MtbAart setArticoloComposto(String articoloComposto) { + this.articoloComposto = articoloComposto; + return this; + } + + public String getEsposizioneComp() { + return esposizioneComp; + } + + public MtbAart setEsposizioneComp(String esposizioneComp) { + this.esposizioneComp = esposizioneComp; + return this; + } + + public String getDescrizioneEstesa() { + return descrizioneEstesa; + } + + public MtbAart setDescrizioneEstesa(String descrizioneEstesa) { + this.descrizioneEstesa = descrizioneEstesa; + return this; + } + + public String getCodUltForn() { + return codUltForn; + } + + public MtbAart setCodUltForn(String codUltForn) { + this.codUltForn = codUltForn; + return this; + } + + public String getDataUltCar() { + return dataUltCar; + } + + public MtbAart setDataUltCar(String dataUltCar) { + this.dataUltCar = dataUltCar; + return this; + } + + public BigDecimal getValUltCar() { + return valUltCar; + } + + public MtbAart setValUltCar(BigDecimal valUltCar) { + this.valUltCar = valUltCar; + return this; + } + + public String getCodUltClie() { + return codUltClie; + } + + public MtbAart setCodUltClie(String codUltClie) { + this.codUltClie = codUltClie; + return this; + } + + public String getDataUltScar() { + return dataUltScar; + } + + public MtbAart setDataUltScar(String dataUltScar) { + this.dataUltScar = dataUltScar; + return this; + } + + public BigDecimal getValUltScar() { + return valUltScar; + } + + public MtbAart setValUltScar(BigDecimal valUltScar) { + this.valUltScar = valUltScar; + return this; + } + + public String getTipoCodice() { + return tipoCodice; + } + + public MtbAart setTipoCodice(String tipoCodice) { + this.tipoCodice = tipoCodice; + return this; + } + + public String getNote() { + return note; + } + + public MtbAart setNote(String note) { + this.note = note; + return this; + } + + public String getPosizione() { + return posizione; + } + + public MtbAart setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + + public BigDecimal getColliPedana() { + return colliPedana; + } + + public MtbAart setColliPedana(BigDecimal colliPedana) { + this.colliPedana = colliPedana; + return this; + } + + public String getUntMis2() { + return untMis2; + } + + public MtbAart setUntMis2(String untMis2) { + this.untMis2 = untMis2; + return this; + } + + public BigDecimal getRapConv2() { + return rapConv2; + } + + public MtbAart setRapConv2(BigDecimal rapConv2) { + this.rapConv2 = rapConv2; + return this; + } + + public String getFlagInclListino() { + return flagInclListino; + } + + public MtbAart setFlagInclListino(String flagInclListino) { + this.flagInclListino = flagInclListino; + return this; + } + + public String getUntMis3() { + return untMis3; + } + + public MtbAart setUntMis3(String untMis3) { + this.untMis3 = untMis3; + return this; + } + + public BigDecimal getRapConv3() { + return rapConv3; + } + + public MtbAart setRapConv3(BigDecimal rapConv3) { + this.rapConv3 = rapConv3; + return this; + } + + public String getCodMartStat() { + return codMartStat; + } + + public MtbAart setCodMartStat(String codMartStat) { + this.codMartStat = codMartStat; + return this; + } + + public String getCodMcon() { + return codMcon; + } + + public MtbAart setCodMcon(String codMcon) { + this.codMcon = codMcon; + return this; + } + + public String getCodMgrp() { + return codMgrp; + } + + public MtbAart setCodMgrp(String codMgrp) { + this.codMgrp = codMgrp; + return this; + } + + public String getCodMsfa() { + return codMsfa; + } + + public MtbAart setCodMsfa(String codMsfa) { + this.codMsfa = codMsfa; + return this; + } + + public String getCodMsgr() { + return codMsgr; + } + + public MtbAart setCodMsgr(String codMsgr) { + this.codMsgr = codMsgr; + return this; + } + + public String getCodMstp() { + return codMstp; + } + + public MtbAart setCodMstp(String codMstp) { + this.codMstp = codMstp; + return this; + } + + public String getCodMtip() { + return codMtip; + } + + public MtbAart setCodMtip(String codMtip) { + this.codMtip = codMtip; + return this; + } + + public String getDescrizioneStat() { + return descrizioneStat; + } + + public MtbAart setDescrizioneStat(String descrizioneStat) { + this.descrizioneStat = descrizioneStat; + return this; + } + + public String getFlagStato() { + return flagStato; + } + + public MtbAart setFlagStato(String flagStato) { + this.flagStato = flagStato; + return this; + } + + public BigDecimal getCambioDiviCar() { + return cambioDiviCar; + } + + public MtbAart setCambioDiviCar(BigDecimal cambioDiviCar) { + this.cambioDiviCar = cambioDiviCar; + return this; + } + + public BigDecimal getCambioDiviScar() { + return cambioDiviScar; + } + + public MtbAart setCambioDiviScar(BigDecimal cambioDiviScar) { + this.cambioDiviScar = cambioDiviScar; + return this; + } + + public Integer getGgScadPartita() { + return ggScadPartita; + } + + public MtbAart setGgScadPartita(Integer ggScadPartita) { + this.ggScadPartita = ggScadPartita; + return this; + } + + public BigDecimal getVolumeMc() { + return volumeMc; + } + + public MtbAart setVolumeMc(BigDecimal volumeMc) { + this.volumeMc = volumeMc; + return this; + } + + public String getFlagEsponiPrz() { + return flagEsponiPrz; + } + + public MtbAart setFlagEsponiPrz(String flagEsponiPrz) { + this.flagEsponiPrz = flagEsponiPrz; + return this; + } + + public String getDataUltVar() { + return dataUltVar; + } + + public MtbAart setDataUltVar(String dataUltVar) { + this.dataUltVar = dataUltVar; + return this; + } + + public BigDecimal getPercSfrido() { + return percSfrido; + } + + public MtbAart setPercSfrido(BigDecimal percSfrido) { + this.percSfrido = percSfrido; + return this; + } + + public String getCodBarreImb() { + return codBarreImb; + } + + public MtbAart setCodBarreImb(String codBarreImb) { + this.codBarreImb = codBarreImb; + return this; + } + + public String getFlagCalcPrz() { + return flagCalcPrz; + } + + public MtbAart setFlagCalcPrz(String flagCalcPrz) { + this.flagCalcPrz = flagCalcPrz; + return this; + } + + public String getEsposizioneCompAcq() { + return esposizioneCompAcq; + } + + public MtbAart setEsposizioneCompAcq(String esposizioneCompAcq) { + this.esposizioneCompAcq = esposizioneCompAcq; + return this; + } + + public String getFlagCalcPrzAcq() { + return flagCalcPrzAcq; + } + + public MtbAart setFlagCalcPrzAcq(String flagCalcPrzAcq) { + this.flagCalcPrzAcq = flagCalcPrzAcq; + return this; + } + + public String getDiacod() { + return diacod; + } + + public MtbAart setDiacod(String diacod) { + this.diacod = diacod; + return this; + } + + public String getPlu() { + return plu; + } + + public MtbAart setPlu(String plu) { + this.plu = plu; + return this; + } + + public String getPartIvaProd() { + return partIvaProd; + } + + public MtbAart setPartIvaProd(String partIvaProd) { + this.partIvaProd = partIvaProd; + return this; + } + + public String getRagSocProd() { + return ragSocProd; + } + + public MtbAart setRagSocProd(String ragSocProd) { + this.ragSocProd = ragSocProd; + return this; + } + + public String getFlagRapConvVariabile() { + return flagRapConvVariabile; + } + + public MtbAart setFlagRapConvVariabile(String flagRapConvVariabile) { + this.flagRapConvVariabile = flagRapConvVariabile; + return this; + } + + public String getFlagMovArtMag() { + return flagMovArtMag; + } + + public MtbAart setFlagMovArtMag(String flagMovArtMag) { + this.flagMovArtMag = flagMovArtMag; + return this; + } + + public String getFlagTracciabilita() { + return flagTracciabilita; + } + + public MtbAart setFlagTracciabilita(String flagTracciabilita) { + this.flagTracciabilita = flagTracciabilita; + return this; + } + + public BigDecimal getTaraKg() { + return taraKg; + } + + public MtbAart setTaraKg(BigDecimal taraKg) { + this.taraKg = taraKg; + return this; + } + + public BigDecimal getColliStrato() { + return colliStrato; + } + + public MtbAart setColliStrato(BigDecimal colliStrato) { + this.colliStrato = colliStrato; + return this; + } + + public String getFlagQtaCnfFissa() { + return flagQtaCnfFissa; + } + + public MtbAart setFlagQtaCnfFissa(String flagQtaCnfFissa) { + this.flagQtaCnfFissa = flagQtaCnfFissa; + return this; + } + + public String getFlagColliPedanaFisso() { + return flagColliPedanaFisso; + } + + public MtbAart setFlagColliPedanaFisso(String flagColliPedanaFisso) { + this.flagColliPedanaFisso = flagColliPedanaFisso; + return this; + } + + public String getCodCconCosti() { + return codCconCosti; + } + + public MtbAart setCodCconCosti(String codCconCosti) { + this.codCconCosti = codCconCosti; + return this; + } + + public String getCodCconRicavi() { + return codCconRicavi; + } + + public MtbAart setCodCconRicavi(String codCconRicavi) { + this.codCconRicavi = codCconRicavi; + return this; + } + + public String getCodDgrpArt() { + return codDgrpArt; + } + + public MtbAart setCodDgrpArt(String codDgrpArt) { + this.codDgrpArt = codDgrpArt; + return this; + } + + public String getCodDiviCar() { + return codDiviCar; + } + + public MtbAart setCodDiviCar(String codDiviCar) { + this.codDiviCar = codDiviCar; + return this; + } + + public String getCodDiviScar() { + return codDiviScar; + } + + public MtbAart setCodDiviScar(String codDiviScar) { + this.codDiviScar = codDiviScar; + return this; + } + + public String getCodEcrCat() { + return codEcrCat; + } + + public MtbAart setCodEcrCat(String codEcrCat) { + this.codEcrCat = codEcrCat; + return this; + } + + public String getCodEcrMcat() { + return codEcrMcat; + } + + public MtbAart setCodEcrMcat(String codEcrMcat) { + this.codEcrMcat = codEcrMcat; + return this; + } + + public String getCodEcrRep() { + return codEcrRep; + } + + public MtbAart setCodEcrRep(String codEcrRep) { + this.codEcrRep = codEcrRep; + return this; + } + + public String getCodEcrStipo() { + return codEcrStipo; + } + + public MtbAart setCodEcrStipo(String codEcrStipo) { + this.codEcrStipo = codEcrStipo; + return this; + } + + public String getCodEcrTipo() { + return codEcrTipo; + } + + public MtbAart setCodEcrTipo(String codEcrTipo) { + this.codEcrTipo = codEcrTipo; + return this; + } + + public String getCodGrpBolla() { + return codGrpBolla; + } + + public MtbAart setCodGrpBolla(String codGrpBolla) { + this.codGrpBolla = codGrpBolla; + return this; + } + + public String getIngredienti() { + return ingredienti; + } + + public MtbAart setIngredienti(String ingredienti) { + this.ingredienti = ingredienti; + return this; + } + + public String getIdArtEqui() { + return idArtEqui; + } + + public MtbAart setIdArtEqui(String idArtEqui) { + this.idArtEqui = idArtEqui; + return this; + } + + public String getDescrCassa() { + return descrCassa; + } + + public MtbAart setDescrCassa(String descrCassa) { + this.descrCassa = descrCassa; + return this; + } + + public String getCodNcIntracee() { + return codNcIntracee; + } + + public MtbAart setCodNcIntracee(String codNcIntracee) { + this.codNcIntracee = codNcIntracee; + return this; + } + + public String getMarchio() { + return marchio; + } + + public MtbAart setMarchio(String marchio) { + this.marchio = marchio; + return this; + } + + public Integer getSezione() { + return sezione; + } + + public MtbAart setSezione(Integer sezione) { + this.sezione = sezione; + return this; + } + @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(codMart); @@ -264,6 +958,10 @@ public class MtbAart implements Parcelable{ dest.writeByte((byte) (0x01)); dest.writeInt(sezione); } + + + + } @SuppressWarnings("unused") diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAartWithFornitore.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAartWithFornitore.java new file mode 100644 index 00000000..e6b06b50 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAartWithFornitore.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.core.model; + +public class MtbAartWithFornitore extends MtbAart { + + private String codArtFor; + + public String getCodArtFor() { + return codArtFor; + } + + public MtbAartWithFornitore setCodArtFor(String codArtFor) { + this.codArtFor = codArtFor; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java new file mode 100644 index 00000000..09417cb2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java @@ -0,0 +1,588 @@ +package it.integry.integrywmsnative.core.model; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; + +public class MtbColr extends EntityBase implements Parcelable { + + + private String gestione; + private String serCollo; + private Integer numCollo; + private String dataCollo; + private Integer riga; + private Integer rigaOrd; + private String codMart; + private String codBarre; + private String codCol; + private String codTagl; + private String partitaMag; + private String gestioneRif; + private String serColloRif; + private String note; + private String dataOrd; + private String dataColloRif; + private BigDecimal qtaCnf; + private BigDecimal qtaCol; + private Integer numOrd; + private Integer numEtich; + private Integer numColloRif; + private String datetimeRow; + private String codJcom; + private BigDecimal numCnf; + private String insPartitaMag; + private String mtbPartitaMag_descrizione; + private String dataScadPartita; + private String descrizione; + private String untMis; + + private MtbAart mtbAart; + + public MtbColr() { + type = "mtb_colr"; + } + + + protected MtbColr(Parcel in) { + type = "mtb_colr"; + gestione = in.readString(); + serCollo = in.readString(); + if (in.readByte() == 0) { + numCollo = null; + } else { + numCollo = in.readInt(); + } + dataCollo = in.readString(); + if (in.readByte() == 0) { + riga = null; + } else { + riga = in.readInt(); + } + if (in.readByte() == 0) { + rigaOrd = null; + } else { + rigaOrd = in.readInt(); + } + codMart = in.readString(); + codBarre = in.readString(); + codCol = in.readString(); + codTagl = in.readString(); + partitaMag = in.readString(); + gestioneRif = in.readString(); + serColloRif = in.readString(); + note = in.readString(); + dataOrd = in.readString(); + dataColloRif = in.readString(); + if (in.readByte() == 0) { + numOrd = null; + } else { + numOrd = in.readInt(); + } + if (in.readByte() == 0) { + numEtich = null; + } else { + numEtich = in.readInt(); + } + if (in.readByte() == 0) { + numColloRif = null; + } else { + numColloRif = in.readInt(); + } + datetimeRow = in.readString(); + codJcom = in.readString(); + insPartitaMag = in.readString(); + mtbPartitaMag_descrizione = in.readString(); + dataScadPartita = in.readString(); + descrizione = in.readString(); + untMis = in.readString(); + + if (in.readByte() == 0) { + qtaCnf = null; + } else { + qtaCnf = new BigDecimal(in.readFloat()); + } + + if (in.readByte() == 0) { + qtaCol = null; + } else { + qtaCol = new BigDecimal(in.readFloat()); + } + + if (in.readByte() == 0) { + numCnf = null; + } else { + numCnf = new BigDecimal(in.readFloat()); + } + + in.readParcelable(MtbAart.class.getClassLoader()); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(gestione); + dest.writeString(serCollo); + if (numCollo == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numCollo); + } + dest.writeString(dataCollo); + if (riga == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(riga); + } + if (rigaOrd == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(rigaOrd); + } + dest.writeString(codMart); + dest.writeString(codBarre); + dest.writeString(codCol); + dest.writeString(codTagl); + dest.writeString(partitaMag); + dest.writeString(gestioneRif); + dest.writeString(serColloRif); + dest.writeString(note); + dest.writeString(dataOrd); + dest.writeString(dataColloRif); + if (numOrd == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numOrd); + } + if (numEtich == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numEtich); + } + if (numColloRif == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numColloRif); + } + dest.writeString(datetimeRow); + dest.writeString(codJcom); + dest.writeString(insPartitaMag); + dest.writeString(mtbPartitaMag_descrizione); + dest.writeString(dataScadPartita); + dest.writeString(descrizione); + dest.writeString(untMis); + + if (qtaCnf == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeFloat(qtaCnf.floatValue()); + } + + if (qtaCol == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeFloat(qtaCol.floatValue()); + } + + if (numCnf == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeFloat(numCnf.floatValue()); + } + + dest.writeParcelable(mtbAart, flags); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public MtbColr createFromParcel(Parcel in) { + return new MtbColr(in); + } + + @Override + public MtbColr[] newArray(int size) { + return new MtbColr[size]; + } + }; + + public String getGestione() { + return gestione; + } + + public MtbColr setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public MtbColr setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public MtbColr setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public String getDataColloS() { + return dataCollo; + } + + public Date getDataColloD() { + try{ + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataColloS()); + } catch (ParseException pex){ + UtilityLogger.errorMe(pex); + return null; + } + } + + public MtbColr setDataCollo(String dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + + public Integer getRiga() { + return riga; + } + + public MtbColr setRiga(Integer riga) { + this.riga = riga; + return this; + } + + public Integer getRigaOrd() { + return rigaOrd; + } + + public MtbColr setRigaOrd(Integer rigaOrd) { + this.rigaOrd = rigaOrd; + return this; + } + + public String getCodMart() { + return codMart; + } + + public MtbColr setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getCodBarre() { + return codBarre; + } + + public MtbColr setCodBarre(String codBarre) { + this.codBarre = codBarre; + return this; + } + + public String getCodCol() { + return codCol; + } + + public MtbColr setCodCol(String codCol) { + this.codCol = codCol; + return this; + } + + public String getCodTagl() { + return codTagl; + } + + public MtbColr setCodTagl(String codTagl) { + this.codTagl = codTagl; + return this; + } + + public String getPartitaMag() { + return partitaMag; + } + + public MtbColr setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + public String getGestioneRif() { + return gestioneRif; + } + + public MtbColr setGestioneRif(String gestioneRif) { + this.gestioneRif = gestioneRif; + return this; + } + + public String getSerColloRif() { + return serColloRif; + } + + public MtbColr setSerColloRif(String serColloRif) { + this.serColloRif = serColloRif; + return this; + } + + public String getNote() { + return note; + } + + public MtbColr setNote(String note) { + this.note = note; + return this; + } + + public String getDataOrdS() { + return dataOrd; + } + + public Date getDataOrdD() { + try{ + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataOrdS()); + } catch (ParseException pex){ + UtilityLogger.errorMe(pex); + return null; + } + } + + public MtbColr setDataOrd(String dataOrd) { + this.dataOrd = dataOrd; + return this; + } + + public MtbColr setDataOrd(Date dataOrd) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataOrd = sdf.format(dataOrd); + return this; + } + + public String getDataColloRifS() { + return dataColloRif; + } + + public Date getDataColloRifD() { + try{ + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataColloRifS()); + } catch (ParseException pex){ + UtilityLogger.errorMe(pex); + return null; + } + } + + public MtbColr setDataColloRif(String dataColloRif) { + this.dataColloRif = dataColloRif; + return this; + } + + public MtbColr setDataColloRif(Date dataColloRif) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataColloRif = sdf.format(dataColloRif); + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public MtbColr setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + + public BigDecimal getQtaCol() { + return qtaCol; + } + + public MtbColr setQtaCol(BigDecimal qtaCol) { + this.qtaCol = qtaCol; + return this; + } + + public Integer getNumOrd() { + return numOrd; + } + + public MtbColr setNumOrd(Integer numOrd) { + this.numOrd = numOrd; + return this; + } + + public Integer getNumEtich() { + return numEtich; + } + + public MtbColr setNumEtich(Integer numEtich) { + this.numEtich = numEtich; + return this; + } + + public Integer getNumColloRif() { + return numColloRif; + } + + public MtbColr setNumColloRif(Integer numColloRif) { + this.numColloRif = numColloRif; + return this; + } + + + + + public String getDatetimeRowS() { + return datetimeRow; + } + + public Date getDatetimeRowD() throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDatetimeRowS()); + } + + public MtbColr setDatetimeRow(String datetimeRow) { + this.datetimeRow = datetimeRow; + return this; + } + + public MtbColr setDatetimeRow(Date datetimeRow) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.datetimeRow = sdf.format(datetimeRow); + return this; + } + + + + + + + + public String getCodJcom() { + return codJcom; + } + + public MtbColr setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public BigDecimal getNumCnf() { + return numCnf; + } + + public MtbColr setNumCnf(BigDecimal numCnf) { + this.numCnf = numCnf; + return this; + } + + public String getInsPartitaMag() { + return insPartitaMag; + } + + public MtbColr setInsPartitaMag(String insPartitaMag) { + this.insPartitaMag = insPartitaMag; + return this; + } + + public String getMtbPartitaMag_descrizione() { + return mtbPartitaMag_descrizione; + } + + public MtbColr setMtbPartitaMag_descrizione(String mtbPartitaMag_descrizione) { + this.mtbPartitaMag_descrizione = mtbPartitaMag_descrizione; + return this; + } + + + + + + + + public String getDataScadPartitaS() { + return dataScadPartita; + } + + public Date getDataScadPartitaD() { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + try { + return sdf.parse(getDataScadPartitaS()); + } catch (Exception ex) { + UtilityLogger.errorMe(ex); + return null; + } + } + + public MtbColr setDataScadPartita(String dataScadPartita) { + this.dataScadPartita = dataScadPartita; + return this; + } + + public MtbColr setDataScadPartita(Date dataScadPartita) { + if(dataScadPartita != null) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataScadPartita = sdf.format(dataScadPartita); + } else this.dataScadPartita = null; + return this; + } + + + public String getDescrizione() { + return descrizione; + } + + public MtbColr setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + + + public String getUntMis() { + return untMis; + } + + public MtbColr setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + + public MtbAart getMtbAart() { + return mtbAart; + } + + public MtbColr setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java new file mode 100644 index 00000000..6b029f90 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java @@ -0,0 +1,123 @@ +package it.integry.integrywmsnative.core.model; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import it.integry.integrywmsnative.core.settings.SettingsManager; + +public class MtbCols extends EntityBase { + + private String dataCollo; + private String gestione; + private Integer idRiga; + private Integer numCollo; + private String serCollo; + private String codMdep; + private String dataMove; + private String modificatoDa; + private String posizione; + private String causale; + + public MtbCols() { + type = "mtb_cols"; + setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()); + setModificatoDa(SettingsManager.i().user.fullname); + setDataMove(new Date()); + } + + public String getDataCollo() { + return dataCollo; + } + + public MtbCols setDataCollo(String dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public String getGestione() { + return gestione; + } + + public MtbCols setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public Integer getIdRiga() { + return idRiga; + } + + public MtbCols setIdRiga(Integer idRiga) { + this.idRiga = idRiga; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public MtbCols setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public MtbCols setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public String getCodMdep() { + return codMdep; + } + + public MtbCols setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getDataMove() { + return dataMove; + } + + public MtbCols setDataMove(String dataMove) { + this.dataMove = dataMove; + return this; + } + + public MtbCols setDataMove(Date dataMove) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataMove = sdf.format(dataMove); + return this; + } + + public String getModificatoDa() { + return modificatoDa; + } + + public MtbCols setModificatoDa(String modificatoDa) { + this.modificatoDa = modificatoDa; + return this; + } + + public String getPosizione() { + return posizione; + } + + public MtbCols setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + + public String getCausale() { + return causale; + } + + public MtbCols setCausale(String causale) { + this.causale = causale; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java index 14a131fd..24826a57 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColt.java @@ -1,13 +1,28 @@ package it.integry.integrywmsnative.core.model; +import android.databinding.ObservableArrayList; +import android.os.Parcel; +import android.os.Parcelable; + +import com.annimon.stream.Stream; + import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; + +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityLogger; /** * Created by GiuseppeS on 06/03/2018. */ -public class MtbColt { +public class MtbColt extends EntityBase implements Parcelable { private String gestione; private String dataCollo; private String serCollo; @@ -41,5 +56,645 @@ public class MtbColt { private BigDecimal lunghezzaCm; private BigDecimal larghezzaCm; private BigDecimal altezzaCm; - + + public List mtbCols; + + private Boolean disablePrint; + + protected MtbColt(Parcel in) { + type = "mtb_colt"; + gestione = in.readString(); + dataCollo = in.readString(); + serCollo = in.readString(); + if (in.readByte() == 0) { + numCollo = null; + } else { + numCollo = in.readInt(); + } + rifOrd = in.readString(); + codAnag = in.readString(); + codVdes = in.readString(); + codMdep = in.readString(); + codVlis = in.readString(); + codDtip = in.readString(); + codTcol = in.readString(); + serDoc = in.readString(); + filtroOrdini = in.readString(); + preparatoDa = in.readString(); + annotazioni = in.readString(); + posizione = in.readString(); + codDtipProvv = in.readString(); + serDocProvv = in.readString(); + codJfas = in.readString(); + dataOrd = in.readString(); + dataDoc = in.readString(); + oraInizPrep = in.readString(); + oraFinePrep = in.readString(); + dataDocProvv = in.readString(); + dataVers = in.readString(); + if (in.readByte() == 0) { + segno = null; + } else { + segno = in.readInt(); + } + if (in.readByte() == 0) { + numOrd = null; + } else { + numOrd = in.readInt(); + } + if (in.readByte() == 0) { + numDoc = null; + } else { + numDoc = in.readInt(); + } + if (in.readByte() == 0) { + numDocProvv = null; + } else { + numDocProvv = in.readInt(); + } + + + + + if (in.readByte() == 0) { + pesoKg = null; + } else { + pesoKg = new BigDecimal(in.readFloat()); + } + + if (in.readByte() == 0) { + lunghezzaCm = null; + } else { + lunghezzaCm = new BigDecimal(in.readFloat()); + } + + if (in.readByte() == 0) { + larghezzaCm = null; + } else { + larghezzaCm = new BigDecimal(in.readFloat()); + } + if (in.readByte() == 0) { + altezzaCm = null; + } else { + altezzaCm = new BigDecimal(in.readFloat()); + } + + + + + in.readTypedList(mtbColr, MtbColr.CREATOR); + + + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(gestione); + dest.writeString(dataCollo); + dest.writeString(serCollo); + if (numCollo == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numCollo); + } + dest.writeString(rifOrd); + dest.writeString(codAnag); + dest.writeString(codVdes); + dest.writeString(codMdep); + dest.writeString(codVlis); + dest.writeString(codDtip); + dest.writeString(codTcol); + dest.writeString(serDoc); + dest.writeString(filtroOrdini); + dest.writeString(preparatoDa); + dest.writeString(annotazioni); + dest.writeString(posizione); + dest.writeString(codDtipProvv); + dest.writeString(serDocProvv); + dest.writeString(codJfas); + dest.writeString(dataOrd); + dest.writeString(dataDoc); + dest.writeString(oraInizPrep); + dest.writeString(oraFinePrep); + dest.writeString(dataDocProvv); + dest.writeString(dataVers); + if (segno == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(segno); + } + if (numOrd == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numOrd); + } + if (numDoc == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numDoc); + } + if (numDocProvv == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numDocProvv); + } + + + + if (pesoKg == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeFloat(pesoKg.floatValue()); + } + if (lunghezzaCm == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeFloat(lunghezzaCm.floatValue()); + } + if (larghezzaCm == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeFloat(larghezzaCm.floatValue()); + } + if (altezzaCm == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeFloat(altezzaCm.floatValue()); + } + + dest.writeTypedList(mtbColr); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public MtbColt createFromParcel(Parcel in) { + return new MtbColt(in); + } + + @Override + public MtbColt[] newArray(int size) { + return new MtbColt[size]; + } + }; + + public void generaFiltroOrdine() throws Exception { + + if (this.gestione == null) { + throw new Exception("Impossibile creare il filtro dell'ordine se la gestione non è valorizzata"); + } + + if (this.dataOrd == null) { + throw new Exception("Impossibile creare il filtro dell'ordine se la data dell'ordine non è valorizzata"); + } + + if (this.numOrd == null) { + throw new Exception("Impossibile creare il filtro dell'ordine se il numero dell'ordine non è valorizzato"); + } + + + Date dateOrd = UtilityDate.recognizeDate(this.dataOrd); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); + String dateYMD = sdf.format(dateOrd); + + this.filtroOrdini = "" + this.gestione + "" + dateYMD + "" + this.numOrd + ""; + } + + + + private ObservableArrayList mtbColr = new ObservableArrayList<>(); + + public ObservableArrayList getMtbColr() { + return mtbColr; + } + + public MtbColt setMtbColr(ObservableArrayList mtbColr) { + this.mtbColr = mtbColr; + return this; + } + + public MtbColt(){ + type = "mtb_colt"; + setDataCollo(new Date()); + setSerCollo("/"); + setCodMdep(SettingsManager.i().userSession.depo.getCodMdep()); + setPreparatoDa(SettingsManager.i().user.fullname); + setOraInizPrep(new Date()); + setCodAnag(SettingsManager.iDB().getDefaultCodAnag()); + } + + + public String getGestione() { + return gestione; + } + + public GestioneEnum getGestioneEnum() { + return GestioneEnum.fromString(gestione); + } + + public MtbColt setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public MtbColt setGestione(GestioneEnum gestione) { + this.gestione = gestione.getText(); + return this; + } + + public String getDataColloHumanLong() { + Date dataColloD = null; + try { + dataColloD = getDataColloD(); + } catch (Exception ex){ + UtilityLogger.errorMe(ex); + } + + if(dataColloD != null){ + return UtilityDate.formatDate(dataColloD, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN_LONG); + } else return null; + } + + public String getDataColloS() { + return dataCollo; + } + + public Date getDataColloD() { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + try { + return sdf.parse(getDataColloS()); + } catch (ParseException e) { + UtilityLogger.errorMe(e); + return null; + } + } + + public MtbColt setDataCollo(String dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public MtbColt setDataCollo(Date dataCollo) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataCollo = sdf.format(dataCollo); + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public MtbColt setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public MtbColt setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public String getRifOrd() { + return rifOrd; + } + + public MtbColt setRifOrd(String rifOrd) { + this.rifOrd = rifOrd; + return this; + } + + public String getCodAnag() { + return codAnag; + } + + public MtbColt setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getCodVdes() { + return codVdes; + } + + public MtbColt setCodVdes(String codVdes) { + this.codVdes = codVdes; + return this; + } + + public String getCodMdep() { + return codMdep; + } + + public MtbColt setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getCodVlis() { + return codVlis; + } + + public MtbColt setCodVlis(String codVlis) { + this.codVlis = codVlis; + return this; + } + + public String getCodDtip() { + return codDtip; + } + + public MtbColt setCodDtip(String codDtip) { + this.codDtip = codDtip; + return this; + } + + public String getCodTcol() { + return codTcol; + } + + public MtbColt setCodTcol(String codTcol) { + this.codTcol = codTcol; + return this; + } + + public String getSerDoc() { + return serDoc; + } + + public MtbColt setSerDoc(String serDoc) { + this.serDoc = serDoc; + return this; + } + + public String getFiltroOrdini() { + return filtroOrdini; + } + + public MtbColt setFiltroOrdini(String filtroOrdini) { + this.filtroOrdini = filtroOrdini; + return this; + } + + public String getPreparatoDa() { + return preparatoDa; + } + + public MtbColt setPreparatoDa(String preparatoDa) { + this.preparatoDa = preparatoDa; + return this; + } + + public String getAnnotazioni() { + return annotazioni; + } + + public MtbColt setAnnotazioni(String annotazioni) { + this.annotazioni = annotazioni; + return this; + } + + public String getPosizione() { + return posizione; + } + + public MtbColt setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + + public String getCodDtipProvv() { + return codDtipProvv; + } + + public MtbColt setCodDtipProvv(String codDtipProvv) { + this.codDtipProvv = codDtipProvv; + return this; + } + + public String getSerDocProvv() { + return serDocProvv; + } + + public MtbColt setSerDocProvv(String serDocProvv) { + this.serDocProvv = serDocProvv; + return this; + } + + public String getCodJfas() { + return codJfas; + } + + public MtbColt setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public String getDataOrd() { + return dataOrd; + } + + public MtbColt setDataOrd(String dataOrd) { + this.dataOrd = dataOrd; + return this; + } + + public MtbColt setDataOrdD(Date dataOrd) { + if(dataOrd != null) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataOrd = sdf.format(dataOrd); + } else this.dataOrd = null; + return this; + } + + public String getDataDoc() { + return dataDoc; + } + + public MtbColt setDataDoc(String dataDoc) { + this.dataDoc = dataDoc; + return this; + } + + public String getOraInizPrep() { + return oraInizPrep; + } + + public MtbColt setOraInizPrep(String oraInizPrep) { + this.oraInizPrep = oraInizPrep; + return this; + } + + public MtbColt setOraInizPrep(Date oraInizPrep) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.oraInizPrep = sdf.format(oraInizPrep); + return this; + } + + public String getOraFinePrep() { + return oraFinePrep; + } + + public MtbColt setOraFinePrep(String oraFinePrep) { + this.oraFinePrep = oraFinePrep; + return this; + } + + public MtbColt setOraFinePrep(Date oraFinePrep) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.oraFinePrep = sdf.format(oraFinePrep); + return this; + } + + public String getDataDocProvv() { + return dataDocProvv; + } + + public MtbColt setDataDocProvv(String dataDocProvv) { + this.dataDocProvv = dataDocProvv; + return this; + } + + public String getDataVers() { + return dataVers; + } + + public MtbColt setDataVers(String dataVers) { + this.dataVers = dataVers; + return this; + } + + public Integer getSegno() { + return segno; + } + + public MtbColt setSegno(Integer segno) { + this.segno = segno; + return this; + } + + public Integer getNumOrd() { + return numOrd; + } + + public MtbColt setNumOrd(Integer numOrd) { + this.numOrd = numOrd; + return this; + } + + public Integer getNumDoc() { + return numDoc; + } + + public MtbColt setNumDoc(Integer numDoc) { + this.numDoc = numDoc; + return this; + } + + public Integer getNumDocProvv() { + return numDocProvv; + } + + public MtbColt setNumDocProvv(Integer numDocProvv) { + this.numDocProvv = numDocProvv; + return this; + } + + public BigDecimal getPesoKg() { + return pesoKg; + } + + public MtbColt setPesoKg(BigDecimal pesoKg) { + this.pesoKg = pesoKg; + return this; + } + + public BigDecimal getLunghezzaCm() { + return lunghezzaCm; + } + + public MtbColt setLunghezzaCm(BigDecimal lunghezzaCm) { + this.lunghezzaCm = lunghezzaCm; + return this; + } + + public BigDecimal getLarghezzaCm() { + return larghezzaCm; + } + + public MtbColt setLarghezzaCm(BigDecimal larghezzaCm) { + this.larghezzaCm = larghezzaCm; + return this; + } + + public BigDecimal getAltezzaCm() { + return altezzaCm; + } + + public MtbColt setAltezzaCm(BigDecimal altezzaCm) { + this.altezzaCm = altezzaCm; + return this; + } + + + public List getMtbCols() { + return mtbCols; + } + + public MtbColt setMtbCols(List mtbCols) { + this.mtbCols = mtbCols; + return this; + } + + public Boolean getDisablePrint() { + return disablePrint == null ? false : disablePrint; + } + + public MtbColt setDisablePrint(Boolean disablePrint) { + this.disablePrint = disablePrint; + return this; + } + + public void generaFiltroOrdineFromDTO(List filtroOrdineDtos) { + + String xmlPrefix = ""; + String xmlSuffix = ""; + + StringBuilder xmlContent = new StringBuilder(); + + if(filtroOrdineDtos != null && filtroOrdineDtos.size() > 0) { + + for(int i = 0; i < filtroOrdineDtos.size(); i++){ + FiltroOrdineDTO x = filtroOrdineDtos.get(i); + + try { + xmlContent.append("" + x.getGestioneOrd() + "" + UtilityDate.formatDate(x.getDataOrdD(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) + "" + x.getNumOrd() + ""); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } + + this.filtroOrdini = xmlPrefix + xmlContent + xmlSuffix; + } + + + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepo.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepo.java new file mode 100644 index 00000000..affe2ccd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepo.java @@ -0,0 +1,360 @@ +package it.integry.integrywmsnative.core.model; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.math.BigDecimal; + +public class MtbDepo extends EntityBase implements Parcelable { + + + private String codMdep; + private String descrizione; + private String flagVal; + private String codAnag; + private BigDecimal percDepo; + private BigDecimal valDepo; + private String indirizzo; + private String cap; + private String citta; + private String prov; + private String tel; + private String nazione; + private String fax; + private String eMail; + private String sitoWeb; + private String codVdes; + private String serie; + private String flagMovimentabile; + private String codJfas; + private String codVlis; + private String codCcau; + private String codCcon; + private String codDtip; + private String codDtipFat; + private String flagContoVendita; + private String flagTipoNegozio; + private String codMdepReso; + + public MtbDepo() { + type = "mtb_depo"; + } + + protected MtbDepo(Parcel in) { + type = "mtb_depo"; + codMdep = in.readString(); + descrizione = in.readString(); + flagVal = in.readString(); + codAnag = in.readString(); + indirizzo = in.readString(); + cap = in.readString(); + citta = in.readString(); + prov = in.readString(); + tel = in.readString(); + nazione = in.readString(); + fax = in.readString(); + eMail = in.readString(); + sitoWeb = in.readString(); + codVdes = in.readString(); + serie = in.readString(); + flagMovimentabile = in.readString(); + codJfas = in.readString(); + codVlis = in.readString(); + codCcau = in.readString(); + codCcon = in.readString(); + codDtip = in.readString(); + codDtipFat = in.readString(); + flagContoVendita = in.readString(); + flagTipoNegozio = in.readString(); + codMdepReso = in.readString(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(codMdep); + dest.writeString(descrizione); + dest.writeString(flagVal); + dest.writeString(codAnag); + dest.writeString(indirizzo); + dest.writeString(cap); + dest.writeString(citta); + dest.writeString(prov); + dest.writeString(tel); + dest.writeString(nazione); + dest.writeString(fax); + dest.writeString(eMail); + dest.writeString(sitoWeb); + dest.writeString(codVdes); + dest.writeString(serie); + dest.writeString(flagMovimentabile); + dest.writeString(codJfas); + dest.writeString(codVlis); + dest.writeString(codCcau); + dest.writeString(codCcon); + dest.writeString(codDtip); + dest.writeString(codDtipFat); + dest.writeString(flagContoVendita); + dest.writeString(flagTipoNegozio); + dest.writeString(codMdepReso); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public MtbDepo createFromParcel(Parcel in) { + return new MtbDepo(in); + } + + @Override + public MtbDepo[] newArray(int size) { + return new MtbDepo[size]; + } + }; + + public String getCodMdep() { + return codMdep; + } + + public MtbDepo setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public MtbDepo setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getFlagVal() { + return flagVal; + } + + public MtbDepo setFlagVal(String flagVal) { + this.flagVal = flagVal; + return this; + } + + public String getCodAnag() { + return codAnag; + } + + public MtbDepo setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public BigDecimal getPercDepo() { + return percDepo; + } + + public MtbDepo setPercDepo(BigDecimal percDepo) { + this.percDepo = percDepo; + return this; + } + + public BigDecimal getValDepo() { + return valDepo; + } + + public MtbDepo setValDepo(BigDecimal valDepo) { + this.valDepo = valDepo; + return this; + } + + public String getIndirizzo() { + return indirizzo; + } + + public MtbDepo setIndirizzo(String indirizzo) { + this.indirizzo = indirizzo; + return this; + } + + public String getCap() { + return cap; + } + + public MtbDepo setCap(String cap) { + this.cap = cap; + return this; + } + + public String getCitta() { + return citta; + } + + public MtbDepo setCitta(String citta) { + this.citta = citta; + return this; + } + + public String getProv() { + return prov; + } + + public MtbDepo setProv(String prov) { + this.prov = prov; + return this; + } + + public String getTel() { + return tel; + } + + public MtbDepo setTel(String tel) { + this.tel = tel; + return this; + } + + public String getNazione() { + return nazione; + } + + public MtbDepo setNazione(String nazione) { + this.nazione = nazione; + return this; + } + + public String getFax() { + return fax; + } + + public MtbDepo setFax(String fax) { + this.fax = fax; + return this; + } + + public String geteMail() { + return eMail; + } + + public MtbDepo seteMail(String eMail) { + this.eMail = eMail; + return this; + } + + public String getSitoWeb() { + return sitoWeb; + } + + public MtbDepo setSitoWeb(String sitoWeb) { + this.sitoWeb = sitoWeb; + return this; + } + + public String getCodVdes() { + return codVdes; + } + + public MtbDepo setCodVdes(String codVdes) { + this.codVdes = codVdes; + return this; + } + + public String getSerie() { + return serie; + } + + public MtbDepo setSerie(String serie) { + this.serie = serie; + return this; + } + + public String getFlagMovimentabile() { + return flagMovimentabile; + } + + public MtbDepo setFlagMovimentabile(String flagMovimentabile) { + this.flagMovimentabile = flagMovimentabile; + return this; + } + + public String getCodJfas() { + return codJfas; + } + + public MtbDepo setCodJfas(String codJfas) { + this.codJfas = codJfas; + return this; + } + + public String getCodVlis() { + return codVlis; + } + + public MtbDepo setCodVlis(String codVlis) { + this.codVlis = codVlis; + return this; + } + + public String getCodCcau() { + return codCcau; + } + + public MtbDepo setCodCcau(String codCcau) { + this.codCcau = codCcau; + return this; + } + + public String getCodCcon() { + return codCcon; + } + + public MtbDepo setCodCcon(String codCcon) { + this.codCcon = codCcon; + return this; + } + + public String getCodDtip() { + return codDtip; + } + + public MtbDepo setCodDtip(String codDtip) { + this.codDtip = codDtip; + return this; + } + + public String getCodDtipFat() { + return codDtipFat; + } + + public MtbDepo setCodDtipFat(String codDtipFat) { + this.codDtipFat = codDtipFat; + return this; + } + + public String getFlagContoVendita() { + return flagContoVendita; + } + + public MtbDepo setFlagContoVendita(String flagContoVendita) { + this.flagContoVendita = flagContoVendita; + return this; + } + + public String getFlagTipoNegozio() { + return flagTipoNegozio; + } + + public MtbDepo setFlagTipoNegozio(String flagTipoNegozio) { + this.flagTipoNegozio = flagTipoNegozio; + return this; + } + + public String getCodMdepReso() { + return codMdepReso; + } + + public MtbDepo setCodMdepReso(String codMdepReso) { + this.codMdepReso = codMdepReso; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepoPosizione.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepoPosizione.java new file mode 100644 index 00000000..f67b8e3b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbDepoPosizione.java @@ -0,0 +1,49 @@ +package it.integry.integrywmsnative.core.model; + +public class MtbDepoPosizione { + + private String codMdep; + private String posizione; + private String descrizione; + private String flagMonoCollo; + + public String getCodMdep() { + return codMdep; + } + + public MtbDepoPosizione setCodMdep(String codMdep) { + this.codMdep = codMdep; + return this; + } + + public String getPosizione() { + return posizione; + } + + public MtbDepoPosizione setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public MtbDepoPosizione setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getFlagMonoCollo() { + return flagMonoCollo; + } + + public MtbDepoPosizione setFlagMonoCollo(String flagMonoCollo) { + this.flagMonoCollo = flagMonoCollo; + return this; + } + + public boolean isFlagMonoCollo() { + return flagMonoCollo.equalsIgnoreCase("S"); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/secondary/GestioneEnum.java b/app/src/main/java/it/integry/integrywmsnative/core/model/secondary/GestioneEnum.java new file mode 100644 index 00000000..42e804eb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/secondary/GestioneEnum.java @@ -0,0 +1,24 @@ +package it.integry.integrywmsnative.core.model.secondary; + +public enum GestioneEnum { + + ACQUISTO("A"), + LAVORAZIONE("L"), + VENDITA("V"); + + private String text; + GestioneEnum(String text) { + this.text = text; + } + public String getText() { + return this.text; + } + + public static GestioneEnum fromString(String text) { + for (GestioneEnum b : GestioneEnum.values()) { + if (b.text.equalsIgnoreCase(text)) return b; + } + return null; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java b/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java new file mode 100644 index 00000000..37bdf05f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/report/ReportManager.java @@ -0,0 +1,37 @@ +package it.integry.integrywmsnative.core.report; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.generated.callback.Runnable; + +public class ReportManager { + + + public static void getRightReportNameByMtbColt(MtbColt mtbColt, RunnableArgs onComplete, RunnableArgs onFailed) throws Exception{ + + if(mtbColt != null){ + + GestioneEnum gestione = GestioneEnum.fromString(mtbColt.getGestione()); + + switch (gestione) { + case ACQUISTO: + onComplete.run("EtichettaBancale"); + break; + + case LAVORAZIONE: + onComplete.run("EtichettaInventario"); + break; + + case VENDITA: + onComplete.run("EtichettaSpedizione"); + break; + } + + } else { + throw new Exception("mtbColt cannot be NULL"); + } + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java new file mode 100644 index 00000000..9c9da9de --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -0,0 +1,91 @@ +package it.integry.integrywmsnative.core.settings; + +import java.util.List; + +import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.model.Azienda; +import it.integry.integrywmsnative.core.model.MtbDepo; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; + +public class DBSettingsModel { + + private List availableProfiles = null; + private List availableCodMdep = null; + private List availablePosizioni = null; + + private Azienda datiAzienda = null; + + private boolean enableCheckPartitaMagCheckPickingV; + private boolean flagMultiClienteOrdV; + private String defaultCodAnag; + private String defaultCausaleRettificaGiacenze; + + public List getAvailableProfiles() { + return availableProfiles; + } + + public List getAvailablePosizioni() { + return availablePosizioni; + } + + public void setAvailableProfiles(List availableProfiles) { + this.availableProfiles = availableProfiles; + } + + public void setAvailablePosizioni(List availablePosizioni) { + this.availablePosizioni = availablePosizioni; + } + + public Azienda getDatiAzienda() { + return datiAzienda; + } + + public DBSettingsModel setDatiAzienda(Azienda datiAzienda) { + this.datiAzienda = datiAzienda; + return this; + } + + public List getAvailableCodMdep() { + return availableCodMdep; + } + + public void setAvailableCodMdep(List availableCodMdep) { + this.availableCodMdep = availableCodMdep; + } + + public boolean isEnableCheckPartitaMagCheckPickingV() { + return enableCheckPartitaMagCheckPickingV; + } + + public DBSettingsModel setEnableCheckPartitaMagCheckPickingV(boolean enableCheckPartitaMagCheckPickingV) { + this.enableCheckPartitaMagCheckPickingV = enableCheckPartitaMagCheckPickingV; + return this; + } + + public boolean isFlagMultiClienteOrdV() { + return flagMultiClienteOrdV; + } + + public DBSettingsModel setFlagMultiClienteOrdV(boolean flagMultiClienteOrdV) { + this.flagMultiClienteOrdV = flagMultiClienteOrdV; + return this; + } + + public String getDefaultCodAnag() { + return defaultCodAnag; + } + + public DBSettingsModel setDefaultCodAnag(String defaultCodAnag) { + this.defaultCodAnag = defaultCodAnag; + return this; + } + + public String getDefaultCausaleRettificaGiacenze() { + return defaultCausaleRettificaGiacenze; + } + + public DBSettingsModel setDefaultCausaleRettificaGiacenze(String defaultCausaleRettificaGiacenze) { + this.defaultCausaleRettificaGiacenze = defaultCausaleRettificaGiacenze; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java new file mode 100644 index 00000000..4d65da82 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -0,0 +1,186 @@ +package it.integry.integrywmsnative.core.settings; + +import android.content.Context; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.GestSetupRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public class SettingsManager { + + private static String TAG = "SETTINGS"; + + private static SettingsModel settingsModelIstance; + private static DBSettingsModel dbSettingsModelIstance; + + private static boolean firstStart = false; + + private static Context mContext; + + public static void init(Context context){ + mContext = context; + + settingsModelIstance = (SettingsModel) Stash.getObject(TAG, SettingsModel.class); + + if(settingsModelIstance == null) { + settingsModelIstance = new SettingsModel(); + + settingsModelIstance.server = new SettingsModel.Server(); + settingsModelIstance.user = new SettingsModel.User(); + settingsModelIstance.userSession = new SettingsModel.UserSession(); + + dbSettingsModelIstance = new DBSettingsModel(); + + firstStart = true; + } + + dbSettingsModelIstance = new DBSettingsModel(); + + } + + public static SettingsModel i(){ + return settingsModelIstance; + } + public static DBSettingsModel iDB(){ + return dbSettingsModelIstance; + } + + public static boolean isFirstStart(){ + return firstStart; + } + + public static void update(){ + Stash.put(TAG, settingsModelIstance); + } + + + + + + + + public static void reloadDBVariables(Runnable onComplete, RunnableArgs onFailed){ + dbSettingsModelIstance = new DBSettingsModel(); + + loadDatiAzienda(() -> + loadAvailableProfiles(() -> + loadAvailableCodMdeps(() -> + loadAvailablePosizioni(() -> + loadGestSetupValues(onComplete, onFailed) ,onFailed), onFailed), onFailed), onFailed); + } + + private static void loadDatiAzienda(Runnable onComplete, RunnableArgs onFailed) { + SystemRESTConsumer.getAzienda(datiAzienda -> { + SettingsManager.iDB().setDatiAzienda(datiAzienda); + + if(onComplete != null) onComplete.run(); + }, onFailed); + } + + private static void loadAvailableProfiles(Runnable onComplete, RunnableArgs onFailed){ + SystemRESTConsumer.getAvailableProfiles(new ISimpleOperationCallback>() { + @Override + public void onSuccess(List availableProfiles) { + dbSettingsModelIstance.setAvailableProfiles(availableProfiles); + + onComplete.run(); + + } + + @Override + public void onFailed(Exception ex) { + //BOH + if(onFailed != null) onFailed.run(ex); + } + }); + } + + private static void loadAvailableCodMdeps(Runnable onComplete, RunnableArgs onFailed) { + SystemRESTConsumer.getAvailableCodMdeps(new ISimpleOperationCallback>() { + @Override + public void onSuccess(List availableCodMdeps) { + dbSettingsModelIstance.setAvailableCodMdep(availableCodMdeps); + + if(availableCodMdeps == null || availableCodMdeps.size() == 0) { + onFailed.run(new Exception(mContext.getText(R.string.no_codmdep_available).toString())); + return; + } + + boolean codMdepExistsAnymore = false; + + if(settingsModelIstance.userSession.depo != null){ + for(AvailableCodMdepsDTO availableCodMdepDTO : availableCodMdeps){ + //Controllo se il codMdep salvato esiste ancora + if(availableCodMdepDTO.getCodMdep().equalsIgnoreCase(settingsModelIstance.userSession.depo.getCodMdep())) { + codMdepExistsAnymore = true; + break; + } + } + } + + if(!codMdepExistsAnymore){ + settingsModelIstance.userSession.depo = availableCodMdeps.get(0); + } + + if(onComplete != null) onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + //BOH + if(onFailed != null) onFailed.run(ex); + } + }); + } + + + private static void loadAvailablePosizioni(Runnable onComplete, RunnableArgs onFailed) { + ColliMagazzinoRESTConsumer.getAvailablePosizioni(availablePosizioni -> { + dbSettingsModelIstance.setAvailablePosizioni(availablePosizioni); + + if(onComplete != null) onComplete.run(); + }, ex -> { + if(onFailed != null) onFailed.run(ex); + } + ); + } + + + private static void loadGestSetupValues(Runnable onComplete, RunnableArgs onFailed) { + GestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_CAUSALE_RETTIFICA_GIACENZE", valueDefaultCausaleRettificaGiacenze -> { + dbSettingsModelIstance.setDefaultCausaleRettificaGiacenze(valueDefaultCausaleRettificaGiacenze.value); + + GestSetupRESTConsumer.getBooleanValue("PICKING", "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", valueEnableCheckPartitaMag -> { + dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(valueEnableCheckPartitaMag); + + GestSetupRESTConsumer.getBooleanValue("PICKING", "SETUP", "FLAG_MULTI_CLIENTE_ORD_VENDITA", valueFlagMultiClienteOrdVendita -> { + dbSettingsModelIstance.setFlagMultiClienteOrdV(valueFlagMultiClienteOrdVendita); + + GestSetupRESTConsumer.getValue("PICKING", "SETUP", "COD_ANAG_DEFAULT", valueCodAnagDefault -> { + dbSettingsModelIstance.setDefaultCodAnag(valueCodAnagDefault.value); + + if(onComplete != null) onComplete.run(); + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); + + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); + + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); + + }, ex -> { + if(onFailed != null) onFailed.run(ex); + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java new file mode 100644 index 00000000..aeda9a75 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsModel.java @@ -0,0 +1,31 @@ +package it.integry.integrywmsnative.core.settings; + +import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; + +public class SettingsModel { + + public Server server; + public User user; + public UserSession userSession; + + + public static class Server { + public String codAzienda; + public String host; + public int port; + } + + public static class User { + public String username; + public String password; + public String fullname; + } + + public static class UserSession { + public String profileDB; + public AvailableCodMdepsDTO depo; +// public String codMdep; + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SharedPrefKeys.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SharedPrefKeys.java new file mode 100644 index 00000000..c97a8126 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SharedPrefKeys.java @@ -0,0 +1,8 @@ +package it.integry.integrywmsnative.core.settings; + +public final class SharedPrefKeys { + + + public static final String ACCETTAZIONE_PRINTER = "accettazione_printer"; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/Stash.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/Stash.java new file mode 100644 index 00000000..b8200779 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/Stash.java @@ -0,0 +1,241 @@ +package it.integry.integrywmsnative.core.settings; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.util.Log; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Set; + +public class Stash { + + private static Stash stash; + private SharedPreferences sp; + + public static void init(Context context) { + stash = new Stash(); + if (stash.sp == null) { + stash.sp = PreferenceManager.getDefaultSharedPreferences(context); + } + } + + private static void checkfornull() { + if (stash == null) + throw new NullPointerException("Call init() method in application class"); + } + + //putString + public static void put(String key, String value) { + checkfornull(); + try { + stash.sp.edit().putString(key, value).apply(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //putStringSet + public static void put(String key, Set value) { + checkfornull(); + try { + stash.sp.edit().putStringSet(key, value).apply(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //putInt + public static void put(String key, int value) { + checkfornull(); + try { + stash.sp.edit().putInt(key, value).apply(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //putLong + public static void put(String key, long value) { + checkfornull(); + try { + stash.sp.edit().putLong(key, value).apply(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //putFloat + public static void put(String key, float value) { + checkfornull(); + try { + stash.sp.edit().putFloat(key, value).apply(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //putBoolean + public static void put(String key, boolean value) { + checkfornull(); + try { + stash.sp.edit().putBoolean(key, value).apply(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //putObject or arrayList + public static void put(String key, Object value) { + checkfornull(); + try { + Gson gson = new GsonBuilder().create(); + stash.sp.edit().putString(key, gson.toJson(value).toString()).apply(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //getString + public static String getString(String key, String defaultvalue) { + checkfornull(); + try { + return stash.sp.getString(key, defaultvalue); + } catch (Exception e) { + e.printStackTrace(); + return defaultvalue; + } + } + + + //getStringSet + public static Set getStringSet(String key, Set defaultvalue) { + checkfornull(); + try { + return getStringSet(key, defaultvalue); + } catch (Exception e) { + e.printStackTrace(); + return defaultvalue; + } + } + + //getInt + public static int getInt(String key, int defaultvalue) { + checkfornull(); + try { + return stash.sp.getInt(key, defaultvalue); + } catch (Exception e) { + e.printStackTrace(); + return defaultvalue; + } + } + + //getLong + public static long getLong(String key, long defaultvalue) { + checkfornull(); + try { + return stash.sp.getLong(key, defaultvalue); + } catch (Exception e) { + e.printStackTrace(); + return defaultvalue; + } + } + + //getFloat + public static float getFloat(String key, float defaultvalue) { + checkfornull(); + try { + return stash.sp.getFloat(key, defaultvalue); + } catch (Exception e) { + e.printStackTrace(); + return defaultvalue; + } + } + + //getBoolean + public static boolean getBoolean(String key, boolean defaultvalue) { + checkfornull(); + try { + return stash.sp.getBoolean(key, defaultvalue); + } catch (Exception e) { + e.printStackTrace(); + return defaultvalue; + } + } + + //getObject + public static Object getObject(String key, Class tClass) { + checkfornull(); + try { + Gson gson = new GsonBuilder().create(); + return gson.fromJson(stash.sp.getString(key, ""), tClass); + } catch (Exception e) { + Log.e("gson", e.getMessage()); + return ""; + } + } + + //getArrayList + public static ArrayList getArrayList(String key, Class tClass) { + Log.e("_+_++__+_+", "" + tClass.getName()); + Gson gson = new Gson(); + String data = stash.sp.getString(key, ""); + if (!data.trim().isEmpty()) { + Type type = new GenericType(tClass); + return (ArrayList) gson.fromJson(data, type); + } + return new ArrayList(); + } + + //clear single value + public static void clear(String key) { + checkfornull(); + try { + stash.sp.edit().remove(key).apply(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + //clear all preference + public static void clearAll() { + checkfornull(); + try { + stash.sp.edit().clear().apply(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static class GenericType implements ParameterizedType { + + private Type type; + + GenericType(Type type) { + this.type = type; + } + + @Override + public Type[] getActualTypeArguments() { + return new Type[]{type}; + } + + @Override + public Type getRawType() { + return ArrayList.class; + } + + @Override + public Type getOwnerType() { + return null; + } + + // implement equals method too! (as per javadoc) + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java new file mode 100644 index 00000000..4e70739a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/update/UpdatesManager.java @@ -0,0 +1,21 @@ +package it.integry.integrywmsnative.core.update; + +import android.content.Context; + +import com.github.javiersantos.appupdater.AppUpdater; +import com.github.javiersantos.appupdater.enums.Display; +import com.github.javiersantos.appupdater.enums.UpdateFrom; + +import it.integry.integrywmsnative.core.settings.SettingsManager; + +public class UpdatesManager { + + public static void init(Context context) { + AppUpdater appUpdater = new AppUpdater(context) + .setDisplay(Display.DIALOG) + .setUpdateFrom(UpdateFrom.JSON) + .setUpdateJSON("http://" + SettingsManager.i().server.host + ":" + SettingsManager.i().server.port + "/ems-api/wms/currentVersion"); + appUpdater.start(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityArray.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityArray.java new file mode 100644 index 00000000..2bec88a9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityArray.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.core.utility; + +import java.lang.reflect.Array; +import java.util.List; + +public class UtilityArray { + + public static T[] listToArray(List inputList, Class c) { + + T[] result = (T[]) Array.newInstance(c, inputList.size()); + result = inputList.toArray(result); + return result; + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java new file mode 100644 index 00000000..aff2a9d9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityBarcode.java @@ -0,0 +1,88 @@ +package it.integry.integrywmsnative.core.utility; + +import com.annimon.stream.Stream; + +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeType; + +public class UtilityBarcode { + + public static boolean isEtichettaAnonima(BarcodeScanDTO barcodeScanDTO){ + return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.CODE128 && barcodeScanDTO.getStringValue().startsWith("U"); + } + + public static boolean isEtichetta128(BarcodeScanDTO barcodeScanDTO){ + return barcodeScanDTO != null && (barcodeScanDTO.getType() == BarcodeType.CODE128 || barcodeScanDTO.getType() == BarcodeType.EAN128); + } + + public static boolean isEtichettaPosizione(BarcodeScanDTO barcodeScanDTO) { + String barcode = barcodeScanDTO.getStringValue(); + boolean isPosizione = false; + + if(SettingsManager.iDB().getAvailablePosizioni() != null) { + Stream tmpStream = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcode)); + + if(tmpStream.count() > 0){ + isPosizione = true; + } + } + + + return barcodeScanDTO != null && isPosizione; + } + + public static boolean isEanPeso(BarcodeScanDTO barcodeScanDTO) { + return barcodeScanDTO != null && barcodeScanDTO.getType() == BarcodeType.EAN13 && barcodeScanDTO.getStringValue().startsWith("2"); + } + + + + public static Integer getNumColloFromULAnonima(String barcode) { + if(barcode != null){ + return Integer.parseInt(barcode.substring(3)); + } else + return null; + } + + + + public static String convertITF14toEAN13(String barcodeITF14) { + String barcodeEAN13 = null; + + if(barcodeITF14.length() == 14) { + barcodeEAN13 = barcodeITF14.substring(1, barcodeITF14.length() - 1).trim(); + barcodeEAN13 += getEAN13CheckDigit(barcodeEAN13); + } + + return barcodeEAN13; + } + + public static String convertITF14toNeutral(String barcodeITF14) { + String barcodeNeutral = null; + + if(barcodeITF14.length() == 14) { + barcodeNeutral = barcodeITF14.substring(1, barcodeITF14.length() - 1); + } + + return barcodeNeutral; + } + + + private static String getEAN13CheckDigit(String ean) { + + if (ean.length() != 12) { + UtilityLogger.errorMe(new Exception("Please provide an input string of 12 chars. Current lenght: "+ean.length())); + return null; + } + long tot = 0; + + for (int i = 0; i < 12; i++) { + tot = tot + (Long.parseLong(String.valueOf(ean.charAt(i))) * (i % 2 == 0 ? 1 : 3)); + } + return tot % 10 == 0 ? "0" : "" +(10-(tot % 10)); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDB.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDB.java new file mode 100644 index 00000000..ef3861b9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDB.java @@ -0,0 +1,35 @@ +package it.integry.integrywmsnative.core.utility; + +import java.text.SimpleDateFormat; +import java.util.Date; + +public class UtilityDB { + + public static String valueToString(Object value) { + String valueString; + SimpleDateFormat dateFormatFile = new SimpleDateFormat("yyyy-MM-dd"); + + if (value == null) { + valueString = "NULL"; + } else { + + valueString = value.toString(); + + if(value instanceof String) { + if(UtilityString.isNullOrEmpty((String) value)){ + valueString = "NULL"; + } else { + valueString = "'" + valueString.replaceAll("'","''") + "'"; + } + } else if (value instanceof Date){ + valueString = "'" + dateFormatFile.format(value) + "'"; + } else if (value instanceof Integer) { + + } else { + valueString = null; + } + } + return valueString; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDate.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDate.java index 0a315bb1..f72d8466 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDate.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDate.java @@ -17,6 +17,7 @@ public class UtilityDate { public static final String DMY_HUMAN = "dd MMM yyyy"; + public static final String DMY_HUMAN_LONG = "dd MMMM yyyy"; } public static Date recognizeDate(String dateString) throws Exception{ diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDimension.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDimension.java new file mode 100644 index 00000000..95a44372 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDimension.java @@ -0,0 +1,25 @@ +package it.integry.integrywmsnative.core.utility; + +import android.content.Context; +import android.content.res.Resources; +import android.util.DisplayMetrics; +import android.util.TypedValue; + +public class UtilityDimension { + + public static int convertSizeToDP(Context mContext, int size){ + Resources r = mContext.getResources(); + return (int) TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, + size, + r.getDisplayMetrics() + ); + } + + public static float convertDpToPixel(float dp){ + DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); + float px = dp * (metrics.densityDpi / 160f); + return Math.round(px); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java new file mode 100644 index 00000000..91b13ac3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityExceptions.java @@ -0,0 +1,35 @@ +package it.integry.integrywmsnative.core.utility; + +import android.app.ProgressDialog; +import android.content.Context; +import android.text.SpannableString; +import android.util.Log; + +import com.orhanobut.logger.Logger; + +import it.integry.integrywmsnative.core.REST.CommonRESTException; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; + +public class UtilityExceptions { + + + public static void defaultException(Context context, Exception ex, ProgressDialog progressDialog){ + progressDialog.dismiss(); + defaultException(context, ex); + } + public static void defaultException(Context context, Exception ex){ + defaultException(context, ex, false); + } + + public static void defaultException(Context context, Exception ex, boolean sendEmail){ + + Logger.e(ex, ex.getMessage()); + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + + if(errorMessage == null) errorMessage = ex.getMessage(); + DialogSimpleMessageHelper.makeErrorDialog(context, new SpannableString(errorMessage), null, null).show(); + + if(sendEmail) UtilityLogger.errorMe(ex); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLogger.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLogger.java new file mode 100644 index 00000000..c5413c93 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLogger.java @@ -0,0 +1,58 @@ +package it.integry.integrywmsnative.core.utility; + +import android.util.Log; + +import com.orhanobut.logger.Logger; + +import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.Date; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import okhttp3.internal.Util; + +public class UtilityLogger { + + public static void logMe(String message){ + StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); + + String caller = "UtilityLogger"; + + for(int i = 0; i < stackTraceElements.length; i++){ + + if(stackTraceElements[i].getMethodName().equalsIgnoreCase("logMe")){ + caller = stackTraceElements[i+1].getFileName() + "->" + stackTraceElements[i+1].getMethodName(); + } + + } + + Logger.d(message); + } + + public static void errorMe(Exception ex) { + //ex.printStackTrace(); //Default log + + String message = UtilityResources.readRawTextFile(R.raw.error_mail); + + message = message.replace("#exception_name#", ex.getMessage()); + + StringWriter sw = new StringWriter(); + ex.printStackTrace(new PrintWriter(sw)); + message = message.replace("#stacktrace#", sw.toString()); + + String currentAzienda = UtilityString.isNullOrEmpty(SettingsManager.i().userSession.profileDB) ? "" : SettingsManager.i().userSession.profileDB; + message = message.replace("#azienda_nome#", currentAzienda); + + SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss"); + message = message.replace("#current_date#", sdf.format(new Date())); + + SystemRESTConsumer.sendErrorLogMail(message); + + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityNumber.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityNumber.java new file mode 100644 index 00000000..68e0a7b4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityNumber.java @@ -0,0 +1,33 @@ +package it.integry.integrywmsnative.core.utility; + +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Locale; + +public class UtilityNumber { + + public static String decimalToString(BigDecimal bigDecimal){ + if(bigDecimal == null) return "0"; + return decimalToString(bigDecimal, 2); + } + + public static String decimalToString(BigDecimal bigDecimal, int decimal){ + if(bigDecimal == null) return "0"; + return decimalToString(bigDecimal.floatValue(), decimal); + } + + public static String decimalToString(float floatValue, int decimal) { + DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.getDefault()); + otherSymbols.setDecimalSeparator('.'); + otherSymbols.setGroupingSeparator(','); + + final DecimalFormat decimalFormat = new DecimalFormat(); + decimalFormat.setMaximumFractionDigits(decimal); + decimalFormat.setDecimalFormatSymbols(otherSymbols); + decimalFormat.setGroupingUsed(false); + + return decimalFormat.format(floatValue); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityPosizione.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityPosizione.java new file mode 100644 index 00000000..a7ba71c9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityPosizione.java @@ -0,0 +1,24 @@ +package it.integry.integrywmsnative.core.utility; + +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; + +public class UtilityPosizione { + + public static boolean isPosizioneWithLivello(MtbDepoPosizione mtbDepoPosizione) { + + //TODO: Review this check + + + if(mtbDepoPosizione != null) { + + char LChar = mtbDepoPosizione.getPosizione().charAt(mtbDepoPosizione.getPosizione().length()-2); + + if(LChar == 'L') { + return true; + } else return false; + } + + return false; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java new file mode 100644 index 00000000..96049ebd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java @@ -0,0 +1,17 @@ +package it.integry.integrywmsnative.core.utility; + +import android.app.ProgressDialog; +import android.content.Context; + +import it.integry.integrywmsnative.R; + +public class UtilityProgress { + + public static ProgressDialog createDefaultProgressDialog(Context mContext) { + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + return progress; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityResources.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityResources.java new file mode 100644 index 00000000..0642284b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityResources.java @@ -0,0 +1,38 @@ +package it.integry.integrywmsnative.core.utility; + +import android.content.Context; +import android.support.annotation.RawRes; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +public class UtilityResources { + + private static Context mContext; + + public static void init(Context context) { + mContext = context; + } + + public static String readRawTextFile(@RawRes int resId) { + InputStream inputStream = mContext.getResources().openRawResource(resId); + + InputStreamReader inputreader = new InputStreamReader(inputStream); + BufferedReader buffreader = new BufferedReader(inputreader); + String line; + StringBuilder text = new StringBuilder(); + + try { + while (( line = buffreader.readLine()) != null) { + text.append(line); + text.append('\n'); + } + } catch (IOException e) { + return null; + } + return text.toString(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java new file mode 100644 index 00000000..a57129c8 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityServer.java @@ -0,0 +1,38 @@ +package it.integry.integrywmsnative.core.utility; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.net.SocketAddress; + +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; + +public class UtilityServer { + + public static void isHostReachable(final String serverAddress, final int serverTCPport, final ISingleValueOperationCallback callback){ + new Thread(() -> { + + boolean connected = false; + Socket socket; + try { + socket = new Socket(); + SocketAddress socketAddress = new InetSocketAddress(serverAddress, serverTCPport); + socket.connect(socketAddress, 10000); + if (socket.isConnected()) { + connected = true; + socket.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + socket = null; + } + + callback.onResult(connected); + + }).start(); + + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilitySettings.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilitySettings.java new file mode 100644 index 00000000..1eabf0df --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilitySettings.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.core.utility; + +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.settings.SettingsModel; + +public class UtilitySettings { + + + public static void logout(){ + SettingsManager.i().user = new SettingsModel.User(); + SettingsManager.i().userSession = new SettingsModel.UserSession(); + + SettingsManager.update(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java index 3711788d..eabd9478 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityString.java @@ -7,7 +7,11 @@ package it.integry.integrywmsnative.core.utility; public class UtilityString { public static boolean isNullOrEmpty(String stringToCheck){ - return stringToCheck == null || stringToCheck.equalsIgnoreCase(""); + return stringToCheck == null || stringToCheck.trim().length() == 0; + } + + public static String empty2null(String stringToCheck) { + return (stringToCheck != null && stringToCheck.trim().length() == 0 || stringToCheck == null) ? null : stringToCheck.trim(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityToast.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityToast.java new file mode 100644 index 00000000..1987e54a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityToast.java @@ -0,0 +1,13 @@ +package it.integry.integrywmsnative.core.utility; + +import android.widget.Toast; + +import it.integry.integrywmsnative.MainApplication; + +public class UtilityToast { + + public static void showToast(String message) { + Toast.makeText(MainApplication.Context, message, Toast.LENGTH_LONG).show(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityWindow.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityWindow.java new file mode 100644 index 00000000..25e0ea59 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityWindow.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.core.utility; + +import android.app.Activity; +import android.view.Window; +import android.view.WindowManager; + +public class UtilityWindow { + + public static void maximizeToFullScreen(Activity activity){ + activity.requestWindowFeature(Window.FEATURE_NO_TITLE); + activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/wifi/WiFiCheckerViewHolder.java b/app/src/main/java/it/integry/integrywmsnative/core/wifi/WiFiCheckerViewHolder.java new file mode 100644 index 00000000..9e258c6a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/wifi/WiFiCheckerViewHolder.java @@ -0,0 +1,52 @@ +package it.integry.integrywmsnative.core.wifi; + +import android.app.Activity; +import android.content.Context; +import android.view.View; +import android.widget.TextView; + +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; + +public class WiFiCheckerViewHolder implements ISingleValueOperationCallback{ + + private TextView mWifiSignalTextView; + + private WiFiStatusChecker mWiFiStatusChecker; + + public WiFiCheckerViewHolder(Context context, View view, int rsid){ + mWifiSignalTextView = view.findViewById(rsid); + + mWiFiStatusChecker = new WiFiStatusChecker(context); + } + + + public void startMonitoring(){ + mWiFiStatusChecker.startMonitoring(this); + } + + public void stopMonitoring(){ + mWiFiStatusChecker.stopMonitoring(); + } + + + @Override + public void onResult(WiFiStatusChecker.SIGNAL value) { + switch (value){ + case EXCELLENT: + mWifiSignalTextView.setText("EXCELLENT"); + break; + case GOOD: + mWifiSignalTextView.setText("GOOD"); + break; + case FAIR: + mWifiSignalTextView.setText("FAIR"); + break; + case WEAK: + mWifiSignalTextView.setText("WEAK"); + break; + case NONE: + mWifiSignalTextView.setText("NONE"); + break; + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/wifi/WiFiStatusChecker.java b/app/src/main/java/it/integry/integrywmsnative/core/wifi/WiFiStatusChecker.java new file mode 100644 index 00000000..201864e0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/wifi/WiFiStatusChecker.java @@ -0,0 +1,70 @@ +package it.integry.integrywmsnative.core.wifi; + +import android.content.Context; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.os.Handler; + +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; + +public class WiFiStatusChecker { + + + public enum SIGNAL { + EXCELLENT, + GOOD, + FAIR, + WEAK, + NONE + } + + private ISingleValueOperationCallback mCallback; + + private WifiManager mWifiManager; + private int mNumberOfLevels = 4; + + private boolean shouldExecute = true; + private final long MILLIS_DELAY = 5 * 1000; + + + private Handler handler = new Handler(); + private Runnable runnableCode = new Runnable() { + @Override + public void run() { + if(shouldExecute) { + WifiInfo wifiInfo = mWifiManager.getConnectionInfo(); + int level = WifiManager.calculateSignalLevel(wifiInfo.getRssi(), mNumberOfLevels); + + SIGNAL signal; + + switch (level){ + case 0: signal = SIGNAL.WEAK; break; + case 1: signal = SIGNAL.FAIR; break; + case 2: signal = SIGNAL.GOOD; break; + case 3: signal = SIGNAL.EXCELLENT; break; + default: signal = SIGNAL.NONE; break; + } + + mCallback.onResult(signal); + + handler.postDelayed(this, MILLIS_DELAY); + } + } + }; + + public WiFiStatusChecker(Context context){ + mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + } + + public void startMonitoring(ISingleValueOperationCallback callback){ + this.mCallback = callback; + shouldExecute = true; + + handler.post(runnableCode); + } + + public void stopMonitoring(){ + shouldExecute = false; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java index 719780cb..be466f8b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java @@ -4,53 +4,59 @@ package it.integry.integrywmsnative.gest.accettazione; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; +import android.databinding.DataBindingUtil; import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.SearchView; +import android.text.Html; +import android.text.SpannableString; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; -import java.net.SocketException; +import com.annimon.stream.Stream; + import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; -import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.REST.CommonRESTException; import it.integry.integrywmsnative.core.coollection.Coollection; -import it.integry.integrywmsnative.core.interfaces.ICheckBoxCallback; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.FragmentMainAccettazioneBinding; import it.integry.integrywmsnative.gest.accettazione.core.AccettazioneHelper; import it.integry.integrywmsnative.gest.accettazione.core.MainListAccettazioneAdapter; import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ILoadOrdiniCallback; import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ILoadPickingListCallback; -import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneGroupedInevasoDTO; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity; import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.plugins.waterfalltoolbar.WaterfallToolbar; -public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallback, SearchView.OnQueryTextListener, ITitledFragment { +public class MainAccettazioneFragment extends Fragment implements SearchView.OnQueryTextListener, ITitledFragment, IRecyclerFragment { + private static WaterfallToolbar mWaterfallToolbar; - @BindView(R.id.accettazione_main_fab) FloatingActionButton mFab; - - @BindView(R.id.accettazione_main_list) RecyclerView mRecyclerView; - - private MainListAccettazioneAdapter mAdapter; - private RecyclerView.LayoutManager mLayoutManager; - + private FragmentMainAccettazioneBinding mBinding; private AccettazioneHelper helper; + private List groupedOrdiniInevasi; + private MainListAccettazioneAdapter mAdapter; + + public MainAccettazioneFragment() { @@ -77,6 +83,7 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb // mParam2 = getArguments().getString(ARG_PARAM2); } + init(); } @@ -84,24 +91,24 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_main_accettazione, container, false); + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_accettazione, container, false); - ButterKnife.bind(this, layout); + mBinding.setView(this); + mBinding.accettazioneMainList.setLayoutManager(new LinearLayoutManager(getActivity())); + mBinding.accettazioneMainFab.hide(); - mRecyclerView.setHasFixedSize(true); + ButterKnife.bind(this, mBinding.getRoot()); - mLayoutManager = new LinearLayoutManager(getActivity()); - mRecyclerView.setLayoutManager(mLayoutManager); + mWaterfallToolbar.setRecyclerView(mBinding.accettazioneMainList); - mFab.hide(); - - return layout; + return mBinding.getRoot(); } private void init(){ + final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), getText(R.string.loading) + " ...", true); @@ -111,7 +118,7 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb @Override public void onLoadSuccess(List ordini) { Toast.makeText(getActivity(), "Caricati " + ordini.size() + " ordini", Toast.LENGTH_LONG).show(); - groupOrdini(ordini); + groupOrdiniAndMakeRecycler(ordini); progress.dismiss(); } @@ -121,7 +128,7 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); if(errorMessage == null) errorMessage = ex.getMessage(); - DialogSimpleMessageHelper.makeErrorDialog(getActivity(), errorMessage, null).show(); + DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); } }); @@ -129,20 +136,20 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb } - private void groupOrdini(List ordini){ + private void groupOrdiniAndMakeRecycler(List ordini){ String prevCodAnag = ""; for(OrdineAccettazioneInevasoDTO ordine : ordini){ - if(UtilityString.isNullOrEmpty(ordine.codJcom) || ordine.codJcom.equalsIgnoreCase("MAG")){ - ordine.codJcom = "MAG"; + if(UtilityString.isNullOrEmpty(ordine.codJcom) || ordine.codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)){ + ordine.codJcom = CommonConst.Config.COMMESSA_MAG; ordine.descrizioneCom = "MAGAZZINO"; } } groupedOrdiniInevasi = new ArrayList<>(); - //Splitto gli ordini per codAnagForn + //Splitto gli ordini per codAnagClie for(int i = 0; i < ordini.size(); i++){ if(prevCodAnag.equalsIgnoreCase(ordini.get(i).codAnagOrd)) continue; else prevCodAnag = ordini.get(i).codAnagOrd; @@ -210,6 +217,7 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb cliente.descrCom = filteredByCodAnagAndDateAndNumberOrders.get(k).descrizioneCom; cliente.dataCons = filteredByCodAnagAndDateAndNumberOrders.get(k).dataCons; cliente.numCnf = filteredByCodAnagAndDateAndNumberOrders.get(k).numCnf; + cliente.rifOrd = filteredByCodAnagAndDateAndNumberOrders.get(k).rifOrd; rigaOrdine.clienti.add(cliente); } @@ -221,9 +229,10 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb groupedOrdiniInevasi.add(groupedOrdine); } - - mAdapter = new MainListAccettazioneAdapter(getActivity(), groupedOrdiniInevasi, this); - mRecyclerView.setAdapter(mAdapter); + mAdapter = new MainListAccettazioneAdapter(getActivity(), groupedOrdiniInevasi, onGroupSelectionChanged); + // mAdapter.setHasStableIds(true); + mBinding.accettazioneMainList.setAdapter(mAdapter); + //mRecyclerView.setAdapter(mAdapter); } @OnClick(R.id.accettazione_main_fab) @@ -241,14 +250,38 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), getText(R.string.loading) + " ...", true); - helper.retrievePiclingList(barcodes, new ILoadPickingListCallback() { + helper.retrievePickingList(barcodes, new ILoadPickingListCallback() { @Override - public void onLoadSuccess(List ordini) { + public void onLoadSuccess(final List ordini) { progress.dismiss(); - Intent myIntent = new Intent(getActivity(), AccettazioneOrdineInevasoActivity.class); - myIntent.putExtra("key", (ArrayList) ordini); //Optional parameters - getActivity().startActivity(myIntent); + AtomicInteger artsCounter = new AtomicInteger(); + + Stream.of(ordini).forEach(x -> { + artsCounter.addAndGet((int) Stream.of(x.ordini).filter(y -> y.getQtaDaEvadere().floatValue() > 0).count()); + }); + + List ordersKeys = new ArrayList<>(); + + for(OrdineAccettazioneDTO ordine : ordini){ + if(!ordersKeys.contains(ordine.data + " " + ordine.numero + " " + ordine.gestione)){ + ordersKeys.add(ordine.data + " " + ordine.numero + " " + ordine.gestione); + } + } + + DialogSimpleMessageHelper.makeInfoDialog(getActivity(), + getText(R.string.orders).toString(), + Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, ordersKeys.size()), ordersKeys.size()) + + "

" + + "" + artsCounter + " " + getActivity().getResources().getQuantityString(R.plurals.available_articles, artsCounter.get())), + null, + () -> { + + Intent myIntent = new Intent(getActivity(), AccettazioneOrdineInevasoActivity.class); + myIntent.putExtra("key", (ArrayList) ordini); //Optional parameters + getActivity().startActivity(myIntent); + + }).show(); } @@ -259,18 +292,27 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); if(errorMessage == null) errorMessage = ex.getMessage() + "\n" + ex.getCause().getCause().getMessage(); - DialogSimpleMessageHelper.makeErrorDialog(getActivity(), errorMessage, null).show(); + DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); } }); } - @Override - public void onToggle(boolean newValue) { - if(helper.getSelectedOrders(groupedOrdiniInevasi).size() > 0) mFab.show(); - else mFab.hide(); - } + RunnableArgs onGroupSelectionChanged = dto -> { + List selectedOrders = helper.getSelectedOrders(groupedOrdiniInevasi); + + if(selectedOrders != null && selectedOrders.size() > 1){ + for (OrdineAccettazioneGroupedInevasoDTO selectedOrder : selectedOrders) { + if(!dto.codAnagForn.equalsIgnoreCase(selectedOrder.codAnagForn)) { + Stream.of(selectedOrder.ordini).forEach(x -> x.setCheckbox(false)); + } + } + } + + if(selectedOrders.size() > 0) mBinding.accettazioneMainFab.show(); + else mBinding.accettazioneMainFab.hide(); + }; @@ -288,4 +330,9 @@ public class MainAccettazioneFragment extends Fragment implements ICheckBoxCallb return true; } + + @Override + public void setWaterfallToolbar(WaterfallToolbar waterfallToolbar) { + mWaterfallToolbar = waterfallToolbar; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java index d0022178..29e8ebdb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/AccettazioneHelper.java @@ -1,6 +1,5 @@ package it.integry.integrywmsnative.gest.accettazione.core; -import android.app.ProgressDialog; import android.content.Context; import android.text.TextUtils; import android.util.Log; @@ -12,6 +11,8 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.REST.RESTBuilder; import it.integry.integrywmsnative.core.REST.model.EsitoType; import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ILoadOrdiniCallback; import it.integry.integrywmsnative.gest.accettazione.core.interfaces.ILoadPickingListCallback; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; @@ -35,10 +36,10 @@ public class AccettazioneHelper { } public void loadOrdini(final ILoadOrdiniCallback callback){ - + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); OrdiniAccettazioneRESTConsumerService service = RESTBuilder.getService(OrdiniAccettazioneRESTConsumerService.class); - service.listOrdiniInevasi().enqueue(new Callback>>() { + service.listOrdiniInevasi(codMdep).enqueue(new Callback>>() { @Override public void onResponse(Call>> call, Response>> response) { @@ -69,7 +70,7 @@ public class AccettazioneHelper { }); } - public void retrievePiclingList(List barcodeOrdini, final ILoadPickingListCallback callback){ + public void retrievePickingList(List barcodeOrdini, final ILoadPickingListCallback callback){ String joinedBarcodes = TextUtils.join(",", barcodeOrdini); @@ -110,7 +111,8 @@ public class AccettazioneHelper { @Override public void onFailure(Call>> call, Throwable t) { - Log.e("Accettazione", t.getCause().toString()); + Log.e("Accettazione", t.toString()); + UtilityLogger.errorMe(new Exception(t)); callback.onLoadFail(new Exception(t)); } }); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/MainListAccettazioneAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/MainListAccettazioneAdapter.java index b49ec054..036482ad 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/MainListAccettazioneAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/core/MainListAccettazioneAdapter.java @@ -1,6 +1,7 @@ package it.integry.integrywmsnative.gest.accettazione.core; import android.content.Context; +import android.support.v4.util.Pools; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.view.LayoutInflater; @@ -14,9 +15,11 @@ import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.interfaces.ICheckBoxCallback; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneGroupedInevasoDTO; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.MainListOrdineAccettazioneAdapter; /** * Created by GiuseppeS on 06/03/2018. @@ -26,22 +29,28 @@ public class MainListAccettazioneAdapter extends RecyclerView.Adapter mDataset; - private ICheckBoxCallback mCheckBoxCallback; + private RunnableArgs mOnGroupSelected; + + private Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(2000); + private Pools.SynchronizedPool sPoolClienti = new Pools.SynchronizedPool(3000); public static class ViewHolder extends RecyclerView.ViewHolder { // each data item is just a string in this case private TextView mTextViewGroupHeader; private LinearLayout mLinearLayoutGroupItemContainer; + + private List views = new ArrayList<>(); + public ViewHolder(View v) { super(v); } } // Provide a suitable constructor (depends on the kind of dataset) - public MainListAccettazioneAdapter(Context context, List myDataset, ICheckBoxCallback checkBoxCallback) { + public MainListAccettazioneAdapter(Context context, List myDataset, RunnableArgs onGroupSelected) { mContext = context; mDataset = myDataset; - mCheckBoxCallback = checkBoxCallback; + mOnGroupSelected = onGroupSelected; } // Create new views (invoked by the layout manager) @@ -52,14 +61,12 @@ public class MainListAccettazioneAdapter extends RecyclerView.Adapter subGroup = mDataset.get(position).ordini; + final int finalPosition = position; holder.mTextViewGroupHeader.setText(mDataset.get(position).nomeFornitore); - holder.itemView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - boolean newValue = true; + holder.itemView.setOnClickListener(view -> { + boolean newValue = true; - for(int i = 0; i < subGroup.size(); i++){ - if(subGroup.get(i).checkBox) newValue = false; - } - - for(int i = 0; i < subGroup.size(); i++){ - subGroup.get(i).setCheckbox(newValue); - } - - mCheckBoxCallback.onToggle(newValue); + for(int i = 0; i < subGroup.size(); i++){ + if(subGroup.get(i).checkBox) newValue = false; } + + for(int i = 0; i < subGroup.size(); i++){ + subGroup.get(i).setCheckbox(newValue); + } + + mOnGroupSelected.run(mDataset.get(finalPosition)); }); - - for(int i = 0; i < subGroup.size(); i++){ + for (int i = 0; i < subGroup.size(); i++) { final OrdineAccettazioneGroupedInevasoDTO.Ordine ordine = subGroup.get(i); - View groupModelView = LayoutInflater.from(mContext) - .inflate(R.layout.accettazione_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false); - if(i % 2 == 1){ - groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + ordine.checkBoxCallback = new ArrayList<>(); + + View groupModelViewPool = (View) sPool.acquire(); + if(groupModelViewPool == null){ + groupModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.accettazione_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false); } - final CheckBox checkBox = (CheckBox) groupModelView.findViewById(R.id.accettazione_main_list_group_item_container_checkBox); + View groupModelView = groupModelViewPool; + holder.views.add(groupModelView); + + + groupModelView.setVisibility(View.VISIBLE); + + if (i % 2 == 1) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + } else { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.white)); + } + + final CheckBox checkBox = groupModelView.findViewById(R.id.accettazione_main_list_group_item_container_checkBox); checkBox.setChecked(ordine.checkBox); - ordine.checkBoxCallback.add(new ICheckBoxCallback() { - @Override - public void onToggle(boolean newValue) { - checkBox.setChecked(newValue); - } + ordine.checkBoxCallback.add(checkBox::setChecked); + + groupModelView.setOnClickListener(view -> { + checkBox.toggle(); + ordine.checkBox = checkBox.isChecked(); + mOnGroupSelected.run(mDataset.get(finalPosition)); +// mCheckBoxCallback.onToggle(checkBox.isChecked()); }); - groupModelView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - checkBox.toggle(); - ordine.checkBox = checkBox.isChecked(); - mCheckBoxCallback.onToggle(checkBox.isChecked()); - } - }); - - TextView testataOrdTextView = (TextView) groupModelView.findViewById(R.id.accettazione_main_list_group_item_container_testata_ord); + TextView testataOrdTextView = groupModelView.findViewById(R.id.accettazione_main_list_group_item_container_testata_ord); String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), String.valueOf(ordine.numero), UtilityDate.formatDate(ordine.getData(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); testataOrdTextView.setText(Html.fromHtml(testataOrdString)); - LinearLayout clientLinearLayout = (LinearLayout) groupModelView.findViewById(R.id.accettazione_main_list_group_item_container_clienti_ord) ; + LinearLayout clientLinearLayout = groupModelView.findViewById(R.id.accettazione_main_list_group_item_container_clienti_ord); List subGroupClienti = ordine.clienti; - for(int k = 0; k < subGroupClienti.size(); k++){ - View groupClienteModelView = LayoutInflater.from(mContext) - .inflate(R.layout.accettazione_main_list_group_clienti, clientLinearLayout, false); + clientLinearLayout.removeAllViews(); - TextView clienteComm = (TextView) groupClienteModelView.findViewById(R.id.accettazione_main_list_group_clienti_comm); + for (int k = 0; k < subGroupClienti.size(); k++) { + + + View groupClienteModelViewPool = (View) sPoolClienti.acquire(); + if(groupClienteModelViewPool == null){ + groupClienteModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.accettazione_main_list_group_clienti, clientLinearLayout, false); + } + + View groupClienteModelView = groupClienteModelViewPool; + + + TextView clienteComm = groupClienteModelView.findViewById(R.id.accettazione_main_list_group_clienti_comm); String clienteText; - clienteText = subGroupClienti.get(k).codJcom + " - " + subGroupClienti.get(k).descrCom; +// clienteText = subGroupClienti.get(k).codJcom + " - " + subGroupClienti.get(k).descrCom; + clienteText = subGroupClienti.get(k).rifOrd; clienteComm.setText(clienteText); - TextView dataCons = (TextView) groupClienteModelView.findViewById(R.id.accettazione_main_list_group_clienti_datacons); - dataCons.setText(UtilityDate.formatDate(subGroupClienti.get(k).getDataCons(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH)); - + TextView dataCons = groupClienteModelView.findViewById(R.id.accettazione_main_list_group_clienti_datacons); + if (subGroupClienti.get(k).getDataCons() != null) { + dataCons.setText(UtilityDate.formatDate(subGroupClienti.get(k).getDataCons(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH)); + } else { + dataCons.setText(""); + } clientLinearLayout.addView(groupClienteModelView); } - holder.mLinearLayoutGroupItemContainer.addView(groupModelView); + holder.mLinearLayoutGroupItemContainer.addView(groupModelView); } + + } + + @Override + public void onViewRecycled(ViewHolder holder){ + if(holder != null){ + for(int i = 0; i < holder.views.size(); i++){ + View groupModelView = holder.views.get(i); + + LinearLayout clientLinearLayout = groupModelView.findViewById(R.id.accettazione_main_list_group_item_container_clienti_ord); + + for(int k = 0; k < clientLinearLayout.getChildCount(); k++){ + View cliente = clientLinearLayout.getChildAt(k); + ((ViewGroup) cliente.getParent()).removeView(cliente); + + sPoolClienti.release(cliente); + } + + ((ViewGroup) groupModelView.getParent()).removeView(groupModelView); + sPool.release(groupModelView); + } + + holder.views.clear(); + } + + super.onViewRecycled(holder); } // Return the size of your dataset (invoked by the layout manager) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java index 060c797e..aed2be5f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneDTO.java @@ -2,8 +2,12 @@ package it.integry.integrywmsnative.gest.accettazione.dto; import android.os.Parcel; import android.os.Parcelable; +import android.util.Log; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; import it.integry.integrywmsnative.core.model.MtbAart; @@ -29,14 +33,18 @@ public class OrdineAccettazioneDTO implements Parcelable { public static class Riga implements Parcelable { - public Float qtaOrd; - public Float qtaRiservate; + public Float qtaOrd; //QTA ORDINATA (tutta la qta ordiata) + public Float qtaRiservate; //QTA COLLI (tutta la qta già accantonata nei colli + public Float qtaEvasa; //QTA EVASA ORDINE (qta con documento) + //public Float qtaDaEvadere; //qta_ord - qta_evasa - qta_colli public int rigaOrd; public String codJcom; public String ragSocCom; + public String descrizioneCommessa; public MtbAart mtbAart; public PickingObjectDTO[] colliAssociati; - public boolean hidden = false; + public Boolean hidden = null; + public Boolean tempHidden = null; public String partitaMag; public String codArtFor; public String descrizioneEstesa; @@ -48,8 +56,185 @@ public class OrdineAccettazioneDTO implements Parcelable { public String dataCons; - public Float getQtaDaEvadere() { - return this.qtaOrd - this.qtaRiservate; + public BigDecimal getQtaDaEvadere() { + return this.getQtaOrd().subtract(this.getQtaEvasa()).subtract(this.getQtaRiservate()); + } + + + public BigDecimal getQtaOrd() { + return qtaOrd != null ? new BigDecimal(qtaOrd) : BigDecimal.ZERO; + } + + public BigDecimal getQtaRiservate() { + return qtaRiservate != null ? new BigDecimal(qtaRiservate) : BigDecimal.ZERO; + } + + public BigDecimal getQtaEvasa() { + return qtaEvasa != null ? new BigDecimal(qtaEvasa) : BigDecimal.ZERO; + } + + public int getRigaOrd() { + return rigaOrd; + } + + public String getCodJcom() { + return codJcom; + } + + public String getRagSocCom() { + return ragSocCom; + } + + public String getDescrizioneCommessa() { + return descrizioneCommessa; + } + + public MtbAart getMtbAart() { + return mtbAart; + } + + public PickingObjectDTO[] getColliAssociati() { + return colliAssociati; + } + + public Boolean isHidden() { + return hidden; + } + + public Boolean isTempHidden() { + return tempHidden; + } + + public String getPartitaMag() { + return partitaMag; + } + + public String getCodArtFor() { + return codArtFor; + } + + public String getDescrizioneEstesa() { + return descrizioneEstesa; + } + + public String getCodAlis() { + return codAlis; + } + + public int getNumOrd() { + return numOrd; + } + + public String getGestioneOrd() { + return gestioneOrd; + } + + public String getDataCons() { + return dataCons; + } + + public Date getDataOrd() { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + Date dataOrd = null; + + try{ + dataOrd = sdf.parse(this.dataOrd); + } catch (Exception ex) { + Log.e("Parsing date", ex.getMessage()); + } + + return dataOrd; + } + + + public Riga setQtaOrd(Float qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public Riga setQtaRiservate(BigDecimal qtaRiservate) { + this.qtaRiservate = qtaRiservate.floatValue(); + return this; + } + + public Riga setQtaEvasa(Float qtaEvasa) { + this.qtaEvasa = qtaEvasa; + return this; + } + + public Riga setRigaOrd(int rigaOrd) { + this.rigaOrd = rigaOrd; + return this; + } + + public Riga setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public Riga setRagSocCom(String ragSocCom) { + this.ragSocCom = ragSocCom; + return this; + } + + public Riga setDescrizioneCommessa(String descrizioneCommessa) { + this.descrizioneCommessa = descrizioneCommessa; + return this; + } + + public Riga setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } + + public Riga setHidden(boolean hidden) { + this.hidden = hidden; + return this; + } + + public Riga setTempHidden(boolean hidden) { + this.tempHidden = hidden; + return this; + } + + public Riga setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + public Riga setCodArtFor(String codArtFor) { + this.codArtFor = codArtFor; + return this; + } + + public Riga setDescrizioneEstesa(String descrizioneEstesa) { + this.descrizioneEstesa = descrizioneEstesa; + return this; + } + + public Riga setCodAlis(String codAlis) { + this.codAlis = codAlis; + return this; + } + + public Riga setNumOrd(int numOrd) { + this.numOrd = numOrd; + return this; + } + + public Riga setDataOrd(String dataOrd) { + this.dataOrd = dataOrd; + return this; + } + + public Riga setGestioneOrd(String gestioneOrd) { + this.gestioneOrd = gestioneOrd; + return this; + } + + public Riga setDataCons(String dataCons) { + this.dataCons = dataCons; + return this; } public Riga(){} @@ -60,8 +245,9 @@ public class OrdineAccettazioneDTO implements Parcelable { rigaOrd = in.readInt(); codJcom = in.readString(); ragSocCom = in.readString(); + descrizioneCommessa = in.readString(); mtbAart = (MtbAart) in.readValue(MtbAart.class.getClassLoader()); - hidden = in.readByte() != 0x00; + hidden = in.readByte() == 0x00 ? null : in.readByte() != 0x00; partitaMag = in.readString(); codArtFor = in.readString(); descrizioneEstesa = in.readString(); @@ -94,8 +280,14 @@ public class OrdineAccettazioneDTO implements Parcelable { dest.writeInt(rigaOrd); dest.writeString(codJcom); dest.writeString(ragSocCom); + dest.writeString(descrizioneCommessa); dest.writeValue(mtbAart); - dest.writeByte((byte) (hidden ? 0x01 : 0x00)); + if (hidden == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeByte((byte) (hidden ? 0x01 : 0x00)); + } dest.writeString(partitaMag); dest.writeString(codArtFor); dest.writeString(descrizioneEstesa); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneGroupedInevasoDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneGroupedInevasoDTO.java index 82bb7c63..9811f849 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneGroupedInevasoDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/dto/OrdineAccettazioneGroupedInevasoDTO.java @@ -128,6 +128,7 @@ public class OrdineAccettazioneGroupedInevasoDTO implements Cloneable, Serializa public String dataCons; public Integer numCnf; public String descrCom; + public String rifOrd; public Date getDataCons(){ try { @@ -147,6 +148,7 @@ public class OrdineAccettazioneGroupedInevasoDTO implements Cloneable, Serializa dataCons = in.readString(); numCnf = in.readByte() == 0x00 ? null : in.readInt(); descrCom = in.readString(); + rifOrd = in.readString(); } @Override @@ -167,6 +169,7 @@ public class OrdineAccettazioneGroupedInevasoDTO implements Cloneable, Serializa dest.writeInt(numCnf); } dest.writeString(descrCom); + dest.writeString(rifOrd); } @SuppressWarnings("unused") diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java index b2c96e09..0aa7c501 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/rest/OrdiniAccettazioneRESTConsumerService.java @@ -6,6 +6,7 @@ import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; import retrofit2.Call; +import retrofit2.http.GET; import retrofit2.http.POST; import retrofit2.http.Query; @@ -15,10 +16,10 @@ import retrofit2.http.Query; public interface OrdiniAccettazioneRESTConsumerService { - @POST("SM2GetOrdiniAccettazioneInevasi") - Call>> listOrdiniInevasi(); + @GET("SM2GetOrdiniAccettazioneInevasi") + Call>> listOrdiniInevasi(@Query("codMdep") String codMdep); - @POST("WMSGetPickingListAccettazione") + @GET("WMSGetPickingListAccettazione") Call>> pickingListAccettazione(@Query("codBarreBancale") String codBarreBacale); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java index 737383b9..8e66e0c3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/AccettazioneOrdineInevasoActivity.java @@ -1,70 +1,57 @@ package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso; -import android.content.DialogInterface; -import android.support.v7.app.AlertDialog; +import android.content.Intent; +import android.databinding.DataBindingUtil; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; -import android.widget.Toast; import java.util.ArrayList; import java.util.List; -import butterknife.BindView; -import butterknife.ButterKnife; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding; +import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; -import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.AccettazioneOrdineInevasoHelper; -import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.MainListOrdineAccettazioneAdapter; -import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoOrderBy; -import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOnOrdineAccettazioneInevasoViewModel; +import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; +import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; public class AccettazioneOrdineInevasoActivity extends AppCompatActivity { - @BindView(R.id.toolbar) Toolbar toolbar; + public ActivityAccettazioneOrdineInevasoBinding bindings; + private AccettazioneOnOrdineAccettazioneInevasoViewModel mAccettazioneOrdineInevasoViewModel; + private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel; - @BindView(R.id.accettazione_ordine_main_list) RecyclerView mRecyclerView; + private static final int PICK_UL_REQUEST = 1; // The request code - - private MainListOrdineAccettazioneAdapter mAdapter; - private RecyclerView.LayoutManager mLayoutManager; - - private List> groupedRighe; - private List groupedOrdini; - - private AccettazioneOrdineInevasoHelper helper; - - private AccettazioneOrdineInevasoOrderBy.Enum currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR; + private int barcodeScannerIstanceID = -1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_accettazione_ordine_inevaso); - ButterKnife.bind(this); + bindings = DataBindingUtil.setContentView(this, R.layout.activity_accettazione_ordine_inevaso); + FragmentArticoliInColloBottomSheetBinding bindings = this.bindings.bottomSheetInclude; + mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings); - setSupportActionBar(toolbar); + List orders = (ArrayList)getIntent().getSerializableExtra("key"); + mAccettazioneOrdineInevasoViewModel = new AccettazioneOnOrdineAccettazioneInevasoViewModel( + this, mArticoliInColloBottomSheetViewModel, orders); - List orders = new ArrayList(); - orders = (ArrayList)getIntent().getSerializableExtra("key"); + setSupportActionBar(this.bindings.toolbar); setTitle(orders); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - groupedOrdini = new ArrayList<>(); - for (OrdineAccettazioneDTO ordine : orders){ - groupedOrdini.addAll(ordine.ordini); - } - - helper = new AccettazioneOrdineInevasoHelper(this); - - groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini); - - initRecyclerView(groupedRighe); + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(mAccettazioneOrdineInevasoViewModel.onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false))); } @@ -74,6 +61,18 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity { return true; } + @Override + public void onBackPressed() { + if(mArticoliInColloBottomSheetViewModel.isExpanded()){ + mArticoliInColloBottomSheetViewModel.collapse(); + } else if(mAccettazioneOrdineInevasoViewModel.thereIsAnOpenedUL()) { + mArticoliInColloBottomSheetViewModel.closeCurrentUL(); + } else { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onBackPressed(); + } + } + @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. @@ -86,7 +85,7 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity { // Handle item selection switch (item.getItemId()) { case R.id.action_filter: - this.showOrderDialog(); + mAccettazioneOrdineInevasoViewModel.showOrderDialog(); return true; default: return super.onOptionsItemSelected(item); @@ -106,75 +105,30 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity { } } - private void initRecyclerView(List> groupedRighe){ - //RecyclerView setup - mRecyclerView.setHasFixedSize(true); - mLayoutManager = new LinearLayoutManager(this); - mRecyclerView.setLayoutManager(mLayoutManager); - try { - mAdapter = helper.getRightListAdapter(AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR, groupedRighe); - } catch (Exception e) { - e.printStackTrace(); - DialogSimpleMessageHelper.makeErrorDialog(this, e.toString(), null).show(); - } - mRecyclerView.setAdapter(mAdapter); + public void startListaBancaliRegistratiActivity(ArrayList mtbColts){ + Intent myIntent = new Intent(this, ListaBancaliActivity.class); + myIntent.putExtra("key", mtbColts); //Optional parameters + myIntent.putExtra(ListaBancaliActivity.Key.CanRecoverUL, true); + this.startActivityForResult(myIntent, PICK_UL_REQUEST); } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // Check which request we're responding to + if (requestCode == PICK_UL_REQUEST) { + // Make sure the request was successful + if (resultCode == RESULT_OK) { + MtbColt recoveredMtbColt = data.getParcelableExtra("key"); - - private void showOrderDialog() { - - AlertDialog dialog = new AlertDialog.Builder(this) - .setTitle(AccettazioneOrdineInevasoActivity.this.getText(R.string.action_orderBy)) - .setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, currentOrderBy.getVal(), new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(which); - } - }) - .setPositiveButton("Ok", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - refreshOrderBy(); - } - }) - .create(); - dialog.show(); - } - - - - private void refreshOrderBy(){ - switch (currentOrderBy){ - case COD_ART_FOR: - groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini); - break; - case DESCR_ART: - groupedRighe = helper.getOrdiniRaggruppatiPerDescrArt(groupedOrdini); - break; - - case RAG_SOC_COM: - groupedRighe = helper.getOrdiniRaggruppatiPerRagSocCommessa(groupedOrdini); - break; - - default: - break; - } - - try { - mRecyclerView.setAdapter(helper.getRightListAdapter(currentOrderBy, groupedRighe)); - mRecyclerView.invalidate(); - -// mAdapter = helper.getRightListAdapter(currentOrderBy, groupedRighe); -// mAdapter.notifyDataSetChanged(); - } catch (Exception e) { - e.printStackTrace(); - Toast.makeText(this, e.getMessage().toString(), Toast.LENGTH_LONG).show(); + mAccettazioneOrdineInevasoViewModel.recoverUL(recoveredMtbColt); + } } } + + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java index ecbb59bb..bffb15dc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/AccettazioneOrdineInevasoHelper.java @@ -1,20 +1,24 @@ package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core; import android.content.Context; -import android.content.SyncRequest; -import android.util.Log; +import android.databinding.ObservableArrayList; +import android.view.View; +import com.annimon.stream.Stream; +import com.orhanobut.logger.Logger; + +import java.math.BigDecimal; import java.text.DecimalFormat; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.HashMap; import java.util.List; -import java.util.SortedSet; -import java.util.TreeSet; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.coollection.Coollection; +import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoListViewModel; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoOrderBy; @@ -27,59 +31,73 @@ public class AccettazioneOrdineInevasoHelper { private Context mContext; + private ObservableArrayList mListViewModels = new ObservableArrayList<>(); + public AccettazioneOrdineInevasoHelper(Context context){ mContext = context; } + public MainListOrdineAccettazioneAdapter getRightListAdapter(View emptyView) { + return new MainListOrdineAccettazioneAdapter(mContext, mListViewModels, emptyView); + } + public void updateListModel(AccettazioneOrdineInevasoOrderBy.Enum orderByEnum, List> mDataset, List mtbColrs) throws Exception { - public MainListOrdineAccettazioneAdapter getRightListAdapter(AccettazioneOrdineInevasoOrderBy.Enum orderByEnum, List> mDataset) throws Exception { - - List listViewModels = null; + mListViewModels.clear(); switch (orderByEnum){ case COD_ART_FOR: case DESCR_ART: - listViewModels = getListViewModelPerArtForn(mDataset); + mListViewModels.addAll(getListViewModelPerArtForn(mDataset, mtbColrs)); break; case RAG_SOC_COM: - listViewModels = getListViewModelPerRagSocCommessa(mDataset); + mListViewModels.addAll(getListViewModelPerRagSocCommessa(mDataset, mtbColrs)); break; default: throw new Exception("Cannot find right list adapter: " + orderByEnum.toString()); } - return new MainListOrdineAccettazioneAdapter(mContext, listViewModels); - } - public List> getOrdiniRaggruppatiPerCodArtForn(List mDataset){ + public List> getOrdiniRaggruppatiPerCodArtForn(List mDataset, boolean forceHiddenCheck){ List codArtForns = new ArrayList<>(); for(int i = 0; i < mDataset.size(); i++){ if(!codArtForns.contains(mDataset.get(i).codArtFor)){ codArtForns.add(mDataset.get(i).codArtFor); } + + if(mDataset.get(i).codJcom == null) mDataset.get(i).codJcom = CommonConst.Config.COMMESSA_MAG; + if(mDataset.get(i).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) mDataset.get(i).descrizioneCommessa = null; } - Collections.sort(codArtForns, new Comparator() { - public int compare(String str1, String str2) { - return str1.compareToIgnoreCase(str2); - } - }); + boolean anyNull = codArtForns.contains(null); + + codArtForns = Stream.of(codArtForns) + .withoutNulls() + .sortBy(x -> x).toList(); + + if(anyNull) codArtForns.add(null); + List> groupedRighe = new ArrayList<>(); for (String codArtForn : codArtForns) { - List tmpList = Coollection.from(mDataset) - .where("codArtFor", Coollection.eqIgnoreCase(codArtForn)).all(); + + List tmpList = Stream.of(mDataset).filter(x -> x.getCodArtFor() != null && x.getCodArtFor().equalsIgnoreCase(codArtForn)).toList(); for(int i = 0; i < tmpList.size(); i++){ - if(tmpList.get(i).qtaRiservate >= tmpList.get(i).qtaOrd){ - tmpList.remove(i); - i--; + if(tmpList.get(i).isHidden() == null || forceHiddenCheck) { + if (tmpList.get(i).getQtaDaEvadere().floatValue() <= 0) { + tmpList.get(i).setHidden(true); + //tmpList.remove(i); + //i--; + } else tmpList.get(i).setHidden(false); + + + tmpList.get(i).setTempHidden(false); } } @@ -92,30 +110,34 @@ public class AccettazioneOrdineInevasoHelper { } - public List> getOrdiniRaggruppatiPerDescrArt(List mDataset){ + public List> getOrdiniRaggruppatiPerDescrArt(List mDataset, boolean forceHiddenCheck){ List descrArtForns = new ArrayList<>(); for(int i = 0; i < mDataset.size(); i++){ if(!descrArtForns.contains(mDataset.get(i).descrizioneEstesa)){ descrArtForns.add(mDataset.get(i).descrizioneEstesa); } + + if(mDataset.get(i).codJcom == null) mDataset.get(i).codJcom = CommonConst.Config.COMMESSA_MAG; + if(mDataset.get(i).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) mDataset.get(i).descrizioneCommessa = null; } - Collections.sort(descrArtForns, new Comparator() { - public int compare(String str1, String str2) { - return str1.compareToIgnoreCase(str2); - } - }); + Collections.sort(descrArtForns, String::compareToIgnoreCase); List> groupedRighe = new ArrayList<>(); for (String descrArtForn : descrArtForns) { - List tmpList = Coollection.from(mDataset) - .where("descrizioneEstesa", Coollection.eqIgnoreCase(descrArtForn)).all(); + List tmpList = Stream.of(mDataset).filter(x -> x.getDescrizioneEstesa() != null && x.getDescrizioneEstesa().equalsIgnoreCase(descrArtForn)).toList(); for(int i = 0; i < tmpList.size(); i++){ - if(tmpList.get(i).qtaRiservate >= tmpList.get(i).qtaOrd){ - tmpList.remove(i); - i--; + if(tmpList.get(i).isHidden() == null || forceHiddenCheck) { + if (tmpList.get(i).getQtaDaEvadere().floatValue() <= 0) { + tmpList.get(i).setHidden(true); + //tmpList.remove(i); + //i--; + } else tmpList.get(i).setHidden(false); + + + tmpList.get(i).setTempHidden(false); } } @@ -129,18 +151,22 @@ public class AccettazioneOrdineInevasoHelper { private class RaggruppaPerCommessaUtilDTO { - public String codJcom; - public String ragSocCom; + public String codJcom = ""; + public String ragSocCom = ""; } - public List> getOrdiniRaggruppatiPerRagSocCommessa(List mDataset) { + public List> getOrdiniRaggruppatiPerRagSocCommessa(List mDataset, boolean forceHiddenCheck) { List commessaList = new ArrayList<>(); - //ragSocList.add(mContext.getText(R.string.stock).toString()); + commessaList.add(new RaggruppaPerCommessaUtilDTO()); for(int i = 0; i < mDataset.size(); i++){ boolean alreadyExists = false; + if(mDataset.get(i).codJcom == null) mDataset.get(i).codJcom = CommonConst.Config.COMMESSA_MAG; + if(mDataset.get(i).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) mDataset.get(i).descrizioneCommessa = mContext.getText(R.string.stock).toString().toUpperCase(); + + for(int k = 0; k < commessaList.size(); k++){ if(commessaList.get(k).codJcom.equalsIgnoreCase(mDataset.get(i).codJcom)){ alreadyExists = true; @@ -150,39 +176,37 @@ public class AccettazioneOrdineInevasoHelper { if(mDataset.get(i).codJcom != null && !alreadyExists){ RaggruppaPerCommessaUtilDTO dto = new RaggruppaPerCommessaUtilDTO(); dto.codJcom = mDataset.get(i).codJcom; - dto.ragSocCom = mDataset.get(i).ragSocCom; + dto.ragSocCom = mDataset.get(i).descrizioneCommessa; commessaList.add(dto); } } - Collections.sort(commessaList, new Comparator() { - public int compare(RaggruppaPerCommessaUtilDTO dto1, RaggruppaPerCommessaUtilDTO dto2) { - if(dto1.ragSocCom == null) return -1; - if(dto2.ragSocCom == null) return 1; + Collections.sort(commessaList, (dto1, dto2) -> { + if(dto1.ragSocCom == null || dto2.codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) return -1; + if(dto2.ragSocCom == null || dto1.codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) return 1; - return dto1.ragSocCom.compareToIgnoreCase(dto2.ragSocCom); - } + return dto1.ragSocCom.compareToIgnoreCase(dto2.ragSocCom); }); List> groupedRighe = new ArrayList<>(); for (RaggruppaPerCommessaUtilDTO dto : commessaList) { - List tmpList = Coollection.from(mDataset) - .where("codJcom", Coollection.eqIgnoreCase(dto.codJcom)).all(); + List tmpList = Stream.of(mDataset).filter(x -> x.getCodJcom().equalsIgnoreCase(dto.codJcom)).toList(); for(int i = 0; i < tmpList.size(); i++){ - if(tmpList.get(i).qtaRiservate >= tmpList.get(i).qtaOrd){ - tmpList.remove(i); - i--; + if(tmpList.get(i).isHidden() == null || forceHiddenCheck) { + if (tmpList.get(i).getQtaDaEvadere().floatValue() <= 0) { + tmpList.get(i).setHidden(true); + //tmpList.remove(i); + //i--; + } else tmpList.get(i).setHidden(false); + + tmpList.get(i).setTempHidden(false); } } - Collections.sort(tmpList, new Comparator() { - public int compare(OrdineAccettazioneDTO.Riga obj1, OrdineAccettazioneDTO.Riga obj2) { - return obj1.mtbAart.descrizioneEstesa.compareToIgnoreCase(obj2.mtbAart.descrizioneEstesa); - } - }); + Collections.sort(tmpList, (obj1, obj2) -> obj1.mtbAart.getDescrizioneEstesa().compareToIgnoreCase(obj2.mtbAart.getDescrizioneEstesa())); if(tmpList.size() > 0){ groupedRighe.add(tmpList); @@ -190,20 +214,14 @@ public class AccettazioneOrdineInevasoHelper { } - //Raggruppo tutti quelli per il magazzino e li aggiungo alla fine - - List tmpList = Coollection.from(mDataset) - .where("ragSocCom", Coollection.eqIgnoreCase("MAG")).all(); - return groupedRighe; } - public List getListViewModelPerArtForn(List> groupedRighe){ + public List getListViewModelPerArtForn(List> groupedRighe, List mtbColrs){ List listModel = new ArrayList<>(); - DecimalFormat decimalFormat = new DecimalFormat("#.#"); for(int i = 0; i < groupedRighe.size(); i++){ AccettazioneOrdineInevasoListViewModel itemModel = new AccettazioneOrdineInevasoListViewModel(); @@ -215,13 +233,16 @@ public class AccettazioneOrdineInevasoHelper { final OrdineAccettazioneDTO.Riga rowItem = groupedRighe.get(i).get(k); final AccettazioneOrdineInevasoListViewModel.SubItem rowModel = new AccettazioneOrdineInevasoListViewModel.SubItem(); - rowModel.badge1 = rowItem.codJcom != null ? rowItem.codJcom : "MAG"; - rowModel.badge2 = String.valueOf(rowItem.numOrd); + rowModel.setBadge1(rowItem.codJcom != null ? rowItem.codJcom : CommonConst.Config.COMMESSA_MAG); + rowModel.setBadge2(String.valueOf(rowItem.numOrd)); - rowModel.descrizione = rowItem.ragSocCom; +// rowModel.descrizione = rowItem.ragSocCom; + rowModel.setDescrizione(rowItem.descrizioneCommessa); - rowModel.qtaRiservata = decimalFormat.format(rowItem.qtaRiservate); - rowModel.qtaOrdinata = decimalFormat.format(rowItem.qtaOrd); + rowModel.setQtaRiservata(getRigaQuantityEvasa(rowItem, mtbColrs)); + rowModel.setQtaOrdinata(rowItem.getQtaOrd()); + + rowModel.setOriginalModel(rowItem); itemModel.rows.add(rowModel); } @@ -232,17 +253,20 @@ public class AccettazioneOrdineInevasoHelper { } - public List getListViewModelPerRagSocCommessa(List> groupedRighe) { + public List getListViewModelPerRagSocCommessa(List> groupedRighe, List mtbColrs) { List listModel = new ArrayList<>(); - DecimalFormat decimalFormat = new DecimalFormat("#.#"); for(int i = 0; i < groupedRighe.size(); i++){ AccettazioneOrdineInevasoListViewModel itemModel = new AccettazioneOrdineInevasoListViewModel(); - itemModel.descrizioneGroup = groupedRighe.get(i).get(0).codJcom; + if(groupedRighe.get(i).get(0).codJcom.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)){ + itemModel.descrizioneGroup = mContext.getString(R.string.warehouse).toUpperCase(); + } else { + itemModel.descrizioneGroup = groupedRighe.get(i).get(0).codJcom; + } if(groupedRighe.get(i).get(0).ragSocCom != null && groupedRighe.get(i).get(0).ragSocCom.trim().length() > 0){ - itemModel.descrizioneGroup += " - " + groupedRighe.get(i).get(0).ragSocCom; + itemModel.descrizioneGroup += " - " + groupedRighe.get(i).get(0).descrizioneCommessa; } itemModel.rows = new ArrayList<>(); @@ -251,13 +275,16 @@ public class AccettazioneOrdineInevasoHelper { final OrdineAccettazioneDTO.Riga rowItem = groupedRighe.get(i).get(k); final AccettazioneOrdineInevasoListViewModel.SubItem rowModel = new AccettazioneOrdineInevasoListViewModel.SubItem(); - rowModel.badge1 = rowItem.codArtFor; - rowModel.badge2 = String.valueOf(rowItem.numOrd); + rowModel.setBadge1(rowItem.codArtFor); + rowModel.setBadge2(String.valueOf(rowItem.numOrd)); - rowModel.descrizione = rowItem.mtbAart.descrizioneEstesa; + rowModel.setDescrizione(rowItem.mtbAart.getDescrizioneEstesa()); - rowModel.qtaRiservata = decimalFormat.format(rowItem.qtaRiservate); - rowModel.qtaOrdinata = decimalFormat.format(rowItem.qtaOrd); + rowModel.setQtaRiservata(getRigaQuantityEvasa(rowItem, mtbColrs)); +// rowModel.qtaRiservata = decimalFormat.format(rowItem.qtaRiservate); + rowModel.setQtaOrdinata(rowItem.getQtaOrd()); + + rowModel.setOriginalModel(rowItem); itemModel.rows.add(rowModel); } @@ -266,4 +293,28 @@ public class AccettazioneOrdineInevasoHelper { return listModel; } + + + + private BigDecimal getRigaQuantityEvasa(OrdineAccettazioneDTO.Riga item, List mtbColrs){ + BigDecimal currentQtaEvasa = item.getQtaRiservate().add(item.getQtaEvasa()); + + if(mtbColrs != null) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + + List filteredMtbColrs = Stream.of(mtbColrs).filter( + x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.getCodMart()) && + (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.codJcom)) && + x.getRigaOrd() == item.rigaOrd && + x.getNumOrd() == item.numOrd && + x.getDataOrdS().equals(sdf.format(item.getDataOrd()))).toList(); + + + for (MtbColr mtbColr : filteredMtbColrs) { + currentQtaEvasa = currentQtaEvasa.add(mtbColr.getQtaCol()); + } + } + + return currentQtaEvasa; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java new file mode 100644 index 00000000..91f1ee83 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/IOnOrdineAccettazioneRowDispatchCallback.java @@ -0,0 +1,10 @@ +package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core; + +import it.integry.integrywmsnative.core.REST.model.Ean128Model; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; + +public interface IOnOrdineAccettazioneRowDispatchCallback { + + void onOrdineRowDispatch(OrdineAccettazioneDTO.Riga item, Ean128Model ean128Model); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java index b8634cc9..5b78e721 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/core/MainListOrdineAccettazioneAdapter.java @@ -1,7 +1,10 @@ package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core; import android.content.Context; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableList; import android.graphics.Color; +import android.support.v4.util.Pools; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -9,12 +12,15 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; -import java.text.DecimalFormat; +import com.annimon.stream.Stream; + +import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; -import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneGroupedInevasoDTO; +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.utility.UtilityNumber; +import it.integry.integrywmsnative.core.utility.UtilityString; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoListViewModel; /** @@ -23,23 +29,84 @@ import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.Accettaz public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter { - protected Context mContext; - protected List mDataset; + private Context mContext; + private List mDataset; + private View mEmptyView; + + private ObservableArrayList mObservableDataset; + private IOnOrdineAccettazioneRowDispatchCallback mOrdineRowDispatch; + + private static final Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(200); public static class ViewHolder extends RecyclerView.ViewHolder { // each data item is just a string in this case protected View mGroupTitle; protected LinearLayout mLinearLayoutGroupItemContainer; + + protected List pool = new ArrayList<>(); + public ViewHolder(View v) { super(v); } } - public MainListOrdineAccettazioneAdapter(Context context, List myDataset) { + + public MainListOrdineAccettazioneAdapter(Context context, ObservableArrayList myDataset, View emptyView) { mContext = context; - mDataset = myDataset; + mObservableDataset = myDataset; + mEmptyView = emptyView; + + mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList(); + mObservableDataset.addOnListChangedCallback(onListChangedCallback); + + checkIfEmpty(); } + public void setOnOrdineRowDispatchCallback(IOnOrdineAccettazioneRowDispatchCallback ordineRowDispatch) { + mOrdineRowDispatch = ordineRowDispatch; + } + + private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback>() { + @Override + public void onChanged(ObservableList sender) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + private void refreshNotHiddenElements() { + mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList(); + } + }; + @Override public MainListOrdineAccettazioneAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { @@ -47,14 +114,14 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter
subset = mDataset.get(position).rows; + int visibleElementsCounter = 0; + for(int i = 0; i < subset.size(); i++) { final AccettazioneOrdineInevasoListViewModel.SubItem rowItem = subset.get(i); - View groupModelView = LayoutInflater.from(mContext) - .inflate(R.layout.accettazione_ordine_inevaso_main_list___cod_art_for_group_model, holder.mLinearLayoutGroupItemContainer, false); + if(!rowItem.getOriginalModel().isHidden() && + (rowItem.getOriginalModel().isTempHidden() == null || + (rowItem.getOriginalModel().isTempHidden() != null && !rowItem.getOriginalModel().isTempHidden()))) { - if(i % 2 == 1){ - groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + visibleElementsCounter++; + + View groupModelViewPool = (View) sPool.acquire(); + if (groupModelViewPool == null) { + groupModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.accettazione_ordine_inevaso_main_list___cod_art_for_group_model, holder.mLinearLayoutGroupItemContainer, false); + } + + + View groupModelView = groupModelViewPool; + holder.pool.add(groupModelView); + + if (rowItem.getQtaRiservata().subtract(rowItem.getQtaOrdinata()).floatValue() >= 0 ) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha)); + } else if (rowItem.getQtaRiservata().floatValue() > 0) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha)); + } else if (visibleElementsCounter % 2 == 1) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + } else { + groupModelView.setBackgroundColor(Color.WHITE); + } + + + final TextView badge1 = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge1); + badge1.setText(rowItem.getBadge1()); + + final TextView badge2 = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge2); + badge2.setText(rowItem.getBadge2()); + + + final TextView descrizione = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_descrizione); + + String descrizioneString = rowItem.getDescrizione(); + int descrizioneColor = Color.BLACK; + + if (UtilityString.isNullOrEmpty(descrizioneString)) { + descrizioneString = mContext.getString(R.string.no_description); + descrizioneColor = Color.GRAY; + } else if (descrizioneString.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) { + descrizioneString = mContext.getString(R.string.stock); + } + + descrizione.setText(descrizioneString); + descrizione.setTextColor(descrizioneColor); + + final TextView qtaEvasa = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_evasa); + qtaEvasa.setText(UtilityNumber.decimalToString(rowItem.getQtaRiservata())); + + final TextView qtaTot = groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_tot); + qtaTot.setText(UtilityNumber.decimalToString(rowItem.getQtaOrdinata())); + + + groupModelView.setOnClickListener(view -> { + if (mOrdineRowDispatch != null) { + mOrdineRowDispatch.onOrdineRowDispatch(rowItem.getOriginalModel(), null); + } + }); + + holder.mLinearLayoutGroupItemContainer.addView(groupModelView); } - - - final TextView badge1 = (TextView) groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge1); - badge1.setText(rowItem.badge1); - - final TextView badge2 = (TextView) groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_badge2); - badge2.setText(rowItem.badge2); - - - final TextView descrizione = (TextView) groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_descrizione); - - String descrizioneString = rowItem.descrizione; - int descrizioneColor = Color.BLACK; - - if(descrizioneString == null || descrizioneString.trim().length() == 0) { - descrizioneString = mContext.getString(R.string.no_description); - descrizioneColor = Color.GRAY; - } else if(descrizioneString.equalsIgnoreCase("MAG")){ - descrizioneString = mContext.getString(R.string.stock); - } - - descrizione.setText(descrizioneString); - descrizione.setTextColor(descrizioneColor); - - final TextView qtaEvasa = (TextView) groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_evasa); - qtaEvasa.setText(rowItem.qtaRiservata); - - final TextView qtaTot = (TextView) groupModelView.findViewById(R.id.accettazione_ordine_inevaso_main_list_group_item_qta_tot); - qtaTot.setText(rowItem.qtaOrdinata); - - - holder.mLinearLayoutGroupItemContainer.addView(groupModelView); - } } + @Override + public void onViewRecycled(MainListOrdineAccettazioneAdapter.ViewHolder holder){ + if(holder != null){ + for(int i = 0; i < holder.pool.size(); i++){ + ((ViewGroup) holder.pool.get(i).getParent()).removeView(holder.pool.get(i)); + sPool.release(holder.pool.get(i)); + } + + holder.pool.clear(); + } + + super.onViewRecycled(holder); + } + // Return the size of your dataset (invoked by the layout manager) @@ -125,4 +233,13 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter
rows; + public boolean isHidden(){ + if(rows == null || rows.size() == 0) return true; + return Stream.of(rows).filter( + x -> (x.originalModel.isHidden() != null && !x.originalModel.isHidden()) && + (x.originalModel.isTempHidden() != null && !x.originalModel.isTempHidden())).count() == 0; + } + public static class SubItem { - public String badge1; - public String badge2; + private String badge1; + private String badge2; - public String descrizione; - public String qtaRiservata; - public String qtaOrdinata; + private String descrizione; + private BigDecimal qtaRiservata; + private BigDecimal qtaOrdinata; + private OrdineAccettazioneDTO.Riga originalModel; + + public String getBadge1() { + return badge1; + } + + public SubItem setBadge1(String badge1) { + this.badge1 = badge1; + return this; + } + + public String getBadge2() { + return badge2; + } + + public SubItem setBadge2(String badge2) { + this.badge2 = badge2; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public SubItem setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public BigDecimal getQtaRiservata() { + return qtaRiservata; + } + + public SubItem setQtaRiservata(BigDecimal qtaRiservata) { + this.qtaRiservata = qtaRiservata; + return this; + } + + public BigDecimal getQtaOrdinata() { + return qtaOrdinata; + } + + public SubItem setQtaOrdinata(BigDecimal qtaOrdinata) { + this.qtaOrdinata = qtaOrdinata; + return this; + } + + public OrdineAccettazioneDTO.Riga getOriginalModel() { + return originalModel; + } + + public SubItem setOriginalModel(OrdineAccettazioneDTO.Riga originalModel) { + this.originalModel = originalModel; + return this; + } } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoOrderBy.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoOrderBy.java index 858fcad8..1681de70 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoOrderBy.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/dto/AccettazioneOrdineInevasoOrderBy.java @@ -9,7 +9,7 @@ public class AccettazioneOrdineInevasoOrderBy { public static String[] descriptions = new String[] { "Cod articolo fornitore", "Descrizione articolo", - "Ragione sociale commessa" + "Commessa - Articolo" }; public enum Enum { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/rest/OrdineAccettazioneInevasoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/rest/OrdineAccettazioneInevasoRESTConsumerService.java new file mode 100644 index 00000000..fc5e31bf --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/rest/OrdineAccettazioneInevasoRESTConsumerService.java @@ -0,0 +1,77 @@ +package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.rest; + +import android.text.TextUtils; + +import com.annimon.stream.Stream; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +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.model.MtbColt; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; + +public class OrdineAccettazioneInevasoRESTConsumerService { + + public static void getBancaliGiaRegistrati(List ordiniToShow, RunnableArgs> onComplete, RunnableArgs onFailed) throws Exception { + + List colliWhereCond = new ArrayList<>(); + + + Stream.of(ordiniToShow).forEach(x -> { + try { + Date date = UtilityDate.recognizeDate(x.data); + String dateString = UtilityDate.formatDate(date, "yyyy/MM/dd"); + + if (!colliWhereCond.contains(x.gestione + " " + dateString + " " + x.numero)) { + colliWhereCond.add(x.gestione + " " + dateString + " " + x.numero); + } + } catch (Exception ex){ + UtilityLogger.errorMe(ex); + } + }); + + + String colliINCondition = ""; + + for(int i = 0; i < colliWhereCond.size(); i ++){ + colliINCondition += "'" + colliWhereCond.get(i) + "'"; + + if(i < (colliWhereCond.size()-1)) colliINCondition += ","; + } + + + + String sql = "select distinct mtb_colt.* " + + "from mtb_colt, mtb_colr " + + "where mtb_colt.gestione = mtb_colr.gestione and " + + "mtb_colt.ser_collo = mtb_colr.ser_collo and " + + "mtb_colt.data_collo = mtb_colr.data_collo and " + + "mtb_colt.num_collo = mtb_colr.num_collo AND " + + "mtb_colt.gestione + ' ' + convert(varchar(15), mtb_colr.data_ord, 111) + ' ' + convert(varchar, mtb_colr.num_ord) IN (" + colliINCondition + + ") and mtb_colt.data_doc is null "; + + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java new file mode 100644 index 00000000..7b138bfb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/viewmodel/AccettazioneOnOrdineAccettazioneInevasoViewModel.java @@ -0,0 +1,802 @@ +package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel; + +import android.app.ProgressDialog; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableField; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.LinearLayoutManager; +import android.text.SpannableString; + +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.REST.consumers.ArticoloRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.GestSetupRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.REST.model.Ean128Model; +import it.integry.integrywmsnative.core.REST.model.Ean13PesoModel; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.report.ReportManager; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.AccettazioneOrdineInevasoHelper; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.IOnOrdineAccettazioneRowDispatchCallback; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.MainListOrdineAccettazioneAdapter; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoOrderBy; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.rest.OrdineAccettazioneInevasoRESTConsumerService; +import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.views.NoteAggiuntiveNuovaULDialog; +import it.integry.integrywmsnative.ui.StatusBarAlert; +import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback; +import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; +import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeType; + +import static br.com.zbra.androidlinq.Linq.stream; + +public class AccettazioneOnOrdineAccettazioneInevasoViewModel implements IOnColloClosedCallback, IOnOrdineAccettazioneRowDispatchCallback { + + public ObservableField isFabVisible = new ObservableField<>(); + + private AccettazioneOrdineInevasoActivity mActivity; + private final ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel; + private final List mOrders; + + private List> groupedRighe; + private List groupedOrdini; + + private AccettazioneOrdineInevasoHelper helper; + + private AccettazioneOrdineInevasoOrderBy.Enum currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR; + private MainListOrdineAccettazioneAdapter mAdapter; + + public AccettazioneOnOrdineAccettazioneInevasoViewModel(AccettazioneOrdineInevasoActivity activity, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List orders) { + this.mActivity = activity; + this.mArticoliInColloBottomSheetViewModel = articoliInColloBottomSheetViewModel; + this.mOrders = orders; + + this.isFabVisible.set(true); + + this.mActivity.bindings.setVariable(BR.viewmodel, this); + + this.init(); + } + + private void init(){ + mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this); + mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(() -> this.refreshOrderBy(false)); + mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(() -> this.refreshOrderBy(false)); + + groupedOrdini = new ArrayList<>(); + for (OrdineAccettazioneDTO ordine : mOrders){ + groupedOrdini.addAll(ordine.ordini); + } + + helper = new AccettazioneOrdineInevasoHelper(mActivity); + + groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini, true); + + initRecyclerView(groupedRighe); + } + + + private void initRecyclerView(List> groupedRighe){ + //RecyclerView setup + mActivity.bindings.accettazioneOrdineMainList.setHasFixedSize(true); + + mActivity.bindings.accettazioneOrdineMainList.setLayoutManager(new LinearLayoutManager(mActivity)); + + mAdapter = helper.getRightListAdapter(mActivity.bindings.accettazioneEmptyView); + + try { + helper.updateListModel(AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR, groupedRighe, null); + } catch (Exception e) { + UtilityExceptions.defaultException(mActivity, e); + } + + mAdapter.setOnOrdineRowDispatchCallback(this); + mActivity.bindings.accettazioneOrdineMainList.setAdapter(mAdapter); + } + + public void refreshOrderBy(boolean forceHiddenCheck){ + switch (currentOrderBy){ + case COD_ART_FOR: + groupedRighe = helper.getOrdiniRaggruppatiPerCodArtForn(groupedOrdini, forceHiddenCheck); + break; + case DESCR_ART: + groupedRighe = helper.getOrdiniRaggruppatiPerDescrArt(groupedOrdini, forceHiddenCheck); + break; + + case RAG_SOC_COM: + groupedRighe = helper.getOrdiniRaggruppatiPerRagSocCommessa(groupedOrdini, forceHiddenCheck); + break; + + default: + break; + } + + try { + List mtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get() != null ? mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr() : null; + + helper.updateListModel(currentOrderBy, groupedRighe, mtbColrs); + } catch (Exception e) { + UtilityExceptions.defaultException(mActivity, e); + } + } + + public void applyFilter(String descriptionText) { + + mActivity.bindings.filteredArtsInListExpandableLayout.expand(true); + + mActivity.bindings.descriptionFilterText.setText(descriptionText); + } + + public void removeListFilter() { + for(int i = 0; i < groupedOrdini.size(); i++) { + groupedOrdini.get(i).setTempHidden(false); + } + + refreshOrderBy(false); + mActivity.bindings.filteredArtsInListExpandableLayout.collapse(true); + } + + public void recoverUL(MtbColt recoveredMtbColt){ + + for(int i = 0; i < recoveredMtbColt.getMtbColr().size(); i++){ + + MtbColr currentMtbColr = recoveredMtbColt.getMtbColr().get(i); + + List foundRows = Stream.of(groupedOrdini) + .filter(x -> x.getNumOrd() == currentMtbColr.getNumOrd() && + x.getRigaOrd() == currentMtbColr.getRigaOrd()&& + x.getDataOrd().equals(currentMtbColr.getDataOrdD())) + .toList(); + + if(foundRows != null && foundRows.size() > 0){ + OrdineAccettazioneDTO.Riga currentRow = foundRows.get(0); + + currentRow.setHidden(false); + currentRow.setQtaRiservate(currentRow.getQtaRiservate().subtract(currentMtbColr.getQtaCol())); + } + + } + + + setULToCurrentContext(recoveredMtbColt); + refreshOrderBy(false); + } + + + + + public RunnableArgs onScanSuccessfull = data -> { + + ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity); + progressDialog.show(); + + BarcodeManager.disable(); + + if(UtilityBarcode.isEtichettaAnonima(data) && !thereIsAnOpenedUL()){ + this.executeEtichettaAnonima(data, progressDialog); + } else if(UtilityBarcode.isEtichetta128(data)) { + this.executeEtichettaEan128(data, progressDialog); + } else if(UtilityBarcode.isEanPeso(data)){ + this.executeEtichettaEanPeso(data, progressDialog); + } else { + this.loadArticolo(data.getStringValue(), null, progressDialog); + } + + }; + + + private void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + ColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), false, false, mtbColt -> { + + if(mtbColt == null) { + this.createNewUL(UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()), CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, progressDialog, true, null); + BarcodeManager.enable(); + } else { + progressDialog.dismiss(); + BarcodeManager.enable(); + DialogSimpleMessageHelper.makeWarningDialog(mActivity, + new SpannableString(mActivity.getResources().getText(R.string.already_used_anonymous_barcode)), + null, null).show(); + } + + }, ex -> { + UtilityExceptions.defaultException(mActivity, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + BarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { + + String barcodeProd = null; + + if(ean128Model.Sscc != null) barcodeProd = ean128Model.Sscc; + if(ean128Model.Gtin != null) barcodeProd = ean128Model.Gtin; + if(ean128Model.Content != null) barcodeProd = ean128Model.Content; + + + if(!UtilityString.isNullOrEmpty(barcodeProd)) { + if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) { + barcodeProd = barcodeProd.substring(1, barcodeProd.length()); + } + this.loadArticolo(barcodeProd, ean128Model, progressDialog); + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + progressDialog.dismiss(); + BarcodeManager.enable(); + } + }, ex-> { + UtilityExceptions.defaultException(mActivity, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + + try { + Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); + + this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128(), progressDialog); + } catch (Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progressDialog); + BarcodeManager.enable(); + } + } + + + + private void loadArticolo(String barcodeProd, Ean128Model ean128Model, ProgressDialog progressDialog) { + if(barcodeProd.length() == 14) { +// barcodeProd = UtilityBarcode.convertITF14toNeutral(barcodeProd); + barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); + } + + ArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { + + if(mtbAartList != null && mtbAartList.size() > 0) { + + if(!thereIsAnOpenedUL()){ + + this.createNewUL(null, null, progressDialog, false, () -> { + BarcodeManager.enable(); + this.searchArtInList(mtbAartList.get(0), ean128Model); + }); + + } else { + this.searchArtInList(mtbAartList.get(0), ean128Model); + + BarcodeManager.enable(); + progressDialog.dismiss(); + } + + } else { + BarcodeManager.enable(); + progressDialog.dismiss(); + + DialogSimpleMessageHelper.makeWarningDialog(mActivity, + new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)), + null, null) + .show(); + } + + }, ex -> { + BarcodeManager.enable(); + UtilityExceptions.defaultException(mActivity, ex, progressDialog); + }); + } + + private void searchArtInList(MtbAart mtbAart, Ean128Model ean128Model) { + removeListFilter(); + + List foundRowsList = Stream.of(groupedOrdini) + .filter(x -> x.getMtbAart().getCodMart().equalsIgnoreCase(mtbAart.getCodMart()) && + (x.isHidden() != null && !x.isHidden()) && (x.isTempHidden() != null && !x.isTempHidden())) + .toList(); + + if(foundRowsList.size() == 0) { + showNoArtFoundDialog(); + } else if(foundRowsList.size() == 1) { + onOrdineRowDispatch(foundRowsList.get(0), ean128Model); + } else { + for(int i = 0; i < groupedOrdini.size(); i++) { + if(!foundRowsList.contains(groupedOrdini.get(i))) { + groupedOrdini.get(i).setTempHidden(true); + } + } + + applyFilter("COD: " + mtbAart.getCodMart()); + refreshOrderBy(false); + } + } + + + private void showNoArtFoundDialog() { + DialogSimpleMessageHelper.makeWarningDialog(mActivity, + new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)), + null, null).show(); + } + + public void showOrderDialog() { + + AlertDialog dialog = new AlertDialog.Builder(mActivity) + .setTitle(mActivity.getText(R.string.action_orderBy)) + .setSingleChoiceItems(AccettazioneOrdineInevasoOrderBy.descriptions, currentOrderBy.getVal(), (dialog12, which) -> currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.fromInt(which)) + .setPositiveButton("Ok", (dialog1, which) -> refreshOrderBy(false)) + .create(); + dialog.show(); + } + + + public void createNewUL() { + this.createNewUL(null, null, null, false, null); + } + + public void createNewUL(Integer customNumCollo, String customSerCollo, ProgressDialog progress, boolean disablePrint, Runnable onComplete) { + + mActivity.bindings.accettazioneOrdineInevasoFab.close(true); + + if (progress == null){ + progress = UtilityProgress.createDefaultProgressDialog(mActivity); + } + + ProgressDialog finalProgress = progress; + NoteAggiuntiveNuovaULDialog.show(mActivity, new NoteAggiuntiveNuovaULDialog.Callback() { + @Override + public void onSuccess(String noteString) { + + //Add loading dialog here + finalProgress.show(); + + GestSetupRESTConsumer.getValue("PICKING", "SETUP", "DEFAULT_POSIZIONE_COLLI_ACCETTAZIONE", defaultPosAccettazioneDTO -> { + + String defaultPosAccettazione = ""; + if(defaultPosAccettazioneDTO != null && !UtilityString.isNullOrEmpty(defaultPosAccettazioneDTO.value)) defaultPosAccettazione = defaultPosAccettazioneDTO.value; + + MtbColt mtbColt = new MtbColt(); + mtbColt .setGestione(GestioneEnum.ACQUISTO) + .setPreparatoDa(SettingsManager.i().user.fullname) + .setAnnotazioni(noteString) + .setPosizione(defaultPosAccettazione) + .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + if(customNumCollo != null) { + mtbColt.setNumCollo(customNumCollo); + } + + if(!UtilityString.isNullOrEmpty(customSerCollo)) { + mtbColt.setSerCollo(customSerCollo); + } + + List codAnags = + stream(mOrders) + .select(c -> c.codAnag) + .distinct() + .toList(); + + if(codAnags != null && codAnags.size() == 1){ + mtbColt.setCodAnag(codAnags.get(0)); + } + + List rifOrds = + stream(mOrders) + .select(c -> c.rifOrd) + .distinct() + .toList(); + + if(rifOrds != null && rifOrds.size() == 1){ + mtbColt.setRifOrd(rifOrds.get(0)); + } + + List numDataOrds = + stream(mOrders) + .select(value -> ("" + value.numero) + value.data) + .distinct() + .toList(); + + if(numDataOrds != null && numDataOrds.size() == 1){ + mtbColt.setNumOrd(mOrders.get(0).numero); + mtbColt.setDataOrd(mOrders.get(0).data); + + try { + mtbColt.generaFiltroOrdine(); + } catch (Exception ex) { + DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString(ex.getMessage()), null, null).show(); + return; + } + } + + + ColliMagazzinoRESTConsumer.saveCollo(mtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + + value + .setDisablePrint(disablePrint) + .setMtbColr(new ObservableArrayList<>()); + + value.setMtbCols(null); + + setULToCurrentContext(value); + + finalProgress.dismiss(); + + new StatusBarAlert.Builder(mActivity) + .autoHide(true) + .withDuration(2500) + .showProgress(false) + .withText(R.string.data_saved) + .withAlertColor(R.color.mainGreen) + .build(); + + if(onComplete != null) onComplete.run(); + + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, finalProgress); + } + }); + }, ex -> UtilityExceptions.defaultException(mActivity, ex, finalProgress)); + + + + } + + @Override + public void onAbort() { + finalProgress.dismiss(); + } + }); + + + } + + + private void setULToCurrentContext(MtbColt mtbColt){ + isFabVisible.set(false); + mArticoliInColloBottomSheetViewModel.mtbColt.set(mtbColt); + } + + //Al click di "Mostra UL già create" + public void showCreatedUL() { + + final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), + mActivity.getText(R.string.loading) + " ...", true); + + + mActivity.bindings.accettazioneOrdineInevasoFab.close(false); + + try { + OrdineAccettazioneInevasoRESTConsumerService.getBancaliGiaRegistrati(mOrders, mtbColts -> { + + progress.dismiss(); + + mActivity.startListaBancaliRegistratiActivity((ArrayList) mtbColts); + + }, ex -> UtilityExceptions.defaultException(mActivity, ex, progress)); + } catch (Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + + } + + @Override + public void onColloClosed() { + if(thereIsAnOpenedUL()) { + + final ProgressDialog progress = UtilityProgress.createDefaultProgressDialog(mActivity); + progress.show(); + + if(thereIsAnyRowInUL()) { + updateDataFine(progress, () -> printCollo(progress)); + } else { + deleteCollo(progress); + } + + } + + } + + private void updateDataFine(ProgressDialog progress, Runnable onComplete) { + + MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + cloneMtbColt.setOraFinePrep(new Date()); + + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); + + } + + private void printCollo(ProgressDialog progress) { + MtbColt currentMtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); + + if(currentMtbColt.getDisablePrint() != null && currentMtbColt.getDisablePrint()){ + postCloseOperations(); + progress.dismiss(); + return; + } + + PrinterRESTConsumer.getAvailablePrinters(SettingsManager.i().userSession.depo.getCodMdep(), new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + + if(value.size() > 0) { + try{ + + + ReportManager.getRightReportNameByMtbColt(currentMtbColt, reportName -> { + + PrinterRESTConsumer.printCollo( + value.get(0), + currentMtbColt, + 1, reportName, () -> { + + postCloseOperations(); + progress.dismiss(); + + }, ex -> { + + progress.dismiss(); + String errorMessage = ex.getMessage(); + DialogSimpleMessageHelper.makeErrorDialog( + mActivity, + new SpannableString(errorMessage), + null, + null, + R.string.button_ignore_print, + () -> postCloseOperations()).show(); + }); + + }, ex -> UtilityExceptions.defaultException(mActivity, ex, progress) + ); + } catch (Exception ex){ + UtilityExceptions.defaultException(mActivity, ex, progress); + } + } else { + + mArticoliInColloBottomSheetViewModel.mtbColt.set(null); + isFabVisible.set(true); + + progress.dismiss(); + String errorMessage = "Nessuna stampante configurata"; + DialogSimpleMessageHelper.makeWarningDialog(mActivity, new SpannableString(errorMessage), null, null).show(); + } + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); + } + + + private void deleteCollo(ProgressDialog progress) { + + ColliMagazzinoRESTConsumer.deleteCollo(mArticoliInColloBottomSheetViewModel.mtbColt.get(), () -> { + mArticoliInColloBottomSheetViewModel.mtbColt.set(null); + + isFabVisible.set(true); + + progress.dismiss(); + }, ex -> UtilityExceptions.defaultException(mActivity, ex, progress) + ); + } + + + public boolean thereIsAnOpenedUL() { + return mArticoliInColloBottomSheetViewModel.mtbColt.get() != null; + } + public boolean thereIsAnyRowInUL() { + return mArticoliInColloBottomSheetViewModel.mtbColt.get() != null && + mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr() != null && + mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().size() > 0; + } + + + + private void postCloseOperations() { + + MtbColt mtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); + + mArticoliInColloBottomSheetViewModel.mtbColt.set(null); + isFabVisible.set(true); + + if(mtbColt != null && mtbColt.getMtbColr() != null) { + for (int i = 0; i < mtbColt.getMtbColr().size(); i++) { + + MtbColr currentRow = mtbColt.getMtbColr().get(i); + + Stream.of(this.groupedOrdini) + .filter(x -> + x.getQtaDaEvadere().floatValue() > 0 && + x.getMtbAart().getCodMart().equalsIgnoreCase(currentRow.getCodMart()) && + x.getCodJcom().equalsIgnoreCase(currentRow.getCodJcom()) && + x.getRigaOrd() == currentRow.getRigaOrd() && + x.getDataOrd().equals(currentRow.getDataOrdD()) && + x.getNumOrd() == currentRow.getNumOrd() + ) + .forEach(x -> x.setQtaRiservate(x.getQtaRiservate().add(currentRow.getQtaCol()))); + + } + } + + removeListFilter(); + refreshOrderBy(true); + + } + + @Override + public void onOrdineRowDispatch(final OrdineAccettazioneDTO.Riga item, Ean128Model ean128Model) { + if(mArticoliInColloBottomSheetViewModel.mtbColt.get() != null){ + + List currentMtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr(); + + List filteredMtbColrs = Stream.of(currentMtbColrs).filter( + x -> x.getCodMart().equalsIgnoreCase(item.mtbAart.getCodMart()) && + x.getNumOrd() == item.numOrd && + (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.codJcom)) && + x.getRigaOrd() == item.rigaOrd).toList(); + + float qtaEvasaInMtbColr = 0; + for (MtbColr mtbColr : filteredMtbColrs) { + qtaEvasaInMtbColr += mtbColr.getQtaCol().floatValue(); + } + + float qtaEvasa = item.qtaRiservate + qtaEvasaInMtbColr; + + BigDecimal qtaDaEvadere = item.getQtaOrd().subtract(new BigDecimal(qtaEvasa)).subtract(item.getQtaEvasa()); + + DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() + .setBatchLot(item.getPartitaMag()) + .setCodArtFor(item.getCodArtFor()) + .setMtbAart(item.getMtbAart()) + .setQtaOrd(item.getQtaOrd()) + .setQtaDaEvadere(qtaDaEvadere) + .setQtaEvasa(new BigDecimal(qtaEvasa)) + .setCanPartitaMagBeChanged(true); + + if(ean128Model != null){ + if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) { + dto.setBatchLot(ean128Model.BatchLot); + } + + try { + if(!UtilityString.isNullOrEmpty(ean128Model.BestBefore)){ + dto.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore)); + } else if(!UtilityString.isNullOrEmpty(ean128Model.Expiry)) { + dto.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry)); + } + + } catch (Exception e) { + UtilityLogger.errorMe(e); + } + + + if(ean128Model.Count != null && ean128Model.Count > 0) { + //if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + dto.setNumCnf(ean128Model.Count); + //} else { + // dto.setQtaTot(new BigDecimal(ean128Model.Count)); + //} + } + + if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) { + dto.setQtaTot(new BigDecimal(ean128Model.NetWeightKg)); + } + + if(dto.getQtaTot() != null && dto.getQtaTot().floatValue() > 0 && dto.getNumCnf() != null && dto.getNumCnf() > 0) { + dto.setQtaCnf(dto.getQtaTot().divide(new BigDecimal(dto.getNumCnf()))); + } + + dto.setCanPartitaMagBeChanged(false); + dto.setCanDataScadBeChanged(false); + dto.setShouldAskDataScad(true); + } + + DialogInputQuantity.makeBase(mActivity, dto, true, value -> onOrdineRowDispatched(item, value)).show(); + } + } + + private void onOrdineRowDispatched(OrdineAccettazioneDTO.Riga item, QuantityDTO quantityDTO){ + + final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), + mActivity.getText(R.string.loading) + " ...", true); + + final MtbColr mtbColr = new MtbColr() + .setCodMart(item.mtbAart.getCodMart()) + .setPartitaMag(quantityDTO.batchLot.get()) + .setDataScadPartita(quantityDTO.expireDate) + .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) + .setDescrizione(item.descrizioneEstesa) + .setNumOrd(item.numOrd) + .setDataOrd(item.getDataOrd()) + .setCodJcom(item.codJcom) + .setRigaOrd(item.rigaOrd); + + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + + cloneMtbColt.setMtbColr(new ObservableArrayList()); + cloneMtbColt.getMtbColr().add(mtbColr); + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(0).getRiga()) + .setUntMis(item.getMtbAart().getUntMis()) + .setMtbAart(item.getMtbAart()); + + //item.setQtaRiservate(item.getQtaRiservate().add(mtbColr.getQtaCol())); + + mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().add(mtbColr); + refreshOrderBy(false); + + new StatusBarAlert.Builder(mActivity) + .autoHide(true) + .withDuration(2500) + .showProgress(false) + .withText(R.string.data_saved) + .withAlertColor(R.color.mainGreen) + .build(); + + progress.dismiss(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/views/NoteAggiuntiveNuovaULDialog.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/views/NoteAggiuntiveNuovaULDialog.java new file mode 100644 index 00000000..e5fa8788 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_ordine_inevaso/views/NoteAggiuntiveNuovaULDialog.java @@ -0,0 +1,59 @@ +package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.views; + +import android.content.Context; +import android.support.design.widget.TextInputEditText; +import android.support.v7.app.AlertDialog; +import android.view.ViewGroup; +import android.widget.RelativeLayout; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityDimension; + +public class NoteAggiuntiveNuovaULDialog { + + public interface Callback { + void onSuccess(String noteString); + void onAbort(); + } + + + public static void show(Context mContext, final Callback callback){ + + RelativeLayout relativeLayout = new RelativeLayout(mContext); + + relativeLayout.setLayoutParams( + new RelativeLayout.LayoutParams( + RelativeLayout.LayoutParams.MATCH_PARENT, + RelativeLayout.LayoutParams.MATCH_PARENT)); + + relativeLayout.setPadding(UtilityDimension.convertSizeToDP(mContext, 22), + UtilityDimension.convertSizeToDP(mContext, 8), + UtilityDimension.convertSizeToDP(mContext, 24), + 0); + + final TextInputEditText mTextInputEditText = new TextInputEditText(mContext); + mTextInputEditText.setHint(R.string.hint_additional_notes); + + ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + + mTextInputEditText.setLayoutParams(layoutParams); + + relativeLayout.addView(mTextInputEditText); + + AlertDialog dialog = new AlertDialog.Builder(mContext) + .setTitle(mContext.getText(R.string.action_create_ul)) + .setMessage(R.string.dialog_message_additional_notes) + + .setCancelable(false) + + .setView(relativeLayout) + + .setPositiveButton(R.string.confirm, (dialog1, which) -> callback.onSuccess(mTextInputEditText.getText().toString())) + .setNegativeButton(R.string.abort, (dialogInterface, i) -> callback.onAbort()) + .create(); + dialog.show(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleActivity.java new file mode 100644 index 00000000..7433436c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ContenutoBancaleActivity.java @@ -0,0 +1,51 @@ +package it.integry.integrywmsnative.gest.contenuto_bancale; + +import android.content.Intent; +import android.databinding.DataBindingUtil; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.databinding.ActivityContenutoBancaleBinding; +import it.integry.integrywmsnative.gest.contenuto_bancale.viewmodel.ContenutoBancaleViewModel; + +import static it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity.Key.CanRecoverUL; + +public class ContenutoBancaleActivity extends AppCompatActivity { + + public ActivityContenutoBancaleBinding bindings; + + private ContenutoBancaleViewModel mViewModel; + + public static class Key { + public static final String CanRecoverUL = "canRecoverUL"; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + bindings = DataBindingUtil.setContentView(this, R.layout.activity_contenuto_bancale); + + boolean canRecoverUL = getIntent().getBooleanExtra(CanRecoverUL, false); + MtbColt mtbColt = getIntent().getParcelableExtra("key"); + mViewModel = new ContenutoBancaleViewModel(this, mtbColt, canRecoverUL); + + bindings.waterfallToolbar.setNestedScrollView(bindings.scrollView); + + setSupportActionBar(this.bindings.toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + } + + + + @Override + public boolean onSupportNavigateUp() { + onBackPressed(); + return true; + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/core/ContenutoBancaleListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/core/ContenutoBancaleListAdapter.java new file mode 100644 index 00000000..2671d178 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/core/ContenutoBancaleListAdapter.java @@ -0,0 +1,108 @@ +package it.integry.integrywmsnative.gest.contenuto_bancale.core; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableList; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.databinding.ListaContenutoBancaleListModelBinding; + +public class ContenutoBancaleListAdapter extends RecyclerView.Adapter { + + + protected Context mContext; + protected ObservableArrayList mDataset; + + private IRecyclerItemClicked mOnItemClickListener; + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected ListaContenutoBancaleListModelBinding mViewDataBinding; + + + public ViewHolder(ListaContenutoBancaleListModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbColr mtbColr) { + mViewDataBinding.setMtbColr(mtbColr); + mViewDataBinding.executePendingBindings(); + } + } + + + public ContenutoBancaleListAdapter(Context context, ObservableArrayList myDataset, IRecyclerItemClicked onItemClickListener) { + mContext = context; + mDataset = myDataset; + mOnItemClickListener = onItemClickListener; + + myDataset.addOnListChangedCallback(onListChangedCallback); + } + + @Override + public ContenutoBancaleListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + ListaContenutoBancaleListModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.lista_contenuto_bancale_list_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(ContenutoBancaleListAdapter.ViewHolder holder, int position) { + MtbColr item = mDataset.get(position); + holder.bind(item); + + holder.mViewDataBinding.getRoot().setOnClickListener(x -> { + if(mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(item, position); + } + }); + } + + @Override + public void onViewRecycled(ContenutoBancaleListAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + + private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback>(){ + + @Override + public void onChanged(ObservableList sender) { + notifyDataSetChanged(); + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + notifyDataSetChanged(); + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + } + }; + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ui/ContenutoBancaleBottomPanel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ui/ContenutoBancaleBottomPanel.java new file mode 100644 index 00000000..5f2ab4bb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/ui/ContenutoBancaleBottomPanel.java @@ -0,0 +1,31 @@ +package it.integry.integrywmsnative.gest.contenuto_bancale.ui; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.andrefrsousa.superbottomsheet.SuperBottomSheetFragment; + +import it.integry.integrywmsnative.R; + +public class ContenutoBancaleBottomPanel extends SuperBottomSheetFragment { + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + return inflater.inflate(R.layout.fragment_contenuto_bancale, container, false); + } + + public float getCornerRadius() { + if(getContext() != null) return getContext().getResources().getDimension(R.dimen.bottom_sheet_round16); + return 0; + } + + @Override + public int getStatusBarColor() { + return Color.RED; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java new file mode 100644 index 00000000..56ecc53a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contenuto_bancale/viewmodel/ContenutoBancaleViewModel.java @@ -0,0 +1,144 @@ +package it.integry.integrywmsnative.gest.contenuto_bancale.viewmodel; + +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.Intent; +import android.content.res.Resources; +import android.databinding.ObservableField; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.LinearLayoutManager; +import android.text.SpannableString; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.DepositoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.di.BindableString; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.report.ReportManager; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; +import it.integry.integrywmsnative.gest.contenuto_bancale.core.ContenutoBancaleListAdapter; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; + +import static android.app.Activity.RESULT_OK; + +public class ContenutoBancaleViewModel implements IRecyclerItemClicked { + + private ContenutoBancaleActivity mContext; + + public ObservableField mtbColt; + public BindableString descrizioneDepo = new BindableString(); + + public ObservableField isFabVisible = new ObservableField<>(); + public ObservableField isRecoverFabMenuVisible = new ObservableField<>(); + + private ContenutoBancaleListAdapter mAdapter; + + public ContenutoBancaleViewModel(ContenutoBancaleActivity context, MtbColt mtbColt, boolean canRecoverUL){ + mContext = context; + this.mtbColt = new ObservableField<>(mtbColt); + this.isFabVisible.set(true); + this.isRecoverFabMenuVisible.set(canRecoverUL); + + mContext.bindings.setViewModel(this); + + initRecyclerView(); + + initColloInfo(); + } + + + private void initRecyclerView() { + mContext.bindings.contenutoBancaleMainList.setNestedScrollingEnabled(false); + + mContext.bindings.contenutoBancaleMainList.setHasFixedSize(true); + + mContext.bindings.contenutoBancaleMainList.setLayoutManager(new LinearLayoutManager(mContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); + mContext.bindings.contenutoBancaleMainList.addItemDecoration(itemDecorator); + + mAdapter = new ContenutoBancaleListAdapter(mContext, mtbColt.get().getMtbColr(), this); + mContext.bindings.contenutoBancaleMainList.setAdapter(mAdapter); + } + + + private void initColloInfo() { + DepositoRESTConsumer.getDepoByCodMdep(mtbColt.get().getCodMdep(), depo -> { + descrizioneDepo.set("(" + depo.getDescrizione() + ")"); + }); + } + + @Override + public void onItemClick(MtbColr item, int position) { + } + + + + public void recoverUL(){ + Intent data = new Intent(); + data.putExtra("key", mtbColt.get()); + + mContext.setResult(RESULT_OK, data); + mContext.finish(); + } + + + public void printUL() { + mContext.bindings.contenutoBancaleFab.close(true); + + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + PrinterRESTConsumer.getAvailablePrinters(SettingsManager.i().userSession.depo.getCodMdep(), new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + + if(value.size() > 0) { + + try { + ReportManager.getRightReportNameByMtbColt(mtbColt.get(), reportName -> { + + PrinterRESTConsumer.printCollo(value.get(0), + mtbColt.get(), + 1, + reportName, + () -> { + progress.dismiss(); + + Resources res = mContext.getResources(); + String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); + DialogSimpleMessageHelper.makeSuccessDialog(mContext, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show(); + }, ex -> UtilityExceptions.defaultException(mContext,ex, progress)); + + }, ex -> UtilityExceptions.defaultException(mContext, ex, progress) + ); + } catch (Exception ex){ + UtilityExceptions.defaultException(mContext, ex, progress); + } + + } else { + progress.dismiss(); + String errorMessage = "Nessuna stampante configurata"; + DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(errorMessage), null, null).show(); + } + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mContext, ex, progress); + } + }); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java new file mode 100644 index 00000000..472f0c95 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/ListaBancaliActivity.java @@ -0,0 +1,82 @@ +package it.integry.integrywmsnative.gest.lista_bancali; + +import android.content.Intent; +import android.databinding.DataBindingUtil; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.databinding.ActivityListaBancaliBinding; +import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; +import it.integry.integrywmsnative.gest.lista_bancali.viewmodel.ListaBancaliViewModel; + +import static it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity.Key.CanRecoverUL; + +public class ListaBancaliActivity extends AppCompatActivity { + + public static class Key { + public static final String CanRecoverUL = "canRecoverUL"; + } + + public ActivityListaBancaliBinding bindings; + + private ListaBancaliViewModel mViewModel; + + private boolean mCanRecoverUl; + + private static final int PICK_UL_REQUEST = 1; // The request code + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + bindings = DataBindingUtil.setContentView(this, R.layout.activity_lista_bancali); + + + mCanRecoverUl = getIntent().getBooleanExtra(CanRecoverUL, false); + List mtbColts = (ArrayList)getIntent().getSerializableExtra("key"); + mViewModel = new ListaBancaliViewModel(this, mtbColts); + + + setSupportActionBar(this.bindings.toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + + } + + @Override + public boolean onSupportNavigateUp() { + onBackPressed(); + return true; + } + + public void startContenutoBancaleActivity(MtbColt item){ + Intent myIntent = new Intent(this, ContenutoBancaleActivity.class); + myIntent.putExtra("key", item); //Optional parameters + myIntent.putExtra(ContenutoBancaleActivity.Key.CanRecoverUL, mCanRecoverUl); + startActivityForResult(myIntent, PICK_UL_REQUEST); + } + + + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // Check which request we're responding to + if (requestCode == PICK_UL_REQUEST) { + // Make sure the request was successful + if (resultCode == RESULT_OK) { + +// MtbColt recoveredMtbColt = data.getParcelableExtra("key"); + + + this.setResult(RESULT_OK, data); + this.finish(); + } + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/core/MainListListaColliAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/core/MainListListaColliAdapter.java new file mode 100644 index 00000000..24f09a27 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/core/MainListListaColliAdapter.java @@ -0,0 +1,126 @@ +package it.integry.integrywmsnative.gest.lista_bancali.core; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableList; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.ViewGroup; +import android.view.View; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.databinding.ListaBancaliListModelBinding; + +public class MainListListaColliAdapter extends RecyclerView.Adapter { + + protected Context mContext; + protected ObservableArrayList mDataset; + + private View mEmptyView; + + private IRecyclerItemClicked mOnItemClickListener; + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected ListaBancaliListModelBinding mViewDataBinding; + + + public ViewHolder(ListaBancaliListModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbColt mtbColt) { + mViewDataBinding.setMtbColt(mtbColt); + mViewDataBinding.executePendingBindings(); + } + } + + public MainListListaColliAdapter(Context context, ObservableArrayList myDataset, IRecyclerItemClicked onItemClickListener, View emptyView) { + mContext = context; + mDataset = myDataset; + mEmptyView = emptyView; + mOnItemClickListener = onItemClickListener; + + myDataset.addOnListChangedCallback(onListChangedCallback); + + checkIfEmpty(); + } + + + @Override + public MainListListaColliAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + ListaBancaliListModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.lista_bancali_list_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + + @Override + public void onBindViewHolder(MainListListaColliAdapter.ViewHolder holder, int position) { + MtbColt item = mDataset.get(position); + holder.bind(item); + + holder.mViewDataBinding.getRoot().setOnClickListener(x -> { + if(mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(item, position); + } + }); + } + + @Override + public void onViewRecycled(MainListListaColliAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + + @Override + public int getItemCount() { + return mDataset.size(); + } + + + void checkIfEmpty() { + if (mEmptyView != null) { + final boolean emptyViewVisible = getItemCount() == 0; + mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE); + } + } + + + private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback>() { + @Override + public void onChanged(ObservableList sender) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + }; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/viewmodel/ListaBancaliViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/viewmodel/ListaBancaliViewModel.java new file mode 100644 index 00000000..c5d58de9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/lista_bancali/viewmodel/ListaBancaliViewModel.java @@ -0,0 +1,128 @@ +package it.integry.integrywmsnative.gest.lista_bancali.viewmodel; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.databinding.ObservableArrayList; +import android.support.annotation.NonNull; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.AdapterView; +import android.widget.LinearLayout; + +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.utility.UtilityDB; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleActivity; +import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; +import it.integry.integrywmsnative.gest.lista_bancali.core.MainListListaColliAdapter; + +import static android.app.Activity.RESULT_OK; + +public class ListaBancaliViewModel implements IRecyclerItemClicked { + + private ListaBancaliActivity mContext; + private ObservableArrayList mMtbColts; + + private MainListListaColliAdapter mAdapter; + + public ListaBancaliViewModel(ListaBancaliActivity context, List mtbColts){ + mContext = context; + mMtbColts = new ObservableArrayList<>(); + mMtbColts.addAll(mtbColts); + + initRecyclerView(); + } + + public void initRecyclerView() { + mContext.bindings.listaColliMainList.setHasFixedSize(true); + + mContext.bindings.listaColliMainList.setLayoutManager(new LinearLayoutManager(mContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); + mContext.bindings.listaColliMainList.addItemDecoration(itemDecorator); + + + mAdapter = new MainListListaColliAdapter(mContext, mMtbColts, this, mContext.bindings.listaBancaliEmptyView); + mContext.bindings.listaColliMainList.setAdapter(mAdapter); + + mContext.bindings.waterfallToolbar.setRecyclerView(mContext.bindings.listaColliMainList); + + } + + @Override + public void onItemClick(MtbColt item, int position) { + + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + try { + ColliMagazzinoRESTConsumer.getByTestata(item, true, false, mtbColt -> { + + ObservableArrayList mtbColrObservableArrayList = new ObservableArrayList<>(); + mtbColrObservableArrayList.addAll(mtbColt.getMtbColr()); + item.setMtbColr(mtbColrObservableArrayList); + + progress.dismiss(); + + mContext.startContenutoBancaleActivity(item); + + }, ex -> UtilityExceptions.defaultException(mContext, ex, progress)); + + /*String sql = "SELECT *, mtb_aart.descrizione, mtb_aart.unt_mis " + + "FROM mtb_colr " + + "LEFT OUTER JOIN mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart " + + "WHERE " + + "mtb_colr.data_collo = " + UtilityDB.valueToString(item.getDataColloD()) + " AND " + + "mtb_colr.ser_collo = " + UtilityDB.valueToString(item.getSerCollo()) + " AND " + + "mtb_colr.num_collo = " + UtilityDB.valueToString(item.getNumCollo()) + " AND " + + "mtb_colr.gestione = " + UtilityDB.valueToString(item.getGestione()); + + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + ObservableArrayList mtbColrObservableArrayList = new ObservableArrayList<>(); + mtbColrObservableArrayList.addAll(value); + item.setMtbColr(mtbColrObservableArrayList); + + progress.dismiss(); + + mContext.startContenutoBancaleActivity(item); + + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mContext, ex, progress); + } + }); + */ + + + } catch (Exception e) { + e.printStackTrace(); + UtilityExceptions.defaultException(mContext, e, progress); + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginActivity.java new file mode 100644 index 00000000..83338988 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/LoginActivity.java @@ -0,0 +1,32 @@ +package it.integry.integrywmsnative.gest.login; + +import android.databinding.DataBindingUtil; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.utility.UtilityWindow; +import it.integry.integrywmsnative.databinding.ActivityLoginBinding; +import it.integry.integrywmsnative.gest.login.viewmodel.LoginViewModel; + +public class LoginActivity extends AppCompatActivity { + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + UtilityWindow.maximizeToFullScreen(this); + + ActivityLoginBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_login); + LoginViewModel loginViewModel = new LoginViewModel(this); + binding.setLoginViewModel(loginViewModel); + } + + + @Override + public void onBackPressed() { + // disable going back to the MainActivity + moveTaskToBack(true); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/core/LoginHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/core/LoginHelper.java new file mode 100644 index 00000000..86228f37 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/core/LoginHelper.java @@ -0,0 +1,113 @@ +package it.integry.integrywmsnative.gest.login.core; + +import android.content.Context; +import android.util.Log; + +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.ISingleOperationDoubleCallback; +import it.integry.integrywmsnative.core.REST.model.EsitoType; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO; +import it.integry.integrywmsnative.gest.login.dto.LoginDTO; +import it.integry.integrywmsnative.gest.login.rest.LoginRESTConsumerService; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class LoginHelper { + + private Context mContext; + + private String mCodAzienda; + private String mUsername; + private String mPassword; + + public LoginHelper(Context context, String codAzienda, String username, String password){ + this.mContext = context; + + this.mCodAzienda = codAzienda; + this.mUsername = username; + this.mPassword = password; + } + + + public void retrieveServerData(final ISimpleOperationCallback callback){ + + String host = CommonConst.Login.Azienda.host; + int port = CommonConst.Login.Azienda.port; + + LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false); + service.loginAzienda(mCodAzienda).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + callback.onSuccess(response.body().getDto()); + } else { + Log.e("LoginAzienda", response.body().getErrorMessage()); + callback.onFailed(new Exception(response.body().getErrorMessage())); + } + } else { + Log.e("LoginAzienda", response.message()); + callback.onFailed(new Exception(response.message())); + } + } else { + Log.e("LoginAzienda", "Status " + response.code() + ": " + response.message()); + callback.onFailed(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call> call, Throwable t) { + Log.e("LoginAzienda", t.toString()); + callback.onFailed(new Exception(t)); + } + }); + } + + + public void doLogin(String host, int port, final ISimpleOperationCallback callback){ + LoginRESTConsumerService service = RESTBuilder.getService(LoginRESTConsumerService.class, host, port, false); + service.login(mUsername, mPassword).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + callback.onSuccess(response.body().getDto()); + } else { + Log.e("Login", response.body().getErrorMessage()); + callback.onFailed(new Exception(response.body().getErrorMessage())); + } + } else { + Log.e("Login", response.message()); + callback.onFailed(new Exception(response.message())); + } + } else { + Log.e("Login", "Status " + response.code() + ": " + response.message()); + callback.onFailed(new Exception("Status " + response.code() + ": " + response.message())); + } + + + } + + @Override + public void onFailure(Call> call, final Throwable t) { + + Log.e("Login", t.toString()); + callback.onFailed(new Exception(t)); + + + + } + }); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginAziendaDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginAziendaDTO.java new file mode 100644 index 00000000..5b9cfe5c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginAziendaDTO.java @@ -0,0 +1,11 @@ +package it.integry.integrywmsnative.gest.login.dto; + +public class LoginAziendaDTO { + + public String profileDb; + public String endpointRestApi; + public String phpApi; + public String repoPhoto; + public String endpointPvm; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java new file mode 100644 index 00000000..c092456a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/dto/LoginDTO.java @@ -0,0 +1,10 @@ +package it.integry.integrywmsnative.gest.login.dto; + +import java.util.List; + +public class LoginDTO { + + public String full_name; + public List availableProfiles; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumerService.java new file mode 100644 index 00000000..44fa7ccb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/rest/LoginRESTConsumerService.java @@ -0,0 +1,21 @@ +package it.integry.integrywmsnative.gest.login.rest; + + +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.login.dto.LoginAziendaDTO; +import it.integry.integrywmsnative.gest.login.dto.LoginDTO; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + +public interface LoginRESTConsumerService { + + + @GET("loginAziendaWms") + Call> loginAzienda(@Query("codHash") String codHash); + + @POST("loginWeb") + Call> login(@Query("username") String username, @Query("password") String password); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java new file mode 100644 index 00000000..ad86982b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/login/viewmodel/LoginViewModel.java @@ -0,0 +1,247 @@ +package it.integry.integrywmsnative.gest.login.viewmodel; + +import android.app.ProgressDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.support.v7.app.AlertDialog; +import android.text.Html; +import android.text.SpannableString; +import android.text.Spanned; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +import it.integry.integrywmsnative.MainActivity; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.REST.model.AvailableCodMdepsDTO; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.di.BindableString; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityServer; +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.DialogSimpleMessageHelper; + +public class LoginViewModel { + private static final String TAG = LoginViewModel.class.getSimpleName(); + + public BindableString username = new BindableString(); + public BindableString password = new BindableString(); + public BindableString codAzienda = new BindableString(); + + public BindableBoolean customSettingsCheckboxEnabled = new BindableBoolean(); + public BindableBoolean customSettingsCheckboxChecked = new BindableBoolean(); + + public BindableBoolean loginButtonEnabled = new BindableBoolean(); + + + public BindableString usernameError = new BindableString(); + public BindableString passwordError = new BindableString(); + public BindableString codAziendaError = new BindableString(); + + + + private LoginActivity mActivity; + + private ProgressDialog mProgress; + + public LoginViewModel(LoginActivity activity) { + this.mActivity = activity; + + loginButtonEnabled.set(true); + + codAzienda.set(SettingsManager.i().server.codAzienda); + + customSettingsCheckboxChecked.set(SettingsManager.i().server.host == null); + customSettingsCheckboxEnabled.set(SettingsManager.i().server.host != null); + } + + + + public boolean validate() { + if (username.isEmpty() || username.get().length() < 3) { + usernameError.set(mActivity.getText(R.string.username_error_not_valid).toString()); + return false; + } else usernameError.set(null); + + if (codAzienda.isEmpty() || codAzienda.get().length() < 3) { + codAziendaError.set(mActivity.getText(R.string.server_cod_azienda_not_valid).toString()); + return false; + } else codAziendaError.set(null); + + return true; + } + + + + public void login(boolean areValidData){ + if(areValidData){ + loginButtonEnabled.set(false); + + mProgress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), + mActivity.getText(R.string.loading) + " ...", true); + + final LoginHelper loginHelper = new LoginHelper(mActivity, codAzienda.get(), username.get(), password.get()); + + loginHelper.retrieveServerData(new ISimpleOperationCallback() { + + @Override + public void onSuccess(LoginAziendaDTO value) { + + final String serverEndpoint = value.endpointRestApi; + + URL u; + try { + u = new URL(serverEndpoint); + } catch (final MalformedURLException e) { + e.printStackTrace(); + onLoginFailed(new SpannableString(e.toString())); + return; + } + + final String host = u.getHost(); + final int port = u.getPort(); + + UtilityServer.isHostReachable(host, port, value1 -> { + + if(value1){ //Is online + loginHelper.doLogin(host, port, new ISimpleOperationCallback() { + @Override + public void onSuccess(final LoginDTO loginDTO) { + + SettingsManager.iDB().setAvailableProfiles(loginDTO.availableProfiles); + SettingsManager.i().user.fullname = loginDTO.full_name; + + + mActivity.runOnUiThread(() -> onLoginSuccess( + "Benvenuto", + Html.fromHtml("Ciao " + loginDTO.full_name + ", la Integry le augura di svolgere al meglio il suo lavoro"), + host, port, loginDTO.availableProfiles)); + + + } + + @Override + public void onFailed(final Exception ex) { + onLoginFailed(new SpannableString(ex.getMessage())); + } + }); + + + } else { //Is not online + onLoginFailed(Html.fromHtml(String.format(mActivity.getText(R.string.server_not_reachable).toString(), host, port))); + } + + }); + } + + @Override + public void onFailed(Exception ex) { + onLoginFailed(Html.fromHtml(String.format(mActivity.getText(R.string.server_cod_azienda_not_valid).toString(), codAzienda.get()))); + } + }); + + } + } + + + private void loadDepo(String host, int port, Runnable onComplete) { + + SettingsManager.i().server.codAzienda = codAzienda.get(); + SettingsManager.i().server.host = host; + SettingsManager.i().server.port = port; + + SettingsManager.i().user.username = username.get(); + SettingsManager.i().user.password = password.get(); + + SystemRESTConsumer.getAvailableCodMdeps(new ISimpleOperationCallback>() { + @Override + public void onSuccess(List availableCodMdeps) { + SettingsManager.iDB().setAvailableCodMdep(availableCodMdeps); + + if(availableCodMdeps == null || availableCodMdeps.size() == 0) { + onLoginFailed(Html.fromHtml(String.format(mActivity.getText(R.string.no_codmdep_available).toString()))); + return; + } + + SettingsManager.i().userSession.depo = availableCodMdeps.get(0); + + + if(onComplete != null) onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + //BOH + onLoginFailed(new SpannableString(ex.getMessage())); + } + }); + } + + + private void onLoginFailed(final Spanned message){ + mProgress.dismiss(); + loginButtonEnabled.set(true); + mActivity.runOnUiThread(() -> DialogSimpleMessageHelper.makeErrorDialog( + mActivity, + message, + null, + null).show()); + } + + + private void onLoginSuccess(final String title, final Spanned message, final String host, final int port, final List availableProfiles){ + mProgress.dismiss(); + mActivity.runOnUiThread(() -> DialogSimpleMessageHelper.makeSuccessDialog( + mActivity, + title, + message, + null, + () -> showProfileDBSelectionDialog(host, port, availableProfiles)).show()); + } + + private void showProfileDBSelectionDialog(final String host, final int port, final List availableProfiles){ + if(availableProfiles != null && availableProfiles.size() == 1 ) { + SettingsManager.i().userSession.profileDB = availableProfiles.get(0); + + loadDepo(host, port, this::onLoginCompleted); + } else { + + // setup the alert builder + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setTitle(R.string.action_choose_profile_db); + + // add a list + String[] profiles = new String[availableProfiles.size()]; + profiles = availableProfiles.toArray(profiles); + builder.setItems(profiles, (dialog, which) -> { + SettingsManager.i().userSession.profileDB = availableProfiles.get(which); + + loadDepo(host, port, this::onLoginCompleted); + }); + + // create and show the alert dialog + AlertDialog dialog = builder.create(); + dialog.show(); + } + } + + public void onLoginCompleted() { + loginButtonEnabled.set(true); + + + SettingsManager.update(); + + Intent myIntent = new Intent(mActivity, MainActivity.class); + mActivity.startActivity(myIntent); + + mActivity.finish(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java new file mode 100644 index 00000000..86681ef1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java @@ -0,0 +1,102 @@ +package it.integry.integrywmsnative.gest.main; + + +import android.content.Context; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import net.cachapa.expandablelayout.ExpandableLayout; + +import butterknife.BindView; +import butterknife.ButterKnife; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; +import it.integry.integrywmsnative.core.REST.watcher.ServerStatusChecker; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.wifi.WiFiCheckerViewHolder; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link MainFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class MainFragment extends Fragment implements ITitledFragment { + + + @BindView(R.id.no_connection_top_layout) ExpandableLayout mNoConnectionLayout; + @BindView(R.id.current_user_name) TextView currentUsername; + //@BindView(R.id.drawer_username) TextView drawerUsername; + + private View mView; + + public MainFragment() { + // Required empty public constructor + } + + public static MainFragment newInstance() { + MainFragment fragment = new MainFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + mView = inflater.inflate(R.layout.fragment_main, container, false); + + ButterKnife.bind(this, mView); + + init(); + return mView; + } + + + private void init(){ + ServerStatusChecker.getIstance().addCallback(value -> { + if(value && mNoConnectionLayout.isExpanded()){ + + collapseNoConnectionLayout(); + + + } else if(!value && !mNoConnectionLayout.isExpanded()){ + expandNoConnectionLayout(); + } + }); + + WiFiCheckerViewHolder wiFiCheckerViewHolder = new WiFiCheckerViewHolder(getActivity(), mView, R.id.wifi_power); + wiFiCheckerViewHolder.startMonitoring(); + + + currentUsername.setText(SettingsManager.i().user.fullname); + //drawerUsername.setText(SettingsManager.i().user.fullname); + + } + + private void collapseNoConnectionLayout(){ + if(getActivity() != null) getActivity().runOnUiThread(() -> mNoConnectionLayout.collapse(true)); + } + + private void expandNoConnectionLayout(){ + if(getActivity() != null) getActivity().runOnUiThread(() -> mNoConnectionLayout.expand(true)); + } + + + @Override + public String getTitle(Context context) { + return context.getString(R.string.app_name); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java new file mode 100644 index 00000000..466cc490 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java @@ -0,0 +1,136 @@ +package it.integry.integrywmsnative.gest.rettifica_giacenze; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import butterknife.ButterKnife; +import it.integry.integrywmsnative.MainActivity; +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.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding; +import it.integry.integrywmsnative.databinding.FragmentMainRettificaGiacenzeBinding; +import it.integry.integrywmsnative.gest.rettifica_giacenze.core.RettificaGiacenzeHelper; +import it.integry.integrywmsnative.gest.rettifica_giacenze.viewmodel.RettificaGiacenzeViewModel; +import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; + +public class RettificaGiacenzeFragment extends Fragment implements ITitledFragment { + + private RettificaGiacenzeHelper mHelper; + private FragmentMainRettificaGiacenzeBinding mBinding = null; + + private RettificaGiacenzeViewModel mRettificaGiacenzeViewModel = null; + + private int barcodeScannerIstanceID = -1; + + public RettificaGiacenzeFragment() { + // Required empty public constructor + } + + + public static RettificaGiacenzeFragment newInstance() { + RettificaGiacenzeFragment fragment = new RettificaGiacenzeFragment(); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_rettifica_giacenze, container, false); + mRettificaGiacenzeViewModel = new RettificaGiacenzeViewModel(); + + mBinding.setView(this); + mBinding.setViewmodel(mRettificaGiacenzeViewModel); + + init(); + return mBinding.getRoot(); + } + + private void init() { + mHelper = new RettificaGiacenzeHelper(getActivity()); + mRettificaGiacenzeViewModel.init(getActivity(), mBinding, mHelper); + + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(mRettificaGiacenzeViewModel.onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); + + mHelper.loadListaFornitori(listaFornitori -> { + mRettificaGiacenzeViewModel.setupSearchFornitori(listaFornitori); + }); + + + mBinding.autoCompleteFornitori.setOnFocusChangeListener((v, hasFocus) -> { + setUIToForn(); + }); + mBinding.inputCodArtDescrForn.setOnFocusChangeListener((v, hasFocus) -> { + setUIToForn(); + }); + + mBinding.inputCodArtDescrInt.setOnFocusChangeListener((v, hasFocus) -> { + setUIToIntArt(); + }); + + mRettificaGiacenzeViewModel.openLU(); + } + + + @Override + public void onAttach(Context context) { + super.onAttach(context); + } + + @Override + public void onDetach() { + mRettificaGiacenzeViewModel.closeLU(false, false); + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onDetach(); + } + + + @Override + public String getTitle(Context context) { + return context.getResources().getString(R.string.rettifica_giacenze_fragment_title); + } + + + + + public void setUIToForn() { + mBinding.rettificaGiacenzeFornCheckBox.setChecked(true); + mBinding.rettificaGiacenzeFornLayout.setBackground(getActivity().getResources().getDrawable(R.drawable.circular_background_left)); + mBinding.rettificaGiacenzeFornLayout.setBackgroundTintList(ColorStateList.valueOf(getActivity().getResources().getColor(R.color.alpha_blue_500))); + + mBinding.rettificaGiacenzeArtIntCheckBox.setChecked(false); + mBinding.rettificaGiacenzeArtIntLayout.setBackground(null); + mBinding.rettificaGiacenzeArtIntLayout.setBackgroundTintList(null); + + + } + + + public void setUIToIntArt() { + mBinding.rettificaGiacenzeArtIntCheckBox.setChecked(true); + mBinding.rettificaGiacenzeArtIntLayout.setBackground(getActivity().getResources().getDrawable(R.drawable.circular_background_left)); + mBinding.rettificaGiacenzeArtIntLayout.setBackgroundTintList(ColorStateList.valueOf(getActivity().getResources().getColor(R.color.alpha_blue_500))); + + mBinding.rettificaGiacenzeFornCheckBox.setChecked(false); + mBinding.rettificaGiacenzeFornLayout.setBackground(null); + mBinding.rettificaGiacenzeFornLayout.setBackgroundTintList(null); + + + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/RettificaGiacenzeHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/RettificaGiacenzeHelper.java new file mode 100644 index 00000000..59cade51 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/RettificaGiacenzeHelper.java @@ -0,0 +1,105 @@ +package it.integry.integrywmsnative.gest.rettifica_giacenze.core; + +import android.app.ProgressDialog; +import android.content.Context; +import android.databinding.ObservableArrayList; + +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +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.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbAartWithFornitore; +import it.integry.integrywmsnative.core.utility.UtilityDB; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.ArticoloFornitoreDTO; +import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO; + +public class RettificaGiacenzeHelper { + + private Context mContext; + + public RettificaGiacenzeHelper(Context context){ + mContext = context; + } + + + public void loadListaFornitori(RunnableArgs> onComplete) { + final ProgressDialog progress = UtilityProgress.createDefaultProgressDialog(mContext); + //progress.show(); + + String sql = "SELECT cod_alis as 'codAlis', descrizione FROM atb_list WHERE flag_attivo = 'S'"; + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(ArrayList value) { + progress.dismiss(); + + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mContext, ex, progress); + } + }); + } + + public void searchArtForn(String codAlis, String codArtForOrDescr, RunnableArgs> onComplete, RunnableArgs onFailed) { + + String sql = "SELECT mtb_aart.*, mtb_lisa.cod_art_for from mtb_lisa, mtb_aart, mtb_part " + + " WHERE mtb_lisa.cod_alis = " + UtilityDB.valueToString(codAlis) + + " AND mtb_lisa.cod_mart = mtb_aart.cod_mart " + + " AND mtb_lisa.cod_mart = mtb_part.cod_mart " + + " AND mtb_part.cod_mdep = '01' " + + " AND (mtb_aart.descrizione_estesa LIKE '%" + codArtForOrDescr + "%' OR cod_art_for LIKE '%" + codArtForOrDescr + "%') " + + " ORDER BY ABS(mtb_part.qta_esistente) DESC, mtb_aart.descrizione_estesa"; + + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(ArrayList value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + + + public void searchArtInt(String codMartOrBarcodeOrDescr, RunnableArgs> onComplete, RunnableArgs onFailed) { + String sql = "SELECT DISTINCT mtb_aart.* " + + "FROM mtb_aart, mvw_barcode " + + "WHERE (case when len(mvw_barcode.cod_barre) > 13 " + + "then mvw_barcode.cod_barre " + + "else Replicate('0', 13 - len(mvw_barcode.cod_barre))+ mvw_barcode.cod_barre end LIKE '%' + case when len('" + codMartOrBarcodeOrDescr + "') > 13 then '" + codMartOrBarcodeOrDescr + "' else Replicate('0', 13 - len('" + codMartOrBarcodeOrDescr + "')) + '" + codMartOrBarcodeOrDescr + "'" + + "end OR mtb_aart.cod_mart = '" + codMartOrBarcodeOrDescr + "' OR mtb_aart.descrizione_estesa LIKE '%" + codMartOrBarcodeOrDescr + "%') AND mtb_aart.cod_mart = mvw_barcode.cod_mart"; + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(sql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(ArrayList value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/AutoCompleteFornitoreAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/AutoCompleteFornitoreAdapter.java new file mode 100644 index 00000000..a371282a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/AutoCompleteFornitoreAdapter.java @@ -0,0 +1,114 @@ +package it.integry.integrywmsnative.gest.rettifica_giacenze.core.adapter; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableList; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Filter; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.ConcurrentModificationException; +import java.util.Iterator; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.databinding.RettificaGiacenzeAutocompleteFornitoreLayoutBinding; +import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO; + +public class AutoCompleteFornitoreAdapter extends ArrayAdapter { + + private ArrayList items; + private ArrayList itemsAll; + private ArrayList suggestions; + + public AutoCompleteFornitoreAdapter(@NonNull Context context, @NonNull ArrayList items) { + super(context, 0 , items); + this.items = items; + this.itemsAll = (ArrayList) items.clone(); + this.suggestions = new ArrayList<>(); + } + + @NonNull + @Override + public Filter getFilter() { + return fornitoreFilter; + } + + @NonNull + @Override + public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { + + RettificaGiacenzeAutocompleteFornitoreLayoutBinding binding = DataBindingUtil.inflate( + LayoutInflater.from(getContext()), + R.layout.rettifica_giacenze_autocomplete_fornitore_layout, parent, false); + + binding.setFornitore(items.get(position)); + + return binding.getRoot(); + } + + + + private Filter fornitoreFilter = new Filter() { + @Override + protected FilterResults performFiltering(CharSequence constraint) { + if(constraint != null) { + suggestions.clear(); + for (FornitoreDTO fornitore : itemsAll) { + String tmpDescr = fornitore.getCodAlis() + " " + fornitore.getDescrizione(); + + if(tmpDescr.toLowerCase().contains(constraint.toString().toLowerCase())){ + suggestions.add(fornitore); + } + } + FilterResults filterResults = new FilterResults(); + filterResults.values = suggestions; + filterResults.count = suggestions.size(); + return filterResults; + } else { + return new FilterResults(); + } + } + + + @Override + protected void publishResults(CharSequence constraint, FilterResults results) { + + boolean error; + + do { + try { + ArrayList filteredList = (ArrayList) results.values; + if (results.count > 0) { + clear(); + + for (FornitoreDTO c : filteredList) { + add(c); + } + + notifyDataSetChanged(); + + } + error = false; + } catch (ConcurrentModificationException ex) { + error = true; + } + } while (error); + + + } + + + @Override + public CharSequence convertResultToString(Object resultValue) { + return ((FornitoreDTO) resultValue).getCodAlis(); + } + }; +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java new file mode 100644 index 00000000..b59eac86 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/core/adapter/RettificaGiacenzeMainListAdapter.java @@ -0,0 +1,122 @@ +package it.integry.integrywmsnative.gest.rettifica_giacenze.core.adapter; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableList; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.databinding.ListaRettificaGiacenzeModelBinding; + +public class RettificaGiacenzeMainListAdapter extends RecyclerView.Adapter { + + protected Context mContext; + protected ObservableArrayList mDataset; + private View mEmptyView; + + private IRecyclerItemClicked mOnItemClickListener; + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected ListaRettificaGiacenzeModelBinding mViewDataBinding; + + + public ViewHolder(ListaRettificaGiacenzeModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbColr mtbColr) { + mViewDataBinding.setMtbColr(mtbColr); + mViewDataBinding.executePendingBindings(); + } + } + + public RettificaGiacenzeMainListAdapter(Context context, ObservableArrayList myDataset, IRecyclerItemClicked onItemClickListener, View emptView) { + mContext = context; + mDataset = myDataset; + mEmptyView = emptView; + mOnItemClickListener = onItemClickListener; + + myDataset.addOnListChangedCallback(onListChangedCallback); + + checkIfEmpty(); + } + + @Override + public RettificaGiacenzeMainListAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + ListaRettificaGiacenzeModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.lista_rettifica_giacenze_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(RettificaGiacenzeMainListAdapter.ViewHolder holder, int position) { + MtbColr item = mDataset.get(position); + holder.bind(item); + + holder.mViewDataBinding.getRoot().setOnClickListener(x -> { + if(mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(item, position); + } + }); + } + + @Override + public void onViewRecycled(RettificaGiacenzeMainListAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback>(){ + + @Override + public void onChanged(ObservableList sender) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + notifyDataSetChanged(); + checkIfEmpty(); + } + }; + + + void checkIfEmpty() { + if (mEmptyView != null) { + final boolean emptyViewVisible = getItemCount() == 0; + mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE); + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/dto/ArticoloFornitoreDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/dto/ArticoloFornitoreDTO.java new file mode 100644 index 00000000..1889f2a0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/dto/ArticoloFornitoreDTO.java @@ -0,0 +1,32 @@ +package it.integry.integrywmsnative.gest.rettifica_giacenze.dto; + +public class ArticoloFornitoreDTO { + + private String codMart; + private String descrizioneEstesa; + private String codArtFor; + + public String getCodMart() { + return codMart; + } + + public void setCodMart(String codMart) { + this.codMart = codMart; + } + + public String getDescrizioneEstesa() { + return descrizioneEstesa; + } + + public void setDescrizioneEstesa(String descrizioneEstesa) { + this.descrizioneEstesa = descrizioneEstesa; + } + + public String getCodArtFor() { + return codArtFor; + } + + public void setCodArtFor(String codArtFor) { + this.codArtFor = codArtFor; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/dto/FornitoreDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/dto/FornitoreDTO.java new file mode 100644 index 00000000..29840abf --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/dto/FornitoreDTO.java @@ -0,0 +1,30 @@ +package it.integry.integrywmsnative.gest.rettifica_giacenze.dto; + +public class FornitoreDTO implements Cloneable { + + private String codAlis; + private String descrizione; + + public String getCodAlis() { + return codAlis; + } + + public FornitoreDTO setCodAlis(String codAlis) { + this.codAlis = codAlis; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public FornitoreDTO setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + @Override + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java new file mode 100644 index 00000000..7029c785 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/viewmodel/RettificaGiacenzeViewModel.java @@ -0,0 +1,581 @@ +package it.integry.integrywmsnative.gest.rettifica_giacenze.viewmodel; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.res.Resources; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableField; +import android.support.annotation.NonNull; +import android.support.design.widget.BottomSheetBehavior; +import android.support.design.widget.TextInputLayout; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.LinearLayoutManager; +import android.text.SpannableString; +import android.view.View; +import android.view.inputmethod.EditorInfo; + +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.MainActivity; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.CommonRESTException; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +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.MtbCols; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.report.ReportManager; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.FragmentMainRettificaGiacenzeBinding; +import it.integry.integrywmsnative.gest.rettifica_giacenze.core.RettificaGiacenzeHelper; +import it.integry.integrywmsnative.gest.rettifica_giacenze.core.adapter.AutoCompleteFornitoreAdapter; +import it.integry.integrywmsnative.gest.rettifica_giacenze.core.adapter.RettificaGiacenzeMainListAdapter; +import it.integry.integrywmsnative.gest.rettifica_giacenze.dto.FornitoreDTO; +import it.integry.integrywmsnative.ui.StatusBarAlert; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLU; +import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArts; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; +import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; +import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeType; + +public class RettificaGiacenzeViewModel implements IRecyclerItemClicked { + + private Activity mContext; + private FragmentMainRettificaGiacenzeBinding mBinding; + + private BottomSheetBehavior mBottomSheetBehavior; + + private RettificaGiacenzeHelper mHelper; + private RettificaGiacenzeMainListAdapter mAdapter; + + public ObservableField mtbColt = new ObservableField<>(); + public BindableBoolean isFabVisible = new BindableBoolean(); + public BindableBoolean isMtbColtLoaded = new BindableBoolean(); + + + + public void init(Activity context, FragmentMainRettificaGiacenzeBinding binding, RettificaGiacenzeHelper helper) { + mContext = context; + mBinding = binding; + mHelper = helper; + } + + public void setMtbColt(MtbColt mtbColt) { + this.mtbColt.set(mtbColt); + + isFabVisible.set(mtbColt != null); + isMtbColtLoaded.set(mtbColt != null); + + if(this.mtbColt.get().getMtbColr() == null) this.mtbColt.get().setMtbColr(new ObservableArrayList<>()); + + initRecyclerView(); + initBottomSheetActions(); + } + + public void resetMtbColt(boolean openNew) { + this.mtbColt.set(null); + isFabVisible.set(false); + isMtbColtLoaded.set(false); + mBinding.rettificaGiacenzeMainList.setAdapter(null); + + if(openNew) openLU(); + } + + + private void initRecyclerView() { + mBinding.rettificaGiacenzeMainList.setNestedScrollingEnabled(false); + + mBinding.rettificaGiacenzeMainList.setHasFixedSize(true); + + mBinding.rettificaGiacenzeMainList.setLayoutManager(new LinearLayoutManager(mContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(mContext, R.drawable.divider)); + mBinding.rettificaGiacenzeMainList.addItemDecoration(itemDecorator); + + mAdapter = new RettificaGiacenzeMainListAdapter(mContext, mtbColt.get().getMtbColr(), this, mBinding.rettificaGiacenzeEmptyView); + mBinding.rettificaGiacenzeMainList.setAdapter(mAdapter); + } + + private void initBottomSheetActions() { + mBinding.bg.setOnClickListener(v -> mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED)); + + mBottomSheetBehavior = BottomSheetBehavior.from(mBinding.bottomSheetActions); + + mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { + @Override + public void onStateChanged(@NonNull View bottomSheet, int newState) { + if (newState == BottomSheetBehavior.STATE_COLLAPSED) + mBinding.bg.setVisibility(View.GONE); + } + + @Override + public void onSlide(@NonNull View bottomSheet, float slideOffset) { + mBinding.bg.setVisibility(View.VISIBLE); + mBinding.bg.setAlpha(slideOffset); + } + }); + } + + public RunnableArgs onScanSuccessfull = data -> { + + BarcodeManager.disable(); + + if(data.getType() == BarcodeType.EAN8 || data.getType() == BarcodeType.EAN13 || data.getType() == BarcodeType.UPCA){ + searchArtInt(data.getStringValue()); + } else { + BarcodeManager.enable(); + } + + }; + + + public void setupSearchFornitori(ArrayList listaFornitori) { + AutoCompleteFornitoreAdapter autoCompleteFornitoreAdapter = new AutoCompleteFornitoreAdapter(mContext, listaFornitori); + mBinding.autoCompleteFornitori.setAdapter(autoCompleteFornitoreAdapter); + mBinding.autoCompleteFornitori.setDropDownWidth(mContext.getResources().getDisplayMetrics().widthPixels); + + mBinding.inputCodArtDescrForn.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + resetAllError(); + if(UtilityString.isNullOrEmpty(mBinding.autoCompleteFornitori.getText().toString())) { + setError(mBinding.autoCompleteFornitoriLayout, mContext.getResources().getText(R.string.error).toString()); + return true; + } + + if(UtilityString.isNullOrEmpty(mBinding.inputCodArtDescrForn.getText().toString())) { + setError(mBinding.layoutCodArtDescrForn, mContext.getResources().getText(R.string.error).toString()); + return true; + } + + searchArtFor( + mBinding.autoCompleteFornitori.getText().toString(), + mBinding.inputCodArtDescrForn.getText().toString()); + return true; + } + return false; + }); + + + mBinding.inputCodArtDescrInt.setOnEditorActionListener((v, actionId, event) -> { + if (actionId == EditorInfo.IME_ACTION_DONE) { + resetAllError(); + + if(UtilityString.isNullOrEmpty(mBinding.inputCodArtDescrInt.getText().toString())) { + setError(mBinding.layoutCodArtDescrInt, mContext.getResources().getText(R.string.error).toString()); + return true; + } + + searchArtInt(mBinding.inputCodArtDescrInt.getText().toString()); + return true; + } + return false; + }); + } + + + private void setError(TextInputLayout textInputLayout, String message){ + textInputLayout.setErrorEnabled(true); + textInputLayout.setError(message); + } + + private void resetAllError() { + resetError(mBinding.autoCompleteFornitoriLayout); + resetError(mBinding.layoutCodArtDescrForn); + resetError(mBinding.layoutCodArtDescrInt); + } + + private void resetTexts() { + //mBinding.autoCompleteFornitori.setText(""); + mBinding.inputCodArtDescrForn.setText(""); + mBinding.inputCodArtDescrInt.setText(""); +} + + private void resetError(TextInputLayout textInputLayout) { + textInputLayout.setErrorEnabled(false); + textInputLayout.setError(null); + } + + private void searchArtFor(String codAlis, String queryText) { + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + //progressDialog.show(); + + mHelper.searchArtForn(codAlis, queryText, listaArts -> { + progressDialog.dismiss(); + + List mtbAarts = Stream.of(listaArts).map(x -> (MtbAart) x).toList(); + + dispatchArtsList(mtbAarts); + }, ex -> UtilityExceptions.defaultException(mContext, ex, progressDialog)); + } + + private void searchArtInt(String queryText) { + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + //progressDialog.show(); + + mHelper.searchArtInt(queryText, listaArts -> { + progressDialog.dismiss(); + BarcodeManager.enable(); + dispatchArtsList(listaArts); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private void dispatchArtsList(List articoloFornitoreDTOS){ + + if(articoloFornitoreDTOS != null){ + if(articoloFornitoreDTOS.size() == 0) { + showNoArtsFound(); + } else if(articoloFornitoreDTOS.size() == 1) { + dispatchArt(articoloFornitoreDTOS.get(0)); + } else { + DialogChooseArtFromListaArts.make(mContext, articoloFornitoreDTOS, this::dispatchArt).show(); + } + } else { + showNoArtsFound(); + } + } + + private void showNoArtsFound() { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(mContext.getResources().getText(R.string.no_items_found_message)), + null, null).show(); + } + + + private void dispatchArt(MtbAart mtbAart){ + DialogInputQuantity.DTO qtaDto = new DialogInputQuantity.DTO(); + + qtaDto.setMtbAart(mtbAart); + + qtaDto.setQtaCnf(mtbAart.getQtaCnf()); + qtaDto.setNumCnf(1); + qtaDto.setQtaTot(mtbAart.getQtaCnf()); + + qtaDto.setQtaDaEvadere(new BigDecimal(-1)); + + qtaDto.setCanPartitaMagBeChanged(true); + qtaDto.setCanDataScadBeChanged(true); + +/* + if(ean128Model != null){ + if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)){ + qtaDto.partitaMag = ean128Model.BatchLot; + qtaDto.canPartitaMagBeChanged = false; + } + + let dataScad = ean128Model.BestBefore || ean128Model.Expiry; + if(dataScad != null){ + qtaDto.shouldAskDataScad = true; + qtaDto.dataScad = moment(dataScad, "DD/MM/YYYY HH:mm:ss").format("YYYY-MM-DD"); + qtaDto.canDataScadBeChanged = false; + } + + if(ean128Model.NetWeightKg != null) { + qtaDto.qtaTot = ean128Model.NetWeightKg; + qtaDto.qtaPerCnf = ean128Model.NetWeightKg; + qtaDto.numDiCnf = 1; + } + + if(ean128Model.Count != null){ + qtaDto.qtaTot = ean128Model.Count; + qtaDto.numDiCnf = qtaDto.qtaTot / qtaDto.qtaPerCnf; + } + } +*/ + + DialogInputQuantity.makeBase(mContext, qtaDto, true, (quantityDTO) -> { + onPostDispatch(mtbAart, quantityDTO); + }).show(); + } + + + + private void onPostDispatch(MtbAart mtbAart, QuantityDTO quantityDTO) { + + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + final MtbColr mtbColr = new MtbColr() + .setCodMart(mtbAart.getCodMart()) + .setPartitaMag(quantityDTO.batchLot.get()) + .setDataScadPartita(quantityDTO.expireDate) + .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) + .setDescrizione(mtbAart.getDescrizioneEstesa()); + + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + MtbColt cloneMtbColt = (MtbColt) mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + + cloneMtbColt.setMtbColr(new ObservableArrayList()); + cloneMtbColt.getMtbColr().add(mtbColr); + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(0).getRiga()) + .setUntMis(mtbAart.getUntMis()) + .setMtbAart(mtbAart); + + mtbColt.get().getMtbColr().add(mtbColr); + + new StatusBarAlert.Builder(mContext) + .autoHide(true) + .withDuration(2500) + .showProgress(false) + .withText(R.string.data_saved) + .withAlertColor(R.color.mainGreen) + .build(); + + resetTexts(); + progress.dismiss(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mContext, ex, progress); + } + }); + + } + + + + + @Override + public void onItemClick(MtbColr item, int position) { + /* + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); + + MtbColr clickedItem = mtbColt.get().getMtbColr().get(position); + + mBinding.bottomSheetActionsTitle.setText(clickedItem.getDescrizione()); + mBinding.bottomSheetActionsSubtitle.setText(clickedItem.getCodMart()); + + mBinding.bottomSheetActionsEditBtn.setOnClickListener(v -> onItemEdit(position)); + + mBinding.bottomSheetActionsDeleteBtn.setOnClickListener(v -> onItemDelete(position)); + + mBinding.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getQtaCol()) + " " + clickedItem.getUntMis()); + */ + + + } + + public void openLU() { + DialogScanOrCreateLU.make(mContext, mtbColt -> { + if(mtbColt == null) { + ((MainActivity)mContext).popToMain(); + } else { + setMtbColt(mtbColt); + } + }).show(); + } + + public boolean thereIsAnOpenedUL() { + return mtbColt.get() != null; + } + public boolean thereIsAnyRowInUL() { + return mtbColt.get() != null && + mtbColt.get().getMtbColr() != null && + mtbColt.get().getMtbColr().size() > 0; + } + + public void closeLU(boolean openNewOne, boolean saveCausale) { + + if(thereIsAnOpenedUL()) { + + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + if (thereIsAnyRowInUL()) { + + if (!UtilityString.isNullOrEmpty(SettingsManager.iDB().getDefaultCausaleRettificaGiacenze()) && saveCausale) { + posizionaCollo(() -> + saveCausaleRettificaGiacenze(progress, () -> { + if (!mtbColt.get().getDisablePrint()) { + printCollo(progress); + } else { + progress.dismiss(); + resetMtbColt(openNewOne); + } + }) + , ex -> + UtilityExceptions.defaultException(mContext, ex, progress) + ); + + } else { + posizionaCollo(() -> { + if (!mtbColt.get().getDisablePrint()) { + printCollo(progress); + } else { + resetMtbColt(openNewOne); + } + }, ex -> UtilityExceptions.defaultException(mContext, ex, progress)); + } + } else { + + ColliMagazzinoRESTConsumer.deleteCollo(mtbColt.get(), () -> { + progress.dismiss(); + resetMtbColt(openNewOne); + }, ex -> UtilityExceptions.defaultException(mContext, ex, progress)); + + } + } + } + + private void saveCausaleRettificaGiacenze(ProgressDialog progress, Runnable onComplete) { + + final MtbCols mtbCols = new MtbCols() + .setCausale(SettingsManager.iDB().getDefaultCausaleRettificaGiacenze()); + mtbCols.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + MtbColt cloneMtbColt = (MtbColt) mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + + cloneMtbColt.setMtbCols(new ArrayList<>()); + cloneMtbColt.getMtbCols().add(mtbCols); + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mContext, ex, progress); + } + }); + } + + private void posizionaCollo(Runnable onComplete, RunnableArgs onFailed) { + /*DialogAskPositionOfLU.makeBase(mContext, mtbColt.get(), () -> { + + }, ex -> { + + }).show();*/ + onComplete.run(); + } + + + private void printCollo(ProgressDialog progress) { + + this.showAskPrint(shouldPrint -> { + + if(shouldPrint) { + PrinterRESTConsumer.getAvailablePrinters(SettingsManager.i().userSession.depo.getCodMdep(), new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + + if (value.size() > 0) { + + try { + ReportManager.getRightReportNameByMtbColt(mtbColt.get(), reportName -> { + + PrinterRESTConsumer.printCollo(value.get(0), + mtbColt.get(), + 1, + reportName, + () -> { + progress.dismiss(); + resetMtbColt(true); + + Resources res = mContext.getResources(); + String errorMessage = res.getText(R.string.alert_print_completed_message).toString(); + DialogSimpleMessageHelper.makeSuccessDialog(mContext, res.getText(R.string.completed).toString(), new SpannableString(errorMessage), null, null).show(); + }, ex -> { + UtilityLogger.errorMe(ex); + progress.dismiss(); + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + showPrintErrorDialog(errorMessage); + }); + + }, ex -> { + UtilityLogger.errorMe(ex); + progress.dismiss(); + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + showPrintErrorDialog(errorMessage); + }); + } catch (Exception ex) { + progress.dismiss(); + UtilityLogger.errorMe(ex); + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + showPrintErrorDialog(errorMessage); + } + + } else { + progress.dismiss(); + String errorMessage = "Nessuna stampante configurata"; + showPrintErrorDialog(errorMessage); + } + } + + @Override + public void onFailed(Exception ex) { + progress.dismiss(); + UtilityLogger.errorMe(ex); + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + showPrintErrorDialog(errorMessage); + } + }); + } else { + progress.dismiss(); + resetMtbColt(true); + } + + }); + } + + + private void showAskPrint(RunnableArgs onComplete) { + DialogSimpleMessageHelper.makeInfoDialog( + mContext, + mContext.getResources().getString(R.string.action_print_ul), + new SpannableString(mContext.getResources().getString(R.string.ask_print_message)), + null, + () -> onComplete.run(true), + () -> onComplete.run(false)).show(); + } + + private void showPrintErrorDialog(String message) { + DialogSimpleMessageHelper.makeErrorDialog( + mContext, + new SpannableString(message), + null, + null, + R.string.button_ignore_print, + () -> resetMtbColt(true)).show(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java new file mode 100644 index 00000000..9fc12e0a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/settings/MainSettingsFragment.java @@ -0,0 +1,55 @@ +package it.integry.integrywmsnative.gest.settings; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import butterknife.ButterKnife; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.databinding.FragmentMainSettingsBinding; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; + +public class MainSettingsFragment extends Fragment implements ITitledFragment { + + private FragmentMainSettingsBinding mBinding; + + public MainSettingsFragment() { + // Required empty public constructor + } + + public static MainSettingsFragment newInstance() { + MainSettingsFragment fragment = new MainSettingsFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public String getTitle(Context context){ + return context.getText(R.string.settings_category).toString(); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //init(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_settings, container, false); + + ButterKnife.bind(this, mBinding.getRoot()); + + return mBinding.getRoot(); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/settings/SettingsPreferenceFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/settings/SettingsPreferenceFragment.java new file mode 100644 index 00000000..26abb8aa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/settings/SettingsPreferenceFragment.java @@ -0,0 +1,99 @@ +package it.integry.integrywmsnative.gest.settings; + +import android.content.Context; +import android.os.Bundle; +import android.support.v7.preference.CheckBoxPreference; +import android.support.v7.preference.EditTextPreference; +import android.support.v7.preference.ListPreference; +import android.support.v7.preference.PreferenceCategory; +import android.support.v7.preference.PreferenceFragmentCompat; +import android.support.v7.preference.PreferenceScreen; +import android.support.v7.view.ContextThemeWrapper; +import android.util.TypedValue; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.settings.SharedPrefKeys; +import it.integry.integrywmsnative.core.utility.UtilityArray; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; + +import static br.com.zbra.androidlinq.Linq.stream; + +public class SettingsPreferenceFragment extends PreferenceFragmentCompat implements ITitledFragment { + @Override + public void onCreatePreferences(Bundle bundle, String s) { + + PrinterRESTConsumer.getAvailablePrinters(new ISimpleOperationCallback>() { + @Override + public void onSuccess(final List availablePrinters) { + initScreen(availablePrinters); + } + + @Override + public void onFailed(Exception ex) { + + } + }); + + + + } + + + + @Override + public String getTitle(Context context) { + return context.getText(R.string.settings_category).toString(); + } + + + + private void initScreen(List availablePrinters) { + // Load the Preferences from the XML file + Context activityContext = getActivity(); + + PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(activityContext); + setPreferenceScreen(preferenceScreen); + + TypedValue themeTypedValue = new TypedValue(); + activityContext.getTheme().resolveAttribute(R.attr.preferenceTheme, themeTypedValue, true); + ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(activityContext, themeTypedValue.resourceId); + + // We instance each Preference using our ContextThemeWrapper object + PreferenceCategory preferenceCategory = new PreferenceCategory(contextThemeWrapper); + preferenceCategory.setTitle("Category test"); + + EditTextPreference editTextPreference = new EditTextPreference(contextThemeWrapper); + editTextPreference.setKey("edittext"); + editTextPreference.setTitle("EditText test"); + + CheckBoxPreference checkBoxPreference = new CheckBoxPreference(contextThemeWrapper); + checkBoxPreference.setTitle("Checkbox test"); + checkBoxPreference.setKey("checkbox"); + checkBoxPreference.setChecked(true); + + availablePrinters.add(0, "Nessuna"); + String[] availablePritersArray = UtilityArray.listToArray(availablePrinters, String.class); + + ListPreference listPreferece = new ListPreference(contextThemeWrapper); + listPreferece.setTitle("Current printer"); + listPreferece.setKey(SharedPrefKeys.ACCETTAZIONE_PRINTER); + listPreferece.setEntries(availablePritersArray); + listPreferece.setEntryValues(availablePritersArray); + + // It's REALLY IMPORTANT to add Preferences with child Preferences to the Preference Hierarchy first + // Otherwise, the PreferenceManager will fail to load their keys + + // First we add the category to the root PreferenceScreen + getPreferenceScreen().addPreference(preferenceCategory); + + // Then their child to it + preferenceCategory.addPreference(editTextPreference); + preferenceCategory.addPreference(checkBoxPreference); + preferenceCategory.addPreference(listPreferece); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java new file mode 100644 index 00000000..a6eeb72e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/MainVenditaFragment.java @@ -0,0 +1,371 @@ +package it.integry.integrywmsnative.gest.vendita; + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.text.Html; +import android.text.SpannableString; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.ButterKnife; +import butterknife.OnClick; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.CommonRESTException; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; +import it.integry.integrywmsnative.core.interfaces.IRecyclerFragment; +import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityToast; +import it.integry.integrywmsnative.databinding.FragmentMainVenditaBinding; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.gest.vendita.core.MainListVenditaAdapter; +import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper; +import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzato; +import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzatoViewModel; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.vendita.viewmodel.VenditaViewModel; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.VenditaOrdineInevasoActivity; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.waterfalltoolbar.WaterfallToolbar; + +public class MainVenditaFragment extends Fragment implements ITitledFragment, IRecyclerFragment, ISelectAllFragment, IFilterableFragment { + + private static WaterfallToolbar mWaterfallToolbar; + + private VenditaHelper mHelper; + private FragmentMainVenditaBinding mBinding = null; + private VenditaViewModel mViewModel; + + private MainListVenditaAdapter mAdapter; + + private List mOriginalOrderList; + private List groupedOrdiniInevasi; + + private DialogVenditaFiltroAvanzatoViewModel mAppliedFilterViewModel; + + private int barcodeScannerIstanceID = -1; + + + + public MainVenditaFragment() { + + } + + public static MainVenditaFragment newInstance() { + MainVenditaFragment fragment = new MainVenditaFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public String getTitle(Context context){ + return context.getText(R.string.vendita_title_fragment).toString(); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + } + + init(); + } + + + @Override + public void onDestroy() { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onDestroy(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_vendita, container, false); + + mBinding.setView(this); + mBinding.venditaMainList.setLayoutManager(new LinearLayoutManager(getActivity())); + mBinding.venditaMainFab.hide(); + + ButterKnife.bind(this, mBinding.getRoot()); + + mWaterfallToolbar.setRecyclerView(mBinding.venditaMainList); + + return mBinding.getRoot(); + } + + private void init(){ + + final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), + getText(R.string.loading) + " ...", true); + + mHelper = new VenditaHelper(getActivity()); + mViewModel = new VenditaViewModel(getActivity(), this, mBinding, mHelper); + + mHelper.loadOrdini(new VenditaHelper.ILoadOrdiniCallback() { + @Override + public void onLoadSuccess(List ordini) { + UtilityToast.showToast("Caricati " + ordini.size() + " ordini"); + mOriginalOrderList = ordini; + mViewModel.setListOrder(ordini); + + groupOrdini(ordini); + initRecyclerView(); + progress.dismiss(); + } + + @Override + public void onLoadFail(Exception ex) { + mOriginalOrderList = new ArrayList<>(); + progress.dismiss(); + + String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); + if(errorMessage == null) errorMessage = ex.getMessage(); + DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show(); + } + }); + + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(mViewModel.onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); + } + + + public void groupOrdini(List ordini){ + + groupedOrdiniInevasi = new ArrayList<>(); + + //Splitto gli ordini per codAnagOrd (Cliente) + Stream.of(ordini) + .distinctBy(OrdineVenditaInevasoDTO::getCodAnagOrd) + .sortBy(OrdineVenditaInevasoDTO::getRagSocOrd) + .map(x -> x.getCodAnagOrd() + "#_#" + x.getRagSocOrd()) + .forEach(anagOrd -> { + + String codAnagOrd = anagOrd.substring(0, anagOrd.indexOf("#_#")); + String ragSocOrd = anagOrd.substring(anagOrd.indexOf("#_#") + 3, anagOrd.length()); + + OrdineVenditaGroupedInevasoDTO groupedOrdine = new OrdineVenditaGroupedInevasoDTO(); + + groupedOrdine.codAnagClie = codAnagOrd; + groupedOrdine.nomeCliente = ragSocOrd; + groupedOrdine.ordini = new ArrayList<>(); + + + //Raggruppo gli ordini del singolo fornitore suddivisi per data, dataCons e numero + Stream.of(ordini) + .filter(x -> x.getCodAnagOrd().equalsIgnoreCase(codAnagOrd)) + .distinctBy(x -> x.getDataOrdS() + " - " + x.getDataConsS() + " - " + x.getNumOrd()) + .forEach(ord -> { + + + OrdineVenditaGroupedInevasoDTO.Ordine rigaOrdine = new OrdineVenditaGroupedInevasoDTO.Ordine(); + + rigaOrdine + .setData(ord.getDataOrdS()) + .setNumero(ord.getNumOrd()) + .setCodAnagOrd(ord.getCodAnagOrd()) + .setRagSocOrd(ord.getRagSocOrd()) + .setPesoTotale(ord.getPesoTotale() != null ? ord.getPesoTotale().floatValue() : null) + .setBarcode(ord.getBarcode()) + .setTermCons(ord.getTermCons()) + .setDataCons(ord.getDataConsS()) + .setRifOrd(ord.getRifOrd()) + .setGestione(ord.getGestione()); + + rigaOrdine.clienti = new ArrayList<>(); + + + //Leggo tutti i clienti dell'ordine corrente + Stream.of(ordini) + .filter(x -> x.getCodAnagOrd().equalsIgnoreCase(codAnagOrd) && + x.getNumOrd().equals(ord.getNumOrd()) && + x.getDataOrdS().equalsIgnoreCase(ord.getDataOrdS()) && + x.getDataConsS().equalsIgnoreCase(ord.getDataConsS())) + .distinctBy(OrdineVenditaInevasoDTO::getCodJcom) + .forEach(ordCliente -> { + + OrdineVenditaGroupedInevasoDTO.Cliente cliente = new OrdineVenditaGroupedInevasoDTO.Cliente(); + + cliente.codJcom = ordCliente.getCodJcom(); + cliente.ragSocCom = ordCliente.getRagSocCom(); + cliente.descrCom = ordCliente.getDescrizioneCom(); + cliente.dataCons = ordCliente.getDataConsS(); + cliente.numCnf = ordCliente.getNumCnfdaEvadere() != null ? ordCliente.getNumCnfdaEvadere().floatValue() : 0; + cliente.rifOrd = ordCliente.getRifOrd(); + + rigaOrdine.clienti.add(cliente); + + }); + + groupedOrdine.ordini.add(rigaOrdine); + + + }); + + groupedOrdiniInevasi.add(groupedOrdine); + + }); + + + } + + private void initRecyclerView() { + mAdapter = new MainListVenditaAdapter(getActivity(), groupedOrdiniInevasi, onGroupSelectionChanged); + mBinding.venditaMainList.setAdapter(mAdapter); + } + + public void refreshRecyclerView() { + mAdapter.updateItems(groupedOrdiniInevasi); + } + + RunnableArgs onGroupSelectionChanged = dto -> { + List selectedOrders = mHelper.getSelectedOrders(groupedOrdiniInevasi); + + if(!SettingsManager.iDB().isFlagMultiClienteOrdV()){ + + if(selectedOrders != null && selectedOrders.size() > 1){ + for (OrdineVenditaGroupedInevasoDTO selectedOrder : selectedOrders) { + if(!dto.codAnagClie.equalsIgnoreCase(selectedOrder.codAnagClie)) { + Stream.of(selectedOrder.ordini).forEach(x -> x.setCheckbox(false)); + } + } + } + } + + if(selectedOrders != null && selectedOrders.size() > 0) mBinding.venditaMainFab.show(); + else mBinding.venditaMainFab.hide(); + }; + + + @OnClick(R.id.vendita_main_fab) + public void onClick(View view) { + + List selectedOrders = mHelper.getSelectedOrders(groupedOrdiniInevasi); + List barcodes = new ArrayList<>(); + + String dataCons = null; + + for(OrdineVenditaGroupedInevasoDTO ordine : selectedOrders){ + for(OrdineVenditaGroupedInevasoDTO.Ordine righeOrd : ordine.ordini){ + if(!barcodes.contains(righeOrd.getBarcode())) barcodes.add(righeOrd.getBarcode()); + + if(dataCons == null) dataCons = righeOrd.getDataConsS(); + else if(!dataCons.equalsIgnoreCase(righeOrd.getDataConsS())) dataCons = ""; + } + } + + final ProgressDialog progress = ProgressDialog.show(getActivity(), getText(R.string.waiting), + getText(R.string.loading) + " ...", true); + + mHelper.retrievePickingList(barcodes, dataCons, new VenditaHelper.ILoadPickingListCallback() { + @Override + public void onLoadSuccess(final List ordini) { + + + mHelper.getBancaliVenditaGiaRegistrati(selectedOrders, mtbColtList -> { + + progress.dismiss(); + + List codMarts = Stream.of(ordini) + .distinctBy(PickingObjectDTO::getCodMart) + .map(PickingObjectDTO::getCodMart) + .toList(); + + int alreadyRegisteredUL = mtbColtList.size(); + + DialogSimpleMessageHelper.makeInfoDialog(getActivity(), + getText(R.string.orders).toString(), + Html.fromHtml(String.format(getActivity().getResources().getQuantityString(R.plurals.loaded_orders_message, barcodes.size()), barcodes.size()) + + "
" + + "" + codMarts.size() + " " + getActivity().getResources().getQuantityString(R.plurals.available_articles, codMarts.size()) + + "
" + + "" + alreadyRegisteredUL + " " + getActivity().getResources().getQuantityString(R.plurals.already_registered_lu, alreadyRegisteredUL)), + null, + () -> { + + Intent myIntent = new Intent(getActivity(), VenditaOrdineInevasoActivity.class); + myIntent.putExtra("keyPickingList", (ArrayList) ordini); //Optional parameters + myIntent.putExtra("keyTestateOrdini", (ArrayList)selectedOrders); + myIntent.putExtra("keyColliRegistrati", (ArrayList)mtbColtList); + getActivity().startActivity(myIntent); + + }).show(); + + }, ex -> UtilityExceptions.defaultException(getActivity(), ex, progress)); + + } + + @Override + public void onLoadFail(Exception ex) { + UtilityExceptions.defaultException(getActivity(), ex, progress); + } + }); + + + } + + + + @Override + public void setWaterfallToolbar(WaterfallToolbar waterfallToolbar) { + mWaterfallToolbar = waterfallToolbar; + } + + @Override + public boolean isEnabled() { + return SettingsManager.iDB().isFlagMultiClienteOrdV(); + } + + @Override + public void onSelectAll() { + if(groupedOrdiniInevasi != null && groupedOrdiniInevasi.size() > 0) { + if(mHelper.getSelectedOrders(groupedOrdiniInevasi).size() > 0){ + mHelper.deselectAll(groupedOrdiniInevasi); + } else { + //Selezionare solo quelli attualmente a video + mHelper.selectAll(groupedOrdiniInevasi); + } + + } + } + + @Override + public void onFilterClick() { + + DialogVenditaFiltroAvanzato.make(getActivity(), mOriginalOrderList, mAppliedFilterViewModel, (filteredOrderList, filter) -> { + + mAppliedFilterViewModel = filter; + + if(filteredOrderList != null){ + + groupOrdini(filteredOrderList); + refreshRecyclerView(); + } + + }).show(); + + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java new file mode 100644 index 00000000..846ba592 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/MainListVenditaAdapter.java @@ -0,0 +1,220 @@ +package it.integry.integrywmsnative.gest.vendita.core; + +import android.content.Context; +import android.support.v4.util.Pools; +import android.support.v7.widget.RecyclerView; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckBox; +import android.widget.LinearLayout; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; + +public class MainListVenditaAdapter extends RecyclerView.Adapter { + + private Context mContext; + private List mDataset; + private RunnableArgs mOnGroupSelected; + + private Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(2000); + private Pools.SynchronizedPool sPoolClienti = new Pools.SynchronizedPool(3000); + + public static class ViewHolder extends RecyclerView.ViewHolder { + // each data item is just a string in this case + private TextView mTextViewGroupHeader; + private LinearLayout mLinearLayoutGroupItemContainer; + + private List views = new ArrayList<>(); + + public ViewHolder(View v) { + super(v); + } + } + + // Provide a suitable constructor (depends on the kind of dataset) + public MainListVenditaAdapter(Context context, List myDataset, RunnableArgs onGroupSelected) { + mContext = context; + mDataset = myDataset; + mOnGroupSelected = onGroupSelected; + } + + public void updateItems(List updatedDataset) { + mDataset.clear(); + mDataset.addAll(updatedDataset); + notifyDataSetChanged(); + } + + + // Create new views (invoked by the layout manager) + @Override + public MainListVenditaAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, + int viewType) { + // create a new view + View v = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.vendita_main_list_model, parent, false); + + ViewHolder vh = new ViewHolder(v); + + TextView groupHeader = v.findViewById(R.id.vendita_main_list_group_header); + vh.mTextViewGroupHeader = groupHeader; + + LinearLayout groupItemContainer = v.findViewById(R.id.vendita_main_list_group_item_container); + vh.mLinearLayoutGroupItemContainer = groupItemContainer; + + return vh; + } + + // Replace the contents of a view (invoked by the layout manager) + @Override + public void onBindViewHolder(ViewHolder holder, int position) { + // - get element from your dataset at this position + // - replace the contents of the view with that element + + final List subGroup = mDataset.get(position).ordini; + final int finalPosition = position; + + holder.mTextViewGroupHeader.setText(mDataset.get(position).nomeCliente); + holder.itemView.setOnClickListener(view -> { + boolean newValue = true; + + for(int i = 0; i < subGroup.size(); i++){ + if(subGroup.get(i).checkBox) newValue = false; + } + + for(int i = 0; i < subGroup.size(); i++){ + subGroup.get(i).setCheckbox(newValue); + } + + mOnGroupSelected.run(mDataset.get(finalPosition)); + }); + + for (int i = 0; i < subGroup.size(); i++) { + final OrdineVenditaGroupedInevasoDTO.Ordine ordine = subGroup.get(i); + + ordine.checkBoxCallback = new ArrayList<>(); + + View groupModelViewPool = (View) sPool.acquire(); + if(groupModelViewPool == null){ + groupModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.vendita_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false); + } + + View groupModelView = groupModelViewPool; + holder.views.add(groupModelView); + + + groupModelView.setVisibility(View.VISIBLE); + + if (i % 2 == 1) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + } else { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.white)); + } + + final CheckBox checkBox = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_checkBox); + checkBox.setChecked(ordine.checkBox); + + ordine.checkBoxCallback.add(checkBox::setChecked); + + groupModelView.setOnClickListener(view -> { + checkBox.toggle(); + ordine.checkBox = checkBox.isChecked(); + mOnGroupSelected.run(mDataset.get(finalPosition)); +// mCheckBoxCallback.onToggle(checkBox.isChecked()); + }); + + TextView testataOrdTextView = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_testata_ord); + String testataOrdString = String.format(mContext.getString(R.string.ord_ven_testata), String.valueOf(ordine.getNumero()), UtilityDate.formatDate(ordine.getData(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + testataOrdTextView.setText(Html.fromHtml(testataOrdString)); + + TextView testataDataConsTextView = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_testata_data_cons); + String testataDataConsString = String.format(mContext.getString(R.string.ord_ven_testata_data_cons), UtilityDate.formatDate(ordine.getDataConsD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + testataDataConsTextView.setText(Html.fromHtml(testataDataConsString)); + + LinearLayout clientLinearLayout = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_clienti_ord); + List subGroupClienti = ordine.clienti; + + clientLinearLayout.removeAllViews(); + + for (int k = 0; k < subGroupClienti.size(); k++) { + + + View groupClienteModelViewPool = (View) sPoolClienti.acquire(); + if(groupClienteModelViewPool == null){ + groupClienteModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.vendita_main_list_group_clienti, clientLinearLayout, false); + } + + View groupClienteModelView = groupClienteModelViewPool; + + + TextView clienteComm = groupClienteModelView.findViewById(R.id.vendita_main_list_group_clienti_comm); + String clienteText; + clienteText = subGroupClienti.get(k).rifOrd; + clienteComm.setText(clienteText); + +// TextView dataCons = groupClienteModelView.findViewById(R.id.vendita_main_list_group_clienti_datacons); +// if (subGroupClienti.get(k).getDataCons() != null) { +// dataCons.setText(UtilityDate.formatDate(subGroupClienti.get(k).getDataCons(), UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH)); +// } else { +// dataCons.setText(""); +// } + + clientLinearLayout.addView(groupClienteModelView); + } + + holder.mLinearLayoutGroupItemContainer.addView(groupModelView); + } + + + } + + + @Override + public void onViewRecycled(ViewHolder holder){ + if(holder != null){ + for(int i = 0; i < holder.views.size(); i++){ + View groupModelView = holder.views.get(i); + + LinearLayout clientLinearLayout = groupModelView.findViewById(R.id.vendita_main_list_group_item_container_clienti_ord); + + for(int k = 0; k < clientLinearLayout.getChildCount(); k++){ + View cliente = clientLinearLayout.getChildAt(k); + ((ViewGroup) cliente.getParent()).removeView(cliente); + + sPoolClienti.release(cliente); + } + + ((ViewGroup) groupModelView.getParent()).removeView(groupModelView); + sPool.release(groupModelView); + } + + holder.views.clear(); + } + + super.onViewRecycled(holder); + } + + // Return the size of your dataset (invoked by the layout manager) + @Override + public int getItemCount() { + return mDataset.size(); + } + + public void setFilter(List newDataset) { + mDataset = new ArrayList<>(); + mDataset.addAll(newDataset); + notifyDataSetChanged(); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java new file mode 100644 index 00000000..2e80691a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/core/VenditaHelper.java @@ -0,0 +1,288 @@ +package it.integry.integrywmsnative.gest.vendita.core; + +import android.content.Context; +import android.text.TextUtils; +import android.util.Log; + +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.REST.RESTBuilder; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.REST.model.EsitoType; +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.DtbOrdt; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.vendita.rest.OrdiniVenditaRESTConsumerService; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +public class VenditaHelper { + + private Context mContext; + + public VenditaHelper(Context context){ + mContext = context; + } + + public void loadOrdini(final ILoadOrdiniCallback callback){ + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); + + OrdiniVenditaRESTConsumerService service = RESTBuilder.getService(OrdiniVenditaRESTConsumerService.class); + service.listOrdiniInevasi(codMdep).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + callback.onLoadSuccess(response.body().getDto()); + } else { + Log.e("Vendita", response.body().getErrorMessage()); + callback.onLoadFail(new Exception(response.body().getErrorMessage())); + } + } else { + Log.e("Vendita", response.message()); + callback.onLoadFail(new Exception(response.message())); + } + } else { + Log.e("Vendita", "Status " + response.code() + ": " + response.message()); + callback.onLoadFail(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + Log.e("Vendita", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + callback.onLoadFail(new Exception(t)); + } + }); + } + + + + public void retrievePickingList(List barcodeOrdini, String dateCons, final ILoadPickingListCallback callback){ + String codMdep = SettingsManager.i().userSession.depo.getCodMdep(); + + String joinedBarcodes = TextUtils.join(",", barcodeOrdini); + + OrdiniVenditaRESTConsumerService service = RESTBuilder.getService(OrdiniVenditaRESTConsumerService.class); + + service.getPickingList(codMdep, dateCons, joinedBarcodes).enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + callback.onLoadSuccess(response.body().getDto()); + } else { + Log.e("Vendita", response.body().getErrorMessage()); + callback.onLoadFail(new Exception(response.message())); + } + } else { + Log.e("Vendita", response.message()); + callback.onLoadFail(new Exception(response.message())); + } + } else { + Log.e("Vendita", "Status " + response.code() + ": " + response.message()); + callback.onLoadFail(new Exception("Status " + response.code() + ": " + response.message())); + } + } + + @Override + public void onFailure(Call>> call, Throwable t) { + Log.e("Vendita", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + callback.onLoadFail(new Exception(t)); + } + }); + + } + + + + public void getBancaliVenditaGiaRegistrati(List orders, RunnableArgs> onComplete, RunnableArgs onFailed) { + + String baseSql = "SELECT DISTINCT mtb_colt.* " + + "FROM mtb_colt, mtb_colr " + + "WHERE mtb_colt.gestione = mtb_colr.gestione AND " + + "mtb_colt.ser_collo = mtb_colr.ser_collo AND " + + "mtb_colt.data_collo = mtb_colr.data_collo AND " + + "mtb_colt.num_collo = mtb_colr.num_collo AND " + + "mtb_colt.gestione = 'V' AND " + + "mtb_colt.data_doc is null AND "; + + String whereCond = ""; + + for(int i = 0; i < orders.size(); i++){ + + List currentOrders = orders.get(i).ordini; + + for(int j = 0; j < currentOrders.size(); j++){ + + whereCond += "(mtb_colr.data_ord = '" + UtilityDate.formatDate(currentOrders.get(j).getData(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH) + "' " + + "AND mtb_colr.num_ord = " + currentOrders.get(j).getNumero() + ") "; + + if(i != (orders.size() - 1)){ + whereCond += "OR "; + } else if(j != (currentOrders.size() - 1)) { + whereCond += "OR "; + } + } + } + + baseSql += "( " + whereCond + ")"; + + Type typeOfObjectsList = new TypeToken>() {}.getType(); + SystemRESTConsumer.processSql(baseSql, typeOfObjectsList, new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + if(onComplete != null) onComplete.run(value); + } + + @Override + public void onFailed(Exception ex) { + if(onFailed != null) onFailed.run(ex); + } + }); + + } + + + public void getOrdiniInCommessaCollo(MtbColt testataCollo, RunnableArgs> onComplete, RunnableArgs onFailed) { + + + + OrdiniVenditaRESTConsumerService service = RESTBuilder.getService(OrdiniVenditaRESTConsumerService.class); + service.getOrdiniInCommessaCollo( + testataCollo.getDataColloS(), + testataCollo.getNumCollo(), + testataCollo.getSerCollo(), + testataCollo.getGestione(), + GestioneEnum.VENDITA.getText(), + SettingsManager.i().userSession.depo.getCodMdep()) + .enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + + if(response.isSuccessful()) { + + if(response.body() != null) { + if(response.body().getEsito() == EsitoType.OK) { + onComplete.run(response.body().getDto()); + } else { + Log.e("getOrdiniInCommCollo", response.body().getErrorMessage()); + onFailed.run(new Exception(response.body().getErrorMessage())); + } + } else { + Log.e("getOrdiniInCommCollo", response.message()); + onFailed.run(new Exception(response.message())); + } + } else { + Log.e("getOrdiniInCommCollo", "Status " + response.code() + ": " + response.message()); + onFailed.run(new Exception("Status " + response.code() + ": " + response.message())); + } + + } + + @Override + public void onFailure(Call>> call, Throwable t) { + Log.e("getOrdiniInCommCollo", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + onFailed.run(new Exception(t)); + } + }); + + } + + + + + public List getSelectedOrders(List groupedOrdiniInevasi){ + List selectedOrdini = new ArrayList<>(); + + for(int i = 0; i < groupedOrdiniInevasi.size(); i++){ + List selectedOrdiniGroup = new ArrayList<>(); + + for(int j = 0; j < groupedOrdiniInevasi.get(i).ordini.size(); j++){ + if(groupedOrdiniInevasi.get(i).ordini.get(j).checkBox) { + selectedOrdiniGroup.add(groupedOrdiniInevasi.get(i).ordini.get(j)); + } + } + + if(selectedOrdiniGroup.size() > 0) { + try { + OrdineVenditaGroupedInevasoDTO cloneOrdine = groupedOrdiniInevasi.get(i).clone(); + cloneOrdine.ordini = selectedOrdiniGroup; + selectedOrdini.add(cloneOrdine); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } + } + + return selectedOrdini; + } + + + + public void selectAll(List groupedOrdiniInevasi) { + toggleSelection(groupedOrdiniInevasi, true); + } + + public void deselectAll(List groupedOrdiniInevasi) { + toggleSelection(groupedOrdiniInevasi, false); + } + + public void toggleSelection(List groupedOrdiniInevasi, boolean value) { + for(int i = 0; i < groupedOrdiniInevasi.size(); i++){ + for(int j = 0; j < groupedOrdiniInevasi.get(i).ordini.size(); j++){ + groupedOrdiniInevasi.get(i).ordini.get(j).setCheckbox(value); + } + } + } + + + + + + + + public interface ILoadOrdiniCallback { + + + void onLoadSuccess(List ordini); + + void onLoadFail(Exception ex); + + } + + + public interface ILoadPickingListCallback { + + void onLoadSuccess(List ordini); + + void onLoadFail(Exception ex); + + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzato.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzato.java new file mode 100644 index 00000000..1ef63220 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzato.java @@ -0,0 +1,317 @@ +package it.integry.integrywmsnative.gest.vendita.dialogs; + +import android.app.AlertDialog; +import android.app.DatePickerDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.databinding.DataBindingUtil; +import android.support.design.widget.BottomSheetBehavior; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.Button; + +import com.annimon.stream.Stream; +import com.annimon.stream.function.Predicate; + +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.di.BindableString; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.DialogVenditaFiltroAvanzatoBinding; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; + + +public class DialogVenditaFiltroAvanzato { + + + private AlertDialog currentAlert; + private Context currentContext; + + private RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> currentOnFilterDone; + + private List currentOrderList; + private List currentFilteredOrderList; + + private Predicate currentNumOrdsPredicate = null; + private Predicate currentClientePredicate = null; + private Predicate currentDataConsPredicate = null; + private Predicate currentTermConsPredicate = null; + private Predicate currentAutomezzoPredicate = null; + + private boolean firstInit = true; + + public static AlertDialog make(final Context context, final List ordersList, RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { + return new DialogVenditaFiltroAvanzato(context, ordersList, null, onDismiss).currentAlert; + } + + public static AlertDialog make(final Context context, + final List ordersList, + DialogVenditaFiltroAvanzatoViewModel baseViewModel, + RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { + return new DialogVenditaFiltroAvanzato(context, ordersList, baseViewModel, onDismiss).currentAlert; + } + + private DialogVenditaFiltroAvanzato(final Context context, final List ordersList, DialogVenditaFiltroAvanzatoViewModel baseViewModel, RunnableArgss, DialogVenditaFiltroAvanzatoViewModel> onDismiss) { + currentContext = context; + currentOrderList = ordersList; + currentOnFilterDone = onDismiss; + + DialogVenditaFiltroAvanzatoViewModel viewModel = baseViewModel != null ? baseViewModel : new DialogVenditaFiltroAvanzatoViewModel(); + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + + DialogVenditaFiltroAvanzatoBinding contentView = DataBindingUtil.inflate(inflater, R.layout.dialog_vendita_filtro_avanzato, null, false); + + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) + .setView(contentView.getRoot()) + .setPositiveButton(context.getText(R.string.confirm), null) + .setNegativeButton(context.getText(R.string.abort), null) + .setNeutralButton(context.getText(R.string.reset), null); + + contentView.setViewmodel(viewModel); + initViewModel(viewModel, contentView); + initView(contentView, viewModel); + + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); + + + + currentAlert.setOnShowListener(dialogInterface -> { + + Button button = ((AlertDialog) dialogInterface).getButton(AlertDialog.BUTTON_NEUTRAL); + button.setOnClickListener(view -> { + // TODO Do something + resetAll(viewModel); + }); + }); + + + currentAlert.setOnDismissListener(dialogInterface -> { + if(currentOnFilterDone != null) currentOnFilterDone.run(currentFilteredOrderList, viewModel); + }); + + refreshList(); + } + + private void resetAll(DialogVenditaFiltroAvanzatoViewModel viewModel) { + viewModel.numOrds.set(null); + viewModel.numOrds.set(null); + viewModel.cliente.set(null); + viewModel.dataConsegna.set(null); + viewModel.terminiConsegna.set(null); + viewModel.automezzo.set(null); + } + + private void initView(DialogVenditaFiltroAvanzatoBinding bindings, DialogVenditaFiltroAvanzatoViewModel viewModel) { + + bindings.inputDataCons.setOnClickListener(view -> { + Calendar c = Calendar.getInstance(); + + if(viewModel.dataConsegnaDate != null) { + c.setTime(viewModel.dataConsegnaDate); + } + + int mYear = c.get(Calendar.YEAR); + int mMonth = c.get(Calendar.MONTH); + int mDay = c.get(Calendar.DAY_OF_MONTH); + + DatePickerDialog datePickerDialog = new DatePickerDialog(currentContext, + (view2, year, month, day) -> { + + viewModel.dataConsegnaDate = new GregorianCalendar(year, month, day).getTime(); + viewModel.dataConsegna.set(UtilityDate.formatDate(viewModel.dataConsegnaDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + + }, mYear, mMonth, mDay); + datePickerDialog.show(); + }); + + bindings.inputTermCons.setOnClickListener(view -> { + + AlertDialog.Builder builderSingle = new AlertDialog.Builder(currentContext); + builderSingle.setTitle(R.string.terms_of_delivery); + + final ArrayAdapter arrayAdapter = new ArrayAdapter(currentContext, android.R.layout.select_dialog_singlechoice); + arrayAdapter.addAll(getAvailableTermCons()); + + builderSingle.setAdapter(arrayAdapter, (dialogInterface, i) -> { + viewModel.terminiConsegna.set(arrayAdapter.getItem(i)); + }); + builderSingle.show(); + + }); + + bindings.inputAutomezzo.setOnClickListener(view -> { + + AlertDialog.Builder builderSingle = new AlertDialog.Builder(currentContext); + builderSingle.setTitle(R.string.vehicle); + + final ArrayAdapter arrayAdapter = new ArrayAdapter(currentContext, android.R.layout.select_dialog_singlechoice); + arrayAdapter.addAll(getAvailableAutomezzi()); + + builderSingle.setAdapter(arrayAdapter, (dialogInterface, i) -> { + viewModel.automezzo.set(arrayAdapter.getItem(i)); + }); + builderSingle.show(); + + }); + + } + + private void initViewModel(DialogVenditaFiltroAvanzatoViewModel viewModel, DialogVenditaFiltroAvanzatoBinding bindings) { + + firstInit = true; + + BindableString.resetListeners(viewModel.numOrds); + BindableString.registerListener(viewModel.numOrds, value -> { + if(UtilityString.isNullOrEmpty(value)) currentNumOrdsPredicate = null; + else { + //String numOrdTrimmed = value.replaceAll(" ", ""); + String[] numOrdsSplitted = value.split("[,\\ ]"); + + + try{ + List numOrdsInteger = Stream.of(numOrdsSplitted) + .filter(x -> !UtilityString.isNullOrEmpty(x)) + .map(Integer::parseInt).toList(); + + currentNumOrdsPredicate = o -> numOrdsInteger.contains(o.getNumOrd()); + + bindings.inputNumOrds.setErrorEnabled(false); + bindings.inputNumOrds.setError(""); + } catch (NumberFormatException ex) { + currentNumOrdsPredicate = null; + + bindings.inputNumOrds.setErrorEnabled(true); + bindings.inputNumOrds.setError(currentContext.getResources().getString(R.string.error)); + } + + } + + if(!firstInit) refreshList(); + }); + viewModel.numOrds.refresh(); + + + BindableString.resetListeners(viewModel.cliente); + BindableString.registerListener(viewModel.cliente, value -> { + if(UtilityString.isNullOrEmpty(value)) currentClientePredicate = null; + else { + currentClientePredicate = o -> o.getRagSocOrd().toLowerCase().contains(value); + } + + if(!firstInit) refreshList(); + }); + viewModel.cliente.refresh(); + + + + + BindableString.resetListeners(viewModel.dataConsegna); + BindableString.registerListener(viewModel.dataConsegna, value -> { + if(UtilityString.isNullOrEmpty(value)) currentDataConsPredicate = null; + else { + currentDataConsPredicate = o -> o.getDataConsD().equals(viewModel.dataConsegnaDate); + } + + if(!firstInit) refreshList(); + }); + viewModel.dataConsegna.refresh(); + + + + + BindableString.resetListeners(viewModel.terminiConsegna); + BindableString.registerListener(viewModel.terminiConsegna, value -> { + if(UtilityString.isNullOrEmpty(value)) currentTermConsPredicate = null; + else { + currentTermConsPredicate = o -> o.getTermCons() != null && o.getTermCons().equalsIgnoreCase(value); + } + + if(!firstInit) refreshList(); + }); + viewModel.terminiConsegna.refresh(); + + + + + BindableString.resetListeners(viewModel.automezzo); + BindableString.registerListener(viewModel.automezzo, value -> { + if(UtilityString.isNullOrEmpty(value)) currentAutomezzoPredicate = null; + else { + currentAutomezzoPredicate = o -> o.getCodAuto().toLowerCase().contains(value); + } + + if(!firstInit) refreshList(); + }); + viewModel.automezzo.refresh(); + + if(firstInit) refreshList(); + firstInit = false; + + + } + + private List getAvailableTermCons() { + if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null){ + currentFilteredOrderList = currentOrderList; + } else { + Stream tmpStream = Stream.of(currentOrderList) + .filter(x -> + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) + ); + + currentFilteredOrderList = tmpStream.toList(); + } + + return Stream.of(currentFilteredOrderList).map(OrdineVenditaInevasoDTO::getTermCons).distinct().withoutNulls().toList(); + } + + private List getAvailableAutomezzi() { + if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null){ + currentFilteredOrderList = currentOrderList; + } else { + Stream tmpStream = Stream.of(currentOrderList) + .filter(x -> + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) + ); + + currentFilteredOrderList = tmpStream.toList(); + } + + return Stream.of(currentFilteredOrderList).map(OrdineVenditaInevasoDTO::getCodAuto).distinct().withoutNulls().toList(); + } + + private void refreshList() { + + if(currentNumOrdsPredicate == null && currentClientePredicate == null && currentDataConsPredicate == null && currentTermConsPredicate == null){ + currentFilteredOrderList = currentOrderList; + } else { + Stream tmpStream = Stream.of(currentOrderList) + .filter(x -> + (currentNumOrdsPredicate == null || (currentNumOrdsPredicate != null && currentNumOrdsPredicate.test(x))) && + (currentClientePredicate == null || (currentClientePredicate != null && currentClientePredicate.test(x))) && + (currentDataConsPredicate == null || (currentDataConsPredicate != null && currentDataConsPredicate.test(x))) && + (currentTermConsPredicate == null || (currentTermConsPredicate != null && currentTermConsPredicate.test(x))) && + (currentAutomezzoPredicate == null || (currentAutomezzoPredicate != null && currentAutomezzoPredicate.test(x))) + ); + + currentFilteredOrderList = tmpStream.toList(); + } + + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzatoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzatoViewModel.java new file mode 100644 index 00000000..22bb6a58 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dialogs/DialogVenditaFiltroAvanzatoViewModel.java @@ -0,0 +1,21 @@ +package it.integry.integrywmsnative.gest.vendita.dialogs; + +import android.support.design.widget.BottomSheetBehavior; + +import java.util.Date; + +import it.integry.integrywmsnative.core.di.BindableFloat; +import it.integry.integrywmsnative.core.di.BindableInteger; +import it.integry.integrywmsnative.core.di.BindableString; + +public class DialogVenditaFiltroAvanzatoViewModel { + + public BindableString numOrds = new BindableString(); + public BindableString cliente = new BindableString(); + public BindableString dataConsegna = new BindableString(); + public BindableString terminiConsegna = new BindableString(); + public BindableString automezzo = new BindableString(); + + public Date dataConsegnaDate; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaGroupedInevasoDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaGroupedInevasoDTO.java new file mode 100644 index 00000000..137983dc --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaGroupedInevasoDTO.java @@ -0,0 +1,353 @@ +package it.integry.integrywmsnative.gest.vendita.dto; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import it.integry.integrywmsnative.core.interfaces.ICheckBoxCallback; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.utility.UtilityDate; + +public class OrdineVenditaGroupedInevasoDTO implements Cloneable, Serializable, Parcelable { + + public String codAnagClie; + public String nomeCliente; + public List ordini; + + public OrdineVenditaGroupedInevasoDTO clone() throws CloneNotSupportedException { + return (OrdineVenditaGroupedInevasoDTO) super.clone(); + } + + + public static class Ordine implements Parcelable{ + private String data; + private int numero; + private String codAnagOrd = ""; + private String ragSocOrd = ""; + private Float pesoTotale; + private String barcode; + private String termCons; + private String dataCons; + private String rifOrd; + private String gestione; + + public List clienti; + + public boolean checkBox; + public List checkBoxCallback = new ArrayList<>(); + + + + public void setCheckbox(boolean newValue){ + checkBox = newValue; + if(checkBoxCallback != null && checkBoxCallback.size() > 0) { + for(ICheckBoxCallback callback : checkBoxCallback) callback.onToggle(newValue); + } + } + + + public Date getData(){ + try { + return UtilityDate.recognizeDate(data); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public Ordine setData(String data) { + this.data = data; + return this; + } + + public int getNumero() { + return numero; + } + + public Ordine setNumero(int numero) { + this.numero = numero; + return this; + } + + public String getCodAnagOrd() { + return codAnagOrd; + } + + public Ordine setCodAnagOrd(String codAnagOrd) { + this.codAnagOrd = codAnagOrd; + return this; + } + + public String getRagSocOrd() { + return ragSocOrd; + } + + public Ordine setRagSocOrd(String ragSocOrd) { + this.ragSocOrd = ragSocOrd; + return this; + } + + public Float getPesoTotale() { + return pesoTotale; + } + + public Ordine setPesoTotale(Float pesoTotale) { + this.pesoTotale = pesoTotale; + return this; + } + + public String getBarcode() { + return barcode; + } + + public Ordine setBarcode(String barcode) { + this.barcode = barcode; + return this; + } + + public String getTermCons() { + return termCons; + } + + public Ordine setTermCons(String termCons) { + this.termCons = termCons; + return this; + } + + public String getDataConsS(){ + return dataCons; + } + + public Date getDataConsD(){ + try { + return UtilityDate.recognizeDate(dataCons); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public Ordine setDataCons(String dataCons) { + this.dataCons = dataCons; + return this; + } + + public String getRifOrd() { + return rifOrd; + } + + public Ordine setRifOrd(String rifOrd) { + this.rifOrd = rifOrd; + return this; + } + + public String getGestione() { + return gestione; + } + + public GestioneEnum getGestioneEnum() { + return GestioneEnum.fromString(getGestione()); + } + + public Ordine setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public List getClienti() { + return clienti; + } + + public Ordine setClienti(List clienti) { + this.clienti = clienti; + return this; + } + + public boolean isCheckBox() { + return checkBox; + } + + public Ordine setCheckBox(boolean checkBox) { + this.checkBox = checkBox; + return this; + } + + public Ordine(){} + + protected Ordine(Parcel in) { + data = in.readString(); + numero = in.readInt(); + codAnagOrd = in.readString(); + ragSocOrd = in.readString(); + pesoTotale = in.readByte() == 0x00 ? null : in.readFloat(); + barcode = in.readString(); + termCons = in.readString(); + dataCons = in.readString(); + rifOrd = in.readString(); + if (in.readByte() == 0x01) { + clienti = new ArrayList<>(); + in.readList(clienti, Cliente.class.getClassLoader()); + } else { + clienti = null; + } + gestione = in.readString(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(data); + dest.writeInt(numero); + dest.writeString(codAnagOrd); + dest.writeString(ragSocOrd); + if (pesoTotale == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(pesoTotale); + } + dest.writeString(barcode); + dest.writeString(termCons); + dest.writeString(dataCons); + dest.writeString(rifOrd); + if (clienti == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeList(clienti); + } + dest.writeString(gestione); + } + + @SuppressWarnings("unused") + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public Ordine createFromParcel(Parcel in) { + return new Ordine(in); + } + + @Override + public Ordine[] newArray(int size) { + return new Ordine[size]; + } + }; + + } + + public static class Cliente implements Parcelable{ + public String codJcom; + public String ragSocCom; + public int idRiga; + public String dataCons; + public Float numCnf; + public String descrCom; + public String rifOrd; + + public Date getDataCons(){ + try { + return UtilityDate.recognizeDate(dataCons); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public Cliente(){} + + protected Cliente(Parcel in) { + codJcom = in.readString(); + ragSocCom = in.readString(); + idRiga = in.readInt(); + dataCons = in.readString(); + numCnf = in.readByte() == 0x00 ? null : in.readFloat(); + descrCom = in.readString(); + rifOrd = in.readString(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(codJcom); + dest.writeString(ragSocCom); + dest.writeInt(idRiga); + dest.writeString(dataCons); + if (numCnf == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(numCnf); + } + dest.writeString(descrCom); + dest.writeString(rifOrd); + } + + @SuppressWarnings("unused") + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public Cliente createFromParcel(Parcel in) { + return new Cliente(in); + } + + @Override + public Cliente[] newArray(int size) { + return new Cliente[size]; + } + }; + } + + public OrdineVenditaGroupedInevasoDTO(){} + + protected OrdineVenditaGroupedInevasoDTO(Parcel in) { + codAnagClie = in.readString(); + nomeCliente = in.readString(); + if (in.readByte() == 0x01) { + ordini = new ArrayList<>(); + in.readList(ordini, Ordine.class.getClassLoader()); + } else { + ordini = null; + } + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(codAnagClie); + dest.writeString(nomeCliente); + if (ordini == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeList(ordini); + } + } + + @SuppressWarnings("unused") + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public OrdineVenditaGroupedInevasoDTO createFromParcel(Parcel in) { + return new OrdineVenditaGroupedInevasoDTO(in); + } + + @Override + public OrdineVenditaGroupedInevasoDTO[] newArray(int size) { + return new OrdineVenditaGroupedInevasoDTO[size]; + } + }; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaInevasoDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaInevasoDTO.java new file mode 100644 index 00000000..72415d11 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/OrdineVenditaInevasoDTO.java @@ -0,0 +1,451 @@ +package it.integry.integrywmsnative.gest.vendita.dto; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import it.integry.integrywmsnative.core.utility.UtilityLogger; + +public class OrdineVenditaInevasoDTO implements Parcelable { + + private String data; + private Integer numero; + private String gestione; + private String listino; + private String termCons; + private String codAuto; + private String descrizioneAuto; + private String codVvet; + private String descrizioneVettore; + private String dataInizTrasp; + private String descrizionePaga; + private String rifOrd; + private String codAnagOrd; + private String codJcom; + private String descrizioneCom; + private String ragSocCom; + private String ragSocOrd; + private String destinatario; + private String citta; + private String provincia; + private String indirizzo; + private BigDecimal pesoTotale; + private BigDecimal numCnfdaEvadere; + private BigDecimal numCnfDisp; + private String dataCons; + private String barcode; + private Integer numRighe; + private Integer righeInPartenza; + private BigDecimal saldoContabile; + private String codVzon; + private String ragSocOrdV; + + + protected OrdineVenditaInevasoDTO(Parcel in) { + data = in.readString(); + if (in.readByte() == 0) { + numero = null; + } else { + numero = in.readInt(); + } + gestione = in.readString(); + listino = in.readString(); + termCons = in.readString(); + codAuto = in.readString(); + descrizioneAuto = in.readString(); + codVvet = in.readString(); + descrizioneVettore = in.readString(); + dataInizTrasp = in.readString(); + descrizionePaga = in.readString(); + rifOrd = in.readString(); + codAnagOrd = in.readString(); + codJcom = in.readString(); + descrizioneCom = in.readString(); + ragSocCom = in.readString(); + ragSocOrd = in.readString(); + destinatario = in.readString(); + citta = in.readString(); + provincia = in.readString(); + indirizzo = in.readString(); + dataCons = in.readString(); + barcode = in.readString(); + if (in.readByte() == 0) { + numRighe = null; + } else { + numRighe = in.readInt(); + } + if (in.readByte() == 0) { + righeInPartenza = null; + } else { + righeInPartenza = in.readInt(); + } + codVzon = in.readString(); + ragSocOrdV = in.readString(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(data); + if (numero == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numero); + } + dest.writeString(gestione); + dest.writeString(listino); + dest.writeString(termCons); + dest.writeString(codAuto); + dest.writeString(descrizioneAuto); + dest.writeString(codVvet); + dest.writeString(descrizioneVettore); + dest.writeString(dataInizTrasp); + dest.writeString(descrizionePaga); + dest.writeString(rifOrd); + dest.writeString(codAnagOrd); + dest.writeString(codJcom); + dest.writeString(descrizioneCom); + dest.writeString(ragSocCom); + dest.writeString(ragSocOrd); + dest.writeString(destinatario); + dest.writeString(citta); + dest.writeString(provincia); + dest.writeString(indirizzo); + dest.writeString(dataCons); + dest.writeString(barcode); + if (numRighe == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numRighe); + } + if (righeInPartenza == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(righeInPartenza); + } + dest.writeString(codVzon); + dest.writeString(ragSocOrdV); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public OrdineVenditaInevasoDTO createFromParcel(Parcel in) { + return new OrdineVenditaInevasoDTO(in); + } + + @Override + public OrdineVenditaInevasoDTO[] newArray(int size) { + return new OrdineVenditaInevasoDTO[size]; + } + }; + + public String getDataOrdS() { + return data; + } + + public Date getDataOrdD() throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataOrdS()); + } + + public OrdineVenditaInevasoDTO setData(String data) { + this.data = data; + return this; + } + + public Integer getNumOrd() { + return numero; + } + + public OrdineVenditaInevasoDTO setNumero(Integer numero) { + this.numero = numero; + return this; + } + + public String getGestione() { + return gestione; + } + + public OrdineVenditaInevasoDTO setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public String getListino() { + return listino; + } + + public OrdineVenditaInevasoDTO setListino(String listino) { + this.listino = listino; + return this; + } + + public String getTermCons() { + return termCons; + } + + public OrdineVenditaInevasoDTO setTermCons(String termCons) { + this.termCons = termCons; + return this; + } + + public String getCodAuto() { + return codAuto; + } + + public OrdineVenditaInevasoDTO setCodAuto(String codAuto) { + this.codAuto = codAuto; + return this; + } + + public String getDescrizioneAuto() { + return descrizioneAuto; + } + + public OrdineVenditaInevasoDTO setDescrizioneAuto(String descrizioneAuto) { + this.descrizioneAuto = descrizioneAuto; + return this; + } + + public String getCodVvet() { + return codVvet; + } + + public OrdineVenditaInevasoDTO setCodVvet(String codVvet) { + this.codVvet = codVvet; + return this; + } + + public String getDescrizioneVettore() { + return descrizioneVettore; + } + + public OrdineVenditaInevasoDTO setDescrizioneVettore(String descrizioneVettore) { + this.descrizioneVettore = descrizioneVettore; + return this; + } + + public String getDataInizTraspS() { + return dataInizTrasp; + } + + public Date getDataInizTraspD() throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataInizTraspS()); + } + + public OrdineVenditaInevasoDTO setDataInizTrasp(String dataInizTrasp) { + this.dataInizTrasp = dataInizTrasp; + return this; + } + + public String getDescrizionePaga() { + return descrizionePaga; + } + + public OrdineVenditaInevasoDTO setDescrizionePaga(String descrizionePaga) { + this.descrizionePaga = descrizionePaga; + return this; + } + + public String getRifOrd() { + return rifOrd; + } + + public OrdineVenditaInevasoDTO setRifOrd(String rifOrd) { + this.rifOrd = rifOrd; + return this; + } + + public String getCodAnagOrd() { + return codAnagOrd; + } + + public OrdineVenditaInevasoDTO setCodAnagOrd(String codAnagOrd) { + this.codAnagOrd = codAnagOrd; + return this; + } + + public String getCodJcom() { + return codJcom; + } + + public OrdineVenditaInevasoDTO setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public String getDescrizioneCom() { + return descrizioneCom; + } + + public OrdineVenditaInevasoDTO setDescrizioneCom(String descrizioneCom) { + this.descrizioneCom = descrizioneCom; + return this; + } + + public String getRagSocCom() { + return ragSocCom; + } + + public OrdineVenditaInevasoDTO setRagSocCom(String ragSocCom) { + this.ragSocCom = ragSocCom; + return this; + } + + public String getRagSocOrd() { + return ragSocOrd; + } + + public OrdineVenditaInevasoDTO setRagSocOrd(String ragSocOrd) { + this.ragSocOrd = ragSocOrd; + return this; + } + + public String getDestinatario() { + return destinatario; + } + + public OrdineVenditaInevasoDTO setDestinatario(String destinatario) { + this.destinatario = destinatario; + return this; + } + + public String getCitta() { + return citta; + } + + public OrdineVenditaInevasoDTO setCitta(String citta) { + this.citta = citta; + return this; + } + + public String getProvincia() { + return provincia; + } + + public OrdineVenditaInevasoDTO setProvincia(String provincia) { + this.provincia = provincia; + return this; + } + + public String getIndirizzo() { + return indirizzo; + } + + public OrdineVenditaInevasoDTO setIndirizzo(String indirizzo) { + this.indirizzo = indirizzo; + return this; + } + + public BigDecimal getPesoTotale() { + return pesoTotale; + } + + public OrdineVenditaInevasoDTO setPesoTotale(BigDecimal pesoTotale) { + this.pesoTotale = pesoTotale; + return this; + } + + public BigDecimal getNumCnfdaEvadere() { + return numCnfdaEvadere; + } + + public OrdineVenditaInevasoDTO setNumCnfdaEvadere(BigDecimal numCnfdaEvadere) { + this.numCnfdaEvadere = numCnfdaEvadere; + return this; + } + + public BigDecimal getNumCnfDisp() { + return numCnfDisp; + } + + public OrdineVenditaInevasoDTO setNumCnfDisp(BigDecimal numCnfDisp) { + this.numCnfDisp = numCnfDisp; + return this; + } + + public String getDataConsS() { + return dataCons; + } + + public Date getDataConsD() { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + try { + return sdf.parse(getDataConsS()); + } catch (ParseException e) { + UtilityLogger.errorMe(e); + return null; + } + } + + public OrdineVenditaInevasoDTO setDataCons(String dataCons) { + this.dataCons = dataCons; + return this; + } + + public String getBarcode() { + return barcode; + } + + public OrdineVenditaInevasoDTO setBarcode(String barcode) { + this.barcode = barcode; + return this; + } + + public Integer getNumRighe() { + return numRighe; + } + + public OrdineVenditaInevasoDTO setNumRighe(Integer numRighe) { + this.numRighe = numRighe; + return this; + } + + public Integer getRigheInPartenza() { + return righeInPartenza; + } + + public OrdineVenditaInevasoDTO setRigheInPartenza(Integer righeInPartenza) { + this.righeInPartenza = righeInPartenza; + return this; + } + + public BigDecimal getSaldoContabile() { + return saldoContabile; + } + + public OrdineVenditaInevasoDTO setSaldoContabile(BigDecimal saldoContabile) { + this.saldoContabile = saldoContabile; + return this; + } + + public String getCodVzon() { + return codVzon; + } + + public OrdineVenditaInevasoDTO setCodVzon(String codVzon) { + this.codVzon = codVzon; + return this; + } + + public String getRagSocOrdV() { + return ragSocOrdV; + } + + public OrdineVenditaInevasoDTO setRagSocOrdV(String ragSocOrdV) { + this.ragSocOrdV = ragSocOrdV; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java new file mode 100644 index 00000000..5b715d28 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/dto/PickingObjectDTO.java @@ -0,0 +1,518 @@ +package it.integry.integrywmsnative.gest.vendita.dto; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import it.integry.integrywmsnative.core.REST.model.Ean128Model; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityString; + +public class PickingObjectDTO implements Parcelable { + + private Integer numCollo; + private String gestione; + private String serCollo; + private String descrizioneEstesa; + private String codJcom; + private String codMart; + private String posizione; + private BigDecimal qtaCollo; + private String dataCollo; + private Integer idViaggio; + private String codTagl; + private String codCol; + private String dataScad; + private String codArtFor; + private String partitaMag; + private BigDecimal qtaOrd; + private BigDecimal numCnfCollo; + private BigDecimal numCnf; + private String codAlis; + private BigDecimal colliPedana; + + private MtbAart mtbAart; + + private Boolean hidden = null; + private Boolean tempHidden = null; + private PickData tempPickData = null; + + protected PickingObjectDTO(Parcel in) { + if (in.readByte() == 0) { + numCollo = null; + } else { + numCollo = in.readInt(); + } + gestione = in.readString(); + serCollo = in.readString(); + descrizioneEstesa = in.readString(); + codJcom = in.readString(); + codMart = in.readString(); + posizione = in.readString(); + dataCollo = in.readString(); + if (in.readByte() == 0) { + idViaggio = null; + } else { + idViaggio = in.readInt(); + } + codTagl = in.readString(); + codCol = in.readString(); + dataScad = in.readString(); + codArtFor = in.readString(); + partitaMag = in.readString(); + codAlis = in.readString(); + hidden = in.readByte() == 0x00 ? null : in.readByte() != 0x00; + + if (in.readByte() == 0) { + qtaCollo = null; + } else { + qtaCollo = new BigDecimal(in.readFloat()); + } + if (in.readByte() == 0) { + qtaOrd = null; + } else { + qtaOrd = new BigDecimal(in.readFloat()); + } + if (in.readByte() == 0) { + numCnf = null; + } else { + numCnf = new BigDecimal(in.readFloat()); + } + if (in.readByte() == 0) { + numCnfCollo = null; + } else { + numCnfCollo = new BigDecimal(in.readFloat()); + } + + + mtbAart = (MtbAart) in.readValue(MtbAart.class.getClassLoader()); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + if (numCollo == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(numCollo); + } + dest.writeString(gestione); + dest.writeString(serCollo); + dest.writeString(descrizioneEstesa); + dest.writeString(codJcom); + dest.writeString(codMart); + dest.writeString(posizione); + dest.writeString(dataCollo); + if (idViaggio == null) { + dest.writeByte((byte) 0); + } else { + dest.writeByte((byte) 1); + dest.writeInt(idViaggio); + } + dest.writeString(codTagl); + dest.writeString(codCol); + dest.writeString(dataScad); + dest.writeString(codArtFor); + dest.writeString(partitaMag); + dest.writeString(codAlis); + if (hidden == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeByte((byte) (hidden ? 0x01 : 0x00)); + } + + if (qtaCollo == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(qtaCollo.floatValue()); + } + if (qtaOrd == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(qtaOrd.floatValue()); + } + if (numCnf == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(numCnf.floatValue()); + } + if (numCnfCollo == null) { + dest.writeByte((byte) (0x00)); + } else { + dest.writeByte((byte) (0x01)); + dest.writeFloat(numCnfCollo.floatValue()); + } + + dest.writeValue(mtbAart); + } + + @Override + public int describeContents() { + return 0; + } + + public static final Creator CREATOR = new Creator() { + @Override + public PickingObjectDTO createFromParcel(Parcel in) { + return new PickingObjectDTO(in); + } + + @Override + public PickingObjectDTO[] newArray(int size) { + return new PickingObjectDTO[size]; + } + }; + + public Integer getNumCollo() { + return numCollo; + } + + public PickingObjectDTO setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + + public String getGestione() { + return gestione; + } + + public PickingObjectDTO setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public PickingObjectDTO setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public String getDescrizioneEstesa() { + return descrizioneEstesa; + } + + public PickingObjectDTO setDescrizioneEstesa(String descrizioneEstesa) { + this.descrizioneEstesa = descrizioneEstesa; + return this; + } + + public String getCodJcom() { + return codJcom; + } + + public PickingObjectDTO setCodJcom(String codJcom) { + this.codJcom = codJcom; + return this; + } + + public String getCodMart() { + return codMart; + } + + public PickingObjectDTO setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getPosizione() { + return posizione; + } + + public PickingObjectDTO setPosizione(String posizione) { + this.posizione = posizione; + return this; + } + + public BigDecimal getQtaCollo() { + return qtaCollo; + } + + public PickingObjectDTO setQtaCollo(BigDecimal qtaCollo) { + this.qtaCollo = qtaCollo; + return this; + } + + public String getDataColloS() { + return dataCollo; + } + + public Date getDataColloD() { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + try { + return sdf.parse(getDataColloS()); + } catch (ParseException e) { + UtilityLogger.errorMe(e); + return null; + } + } + + public String getDataColloHuman() { + Date dataColloD = null; + try { + dataColloD = getDataColloD(); + } catch (Exception ex){ + UtilityLogger.errorMe(ex); + } + + if(dataColloD != null){ + return UtilityDate.formatDate(dataColloD, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN); + } else return null; + } + + public PickingObjectDTO setDataCollo(String dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public Integer getIdViaggio() { + return idViaggio; + } + + public PickingObjectDTO setIdViaggio(Integer idViaggio) { + this.idViaggio = idViaggio; + return this; + } + + public String getCodTagl() { + return codTagl; + } + + public PickingObjectDTO setCodTagl(String codTagl) { + this.codTagl = codTagl; + return this; + } + + public String getCodCol() { + return codCol; + } + + public PickingObjectDTO setCodCol(String codCol) { + this.codCol = codCol; + return this; + } + + public String getDataScadS() { + return dataScad; + } + + public Date getDataScadD() throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataScadS()); + } + + public PickingObjectDTO setDataScad(String dataScad) { + this.dataScad = dataScad; + return this; + } + + public String getCodArtFor() { + return codArtFor; + } + + public PickingObjectDTO setCodArtFor(String codArtFor) { + this.codArtFor = codArtFor; + return this; + } + + public String getPartitaMag() { + return partitaMag; + } + + public PickingObjectDTO setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + return this; + } + + public BigDecimal getQtaOrd() { + return qtaOrd; + } + + public PickingObjectDTO setQtaOrd(BigDecimal qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public BigDecimal getNumCnfCollo() { + return numCnfCollo; + } + + public PickingObjectDTO setNumCnfCollo(BigDecimal numCnfCollo) { + this.numCnfCollo = numCnfCollo; + return this; + } + + public BigDecimal getNumCnf() { + return numCnf; + } + + public PickingObjectDTO setNumCnf(BigDecimal numCnf) { + this.numCnf = numCnf; + return this; + } + + public String getCodAlis() { + return codAlis; + } + + public PickingObjectDTO setCodAlis(String codAlis) { + this.codAlis = codAlis; + return this; + } + + public BigDecimal getColliPedana() { + return colliPedana; + } + + public PickingObjectDTO setColliPedana(BigDecimal colliPedana) { + this.colliPedana = colliPedana; + return this; + } + + public MtbAart getMtbAart() { + return mtbAart; + } + + public PickingObjectDTO setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } + + public Boolean isHidden() { + return hidden; + } + + public PickingObjectDTO setHidden(boolean hidden) { + this.hidden = hidden; + return this; + } + + public Boolean isTempHidden() { + return tempHidden; + } + + public PickingObjectDTO setTempHidden(Boolean tempHidden) { + this.tempHidden = tempHidden; + return this; + } + + public PickData getTempPickData() { + return tempPickData; + } + + public PickingObjectDTO setTempPickData(PickData tempPickData) { + this.tempPickData = tempPickData; + return this; + } + + public static class PickData { + private String batchLot; + private BigDecimal qtaTot; + private BigDecimal qtaCnf; + private BigDecimal numCnf; + private Date dataScad; + + + public String getBatchLot() { + return batchLot; + } + + public PickData setBatchLot(String batchLot) { + this.batchLot = batchLot; + return this; + } + + public BigDecimal getQtaTot() { + return qtaTot; + } + + public PickData setQtaTot(BigDecimal qtaTot) { + this.qtaTot = qtaTot; + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public PickData setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + + public BigDecimal getNumCnf() { + return numCnf; + } + + public PickData setNumCnf(BigDecimal numCnf) { + this.numCnf = numCnf; + return this; + } + + public Date getDataScad() { + return dataScad; + } + + public PickData setDataScad(Date dataScad) { + this.dataScad = dataScad; + return this; + } + + + + public static PickData fromEan128(Ean128Model ean128Model) { + PickingObjectDTO.PickData pickData = null; + + if(ean128Model != null){ + pickData = new PickingObjectDTO.PickData(); + + if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) { + pickData.setBatchLot(ean128Model.BatchLot); + } + + try { + if(!UtilityString.isNullOrEmpty(ean128Model.BestBefore)){ + pickData.setDataScad(UtilityDate.recognizeDate(ean128Model.BestBefore)); + } else if(!UtilityString.isNullOrEmpty(ean128Model.Expiry)) { + pickData.setDataScad(UtilityDate.recognizeDate(ean128Model.Expiry)); + } + + } catch (Exception e) { + UtilityLogger.errorMe(e); + } + + + if(ean128Model.Count != null && ean128Model.Count > 0) { + //if(!UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + pickData.setNumCnf(new BigDecimal(ean128Model.Count)); + //} else { + // dto.setQtaTot(new BigDecimal(ean128Model.Count)); + //} + } + + if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) { + pickData.setQtaTot(new BigDecimal(ean128Model.NetWeightKg)); + } + + if(pickData.getQtaTot() != null && pickData.getQtaTot().floatValue() > 0 && pickData.getNumCnf() != null && pickData.getNumCnf().floatValue() > 0) { + pickData.setQtaCnf(pickData.getQtaTot().divide(pickData.getNumCnf())); + } + + } + + return pickData; + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/rest/OrdiniVenditaRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/rest/OrdiniVenditaRESTConsumerService.java new file mode 100644 index 00000000..d96a7a80 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/rest/OrdiniVenditaRESTConsumerService.java @@ -0,0 +1,24 @@ +package it.integry.integrywmsnative.gest.vendita.rest; + +import java.util.List; + +import it.integry.integrywmsnative.core.REST.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.model.DtbOrdt; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import retrofit2.Call; +import retrofit2.http.GET; +import retrofit2.http.Query; + +public interface OrdiniVenditaRESTConsumerService { + + @GET("SM2GetOrdiniVenditaInevasi") + Call>> listOrdiniInevasi(@Query("codMdep") String codMdep); + + @GET("getPickingListFromOrdini") + Call>> getPickingList(@Query("codMdep") String codMdep, @Query("dataCons") String dataCons, @Query("chiaviOrdini") String codBarreBacale); + + @GET("getOrdiniInCommCollo") + Call>> getOrdiniInCommessaCollo(@Query("dataCollo") String dataCollo, @Query("numCollo") Integer numCollo, @Query("serCollo") String serCollo, @Query("gestioneCollo") String gestioneCollo, @Query("gestioneOrdine") String gestioneOrdine, @Query("codMdep") String codMdep); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita/viewmodel/VenditaViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/viewmodel/VenditaViewModel.java new file mode 100644 index 00000000..83acbe46 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita/viewmodel/VenditaViewModel.java @@ -0,0 +1,189 @@ +package it.integry.integrywmsnative.gest.vendita.viewmodel; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.text.Html; +import android.text.SpannableString; + +import com.annimon.stream.Collectors; +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.DtbOrdt; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityPosizione; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.core.utility.UtilityToast; +import it.integry.integrywmsnative.databinding.FragmentMainVenditaBinding; +import it.integry.integrywmsnative.gest.vendita.MainVenditaFragment; +import it.integry.integrywmsnative.gest.vendita.core.VenditaHelper; +import it.integry.integrywmsnative.gest.vendita.dialogs.DialogVenditaFiltroAvanzatoViewModel; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; + +public class VenditaViewModel { + + private Activity mContext; + private MainVenditaFragment mFragment; + private FragmentMainVenditaBinding mBinding; + private VenditaHelper mHelper; + + private List mOrdini = new ArrayList<>(); + + public VenditaViewModel(Activity context, MainVenditaFragment fragment, FragmentMainVenditaBinding binding, VenditaHelper helper) { + mContext = context; + mFragment = fragment; + mBinding = binding; + mHelper = helper; + } + + public void setListOrder(List ordini) { + mOrdini = ordini; + } + + + public RunnableArgs onScanSuccessfull = data -> { + + BarcodeManager.disable(); + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + + if(UtilityBarcode.isEtichetta128(data)){ + this.executeEtichettaEan128(data, progressDialog); + } else { + progressDialog.dismiss(); + BarcodeManager.enable(); + } + + }; + + + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + BarcodeRESTConsumer.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, progressDialog); + } else { + showNoULFound(); + progressDialog.dismiss(); + BarcodeManager.enable(); + + } + + + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + showNoULFound(); + progressDialog.dismiss(); + BarcodeManager.enable(); + } + }, ex-> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private void executeEtichettaLU(String SSCC, ProgressDialog progressDialog) { + ColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { + + if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { + + if(mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO) { + //GET BY COMMESSA COLLO + mHelper.getOrdiniInCommessaCollo(mtbColt, orderList -> { + + if(orderList != null && orderList.size() > 0) { + UtilityToast.showToast("Caricati " + orderList.size() + " ordini"); + + List numOrds = Stream.of(orderList) + .map(DtbOrdt::getNumOrd) + .toList(); + + List filteredOrders = Stream.of(mOrdini) + .filter(x -> numOrds.contains(x.getNumOrd())).toList(); + + mFragment.groupOrdini(filteredOrders); + mFragment.refreshRecyclerView(); + } else { + showNoOrderFound(); + } + + progressDialog.dismiss(); + BarcodeManager.enable(); + + + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + progressDialog.dismiss(); + BarcodeManager.enable(); + + } else { + progressDialog.dismiss(); + BarcodeManager.enable(); + showWrongGestioneUL(); + } + + } else { + progressDialog.dismiss(); + BarcodeManager.enable(); + showNoULFound(); + } + + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + + private void showNoOrderFound() { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(mContext.getResources().getText(R.string.no_orders_found_message)), + null, null).show(); + } + + + private void showNoULFound() { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(mContext.getResources().getText(R.string.no_lu_found_message)), + null, null).show(); + } + + + private void showWrongGestioneUL() { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(Html.fromHtml(mContext.getResources().getText(R.string.gestione_V_not_accepted_message).toString())), + null, null).show(); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/VenditaOrdineInevasoActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/VenditaOrdineInevasoActivity.java new file mode 100644 index 00000000..0bda6a5f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/VenditaOrdineInevasoActivity.java @@ -0,0 +1,122 @@ +package it.integry.integrywmsnative.gest.vendita_ordine_inevaso; + +import android.content.Intent; +import android.databinding.DataBindingUtil; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuItem; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.databinding.ActivityVenditaOrdineInevasoBinding; +import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; +import it.integry.integrywmsnative.gest.lista_bancali.ListaBancaliActivity; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.viewmodel.VenditaOrdineInevasoViewModel; +import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; + +public class VenditaOrdineInevasoActivity extends AppCompatActivity { + + + public ActivityVenditaOrdineInevasoBinding bindings; + private VenditaOrdineInevasoViewModel mVenditaOrdineInevasoViewModel; + private ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel; + + + private static final int PICK_UL_REQUEST = 1; // The request code + + private int barcodeScannerIstanceID = -1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + bindings = DataBindingUtil.setContentView(this, R.layout.activity_vendita_ordine_inevaso); + FragmentArticoliInColloBottomSheetBinding bindings = this.bindings.bottomSheetInclude; + mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings); + + List pickingList = (ArrayList)getIntent().getSerializableExtra("keyPickingList"); + List testateOrdini = (ArrayList)getIntent().getSerializableExtra("keyTestateOrdini"); + List colliRegistrati = (ArrayList) getIntent().getSerializableExtra("keyColliRegistrati"); + mVenditaOrdineInevasoViewModel = new VenditaOrdineInevasoViewModel( + this, mArticoliInColloBottomSheetViewModel, pickingList, testateOrdini, colliRegistrati); + + setSupportActionBar(this.bindings.toolbar); + + setTitle(R.string.activity_vendita_inevaso_title); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(mVenditaOrdineInevasoViewModel.onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false))); + } + + @Override + public boolean onSupportNavigateUp() { + onBackPressed(); + return true; + } + + @Override + public void onBackPressed() { + if(mArticoliInColloBottomSheetViewModel.isExpanded()){ + mArticoliInColloBottomSheetViewModel.collapse(); + } else if(mVenditaOrdineInevasoViewModel.thereIsAnOpenedUL()) { + mArticoliInColloBottomSheetViewModel.closeCurrentUL(); + + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onBackPressed(); + } else { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onBackPressed(); + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.activity_vendita_ordine_inevaso, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle item selection + switch (item.getItemId()) { + default: + return super.onOptionsItemSelected(item); + } + } + + + public void startListaBancaliRegistratiActivity(ArrayList mtbColts){ + Intent myIntent = new Intent(this, ListaBancaliActivity.class); + myIntent.putExtra("key", mtbColts); //Optional parameters + myIntent.putExtra(ListaBancaliActivity.Key.CanRecoverUL, true); + this.startActivityForResult(myIntent, PICK_UL_REQUEST); + } + + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // Check which request we're responding to + if (requestCode == PICK_UL_REQUEST) { + // Make sure the request was successful + if (resultCode == RESULT_OK) { + + MtbColt recoveredMtbColt = data.getParcelableExtra("key"); + + mVenditaOrdineInevasoViewModel.recoverUL(recoveredMtbColt); + } + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/MainListOrdineVenditaInevasoAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/MainListOrdineVenditaInevasoAdapter.java new file mode 100644 index 00000000..56c9577b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/MainListOrdineVenditaInevasoAdapter.java @@ -0,0 +1,256 @@ +package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core; + +import android.content.Context; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableList; +import android.graphics.Color; +import android.support.v4.util.Pools; +import android.support.v7.widget.RecyclerView; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.utility.UtilityNumber; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.interfaces.IOnOrdineVenditaRowDispatched; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.dto.VenditaOrdineInevasoListViewModel; + +public class MainListOrdineVenditaInevasoAdapter extends RecyclerView.Adapter { + + private Context mContext; + private List mDataset; + private View mEmptyView; + private ObservableArrayList mObservableDataset; + private IOnOrdineVenditaRowDispatched mOrdineRowDispatch; + + private static final Pools.SynchronizedPool sPool = new Pools.SynchronizedPool(200); + + public static class ViewHolder extends RecyclerView.ViewHolder { + // each data item is just a string in this case + protected View mGroupTitle; + protected LinearLayout mLinearLayoutGroupItemContainer; + + protected List pool = new ArrayList<>(); + + public ViewHolder(View v) { + super(v); + } + } + + public MainListOrdineVenditaInevasoAdapter(Context context, ObservableArrayList myDataset, View emptyView) { + mContext = context; + mObservableDataset = myDataset; + mEmptyView = emptyView; + + + mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList(); + mObservableDataset.addOnListChangedCallback(onListChangedCallback); + + checkIfEmpty(); + } + + public void setOnOrdineRowDispatchCallback(IOnOrdineVenditaRowDispatched ordineRowDispatch) { + mOrdineRowDispatch = ordineRowDispatch; + } + + private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback>() { + @Override + public void onChanged(ObservableList sender) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + refreshNotHiddenElements(); + notifyDataSetChanged(); + checkIfEmpty(); + } + + private void refreshNotHiddenElements() { + mDataset = Stream.of(mObservableDataset).filter(x -> !x.isHidden()).toList(); + } + }; + + + @Override + public MainListOrdineVenditaInevasoAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + View v = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.vendita_ordine_inevaso_main_list_model, parent, false); + + + ViewHolder vh = new ViewHolder(v); + + TextView descrizioneArtForn = v.findViewById(R.id.vendita_ordine_inevaso_main_list__descrizione_gruppo); + vh.mGroupTitle = descrizioneArtForn; + + LinearLayout groupItemContainer = v.findViewById(R.id.vendita_ordine_inevaso_main_list__group_item_container); + vh.mLinearLayoutGroupItemContainer = groupItemContainer; + + return vh; + } + + + // Replace the contents of a view (invoked by the layout manager) + @Override + public void onBindViewHolder(MainListOrdineVenditaInevasoAdapter.ViewHolder holder, int position) { + ((TextView)holder.mGroupTitle).setText(mDataset.get(position).descrizioneGroup); + + List subset = mDataset.get(position).rows; + + int visibleElementsCounter = 0; + + for(int i = 0; i < subset.size(); i++) { + + final VenditaOrdineInevasoListViewModel.SubItem rowItem = subset.get(i); + + if(!rowItem.getOriginalModel().isHidden() && + (rowItem.getOriginalModel().isTempHidden() == null || + (rowItem.getOriginalModel().isTempHidden() != null && !rowItem.getOriginalModel().isTempHidden()))) { + visibleElementsCounter++; + + View groupModelViewPool = (View) sPool.acquire(); + if (groupModelViewPool == null) { + groupModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.vendita_ordine_inevaso_main_list_child_group_model, holder.mLinearLayoutGroupItemContainer, false); + } + + View groupModelView = groupModelViewPool; + holder.pool.add(groupModelView); + + if (rowItem.getQtaRiservata().subtract(rowItem.getQtaOrdinata()).floatValue() >= 0 ) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha)); + } else if (rowItem.getQtaRiservata().floatValue() > 0) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha)); + } else if (visibleElementsCounter % 2 == 1) { + groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + } else { + groupModelView.setBackgroundColor(Color.WHITE); + } + + final TextView badge1 = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_badge1); + badge1.setText(rowItem.getBadge1()); + + final TextView badge2 = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_badge2); + badge2.setText(rowItem.getBadge2()); + badge2.setVisibility(UtilityString.isNullOrEmpty(rowItem.getBadge2()) ? View.GONE : View.VISIBLE); + + + final TextView descrizione = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_descrizione); + + String descrizioneString = rowItem.getDescrizione(); + int descrizioneColor = Color.BLACK; + + if (UtilityString.isNullOrEmpty(descrizioneString)) { + descrizioneString = mContext.getString(R.string.no_description); + descrizioneColor = Color.GRAY; + } else if (descrizioneString.equalsIgnoreCase(CommonConst.Config.COMMESSA_MAG)) { + descrizioneString = mContext.getString(R.string.stock); + } + + descrizione.setText(descrizioneString); + descrizione.setTextColor(descrizioneColor); + + final TextView subDescrizione1 = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_subdescrizione1); + if(rowItem.getSubDescrizione1() != null) subDescrizione1.setText(Html.fromHtml(rowItem.getSubDescrizione1())); + subDescrizione1.setVisibility(UtilityString.isNullOrEmpty(rowItem.getSubDescrizione1()) ? View.GONE : View.VISIBLE); + + final TextView subDescrizione2 = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_subdescrizione2); + if(rowItem.getSubDescrizione2() != null) subDescrizione2.setText(Html.fromHtml(rowItem.getSubDescrizione2())); + subDescrizione2.setVisibility(UtilityString.isNullOrEmpty(rowItem.getSubDescrizione2()) ? View.GONE : View.VISIBLE); + + final TextView qtaEvasa = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_qta_evasa); + qtaEvasa.setText(UtilityNumber.decimalToString(rowItem.getQtaRiservata())); + + final TextView qtaTot = groupModelView.findViewById(R.id.vendita_ordine_inevaso_main_list_group_item_qta_tot); + qtaTot.setText(UtilityNumber.decimalToString(rowItem.getQtaOrdinata())); + + + groupModelView.setOnClickListener(view -> { + if (mOrdineRowDispatch != null) { +// rowItem.getOriginalModel().setTempEan128Model(null); + mOrdineRowDispatch.onOrdineRowDispatch(rowItem.getOriginalModel()); + } + }); + + holder.mLinearLayoutGroupItemContainer.addView(groupModelView); + + } + + } + + } + + + + @Override + public void onViewRecycled(MainListOrdineVenditaInevasoAdapter.ViewHolder holder){ + if(holder != null){ + for(int i = 0; i < holder.pool.size(); i++){ + ((ViewGroup) holder.pool.get(i).getParent()).removeView(holder.pool.get(i)); + sPool.release(holder.pool.get(i)); + } + + holder.pool.clear(); + } + + super.onViewRecycled(holder); + } + + + + // Return the size of your dataset (invoked by the layout manager) + @Override + public int getItemCount() { + return mDataset.size(); + } + + + void checkIfEmpty() { + if (mEmptyView != null) { + final boolean emptyViewVisible = getItemCount() == 0; + mEmptyView.setVisibility(emptyViewVisible ? View.VISIBLE : View.GONE); + } + } + + public interface IOnOrdineRowDispatchCallback { + + void onOrdineRowDispatch(PickingObjectDTO item); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java new file mode 100644 index 00000000..e2317fa8 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/VenditaOrdineInevasoHelper.java @@ -0,0 +1,152 @@ +package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core; + +import android.content.Context; +import android.databinding.ObservableArrayList; +import android.view.View; + +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.dto.VenditaOrdineInevasoListViewModel; + +public class VenditaOrdineInevasoHelper { + + private Context mContext; + + private ObservableArrayList mListViewModels = new ObservableArrayList<>(); + + public VenditaOrdineInevasoHelper(Context context){ + mContext = context; + } + + public MainListOrdineVenditaInevasoAdapter getRightListAdapter(View emptyView) { + return new MainListOrdineVenditaInevasoAdapter(mContext, mListViewModels, emptyView); + } + + public void updateListModel(List> mDataset, List mtbColrs) throws Exception { + + mListViewModels.clear(); + + mListViewModels.addAll(getListViewModelPerPosizione(mDataset, mtbColrs)); + + } + + public List> getPickingListRaggruppataPerPosizione(List mPickingList, boolean forceHiddenCheck){ + + List listOfKnownPositions = Stream.of(mPickingList) + .map(PickingObjectDTO::getPosizione) + .distinctBy(x -> x) + .withoutNulls() + .sortBy(x -> x) + .toList(); + + listOfKnownPositions.add(null); + + List> groupedRighe = new ArrayList<>(); + for (String position : listOfKnownPositions) { + + List tmpList = Stream.of(mPickingList) + .filter(x -> (x.getPosizione() == null && position == null) || + (x.getPosizione() != null && x.getPosizione().equalsIgnoreCase(position))).toList(); + + for(int i = 0; i < tmpList.size(); i++){ + if(tmpList.get(i).isHidden() == null || forceHiddenCheck) { + PickingObjectDTO tmpItem = tmpList.get(i); + + if ( (tmpItem.getNumCollo() != null && tmpItem.getQtaCollo().floatValue() <= 0) || + (tmpItem.getNumCollo() == null && tmpItem.getQtaOrd().floatValue() <= 0)) { + tmpItem.setHidden(true); + } else tmpItem.setHidden(false); + + tmpItem.setTempHidden(false); + } + } + + if(tmpList.size() > 0){ + groupedRighe.add(tmpList); + } + + } + + return groupedRighe; + } + + + public List getListViewModelPerPosizione(List> groupedRighe, List mtbColrs) { + + List listModel = new ArrayList<>(); + + for(int i = 0; i < groupedRighe.size(); i++) { + List currentGroup = groupedRighe.get(i); + + VenditaOrdineInevasoListViewModel itemModel = new VenditaOrdineInevasoListViewModel(); + + + String posizione = UtilityString.isNullOrEmpty(currentGroup.get(0).getPosizione()) ? "N.A." : currentGroup.get(0).getPosizione(); + itemModel.descrizioneGroup = mContext.getResources().getText(R.string.position_text) + ": " + posizione; + itemModel.rows = new ArrayList<>(); + + for(int k = 0; k < currentGroup.size(); k++) { + final PickingObjectDTO currentItem = currentGroup.get(k); + final VenditaOrdineInevasoListViewModel.SubItem rowModel = new VenditaOrdineInevasoListViewModel.SubItem(); + + + + String badge1 = currentItem.getCodAlis() + " - " + (!UtilityString.isNullOrEmpty(currentItem.getCodArtFor()) ? currentItem.getCodArtFor() : currentItem.getCodMart()); + rowModel.setBadge1(badge1); + + rowModel.setBadge2(UtilityString.isNullOrEmpty(currentItem.getCodJcom()) ? null : currentItem.getCodJcom()); + + rowModel.setDescrizione(currentItem.getDescrizioneEstesa()); + + if(!UtilityString.isNullOrEmpty(currentItem.getPartitaMag())) { + rowModel.setSubDescrizione1(String.format(mContext.getResources().getText(R.string.batch_lot_text).toString(), currentItem.getPartitaMag())); + } + + if(currentItem.getNumCollo() != null) { + rowModel.setSubDescrizione2(String.format(mContext.getResources().getText(R.string.lu_number_text).toString(), currentItem.getNumCollo(), currentItem.getDataColloHuman())); + } + + rowModel.setQtaRiservata(getRigaQuantityEvasa(currentItem, mtbColrs)); + rowModel.setQtaOrdinata(currentItem.getNumCollo() != null ? currentItem.getQtaCollo() : currentItem.getQtaOrd()); + + rowModel.setOriginalModel(currentItem); + + itemModel.rows.add(rowModel); + } + listModel.add(itemModel); + } + + return listModel; + + } + + private BigDecimal getRigaQuantityEvasa(PickingObjectDTO item, List mtbColrs){ + BigDecimal currentQtaEvasa = BigDecimal.ZERO; + + if(mtbColrs != null) { + + List filteredMtbColrs = Stream.of(mtbColrs).filter( + x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()) && + ((x.getCodJcom() == null && item.getCodJcom() == null) || (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(item.getCodJcom()))) && + (!SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV() || (SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV() && ((x.getPartitaMag() == null && item.getPartitaMag() == null) || (x.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(item.getPartitaMag()))))) && + ((x.getNumColloRif() == null && item.getNumCollo() == null) || (x.getNumColloRif() != null && x.getNumColloRif().equals(item.getNumCollo())))).toList(); + + for (MtbColr mtbColr : filteredMtbColrs) { + currentQtaEvasa = currentQtaEvasa.add(mtbColr.getQtaCol()); + } + } + + return currentQtaEvasa; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/interfaces/IOnOrdineVenditaRowDispatched.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/interfaces/IOnOrdineVenditaRowDispatched.java new file mode 100644 index 00000000..d9e77f13 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/core/interfaces/IOnOrdineVenditaRowDispatched.java @@ -0,0 +1,8 @@ +package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.interfaces; + +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; + +public interface IOnOrdineVenditaRowDispatched { + + void onOrdineRowDispatch(PickingObjectDTO item); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/dto/VenditaOrdineInevasoListViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/dto/VenditaOrdineInevasoListViewModel.java new file mode 100644 index 00000000..2121b5dd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/dto/VenditaOrdineInevasoListViewModel.java @@ -0,0 +1,106 @@ +package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.dto; + +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.util.List; + +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; + +public class VenditaOrdineInevasoListViewModel { + public String descrizioneGroup; + public List rows; + + public boolean isHidden(){ + if(rows == null || rows.size() == 0) return true; + return Stream.of(rows).filter(x -> (x.originalModel.isHidden() != null && !x.originalModel.isHidden()) && + (x.originalModel.isTempHidden() != null && !x.originalModel.isTempHidden())).count() == 0; + } + + public static class SubItem { + + private String badge1; + private String badge2; + + private String descrizione; + private String subDescrizione1; + private String subDescrizione2; + private BigDecimal qtaRiservata; + private BigDecimal qtaOrdinata; + + private PickingObjectDTO originalModel; + + public String getBadge1() { + return badge1; + } + + public SubItem setBadge1(String badge1) { + this.badge1 = badge1; + return this; + } + + public String getBadge2() { + return badge2; + } + + public SubItem setBadge2(String badge2) { + this.badge2 = badge2; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public SubItem setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getSubDescrizione1() { + return subDescrizione1; + } + + public SubItem setSubDescrizione1(String subDescrizione1) { + this.subDescrizione1 = subDescrizione1; + return this; + } + + public String getSubDescrizione2() { + return subDescrizione2; + } + + public SubItem setSubDescrizione2(String subDescrizione2) { + this.subDescrizione2 = subDescrizione2; + return this; + } + + public BigDecimal getQtaRiservata() { + return qtaRiservata == null ? BigDecimal.ZERO : qtaRiservata; + } + + public SubItem setQtaRiservata(BigDecimal qtaRiservata) { + this.qtaRiservata = qtaRiservata; + return this; + } + + public BigDecimal getQtaOrdinata() { + return qtaOrdinata == null ? BigDecimal.ZERO : qtaOrdinata; + } + + public SubItem setQtaOrdinata(BigDecimal qtaOrdinata) { + this.qtaOrdinata = qtaOrdinata; + return this; + } + + public PickingObjectDTO getOriginalModel() { + return originalModel; + } + + public SubItem setOriginalModel(PickingObjectDTO originalModel) { + this.originalModel = originalModel; + return this; + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/rest/OrdineVenditaInevasoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/rest/OrdineVenditaInevasoRESTConsumerService.java new file mode 100644 index 00000000..19adc825 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/rest/OrdineVenditaInevasoRESTConsumerService.java @@ -0,0 +1,4 @@ +package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.rest; + +public interface OrdineVenditaInevasoRESTConsumerService { +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java new file mode 100644 index 00000000..4698b6b4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/vendita_ordine_inevaso/viewmodel/VenditaOrdineInevasoViewModel.java @@ -0,0 +1,977 @@ +package it.integry.integrywmsnative.gest.vendita_ordine_inevaso.viewmodel; + +import android.app.ProgressDialog; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableField; +import android.support.v7.widget.LinearLayoutManager; +import android.text.SpannableString; + +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.CommonConst; +import it.integry.integrywmsnative.core.REST.consumers.ArticoloRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.PrinterRESTConsumer; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.FiltroOrdineDTO; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.report.ReportManager; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.gest.vendita.dto.OrdineVenditaGroupedInevasoDTO; +import it.integry.integrywmsnative.gest.vendita.dto.PickingObjectDTO; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.VenditaOrdineInevasoActivity; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.VenditaOrdineInevasoHelper; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.MainListOrdineVenditaInevasoAdapter; +import it.integry.integrywmsnative.gest.vendita_ordine_inevaso.core.interfaces.IOnOrdineVenditaRowDispatched; +import it.integry.integrywmsnative.ui.StatusBarAlert; +import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback; +import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; +import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeType; + +public class VenditaOrdineInevasoViewModel implements IOnColloClosedCallback, IOnOrdineVenditaRowDispatched { + + public ObservableField isFabVisible = new ObservableField<>(); + + private VenditaOrdineInevasoActivity mActivity; + private final ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel; + + private final List mPickingList; + private List> mGroupedPickingList; + private final List mTestateOrdini; + private final List mColliRegistrati; + + private VenditaOrdineInevasoHelper mHelper; + private MainListOrdineVenditaInevasoAdapter mAdapter; + + private GestioneEnum defaultGestioneOfUL = null; + private List defaultFiltroOrdine = new ArrayList<>(); + private String defaultCodAnagOfUL = null; + private String defaultRifOrdOfUL = null; + private Integer defaultNumOrdOfUL = null; + private Date defaultDataOrdOfUL = null; + + public VenditaOrdineInevasoViewModel(VenditaOrdineInevasoActivity activity, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List pickingList, List orders, List colliRegistrati) { + this.mActivity = activity; + this.mArticoliInColloBottomSheetViewModel = articoliInColloBottomSheetViewModel; + this.mPickingList = pickingList; + this.mTestateOrdini = orders; + this.mColliRegistrati = colliRegistrati; + + this.isFabVisible.set(true); + + this.mActivity.bindings.setVariable(BR.viewmodel, this); + + this.init(); + this.initDatiPicking(); + } + + private void init(){ + mArticoliInColloBottomSheetViewModel.setOnCloseColloCallbackListener(this); + mArticoliInColloBottomSheetViewModel.setOnItemDeletedCallback(() -> this.refreshOrderBy(false)); + mArticoliInColloBottomSheetViewModel.setOnItemEditedCallback(() -> this.refreshOrderBy(false)); + + mHelper = new VenditaOrdineInevasoHelper(mActivity); + + initRecyclerView(); + } + + private void initRecyclerView(){ + //RecyclerView setup + mActivity.bindings.venditaOrdineMainList.setHasFixedSize(true); + + mActivity.bindings.venditaOrdineMainList.setLayoutManager(new LinearLayoutManager(mActivity)); + + mAdapter = mHelper.getRightListAdapter(mActivity.bindings.venditaOrdineInevasoEmptyView); + + try { + this.mGroupedPickingList = mHelper.getPickingListRaggruppataPerPosizione(mPickingList, true); + mHelper.updateListModel(this.mGroupedPickingList, null); + } catch (Exception e) { + UtilityExceptions.defaultException(mActivity, e); + } + + mAdapter.setOnOrdineRowDispatchCallback(this); + mActivity.bindings.venditaOrdineMainList.setAdapter(mAdapter); + } + + private void initDatiPicking() { + if(this.mTestateOrdini != null && this.mTestateOrdini.size() > 0){ + List flatOrderArray = new ArrayList<>(); + + Stream.of(this.mTestateOrdini).forEach(x -> flatOrderArray.addAll(x.ordini)); + + //Definizione della gestione collo di default + List foundGestioni = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getGestioneEnum) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if(foundGestioni != null && foundGestioni.size() > 1){ + UtilityExceptions.defaultException(mActivity, new Exception("Impossibile caricare ordini di diverse gestioni")); + mActivity.finish(); + return; + } else if(foundGestioni != null && foundGestioni.size() == 1){ + defaultGestioneOfUL = foundGestioni.get(0); + } else { + defaultGestioneOfUL = GestioneEnum.VENDITA; + } + + + + //Definizione del filtro ordine da applicare a tutti i colli generati + Stream.of(flatOrderArray).forEach(x -> { + defaultFiltroOrdine.add(new FiltroOrdineDTO() + .setDataOrd(x.getData()) + .setNumOrd(x.getNumero()) + .setGestioneOrd(x.getGestione())); + }); + + + + //Definizione del codAnag + List foundCodAnag = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getCodAnagOrd) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if(foundCodAnag != null && foundCodAnag.size() == 1){ + defaultCodAnagOfUL = foundCodAnag.get(0); + } + + + //Definizione del rifOrd + List foundRifOrd = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getRifOrd) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if(foundRifOrd != null && foundRifOrd.size() == 1){ + defaultRifOrdOfUL = foundRifOrd.get(0); + } + + + //Definizione del numOrd + List foundNumOrd = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getNumero) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if(foundNumOrd != null && foundNumOrd.size() == 1){ + defaultNumOrdOfUL = foundNumOrd.get(0); + } + + + //Definizione del dataOrd + List foundDataOrd = Stream.of(flatOrderArray) + .map(OrdineVenditaGroupedInevasoDTO.Ordine::getData) + .withoutNulls() + .distinctBy(x -> x) + .toList(); + + if(foundDataOrd != null && foundDataOrd.size() == 1){ + defaultDataOrdOfUL = foundDataOrd.get(0); + } + + } + } + + public void refreshOrderBy(boolean forceHiddenCheck){ + + try { + List mtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get() != null ? mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr() : null; + + this.mGroupedPickingList = mHelper.getPickingListRaggruppataPerPosizione(mPickingList, forceHiddenCheck); + mHelper.updateListModel(this.mGroupedPickingList, mtbColrs); + } catch (Exception e) { + UtilityExceptions.defaultException(mActivity, e); + } + } + + public void applyFilter(String descriptionText) { + + mActivity.bindings.filteredArtsInListExpandableLayout.expand(true); + + mActivity.bindings.descriptionFilterText.setText(descriptionText); + } + + public void removeListFilter() { + for(int i = 0; i < mPickingList.size(); i++) { + mPickingList.get(i).setTempHidden(false); + mPickingList.get(i).setTempPickData(null); + } + + refreshOrderBy(false); + mActivity.bindings.filteredArtsInListExpandableLayout.collapse(true); + } + + public void recoverUL(MtbColt recoveredMtbColt){ + + for(int i = 0; i < recoveredMtbColt.getMtbColr().size(); i++){ + + MtbColr currentMtbColr = recoveredMtbColt.getMtbColr().get(i); + +// List foundRows = Stream.of(groupedOrdini) +// .filter(x -> x.getNumOrd() == currentMtbColr.getNumOrd() && +// x.getRigaOrd() == currentMtbColr.getRigaOrd()&& +// x.getDataOrd().equals(currentMtbColr.getDataOrdD())) +// .toList(); +// +// if(foundRows != null && foundRows.size() > 0){ +// OrdineAccettazioneDTO.Riga currentRow = foundRows.get(0); +// +// currentRow.setHidden(false); +// currentRow.setQtaRiservate(currentRow.getQtaRiservate().subtract(currentMtbColr.getQtaCol())); +// } + + } + + + setULToCurrentContext(recoveredMtbColt); + refreshOrderBy(false); + } + + public RunnableArgs onScanSuccessfull = data -> { + + ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mActivity); + progressDialog.show(); + + BarcodeManager.disable(); + + //Se non c'è una UL aperta + if(!thereIsAnOpenedUL()){ + + //Se è un'etichetta anonima + if(UtilityBarcode.isEtichettaAnonima(data)){ + //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(data, progressDialog); + } else if(UtilityBarcode.isEtichetta128(data)) { + + //Creo una nuova ul e cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL) + this.createNewUL(null, null, progressDialog, false, false, () -> { + this.executeEtichettaEan128(data, progressDialog); + }); + } else { + this.createNewUL(null, null, progressDialog, false, false, () -> { + this.loadArticolo(data.getStringValue(), null, progressDialog); + }); + } + } else { + if(UtilityBarcode.isEtichettaAnonima(data)){ + //Cerco gli articoli presenti nell'ul dell'etichetta anonima + this.executeEtichettaLU(data.getStringValue(), progressDialog); + } else if(UtilityBarcode.isEtichetta128(data)) { + + //Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL) + this.executeEtichettaEan128(data, progressDialog); + } else { + this.loadArticolo(data.getStringValue(), null, progressDialog); + } + } + + }; + + private void executeEtichettaAnonimaNotOpenedLU(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + ColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> { + + if(mtbColt == null) { + this.createNewUL( + UtilityBarcode.getNumColloFromULAnonima(barcodeScanDTO.getStringValue()), + CommonConst.Config.DEFAULT_ANONYMOUS_UL_SERIE, progressDialog, + true, true, + null); + } else { + + this.createNewUL( + null, + null, + progressDialog, + false, false, + () -> searchArtFromUL(mtbColt, progressDialog) + ); + } + BarcodeManager.enable(); + + }, ex -> { + UtilityExceptions.defaultException(mActivity, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private void executeEtichettaLU(String SSCC, ProgressDialog progressDialog) { + ColliMagazzinoRESTConsumer.getBySSCC(SSCC, true, false, mtbColt -> { + + + if(mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { + searchArtFromUL(mtbColt, progressDialog); + } else { + progressDialog.dismiss(); + showNoArtFoundDialog(); + } + + + BarcodeManager.enable(); + + }, ex -> { + UtilityExceptions.defaultException(mActivity, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + BarcodeRESTConsumer.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, progressDialog); + } else { + + if (barcodeProd.startsWith("0") || barcodeProd.startsWith("9")) { + barcodeProd = barcodeProd.substring(1, barcodeProd.length()); + } + + this.loadArticolo(barcodeProd, PickingObjectDTO.PickData.fromEan128(ean128Model), progressDialog); + + } + + + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + progressDialog.dismiss(); + BarcodeManager.enable(); + } + }, ex-> { + UtilityExceptions.defaultException(mActivity, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + private void loadArticolo(String barcodeProd, PickingObjectDTO.PickData pickData, ProgressDialog progressDialog) { + if(barcodeProd.length() == 14) { +// barcodeProd = UtilityBarcode.convertITF14toNeutral(barcodeProd); + barcodeProd = UtilityBarcode.convertITF14toEAN13(barcodeProd); + } + + + ArticoloRESTConsumer.getByBarcodeProd(barcodeProd, mtbAartList -> { + + if(mtbAartList != null && mtbAartList.size() > 0) { + +// if(!thereIsAnOpenedUL()){ +// +// this.createNewUL(null, null, progressDialog, false, () -> { +// BarcodeManager.enable(); +// this.searchArtInList(mtbAartList.get(0), ean128Model); +// }); +// +// } else { + this.searchArtFromAnag(mtbAartList.get(0), pickData); + + BarcodeManager.enable(); + progressDialog.dismiss(); +// } +// + } else { + BarcodeManager.enable(); + progressDialog.dismiss(); + + DialogSimpleMessageHelper.makeWarningDialog(mActivity, + new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)), + null, null) + .show(); + } + + }, ex -> { + BarcodeManager.enable(); + UtilityExceptions.defaultException(mActivity, ex, progressDialog); + }); + + + } + + + private void searchArtFromUL(MtbColt scannedUL, ProgressDialog progressDialog) { + + final List pickingList = mPickingList; + + + List matchPickingObject = Stream.of(pickingList) + .filter(x -> Objects.equals(x.getNumCollo(), scannedUL.getNumCollo()) && + x.getDataColloS().equals(scannedUL.getDataColloS()) && + x.getSerCollo().equalsIgnoreCase(scannedUL.getSerCollo()) && + (scannedUL.getGestioneEnum() == GestioneEnum.ACQUISTO || scannedUL.getGestioneEnum() == GestioneEnum.LAVORAZIONE)).toList(); + + + //Cerco se devo fare pick dell'articolo tramite codMart perché forse non risulta in nessun collo + if(matchPickingObject != null && matchPickingObject.size() == 0 && scannedUL.getMtbColr() != null && scannedUL.getMtbColr().size() > 0) { + List listOfCodMartsInRowCollo = Stream.of(scannedUL.getMtbColr()) + .map(MtbColr::getCodMart) + .withoutNulls() + .toList(); + + matchPickingObject = Stream.of(pickingList) + .filter(x -> x.getNumCollo() == null && + (listOfCodMartsInRowCollo.contains(x.getCodMart()))) + .toList(); + + if(SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV()) { + for (int i = 0; i < matchPickingObject.size(); i++) { + PickingObjectDTO tmpPickObj = matchPickingObject.get(i); + + + + List matchWithPartitaMag = Stream.of(scannedUL.getMtbColr()) + .filter(x -> x.getCodMart().equalsIgnoreCase(tmpPickObj.getCodMart()) && + Objects.equals(x.getPartitaMag(), tmpPickObj.getPartitaMag())).toList(); + + boolean anyMatch = matchWithPartitaMag.size() > 0; + + if(!anyMatch) { + matchPickingObject.remove(i); + i--; + } else if(matchWithPartitaMag.size() == 1){ + MtbColr matchRow = matchWithPartitaMag.get(0); + + PickingObjectDTO.PickData pickData = new PickingObjectDTO.PickData() + .setBatchLot(matchRow.getPartitaMag()) + .setDataScad(matchRow.getDataScadPartitaD()) + .setNumCnf(matchRow.getNumCnf()) + .setQtaCnf(matchRow.getQtaCnf()) + .setQtaTot(matchRow.getQtaCol()); + + tmpPickObj.setTempPickData(pickData); + } + } + } else { + for (int i = 0; i < matchPickingObject.size(); i++) { + + PickingObjectDTO tmpPickObj = matchPickingObject.get(i); + List matchWithColloRow = Stream.of(scannedUL.getMtbColr()) + .filter(x -> x.getCodMart().equalsIgnoreCase(tmpPickObj.getCodMart())).toList(); + + if(matchWithColloRow.size() == 1){ + MtbColr matchRow = matchWithColloRow.get(0); + + PickingObjectDTO.PickData pickData = new PickingObjectDTO.PickData() + .setBatchLot(matchRow.getPartitaMag()) + .setDataScad(matchRow.getDataScadPartitaD()) + .setNumCnf(matchRow.getNumCnf()) + .setQtaCnf(matchRow.getQtaCnf()) + .setQtaTot(matchRow.getQtaCol()); + + tmpPickObj.setTempPickData(pickData); + } + + } + } + + + } + + this.loadMatchedRows(matchPickingObject); + + progressDialog.dismiss(); + BarcodeManager.enable(); + + } + + + private void searchArtFromAnag(MtbAart mtbAart, PickingObjectDTO.PickData pickData) { + + final List pickingList = mPickingList; + + List matchPickingObject = Stream.of(pickingList) + .filter(x -> x.getNumCollo() == null && + (mtbAart.getCodMart().equalsIgnoreCase(x.getCodMart()))) + .toList(); + + + if(SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV()) { + List matchWithPartitaMag = Stream.of(matchPickingObject) + .filter(x -> x.getCodMart().equalsIgnoreCase(mtbAart.getCodMart()) && + Objects.equals(x.getPartitaMag(), pickData.getBatchLot())).toList(); + + matchPickingObject = matchWithPartitaMag; + + } + + if(matchPickingObject.size() == 1){ + matchPickingObject.get(0).setTempPickData(pickData); + } + + this.loadMatchedRows(matchPickingObject); + } + + + private void loadMatchedRows(List matchedRows) { + if(matchedRows == null || matchedRows.size() == 0) { + showNoArtFoundDialog(); + } else if(matchedRows.size() == 1) { + onOrdineRowDispatch(matchedRows.get(0)); + } else { + for(int i = 0; i < mPickingList.size(); i++) { + if(!matchedRows.contains(mPickingList.get(i))) { + mPickingList.get(i).setTempHidden(true); + } + } + + + + applyFilter(""); + refreshOrderBy(false); + } + } + + private void showNoArtFoundDialog() { + DialogSimpleMessageHelper.makeWarningDialog(mActivity, + new SpannableString(mActivity.getResources().getText(R.string.no_result_from_barcode)), + null, null).show(); + } + + + public void createNewUL() { + this.createNewUL(null, null, null, false, true, null); + } + + public void createNewUL(Integer customNumCollo, String customSerCollo, ProgressDialog progress, boolean disablePrint, boolean closeProgress, Runnable onComplete) { + mActivity.bindings.venditaOrdineInevasoFab.close(true); + + if (progress == null){ + progress = UtilityProgress.createDefaultProgressDialog(mActivity); + } + progress.show(); + + MtbColt mtbColt = new MtbColt(); + mtbColt .setGestione(defaultGestioneOfUL) + .setSegno(-1) + .setRifOrd(defaultRifOrdOfUL) + .setNumOrd(defaultNumOrdOfUL) + .setDataOrdD(defaultDataOrdOfUL) + .setCodAnag(defaultCodAnagOfUL) + .setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + if(customNumCollo != null) { + mtbColt.setNumCollo(customNumCollo); + } + + if(!UtilityString.isNullOrEmpty(customSerCollo)) { + mtbColt.setSerCollo(customSerCollo); + } + + mtbColt.generaFiltroOrdineFromDTO(defaultFiltroOrdine); + + ProgressDialog finalProgress = progress; + ColliMagazzinoRESTConsumer.saveCollo(mtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + + value + .setDisablePrint(disablePrint) + .setMtbColr(new ObservableArrayList<>()); + + setULToCurrentContext(value); + + if(closeProgress) finalProgress.dismiss(); + + new StatusBarAlert.Builder(mActivity) + .autoHide(true) + .withDuration(2500) + .showProgress(false) + .withText(R.string.data_saved) + .withAlertColor(R.color.mainGreen) + .build(); + + if(onComplete != null) onComplete.run(); + + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, finalProgress); + } + }); + + } + + private void setULToCurrentContext(MtbColt mtbColt){ + isFabVisible.set(false); + mArticoliInColloBottomSheetViewModel.mtbColt.set(mtbColt); + } + + public void showCreatedUL() { + + mActivity.bindings.venditaOrdineInevasoFab.close(false); + mActivity.startListaBancaliRegistratiActivity((ArrayList) mColliRegistrati); + } + + @Override + public void onColloClosed() { + if(thereIsAnOpenedUL()) { + final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), + mActivity.getText(R.string.loading) + " ...", true); + + progress.show(); + + if(thereIsAnyRowInUL()) { + updateDataFine(progress, () -> distribuisciCollo(progress, () -> printCollo(progress))); + } else { + deleteCollo(progress); + } + + } + } + + private void updateDataFine(ProgressDialog progress, Runnable onComplete) { + + MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + cloneMtbColt.setOraFinePrep(new Date()); + + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + onComplete.run(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); + + } + + private void distribuisciCollo(ProgressDialog progress, Runnable onComplete) { + + MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone(); + + ColliMagazzinoRESTConsumer.distribuisciCollo(cloneMtbColt, onComplete, + ex -> UtilityExceptions.defaultException(mActivity, ex, progress)); + } + + private void printCollo(ProgressDialog progress) { + + + PrinterRESTConsumer.getAvailablePrinters(SettingsManager.i().userSession.depo.getCodMdep(), new ISimpleOperationCallback>() { + @Override + public void onSuccess(List value) { + + if(value.size() > 0) { + try{ + MtbColt currentMtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); + + ReportManager.getRightReportNameByMtbColt(currentMtbColt, reportName -> { + + PrinterRESTConsumer.printCollo( + value.get(0), + currentMtbColt, + 1, reportName, () -> { + + postCloseOperations(); + progress.dismiss(); + + }, ex -> { + + progress.dismiss(); + String errorMessage = ex.getMessage(); + DialogSimpleMessageHelper.makeErrorDialog( + mActivity, + new SpannableString(errorMessage), + null, + null, + R.string.button_ignore_print, + () -> postCloseOperations()).show(); + }); + + }, ex -> UtilityExceptions.defaultException(mActivity, ex, progress) + ); + } catch (Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + postCloseOperations(); + } + } else { + + mArticoliInColloBottomSheetViewModel.mtbColt.set(null); + isFabVisible.set(true); + + progress.dismiss(); + String errorMessage = "Nessuna stampante configurata"; + DialogSimpleMessageHelper.makeWarningDialog(mActivity, new SpannableString(errorMessage), null, () -> postCloseOperations()).show(); + } + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); + } + + private void deleteCollo(ProgressDialog progress) { + + ColliMagazzinoRESTConsumer.deleteCollo(mArticoliInColloBottomSheetViewModel.mtbColt.get(), () -> { + mArticoliInColloBottomSheetViewModel.mtbColt.set(null); + + isFabVisible.set(true); + + progress.dismiss(); + }, ex -> UtilityExceptions.defaultException(mActivity, ex, progress) + ); + } + + public boolean thereIsAnOpenedUL() { + return mArticoliInColloBottomSheetViewModel.mtbColt.get() != null; + } + public boolean thereIsAnyRowInUL() { + return mArticoliInColloBottomSheetViewModel.mtbColt.get() != null && + mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr() != null && + mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().size() > 0; + } + + + private void postCloseOperations() { + + MtbColt mtbColt = mArticoliInColloBottomSheetViewModel.mtbColt.get(); + + this.mColliRegistrati.add(mtbColt); + + mArticoliInColloBottomSheetViewModel.mtbColt.set(null); + isFabVisible.set(true); + + if(mtbColt != null && mtbColt.getMtbColr() != null) { + + List mtbColrs = mtbColt.getMtbColr(); + + for (int i = 0; i < mtbColrs.size(); i++) { + + MtbColr x = mtbColt.getMtbColr().get(i); + + Stream.of(this.mPickingList) + .filter(currentRow -> + x.getCodMart().equalsIgnoreCase(currentRow.getCodMart()) && + ((x.getCodJcom() == null && currentRow.getCodJcom() == null) || (x.getCodJcom() != null && x.getCodJcom().equalsIgnoreCase(currentRow.getCodJcom()))) && + (!SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV() || (SettingsManager.iDB().isEnableCheckPartitaMagCheckPickingV() && ((x.getPartitaMag() == null && currentRow.getPartitaMag() == null) || (x.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(currentRow.getPartitaMag()))))) && + ((x.getNumColloRif() == null && currentRow.getNumCollo() == null) || (x.getNumColloRif() != null && x.getNumColloRif().equals(currentRow.getNumCollo()))) + ) + + .forEach(currentRow -> { + currentRow.setQtaCollo(currentRow.getQtaCollo().subtract(x.getQtaCol())); + currentRow.setQtaOrd(currentRow.getQtaOrd().subtract(x.getQtaCol())); + }); + + } + } + + removeListFilter(); + refreshOrderBy(true); + + } + + + @Override + public void onOrdineRowDispatch(final PickingObjectDTO item) { + if(mArticoliInColloBottomSheetViewModel.mtbColt.get() != null){ + + List currentMtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr(); + + List filteredMtbColrs = Stream.of(currentMtbColrs).filter( + x -> x.getCodMart().equalsIgnoreCase(item.getCodMart()) && + (x.getPartitaMag() != null && x.getPartitaMag().equalsIgnoreCase(item.getPartitaMag()))) + .toList(); + + float qtaEvasaTotaleInMtbColr = 0; + for (MtbColr mtbColr : filteredMtbColrs) { + qtaEvasaTotaleInMtbColr += mtbColr.getQtaCol().floatValue(); + } + float qtaEvasaTotale = qtaEvasaTotaleInMtbColr; + + + filteredMtbColrs = Stream.of(currentMtbColrs).filter( + x -> + x.getGestioneRif() != null && x.getGestioneRif().equalsIgnoreCase(item.getGestione()) && + Objects.equals(x.getNumColloRif(), item.getNumCollo()) && + x.getSerColloRif() != null && x.getSerColloRif().equalsIgnoreCase(item.getSerCollo()) && + x.getDataColloRifD() != null && x.getDataColloRifD().equals(item.getDataColloD()) + ).toList(); + + float qtaEvasaCurrentULInMtbColr = 0; + for (MtbColr mtbColr : filteredMtbColrs) { + qtaEvasaCurrentULInMtbColr += mtbColr.getQtaCol().floatValue(); + } + float qtaEvasaCurrentUL = qtaEvasaCurrentULInMtbColr; + + + + + BigDecimal qtaDaEvadere = item.getQtaOrd().subtract(new BigDecimal(qtaEvasaTotale)); + if(qtaDaEvadere.floatValue() < 0) qtaDaEvadere = BigDecimal.ZERO; + + BigDecimal qtaDisponibile = item.getQtaCollo().subtract(new BigDecimal(qtaEvasaCurrentUL)); + if(qtaDisponibile.floatValue() < 0) qtaDisponibile = BigDecimal.ZERO; + + DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() + .setBatchLot(item.getPartitaMag()) + .setCodArtFor(item.getCodArtFor()) + .setMtbAart(item.getMtbAart()) + .setQtaOrd(item.getQtaOrd()) + .setQtaDaEvadere(qtaDaEvadere) + .setQtaDisponibile(qtaDisponibile) + .setQtaTot(qtaDisponibile) + .setQtaEvasa(new BigDecimal(qtaEvasaTotale)) + .setCanPartitaMagBeChanged(false) + .setMaxQta(qtaDisponibile); + + if(item.getTempPickData() != null) { + PickingObjectDTO.PickData tmpPickData = item.getTempPickData(); + + if(!UtilityString.isNullOrEmpty(tmpPickData.getBatchLot())) { + dto.setBatchLot(tmpPickData.getBatchLot()); + } + + if(tmpPickData.getDataScad() != null){ + dto.setDataScad(tmpPickData.getDataScad()); + dto.setShouldAskDataScad(true); + } + + boolean useQtaDaEvadere; + + if(tmpPickData.getQtaTot() != null) { + useQtaDaEvadere = qtaDaEvadere.floatValue() < tmpPickData.getQtaTot().floatValue(); + if(useQtaDaEvadere){ + dto.setQtaTot(qtaDaEvadere); + dto.setMaxQta(qtaDaEvadere); + } else { + dto.setQtaTot(tmpPickData.getQtaTot()); + dto.setMaxQta(tmpPickData.getQtaTot()); + } + + + if (tmpPickData.getQtaCnf() != null && useQtaDaEvadere) { + dto.setQtaCnf(tmpPickData.getQtaCnf()); + } + } + + + if(dto.getQtaTot() != null && dto.getQtaTot().floatValue() > 0 && dto.getQtaCnf() != null && dto.getQtaCnf().floatValue() > 0) { + dto.setNumCnf(dto.getQtaTot().divide(dto.getQtaCnf()).intValue()); + } + + + dto.setCanPartitaMagBeChanged(false); + dto.setCanDataScadBeChanged(false); + + } + + DialogInputQuantity.makeBase(mActivity, dto, false, value -> onOrdineRowDispatched(item, value)).show(); + } + } + + private void onOrdineRowDispatched(PickingObjectDTO item, QuantityDTO quantityDTO){ + final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting), + mActivity.getText(R.string.loading) + " ...", true); + + final MtbColr mtbColr = new MtbColr() + .setCodMart(item.getCodMart()) + .setPartitaMag(UtilityString.empty2null(quantityDTO.batchLot.get())) + .setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())) + .setQtaCnf(new BigDecimal(quantityDTO.qtaCnf.get())) + .setNumCnf(new BigDecimal(quantityDTO.numCnf.get())) + .setDescrizione(item.getDescrizioneEstesa()) + .setDatetimeRow(new Date()); + + if(item.getNumCollo() != null) { + mtbColr + .setCodJcom(UtilityString.empty2null(item.getCodJcom())) + .setSerColloRif(UtilityString.empty2null(item.getSerCollo())) + .setNumColloRif(item.getNumCollo()) + .setGestioneRif(UtilityString.empty2null(item.getGestione())) + .setDataColloRif(UtilityString.empty2null(item.getDataColloS())); + } + + + + mtbColr.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + MtbColt cloneMtbColt = (MtbColt) mArticoliInColloBottomSheetViewModel.mtbColt.get().clone(); + cloneMtbColt.setOperation(CommonModelConsts.OPERATION.NO_OP); + + cloneMtbColt.setMtbColr(new ObservableArrayList()); + cloneMtbColt.getMtbColr().add(mtbColr); + + ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback() { + @Override + public void onSuccess(MtbColt value) { + + mtbColr + .setDataCollo(value.getDataColloS()) + .setNumCollo(value.getNumCollo()) + .setGestione(value.getGestione()) + .setSerCollo(value.getSerCollo()) + .setRiga(value.getMtbColr().get(0).getRiga()) + .setUntMis(item.getMtbAart().getUntMis()) + .setMtbAart(item.getMtbAart()); + + mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().add(mtbColr); + + //Chiamato removeListFilter perché cosi mi cancella tutti i dati di pick temporanei + removeListFilter(); + + new StatusBarAlert.Builder(mActivity) + .autoHide(true) + .withDuration(2500) + .showProgress(false) + .withText(R.string.data_saved) + .withAlertColor(R.color.mainGreen) + .build(); + + progress.dismiss(); + } + + @Override + public void onFailed(Exception ex) { + UtilityExceptions.defaultException(mActivity, ex, progress); + } + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceFragment.java new file mode 100644 index 00000000..c9efd572 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/VersamentoMerceFragment.java @@ -0,0 +1,89 @@ +package it.integry.integrywmsnative.gest.versamento_merce; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +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.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBinding; +import it.integry.integrywmsnative.gest.versamento_merce.core.VersamentoMerceHelper; +import it.integry.integrywmsnative.gest.versamento_merce.viewmodel.VersamentoMerceViewModel; + +public class VersamentoMerceFragment extends Fragment implements ITitledFragment { + + private FragmentMainVersamentoMerceBinding mBinding; + private VersamentoMerceViewModel mVersamentoMerceViewModel; + private VersamentoMerceHelper mHelper; + + + private int barcodeScannerIstanceID = -1; + + public VersamentoMerceFragment() { + // Required empty public constructor + } + + + public static VersamentoMerceFragment newInstance() { + VersamentoMerceFragment fragment = new VersamentoMerceFragment(); + Bundle args = new Bundle(); + + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + //mParam1 = getArguments().getString(ARG_PARAM1); + //mParam2 = getArguments().getString(ARG_PARAM2); + } + + mVersamentoMerceViewModel = new VersamentoMerceViewModel(); + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(mVersamentoMerceViewModel.onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(getActivity(), ex, false))); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_versamento_merce, container, false); + + mBinding.setView(this); + mBinding.setViewmodel(mVersamentoMerceViewModel); + + init(); + return mBinding.getRoot(); + } + + private void init() { + mHelper = new VersamentoMerceHelper(getActivity()); + mVersamentoMerceViewModel.init(getActivity(), mBinding, mHelper); + + + + + mVersamentoMerceViewModel.openLU(); + + } + + @Override + public void onDestroy() { + BarcodeManager.removeCallback(barcodeScannerIstanceID); + super.onDestroy(); + } + + @Override + public String getTitle(Context context) { + return context.getResources().getString(R.string.versamento_merce_fragment_title); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/core/VersamentoMerceHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/core/VersamentoMerceHelper.java new file mode 100644 index 00000000..7eef4341 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/core/VersamentoMerceHelper.java @@ -0,0 +1,13 @@ +package it.integry.integrywmsnative.gest.versamento_merce.core; + +import android.content.Context; + +public class VersamentoMerceHelper { + + private Context mContext; + + public VersamentoMerceHelper(Context context) { + this.mContext = context; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java new file mode 100644 index 00000000..7c346f9b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/versamento_merce/viewmodel/VersamentoMerceViewModel.java @@ -0,0 +1,387 @@ +package it.integry.integrywmsnative.gest.versamento_merce.viewmodel; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableField; +import android.text.Html; +import android.text.SpannableString; + +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import it.integry.integrywmsnative.MainActivity; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; +import it.integry.integrywmsnative.core.REST.consumers.PosizioneRESTonsumer; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityPosizione; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.core.utility.UtilityToast; +import it.integry.integrywmsnative.databinding.FragmentMainVersamentoMerceBinding; +import it.integry.integrywmsnative.gest.versamento_merce.core.VersamentoMerceHelper; +import it.integry.integrywmsnative.view.dialogs.DialogAskLivelloPosizione; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts.DialogChooseArtsFromListaArts; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; +import it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO; +import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCreateLU; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeType; + +public class VersamentoMerceViewModel { + + + private Context mContext; + private FragmentMainVersamentoMerceBinding mBinding; + private VersamentoMerceHelper mHelper; + + public ObservableField mtbColt = new ObservableField<>(); + + public void init(Activity context, FragmentMainVersamentoMerceBinding binding, VersamentoMerceHelper helper) { + mContext = context; + mBinding = binding; + mHelper = helper; + } + + public void openLU() { + DialogScanOrCreateLU.make(mContext, true, mtbColt -> { + if(mtbColt == null) { + ((MainActivity)mContext).popToMain(); + } else if((mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.LAVORAZIONE) && mtbColt.getSegno().equals(+1)){ + setMtbColt(mtbColt); + } else { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(Html.fromHtml("Sono accettate solamente UL di Acquisto o Lavorazione di CARICO")), + null, this::openLU).show(); + } + }).show(); + } + + public void setMtbColt(MtbColt mtbColt) { + this.mtbColt.set(mtbColt); + } + + public void resetMtbColt() { + this.mtbColt.set(null); + openLU(); + } + + public RunnableArgs onScanSuccessfull = data -> { + + BarcodeManager.disable(); + + ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + + if(UtilityBarcode.isEtichettaPosizione(data)){ + progressDialog.show(); + this.executeEtichettaPosizione(data, progressDialog); + } else if(data.getType() == BarcodeType.EAN8 || data.getType() == BarcodeType.EAN13 || data.getType() == BarcodeType.UPCA){ + //searchArtInt(data.getStringValue()); + } else if(UtilityBarcode.isEtichettaAnonima(data)) { + this.executeEtichettaLU(data.getStringValue(), true, progressDialog); + }else if(UtilityBarcode.isEtichetta128(data)) { + this.executeEtichettaEan128(data, progressDialog); + } else { + BarcodeManager.enable(); + } + + + }; + + private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) + .single(); + + if(foundPosizione.isFlagMonoCollo()) { + + PosizioneRESTonsumer.getBancaliInPosizione(foundPosizione, mtbColtList -> { + + if(mtbColtList == null || mtbColtList.size() == 0){ + progressDialog.dismiss(); + BarcodeManager.enable(); + showNoULFound(); + } else if (mtbColtList.size() == 1) { + ColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { + + //TAKE HERE + pickMerceULtoUL(mtbColt, progressDialog); + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } else { + updatePosizione(foundPosizione, UtilityPosizione.isPosizioneWithLivello(foundPosizione), progressDialog); + } + } + + private void executeEtichettaEan128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + BarcodeRESTConsumer.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, false, progressDialog); + } else { + showNoULFound(); + progressDialog.dismiss(); + BarcodeManager.enable(); + } + + + } else { + //EAN 128 non completo o comunque mancano i riferimenti al prodotto + progressDialog.dismiss(); + BarcodeManager.enable(); + } + }, ex-> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + + + private void executeEtichettaLU(String sscc, boolean isAnonima, ProgressDialog progressDialog) { + ColliMagazzinoRESTConsumer.getBySSCC(sscc, true, false, mtbColt -> { + + if(mtbColt == null && !isAnonima) { + showNoULFound(); + BarcodeManager.enable(); + progressDialog.dismiss(); + } else if(mtbColt != null && (mtbColt.getGestioneEnum() == GestioneEnum.ACQUISTO || mtbColt.getGestioneEnum() == GestioneEnum.VENDITA)) { + showWrongGestioneUL(); + BarcodeManager.enable(); + progressDialog.dismiss(); + } else { + if(mtbColt == null && isAnonima) { + ColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(sscc, GestioneEnum.LAVORAZIONE, mtbColtAnonimo -> { + pickMerceULtoUL(mtbColtAnonimo, progressDialog); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + } else { + pickMerceULtoUL(mtbColt, progressDialog); + } + + + } + + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + private void updatePosizione(MtbDepoPosizione mtbDepoPosizione, boolean shouldAskLivello, ProgressDialog progressDialog) { + + if(shouldAskLivello) { + DialogAskLivelloPosizione.make(mContext, livello -> { + + if(livello == null) { + updatePosizione(mtbDepoPosizione, shouldAskLivello, progressDialog); + } else { + String newPosizione = mtbDepoPosizione.getPosizione().substring(0, mtbDepoPosizione.getPosizione().length()-1); + newPosizione += livello; + mtbDepoPosizione.setPosizione(newPosizione); + + updatePosizione(mtbDepoPosizione, false, progressDialog); + } + + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } else { + ColliMagazzinoRESTConsumer.changePosizione(mtbColt.get(), mtbDepoPosizione, () -> { + progressDialog.dismiss(); + BarcodeManager.enable(); + + resetMtbColt(); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + } + + + private void pickMerceULtoUL(MtbColt destMtbColt, ProgressDialog progressDialog) { + List mtbColrsToPick = Stream.of(mtbColt.get().getMtbColr()) + .filter(x -> x.getQtaCol().floatValue() > 0) + .toList(); + + DialogChooseArtsFromListaArts.make(mContext, mtbColrsToPick, pickedAarts -> { + + progressDialog.dismiss(); + + List destNewMtbColr = new ArrayList<>(); + + askQuantities(pickedAarts.iterator(), destNewMtbColr, () -> { + BarcodeManager.enable(); + + if(destNewMtbColr != null && destNewMtbColr.size() > 0){ + MtbColt clonedTestata = (MtbColt) destMtbColt.clone(); + ObservableArrayList mtbColrObservableField = new ObservableArrayList<>(); + + for(int i = 0; i < destNewMtbColr.size(); i++) { + MtbColr cloneMtbColr = (MtbColr) destNewMtbColr.get(i).clone(); + + cloneMtbColr + .setGestioneRif(cloneMtbColr.getGestione()) + .setGestione(null); + + cloneMtbColr + .setSerColloRif(cloneMtbColr.getSerCollo()) + .setSerCollo(null); + + cloneMtbColr + .setNumColloRif(cloneMtbColr.getNumCollo()) + .setNumCollo(null); + + cloneMtbColr + .setDataColloRif(cloneMtbColr.getDataColloS()) + .setDataCollo(null); + + mtbColrObservableField.add(cloneMtbColr); + } + + clonedTestata.setMtbColr(mtbColrObservableField); + + saveLU(clonedTestata); + } + + }); + + }, () -> { + progressDialog.dismiss(); + BarcodeManager.enable(); + }).show(); + } + + + private void askQuantities(Iterator sourceMtbColrs, List destMtbColr, Runnable onComplete){ + + if(sourceMtbColrs.hasNext()){ + + askSingleQuantity(sourceMtbColrs.next(), mtbColr -> { + + + destMtbColr.add(mtbColr); + askQuantities(sourceMtbColrs, destMtbColr, onComplete); + }); + } else { + onComplete.run(); + } + } + + + private void askSingleQuantity(MtbColr mtbColr, RunnableArgs onComplete) { + DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() + .setBatchLot(mtbColr.getPartitaMag()) + .setDataScad(mtbColr.getDataScadPartitaD()) + .setMtbAart(mtbColr.getMtbAart()) + .setQtaTot(mtbColr.getQtaCol()) + .setQtaOrd(mtbColr.getQtaCol()) + .setQtaDaEvadere(new BigDecimal(-1)) + .setQtaEvasa(BigDecimal.ZERO) + .setCanPartitaMagBeChanged(false) + .setCanDataScadBeChanged(false) + .setMaxQta(mtbColr.getQtaCol()); + + DialogInputQuantity.makeBase(mContext, dto, false, value -> { + onComplete.run(mtbColr); + }).show(); + } + + + private void showNoULFound() { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(mContext.getResources().getText(R.string.no_lu_found_message)), + null, null).show(); + } + + + private void showWrongGestioneUL() { + DialogSimpleMessageHelper.makeWarningDialog(mContext, + new SpannableString(Html.fromHtml(mContext.getResources().getText(R.string.gestione_A_V_not_accepted_message).toString())), + null, null).show(); + } + + + + /* private void createNewLU(RunnableArgs onComplete ,RunnableArgs onFailed) { + ColliMagazzinoRESTConsumer.createColloLavorazione(+1, onComplete, onFailed); + } +*/ + + private void saveLU(MtbColt mtbColt) { + mtbColt.setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + + for(int i = 0; i < mtbColt.getMtbColr().size(); i++) { + mtbColt.getMtbColr().get(i).setOperation(CommonModelConsts.OPERATION.INSERT_OR_UPDATE); + } + + + ColliMagazzinoRESTConsumer.saveCollo(mtbColt, value -> { + resetMtbColt(); + }, ex -> { + UtilityExceptions.defaultException(mContext, ex); + }); + + } + + + private void showDataSavedDialog() { + + DialogSimpleMessageHelper.makeSuccessDialog( + mContext, + mContext.getResources().getString(R.string.completed), + new SpannableString(mContext.getResources().getString(R.string.data_saved)), + null, () -> { + resetMtbColt(); + openLU(); + }).show(); + + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/DeactivatableViewPager.java b/app/src/main/java/it/integry/integrywmsnative/ui/DeactivatableViewPager.java new file mode 100644 index 00000000..7b8b3c7e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/DeactivatableViewPager.java @@ -0,0 +1,28 @@ +package it.integry.integrywmsnative.ui; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.MotionEvent; + +public class DeactivatableViewPager extends ViewPager { + + + public DeactivatableViewPager(Context context) { + super(context); + } + + public DeactivatableViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + return !isEnabled() || super.onTouchEvent(event); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + return isEnabled() && super.onInterceptTouchEvent(event); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/StatusBarAlert.java b/app/src/main/java/it/integry/integrywmsnative/ui/StatusBarAlert.java new file mode 100644 index 00000000..c6227862 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/ui/StatusBarAlert.java @@ -0,0 +1,369 @@ +package it.integry.integrywmsnative.ui; + +import android.animation.Animator; +import android.animation.TimeInterpolator; +import android.app.Activity; +import android.content.ComponentName; +import android.content.Context; +import android.content.res.Resources; +import android.graphics.PorterDuff; +import android.os.Build; +import android.support.v4.content.ContextCompat; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewPropertyAnimator; +import android.view.Window; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.AccelerateInterpolator; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.fede987.statusbaralert.utils.ScreenUtils; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import kotlin.TypeCastException; +import kotlin.jvm.internal.Intrinsics; + +public class StatusBarAlert { + + private static final Map allAlerts = (Map)(new LinkedHashMap()); + private static int statusBarColorOringinal; + private static boolean hasOriginalStatusBarTranslucent; + public static final StatusBarAlert.Companion Companion = new StatusBarAlert.Companion(); + + + public static final class Builder { + private int text; + private String stringText; + private int alertColor; + private boolean showProgress; + private long duration; + private boolean autoHide; + private Activity context; + + @Nullable + public final View build() { + return StatusBarAlert.Companion.addStatusBarTextAndProgress(this.context, this.text, this.stringText, this.alertColor, this.showProgress, this.autoHide, this.duration); + } + + @NotNull + public final StatusBarAlert.Builder withAlertColor(int alertColor) { + this.alertColor = alertColor; + return this; + } + + @NotNull + public final StatusBarAlert.Builder withText(int text) { + this.text = text; + return this; + } + + @NotNull + public final StatusBarAlert.Builder withText(@NotNull String text) { + Intrinsics.checkParameterIsNotNull(text, "text"); + this.stringText = text; + return this; + } + + @NotNull + public final StatusBarAlert.Builder showProgress(boolean showProgress) { + this.showProgress = showProgress; + return this; + } + + @NotNull + public final StatusBarAlert.Builder autoHide(boolean autoHide) { + this.autoHide = autoHide; + return this; + } + + @NotNull + public final StatusBarAlert.Builder withDuration(long millis) { + this.duration = millis; + return this; + } + + public Builder(@NotNull Activity context) { + super(); + Intrinsics.checkParameterIsNotNull(context, "context"); + this.context = context; + this.stringText = ""; + this.duration = 2000L; + this.autoHide = true; + } + } + + public static final class Companion { + @Nullable + public final View addStatusBarTextAndProgress(@NotNull final Activity any, @Nullable Integer text, @Nullable String stringText, int alertColor, boolean showProgress, boolean autoHide, long duration) { + + this.hide(any, null); + Window var10000 = any.getWindow(); + + View var18 = var10000.getDecorView(); + if (var18 == null) { + throw new TypeCastException("null cannot be cast to non-null type android.view.ViewGroup"); + } else { + + ViewGroup decor = (ViewGroup)var18; + final LinearLayout statusBarAlert = new LinearLayout(any); + statusBarAlert.setLayoutParams(new ViewGroup.LayoutParams(-1, ScreenUtils.Companion.getStatusBarHeight(any))); + statusBarAlert.setGravity(1); + + if (alertColor > 0) { + statusBarAlert.setBackgroundColor(ContextCompat.getColor(any, alertColor)); + } + + LinearLayout ll2; + TextView t; + CharSequence var19; + label58: { + ll2 = new LinearLayout(any); + ll2.setOrientation(LinearLayout.HORIZONTAL); + ll2.setGravity(16); + ll2.setLayoutParams(new ViewGroup.LayoutParams(-2, ScreenUtils.Companion.getStatusBarHeight(any))); + t = new TextView(any); + t.setLayoutParams(new ViewGroup.LayoutParams(-2, ScreenUtils.Companion.getStatusBarHeight(any))); + t.setTextSize(12.0F); + t.setTextColor(-1); + t.setGravity(17); + if (text != null) { + if (text == 0) { + var19 = (Intrinsics.areEqual(stringText, "") ^ true ? "" + stringText + ' ' : ""); + break label58; + } + } + + StringBuilder var10001 = new StringBuilder(); + Resources var10002 = any.getResources(); + if (text == null) { + Intrinsics.throwNpe(); + } + + var19 = var10001.append(var10002.getString(text)).append(" ").toString(); + } + + t.setText(var19); + t.setIncludeFontPadding(false); + ll2.addView(t); + if (showProgress) { + ProgressBar p = new ProgressBar(any); + p.setIndeterminate(true); + p.getIndeterminateDrawable().setColorFilter(-1, PorterDuff.Mode.SRC_IN); + p.setLayoutParams(new ViewGroup.LayoutParams(ScreenUtils.Companion.convertDpToPixel(11.0F, any), ScreenUtils.Companion.convertDpToPixel(11.0F, (Context)any))); + ll2.addView(p); + } + + statusBarAlert.addView(ll2); + var10000 = any.getWindow(); + Intrinsics.checkExpressionValueIsNotNull(var10000, "any.window"); + var18 = var10000.getDecorView(); + Intrinsics.checkExpressionValueIsNotNull(var18, "any.window.decorView"); + View decorView = var18.getRootView(); + Intrinsics.checkExpressionValueIsNotNull(decorView, "decorView"); + decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE); + StatusBarAlert.hasOriginalStatusBarTranslucent = this.isTranslucentStatusBar(any); + if (Build.VERSION.SDK_INT >= 21) { + any.getWindow().clearFlags(67108864); + var10000 = any.getWindow(); + Intrinsics.checkExpressionValueIsNotNull(var10000, "any.window"); + StatusBarAlert.statusBarColorOringinal = var10000.getStatusBarColor(); + var10000 = any.getWindow(); + Intrinsics.checkExpressionValueIsNotNull(var10000, "any.window"); + var10000.setStatusBarColor(0); + } + + decor.addView(statusBarAlert); + ll2.setTranslationY(-((float)ScreenUtils.Companion.convertDpToPixel(25.0F, any))); + ViewPropertyAnimator var20 = ll2.animate(); + if (var20 == null) { + Intrinsics.throwNpe(); + } + + var20.translationY(0.0F).setDuration(150L).setStartDelay(350L).setInterpolator((new AccelerateDecelerateInterpolator())).start(); + if (autoHide) { + statusBarAlert.postDelayed((new Runnable() { + public final void run() { + if (!any.isFinishing() && statusBarAlert.getParent() != null) { + StatusBarAlert.Companion.hideInternal(any, statusBarAlert, null); + } + + Map var10000 = StatusBarAlert.allAlerts; + ComponentName var10001 = any.getComponentName(); + Intrinsics.checkExpressionValueIsNotNull(var10001, "any.componentName"); + var10000.remove(var10001.getClassName()); + } + }), duration + (long)500); + } + + Map var21 = StatusBarAlert.allAlerts; + ComponentName var22 = any.getComponentName(); + Intrinsics.checkExpressionValueIsNotNull(var22, "any.componentName"); + if (var21.get(var22.getClassName()) == null) { + Map var14 = StatusBarAlert.allAlerts; + ComponentName var23 = any.getComponentName(); + Intrinsics.checkExpressionValueIsNotNull(var23, "any.componentName"); + String var24 = var23.getClassName(); + Intrinsics.checkExpressionValueIsNotNull(var24, "any.componentName.className"); + String var15 = var24; + List var16 = new ArrayList(); + var14.put(var15, var16); + } + + var21 = StatusBarAlert.allAlerts; + var22 = any.getComponentName(); + Intrinsics.checkExpressionValueIsNotNull(var22, "any.componentName"); + List var25 = (List)var21.get(var22.getClassName()); + if (var25 != null) { + var25.add(statusBarAlert); + } + + return statusBarAlert; + } + } + + public final void hide(@NotNull Activity any, @Nullable Runnable onHidden) { + Map var10000; + ComponentName var10001; + List var9; + label48: { + var10000 = StatusBarAlert.allAlerts; + var10001 = any.getComponentName(); + + if (var10000.get(var10001.getClassName()) != null) { + var10000 = StatusBarAlert.allAlerts; + var10001 = any.getComponentName(); + + var9 = (List)var10000.get(var10001.getClassName()); + if (var9 == null) { + break label48; + } + + if (var9.size() != 0) { + break label48; + } + } + + if (onHidden != null) { + onHidden.run(); + } + + return; + } + + var10000 = StatusBarAlert.allAlerts; + var10001 = any.getComponentName(); + var9 = (List)var10000.get(var10001.getClassName()); + if (var9 != null) { + Iterable $receiver$iv = var9; + Iterator var4 = $receiver$iv.iterator(); + + while(var4.hasNext()) { + Object element$iv = var4.next(); + LinearLayout it = (LinearLayout)element$iv; + StatusBarAlert.Companion.hideInternal(any, it, onHidden); + } + } + + var10000 = StatusBarAlert.allAlerts; + var10001 = any.getComponentName(); + var9 = (List)var10000.get(var10001.getClassName()); + if (var9 != null) { + var9.clear(); + } + + } + + private final void hideInternal(Activity any, final LinearLayout it, final Runnable onHidden) { + if (it.getParent() != null) { + Window var10000 = any.getWindow(); + View var5 = var10000.getDecorView(); + var5 = var5.getRootView(); + var5.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE); + + if (Build.VERSION.SDK_INT >= 21) { + var10000 = any.getWindow(); + var10000.setStatusBarColor(StatusBarAlert.statusBarColorOringinal); + if (StatusBarAlert.hasOriginalStatusBarTranslucent) { + any.getWindow().addFlags(67108864); + } + } + + var10000 = any.getWindow(); + var5 = var10000.getDecorView(); + if (var5 == null) { + throw new TypeCastException("null cannot be cast to non-null type android.view.ViewGroup"); + } + + final ViewGroup decor = (ViewGroup)var5; + ViewPropertyAnimator var6 = it.animate(); + if (var6 != null) { + var6 = var6.translationY(-((float)ScreenUtils.Companion.convertDpToPixel(25.0F, (Context)any))); + if (var6 != null) { + var6 = var6.setDuration(150L); + if (var6 != null) { + var6 = var6.setStartDelay(500L); + if (var6 != null) { + var6 = var6.setInterpolator(new AccelerateInterpolator()); + if (var6 != null) { + var6 = var6.setListener((new Animator.AnimatorListener() { + public void onAnimationRepeat(@Nullable Animator animation) { + } + + public void onAnimationEnd(@Nullable Animator animation) { + decor.removeView((View)it); + Runnable var10000 = onHidden; + if (onHidden != null) { + var10000.run(); + } + + } + + public void onAnimationStart(@Nullable Animator animation) { + } + + public void onAnimationCancel(@Nullable Animator animation) { + } + })); + if (var6 != null) { + var6.start(); + } + } + } + } + } + } + } + + } + + private final boolean isTranslucentStatusBar(Context any) { + if (any == null) { + throw new TypeCastException("null cannot be cast to non-null type android.app.Activity"); + } else { + Window w = ((Activity)any).getWindow(); + android.view.WindowManager.LayoutParams lp = w.getAttributes(); + int flags = lp.flags; + if (Build.VERSION.SDK_INT >= 19) { + return (flags & 67108864) == 67108864; + } else { + return false; + } + } + } + + private Companion() { + } + + } + } + diff --git a/app/src/main/java/it/integry/integrywmsnative/view/WrapContentHeightViewPager.java b/app/src/main/java/it/integry/integrywmsnative/view/WrapContentHeightViewPager.java new file mode 100644 index 00000000..f6d96eb6 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/WrapContentHeightViewPager.java @@ -0,0 +1,70 @@ +package it.integry.integrywmsnative.view; + +import android.content.Context; +import android.support.v4.view.ViewPager; +import android.util.AttributeSet; +import android.view.View; + +public class WrapContentHeightViewPager extends ViewPager { + + /** + * Constructor + * + * @param context the context + */ + public WrapContentHeightViewPager(Context context) { + super(context); + } + + /** + * Constructor + * + * @param context the context + * @param attrs the attribute set + */ + public WrapContentHeightViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + // find the first child view + View view = getChildAt(0); + if (view != null) { + // measure the first child view with the specified measure spec + view.measure(widthMeasureSpec, heightMeasureSpec); + } + + setMeasuredDimension(getMeasuredWidth(), measureHeight(heightMeasureSpec, view)); + } + + /** + * Determines the height of this view + * + * @param measureSpec A measureSpec packed into an int + * @param view the base view with already measured height + * + * @return The height of the view, honoring constraints from measureSpec + */ + private int measureHeight(int measureSpec, View view) { + int result = 0; + int specMode = MeasureSpec.getMode(measureSpec); + int specSize = MeasureSpec.getSize(measureSpec); + + if (specMode == MeasureSpec.EXACTLY) { + result = specSize; + } else { + // set the height from the base view if available + if (view != null) { + result = view.getMeasuredHeight(); + } + if (specMode == MeasureSpec.AT_MOST) { + result = Math.min(result, specSize); + } + } + return result; + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/ArticoliInColloBottomSheetHelper.java b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/ArticoliInColloBottomSheetHelper.java new file mode 100644 index 00000000..ac29cb8c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/ArticoliInColloBottomSheetHelper.java @@ -0,0 +1,140 @@ +package it.integry.integrywmsnative.view.bottomsheet; + +import android.support.annotation.NonNull; +import android.support.design.widget.AppBarLayout; +import android.support.design.widget.BottomSheetBehavior; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.text.SpannableString; +import android.view.View; +import android.widget.RelativeLayout; + +import java.text.ParseException; +import java.text.SimpleDateFormat; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.OnClick; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; + + +public class ArticoliInColloBottomSheetHelper extends BottomSheetBehavior.BottomSheetCallback { + + private AppCompatActivity mActivity; + private FragmentArticoliInColloBottomSheetBinding mBinding; + + + @BindView(R.id.appbar_bottom_sheet) AppBarLayout appBarLayoutBottomSheet; + @BindView(R.id.toolbar_bottom_sheet) Toolbar toolbarBottomSheet; + + @BindView(R.id.tap_action_layout) RelativeLayout tapActionLayout; + private BottomSheetBehavior mBottomSheetBehavior; + + + public ArticoliInColloBottomSheetHelper(AppCompatActivity context, FragmentArticoliInColloBottomSheetBinding binding){ + mActivity = context; + mBinding = binding; + + ButterKnife.bind(this, mBinding.getRoot()); + + mBottomSheetBehavior = BottomSheetBehavior.from(mBinding.getRoot()); + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + mBottomSheetBehavior.setBottomSheetCallback(this); + + appBarLayoutBottomSheet.setVisibility(View.INVISIBLE); + + toolbarBottomSheet.setNavigationIcon(R.drawable.ic_close_24dp); + toolbarBottomSheet.setNavigationOnClickListener(view -> { + if(mBottomSheetBehavior.getState()==BottomSheetBehavior.STATE_EXPANDED) { + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + } + }); + + tapActionLayout.setOnClickListener(v -> { + if(mBottomSheetBehavior.getState()==BottomSheetBehavior.STATE_COLLAPSED) { + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); + } + }); + + + mBinding.articoliInColloCloseCollo.setText(mActivity.getText(R.string.action_close_ul)); + updateRigheNumber(0); + + mBinding.articoliInColloSheetButton.setOnClickListener(view -> { + if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) { + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); + } else { + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + } + }); + + } + + public void initCollo(MtbColt mtbColt){ + + mBinding.articoliInColloTitle.setText(String.format(mActivity.getText(R.string.articoli_in_collo_sheet_title).toString(), mtbColt.getNumCollo())); + mBinding.articoliInColloDetailsDate.setText(mtbColt.getDataColloHumanLong()); + + + mBinding.articoliInColloDetailsPosizione.setText(mtbColt.getPosizione() != null ? mtbColt.getPosizione() : "N/A"); +// bindings.articoliInColloDetailsPreparatoDa.setText(mtbColt.getPreparatoDa() != null ? mtbColt.getPreparatoDa() : "N/A"); + + } + + public void updateRigheNumber(int newRigheNumber){ + mBinding.articoliInColloSheetButton.setText(newRigheNumber + " " + mActivity.getResources().getQuantityString(R.plurals.articles, newRigheNumber)); + } + + + @Override + public void onStateChanged(@NonNull View bottomSheet, int newState) { + switch (newState) { + case BottomSheetBehavior.STATE_HIDDEN: +// mRootView.scrollTo(0, 0); + break; + case BottomSheetBehavior.STATE_EXPANDED: + appBarLayoutBottomSheet.setClickable(true); + appBarLayoutBottomSheet.setFocusable(true); + tapActionLayout.setClickable(false); + tapActionLayout.setFocusable(false); + break; + case BottomSheetBehavior.STATE_COLLAPSED: + appBarLayoutBottomSheet.setVisibility(View.INVISIBLE); + appBarLayoutBottomSheet.setClickable(false); + appBarLayoutBottomSheet.setFocusable(false); + tapActionLayout.setClickable(true); + tapActionLayout.setFocusable(true); + break; + case BottomSheetBehavior.STATE_DRAGGING: + appBarLayoutBottomSheet.setVisibility(View.VISIBLE); +// mRootView.scrollTo(0, 0); + break; + case BottomSheetBehavior.STATE_SETTLING: + appBarLayoutBottomSheet.setVisibility(View.VISIBLE); +// mRootView.scrollTo(0, 0); + break; + } + } + + public boolean isExpanded() { + return mBottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED; + } + + public void expand() { + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); + } + + public void collapse() { + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + } + + @Override + public void onSlide(@NonNull View bottomSheet, float slideOffset) { + appBarLayoutBottomSheet.setAlpha(slideOffset); + tapActionLayout.setAlpha(1-slideOffset); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/interfaces/IOnColloClosedCallback.java b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/interfaces/IOnColloClosedCallback.java new file mode 100644 index 00000000..9a0fc23e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/interfaces/IOnColloClosedCallback.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.view.bottomsheet.interfaces; + +public interface IOnColloClosedCallback { + + void onColloClosed(); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/interfaces/IOnSimpleListChangedCallback.java b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/interfaces/IOnSimpleListChangedCallback.java new file mode 100644 index 00000000..86e499cb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/interfaces/IOnSimpleListChangedCallback.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.view.bottomsheet.interfaces; + +public interface IOnSimpleListChangedCallback { + + void onChange(); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java new file mode 100644 index 00000000..2ced9461 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/ArticoliInColloBottomSheetViewModel.java @@ -0,0 +1,317 @@ +package it.integry.integrywmsnative.view.bottomsheet.viewmodel; + +import android.app.ProgressDialog; +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.Observable; +import android.databinding.ObservableArrayList; +import android.databinding.ObservableField; +import android.databinding.ObservableList; +import android.databinding.ViewDataBinding; +import android.support.annotation.NonNull; +import android.support.design.widget.BottomSheetBehavior; +import android.support.v7.app.AppCompatActivity; +import android.text.SpannableString; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +import java.lang.ref.WeakReference; +import java.math.BigDecimal; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.CommonModelConsts; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityNumber; +import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; +import it.integry.integrywmsnative.ui.StatusBarAlert; +import it.integry.integrywmsnative.view.bottomsheet.ArticoliInColloBottomSheetHelper; +import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.integrywmsnative.view.dialogs.input_quantity.DialogInputQuantity; + +public class ArticoliInColloBottomSheetViewModel { + + public ObservableField mtbColt = new ObservableField<>(); + + private Context mContext; + private ArticoliInColloBottomSheetHelper mArticoliInColloBottomSheetHelper; + + private IOnColloClosedCallback onCloseColloCallback; + + + private FragmentArticoliInColloBottomSheetBinding mBindings; + + private BottomSheetBehavior mBottomSheetBehavior; + + private Runnable mOnItemDeletedCallback; + private Runnable mOnItemEditedCallback; + + + public ArticoliInColloBottomSheetViewModel(AppCompatActivity context, final FragmentArticoliInColloBottomSheetBinding bindings){ + mContext = context; + mBindings = bindings; + mArticoliInColloBottomSheetHelper = new ArticoliInColloBottomSheetHelper(context, mBindings); + + mBindings.setViewModel(this); + + mtbColt.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + + if(mtbColt.get() != null) { + + mBindings.linearListview.setAdapter(new ArticoliInColloBottomSheetMtbColrAdapter()); + + mBindings.linearListview.setOnItemClickListener((parent, view, position, id) -> { + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); + + onItemClicked.run(position); + }); + + mArticoliInColloBottomSheetHelper.updateRigheNumber(mtbColt.get().getMtbColr().size()); + mArticoliInColloBottomSheetHelper.initCollo(mtbColt.get()); + + mtbColt.get().getMtbColr().addOnListChangedCallback(new SimpleListChangedCallback(() -> { + mArticoliInColloBottomSheetHelper.updateRigheNumber(mtbColt.get().getMtbColr().size()); + })); + } + } + }); + + initBottomSheetActions(); + } + + public void setOnItemEditedCallback(Runnable onItemEditedCallback) { + this.mOnItemEditedCallback = onItemEditedCallback; + } + + public void setOnItemDeletedCallback(Runnable onItemDeletedCallback) { + this.mOnItemDeletedCallback = onItemDeletedCallback; + } + + private void initBottomSheetActions() { + mBindings.bg.setOnClickListener(v -> mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED)); + + mBottomSheetBehavior = BottomSheetBehavior.from(mBindings.bottomSheetActions); + + mBottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { + @Override + public void onStateChanged(@NonNull View bottomSheet, int newState) { + if (newState == BottomSheetBehavior.STATE_COLLAPSED) + mBindings.bg.setVisibility(View.GONE); + } + + @Override + public void onSlide(@NonNull View bottomSheet, float slideOffset) { + mBindings.bg.setVisibility(View.VISIBLE); + mBindings.bg.setAlpha(slideOffset); + } + }); + } + + public void setOnCloseColloCallbackListener(final IOnColloClosedCallback onCloseColloCallback){ + this.onCloseColloCallback = onCloseColloCallback; + } + + + public void closeCurrentUL(){ + if(onCloseColloCallback != null) onCloseColloCallback.onColloClosed(); + } + + public boolean isExpanded() { + return mArticoliInColloBottomSheetHelper.isExpanded(); + } + + public void expand() { + mArticoliInColloBottomSheetHelper.expand(); + } + + public void collapse() { + mArticoliInColloBottomSheetHelper.collapse(); + } + + + private RunnableArgs onItemClicked = (position) -> { + + MtbColr clickedItem = mtbColt.get().getMtbColr().get(position); + + mBindings.bottomSheetActionsTitle.setText(clickedItem.getDescrizione()); + mBindings.bottomSheetActionsSubtitle.setText(clickedItem.getCodMart()); + + mBindings.bottomSheetActionsEditBtn.setOnClickListener(v -> onItemEdit(position)); + + mBindings.bottomSheetActionsDeleteBtn.setOnClickListener(v -> onItemDelete(position)); + + mBindings.bottomSheetActionsQuantity.setText(UtilityNumber.decimalToString(clickedItem.getQtaCol()) + " " + clickedItem.getUntMis()); + + + }; + + private void onItemEdit(int position) { + + MtbColr itemToEdit = mtbColt.get().getMtbColr().get(position); + + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + + DialogInputQuantity.DTO dto = new DialogInputQuantity.DTO() + .setBatchLot(itemToEdit.getPartitaMag()) + .setQtaDaEvadere(null) + .setQtaOrd(null) + .setMtbAart(itemToEdit.getMtbAart()) + .setCanPartitaMagBeChanged(false) + .setQtaTot(itemToEdit.getQtaCol()) + .setMaxQta(itemToEdit.getQtaCol()); + + DialogInputQuantity.makeBase(mContext, dto, false, quantityDTO -> { + + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + itemToEdit.setQtaCol(new BigDecimal(quantityDTO.qtaTot.get())); + + ColliMagazzinoRESTConsumer.updateRiga(itemToEdit, () ->{ + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + + progress.dismiss(); + mtbColt.get().getMtbColr().set(position, itemToEdit); + + if(mOnItemEditedCallback != null) mOnItemEditedCallback.run(); + }, + ex -> UtilityExceptions.defaultException(mContext, ex, progress)); + + }).show(); + } + + private void onItemDelete(int position) { + + + String text = mContext.getResources().getString(R.string.alert_delete_mtb_colr); + DialogSimpleMessageHelper.makeWarningDialog(mContext, new SpannableString(text), null, () -> { + MtbColr itemToDelete = mtbColt.get().getMtbColr().get(position); + + final ProgressDialog progress = ProgressDialog.show(mContext, mContext.getText(R.string.waiting), + mContext.getText(R.string.loading) + " ...", true); + + progress.show(); + + ColliMagazzinoRESTConsumer.deleteRiga(itemToDelete, () -> { + mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); + + progress.dismiss(); + mtbColt.get().getMtbColr().remove(position); + + if(this.mOnItemDeletedCallback != null) this.mOnItemDeletedCallback.run(); + }, ex -> UtilityExceptions.defaultException(mContext, ex, progress)); + }, null).show(); + + + + } + + + public class ArticoliInColloBottomSheetMtbColrAdapter extends BaseAdapter { + + + private final WeakReferenceOnListChangedCallback onListChangedCallback; + + public ArticoliInColloBottomSheetMtbColrAdapter() { + super(); + this.onListChangedCallback = new WeakReferenceOnListChangedCallback(this); + + mtbColt.get().getMtbColr().addOnListChangedCallback(onListChangedCallback); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + LayoutInflater inflater = LayoutInflater.from(parent.getContext()); + + ViewDataBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_articoli_in_collo_bottom_sheet__mtbcolr_item, parent, false); + + final MtbColr item = mtbColt.get().getMtbColr().get(position); + binding.setVariable(BR.mtbColr, item); + binding.executePendingBindings(); + + if(position % 2 == 1) binding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); + + return binding.getRoot(); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public Object getItem(int position) { + return position; + } + + @Override + public int getCount() { + if(mtbColt.get() != null && mtbColt.get().getMtbColr() != null) { + + return mtbColt.get().getMtbColr().size(); + } else return 0; + } + + + public class WeakReferenceOnListChangedCallback extends ObservableList.OnListChangedCallback { + + private final WeakReference adapterReference; + + public WeakReferenceOnListChangedCallback(BaseAdapter baseAdapter) { + this.adapterReference = new WeakReference<>(baseAdapter); + } + + @Override + public void onChanged(ObservableList sender) { + BaseAdapter adapter = adapterReference.get(); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + BaseAdapter adapter = adapterReference.get(); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + BaseAdapter adapter = adapterReference.get(); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + BaseAdapter adapter = adapterReference.get(); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + BaseAdapter adapter = adapterReference.get(); + if (adapter != null) { + adapter.notifyDataSetChanged(); + } + } + } + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/SimpleListChangedCallback.java b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/SimpleListChangedCallback.java new file mode 100644 index 00000000..f2770b0c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottomsheet/viewmodel/SimpleListChangedCallback.java @@ -0,0 +1,40 @@ +package it.integry.integrywmsnative.view.bottomsheet.viewmodel; + +import android.databinding.ObservableList; + +import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnSimpleListChangedCallback; + +public class SimpleListChangedCallback extends ObservableList.OnListChangedCallback { + + private IOnSimpleListChangedCallback mOnSimpleListChangedCallback; + + public SimpleListChangedCallback(IOnSimpleListChangedCallback onSimpleListChangedCallback) { + mOnSimpleListChangedCallback = onSimpleListChangedCallback; + } + + @Override + public void onChanged(ObservableList sender) { + mOnSimpleListChangedCallback.onChange(); + } + + @Override + public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) { + mOnSimpleListChangedCallback.onChange(); + } + + @Override + public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) { + mOnSimpleListChangedCallback.onChange(); + } + + @Override + public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount) { + mOnSimpleListChangedCallback.onChange(); + } + + @Override + public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount) { + mOnSimpleListChangedCallback.onChange(); + mOnSimpleListChangedCallback.onChange(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskLivelloPosizione.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskLivelloPosizione.java new file mode 100644 index 00000000..89f379e7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskLivelloPosizione.java @@ -0,0 +1,48 @@ +package it.integry.integrywmsnative.view.dialogs; + +import android.content.Context; +import android.content.DialogInterface; +import android.support.v7.app.AlertDialog; +import android.text.InputType; +import android.widget.EditText; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.core.utility.UtilityToast; + +public class DialogAskLivelloPosizione { + + + public static void make(Context context, RunnableArgs onComplete, RunnableArgs onFailed) { + final EditText livelloEditText = new EditText(context); + livelloEditText.setInputType(InputType.TYPE_CLASS_NUMBER); + + AlertDialog dialog = new AlertDialog.Builder(context) + .setTitle("Livello") + .setMessage("In che livello vuoi posizionare?") + .setView(livelloEditText) + .setPositiveButton("OK", (dialog1, which) -> { + String livello = String.valueOf(livelloEditText.getText()); + if(UtilityString.isNullOrEmpty(livello)) { + UtilityToast.showToast("Inserisci un LIVELLO valido"); + onComplete.run(null); + } else { + try{ + Integer livelloInt = Integer.parseInt(livello); + onComplete.run(livelloInt); + } catch (NumberFormatException nfe) { + UtilityToast.showToast("Inserisci un LIVELLO valido"); + onComplete.run(null); + } + } + + }) + .setNegativeButton("Annulla", null) + .create(); + dialog.show(); + } + + +} + + diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java index d368560e..132fd247 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogSimpleMessageHelper.java @@ -2,11 +2,20 @@ package it.integry.integrywmsnative.view.dialogs; import android.app.AlertDialog; import android.content.Context; -import android.content.DialogInterface; +import android.content.res.ColorStateList; +import android.graphics.drawable.Drawable; +import android.support.annotation.StringRes; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.AppCompatImageView; +import android.text.Spanned; import android.view.LayoutInflater; import android.view.View; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; import android.widget.TextView; +import java.util.HashMap; + import it.integry.integrywmsnative.R; /** @@ -17,8 +26,9 @@ public class DialogSimpleMessageHelper { public enum TYPE { INFO(1), - WARNING(2), - ERROR(3); + SUCCESS(2), + WARNING(3), + ERROR(4); private int value; TYPE(int value) { @@ -36,44 +46,78 @@ public class DialogSimpleMessageHelper { } } - private static AlertDialog makeBase(TYPE type, Context mContext, String titleText, String messageText, DialogInterface.OnClickListener onPositiveClick, DialogInterface.OnClickListener onNegativeClick){ + private static AlertDialog makeBase(TYPE type, Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick, @StringRes int rNeutralButtonString, Runnable onNeutralClick){ LayoutInflater inflater = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); - View titleView = inflater.inflate(R.layout.dialog_custom_header, null); int colorBackgroundTitle = -1; - int colorTextTitle = -1; + Drawable titleIconRes = null; switch (type){ case INFO: - colorBackgroundTitle = mContext.getResources().getColor(R.color.colorPrimary); - colorTextTitle = mContext.getResources().getColor(android.R.color.white); + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.colorPrimary); + titleIconRes = mContext.getResources().getDrawable(R.drawable.ic_info_78dp); + break; + + case SUCCESS: + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.green_500); + titleIconRes = mContext.getResources().getDrawable(R.drawable.ic_done_white_24dp); break; case WARNING: - colorBackgroundTitle = mContext.getResources().getColor(R.color.yellow_600); - colorTextTitle = mContext.getResources().getColor(android.R.color.black); + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.yellow_600); + titleIconRes = mContext.getResources().getDrawable(R.drawable.ic_warning_white_24dp); break; case ERROR: - colorBackgroundTitle = mContext.getResources().getColor(R.color.red_600); - colorTextTitle = mContext.getResources().getColor(android.R.color.white); + colorBackgroundTitle = ContextCompat.getColor(mContext, R.color.red_600); + titleIconRes = mContext.getResources().getDrawable(R.drawable.ic_mood_bad_24dp); break; } - View backgroundView = titleView.findViewById(R.id.llsubhead); - backgroundView.setBackgroundColor(colorBackgroundTitle); - TextView title = (TextView) titleView.findViewById(R.id.exemptionSubHeading4); + //Title VIEW + View titleView = inflater.inflate(R.layout.dialog_custom_header, null); + TextView title = titleView.findViewById(R.id.title_text); title.setText(titleText); - title.setTextColor(colorTextTitle); + + AppCompatImageView civ = titleView.findViewById(R.id.title_icon); + ColorStateList colorStateList = ColorStateList.valueOf(colorBackgroundTitle); + civ.setImageTintList(colorStateList); + civ.setImageDrawable(titleIconRes); + + //Content View + View contentView = inflater.inflate(R.layout.dialog_custom_content, null); + TextView contentMessage = contentView.findViewById(R.id.dialog_content_main_message); + contentMessage.setText(messageText); + + LinearLayout hashMapContainer = contentView.findViewById(R.id.dialog_content_hashmap); + + 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); + } + } AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext) .setCustomTitle(titleView) - .setMessage(messageText) - .setPositiveButton(mContext.getText(R.string.ok), onPositiveClick); + .setView(contentView) +// .setMessage(messageText) + .setPositiveButton(mContext.getText(R.string.ok), (dialog, which) -> { + if(onPositiveClick != null) onPositiveClick.run(); + }); + if(onNeutralClick != null){ + alertDialog.setNeutralButton(rNeutralButtonString, (dialog, which) -> onNeutralClick.run()); + } if(onNegativeClick != null){ - alertDialog.setNegativeButton(mContext.getText(R.string.abort), onNegativeClick); + alertDialog.setNegativeButton(mContext.getText(R.string.abort), (dialog, which) -> onNegativeClick.run()); } AlertDialog alert = alertDialog.create(); @@ -83,33 +127,80 @@ public class DialogSimpleMessageHelper { } - public static AlertDialog makeInfoDialog(Context mContext, String titleText, String messageText, DialogInterface.OnClickListener onPositiveClick){ + public static AlertDialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick){ return makeBase(TYPE.INFO, mContext, titleText, messageText, + hashmapContent, onPositiveClick, - null); + null, -1, null); } - public static AlertDialog makeWarningDialog(Context mContext, String messageText, DialogInterface.OnClickListener onPositiveClick){ + public static AlertDialog makeInfoDialog(Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick){ + return makeBase(TYPE.INFO, + mContext, + titleText, + messageText, + hashmapContent, + onPositiveClick, + onNegativeClick, -1, null); + } + + + public static AlertDialog makeSuccessDialog(Context mContext, String titleText, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick){ + return makeBase(TYPE.SUCCESS, + mContext, + titleText, + messageText, + hashmapContent, + onPositiveClick, + null, -1, null); + } + + + public static AlertDialog makeWarningDialog(Context mContext, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick, Runnable onNegativeClick){ return makeBase(TYPE.WARNING, mContext, mContext.getText(R.string.warning).toString(), messageText, + hashmapContent, onPositiveClick, - null); + () -> { if(onNegativeClick != null) onNegativeClick.run(); }, -1, null); } - public static AlertDialog makeErrorDialog(Context mContext, String messageText, DialogInterface.OnClickListener onPositiveClick){ + + public static AlertDialog makeWarningDialog(Context mContext, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick){ + return makeBase(TYPE.WARNING, + mContext, + mContext.getText(R.string.warning).toString(), + messageText, + hashmapContent, + onPositiveClick, + null, -1, null); + } + + public static AlertDialog makeErrorDialog(Context mContext, Spanned messageText, HashMap hashmapContent, Runnable onPositiveClick){ return makeBase(TYPE.ERROR, mContext, - mContext.getText(R.string.error).toString(), + mContext.getText(R.string.ops).toString(), messageText, + hashmapContent, onPositiveClick, - null); + null, -1, null); + } + + public static AlertDialog makeErrorDialog(Context mContext, Spanned messageText, HashMap 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); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java new file mode 100644 index 00000000..b1cf9db6 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLU.java @@ -0,0 +1,147 @@ +package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu; + +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.os.Handler; +import android.os.Looper; +import android.support.annotation.LayoutRes; +import android.support.v7.app.AlertDialog; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.Button; +import android.widget.LinearLayout; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityPosizione; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.databinding.DialogAskPositionOfLuBinding; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; + +public class DialogAskPositionOfLU { + + + private Context mContext; + private DialogAskPositionOfLuBinding mBinding; + private MtbColt mtbColt; + + private Dialog mDialog; + + private Runnable onComplete; + private RunnableArgs onFailed; + + public static Dialog makeBase(final Context context, MtbColt mtbColtToUpdate, Runnable onComplete, RunnableArgs onFailed) { + return new DialogAskPositionOfLU(context, mtbColtToUpdate, onComplete, onFailed).mDialog; + } + + public DialogAskPositionOfLU(Context context, MtbColt mtbColtToUpdate, Runnable onComplete, RunnableArgs onFailed) { + mContext = context; + mtbColt = mtbColtToUpdate; + + this.onComplete = onComplete; + this.onFailed = onFailed; + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_ask_position_of_lu, null, false); + mBinding.setMContext(mContext); + + List views = new ArrayList<>(); + views.add(R.layout.dialog_ask_position_of_lu__page1); + views.add(R.layout.dialog_ask_position_of_lu__page2); + + DialogAskPositionOfLUAdapter myadapter = new DialogAskPositionOfLUAdapter(mContext, views); + mBinding.viewpager.setAdapter(myadapter); + mBinding.viewpager.beginFakeDrag(); + + + + mDialog = new Dialog(mContext); + mDialog.setContentView(mBinding.getRoot()); + mDialog.setCanceledOnTouchOutside(false); + + setupBarcode(); + } + + + private void askLivello() { + mBinding.viewpager.setCurrentItem(1, true); + } + + private boolean isOnLivelloPage() { + return mBinding.viewpager.getCurrentItem() == 1; + } + + private void setupBarcode() { + + int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false))); + + mDialog.setOnDismissListener(dialog -> { + BarcodeManager.removeCallback(barcodeIstanceID); + }); + + } + + + private RunnableArgs onScanSuccessfull = data -> { + + BarcodeManager.disable(); + + if(!isOnLivelloPage()) { + + if (UtilityBarcode.isEtichettaPosizione(data)) { + + MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(data.getStringValue())) + .single(); + + + if (UtilityPosizione.isPosizioneWithLivello(foundPosizione)) { + askLivello(); + } else { + updatePosizione(foundPosizione, () -> { + if(onComplete != null) onComplete.run(); + }, onFailed); + } + + } + } else { + BarcodeManager.enable(); + } + }; + + + private void updatePosizione(MtbDepoPosizione mtbDepoPosizione, Runnable onComplete, RunnableArgs onFailed) { + + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + + ColliMagazzinoRESTConsumer.changePosizione(mtbColt, mtbDepoPosizione, () -> { + progressDialog.dismiss(); + onComplete.run(); + }, ex -> { + progressDialog.dismiss(); + onFailed.run(ex); + }); + + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLUAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLUAdapter.java new file mode 100644 index 00000000..42c5c7f0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/ask_position_of_lu/DialogAskPositionOfLUAdapter.java @@ -0,0 +1,50 @@ +package it.integry.integrywmsnative.view.dialogs.ask_position_of_lu; + +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.v4.view.PagerAdapter; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + + +import java.util.List; + +public class DialogAskPositionOfLUAdapter extends PagerAdapter { + private Context mContext; + + private List mDatasetLayout; + + public DialogAskPositionOfLUAdapter(Context context, List datasetView) { + this.mContext = context; + this.mDatasetLayout = datasetView; + } + + @Override + public int getCount() { + return mDatasetLayout.size(); + } + + @Override + public View instantiateItem(ViewGroup container, int position) { + LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE); + View view = inflater.inflate(mDatasetLayout.get(position), container, false); + + container.addView(view); + + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((LinearLayout)object); + } + + @Override + public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { + return view == o; + } + + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java new file mode 100644 index 00000000..22cf6a0f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArts.java @@ -0,0 +1,76 @@ +package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.LinearLayoutManager; +import android.view.LayoutInflater; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtBinding; + +public class DialogChooseArtFromListaArts { + + + private Context currentContext; + private AlertDialog currentAlert; + + private DialogChooseArtFromListaArtsAdapter currentAdapter; + + private RunnableArgs mOnItemChoosed; + + public static AlertDialog make(final Context context, List listaArts, RunnableArgs onItemChoosed) { + return new DialogChooseArtFromListaArts(context, listaArts, onItemChoosed).currentAlert; + } + + + private DialogChooseArtFromListaArts(Context context, List listaArts, RunnableArgs onItemChoosed) { + currentContext = context; + mOnItemChoosed = onItemChoosed; + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + DialogChooseArtFromListaArtBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_art_from_lista_art, null, false); + + + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) + .setView(binding.getRoot()) + .setPositiveButton(context.getText(R.string.confirm), null) + .setNegativeButton(context.getText(R.string.abort), null); + + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); + + initRecyclerView(binding, listaArts); + } + + private void initRecyclerView(DialogChooseArtFromListaArtBinding binding, List dataset) { + binding.dialogChooseArtFromListaArtMainList.setNestedScrollingEnabled(false); + + binding.dialogChooseArtFromListaArtMainList.setHasFixedSize(true); + + binding.dialogChooseArtFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(currentContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); + binding.dialogChooseArtFromListaArtMainList.addItemDecoration(itemDecorator); + + currentAdapter = new DialogChooseArtFromListaArtsAdapter(currentContext, dataset, onItemClicked); + binding.dialogChooseArtFromListaArtMainList.setAdapter(currentAdapter); + } + + private IRecyclerItemClicked onItemClicked = (item, position) -> { + if(mOnItemChoosed != null) { + mOnItemChoosed.run(item); + } + + currentAlert.dismiss(); + }; + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java new file mode 100644 index 00000000..96af4c8c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_art_from_lista_arts/DialogChooseArtFromListaArtsAdapter.java @@ -0,0 +1,76 @@ +package it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.databinding.DialogChooseArtFromListaArtItemModelBinding; + +public class DialogChooseArtFromListaArtsAdapter extends RecyclerView.Adapter { + + protected Context mContext; + + private List mDataset; + private IRecyclerItemClicked mOnItemClickListener; + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected DialogChooseArtFromListaArtItemModelBinding mViewDataBinding; + + + public ViewHolder(DialogChooseArtFromListaArtItemModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(MtbAart mtbAart) { + mViewDataBinding.setMtbAart(mtbAart); + mViewDataBinding.executePendingBindings(); + } + } + + public DialogChooseArtFromListaArtsAdapter(Context context, List myDataset, IRecyclerItemClicked onItemClickListener) { + mContext = context; + mDataset = myDataset; + mOnItemClickListener = onItemClickListener; + } + + @Override + public DialogChooseArtFromListaArtsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + DialogChooseArtFromListaArtItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_art_from_lista_art__item_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(DialogChooseArtFromListaArtsAdapter.ViewHolder holder, int position) { + MtbAart item = mDataset.get(position); + holder.bind(item); + + holder.mViewDataBinding.getRoot().setOnClickListener(x -> { + if(mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(item, position); + } + }); + } + + @Override + public void onViewRecycled(DialogChooseArtFromListaArtsAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java new file mode 100644 index 00000000..7689211c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArts.java @@ -0,0 +1,104 @@ +package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts; + +import android.content.Context; +import android.content.DialogInterface; +import android.databinding.DataBindingUtil; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AlertDialog; +import android.support.v7.widget.DividerItemDecoration; +import android.support.v7.widget.LinearLayoutManager; +import android.view.LayoutInflater; + +import com.annimon.stream.Stream; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IRecyclerItemClicked; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.DialogChooseArtsFromListaArtsLayoutBinding; + +public class DialogChooseArtsFromListaArts { + + private Context currentContext; + private AlertDialog currentAlert; + + private DialogChooseArtsFromListaArtsAdapter currentAdapter; + + private RunnableArgs> mOnItemsChoosed; + private Runnable mOnAbort; + + public static AlertDialog make(final Context context, List listaMtbColr, RunnableArgs> onItemsChoosed, Runnable onAbort) { + return new DialogChooseArtsFromListaArts(context, listaMtbColr, onItemsChoosed, onAbort).currentAlert; + } + + + private DialogChooseArtsFromListaArts(Context context, List listaMtbColr, RunnableArgs> onItemsChoosed, Runnable onAbort) { + currentContext = context; + mOnItemsChoosed = onItemsChoosed; + mOnAbort = onAbort; + + if(listaMtbColr != null){ + for (MtbColr mtbColr : listaMtbColr) { + if(UtilityString.isNullOrEmpty(mtbColr.getUntMis()) && mtbColr.getMtbAart() != null){ + mtbColr.setUntMis(mtbColr.getMtbAart().getUntMis()); + } + } + } + + LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + DialogChooseArtsFromListaArtsLayoutBinding binding = DataBindingUtil.inflate(inflater, R.layout.dialog_choose_arts_from_lista_arts_layout, null, false); + + + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) + .setView(binding.getRoot()) + .setPositiveButton(context.getText(R.string.confirm), (dialogInterface, i) -> { + onPositiveClick(); + }) + .setNegativeButton(context.getText(R.string.abort), ((dialogInterface, i) -> { + onNegativeClick(); + })); + + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); + + initRecyclerView(binding, listaMtbColr); + } + + private void initRecyclerView(DialogChooseArtsFromListaArtsLayoutBinding binding, List dataset) { + binding.dialogChooseArtsFromListaArtMainList.setNestedScrollingEnabled(false); + + binding.dialogChooseArtsFromListaArtMainList.setHasFixedSize(true); + + binding.dialogChooseArtsFromListaArtMainList.setLayoutManager(new LinearLayoutManager(currentContext)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(currentContext, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(currentContext, R.drawable.divider)); + binding.dialogChooseArtsFromListaArtMainList.addItemDecoration(itemDecorator); + + currentAdapter = new DialogChooseArtsFromListaArtsAdapter(currentContext, dataset); + binding.dialogChooseArtsFromListaArtMainList.setAdapter(currentAdapter); + } + + + private void onPositiveClick() { + + if(mOnItemsChoosed != null) { + mOnItemsChoosed.run(currentAdapter.getSelectedItems()); + } + + } + + + private void onNegativeClick() { + + if(this.mOnAbort != null) mOnAbort.run(); + + } + + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArtsAdapter.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArtsAdapter.java new file mode 100644 index 00000000..81d0e4c2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/choose_arts_from_lista_arts/DialogChooseArtsFromListaArtsAdapter.java @@ -0,0 +1,84 @@ +package it.integry.integrywmsnative.view.dialogs.choose_arts_from_lista_arts; + +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import com.annimon.stream.Stream; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.model.CheckableMtbAart; +import it.integry.integrywmsnative.core.model.CheckableMtbColr; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.databinding.DialogChooseArtsFromListaArtsItemModelBinding; + +public class DialogChooseArtsFromListaArtsAdapter extends RecyclerView.Adapter { + + protected Context mContext; + + private List mDataset; + + + public DialogChooseArtsFromListaArtsAdapter(Context context, List myDataset) { + mContext = context; + + if(myDataset != null) { + mDataset = Stream.of(myDataset) + .withoutNulls() + .map(CheckableMtbColr::new).toList(); + } + } + + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected DialogChooseArtsFromListaArtsItemModelBinding mViewDataBinding; + + + public ViewHolder(DialogChooseArtsFromListaArtsItemModelBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(CheckableMtbColr checkableMtbColr) { + mViewDataBinding.setCheckableMtbColr(checkableMtbColr); + mViewDataBinding.executePendingBindings(); + } + } + + @Override + public DialogChooseArtsFromListaArtsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + // create a new view + DialogChooseArtsFromListaArtsItemModelBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.dialog_choose_arts_from_lista_arts__item_model, parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(DialogChooseArtsFromListaArtsAdapter.ViewHolder holder, int position) { + CheckableMtbColr item = mDataset.get(position); + holder.bind(item); + + } + + @Override + public void onViewRecycled(DialogChooseArtsFromListaArtsAdapter.ViewHolder holder) { + super.onViewRecycled(holder); + } + + @Override + public int getItemCount() { + return mDataset.size(); + } + + public List getSelectedItems() { + return Stream.of(mDataset) + .filter(y -> y.getChecked().get()) + .map(CheckableMtbColr::getMtbColr).toList(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java new file mode 100644 index 00000000..0565f750 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/DialogInputQuantity.java @@ -0,0 +1,670 @@ +package it.integry.integrywmsnative.view.dialogs.input_quantity; + +import android.app.AlertDialog; +import android.app.DatePickerDialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.res.ColorStateList; +import android.databinding.DataBindingUtil; +import android.databinding.Observable; +import android.databinding.ViewDataBinding; +import android.os.Handler; +import android.support.design.widget.TextInputLayout; +import android.support.v4.content.ContextCompat; +import android.support.v7.widget.AppCompatTextView; +import android.text.Html; +import android.text.SpannableString; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; + +import java.math.BigDecimal; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback; +import it.integry.integrywmsnative.core.REST.model.Ean13PesoModel; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.DialogInputQuantityArticoloBinding; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeType; + +public class DialogInputQuantity { + + public static class DTO { + private MtbAart mtbAart; + private String batchLot; + private BigDecimal qtaDaEvadere; + private BigDecimal qtaDisponibile; + private BigDecimal qtaEvasa; + private BigDecimal qtaOrd; + private BigDecimal qtaTot; + private BigDecimal qtaCnf; + private Integer numCnf; + private BigDecimal maxQta; + private String codArtFor; + private Date dataScad; + private boolean canPartitaMagBeChanged; + private Boolean canDataScadBeChanged; + private Boolean shouldAskDataScad; + + public MtbAart getMtbAart() { + return mtbAart; + } + + public DTO setMtbAart(MtbAart mtbAart) { + this.mtbAart = mtbAart; + return this; + } + + public String getBatchLot() { + return batchLot; + } + + public DTO setBatchLot(String batchLot) { + this.batchLot = batchLot; + return this; + } + + public BigDecimal getQtaDaEvadere() { + return qtaDaEvadere; + } + + public DTO setQtaDaEvadere(BigDecimal qtaDaEvadere) { + this.qtaDaEvadere = qtaDaEvadere; + return this; + } + + public BigDecimal getQtaDisponibile() { + return qtaDisponibile; + } + + public DTO setQtaDisponibile(BigDecimal qtaDisponibile) { + this.qtaDisponibile = qtaDisponibile; + return this; + } + + public BigDecimal getQtaOrd() { + return qtaOrd; + } + + public DTO setQtaOrd(BigDecimal qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public BigDecimal getQtaTot() { + return qtaTot; + } + + public DTO setQtaTot(BigDecimal qtaTot) { + this.qtaTot = qtaTot; + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public DTO setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + + public Integer getNumCnf() { + return numCnf; + } + + public DTO setNumCnf(Integer numCnf) { + this.numCnf = numCnf; + return this; + } + + public BigDecimal getQtaEvasa() { + return qtaEvasa; + } + + public DTO setQtaEvasa(BigDecimal qtaEvasa) { + this.qtaEvasa = qtaEvasa; + return this; + } + + public BigDecimal getMaxQta() { + return maxQta; + } + + public DTO setMaxQta(BigDecimal maxQta) { + this.maxQta = maxQta; + return this; + } + + public String getCodArtFor() { + return codArtFor; + } + + public DTO setCodArtFor(String codArtFor) { + this.codArtFor = codArtFor; + return this; + } + + public Date getDataScad() { + return dataScad; + } + + public DTO setDataScad(Date dataScad) { + this.dataScad = dataScad; + return this; + } + + public boolean getCanPartitaMagBeChanged() { + return canPartitaMagBeChanged; + } + + public DTO setCanPartitaMagBeChanged(boolean canPartitaMagBeChanged) { + this.canPartitaMagBeChanged = canPartitaMagBeChanged; + return this; + } + + public Boolean isCanDataScadBeChanged() { + return canDataScadBeChanged; + } + + public DTO setCanDataScadBeChanged(boolean canDataScadBeChanged) { + this.canDataScadBeChanged = canDataScadBeChanged; + return this; + } + + public Boolean getShouldAskDataScad() { + return shouldAskDataScad; + } + + public DTO setShouldAskDataScad(Boolean shouldAskDataScad) { + this.shouldAskDataScad = shouldAskDataScad; + return this; + } + } + + private ColorStateList originalColorStateList = null; + + private String scadenzaString = "Scadenza"; + + private AlertDialog currentAlert; + private Context currentContext; + + private DialogInputQuantityArticoloBinding currentBinding; + + private MtbAart currentMtbAart; + private QuantityDTO currentQuantityDto; + private DTO currentDTO; + + public static AlertDialog makeBase(final Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { + return new DialogInputQuantity(context, dto, canOverflowQuantity, dialogCallback).currentAlert; + } + + public DialogInputQuantity(Context context, final DTO dto, boolean canOverflowQuantity, final ISingleValueOperationCallback dialogCallback) { + currentContext = context; + currentMtbAart = dto.getMtbAart(); + currentDTO = dto; + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + currentBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_articolo, null, false); + + final TextInputLayout txlInputBatchLot = currentBinding.inputPartitaMag; + + final TextInputLayout txlInputNumDiCnf = currentBinding.inputNumCnf; + final TextInputLayout txlInputQtaPerCnf = currentBinding.inputQtaCnf; + final TextInputLayout txlInputQtaTot = currentBinding.inputQtaTot; + + txlInputNumDiCnf.getEditText().setSelectAllOnFocus(true); + txlInputQtaPerCnf.getEditText().setSelectAllOnFocus(true); + txlInputQtaTot.getEditText().setSelectAllOnFocus(true); + + + originalColorStateList = txlInputNumDiCnf.getEditText().getTextColors(); + + currentQuantityDto = new QuantityDTO(); + currentQuantityDto.canOverflowQuantity = canOverflowQuantity; + + setupQuantities(dto, currentQuantityDto); + + setupQuantityListener(currentQuantityDto, txlInputNumDiCnf, txlInputQtaPerCnf, txlInputQtaTot); + + currentBinding.setViewmodel(dto); + currentBinding.setQuantityViewModel(currentQuantityDto); + + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) + .setView(currentBinding.getRoot()) + .setPositiveButton(context.getText(R.string.confirm), null) + .setNegativeButton(context.getText(R.string.abort), null); + + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); + + currentAlert.setOnShowListener(dialogInterface -> { + + final Handler handler = new Handler(); + handler.postDelayed(() -> { + EditText editTextToFocus; + if(currentQuantityDto.canPartitaMagBeChanged.get()) { + editTextToFocus = txlInputBatchLot.getEditText(); + } else { + editTextToFocus = txlInputNumDiCnf.getEditText(); + } + + + editTextToFocus.requestFocus(); + + InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(editTextToFocus, InputMethodManager.SHOW_IMPLICIT); + }, 100); + + Button positiveButton = currentAlert.getButton(AlertDialog.BUTTON_POSITIVE); + + positiveButton.setOnClickListener(view -> onConfirm(context, currentQuantityDto, dialogCallback)); + }); + + + initDatePicker(context, currentQuantityDto, currentBinding.getRoot().findViewById(R.id.input_data_scad)); + + setupBarcode(context); + } + + private void setupQuantities(DTO dto, QuantityDTO quantityDTO){ + if(dto.getQtaTot() != null) quantityDTO.qtaTot.set(dto.getQtaTot().floatValue()); + if(dto.getMaxQta() != null) quantityDTO.maxQta = dto.getMaxQta().floatValue(); + + float qtaDisponibile = dto.getQtaDisponibile() != null ? dto.getQtaDisponibile().floatValue() : 0f; + if (qtaDisponibile < 0) { + currentBinding.layoutQtaDisponibile.setVisibility(View.GONE); + qtaDisponibile = 0; + } + if(qtaDisponibile > 0) quantityDTO.qtaDisponibile.set(qtaDisponibile); + + float qtaDaEvadere = dto.qtaDaEvadere != null ? dto.qtaDaEvadere.floatValue() : 0f; + if (qtaDaEvadere < 0) { + currentBinding.layoutQtaDaEvadere.setVisibility(View.GONE); + qtaDaEvadere = 0; + } + + if(qtaDaEvadere > 0) quantityDTO.qtaDaEvadere.set(qtaDaEvadere); + quantityDTO.qtaEvasa.set(dto.qtaEvasa != null ? dto.qtaEvasa.floatValue() : null); + + quantityDTO.batchLot.set(dto.batchLot); + if(quantityDTO.qtaCnf.get(false) == null) { + if(dto.getQtaCnf() != null) { + quantityDTO.qtaCnf.set(dto.getQtaCnf().floatValue()); + } else { + quantityDTO.qtaCnf.set(dto.mtbAart.getQtaCnf().floatValue()); + } + } + + if(quantityDTO.qtaTot.get(false) == null) { + quantityDTO.qtaTot.set(qtaDaEvadere); + } + + if(dto.getNumCnf() != null) { + quantityDTO.numCnf.set(new BigDecimal(dto.getNumCnf()).floatValue()); + } + + if(quantityDTO.numCnf.get(false) == null) { + quantityDTO.numCnf.set(quantityDTO.qtaTot.get() / quantityDTO.qtaCnf.get()); + } + + quantityDTO.canPartitaMagBeChanged.set(dto.getCanPartitaMagBeChanged()); + + if(dto.isCanDataScadBeChanged() != null){ + quantityDTO.canDataScadBeChanged.set(dto.isCanDataScadBeChanged()); + } + + quantityDTO.shouldAskDataScad.set(dto.mtbAart.isFlagTracciabilita() && dto.mtbAart.getGgScadPartita() != null && dto.mtbAart.getGgScadPartita() > 0); + + if(dto.getShouldAskDataScad() != null) { + quantityDTO.shouldAskDataScad.set(dto.getShouldAskDataScad()); + } + + if(dto.getDataScad() != null) { + quantityDTO.expireDate = dto.getDataScad(); + } + + if(quantityDTO.expireDate == null && dto.mtbAart.getGgScadPartita() != null && dto.mtbAart.getGgScadPartita() > 0) { + Calendar c = Calendar.getInstance(); + c.add(Calendar.DATE, dto.mtbAart.getGgScadPartita()); // number of days to add + + quantityDTO.expireDate = c.getTime(); + } + + } + + + private void setupBarcode(Context context) { + + int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false))); + + currentAlert.setOnDismissListener(dialog -> { + BarcodeManager.removeCallback(barcodeIstanceID); + }); + + } + + + private RunnableArgs onScanSuccessfull = data -> { + BarcodeManager.disable(); + + if(UtilityBarcode.isEanPeso(data)){ + + try { + Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(data.getStringValue()); + + if(ean13PesoModel.getPrecode().contains(currentMtbAart.getBarCode())) { + + currentQuantityDto.numCnf.set(1f); + currentQuantityDto.qtaCnf.set(ean13PesoModel.getPeso()); + currentQuantityDto.qtaTot.set(ean13PesoModel.getPeso()); + + BarcodeManager.enable(); + } else { + BarcodeManager.enable(); + } + + } catch (Exception e) { + UtilityLogger.errorMe(e); + BarcodeManager.enable(); + } + + } else if(UtilityBarcode.isEtichetta128(data)){ + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext); + + BarcodeRESTConsumer.decodeEan128(data, ean128Model -> { + progressDialog.dismiss(); + BarcodeManager.enable(); + + if(ean128Model != null){ + if(!UtilityString.isNullOrEmpty(ean128Model.BatchLot)) { + currentQuantityDto.batchLot.set(ean128Model.BatchLot); + } + + try { + if(!UtilityString.isNullOrEmpty(ean128Model.BestBefore)){ + currentQuantityDto.expireDate = UtilityDate.recognizeDate(ean128Model.BestBefore); + } else if(!UtilityString.isNullOrEmpty(ean128Model.Expiry)) { + currentQuantityDto.expireDate = UtilityDate.recognizeDate(ean128Model.Expiry); + } + + if(currentQuantityDto.expireDate != null) { + currentQuantityDto.expireDateString.set(UtilityDate.formatDate(currentQuantityDto.expireDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + } + + } catch (Exception e) { + UtilityLogger.errorMe(e); + } + + + if(ean128Model.Count != null && ean128Model.Count > 0) { + currentQuantityDto.numCnf.set((float) ean128Model.Count); + } + + if (ean128Model.NetWeightKg != null && ean128Model.NetWeightKg > 0) { + currentQuantityDto.qtaTot.set(ean128Model.NetWeightKg); + } + + if(currentQuantityDto.qtaTot.get() > 0 && currentQuantityDto.numCnf.get() > 0) { + currentQuantityDto.qtaCnf.set(currentQuantityDto.qtaTot.get() / currentQuantityDto.numCnf.get()); + } + + } + + + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + + BarcodeManager.enable(); + }); + + } else { + BarcodeManager.enable(); + } + + }; + + private void setupQuantityListener(final QuantityDTO quantityDTO, final TextInputLayout txlInputNumDiCnf, final TextInputLayout txlInputQtaPerCnf, final TextInputLayout txlInputQtaTot) { + + quantityDTO.numCnf.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + + if(quantityDTO.numCnfNotificationEnabled) { + + quantityDTO.blockedNumDiCnf.set(!(quantityDTO.numCnf.get(true) == 0 || quantityDTO.numCnf.get().toString() == "")); + + toggleTextInputLayoutError(txlInputNumDiCnf, quantityDTO.blockedNumDiCnf.get()); + + if (!quantityDTO.blockedQtaTot.get()) { + + quantityDTO.qtaTotNotificationEnabled = false; + quantityDTO.qtaTot.set((float) Math.round(quantityDTO.qtaCnf.get(true) * quantityDTO.numCnf.get(true) * 100) / 100); + quantityDTO.qtaTotNotificationEnabled = true; + + + } else if (!quantityDTO.blockedQtaPerCnf.get()) { + + quantityDTO.qtaCnfNotificationEnabled = false; + if(quantityDTO.numCnf.get(true) != 0) { + quantityDTO.qtaCnf.set((float) Math.round(quantityDTO.qtaTot.get(true) / quantityDTO.numCnf.get(true) * 100) / 100); + } else { + quantityDTO.qtaCnf.set((float) Math.round(quantityDTO.qtaTot.get(true) / 1 * 100) / 100); + } + quantityDTO.qtaCnfNotificationEnabled = true; + + } else { + Log.e("DialogInputQuantity", "Tutti i campi sono bloccati, non è possibile modificare il numero di confezioni"); + } + + } + } + }); + + quantityDTO.qtaCnf.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + + if(quantityDTO.qtaCnfNotificationEnabled) { + + quantityDTO.blockedQtaPerCnf.set(!(quantityDTO.qtaCnf.get(true) == 0 || quantityDTO.qtaCnf.get().toString() == "")); + + toggleTextInputLayoutError(txlInputQtaPerCnf, quantityDTO.blockedQtaPerCnf.get()); + + if (!quantityDTO.blockedQtaTot.get()) { + + quantityDTO.qtaTotNotificationEnabled = false; + quantityDTO.qtaTot.set((float) Math.round(quantityDTO.qtaCnf.get(true) * quantityDTO.numCnf.get(true) * 100) / 100); + quantityDTO.qtaTotNotificationEnabled = true; + + } else if (!quantityDTO.blockedNumDiCnf.get()) { + + quantityDTO.numCnfNotificationEnabled = false; + if(quantityDTO.qtaCnf.get(true) != 0){ + quantityDTO.numCnf.set((float) Math.ceil(quantityDTO.qtaTot.get(true) / quantityDTO.qtaCnf.get(true))); + } else { + quantityDTO.numCnf.set((float) Math.ceil(quantityDTO.qtaTot.get(true))); + } + + quantityDTO.numCnfNotificationEnabled = true; + + } else { + Log.e("DialogInputQuantity", "Tutti i campi sono bloccati, non è possibile modificare la quantità per confezione"); + } + } + + } + }); + + quantityDTO.qtaTot.addOnPropertyChangedCallback(new Observable.OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + + if (quantityDTO.qtaTotNotificationEnabled) { + + quantityDTO.blockedQtaTot.set(!(quantityDTO.qtaTot.get(true) == 0 || quantityDTO.qtaTot.get().toString() == "")); + + toggleTextInputLayoutError(txlInputQtaTot, quantityDTO.blockedQtaTot.get()); + + if(!quantityDTO.blockedQtaPerCnf.get()){ + + quantityDTO.qtaCnfNotificationEnabled = false; + quantityDTO.qtaCnf.set((float) Math.round(quantityDTO.qtaTot.get(true) / quantityDTO.numCnf.get(true) *100)/100); + quantityDTO.qtaCnfNotificationEnabled = true; + + } else if(!quantityDTO.blockedNumDiCnf.get()) { + + quantityDTO.numCnfNotificationEnabled = false; + quantityDTO.numCnf.set((float) Math.ceil(quantityDTO.qtaTot.get(true) / quantityDTO.qtaCnf.get(true))); + quantityDTO.numCnfNotificationEnabled = true; + + } else { + Log.e("DialogInputQuantity", "Tutti i campi sono bloccati, non è possibile modificare la quantità totale"); + } + + } + } + }); + + } + + + private void toggleTextInputLayoutError(TextInputLayout textInputLayout, boolean isError) { + if(isError){ + textInputLayout.setErrorEnabled(true); + textInputLayout.setError(" "); + textInputLayout.getEditText().setTextColor(ContextCompat.getColor(MainApplication.Context, R.color.red_600)); + textInputLayout.setHintTextAppearance(R.style.ErrorFloatingLabel); + + if (textInputLayout.getChildCount() == 2) { + textInputLayout.getChildAt(1).setVisibility(View.GONE); + } + } else { + textInputLayout.setErrorEnabled(false); + textInputLayout.setError(null); + textInputLayout.getEditText().setTextColor(originalColorStateList); + textInputLayout.setHintTextAppearance(R.style.NormalFloatingLabel); + } + } + + private void initDatePicker(Context context, QuantityDTO quantityDTO, AppCompatTextView textInputLayout) { + quantityDTO.expireDateString.set(scadenzaString); + + if(quantityDTO.expireDate != null) { + quantityDTO.expireDateString.set(UtilityDate.formatDate(quantityDTO.expireDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + } + + + Runnable onTextClicked = () -> { + // Get Current Date + Calendar c = Calendar.getInstance(); + + if(quantityDTO.expireDate != null) { + c.setTime(quantityDTO.expireDate); + } + + int mYear = c.get(Calendar.YEAR); + int mMonth = c.get(Calendar.MONTH); + int mDay = c.get(Calendar.DAY_OF_MONTH); + + DatePickerDialog datePickerDialog = new DatePickerDialog(context, + (view, year, month, day) -> { + + quantityDTO.expireDate = new GregorianCalendar(year, month, day).getTime(); + quantityDTO.expireDateString.set(UtilityDate.formatDate(quantityDTO.expireDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + + }, mYear, mMonth, mDay); + datePickerDialog.show(); + }; + + textInputLayout.setOnClickListener(v -> onTextClicked.run()); + + + } + + + private void onConfirm(Context context, QuantityDTO quantityDTO, ISingleValueOperationCallback dialogCallback){ + if(currentDTO.mtbAart.isFlagTracciabilita() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){ + + showBatchLotErrorPrompt(context); + + } else if(quantityDTO.shouldAskDataScad.get() && (quantityDTO.batchLot == null || quantityDTO.batchLot.get().trim().length() == 0)){ + + showBatchLotErrorPrompt(context); + + } else if(quantityDTO.shouldAskDataScad.get() && quantityDTO.expireDate == null){ + + showExpireDateErrorPrompt(context); + + } else if(!quantityDTO.canOverflowQuantity && quantityDTO.qtaTot.get() > quantityDTO.maxQta) { + + showQuantityOverflowErrorPrompt(context); + + } else if(quantityDTO.qtaCnf.get() <= 0 || quantityDTO.numCnf.get() <= 0 || quantityDTO.qtaTot.get() <= 0) { + + showQuantityErrorDialog(context); + + } else { + + dialogCallback.onResult(quantityDTO); + currentAlert.dismiss(); + + } + } + + + private void showQuantityErrorDialog(Context mContext){ + + String errorMessage = mContext.getText(R.string.wrong_quantity_input_message).toString(); + + DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show(); + } + + + private void showQuantityOverflowErrorPrompt(Context mContext){ + + String errorMessage = mContext.getText(R.string.quantity_overflow_error_message).toString(); + + DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show(); + } + + + private void showExpireDateErrorPrompt(Context mContext){ + + String errorMessage = mContext.getText(R.string.expire_date_error_message).toString(); + + DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show(); + } + + + private void showBatchLotErrorPrompt(Context mContext){ + + String errorMessage = mContext.getText(R.string.batch_lot_error_message).toString(); + + DialogSimpleMessageHelper.makeErrorDialog(mContext, new SpannableString(Html.fromHtml(errorMessage)), null, null).show(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java new file mode 100644 index 00000000..e5dbe9d3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity/QuantityDTO.java @@ -0,0 +1,47 @@ +package it.integry.integrywmsnative.view.dialogs.input_quantity; + +import android.graphics.Color; +import android.support.v4.content.ContextCompat; + +import java.util.Date; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.di.BindableBoolean; +import it.integry.integrywmsnative.core.di.BindableFloat; +import it.integry.integrywmsnative.core.di.BindableString; + +public class QuantityDTO { + + public BindableString batchLot = new BindableString(); + public BindableString expireDateString = new BindableString(); + + public Date expireDate = null; + + public BindableFloat numCnf = new BindableFloat(); + public BindableFloat qtaCnf = new BindableFloat(); + public BindableFloat qtaTot = new BindableFloat(); + + public BindableFloat qtaEvasa = new BindableFloat(); + public BindableFloat qtaDaEvadere = new BindableFloat(); + public BindableFloat qtaDisponibile = new BindableFloat(); + + + + public BindableBoolean blockedNumDiCnf = new BindableBoolean(); + public BindableBoolean blockedQtaTot = new BindableBoolean(); + public BindableBoolean blockedQtaPerCnf = new BindableBoolean(); + + public boolean numCnfNotificationEnabled = true; + public boolean qtaCnfNotificationEnabled = true; + public boolean qtaTotNotificationEnabled = true; + public boolean canOverflowQuantity = false; + public Float maxQta = 0f; + + + public BindableBoolean canPartitaMagBeChanged = new BindableBoolean(true); + public BindableBoolean canDataScadBeChanged = new BindableBoolean(true); + public BindableBoolean shouldAskDataScad = new BindableBoolean(); + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java new file mode 100644 index 00000000..65a9012a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLU.java @@ -0,0 +1,257 @@ +package it.integry.integrywmsnative.view.dialogs.scan_or_create_lu; + +import android.app.ProgressDialog; +import android.content.Context; +import android.databinding.DataBindingUtil; +import android.databinding.ViewDataBinding; +import android.support.v7.app.AlertDialog; +import android.text.SpannableString; +import android.view.LayoutInflater; +import android.view.View; + +import com.annimon.stream.Stream; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.REST.consumers.BarcodeRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; +import it.integry.integrywmsnative.core.REST.consumers.PosizioneRESTonsumer; +import it.integry.integrywmsnative.core.REST.consumers.SystemRESTConsumer; +import it.integry.integrywmsnative.core.REST.model.Ean128Model; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbColt; +import it.integry.integrywmsnative.core.model.MtbDepoPosizione; +import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.core.utility.UtilityToast; +import it.integry.integrywmsnative.databinding.DialogScanOrCreateLuBinding; +import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; +import it.integry.plugins.barcode_base_library.model.BarcodeScanDTO; +import it.integry.plugins.barcode_base_library.model.BarcodeType; + +public class DialogScanOrCreateLU { + + private Context currentContext; + + private AlertDialog currentAlert; + + private DialogScanOrCreateLuBinding mBinding; + + private RunnableArgs mOnDialogDismiss; + + private MtbColt currentMtbColt; + + + public static AlertDialog make(final Context context, RunnableArgs onDialogDismiss) { + return new DialogScanOrCreateLU(context, false, onDialogDismiss).currentAlert; + } + + public static AlertDialog make(final Context context, boolean disableCreation, RunnableArgs onDialogDismiss) { + return new DialogScanOrCreateLU(context, disableCreation, onDialogDismiss).currentAlert; + } + + private DialogScanOrCreateLU(Context context, boolean disableCreation, RunnableArgs onDialogDismiss) { + mOnDialogDismiss = null; + currentMtbColt = null; + + currentContext = context; + + LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); + + mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_scan_or_create_lu, null, false); + + if(disableCreation) mBinding.dialogScanOrCreateLuCreationLayout.setVisibility(View.GONE); + + final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context) + .setView(mBinding.getRoot()); + + currentAlert = alertDialog.create(); + currentAlert.setCanceledOnTouchOutside(false); + + init(onDialogDismiss); + initBarcode(context); + } + + + private void init(RunnableArgs onDialogDismiss) { + mOnDialogDismiss = onDialogDismiss; + + mBinding.createNewLuButton.setOnClickListener(v -> { + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext); + + ColliMagazzinoRESTConsumer.createColloLavorazione(+1, createdMtbColt -> { + sendMtbColt(createdMtbColt, progressDialog); + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + }); + }); + } + + private void initBarcode(Context context) { + + int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(onScanSuccessfull) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(context, ex, false))); + + currentAlert.setOnDismissListener(dialog -> { + BarcodeManager.removeCallback(barcodeIstanceID); + BarcodeManager.enable(); + if(currentMtbColt == null) { + mOnDialogDismiss.run(null); + } + }); + + } + + + private RunnableArgs onScanSuccessfull = data -> { + BarcodeManager.disable(); + + final ProgressDialog progressDialog = UtilityProgress.createDefaultProgressDialog(currentContext); + + if(UtilityBarcode.isEtichettaPosizione(data)){ + this.executeEtichettaPosizione(data, progressDialog); + } else if(UtilityBarcode.isEtichettaAnonima(data)) { + this.executeEtichettaAnonima(data, progressDialog); + } else if(UtilityBarcode.isEtichetta128(data)) { + this.executeEAN128(data, progressDialog); + } else { + progressDialog.dismiss(); + BarcodeManager.enable(); + showNoULFound(); + } + + }; + + private void executeEtichettaPosizione(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + + MtbDepoPosizione foundPosizione = Stream.of(SettingsManager.iDB().getAvailablePosizioni()) + .filter(x -> x.getPosizione().equalsIgnoreCase(barcodeScanDTO.getStringValue())) + .single(); + + PosizioneRESTonsumer.getBancaliInPosizione(foundPosizione, mtbColtList -> { + + if(mtbColtList == null || mtbColtList.size() == 0){ + progressDialog.dismiss(); + BarcodeManager.enable(); + showNoULFound(); + } else if (mtbColtList.size() == 1) { + ColliMagazzinoRESTConsumer.getByTestata(mtbColtList.get(0), true, false, mtbColt -> { + sendMtbColt(mtbColt, progressDialog); + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + + + } else { + progressDialog.dismiss(); + BarcodeManager.enable(); + showTooMuchULFound(); + } + + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + } + + + private void executeEtichettaAnonima(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + ColliMagazzinoRESTConsumer.getBySSCC(barcodeScanDTO.getStringValue(), true, false, mtbColt -> { + + if(mtbColt == null) { + + ColliMagazzinoRESTConsumer.createColloFromEtichettaAnonima(barcodeScanDTO, GestioneEnum.LAVORAZIONE, createdMtbColt -> { + BarcodeManager.enable(); + createdMtbColt.setDisablePrint(true); + sendMtbColt(createdMtbColt, progressDialog); + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + } else { + + BarcodeManager.enable(); + + mtbColt.setDisablePrint(true); + sendMtbColt(mtbColt, progressDialog); + + } + + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private void executeEAN128(BarcodeScanDTO barcodeScanDTO, ProgressDialog progressDialog) { + BarcodeRESTConsumer.decodeEan128(barcodeScanDTO, ean128Model -> { + + if(ean128Model != null && !UtilityString.isNullOrEmpty(ean128Model.Sscc)) { + + ColliMagazzinoRESTConsumer.getBySSCC(ean128Model.Sscc, true, false, mtbColt -> { + + if(mtbColt != null) { + + BarcodeManager.enable(); + sendMtbColt(mtbColt, progressDialog); + + } else { + BarcodeManager.enable(); + progressDialog.dismiss(); + showNoULFound(); + } + + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + + } else { + BarcodeManager.enable(); + progressDialog.dismiss(); + + showNoULFound(); + } + + + + + }, ex -> { + UtilityExceptions.defaultException(currentContext, ex, progressDialog); + BarcodeManager.enable(); + }); + } + + + private void showTooMuchULFound() { + DialogSimpleMessageHelper.makeWarningDialog(currentContext, + new SpannableString(currentContext.getResources().getText(R.string.too_much_lu_found_message)), + null, null).show(); + } + + private void showNoULFound() { + DialogSimpleMessageHelper.makeWarningDialog(currentContext, + new SpannableString(currentContext.getResources().getText(R.string.no_lu_found_message)), + null, null).show(); + } + + private void sendMtbColt(MtbColt mtbColtToSend, ProgressDialog progressDialog) { + currentMtbColt = mtbColtToSend; + progressDialog.dismiss(); + currentAlert.dismiss(); + mOnDialogDismiss.run(mtbColtToSend); + } + +} diff --git a/app/src/main/res/drawable/bottom_list_background_round16.xml b/app/src/main/res/drawable/bottom_list_background_round16.xml new file mode 100644 index 00000000..f0bcdafd --- /dev/null +++ b/app/src/main/res/drawable/bottom_list_background_round16.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_sheet_modal_background.xml b/app/src/main/res/drawable/bottom_sheet_modal_background.xml new file mode 100644 index 00000000..4d78ebff --- /dev/null +++ b/app/src/main/res/drawable/bottom_sheet_modal_background.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/circleshape.xml b/app/src/main/res/drawable/circleshape.xml new file mode 100644 index 00000000..72a65f0a --- /dev/null +++ b/app/src/main/res/drawable/circleshape.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/circular_background.xml b/app/src/main/res/drawable/circular_background.xml new file mode 100644 index 00000000..687539f0 --- /dev/null +++ b/app/src/main/res/drawable/circular_background.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/circular_background_left.xml b/app/src/main/res/drawable/circular_background_left.xml new file mode 100644 index 00000000..e676105c --- /dev/null +++ b/app/src/main/res/drawable/circular_background_left.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/divider.xml b/app/src/main/res/drawable/divider.xml new file mode 100644 index 00000000..65db97cb --- /dev/null +++ b/app/src/main/res/drawable/divider.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/fab_label_background.xml b/app/src/main/res/drawable/fab_label_background.xml new file mode 100644 index 00000000..0d8c05b1 --- /dev/null +++ b/app/src/main/res/drawable/fab_label_background.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gray_detail_background.xml b/app/src/main/res/drawable/gray_detail_background.xml new file mode 100644 index 00000000..b7eae3a1 --- /dev/null +++ b/app/src/main/res/drawable/gray_detail_background.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gray_detail_background_round16.xml b/app/src/main/res/drawable/gray_detail_background_round16.xml new file mode 100644 index 00000000..27ee4dae --- /dev/null +++ b/app/src/main/res/drawable/gray_detail_background_round16.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gray_detail_background_round8.xml b/app/src/main/res/drawable/gray_detail_background_round8.xml new file mode 100644 index 00000000..aeae356f --- /dev/null +++ b/app/src/main/res/drawable/gray_detail_background_round8.xml @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_add_24dp.xml b/app/src/main/res/drawable/ic_add_24dp.xml new file mode 100644 index 00000000..d643974f --- /dev/null +++ b/app/src/main/res/drawable/ic_add_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_box.xml b/app/src/main/res/drawable/ic_box.xml new file mode 100644 index 00000000..457c72f7 --- /dev/null +++ b/app/src/main/res/drawable/ic_box.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_clear_24dp.xml b/app/src/main/res/drawable/ic_clear_24dp.xml new file mode 100644 index 00000000..594883a8 --- /dev/null +++ b/app/src/main/res/drawable/ic_clear_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_clear_black_24dp.xml b/app/src/main/res/drawable/ic_clear_black_24dp.xml new file mode 100644 index 00000000..ede4b710 --- /dev/null +++ b/app/src/main/res/drawable/ic_clear_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_clear_white_24dp.xml b/app/src/main/res/drawable/ic_clear_white_24dp.xml new file mode 100644 index 00000000..1e2d044b --- /dev/null +++ b/app/src/main/res/drawable/ic_clear_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_close_24dp.xml b/app/src/main/res/drawable/ic_close_24dp.xml new file mode 100644 index 00000000..0c8775c4 --- /dev/null +++ b/app/src/main/res/drawable/ic_close_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_close_red_24dp.xml b/app/src/main/res/drawable/ic_close_red_24dp.xml new file mode 100644 index 00000000..03697e0f --- /dev/null +++ b/app/src/main/res/drawable/ic_close_red_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_delete_24dp.xml b/app/src/main/res/drawable/ic_delete_24dp.xml new file mode 100644 index 00000000..39e64d69 --- /dev/null +++ b/app/src/main/res/drawable/ic_delete_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_done_white_24dp.xml b/app/src/main/res/drawable/ic_done_white_24dp.xml new file mode 100644 index 00000000..1c53ecbd --- /dev/null +++ b/app/src/main/res/drawable/ic_done_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_edit_24dp.xml b/app/src/main/res/drawable/ic_edit_24dp.xml new file mode 100644 index 00000000..2ab2fb75 --- /dev/null +++ b/app/src/main/res/drawable/ic_edit_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_error_white_24dp.xml b/app/src/main/res/drawable/ic_error_white_24dp.xml new file mode 100644 index 00000000..6cfb3cb6 --- /dev/null +++ b/app/src/main/res/drawable/ic_error_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_info_78dp.xml b/app/src/main/res/drawable/ic_info_78dp.xml new file mode 100644 index 00000000..d2ea4c23 --- /dev/null +++ b/app/src/main/res/drawable/ic_info_78dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_information_outline_24dp.xml b/app/src/main/res/drawable/ic_information_outline_24dp.xml new file mode 100644 index 00000000..89d56934 --- /dev/null +++ b/app/src/main/res/drawable/ic_information_outline_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_logout_24dp.xml b/app/src/main/res/drawable/ic_logout_24dp.xml new file mode 100644 index 00000000..e233f593 --- /dev/null +++ b/app/src/main/res/drawable/ic_logout_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu_24dp.xml b/app/src/main/res/drawable/ic_menu_24dp.xml new file mode 100644 index 00000000..3d6bca18 --- /dev/null +++ b/app/src/main/res/drawable/ic_menu_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mood_bad_24dp.xml b/app/src/main/res/drawable/ic_mood_bad_24dp.xml new file mode 100644 index 00000000..2c6c38e7 --- /dev/null +++ b/app/src/main/res/drawable/ic_mood_bad_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/ic_palette_24dp.xml b/app/src/main/res/drawable/ic_palette_24dp.xml new file mode 100644 index 00000000..64f8a1a7 --- /dev/null +++ b/app/src/main/res/drawable/ic_palette_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_playlist_add_check_24dp.xml b/app/src/main/res/drawable/ic_playlist_add_check_24dp.xml new file mode 100644 index 00000000..4f7a1c13 --- /dev/null +++ b/app/src/main/res/drawable/ic_playlist_add_check_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_print_24dp.xml b/app/src/main/res/drawable/ic_print_24dp.xml new file mode 100644 index 00000000..3d09fcaa --- /dev/null +++ b/app/src/main/res/drawable/ic_print_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_recover_ul_24dp.xml b/app/src/main/res/drawable/ic_recover_ul_24dp.xml new file mode 100644 index 00000000..cfccccae --- /dev/null +++ b/app/src/main/res/drawable/ic_recover_ul_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_save_24dp.xml b/app/src/main/res/drawable/ic_save_24dp.xml new file mode 100644 index 00000000..92ff10cb --- /dev/null +++ b/app/src/main/res/drawable/ic_save_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_save_black_24dp.xml b/app/src/main/res/drawable/ic_save_black_24dp.xml new file mode 100644 index 00000000..a561d632 --- /dev/null +++ b/app/src/main/res/drawable/ic_save_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_save_white_24dp.xml b/app/src/main/res/drawable/ic_save_white_24dp.xml new file mode 100644 index 00000000..7242923e --- /dev/null +++ b/app/src/main/res/drawable/ic_save_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_settings_24dp.xml b/app/src/main/res/drawable/ic_settings_24dp.xml new file mode 100644 index 00000000..590a0dd8 --- /dev/null +++ b/app/src/main/res/drawable/ic_settings_24dp.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_warning_white_24dp.xml b/app/src/main/res/drawable/ic_warning_white_24dp.xml new file mode 100644 index 00000000..3aea284b --- /dev/null +++ b/app/src/main/res/drawable/ic_warning_white_24dp.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/logo_integry_testo.xml b/app/src/main/res/drawable/logo_integry_testo.xml new file mode 100644 index 00000000..32918cc6 --- /dev/null +++ b/app/src/main/res/drawable/logo_integry_testo.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ripple_effect.xml b/app/src/main/res/drawable/ripple_effect.xml new file mode 100644 index 00000000..de3ca6a0 --- /dev/null +++ b/app/src/main/res/drawable/ripple_effect.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_gradient_top_shadow.xml b/app/src/main/res/drawable/shape_gradient_top_shadow.xml new file mode 100644 index 00000000..2d104223 --- /dev/null +++ b/app/src/main/res/drawable/shape_gradient_top_shadow.xml @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/font/open_sans_bold.ttf b/app/src/main/res/font/open_sans_bold.ttf new file mode 100644 index 00000000..7b529456 Binary files /dev/null and b/app/src/main/res/font/open_sans_bold.ttf differ diff --git a/app/src/main/res/font/open_sans_bold_italic.ttf b/app/src/main/res/font/open_sans_bold_italic.ttf new file mode 100644 index 00000000..a670e142 Binary files /dev/null and b/app/src/main/res/font/open_sans_bold_italic.ttf differ diff --git a/app/src/main/res/font/open_sans_extra_bold.ttf b/app/src/main/res/font/open_sans_extra_bold.ttf new file mode 100644 index 00000000..3660681d Binary files /dev/null and b/app/src/main/res/font/open_sans_extra_bold.ttf differ diff --git a/app/src/main/res/font/open_sans_extra_bold_italic.ttf b/app/src/main/res/font/open_sans_extra_bold_italic.ttf new file mode 100644 index 00000000..8c4c15d8 Binary files /dev/null and b/app/src/main/res/font/open_sans_extra_bold_italic.ttf differ diff --git a/app/src/main/res/font/open_sans_italic.ttf b/app/src/main/res/font/open_sans_italic.ttf new file mode 100644 index 00000000..e6c54141 Binary files /dev/null and b/app/src/main/res/font/open_sans_italic.ttf differ diff --git a/app/src/main/res/font/open_sans_light.ttf b/app/src/main/res/font/open_sans_light.ttf new file mode 100644 index 00000000..563872c7 Binary files /dev/null and b/app/src/main/res/font/open_sans_light.ttf differ diff --git a/app/src/main/res/font/open_sans_light_italic.ttf b/app/src/main/res/font/open_sans_light_italic.ttf new file mode 100644 index 00000000..5ebe2a29 Binary files /dev/null and b/app/src/main/res/font/open_sans_light_italic.ttf differ diff --git a/app/src/main/res/font/open_sans_regular.ttf b/app/src/main/res/font/open_sans_regular.ttf new file mode 100644 index 00000000..2e31d024 Binary files /dev/null and b/app/src/main/res/font/open_sans_regular.ttf differ diff --git a/app/src/main/res/font/open_sans_semi_bold.ttf b/app/src/main/res/font/open_sans_semi_bold.ttf new file mode 100644 index 00000000..99db86aa Binary files /dev/null and b/app/src/main/res/font/open_sans_semi_bold.ttf differ diff --git a/app/src/main/res/font/open_sans_semi_bold_italic.ttf b/app/src/main/res/font/open_sans_semi_bold_italic.ttf new file mode 100644 index 00000000..8cad4e32 Binary files /dev/null and b/app/src/main/res/font/open_sans_semi_bold_italic.ttf differ diff --git a/app/src/main/res/layout/accettazione_ordine_inevaso_main_list___cod_art_for.xml b/app/src/main/res/layout/accettazione_ordine_inevaso_main_list___cod_art_for.xml index f53f5bf6..5204f59f 100644 --- a/app/src/main/res/layout/accettazione_ordine_inevaso_main_list___cod_art_for.xml +++ b/app/src/main/res/layout/accettazione_ordine_inevaso_main_list___cod_art_for.xml @@ -1,7 +1,6 @@ - @@ -20,8 +19,7 @@ android:textColor="@android:color/white" android:textStyle="bold" android:maxLines="1" - android:ellipsize="end" - style="@android:style/TextAppearance.Medium" /> + android:ellipsize="end" /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/accettazione_ordine_inevaso_main_list___cod_art_for_group_model.xml b/app/src/main/res/layout/accettazione_ordine_inevaso_main_list___cod_art_for_group_model.xml index ab760a0b..ad907c78 100644 --- a/app/src/main/res/layout/accettazione_ordine_inevaso_main_list___cod_art_for_group_model.xml +++ b/app/src/main/res/layout/accettazione_ordine_inevaso_main_list___cod_art_for_group_model.xml @@ -3,6 +3,7 @@ xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/full_white" android:padding="8dp"> diff --git a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml index 6766dfca..5bdcb713 100644 --- a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml +++ b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml @@ -1,39 +1,259 @@ - - + + + + + + + + + + android:fitsSystemWindows="false" + xmlns:fab="http://schemas.android.com/apk/res-auto" + android:layout_gravity="top"> - - - + android:layout_height="match_parent" + android:orientation="vertical"> - + - + - + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_contenuto_bancale.xml b/app/src/main/res/layout/activity_contenuto_bancale.xml new file mode 100644 index 00000000..964e0fca --- /dev/null +++ b/app/src/main/res/layout/activity_contenuto_bancale.xml @@ -0,0 +1,252 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_lista_bancali.xml b/app/src/main/res/layout/activity_lista_bancali.xml new file mode 100644 index 00000000..7887f849 --- /dev/null +++ b/app/src/main/res/layout/activity_lista_bancali.xml @@ -0,0 +1,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 00000000..c9e0bf28 --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a61d8a63..1597f3e7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,25 +1,29 @@ - - - + - - + tools:openDrawer="start"> - + + + + + + + diff --git a/app/src/main/res/layout/activity_vendita_ordine_inevaso.xml b/app/src/main/res/layout/activity_vendita_ordine_inevaso.xml new file mode 100644 index 00000000..d44f534f --- /dev/null +++ b/app/src/main/res/layout/activity_vendita_ordine_inevaso.xml @@ -0,0 +1,262 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml index 65262710..71e83c92 100644 --- a/app/src/main/res/layout/app_bar_main.xml +++ b/app/src/main/res/layout/app_bar_main.xml @@ -1,36 +1,63 @@ - - - + + android:layout_height="match_parent" + android:orientation="vertical" + tools:context="it.integry.integrywmsnative.MainActivity"> - + android:layout_height="wrap_content"> - + - + - + - + - + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index dadc681c..9f598de0 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -11,6 +11,10 @@ + android:layout_height="match_parent" > + + + + diff --git a/app/src/main/res/layout/dialog_ask_position_of_lu.xml b/app/src/main/res/layout/dialog_ask_position_of_lu.xml new file mode 100644 index 00000000..a114866d --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_position_of_lu.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_position_of_lu__page1.xml b/app/src/main/res/layout/dialog_ask_position_of_lu__page1.xml new file mode 100644 index 00000000..c45228ea --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_position_of_lu__page1.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_position_of_lu__page2.xml b/app/src/main/res/layout/dialog_ask_position_of_lu__page2.xml new file mode 100644 index 00000000..0ce7f04d --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_position_of_lu__page2.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml new file mode 100644 index 00000000..beb1be65 --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml new file mode 100644 index 00000000..1237983f --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_art_from_lista_art__item_model.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml new file mode 100644 index 00000000..07bfb696 --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts__item_model.xml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml new file mode 100644 index 00000000..cabe6fd4 --- /dev/null +++ b/app/src/main/res/layout/dialog_choose_arts_from_lista_arts_layout.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_custom_content.xml b/app/src/main/res/layout/dialog_custom_content.xml new file mode 100644 index 00000000..51690596 --- /dev/null +++ b/app/src/main/res/layout/dialog_custom_content.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_custom_content_hashmap_viewmodel.xml b/app/src/main/res/layout/dialog_custom_content_hashmap_viewmodel.xml new file mode 100644 index 00000000..3b9f94ab --- /dev/null +++ b/app/src/main/res/layout/dialog_custom_content_hashmap_viewmodel.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_custom_header.xml b/app/src/main/res/layout/dialog_custom_header.xml index 8e5aeba9..799faad1 100644 --- a/app/src/main/res/layout/dialog_custom_header.xml +++ b/app/src/main/res/layout/dialog_custom_header.xml @@ -1,4 +1,5 @@ + > + + + android:gravity="center" + android:textColor="@android:color/black" + android:textSize="24sp"/> + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_input_quantity_articolo.xml b/app/src/main/res/layout/dialog_input_quantity_articolo.xml new file mode 100644 index 00000000..66bbbbd4 --- /dev/null +++ b/app/src/main/res/layout/dialog_input_quantity_articolo.xml @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_scan_or_create_lu.xml b/app/src/main/res/layout/dialog_scan_or_create_lu.xml new file mode 100644 index 00000000..ea02e853 --- /dev/null +++ b/app/src/main/res/layout/dialog_scan_or_create_lu.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml new file mode 100644 index 00000000..1661e884 --- /dev/null +++ b/app/src/main/res/layout/dialog_vendita_filtro_avanzato.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_articoli_in_collo_bottom_sheet.xml b/app/src/main/res/layout/fragment_articoli_in_collo_bottom_sheet.xml new file mode 100644 index 00000000..5e6b84f9 --- /dev/null +++ b/app/src/main/res/layout/fragment_articoli_in_collo_bottom_sheet.xml @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + +