This commit is contained in:
Giuseppe Scorrano 2018-07-23 18:16:32 +02:00
parent 5bcbfaf206
commit d1f2b808c7
52 changed files with 1643 additions and 152 deletions

View File

@ -18,7 +18,7 @@
<PersistentState> <PersistentState>
<option name="values"> <option name="values">
<map> <map>
<entry key="url" value="jar:file:/C:/Program%20Files/Android/Android%20Studio/plugins/android/lib/android.jar!/images/material_design_icons/action/ic_info_black_24dp.xml" /> <entry key="url" value="jar:file:/C:/Program%20Files/Android/Android%20Studio/plugins/android/lib/android.jar!/images/material_design_icons/navigation/ic_close_black_24dp.xml" />
</map> </map>
</option> </option>
</PersistentState> </PersistentState>
@ -29,11 +29,9 @@
<option name="values"> <option name="values">
<map> <map>
<entry key="color" value="ffffff" /> <entry key="color" value="ffffff" />
<entry key="height" value="78" /> <entry key="outputName" value="ic_close_new_24dp" />
<entry key="outputName" value="ic_info_78dp" />
<entry key="overrideSize" value="true" /> <entry key="overrideSize" value="true" />
<entry key="sourceFile" value="C:\Users\GiuseppeS" /> <entry key="sourceFile" value="C:\Users\GiuseppeS" />
<entry key="width" value="78" />
</map> </map>
</option> </option>
</PersistentState> </PersistentState>

Binary file not shown.

8
.idea/kotlinc.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KotlinCommonCompilerArguments">
<option name="errors">
<ArgumentParseErrors />
</option>
</component>
</project>

View File

@ -1,4 +1,5 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
android { android {
compileSdkVersion 27 compileSdkVersion 27
@ -6,7 +7,7 @@ android {
defaultConfig { defaultConfig {
applicationId "it.integry.integrywmsnative" applicationId "it.integry.integrywmsnative"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 25 targetSdkVersion 27
versionCode 1 versionCode 1
versionName "1.0" versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
@ -29,6 +30,9 @@ dependencies {
exclude group: 'com.android.support', module: 'support-annotations' 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:appcompat-v7:27.1.1'
implementation 'com.android.support:support-v4:27.1.1' implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:design:27.1.1' implementation 'com.android.support:design:27.1.1'
@ -64,14 +68,17 @@ dependencies {
implementation 'de.hdodenhof:circleimageview:2.2.0' 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 'com.fxn769:stash:1.2'
implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2' implementation 'net.cachapa.expandablelayout:expandablelayout:2.9.2'
implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar' implementation 'com.github.frankiesardo:linearlistview:1.0.1@aar'
implementation 'com.fede987:status-bar-alert:1.0.1'
testImplementation 'junit:junit:4.12' testImplementation 'junit:junit:4.12'
} }
repositories {
mavenCentral()
}

View File

@ -26,6 +26,7 @@
</activity> </activity>
<activity <activity
android:name=".gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity" android:name=".gest.accettazione_ordine_inevaso.AccettazioneOrdineInevasoActivity"
android:windowSoftInputMode="adjustNothing"
android:theme="@style/AppTheme.NoActionBar" /> android:theme="@style/AppTheme.NoActionBar" />
<activity android:name=".gest.login.LoginActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar"></activity> <activity android:name=".gest.login.LoginActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar"></activity>
</application> </application>

View File

@ -1,7 +1,9 @@
package it.integry.integrywmsnative; package it.integry.integrywmsnative;
import android.app.Application; import android.app.Application;
import android.content.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources;
import android.text.SpannableString; import android.text.SpannableString;
import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsManager;
@ -10,6 +12,9 @@ import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper;
public class MainApplication extends Application { 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. // Called when the application is starting, before any other application objects have been created.
// Overriding this method is totally optional! // Overriding this method is totally optional!
@Override @Override
@ -19,6 +24,9 @@ public class MainApplication extends Application {
SettingsManager.init(this); SettingsManager.init(this);
res = getResources();
Context = this;
} }
// Called by the system when the device configuration changes while your component is running. // Called by the system when the device configuration changes while your component is running.

View File

@ -8,6 +8,12 @@ import org.parceler.Parcel;
public class BindableBoolean extends BaseObservable { public class BindableBoolean extends BaseObservable {
boolean mValue; boolean mValue;
public BindableBoolean() {}
public BindableBoolean(boolean startValue) {
this.mValue = startValue;
}
public boolean get() { public boolean get() {
return mValue; return mValue;
} }

View File

@ -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;
}
}

View File

@ -4,12 +4,18 @@ import android.databinding.BindingAdapter;
import android.databinding.BindingConversion; import android.databinding.BindingConversion;
import android.support.design.widget.TextInputEditText; import android.support.design.widget.TextInputEditText;
import android.support.v4.util.Pair; import android.support.v4.util.Pair;
import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.EditText; import android.widget.EditText;
import android.widget.RadioButton; import android.widget.RadioButton;
import android.widget.RadioGroup; 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; 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<BindableFloat, TextWatcherAdapter> 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") @BindingAdapter("app:binding")
public static void bindRadioGroup(RadioGroup view, final BindableBoolean bindableBoolean) { public static void bindRadioGroup(RadioGroup view, final BindableBoolean bindableBoolean) {
if (view.getTag(R.id.bound_observable) != bindableBoolean) { if (view.getTag(R.id.bound_observable) != bindableBoolean) {

View File

@ -9,6 +9,7 @@ public class CommonModelConsts {
public static String SELECT = "SELECT"; public static String SELECT = "SELECT";
public static String SELECT_OBJECT = "SELECT_OBJECT"; public static String SELECT_OBJECT = "SELECT_OBJECT";
public static String SUBSTITUTE = "SUBSTITUTE"; public static String SUBSTITUTE = "SUBSTITUTE";
public static String NO_OP = "NO_OP";
} }
} }

View File

@ -1,6 +1,8 @@
package it.integry.integrywmsnative.core.model; 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 operation;
public String type; public String type;
@ -23,4 +25,17 @@ public abstract class EntityBase {
this.onlyPkMaster = onlyPkMaster; this.onlyPkMaster = onlyPkMaster;
return this; return this;
} }
@Override
public EntityBase clone(){
EntityBase clone = null;
try {
clone = (EntityBase) super.clone();
} catch (CloneNotSupportedException ex){
Log.e("CloneError", ex.getMessage());
}
return clone;
}
} }

View File

@ -92,6 +92,16 @@ public class MtbAart implements Parcelable{
public MtbAart(){} public MtbAart(){}
public boolean isFlagTracciabilita() {
return flagTracciabilita != null && flagTracciabilita.equalsIgnoreCase("S");
}
protected MtbAart(Parcel in) { protected MtbAart(Parcel in) {
codMart = in.readString(); codMart = in.readString();
descrizione = in.readString(); descrizione = in.readString();

View File

@ -1,12 +1,13 @@
package it.integry.integrywmsnative.core.model; package it.integry.integrywmsnative.core.model;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
public class MtbColr extends EntityBase{ public class MtbColr extends EntityBase{
private Date dataCollo;
private String gestione; private String gestione;
private String serCollo; private String serCollo;
private Integer numCollo; private Integer numCollo;
@ -20,19 +21,19 @@ public class MtbColr extends EntityBase{
private String gestioneRif; private String gestioneRif;
private String serColloRif; private String serColloRif;
private String note; private String note;
private Date dataOrd; private String dataOrd;
private Date dataColloRif; private String dataColloRif;
private BigDecimal qtaCnf; private BigDecimal qtaCnf;
private BigDecimal qtaCol; private BigDecimal qtaCol;
private Integer numOrd; private Integer numOrd;
private Integer numEtich; private Integer numEtich;
private Integer numColloRif; private Integer numColloRif;
private Date datetimeRow; private String datetimeRow;
private String codJcom; private String codJcom;
private BigDecimal numCnf; private BigDecimal numCnf;
private String insPartitaMag; private String insPartitaMag;
private String mtbPartitaMag_descrizione; private String mtbPartitaMag_descrizione;
private Date dataScadPartita; private String dataScadPartita;
private String descrizione; private String descrizione;
@ -40,14 +41,6 @@ public class MtbColr extends EntityBase{
type = "mtb_colr"; type = "mtb_colr";
} }
public Date getDataCollo() {
return dataCollo;
}
public MtbColr setDataCollo(Date dataCollo) {
this.dataCollo = dataCollo;
return this;
}
public String getGestione() { public String getGestione() {
return gestione; return gestione;
@ -166,24 +159,46 @@ public class MtbColr extends EntityBase{
return this; return this;
} }
public Date getDataOrd() { public String getDataOrdS() {
return dataOrd; 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; this.dataOrd = dataOrd;
return this; 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; 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; this.dataColloRif = dataColloRif;
return this; 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() { public BigDecimal getQtaCnf() {
return qtaCnf; return qtaCnf;
} }
@ -229,15 +244,35 @@ public class MtbColr extends EntityBase{
return this; return this;
} }
public Date getDatetimeRow() {
public String getDatetimeRowS() {
return datetimeRow; 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; this.datetimeRow = datetimeRow;
return this; 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() { public String getCodJcom() {
return codJcom; return codJcom;
} }
@ -274,15 +309,33 @@ public class MtbColr extends EntityBase{
return this; return this;
} }
public Date getDataScadPartita() {
public String getDataScadPartitaS() {
return dataScadPartita; 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; this.dataScadPartita = dataScadPartita;
return this; 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() { public String getDescrizione() {
return descrizione; return descrizione;
} }

View File

@ -1,6 +1,7 @@
package it.integry.integrywmsnative.gest.accettazione.core; package it.integry.integrywmsnative.gest.accettazione.core;
import android.content.Context; import android.content.Context;
import android.support.v4.util.Pools;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.text.Html; import android.text.Html;
import android.view.LayoutInflater; 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.interfaces.ICheckBoxCallback;
import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneGroupedInevasoDTO; 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. * Created by GiuseppeS on 06/03/2018.
@ -28,6 +30,9 @@ public class MainListAccettazioneAdapter extends RecyclerView.Adapter<MainListAc
private List<OrdineAccettazioneGroupedInevasoDTO> mDataset; private List<OrdineAccettazioneGroupedInevasoDTO> mDataset;
private ICheckBoxCallback mCheckBoxCallback; 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 { public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case // each data item is just a string in this case
private TextView mTextViewGroupHeader; private TextView mTextViewGroupHeader;
@ -95,20 +100,17 @@ public class MainListAccettazioneAdapter extends RecyclerView.Adapter<MainListAc
for (int i = 0; i < subGroup.size(); i++) { for (int i = 0; i < subGroup.size(); i++) {
final OrdineAccettazioneGroupedInevasoDTO.Ordine ordine = subGroup.get(i); final OrdineAccettazioneGroupedInevasoDTO.Ordine ordine = subGroup.get(i);
//if(i == 0) {
ordine.checkBoxCallback = new ArrayList<>(); ordine.checkBoxCallback = new ArrayList<>();
//}
boolean isCreatedNew = false; View groupModelViewPool = (View) sPool.acquire();
if(groupModelViewPool == null){
if(holder.views.size() <= i){ groupModelViewPool = LayoutInflater.from(mContext)
holder.views.add(LayoutInflater.from(mContext) .inflate(R.layout.accettazione_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false);
.inflate(R.layout.accettazione_main_list_group_model, holder.mLinearLayoutGroupItemContainer, false));
isCreatedNew = true;
} }
View groupModelView = groupModelViewPool;
holder.views.add(groupModelView);
View groupModelView = holder.views.get(i);
groupModelView.setVisibility(View.VISIBLE); groupModelView.setVisibility(View.VISIBLE);
@ -145,8 +147,16 @@ public class MainListAccettazioneAdapter extends RecyclerView.Adapter<MainListAc
clientLinearLayout.removeAllViews(); clientLinearLayout.removeAllViews();
for (int k = 0; k < subGroupClienti.size(); k++) { for (int k = 0; k < subGroupClienti.size(); k++) {
View groupClienteModelView = LayoutInflater.from(mContext)
View groupClienteModelViewPool = (View) sPoolClienti.acquire();
if(groupClienteModelViewPool == null){
groupClienteModelViewPool = LayoutInflater.from(mContext)
.inflate(R.layout.accettazione_main_list_group_clienti, clientLinearLayout, false); .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); TextView clienteComm = groupClienteModelView.findViewById(R.id.accettazione_main_list_group_clienti_comm);
String clienteText; String clienteText;
@ -164,15 +174,35 @@ public class MainListAccettazioneAdapter extends RecyclerView.Adapter<MainListAc
clientLinearLayout.addView(groupClienteModelView); clientLinearLayout.addView(groupClienteModelView);
} }
if(isCreatedNew) {
holder.mLinearLayoutGroupItemContainer.addView(groupModelView); holder.mLinearLayoutGroupItemContainer.addView(groupModelView);
} }
} }
for(int i = subGroup.size(); i < holder.views.size(); i++){ @Override
holder.views.get(i).setVisibility(View.GONE); 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) // Return the size of your dataset (invoked by the layout manager)

View File

@ -2,8 +2,11 @@ package it.integry.integrywmsnative.gest.accettazione.dto;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.util.Log;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.model.MtbAart;
@ -34,6 +37,7 @@ public class OrdineAccettazioneDTO implements Parcelable {
public int rigaOrd; public int rigaOrd;
public String codJcom; public String codJcom;
public String ragSocCom; public String ragSocCom;
public String descrizioneCommessa;
public MtbAart mtbAart; public MtbAart mtbAart;
public PickingObjectDTO[] colliAssociati; public PickingObjectDTO[] colliAssociati;
public boolean hidden = false; public boolean hidden = false;
@ -52,6 +56,21 @@ public class OrdineAccettazioneDTO implements Parcelable {
return this.qtaOrd - this.qtaRiservate; return this.qtaOrd - this.qtaRiservate;
} }
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(){} public Riga(){}
protected Riga(Parcel in) { protected Riga(Parcel in) {
@ -60,6 +79,7 @@ public class OrdineAccettazioneDTO implements Parcelable {
rigaOrd = in.readInt(); rigaOrd = in.readInt();
codJcom = in.readString(); codJcom = in.readString();
ragSocCom = in.readString(); ragSocCom = in.readString();
descrizioneCommessa = in.readString();
mtbAart = (MtbAart) in.readValue(MtbAart.class.getClassLoader()); mtbAart = (MtbAart) in.readValue(MtbAart.class.getClassLoader());
hidden = in.readByte() != 0x00; hidden = in.readByte() != 0x00;
partitaMag = in.readString(); partitaMag = in.readString();
@ -94,6 +114,7 @@ public class OrdineAccettazioneDTO implements Parcelable {
dest.writeInt(rigaOrd); dest.writeInt(rigaOrd);
dest.writeString(codJcom); dest.writeString(codJcom);
dest.writeString(ragSocCom); dest.writeString(ragSocCom);
dest.writeString(descrizioneCommessa);
dest.writeValue(mtbAart); dest.writeValue(mtbAart);
dest.writeByte((byte) (hidden ? 0x01 : 0x00)); dest.writeByte((byte) (hidden ? 0x01 : 0x00));
dest.writeString(partitaMag); dest.writeString(partitaMag);

View File

@ -13,13 +13,13 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding; import it.integry.integrywmsnative.databinding.ActivityAccettazioneOrdineInevasoBinding;
import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOrdineInevasoViewModel; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOnOrdineInevasoViewModel;
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
public class AccettazioneOrdineInevasoActivity extends AppCompatActivity { public class AccettazioneOrdineInevasoActivity extends AppCompatActivity {
public ActivityAccettazioneOrdineInevasoBinding bindings; public ActivityAccettazioneOrdineInevasoBinding bindings;
private AccettazioneOrdineInevasoViewModel mAccettazioneOrdineInevasoViewModel; private AccettazioneOnOrdineInevasoViewModel mAccettazioneOrdineInevasoViewModel;
@Override @Override
@ -31,7 +31,7 @@ public class AccettazioneOrdineInevasoActivity extends AppCompatActivity {
ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings); ArticoliInColloBottomSheetViewModel mArticoliInColloBottomSheetViewModel = new ArticoliInColloBottomSheetViewModel(this, bindings);
List<OrdineAccettazioneDTO> orders = (ArrayList<OrdineAccettazioneDTO>)getIntent().getSerializableExtra("key"); List<OrdineAccettazioneDTO> orders = (ArrayList<OrdineAccettazioneDTO>)getIntent().getSerializableExtra("key");
mAccettazioneOrdineInevasoViewModel = new AccettazioneOrdineInevasoViewModel( mAccettazioneOrdineInevasoViewModel = new AccettazioneOnOrdineInevasoViewModel(
this, mArticoliInColloBottomSheetViewModel, orders); this, mArticoliInColloBottomSheetViewModel, orders);
setSupportActionBar(this.bindings.toolbar); setSupportActionBar(this.bindings.toolbar);

View File

@ -6,6 +6,7 @@ import android.databinding.ObservableArrayList;
import android.util.Log; import android.util.Log;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
@ -16,6 +17,7 @@ import java.util.TreeSet;
import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.coollection.Coollection; 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.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoListViewModel; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoListViewModel;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoOrderBy; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoOrderBy;
@ -38,18 +40,18 @@ public class AccettazioneOrdineInevasoHelper {
return new MainListOrdineAccettazioneAdapter(mContext, mListViewModels); return new MainListOrdineAccettazioneAdapter(mContext, mListViewModels);
} }
public void updateListModel(AccettazioneOrdineInevasoOrderBy.Enum orderByEnum, List<List<OrdineAccettazioneDTO.Riga>> mDataset) throws Exception { public void updateListModel(AccettazioneOrdineInevasoOrderBy.Enum orderByEnum, List<List<OrdineAccettazioneDTO.Riga>> mDataset, List<MtbColr> mtbColrs) throws Exception {
mListViewModels.clear(); mListViewModels.clear();
switch (orderByEnum){ switch (orderByEnum){
case COD_ART_FOR: case COD_ART_FOR:
case DESCR_ART: case DESCR_ART:
mListViewModels.addAll(getListViewModelPerArtForn(mDataset)); mListViewModels.addAll(getListViewModelPerArtForn(mDataset, mtbColrs));
break; break;
case RAG_SOC_COM: case RAG_SOC_COM:
mListViewModels.addAll(getListViewModelPerRagSocCommessa(mDataset)); mListViewModels.addAll(getListViewModelPerRagSocCommessa(mDataset, mtbColrs));
break; break;
default: default:
@ -70,8 +72,11 @@ public class AccettazioneOrdineInevasoHelper {
Collections.sort(codArtForns, new Comparator<String>() { Collections.sort(codArtForns, new Comparator<String>() {
public int compare(String str1, String str2) { public int compare(String str1, String str2) {
if(str1 != null && str2 != null) {
return str1.compareToIgnoreCase(str2); return str1.compareToIgnoreCase(str2);
} }
return 0;
}
}); });
List<List<OrdineAccettazioneDTO.Riga>> groupedRighe = new ArrayList<>(); List<List<OrdineAccettazioneDTO.Riga>> groupedRighe = new ArrayList<>();
@ -145,7 +150,7 @@ public class AccettazioneOrdineInevasoHelper {
boolean alreadyExists = false; boolean alreadyExists = false;
if(mDataset.get(i).codJcom == null) mDataset.get(i).codJcom = "N/A"; if(mDataset.get(i).codJcom == null) mDataset.get(i).codJcom = "N/A";
if(mDataset.get(i).ragSocCom == null) mDataset.get(i).ragSocCom = mContext.getText(R.string.stock).toString().toUpperCase(); if(mDataset.get(i).descrizioneCommessa == null) mDataset.get(i).descrizioneCommessa = mContext.getText(R.string.stock).toString().toUpperCase();
for(int k = 0; k < commessaList.size(); k++){ for(int k = 0; k < commessaList.size(); k++){
@ -157,7 +162,7 @@ public class AccettazioneOrdineInevasoHelper {
if(mDataset.get(i).codJcom != null && !alreadyExists){ if(mDataset.get(i).codJcom != null && !alreadyExists){
RaggruppaPerCommessaUtilDTO dto = new RaggruppaPerCommessaUtilDTO(); RaggruppaPerCommessaUtilDTO dto = new RaggruppaPerCommessaUtilDTO();
dto.codJcom = mDataset.get(i).codJcom; dto.codJcom = mDataset.get(i).codJcom;
dto.ragSocCom = mDataset.get(i).ragSocCom; dto.ragSocCom = mDataset.get(i).descrizioneCommessa;
commessaList.add(dto); commessaList.add(dto);
} }
} }
@ -201,7 +206,7 @@ public class AccettazioneOrdineInevasoHelper {
} }
public List<AccettazioneOrdineInevasoListViewModel> getListViewModelPerArtForn(List<List<OrdineAccettazioneDTO.Riga>> groupedRighe){ public List<AccettazioneOrdineInevasoListViewModel> getListViewModelPerArtForn(List<List<OrdineAccettazioneDTO.Riga>> groupedRighe, List<MtbColr> mtbColrs){
List<AccettazioneOrdineInevasoListViewModel> listModel = new ArrayList<>(); List<AccettazioneOrdineInevasoListViewModel> listModel = new ArrayList<>();
@ -220,11 +225,15 @@ public class AccettazioneOrdineInevasoHelper {
rowModel.badge1 = rowItem.codJcom != null ? rowItem.codJcom : "MAG"; rowModel.badge1 = rowItem.codJcom != null ? rowItem.codJcom : "MAG";
rowModel.badge2 = String.valueOf(rowItem.numOrd); rowModel.badge2 = String.valueOf(rowItem.numOrd);
rowModel.descrizione = rowItem.ragSocCom; // rowModel.descrizione = rowItem.ragSocCom;
rowModel.descrizione = rowItem.descrizioneCommessa;
rowModel.qtaRiservata = decimalFormat.format(rowItem.qtaRiservate); rowModel.qtaRiservata = decimalFormat.format(getRigaQuantityEvasa(rowItem, mtbColrs));
// rowModel.qtaRiservata = decimalFormat.format(rowItem.qtaRiservate);
rowModel.qtaOrdinata = decimalFormat.format(rowItem.qtaOrd); rowModel.qtaOrdinata = decimalFormat.format(rowItem.qtaOrd);
rowModel.originalModel = rowItem;
itemModel.rows.add(rowModel); itemModel.rows.add(rowModel);
} }
listModel.add(itemModel); listModel.add(itemModel);
@ -234,7 +243,7 @@ public class AccettazioneOrdineInevasoHelper {
} }
public List<AccettazioneOrdineInevasoListViewModel> getListViewModelPerRagSocCommessa(List<List<OrdineAccettazioneDTO.Riga>> groupedRighe) { public List<AccettazioneOrdineInevasoListViewModel> getListViewModelPerRagSocCommessa(List<List<OrdineAccettazioneDTO.Riga>> groupedRighe, List<MtbColr> mtbColrs) {
List<AccettazioneOrdineInevasoListViewModel> listModel = new ArrayList<>(); List<AccettazioneOrdineInevasoListViewModel> listModel = new ArrayList<>();
DecimalFormat decimalFormat = new DecimalFormat("#.#"); DecimalFormat decimalFormat = new DecimalFormat("#.#");
@ -258,9 +267,12 @@ public class AccettazioneOrdineInevasoHelper {
rowModel.descrizione = rowItem.mtbAart.descrizioneEstesa; rowModel.descrizione = rowItem.mtbAart.descrizioneEstesa;
rowModel.qtaRiservata = decimalFormat.format(rowItem.qtaRiservate); rowModel.qtaRiservata = decimalFormat.format(getRigaQuantityEvasa(rowItem, mtbColrs));
// rowModel.qtaRiservata = decimalFormat.format(rowItem.qtaRiservate);
rowModel.qtaOrdinata = decimalFormat.format(rowItem.qtaOrd); rowModel.qtaOrdinata = decimalFormat.format(rowItem.qtaOrd);
rowModel.originalModel = rowItem;
itemModel.rows.add(rowModel); itemModel.rows.add(rowModel);
} }
listModel.add(itemModel); listModel.add(itemModel);
@ -268,4 +280,29 @@ public class AccettazioneOrdineInevasoHelper {
return listModel; return listModel;
} }
private float getRigaQuantityEvasa(OrdineAccettazioneDTO.Riga item, List<MtbColr> mtbColrs){
float currentQtaEvasa = item.qtaRiservate;
if(mtbColrs != null) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
List<MtbColr> filteredMtbColrs = Coollection.from(mtbColrs)
.where("codMart", Coollection.eqIgnoreCase(item.mtbAart.codMart))
.and("codJcom", Coollection.eqIgnoreCase(item.codJcom))
.and("rigaOrd", Coollection.eq(item.rigaOrd))
.and("numOrd", Coollection.eq(item.numOrd))
.and("dataOrd", Coollection.eq(sdf.format(item.getDataOrd())))
.all();
for (MtbColr mtbColr : filteredMtbColrs) {
currentQtaEvasa += mtbColr.getQtaCol().floatValue();
}
}
return currentQtaEvasa;
}
} }

View File

@ -0,0 +1,9 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
public interface IOnOrdineRowDispatchCallback {
void onOrdineRowDispatch(OrdineAccettazioneDTO.Riga item);
}

View File

@ -4,6 +4,7 @@ import android.content.Context;
import android.databinding.ObservableArrayList; import android.databinding.ObservableArrayList;
import android.databinding.ObservableList; import android.databinding.ObservableList;
import android.graphics.Color; import android.graphics.Color;
import android.support.v4.util.Pools;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -11,12 +12,10 @@ import android.view.ViewGroup;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import java.text.DecimalFormat; import java.util.ArrayList;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.R; 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.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoListViewModel; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto.AccettazioneOrdineInevasoListViewModel;
/** /**
@ -27,16 +26,24 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter<Main
protected Context mContext; protected Context mContext;
protected ObservableArrayList<AccettazioneOrdineInevasoListViewModel> mDataset; protected ObservableArrayList<AccettazioneOrdineInevasoListViewModel> mDataset;
protected IOnOrdineRowDispatchCallback mOrdineRowDispatch;
private static final Pools.SynchronizedPool sPool =
new Pools.SynchronizedPool(200);
public static class ViewHolder extends RecyclerView.ViewHolder { public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case // each data item is just a string in this case
protected View mGroupTitle; protected View mGroupTitle;
protected LinearLayout mLinearLayoutGroupItemContainer; protected LinearLayout mLinearLayoutGroupItemContainer;
protected List<View> pool = new ArrayList<>();
public ViewHolder(View v) { public ViewHolder(View v) {
super(v); super(v);
} }
} }
public MainListOrdineAccettazioneAdapter(Context context, ObservableArrayList<AccettazioneOrdineInevasoListViewModel> myDataset) { public MainListOrdineAccettazioneAdapter(Context context, ObservableArrayList<AccettazioneOrdineInevasoListViewModel> myDataset) {
mContext = context; mContext = context;
mDataset = myDataset; mDataset = myDataset;
@ -44,6 +51,10 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter<Main
myDataset.addOnListChangedCallback(onListChangedCallback); myDataset.addOnListChangedCallback(onListChangedCallback);
} }
public void setOnOrdineRowDispatchCallback(IOnOrdineRowDispatchCallback ordineRowDispatch) {
mOrdineRowDispatch = ordineRowDispatch;
}
private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback<ObservableList<AccettazioneOrdineInevasoListViewModel>>() { private ObservableList.OnListChangedCallback onListChangedCallback = new ObservableList.OnListChangedCallback<ObservableList<AccettazioneOrdineInevasoListViewModel>>() {
@Override @Override
public void onChanged(ObservableList<AccettazioneOrdineInevasoListViewModel> sender) { public void onChanged(ObservableList<AccettazioneOrdineInevasoListViewModel> sender) {
@ -78,7 +89,7 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter<Main
View v = LayoutInflater.from(parent.getContext()) View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.accettazione_ordine_inevaso_main_list___cod_art_for, parent, false); .inflate(R.layout.accettazione_ordine_inevaso_main_list___cod_art_for, parent, false);
v.setHasTransientState(true); //v.setHasTransientState(true);
ViewHolder vh = new ViewHolder(v); ViewHolder vh = new ViewHolder(v);
@ -106,10 +117,22 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter<Main
final AccettazioneOrdineInevasoListViewModel.SubItem rowItem = subset.get(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(i % 2 == 1){ 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(Float.parseFloat(rowItem.qtaRiservata) == Float.parseFloat(rowItem.qtaOrdinata)) {
groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.green_500_with_alpha));
} else if(Float.parseFloat(rowItem.qtaRiservata) > 0) {
groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.orange_600_with_alpha));
} else if(i % 2 == 1) {
groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); groupModelView.setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));
} else { } else {
groupModelView.setBackgroundColor(Color.WHITE); groupModelView.setBackgroundColor(Color.WHITE);
@ -145,12 +168,35 @@ public class MainListOrdineAccettazioneAdapter extends RecyclerView.Adapter<Main
qtaTot.setText(rowItem.qtaOrdinata); qtaTot.setText(rowItem.qtaOrdinata);
groupModelView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(mOrdineRowDispatch != null){
mOrdineRowDispatch.onOrdineRowDispatch(rowItem.originalModel);
}
}
});
holder.mLinearLayoutGroupItemContainer.addView(groupModelView); 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) // Return the size of your dataset (invoked by the layout manager)

View File

@ -2,6 +2,8 @@ package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.dto;
import java.util.List; import java.util.List;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO;
/** /**
* Created by GiuseppeS on 27/03/2018. * Created by GiuseppeS on 27/03/2018.
*/ */
@ -20,6 +22,8 @@ public class AccettazioneOrdineInevasoListViewModel {
public String qtaRiservata; public String qtaRiservata;
public String qtaOrdinata; public String qtaOrdinata;
public OrdineAccettazioneDTO.Riga originalModel;
} }
} }

View File

@ -1,13 +1,18 @@
package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel; package it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel;
import android.app.ProgressDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.databinding.ObservableArrayList; import android.databinding.ObservableArrayList;
import android.databinding.ObservableField; import android.databinding.ObservableField;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.app.AlertDialog; import android.support.v7.app.AlertDialog;
import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.LinearLayoutManager;
import android.text.SpannableString; import android.text.SpannableString;
import android.widget.Toast; import android.widget.Toast;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -17,7 +22,8 @@ import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.REST.CommonRESTException; import it.integry.integrywmsnative.core.REST.CommonRESTException;
import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer; import it.integry.integrywmsnative.core.REST.consumers.ColliMagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback; import it.integry.integrywmsnative.core.REST.consumers.ISimpleOperationCallback;
import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.REST.consumers.ISingleValueOperationCallback;
import it.integry.integrywmsnative.core.coollection.Coollection;
import it.integry.integrywmsnative.core.model.CommonModelConsts; import it.integry.integrywmsnative.core.model.CommonModelConsts;
import it.integry.integrywmsnative.core.model.MtbColr; import it.integry.integrywmsnative.core.model.MtbColr;
import it.integry.integrywmsnative.core.model.MtbColt; import it.integry.integrywmsnative.core.model.MtbColt;
@ -26,14 +32,18 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO; 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.AccettazioneOrdineInevasoActivity;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.AccettazioneOrdineInevasoHelper; import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.AccettazioneOrdineInevasoHelper;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.IOnOrdineRowDispatchCallback;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.core.MainListOrdineAccettazioneAdapter; 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.dto.AccettazioneOrdineInevasoOrderBy;
import it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.views.NoteAggiuntiveNuovaULDialog; 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.interfaces.IOnColloClosedCallback;
import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel; import it.integry.integrywmsnative.view.bottomsheet.viewmodel.ArticoliInColloBottomSheetViewModel;
import it.integry.integrywmsnative.view.dialogs.DialogSimpleMessageHelper; 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;
public class AccettazioneOrdineInevasoViewModel implements IOnColloClosedCallback { public class AccettazioneOnOrdineInevasoViewModel implements IOnColloClosedCallback, IOnOrdineRowDispatchCallback {
public ObservableField<Boolean> isFabVisible = new ObservableField<>(); public ObservableField<Boolean> isFabVisible = new ObservableField<>();
@ -49,7 +59,7 @@ public class AccettazioneOrdineInevasoViewModel implements IOnColloClosedCallbac
private AccettazioneOrdineInevasoOrderBy.Enum currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR; private AccettazioneOrdineInevasoOrderBy.Enum currentOrderBy = AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR;
private MainListOrdineAccettazioneAdapter mAdapter; private MainListOrdineAccettazioneAdapter mAdapter;
public AccettazioneOrdineInevasoViewModel(AccettazioneOrdineInevasoActivity activity, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List<OrdineAccettazioneDTO> orders) { public AccettazioneOnOrdineInevasoViewModel(AccettazioneOrdineInevasoActivity activity, ArticoliInColloBottomSheetViewModel articoliInColloBottomSheetViewModel, List<OrdineAccettazioneDTO> orders) {
this.mActivity = activity; this.mActivity = activity;
this.mArticoliInColloBottomSheetViewModel = articoliInColloBottomSheetViewModel; this.mArticoliInColloBottomSheetViewModel = articoliInColloBottomSheetViewModel;
this.mOrders = orders; this.mOrders = orders;
@ -84,13 +94,16 @@ public class AccettazioneOrdineInevasoViewModel implements IOnColloClosedCallbac
mActivity.bindings.accettazioneOrdineMainList.setLayoutManager(new LinearLayoutManager(mActivity)); mActivity.bindings.accettazioneOrdineMainList.setLayoutManager(new LinearLayoutManager(mActivity));
try {
mAdapter = helper.getRightListAdapter(); mAdapter = helper.getRightListAdapter();
helper.updateListModel(AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR, groupedRighe);
try {
helper.updateListModel(AccettazioneOrdineInevasoOrderBy.Enum.COD_ART_FOR, groupedRighe, null);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString(e.toString()), null, null).show(); DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString(e.toString()), null, null).show();
} }
mAdapter.setOnOrdineRowDispatchCallback(this);
mActivity.bindings.accettazioneOrdineMainList.setAdapter(mAdapter); mActivity.bindings.accettazioneOrdineMainList.setAdapter(mAdapter);
} }
@ -112,13 +125,16 @@ public class AccettazioneOrdineInevasoViewModel implements IOnColloClosedCallbac
} }
try { try {
helper.updateListModel(currentOrderBy, groupedRighe); List<MtbColr> mtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get() != null ? mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr() : null;
helper.updateListModel(currentOrderBy, groupedRighe, mtbColrs);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
Toast.makeText(mActivity, e.getMessage().toString(), Toast.LENGTH_LONG).show(); Toast.makeText(mActivity, e.getMessage().toString(), Toast.LENGTH_LONG).show();
} }
} }
public void showOrderDialog() { public void showOrderDialog() {
AlertDialog dialog = new AlertDialog.Builder(mActivity) AlertDialog dialog = new AlertDialog.Builder(mActivity)
@ -144,10 +160,16 @@ public class AccettazioneOrdineInevasoViewModel implements IOnColloClosedCallbac
mActivity.bindings.accettazioneOrdineInevasoFab.close(true); mActivity.bindings.accettazioneOrdineInevasoFab.close(true);
final ProgressDialog progress = ProgressDialog.show(mActivity, mActivity.getText(R.string.waiting),
mActivity.getText(R.string.loading) + " ...", true);
NoteAggiuntiveNuovaULDialog.show(mActivity, new NoteAggiuntiveNuovaULDialog.Callback() { NoteAggiuntiveNuovaULDialog.show(mActivity, new NoteAggiuntiveNuovaULDialog.Callback() {
@Override @Override
public void onSuccess(String noteString) { public void onSuccess(String noteString) {
//Add loading dialog here
progress.show();
MtbColt mtbColt = new MtbColt(); MtbColt mtbColt = new MtbColt();
mtbColt .setDataCollo(new Date()) mtbColt .setDataCollo(new Date())
.setGestione(GestioneEnum.ACQUISTO) .setGestione(GestioneEnum.ACQUISTO)
@ -163,23 +185,33 @@ public class AccettazioneOrdineInevasoViewModel implements IOnColloClosedCallbac
ColliMagazzinoRESTConsumer.saveCollo(mtbColt, new ISimpleOperationCallback<MtbColt>() { ColliMagazzinoRESTConsumer.saveCollo(mtbColt, new ISimpleOperationCallback<MtbColt>() {
@Override @Override
public void onSuccess(MtbColt value) { public void onSuccess(MtbColt value) {
// mArticoliInColloBottomSheetHelper.initCollo(value);
value.setMtbColr(new ObservableArrayList<MtbColr>());
isFabVisible.set(false);
value.setMtbColr(new ObservableArrayList<MtbColr>());
mArticoliInColloBottomSheetViewModel.mtbColt.set(value); mArticoliInColloBottomSheetViewModel.mtbColt.set(value);
progress.dismiss();
for(int i = 0; i < 10; i++){ new StatusBarAlert.Builder(mActivity)
value.getMtbColr().add(new MtbColr().setCodMart("ABCICCIO").setDescrizione("DESCRCICCIO")); .autoHide(true)
} .withDuration(2500)
.showProgress(false)
.withText(R.string.data_saved)
.withAlertColor(R.color.mainGreen)
.build();
/*DialogSimpleMessageHelper.makeInfoDialog(mActivity,
DialogSimpleMessageHelper.makeInfoDialog(mActivity, "Creazione UL",new SpannableString("Salvataggio collo avvenuto con successo"), null, null).show(); mActivity.getString(R.string.lu_creation),
new SpannableString(mActivity.getString(R.string.data_saved)),
null,
null).show();
*/
} }
@Override @Override
public void onFailed(Exception ex) { public void onFailed(Exception ex) {
progress.dismiss();
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex); String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if(errorMessage == null) errorMessage = ex.getMessage(); if(errorMessage == null) errorMessage = ex.getMessage();
@ -188,6 +220,11 @@ public class AccettazioneOrdineInevasoViewModel implements IOnColloClosedCallbac
}); });
} }
@Override
public void onAbort() {
progress.dismiss();
}
}); });
@ -202,5 +239,95 @@ public class AccettazioneOrdineInevasoViewModel implements IOnColloClosedCallbac
@Override @Override
public void onColloClosed() { public void onColloClosed() {
mArticoliInColloBottomSheetViewModel.mtbColt.set(null); mArticoliInColloBottomSheetViewModel.mtbColt.set(null);
isFabVisible.set(true);
} }
@Override
public void onOrdineRowDispatch(final OrdineAccettazioneDTO.Riga item) {
if(mArticoliInColloBottomSheetViewModel.mtbColt.get() != null){
List<MtbColr> currentMtbColrs = mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr();
List<MtbColr> filteredMtbColrs = Coollection.from(currentMtbColrs)
.where("codMart", Coollection.eqIgnoreCase(item.mtbAart.codMart))
.and("numOrd", Coollection.eq(item.numOrd))
.and("codJcom", Coollection.eq(item.codJcom))
.and("rigaOrd", Coollection.eq(item.rigaOrd))
.all();
float qtaEvasaInMtbColr = 0;
for (MtbColr mtbColr : filteredMtbColrs) {
qtaEvasaInMtbColr += mtbColr.getQtaCol().floatValue();
}
float qtaEvasa = item.qtaRiservate + qtaEvasaInMtbColr;
DialogInputQuantity.makeBase(mActivity, item, qtaEvasa, new ISingleValueOperationCallback<QuantityDTO>() {
@Override
public void onResult(QuantityDTO value) {
onOrdineRowDispatched(item, value);
}
}).show();
// Toast.makeText(mActivity, item.descrizioneEstesa, Toast.LENGTH_LONG).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.codMart)
.setPartitaMag(quantityDTO.batchLot.get())
.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<MtbColr>());
cloneMtbColt.getMtbColr().add(mtbColr);
ColliMagazzinoRESTConsumer.saveCollo(cloneMtbColt, new ISimpleOperationCallback<MtbColt>() {
@Override
public void onSuccess(MtbColt value) {
mArticoliInColloBottomSheetViewModel.mtbColt.get().getMtbColr().add(mtbColr);
refreshOrderBy();
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) {
progress.dismiss();
String errorMessage = CommonRESTException.tryRecognizeThenGetMessage(ex);
if(errorMessage == null) errorMessage = ex.getMessage();
DialogSimpleMessageHelper.makeErrorDialog(mActivity, new SpannableString(errorMessage), null, null).show();
}
});
}
} }

View File

@ -15,6 +15,7 @@ public class NoteAggiuntiveNuovaULDialog {
public interface Callback { public interface Callback {
void onSuccess(String noteString); void onSuccess(String noteString);
void onAbort();
} }
@ -55,7 +56,12 @@ public class NoteAggiuntiveNuovaULDialog {
callback.onSuccess(mTextInputEditText.getText().toString()); callback.onSuccess(mTextInputEditText.getText().toString());
} }
}) })
.setNegativeButton(R.string.abort, null) .setNegativeButton(R.string.abort, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
callback.onAbort();
}
})
.create(); .create();
dialog.show(); dialog.show();
} }

View File

@ -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() {
}
}
}

View File

@ -4,8 +4,6 @@ import android.support.annotation.NonNull;
import android.support.design.widget.AppBarLayout; import android.support.design.widget.AppBarLayout;
import android.support.design.widget.BottomSheetBehavior; import android.support.design.widget.BottomSheetBehavior;
import android.support.v7.app.AppCompatActivity; import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.AppCompatButton;
import android.support.v7.widget.AppCompatTextView;
import android.support.v7.widget.Toolbar; import android.support.v7.widget.Toolbar;
import android.text.SpannableString; import android.text.SpannableString;
import android.view.View; import android.view.View;
@ -46,6 +44,8 @@ public class ArticoliInColloBottomSheetHelper extends BottomSheetBehavior.Bottom
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
mBottomSheetBehavior.setBottomSheetCallback(this); mBottomSheetBehavior.setBottomSheetCallback(this);
appBarLayoutBottomSheet.setVisibility(View.INVISIBLE);
toolbarBottomSheet.setNavigationIcon(R.drawable.ic_close_24dp); toolbarBottomSheet.setNavigationIcon(R.drawable.ic_close_24dp);
toolbarBottomSheet.setNavigationOnClickListener(new View.OnClickListener() { toolbarBottomSheet.setNavigationOnClickListener(new View.OnClickListener() {
@Override @Override
@ -66,9 +66,20 @@ public class ArticoliInColloBottomSheetHelper extends BottomSheetBehavior.Bottom
}); });
mBinding.articoliInColloCloseCollo.setText(mActivity.getText(R.string.action_close_ul) + " "); mBinding.articoliInColloCloseCollo.setText(mActivity.getText(R.string.action_close_ul));
updateRigheNumber(0); updateRigheNumber(0);
mBinding.articoliInColloSheetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
} else {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
});
} }
public void initCollo(MtbColt mtbColt){ public void initCollo(MtbColt mtbColt){
@ -88,17 +99,9 @@ public class ArticoliInColloBottomSheetHelper extends BottomSheetBehavior.Bottom
} }
public void updateRigheNumber(int newRigheNumber){ public void updateRigheNumber(int newRigheNumber){
mBinding.articoliInColloSheetButton.setText(" " + newRigheNumber + " " + mActivity.getResources().getQuantityString(R.plurals.articles, newRigheNumber)); mBinding.articoliInColloSheetButton.setText(newRigheNumber + " " + mActivity.getResources().getQuantityString(R.plurals.articles, newRigheNumber));
} }
@OnClick(R.id.articoli_in_collo_sheet_button)
public void onClick(View view) {
if (mBottomSheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
} else {
mBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
@Override @Override
public void onStateChanged(@NonNull View bottomSheet, int newState) { public void onStateChanged(@NonNull View bottomSheet, int newState) {
@ -107,14 +110,24 @@ public class ArticoliInColloBottomSheetHelper extends BottomSheetBehavior.Bottom
// mRootView.scrollTo(0, 0); // mRootView.scrollTo(0, 0);
break; break;
case BottomSheetBehavior.STATE_EXPANDED: case BottomSheetBehavior.STATE_EXPANDED:
appBarLayoutBottomSheet.setClickable(true);
appBarLayoutBottomSheet.setFocusable(true);
tapActionLayout.setClickable(false);
tapActionLayout.setFocusable(false);
break; break;
case BottomSheetBehavior.STATE_COLLAPSED: case BottomSheetBehavior.STATE_COLLAPSED:
// mRootView.scrollTo(0, 0); appBarLayoutBottomSheet.setVisibility(View.INVISIBLE);
appBarLayoutBottomSheet.setClickable(false);
appBarLayoutBottomSheet.setFocusable(false);
tapActionLayout.setClickable(true);
tapActionLayout.setFocusable(true);
break; break;
case BottomSheetBehavior.STATE_DRAGGING: case BottomSheetBehavior.STATE_DRAGGING:
appBarLayoutBottomSheet.setVisibility(View.VISIBLE);
// mRootView.scrollTo(0, 0); // mRootView.scrollTo(0, 0);
break; break;
case BottomSheetBehavior.STATE_SETTLING: case BottomSheetBehavior.STATE_SETTLING:
appBarLayoutBottomSheet.setVisibility(View.VISIBLE);
// mRootView.scrollTo(0, 0); // mRootView.scrollTo(0, 0);
break; break;
} }

View File

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

View File

@ -21,6 +21,7 @@ import it.integry.integrywmsnative.core.model.MtbColt;
import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding; import it.integry.integrywmsnative.databinding.FragmentArticoliInColloBottomSheetBinding;
import it.integry.integrywmsnative.view.bottomsheet.ArticoliInColloBottomSheetHelper; import it.integry.integrywmsnative.view.bottomsheet.ArticoliInColloBottomSheetHelper;
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback; import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnColloClosedCallback;
import it.integry.integrywmsnative.view.bottomsheet.interfaces.IOnSimpleListChangedCallback;
public class ArticoliInColloBottomSheetViewModel { public class ArticoliInColloBottomSheetViewModel {
@ -42,6 +43,18 @@ public class ArticoliInColloBottomSheetViewModel {
@Override @Override
public void onPropertyChanged(Observable sender, int propertyId) { public void onPropertyChanged(Observable sender, int propertyId) {
mBindings.linearListview.setAdapter(new ArticoliInColloBottomSheetMtbColrAdapter()); mBindings.linearListview.setAdapter(new ArticoliInColloBottomSheetMtbColrAdapter());
if(mtbColt.get() != null) {
mArticoliInColloBottomSheetHelper.updateRigheNumber(mtbColt.get().getMtbColr().size());
mArticoliInColloBottomSheetHelper.initCollo(mtbColt.get());
mtbColt.get().getMtbColr().addOnListChangedCallback(new SimpleListChangedCallback(new IOnSimpleListChangedCallback() {
@Override
public void onChange() {
mArticoliInColloBottomSheetHelper.updateRigheNumber(mtbColt.get().getMtbColr().size());
}
}));
}
} }
}); });
@ -76,8 +89,6 @@ public class ArticoliInColloBottomSheetViewModel {
final MtbColr item = mtbColt.get().getMtbColr().get(position); final MtbColr item = mtbColt.get().getMtbColr().get(position);
binding.setVariable(BR.mtbColr, item); binding.setVariable(BR.mtbColr, item);
// viewHolder.binding.getRoot().setTag(ITEM_MODEL, item);
// viewHolder.binding.getRoot().setOnClickListener(this);
binding.executePendingBindings(); binding.executePendingBindings();
if(position % 2 == 1) binding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG)); if(position % 2 == 1) binding.getRoot().setBackgroundColor(mContext.getResources().getColor(R.color.letturaFacilitataBG));

View File

@ -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();
}
}

View File

@ -0,0 +1,218 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity;
import android.app.AlertDialog;
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.graphics.Color;
import android.support.design.widget.TextInputLayout;
import android.support.v4.content.ContextCompat;
import android.util.Log;
import android.view.LayoutInflater;
import it.integry.integrywmsnative.BR;
import it.integry.integrywmsnative.MainApplication;
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.gest.accettazione.dto.OrdineAccettazioneDTO;
import it.integry.integrywmsnative.view.dialogs.IButtonDialogAction;
public class DialogInputQuantity {
private static ColorStateList originalColorStateList = null;
public static AlertDialog makeBase(Context context, OrdineAccettazioneDTO.Riga articoloItem, final float qtaEvasa, final ISingleValueOperationCallback<QuantityDTO> dialogCallback) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
ViewDataBinding contentView = DataBindingUtil.inflate(inflater, R.layout.dialog_input_quantity_articolo, null, false);
TextInputLayout txlInputNumDiCnf = contentView.getRoot().findViewById(R.id.input_num_cnf);
TextInputLayout txlInputQtaPerCnf = contentView.getRoot().findViewById(R.id.input_qta_cnf);
TextInputLayout txlInputQtaTot = contentView.getRoot().findViewById(R.id.input_qta_tot);
txlInputNumDiCnf.getEditText().setSelectAllOnFocus(true);
txlInputQtaPerCnf.getEditText().setSelectAllOnFocus(true);
txlInputQtaTot.getEditText().setSelectAllOnFocus(true);
originalColorStateList = txlInputNumDiCnf.getEditText().getTextColors();
final QuantityDTO quantityDTO = new QuantityDTO();
setupQuantities(articoloItem, quantityDTO, qtaEvasa);
setupQuantityListener(quantityDTO, txlInputNumDiCnf, txlInputQtaPerCnf, txlInputQtaTot);
contentView.setVariable(BR.viewmodel, articoloItem);
contentView.setVariable(BR.quantityViewModel, quantityDTO);
AlertDialog.Builder alertDialog = new AlertDialog.Builder(context)
.setView(contentView.getRoot())
.setPositiveButton(context.getText(R.string.confirm), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogCallback.onResult(quantityDTO);
}
})
.setNegativeButton(context.getText(R.string.abort), null);
AlertDialog alert = alertDialog.create();
alert.setCanceledOnTouchOutside(false);
return alert;
}
private static void setupQuantities(OrdineAccettazioneDTO.Riga articoloItem, QuantityDTO quantityDTO, float qtaEvasa){
float qtaDaEvadere = articoloItem.qtaOrd - qtaEvasa;
if (qtaDaEvadere < 0) qtaDaEvadere = 0;
quantityDTO.qtaEvasa.set(qtaEvasa);
quantityDTO.qtaDaEvadere.set(qtaDaEvadere);
quantityDTO.batchLot.set(articoloItem.partitaMag);
quantityDTO.qtaCnf.set(articoloItem.mtbAart.qtaCnf.floatValue());
quantityDTO.qtaTot.set(qtaDaEvadere);
quantityDTO.numCnf.set(qtaDaEvadere / quantityDTO.qtaCnf.get());
quantityDTO.shouldAskDataScad.set(articoloItem.mtbAart.isFlagTracciabilita() && articoloItem.mtbAart.ggScadPartita != null && articoloItem.mtbAart.ggScadPartita > 0);
}
private static 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() == ""));
Log.d("Color", txlInputNumDiCnf.getEditText().getTextColors().toString());
if(quantityDTO.blockedNumDiCnf.get()){
txlInputNumDiCnf.setErrorEnabled(true);
txlInputNumDiCnf.setError(" ");
txlInputNumDiCnf.getEditText().setTextColor(ContextCompat.getColor(MainApplication.Context, R.color.red_600));
} else {
txlInputNumDiCnf.setErrorEnabled(false);
txlInputNumDiCnf.setError(null);
txlInputNumDiCnf.getEditText().setTextColor(originalColorStateList);
}
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() == ""));
if(quantityDTO.blockedQtaPerCnf.get()){
txlInputQtaPerCnf.setErrorEnabled(true);
txlInputQtaPerCnf.setError(" ");
txlInputQtaPerCnf.getEditText().setTextColor(ContextCompat.getColor(MainApplication.Context, R.color.red_600));
} else {
txlInputQtaPerCnf.setErrorEnabled(false);
txlInputQtaPerCnf.setError(null);
txlInputQtaPerCnf.getEditText().setTextColor(originalColorStateList);
}
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() == ""));
if(quantityDTO.blockedQtaTot.get()){
txlInputQtaTot.setErrorEnabled(true);
txlInputQtaTot.setError(" ");
txlInputQtaTot.getEditText().setTextColor(ContextCompat.getColor(MainApplication.Context, R.color.red_600));
} else {
txlInputQtaTot.setErrorEnabled(false);
txlInputQtaTot.setError(null);
txlInputQtaTot.getEditText().setTextColor(originalColorStateList);
}
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");
}
}
}
});
}
}

View File

@ -0,0 +1,39 @@
package it.integry.integrywmsnative.view.dialogs.input_quantity;
import android.graphics.Color;
import android.support.v4.content.ContextCompat;
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 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 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 BindableBoolean canPartitaMagBeChanged = new BindableBoolean(true);
public BindableBoolean canDataScadBeChanged = new BindableBoolean(true);
public BindableBoolean shouldAskDataScad = new BindableBoolean();
}

View File

@ -1,5 +1,5 @@
<vector <vector
android:height="24dp" android:viewportHeight="512.0" android:height="24dp" android:viewportHeight="512.0"
android:viewportWidth="548.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> android:viewportWidth="512.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/colorPrimary" android:pathData="M509.5,184.6L458.9,32.8C452.4,13.2 434.1,0 413.4,0H272v192h238.7c-0.4,-2.5 -0.4,-5 -1.2,-7.4zM240,0H98.6c-20.7,0 -39,13.2 -45.5,32.8L2.5,184.6c-0.8,2.4 -0.8,4.9 -1.2,7.4H240V0zM0,224v240c0,26.5 21.5,48 48,48h416c26.5,0 48,-21.5 48,-48V224H0z"/> <path android:fillColor="@color/colorPrimary" android:pathData="M509.5,184.6L458.9,32.8C452.4,13.2 434.1,0 413.4,0H272v192h238.7c-0.4,-2.5 -0.4,-5 -1.2,-7.4zM240,0H98.6c-20.7,0 -39,13.2 -45.5,32.8L2.5,184.6c-0.8,2.4 -0.8,4.9 -1.2,7.4H240V0zM0,224v240c0,26.5 21.5,48 48,48h416c26.5,0 48,-21.5 48,-48V224H0z"/>
</vector> </vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="@color/red_600"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FFFFFF" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
</vector>

View File

@ -0,0 +1,6 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="90"
android:endColor="@android:color/transparent"
android:startColor="#64000000"/>
</shape>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout <RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
@ -30,4 +29,4 @@
android:orientation="vertical" android:orientation="vertical"
android:id="@+id/accettazione_ordine_inevaso_main_list_group_item_container"> </LinearLayout> android:id="@+id/accettazione_ordine_inevaso_main_list_group_item_container"> </LinearLayout>
</LinearLayout> </LinearLayout>
</android.support.constraint.ConstraintLayout> </RelativeLayout>

View File

@ -5,16 +5,17 @@
<variable <variable
name="viewmodel" name="viewmodel"
type="it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOrdineInevasoViewModel"/> type="it.integry.integrywmsnative.gest.accettazione_ordine_inevaso.viewmodel.AccettazioneOnOrdineInevasoViewModel"/>
</data> </data>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="false"
xmlns:fab="http://schemas.android.com/apk/res-auto"> xmlns:fab="http://schemas.android.com/apk/res-auto"
android:layout_gravity="top">
<RelativeLayout <RelativeLayout
@ -24,7 +25,8 @@
<android.support.design.widget.CoordinatorLayout <android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:layout_above="@id/empty_space_padding">
<android.support.design.widget.AppBarLayout <android.support.design.widget.AppBarLayout
android:id="@+id/appbar" android:id="@+id/appbar"
@ -62,37 +64,37 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:visibility="@{viewmodel.isFabVisible ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
fab:menu_animationDelayPerItem="50"
fab:menu_backgroundColor="@color/white_bg_alpha"
fab:menu_buttonSpacing="0dp"
fab:menu_colorNormal="@color/colorPrimary"
fab:menu_colorPressed="@color/colorPrimaryDark"
fab:menu_fab_size="normal" fab:menu_fab_size="normal"
fab:menu_showShadow="true" fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_margin="0dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_position="left"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_showShadow="true"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_openDirection="up"
fab:menu_shadowColor="#66000000" fab:menu_shadowColor="#66000000"
fab:menu_shadowRadius="4dp" fab:menu_shadowRadius="4dp"
fab:menu_shadowXOffset="1dp" fab:menu_shadowXOffset="1dp"
fab:menu_shadowYOffset="3dp" fab:menu_shadowYOffset="3dp"
fab:menu_colorNormal="@color/colorPrimary" fab:menu_showShadow="true">
fab:menu_colorPressed="@color/colorPrimaryDark"
fab:menu_animationDelayPerItem="50"
fab:menu_buttonSpacing="0dp"
fab:menu_labels_margin="0dp"
fab:menu_labels_showAnimation="@anim/fab_slide_in_from_right"
fab:menu_labels_hideAnimation="@anim/fab_slide_out_to_right"
fab:menu_labels_paddingTop="4dp"
fab:menu_labels_paddingRight="8dp"
fab:menu_labels_paddingBottom="4dp"
fab:menu_labels_paddingLeft="8dp"
fab:menu_labels_padding="8dp"
fab:menu_labels_textColor="@color/black_semi_transparent"
fab:menu_labels_textSize="18sp"
fab:menu_labels_cornerRadius="3dp"
fab:menu_labels_colorNormal="@color/white"
fab:menu_labels_colorPressed="@color/white_pressed"
fab:menu_labels_colorRipple="#66FFFFFF"
fab:menu_labels_showShadow="true"
fab:menu_labels_position="left"
fab:menu_openDirection="up"
fab:menu_backgroundColor="@color/white_bg_alpha"
android:visibility="@{viewmodel.isFabVisible ? View.VISIBLE : View.GONE}">
<com.github.clans.fab.FloatingActionButton <com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab_item1" android:id="@+id/accettazione_ordine_inevaso_fab_item1"
@ -102,8 +104,8 @@
app:fab_colorNormal="@color/white" app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed" app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF" app:fab_colorRipple="#66FFFFFF"
fab:fab_label="@string/action_show_created_ul" app:onClick="@{() -> viewmodel.showCreatedUL()}"
app:onClick="@{() -> viewmodel.showCreatedUL()}"/> fab:fab_label="@string/action_show_created_ul" />
<com.github.clans.fab.FloatingActionButton <com.github.clans.fab.FloatingActionButton
android:id="@+id/accettazione_ordine_inevaso_fab_item2" android:id="@+id/accettazione_ordine_inevaso_fab_item2"
@ -113,14 +115,31 @@
app:fab_colorNormal="@color/white" app:fab_colorNormal="@color/white"
app:fab_colorPressed="@color/white_pressed" app:fab_colorPressed="@color/white_pressed"
app:fab_colorRipple="#66FFFFFF" app:fab_colorRipple="#66FFFFFF"
fab:fab_label="@string/action_create_ul" app:onClick="@{() -> viewmodel.createNewUL()}"
app:onClick="@{() -> viewmodel.createNewUL()}" /> fab:fab_label="@string/action_create_ul" />
</com.github.clans.fab.FloatingActionMenu> </com.github.clans.fab.FloatingActionMenu>
</android.support.design.widget.CoordinatorLayout> </android.support.design.widget.CoordinatorLayout>
<RelativeLayout
android:id="@+id/empty_space_padding"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:visibility="@{!viewmodel.isFabVisible ? View.VISIBLE : View.GONE}"
android:layout_alignParentBottom="true">
</RelativeLayout> </RelativeLayout>
</RelativeLayout>
<View
android:id="@+id/shadow"
android:layout_width="match_parent"
android:layout_height="16dp"
android:background="@drawable/shape_gradient_top_shadow"
android:visibility="@{!viewmodel.isFabVisible ? View.VISIBLE : View.GONE}"
app:layout_anchor="@id/bottom_sheet_include" />
<include <include
android:id="@+id/bottom_sheet_include" android:id="@+id/bottom_sheet_include"

View File

@ -0,0 +1,239 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="viewmodel"
type="it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneDTO.Riga"/>
<variable
name="quantityViewModel"
type="it.integry.integrywmsnative.view.dialogs.input_quantity.QuantityDTO"/>
<import type="android.support.v4.content.ContextCompat" />
<import type="it.integry.integrywmsnative.MainApplication" />
<import type="it.integry.integrywmsnative.R" />
<import type="android.databinding.adapters.Converters"/>
<import type="android.graphics.Color" />
</data>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintWidth_percent="0.3">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp">
<RelativeLayout
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:text='@{(viewmodel.codArtFor != null ? viewmodel.codArtFor : viewmodel.mtbAart.codMart) + (viewmodel.partitaMag != null ? " (" + viewmodel.partitaMag + ")" : "") }'
android:textColor="#000"
android:textSize="18sp"
android:textStyle="bold"
tools:text="AV25D200010B"/>
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:paddingLeft="8dp"
android:text='@{viewmodel.mtbAart.untMis != null ? "(" + viewmodel.mtbAart.untMis + ")" : ""}'
android:textColor="#000"
android:textSize="18sp"
android:textStyle="bold"
tools:text="(PZ)"
app:layout_constraintRight_toRightOf="parent" />
</RelativeLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/dialog_title"
android:layout_marginTop="6dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/description"
android:textSize="16sp"
tools:text="Descrizione" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.mtbAart.descrizioneEstesa}"
android:textSize="16sp"
android:textStyle="bold"
tools:text="RAD 25 D H/L 200 - 10 EL B BIANCO" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ordered"
android:textSize="16sp"
tools:text="Ordinati" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{String.format("%.2f", viewmodel.qtaOrd)}'
android:textSize="16sp"
android:textStyle="bold"
android:paddingLeft="4dp"
tools:text="1200" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:text="@string/dispatched"
android:textSize="16sp"
android:visibility="@{quantityViewModel.qtaEvasa.get() == 0 ? View.GONE : View.VISIBLE}"
tools:text="Evasi" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{String.format("%.2f", quantityViewModel.qtaEvasa.get())}'
android:visibility="@{quantityViewModel.qtaEvasa.get() == 0 ? View.GONE : View.VISIBLE}"
android:textSize="16sp"
android:textStyle="bold"
android:paddingLeft="4dp"
tools:text="1200" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/to_dispatch"
android:textSize="16sp"
tools:text="Da evadere" />
<android.support.v7.widget.AppCompatTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text='@{String.format("%.2f", quantityViewModel.qtaDaEvadere.get())}'
android:textSize="16sp"
android:textStyle="bold"
android:paddingLeft="4dp"
tools:text="1200" />
</LinearLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:enabled="@{quantityViewModel.canPartitaMagBeChanged}"
app:hintTextAppearance="@style/hint_text">
<android.support.design.widget.TextInputEditText
android:id="@+id/input_partita_mag"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textNoSuggestions"
android:hint="@string/batch_lot"
app:binding="@{quantityViewModel.batchLot}"/>
</android.support.design.widget.TextInputLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<android.support.design.widget.TextInputLayout
android:id="@+id/input_num_cnf"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:enabled="@{!(quantityViewModel.blockedQtaTot.get() &amp;&amp; quantityViewModel.blockedQtaPerCnf.get())}">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:hint="@string/num_pcks"
android:gravity="end"
app:binding="@{quantityViewModel.numCnf}" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/input_qta_cnf"
android:enabled="@{!(quantityViewModel.blockedQtaTot.get() &amp;&amp; quantityViewModel.blockedNumDiCnf.get())}">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:hint="@string/qty_x_pck"
android:gravity="end"
app:binding="@{quantityViewModel.qtaCnf}"/>
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/input_qta_tot"
android:enabled="@{!(quantityViewModel.blockedNumDiCnf.get() &amp;&amp; quantityViewModel.blockedQtaPerCnf.get())}">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:hint="@string/tot_qty"
android:gravity="end"
app:binding="@{quantityViewModel.qtaTot}"/>
</android.support.design.widget.TextInputLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
</android.support.v7.widget.CardView>
</layout>

View File

@ -9,7 +9,7 @@
<import type="android.view.View" /> <import type="android.view.View" />
</data> </data>
<LinearLayout <android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet1" android:id="@+id/bottom_sheet1"
@ -45,7 +45,8 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_box" android:drawableStart="@drawable/ic_box"
android:text=" 0 REFERENCES" android:text="REFERENCES"
android:drawablePadding="12dp"
android:textColor="@color/colorPrimary" android:textColor="@color/colorPrimary"
android:paddingTop="8dp" android:paddingTop="8dp"
android:paddingBottom="8dp" android:paddingBottom="8dp"
@ -55,23 +56,37 @@
android:theme="@style/white_button" android:theme="@style/white_button"
android:textSize="16sp"/> android:textSize="16sp"/>
<android.support.v7.widget.AppCompatButton <Button
android:id="@+id/articoli_in_collo_close_collo" android:id="@+id/articoli_in_collo_close_collo"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:drawableEnd="@drawable/ic_close_24dp"
android:drawableTint="@color/red_600"
android:text="@string/action_close_ul" android:text="@string/action_close_ul"
android:textColor="@color/red_600"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:elevation="0dp"
android:theme="@style/white_button"
android:layout_alignParentEnd="true"
android:textSize="16sp" android:textSize="16sp"
android:onClick="@{() -> viewModel.closeCurrentUL()}"/> android:layout_alignParentEnd="true"
android:theme="@style/white_button"
android:drawableEnd="@drawable/ic_close_red_24dp"
android:drawablePadding="8dp"
android:onClick="@{() -> viewModel.closeCurrentUL()}"
android:drawableTint="@color/red_600"
android:textColor="@color/red_600"/>
<!--<android.support.v7.widget.AppCompatButton-->
<!--android:id="@+id/articoli_in_collo_close_collo"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="match_parent"-->
<!--android:drawableEnd="@drawable/ic_close_red_24dp"-->
<!--android:drawableTint="@color/red_600"-->
<!--android:text="@string/action_close_ul"-->
<!--android:textColor="@color/red_600"-->
<!--android:paddingTop="8dp"-->
<!--android:paddingBottom="8dp"-->
<!--android:paddingLeft="16dp"-->
<!--android:paddingRight="16dp"-->
<!--android:elevation="0dp"-->
<!--android:theme="@style/white_button"-->
<!--android:layout_alignParentEnd="true"-->
<!--android:textSize="16sp"-->
<!--android:onClick="@{() -> viewModel.closeCurrentUL()}"/>-->
</RelativeLayout> </RelativeLayout>
@ -266,7 +281,7 @@
<android.support.v7.widget.AppCompatImageView <android.support.v7.widget.AppCompatImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:tint="@color/white_pressed" android:tint="@color/empty_view_gray"
android:src="@drawable/ic_info_78dp"/> android:src="@drawable/ic_info_78dp"/>
<android.support.v7.widget.AppCompatTextView <android.support.v7.widget.AppCompatTextView
@ -275,7 +290,7 @@
android:text="@string/empty_rows_in_mtbcolt" android:text="@string/empty_rows_in_mtbcolt"
android:textSize="20sp" android:textSize="20sp"
android:gravity="center" android:gravity="center"
android:textColor="@color/white_pressed"/> android:textColor="@color/empty_view_gray"/>
</LinearLayout> </LinearLayout>
@ -351,5 +366,5 @@
</RelativeLayout> </RelativeLayout>
</LinearLayout> </android.support.design.widget.CoordinatorLayout>
</layout> </layout>

View File

@ -67,7 +67,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:text="@{`Lotto: ` + mtbColr.partitaMag + (mtbColr.dataScadPartita != null ? `(` + mtbColr.dataScadPartita + `)` : ``)}" android:text="@{`Lotto: ` + mtbColr.partitaMag + (mtbColr.getDataScadPartitaS() != null ? `(` + mtbColr.getDataScadPartitaS() + `)` : ``)}"
tools:text="Lotto: 030716" tools:text="Lotto: 030716"
android:visibility="@{mtbColr.partitaMag == null ? View.GONE : View.VISIBLE}"/> android:visibility="@{mtbColr.partitaMag == null ? View.GONE : View.VISIBLE}"/>

View File

@ -19,6 +19,7 @@
<string name="action_customize_server_settings">Personalizza impostazioni azienda</string> <string name="action_customize_server_settings">Personalizza impostazioni azienda</string>
<string name="no_description">Nessuna descrizione</string> <string name="no_description">Nessuna descrizione</string>
<string name="description">Descrizione</string>
<string name="stock">Stock</string> <string name="stock">Stock</string>
<string name="action_filter">Filtra</string> <string name="action_filter">Filtra</string>
<string name="action_orderBy">Ordina</string> <string name="action_orderBy">Ordina</string>
@ -67,5 +68,18 @@
<string name="empty_rows_in_mtbcolt">Nessuna riga presente nell\'Unità Logistica</string> <string name="empty_rows_in_mtbcolt">Nessuna riga presente nell\'Unità Logistica</string>
<string name="lu_creation">Creazione UL</string>
<string name="quantity_short">Qtà</string> <string name="quantity_short">Qtà</string>
<string name="ordered">Ordinati</string>
<string name="to_dispatch">Da evadere</string>
<string name="batch_lot">Lotto</string>
<string name="num_pcks">Num cnf</string>
<string name="qty_x_pck"><![CDATA[Qtà x cnf]]></string>
<string name="tot_qty"><![CDATA[Qtà tot]]></string>
<string name="saving">Salvataggio</string>
<string name="data_saved">Salvataggio completato</string>
</resources> </resources>

View File

@ -15,12 +15,16 @@
<color name="white_pressed">#f1f1f1</color> <color name="white_pressed">#f1f1f1</color>
<color name="half_black">#808080</color> <color name="half_black">#808080</color>
<!-- EMPTY VIEW -->
<color name="empty_view_gray">#bdbdbd</color>
<color name="blue_700">#1976D2</color> <color name="blue_700">#1976D2</color>
<color name="green_500_with_alpha">#884CAF50</color>
<color name="green_500">#4CAF50</color> <color name="green_500">#4CAF50</color>
<color name="green_600">#43A047</color> <color name="green_600">#43A047</color>
<color name="green_700">#388E3C</color> <color name="green_700">#388E3C</color>
@ -32,6 +36,7 @@
<color name="indigo_700">#303F9F</color> <color name="indigo_700">#303F9F</color>
<color name="orange_600_with_alpha">#88FB8C00</color>
<color name="orange_600">#FB8C00</color> <color name="orange_600">#FB8C00</color>

View File

@ -23,6 +23,7 @@
<string name="abort">Abort</string> <string name="abort">Abort</string>
<string name="dispatched">Dispatched</string> <string name="dispatched">Dispatched</string>
<string name="no_description">No description</string> <string name="no_description">No description</string>
<string name="description">Description</string>
<string name="stock">Stock</string> <string name="stock">Stock</string>
<string name="action_filter">Filter</string> <string name="action_filter">Filter</string>
<string name="action_orderBy">Order</string> <string name="action_orderBy">Order</string>
@ -74,6 +75,19 @@
<string name="empty_rows_in_mtbcolt">No rows found in LU</string> <string name="empty_rows_in_mtbcolt">No rows found in LU</string>
<string name="lu_creation">LU Creation</string>
<string name="quantity_short">Qty</string> <string name="quantity_short">Qty</string>
<string name="ordered">Ordered</string>
<string name="to_dispatch">To dispatch</string>
<string name="batch_lot">Batch lot</string>
<string name="num_pcks">Pcks num</string>
<string name="qty_x_pck">Qty x pck</string>
<string name="tot_qty">Tot qty</string>
<string name="saving">Saving</string>
<string name="data_saved">Data saved</string>
</resources> </resources>

View File

@ -6,6 +6,9 @@
<item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item> <item name="colorAccent">@color/colorAccent</item>
<item name="fontFamily">@font/open_sans_regular</item> <!-- target android sdk versions < 26 and > 14 if theme other than AppCompat -->
</style> </style>
<style name="AppTheme.NoActionBar"> <style name="AppTheme.NoActionBar">
@ -35,6 +38,17 @@
</style> </style>
<style name="giovanna" parent="TextAppearance.AppCompat">
<item name="android:textColor">@color/red_600</item>
<item name="colorAccent">@color/red_600</item>
<item name="colorControlNormal">@color/red_600</item>
<item name="colorControlActivated">@color/red_600</item>
<item name="android:textColorHint">@color/red_600</item>
</style>
</resources> </resources>

View File

@ -1,6 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript { buildscript {
ext.kotlin_version = '1.2.30'
repositories { repositories {
jcenter() jcenter()
maven { maven {
@ -11,6 +12,7 @@ buildscript {
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.1.3' classpath 'com.android.tools.build:gradle:3.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files