diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 8d5b9119..35c0fd10 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -18,7 +18,7 @@ @@ -29,11 +29,9 @@ diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 67cc901d..67f5dc32 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 00000000..1d2cf4e1 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 99774301..e85949ef 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' android { compileSdkVersion 27 @@ -6,7 +7,7 @@ android { defaultConfig { applicationId "it.integry.integrywmsnative" minSdkVersion 21 - targetSdkVersion 25 + targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -29,6 +30,9 @@ dependencies { exclude group: 'com.android.support', module: 'support-annotations' }) + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + + implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:support-v4:27.1.1' implementation 'com.android.support:design:27.1.1' @@ -64,14 +68,17 @@ dependencies { implementation 'de.hdodenhof:circleimageview:2.2.0' -// implementation 'com.mahc.custombottomsheetbehavior:googlemaps-like:0.9.1' -// implementation 'com.sothree.slidinguppanel:library:3.4.0' - implementation 'com.fxn769:stash:1.2' implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2' implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar' + implementation 'com.fede987:status-bar-alert:1.0.1' + + testImplementation 'junit:junit:4.12' } +repositories { + mavenCentral() +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 69b03b8d..25005f02 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,6 +26,7 @@ diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplication.java b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java index 3771b45a..9038a4d8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplication.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplication.java @@ -1,7 +1,9 @@ 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 it.integry.integrywmsnative.core.settings.SettingsManager; @@ -10,6 +12,9 @@ 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 @@ -19,6 +24,9 @@ public class MainApplication extends Application { SettingsManager.init(this); + res = getResources(); + Context = this; + } // Called by the system when the device configuration changes while your component is running. diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBoolean.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBoolean.java index 93af2bab..fe2013ca 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBoolean.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBoolean.java @@ -8,6 +8,12 @@ import org.parceler.Parcel; public class BindableBoolean extends BaseObservable { boolean mValue; + public BindableBoolean() {} + + public BindableBoolean(boolean startValue) { + this.mValue = startValue; + } + public boolean get() { return mValue; } 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..a3ce56e4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java @@ -0,0 +1,30 @@ +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 value == null ? 0 : value; + } + + public Float get(boolean defaultIfNull) { + return value == null && defaultIfNull ? 0 : 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/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java index d66bf610..a56bb22a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java @@ -4,12 +4,18 @@ import android.databinding.BindingAdapter; import android.databinding.BindingConversion; import android.support.design.widget.TextInputEditText; import android.support.v4.util.Pair; +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; @@ -67,6 +73,45 @@ public class Converters { } } + @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) { 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 index 28e80be5..b6bba06d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/CommonModelConsts.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/CommonModelConsts.java @@ -9,6 +9,7 @@ public class CommonModelConsts { public static String SELECT = "SELECT"; public static String SELECT_OBJECT = "SELECT_OBJECT"; public static String SUBSTITUTE = "SUBSTITUTE"; + public static String NO_OP = "NO_OP"; } } 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 index 3dc36fb4..732682f0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/EntityBase.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/EntityBase.java @@ -1,6 +1,8 @@ package it.integry.integrywmsnative.core.model; -public abstract class EntityBase { +import android.util.Log; + +public abstract class EntityBase implements Cloneable{ public String operation; public String type; @@ -23,4 +25,17 @@ public abstract class EntityBase { 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/MtbAart.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbAart.java index 878853bc..07846feb 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 @@ -92,6 +92,16 @@ public class MtbAart implements Parcelable{ public MtbAart(){} + + public boolean isFlagTracciabilita() { + return flagTracciabilita != null && flagTracciabilita.equalsIgnoreCase("S"); + } + + + + + + protected MtbAart(Parcel in) { codMart = in.readString(); descrizione = in.readString(); 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 index c4fdee8c..9f02ff78 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbColr.java @@ -1,12 +1,13 @@ package it.integry.integrywmsnative.core.model; import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Date; public class MtbColr extends EntityBase{ - private Date dataCollo; private String gestione; private String serCollo; private Integer numCollo; @@ -20,19 +21,19 @@ public class MtbColr extends EntityBase{ private String gestioneRif; private String serColloRif; private String note; - private Date dataOrd; - private Date dataColloRif; + private String dataOrd; + private String dataColloRif; private BigDecimal qtaCnf; private BigDecimal qtaCol; private Integer numOrd; private Integer numEtich; private Integer numColloRif; - private Date datetimeRow; + private String datetimeRow; private String codJcom; private BigDecimal numCnf; private String insPartitaMag; private String mtbPartitaMag_descrizione; - private Date dataScadPartita; + private String dataScadPartita; private String descrizione; @@ -40,14 +41,6 @@ public class MtbColr extends EntityBase{ type = "mtb_colr"; } - public Date getDataCollo() { - return dataCollo; - } - - public MtbColr setDataCollo(Date dataCollo) { - this.dataCollo = dataCollo; - return this; - } public String getGestione() { return gestione; @@ -166,24 +159,46 @@ public class MtbColr extends EntityBase{ return this; } - public Date getDataOrd() { + public String getDataOrdS() { return dataOrd; } - public MtbColr setDataOrd(Date dataOrd) { + public Date getDataOrdD() throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataOrdS()); + } + + public MtbColr setDataOrd(String dataOrd) { this.dataOrd = dataOrd; return this; } - public Date getDataColloRif() { + 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 MtbColr setDataColloRif(Date dataColloRif) { + public Date getDataColloRifD() throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataColloRifS()); + } + + 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; } @@ -229,15 +244,35 @@ public class MtbColr extends EntityBase{ return this; } - public Date getDatetimeRow() { + + + + public String getDatetimeRowS() { return datetimeRow; } - public MtbColr setDatetimeRow(Date 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; } @@ -274,15 +309,33 @@ public class MtbColr extends EntityBase{ return this; } - public Date getDataScadPartita() { + + + + + + + public String getDataScadPartitaS() { return dataScadPartita; } - public MtbColr setDataScadPartita(Date dataScadPartita) { + public Date getDataScadPartitaD() throws ParseException { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + return sdf.parse(getDataScadPartitaS()); + } + + public MtbColr setDataScadPartita(String dataScadPartita) { this.dataScadPartita = dataScadPartita; return this; } + public MtbColr setDataScadPartita(Date dataScadPartita) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + this.dataScadPartita = sdf.format(dataScadPartita); + return this; + } + + public String getDescrizione() { return descrizione; } 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 dc45449a..2f65a361 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; @@ -17,6 +18,7 @@ import it.integry.integrywmsnative.R; 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. @@ -28,6 +30,9 @@ public class MainListAccettazioneAdapter extends RecyclerView.Adapter mDataset; private ICheckBoxCallback mCheckBoxCallback; + 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; @@ -95,20 +100,17 @@ public class MainListAccettazioneAdapter extends RecyclerView.Adapter(); - //} + ordine.checkBoxCallback = new ArrayList<>(); - boolean isCreatedNew = false; - - if(holder.views.size() <= i){ - holder.views.add(LayoutInflater.from(mContext) - .inflate(R.layout.accettazione_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false)); - isCreatedNew = true; + View groupModelViewPool = (View) sPool.acquire(); + if(groupModelViewPool == null){ + groupModelViewPool = LayoutInflater.from(mContext) + .inflate(R.layout.accettazione_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false); } + View groupModelView = groupModelViewPool; + holder.views.add(groupModelView); - View groupModelView = holder.views.get(i); groupModelView.setVisibility(View.VISIBLE); @@ -145,8 +147,16 @@ public class MainListAccettazioneAdapter extends RecyclerView.Adapter