diff --git a/app/build.gradle b/app/build.gradle index 83a0e555..8279b966 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 250 - def appVersionName = '1.20.3' + def appVersionCode = 253 + def appVersionName = '1.21.1' signingConfigs { release { diff --git a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java index 4d6ad6c7..6ad0f074 100644 --- a/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/MainApplicationComponent.java @@ -11,8 +11,8 @@ import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePicking import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingModule; import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniComponent; import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniModule; -import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectMgrpDtipPairComponent; -import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectMgrpDtipPairModule; +import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoComponent; +import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoModule; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniEditFormComponent; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniEditFormModule; import it.integry.integrywmsnative.gest.contenuto_bancale.ContenutoBancaleComponent; @@ -105,7 +105,7 @@ import it.integry.integrywmsnative.view.dialogs.scan_or_create_lu.DialogScanOrCr ProdVersamentoMaterialeModule.class, DialogChooseArtsFromListaArtsModule.class, DocInterniModule.class, - DialogSelectMgrpDtipPairModule.class, + DialogSelectDocInfoModule.class, DocInterniEditFormModule.class }) public interface MainApplicationComponent { @@ -142,7 +142,7 @@ public interface MainApplicationComponent { ProdVersamentoMaterialeComponent.Factory prodVersamentoMaterialeComponent(); DialogChooseArtsFromListaArtsComponent.Factory dialogChooseArtsFromListaArtsComponent(); DocInterniComponent.Factory docInterniComponent(); - DialogSelectMgrpDtipPairComponent.Factory dialogSelectMgrpDtipPairComponent(); + DialogSelectDocInfoComponent.Factory dialogSelectMgrpDtipPairComponent(); DocInterniEditFormComponent.Factory docInterniEditFormComponent(); void inject(MainApplication mainApplication); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java index 5e7808fa..94ef061a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java @@ -18,7 +18,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; -@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 4, exportSchema = false) +@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 5, exportSchema = false) @TypeConverters({ DateConverter.class }) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java index 15da5fc7..262cb324 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java @@ -6,6 +6,7 @@ import androidx.room.Insert; import androidx.room.Query; import androidx.room.Update; +import java.util.Date; import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; @@ -28,8 +29,14 @@ public interface MtbColtDao { @Delete void delete(SqlMtbColt mtbColt); - @Query("SELECT mtb_colt.*, count(mtb_colr.id) as countArticoli from mtb_colt left outer join mtb_colr on (mtb_colr.id_collo = mtb_colt.id) where cod_dtip_provv = :codDtip AND cod_mgrp = :codMgrp and cod_dtip is null group by mtb_colt.id") - List getLocalDocumentsByCodDtipAndCodMgrp(String codDtip, String codMgrp); + @Query("SELECT mtb_colt.*, count(mtb_colr.id) as countArticoli from mtb_colt left outer join mtb_colr on (mtb_colr.id_collo = mtb_colt.id) where" + + " cod_dtip_provv = :codDtip " + + " AND ( cod_anag = :codAnag OR (cod_anag is null and :codAnag is null)) " + + " AND ( cod_vdes = :codVdes OR (cod_vdes is null and :codVdes is null)) " + + " AND ( mtb_colt.data_doc = :dataDoc OR (mtb_colt.data_doc is null and :dataDoc is null)) " + + " AND ( mtb_colt.num_doc = :numDoc OR (mtb_colt.num_doc is null and :numDoc is null)) " + + " and cod_dtip is null group by mtb_colt.id") + List getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc); @Query("SELECT ifnull(MAX(num_collo),0) +1 as num_collo from mtb_colt") Integer getNextNumCollo(); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java index d6d20648..f42f98bd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java @@ -6,6 +6,8 @@ import androidx.room.ForeignKey; import androidx.room.Index; import androidx.room.PrimaryKey; +import java.math.BigDecimal; + import it.integry.integrywmsnative.core.utility.UtilityDate; @Entity( @@ -54,6 +56,18 @@ public class ArticoloGriglia { @ColumnInfo(name = "qta_min_ordinabile") private float qtaMinOrdinabile; + @ColumnInfo(name = "gg_scadenza") + private int ggScadenza; + + @ColumnInfo(name = "giacenza") + private float giacenza; + + @ColumnInfo(name = "qta_prevista_vendita") + private float qtaPrevistaVendita; + + @ColumnInfo(name = "qta_proposta") + private float qtaProposta; + @ColumnInfo(name = "id_griglia") private int idGriglia; @@ -145,6 +159,38 @@ public class ArticoloGriglia { this.idGriglia = idGriglia; } + public int getGgScadenza() { + return ggScadenza; + } + + public void setGgScadenza(int ggScadenza) { + this.ggScadenza = ggScadenza; + } + + public float getGiacenza() { + return giacenza; + } + + public void setGiacenza(float giacenza) { + this.giacenza = giacenza; + } + + public float getQtaPrevistaVendita() { + return qtaPrevistaVendita; + } + + public void setQtaPrevistaVendita(float qtaPrevistaVendita) { + this.qtaPrevistaVendita = qtaPrevistaVendita; + } + + public float getQtaProposta() { + return qtaProposta; + } + + public void setQtaProposta(float qtaProposta) { + this.qtaProposta = qtaProposta; + } + public ArticoloOrdine convertToArticoloOrdine(Ordine ordine) { ArticoloOrdine articolo = new ArticoloOrdine(); @@ -160,6 +206,11 @@ public class ArticoloGriglia { articolo.setUntMis(this.getUntMis()); articolo.setDescrizione(this.getDescrizione()); articolo.setDataIns(UtilityDate.getDateInstance()); + articolo.setGgScadenza(this.getGgScadenza()); + articolo.setGiacenza(BigDecimal.valueOf(this.getGiacenza())); + articolo.setQtaPrevistaVendita(BigDecimal.valueOf(this.getQtaPrevistaVendita())); + articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta())); + articolo.setQtaOrd(0); return articolo; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java index 6b0c8f16..f55a69d5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java @@ -3,16 +3,19 @@ package it.integry.integrywmsnative.core.data_store.db.entity; import androidx.room.ColumnInfo; import androidx.room.Entity; import androidx.room.ForeignKey; +import androidx.room.Ignore; import androidx.room.Index; import androidx.room.PrimaryKey; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Date; @Entity( tableName = "articoli_ordine", indices = { @Index(value = "id_ordine"), - @Index(value = {"id_ordine","cod_mart"}, unique = true) + @Index(value = {"id_ordine", "cod_mart"}, unique = true) }, foreignKeys = { @ForeignKey( @@ -22,7 +25,7 @@ import java.util.Date; onDelete = ForeignKey.CASCADE ) } - ) +) public class ArticoloOrdine { @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "articolo_ordine_id") @@ -64,6 +67,20 @@ public class ArticoloOrdine { @ColumnInfo(name = "data_ins") private Date dataIns; + + @Ignore + private int ggScadenza = 0; + + @Ignore + private BigDecimal giacenza = BigDecimal.ZERO; + + @Ignore + private BigDecimal qtaPrevistaVendita = BigDecimal.ZERO; + + @Ignore + private BigDecimal qtaProposta = BigDecimal.ZERO; + + public int getArticoloOrdineId() { return articoloOrdineId; } @@ -167,4 +184,51 @@ public class ArticoloOrdine { public void setDataIns(Date dataIns) { this.dataIns = dataIns; } + + public int getGgScadenza() { + return ggScadenza; + } + + public ArticoloOrdine setGgScadenza(int ggScadenza) { + this.ggScadenza = ggScadenza; + return this; + } + + public BigDecimal getGiacenza() { + return giacenza; + } + + public ArticoloOrdine setGiacenza(BigDecimal giacenza) { + this.giacenza = giacenza; + return this; + } + + public BigDecimal getQtaPrevistaVendita() { + return qtaPrevistaVendita; + } + + public ArticoloOrdine setQtaPrevistaVendita(BigDecimal qtaPrevistaVendita) { + this.qtaPrevistaVendita = qtaPrevistaVendita; + return this; + } + + public BigDecimal getQtaProposta() { + return qtaProposta; + } + + public ArticoloOrdine setQtaProposta(BigDecimal qtaProposta) { + this.qtaProposta = qtaProposta; + return this; + } + + public BigDecimal getQtaCnfPrevistaVendita(){ + return qtaPrevistaVendita.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaPrevistaVendita.divide(BigDecimal.valueOf(qtaCnf),0, RoundingMode.CEILING); + } + + public BigDecimal getQtaCnfProposta(){ + return qtaProposta.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : qtaProposta.divide(BigDecimal.valueOf(qtaCnf),0, RoundingMode.CEILING); + } + public BigDecimal getQtaCnfGiacenza(){ + return giacenza.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : giacenza.divide(BigDecimal.valueOf(qtaCnf),0, RoundingMode.CEILING); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java index 317d1056..c5093ab3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative.core.data_store.db.repository; +import java.util.Date; import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; @@ -20,7 +21,7 @@ public interface MtbColtRepository { void delete(SqlMtbColt mtbColt, Runnable onSuccess, RunnableArgs onError); - void getLocalDocumentsByCodDtipAndCodMgrp(String codDtip, String codMgrp, RunnableArgs> onSuccess, RunnableArgs onError); + void getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc, RunnableArgs> onSuccess, RunnableArgs onError); void getNextNumCollo(RunnableArgs onSuccess, RunnableArgs onError); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColtDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColtDataSource.java index 52f95f0f..307332be 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColtDataSource.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColtDataSource.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative.core.data_store.db.repository.implementations; +import java.util.Date; import java.util.List; import javax.inject.Inject; @@ -65,10 +66,10 @@ public class SqlMtbColtDataSource extends Repository implements MtbColtRepositor } @Override - public void getLocalDocumentsByCodDtipAndCodMgrp(String codDtip, String codMgrp, RunnableArgs> onSuccess, RunnableArgs onError) { + public void getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc, RunnableArgs> onSuccess, RunnableArgs onError) { Runnable query = () -> { try { - onSuccess.run(mMtbColtDao.getLocalDocumentsByCodDtipAndCodMgrp(codDtip,codMgrp)); + onSuccess.run(mMtbColtDao.getLocalDocumentsByCodDtip(codDtip,codAnag,codVdes,dataDoc,numDoc)); } catch (Exception e) { onError.run(e); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java index 9dc95f6b..0ac39bc9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java @@ -1,34 +1,38 @@ package it.integry.integrywmsnative.core.data_store.db.view_model; +import androidx.room.ColumnInfo; + import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; public class ArticoloDTO { private String codMart; - private String descrizione; - private String untMis; - - private float qtaCnf; - - private String barcode; - - private float merceDaRic; - - - private float mediaSett; - - private String flagQtaMultipla; + private float qtaCnf; + + private float merceDaRic; + + private float mediaSett; + private float qtaMinOrdinabile; + private int ggScadenza; + + private float giacenza; + + private float qtaPrevistaVendita; + + private float qtaProposta; + + public String getCodMart() { return codMart; } @@ -101,8 +105,47 @@ public class ArticoloDTO { this.qtaMinOrdinabile = qtaMinOrdinabile; } + public String getBarcode() { + return barcode; + } - public ArticoloGriglia toArticoloGriglia(){ + public void setBarcode(String barcode) { + this.barcode = barcode; + } + + public int getGgScadenza() { + return ggScadenza; + } + + public void setGgScadenza(int ggScadenza) { + this.ggScadenza = ggScadenza; + } + + public float getGiacenza() { + return giacenza; + } + + public void setGiacenza(float giacenza) { + this.giacenza = giacenza; + } + + public float getQtaPrevistaVendita() { + return qtaPrevistaVendita; + } + + public void setQtaPrevistaVendita(float qtaPrevistaVendita) { + this.qtaPrevistaVendita = qtaPrevistaVendita; + } + + public float getQtaProposta() { + return qtaProposta; + } + + public void setQtaProposta(float qtaProposta) { + this.qtaProposta = qtaProposta; + } + + public ArticoloGriglia toArticoloGriglia() { ArticoloGriglia result = new ArticoloGriglia(); result.setBarCode(this.getBarCode()); result.setDescrizione(this.getDescrizione()); @@ -113,6 +156,10 @@ public class ArticoloDTO { result.setMediaSett(this.getMediaSett()); result.setFlagQtaMultipla(this.getFlagQtaMultipla()); result.setQtaMinOrdinabile(this.getQtaMinOrdinabile()); + result.setGgScadenza(this.ggScadenza); + result.setGiacenza(this.giacenza); + result.setQtaPrevistaVendita(this.qtaPrevistaVendita); + result.setQtaProposta(this.qtaProposta); return result; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBigDecimal.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBigDecimal.java index 7ee35f86..4c4c7487 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBigDecimal.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableBigDecimal.java @@ -7,6 +7,8 @@ import androidx.databinding.PropertyChangeRegistry; import java.math.BigDecimal; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + public class BindableBigDecimal implements Observable { BigDecimal mValue; @@ -102,9 +104,24 @@ public class BindableBigDecimal implements Observable { } public void set(BigDecimal value, boolean forceRefresh) { - if (!mValue.equals(value) || forceRefresh) { + if ((mValue == null) || !mValue.equals(value) || forceRefresh) { this.mValue = value; notifyChange(); } } + + public static void registerListener(BindableBigDecimal bindableBigDecimal, RunnableArgs onValueChanged) { + bindableBigDecimal.addOnPropertyChangedCallback(new OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + if(onValueChanged != null) onValueChanged.run(bindableBigDecimal.get()); + } + }); + } + + public static void resetListeners(BindableBigDecimal bindableBigDecimal){ + BigDecimal oldValue = bindableBigDecimal.get(); + bindableBigDecimal = new BindableBigDecimal(); + bindableBigDecimal.set(oldValue); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableInteger.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableInteger.java index 3c0b4500..e8db27dc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableInteger.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableInteger.java @@ -1,6 +1,9 @@ package it.integry.integrywmsnative.core.di; import androidx.databinding.BaseObservable; +import androidx.databinding.Observable; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; public class BindableInteger extends BaseObservable { Integer mValue; @@ -34,4 +37,19 @@ public class BindableInteger extends BaseObservable { return mValue == null; } + public static void registerListener(BindableInteger bindableInteger, RunnableArgs onValueChanged) { + bindableInteger.addOnPropertyChangedCallback(new OnPropertyChangedCallback() { + @Override + public void onPropertyChanged(Observable sender, int propertyId) { + if(onValueChanged != null) onValueChanged.run(bindableInteger.get()); + } + }); + } + + public static void resetListeners(BindableInteger bindableInteger){ + Integer oldValue = bindableInteger.get(); + bindableInteger = new BindableInteger(); + bindableInteger.set(oldValue); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java index 6c9ace57..612cc005 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java @@ -52,7 +52,7 @@ public class Converters { @BindingConversion public static String convertBindableToString(BindableString bindableString) { - if(bindableString != null) return bindableString.get(); + if (bindableString != null) return bindableString.get(); return ""; } @@ -76,7 +76,8 @@ public class Converters { TextWatcherAdapter watcher = new TextWatcherAdapter() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - if(bindableInteger != null) bindableInteger.set(Integer.parseInt(s.toString())); + if (bindableInteger != null) + bindableInteger.set(Integer.parseInt(s.toString())); } }; view.setTag(R.id.bound_observable, new Pair<>(bindableInteger, watcher)); @@ -98,7 +99,7 @@ public class Converters { TextWatcherAdapter watcher = new TextWatcherAdapter() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - if(observableField != null) observableField.set(s.toString()); + if (observableField != null) observableField.set(s.toString()); } }; view.setTag(R.id.bound_observable, new Pair<>(observableField, watcher)); @@ -210,7 +211,8 @@ public class Converters { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { BigDecimal value = null; - if(!UtilityString.isNullOrEmpty(s.toString())) value = new BigDecimal(s.toString()); + if (!UtilityString.isNullOrEmpty(s.toString())) + value = new BigDecimal(s.toString()); observableBigDecimal.set(value); } }; @@ -220,11 +222,65 @@ public class Converters { BigDecimal newValue = observableBigDecimal.get(); BigDecimal viewValue = view.getText().toString().trim().length() > 0 ? new BigDecimal(view.getText().toString()) : null; - if(!UtilityBigDecimal.equalsTo(viewValue, newValue)) { + if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { view.setText(UtilityNumber.decimalToString(newValue)); } } + @BindingAdapter("binding") + public static void bindTextInputEditTextBigDecimal(TextInputEditText view, final BindableBigDecimal bindableBigDecimal) { + Pair pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != bindableBigDecimal) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + BigDecimal value = null; + if (!UtilityString.isNullOrEmpty(s.toString())) + value = new BigDecimal(s.toString()); + bindableBigDecimal.set(value); + } + }; + view.setTag(R.id.bound_observable, new Pair<>(bindableBigDecimal, watcher)); + view.addTextChangedListener(watcher); + } + BigDecimal newValue = bindableBigDecimal.get(); + BigDecimal viewValue = view.getText().toString().trim().length() > 0 ? new BigDecimal(view.getText().toString()) : null; + + if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { + view.setText(UtilityNumber.decimalToString(newValue)); + } + } + + @BindingAdapter("binding") + public static void bindTextInputEditTextInteger(TextInputEditText view, final BindableInteger bindableInteger) { + Pair pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != bindableInteger) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + Integer value = null; + if (!UtilityString.isNullOrEmpty(s.toString())) + value = Integer.valueOf(s.toString()); + bindableInteger.set(value); + } + }; + view.setTag(R.id.bound_observable, new Pair<>(bindableInteger, watcher)); + view.addTextChangedListener(watcher); + } + Integer newValue = bindableInteger.get(); + Integer viewValue = view.getText().toString().trim().length() > 0 ? Integer.valueOf(view.getText().toString()) : Integer.valueOf(0); + + if (!(viewValue.compareTo(newValue) == 0)) { + view.setText(newValue.toString()); + } + } + @BindingAdapter("binding") public static void bindTextInputEditTextString(TextInputEditText view, final ObservableField observableString) { Pair, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); @@ -244,7 +300,7 @@ public class Converters { String newValue = observableString.get(); String viewValue = view.getText().toString(); - if(!viewValue.equalsIgnoreCase(newValue)) { + if (!viewValue.equalsIgnoreCase(newValue)) { view.setText(newValue); } } @@ -268,7 +324,7 @@ public class Converters { // Get Current Date Calendar c = UtilityDate.getCalendarInstance(); - if(observableDate.get() != null) { + if (observableDate.get() != null) { c.setTime(observableDate.get()); } @@ -279,8 +335,8 @@ public class Converters { DatePickerDialog datePickerDialog = new DatePickerDialog(view.getContext(), (cView, year, month, day) -> { Date resultDate = new GregorianCalendar(year, month, day).getTime(); - - if(parentFragment != null && warningOnOldDates && resultDate.before(new Date())) { + + if (parentFragment != null && warningOnOldDates && resultDate.before(new Date())) { DialogSimpleMessageView .makeWarningDialog(new SpannableString("Hai scelto una data precedente a quella odierna. Continuare?"), null, () -> { view.setText(UtilityDate.formatDate(resultDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); @@ -299,8 +355,8 @@ public class Converters { //Adding click-listener view.setOnClickListener(onClick::run); - if(view.getParent() != null && view.getParent().getParent() != null && view.getParent().getParent() instanceof TextInputLayout) { - ((FrameLayout)view.getParent()).setOnClickListener(onClick::run); + if (view.getParent() != null && view.getParent().getParent() != null && view.getParent().getParent() instanceof TextInputLayout) { + ((FrameLayout) view.getParent()).setOnClickListener(onClick::run); ((TextInputLayout) view.getParent().getParent()).setOnClickListener(onClick::run); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java index 25f96b0f..d1516ad7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbCols.java @@ -22,7 +22,7 @@ public class MtbCols extends EntityBase { type = "mtb_cols"; setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()); setModificatoDa(SettingsManager.i().getUser().getFullname()); - setDataMove(UtilityDate.getDateInstance()); + //setDataMove(UtilityDate.getDateInstance()); } public String getDataCollo() { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index 88916c3a..0528c066 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative.core.settings; +import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; @@ -33,6 +34,7 @@ public class DBSettingsModel { private boolean flagForceAllToColli; private boolean flagSpedizioneEnableManualPick; private boolean flagSpedizioneCanSelectMultipleOrders; + private List notePerditaDocInterni = new ArrayList<>(); private boolean flagSpedizioneUseQtaOrd; private String produzioneDefaultCodAnag; private String reportNameSpedizionChiudiOrdine; @@ -271,4 +273,13 @@ public class DBSettingsModel { this.onNumCnfInputChanged = onNumCnfInputChanged; return this; } + + public List getNotePerditaDocInterni() { + return notePerditaDocInterni; + } + + public DBSettingsModel setNotePerditaDocInterni(List notePerditaDocInterni) { + this.notePerditaDocInterni = notePerditaDocInterni; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index 5b3b6de0..7dc252b2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -7,6 +7,7 @@ import com.google.firebase.perf.metrics.Trace; import java.net.SocketTimeoutException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import it.integry.integrywmsnative.R; @@ -265,6 +266,10 @@ public class SettingsManager { .setGestName("PICKING") .setSection("SETUP") .setKeySection("ON_NUM_CNF_INPUT_CHANGED")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PVM") + .setSection("DOC_INTERNI") + .setKeySection("NOTE_PERDITA")); GestSetupRESTConsumer.getValues(stbGestSetupList, list -> { @@ -289,6 +294,10 @@ public class SettingsManager { dbSettingsModelIstance.setFlagSpedizioneCanSelectMultipleOrders(getValueFromList(list, "SPEDIZIONE", "FLAG_CAN_SELECT_MULTIPLE_ORDERS", Boolean.class)); dbSettingsModelIstance.setReportNameSpedizionChiudiOrdine(getValueFromList(list, "SPEDIZIONE", "REPORT_PACKING_LIST", String.class)); dbSettingsModelIstance.setFlagSpedizioneUseQtaOrd(getValueFromList(list, "SPEDIZIONE", "FLAG_USE_QTA_ORD", Boolean.class)); + String notePerdita = getValueFromList(list,"DOC_INTERNI","NOTE_PERDITA",String.class); + if (notePerdita != null){ + dbSettingsModelIstance.setNotePerditaDocInterni(Arrays.asList(notePerdita.split("\\|"))); + } Integer onNumCnfInputChanged = getValueFromList(list, "SETUP", "ON_NUM_CNF_INPUT_CHANGED", Integer.class); if (onNumCnfInputChanged != null) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java index 9bd200cb..416420ae 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java @@ -3,6 +3,7 @@ package it.integry.integrywmsnative.gest.contab_doc_interni; import android.content.Context; import android.os.Bundle; +import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -26,17 +27,15 @@ import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; -import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.FragmentDocInterniBinding; -import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectMgrpDtipPairView; -import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectMgrpDtipPairViewModel; +import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoView; +import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoViewModel; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocAndGruppiArtDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniEditFormActivity; import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListAdapter; import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListModel; -import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity; -import it.integry.integrywmsnative.gest.spedizione.ui.SpedizioneListAdapter; import it.integry.integrywmsnative.ui.ElevatedToolbar; public class DocInterniFragment extends BaseFragment implements ITitledFragment, IScrollableFragment, DocInterniViewModel.Listener { @@ -47,7 +46,7 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, private final ObservableArrayList mDocInterniMutableData = new ObservableArrayList<>(); private ElevatedToolbar mToolbar; private FragmentDocInterniBinding mBinding; - private TipiDocAndGruppiArtDTO mTipiDocAndGruppiArtDTO; + private DocInterniSetupDTO mDocInterniSetupDTO; private final List mOnPreDestroyList = new ArrayList<>(); private boolean dialogInitialized = false; @@ -82,6 +81,8 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, mBinding.setLifecycleOwner(this); mBinding.setView(this); mBinding.setViewModel(mViewModel); + mViewModel.mtbGrup.observe(getViewLifecycleOwner(),mtbGrup-> mViewModel.fetchProducts()); + mViewModel.dtbTipi.observe(getViewLifecycleOwner(),dtbTipi-> mViewModel.fetchDocuments()); this.initRecyclerView(); return mBinding.getRoot(); @@ -106,17 +107,41 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, } @Override - public void onGruppiArtAndTipiDocFetch(TipiDocAndGruppiArtDTO tipiDocAndGruppiArtDTO) { - this.mTipiDocAndGruppiArtDTO = tipiDocAndGruppiArtDTO; + public void onDocInterniSetupFetched(DocInterniSetupDTO docInterniSetupDTO) { + this.mDocInterniSetupDTO = docInterniSetupDTO; this.dialogInitialized = true; - this.selectCodMgrpAndCodDtip(); + this.selectDocInfo(); } @Override - public void onDocDetailsChanged(DialogSelectMgrpDtipPairViewModel selection) { + public void onDocDetailsChanged(DialogSelectDocInfoViewModel selection) { + if(selection.isInputValid()){ + mViewModel.setSelectedDocDetails(selection); + mBinding.mainFab.setVisibility(View.VISIBLE); + }else{ + mBinding.mainFab.setVisibility(View.GONE); + } + + if (selection.requiresFornitore()){ + mBinding.codAnagContainer.setVisibility(View.VISIBLE); + }else{ + mBinding.codAnagContainer.setVisibility(View.GONE); + } + + + if (selection.getSelectedGruppoArt() != null){ + mBinding.mtbGrpContainer.setVisibility(View.VISIBLE); + }else{ + mBinding.mtbGrpContainer.setVisibility(View.GONE); + } + + if (selection.requiresDocData()){ + mBinding.docContainer.setVisibility(View.VISIBLE); + mBinding.document.setText(Html.fromHtml(getString(R.string.doc_testata, String.valueOf(selection.getNumDoc()), UtilityDate.formatDate(selection.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)))); + }else{ + mBinding.docContainer.setVisibility(View.GONE); + } - this.mViewModel.setSelectedDocDetails(selection); - this.mBinding.mainFab.setVisibility(View.VISIBLE); } @Override @@ -129,12 +154,16 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, this.mOnPreDestroyList.add(onPreDestroy); } - public void selectCodMgrpAndCodDtip() { + public void selectDocInfo() { if (this.dialogInitialized){ - DialogSelectMgrpDtipPairView.newInstance( - mTipiDocAndGruppiArtDTO, + DialogSelectDocInfoView.newInstance( + mDocInterniSetupDTO, this.mViewModel.dtbTipi.getValue(), this.mViewModel.mtbGrup.getValue(), + this.mViewModel.fornitore.getValue(), + this.mViewModel.dataDoc.getValue(), + this.mViewModel.numDoc.getValue(), + this.mViewModel.note.getValue(), this::onDocDetailsChanged ).show(requireActivity().getSupportFragmentManager(), "tag"); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java index b21030e1..8d926afb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java @@ -2,6 +2,8 @@ package it.integry.integrywmsnative.gest.contab_doc_interni; import androidx.lifecycle.MutableLiveData; +import com.annimon.stream.Stream; + import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -14,29 +16,33 @@ import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper import it.integry.integrywmsnative.core.di.BindableInteger; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.settings.SettingsManager; -import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectMgrpDtipPairViewModel; +import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoViewModel; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocAndGruppiArtDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; public class DocInterniViewModel { + @Inject + MtbColtRepository documentRepository; private Listener mListener; private final DocInterniRESTConsumer mDocInterniRESTConsumer; private boolean productsFetched = true; private boolean docsFetched = true; private int nextNumCollo = 0; private GrigliaAcquistiDTO productsList; - + private final MutableLiveData> mDocsList = new MutableLiveData<>(); public final MutableLiveData dtbTipi = new MutableLiveData<>(); public final MutableLiveData mtbGrup = new MutableLiveData<>(); - private final MutableLiveData> mDocsList = new MutableLiveData<>(); + public final MutableLiveData fornitore = new MutableLiveData<>(); + public final MutableLiveData dataDoc = new MutableLiveData<>(); + public final MutableLiveData numDoc = new MutableLiveData<>(); + public final MutableLiveData note = new MutableLiveData<>(); public final BindableInteger artsSize = new BindableInteger(0); - @Inject - MtbColtRepository documentRepository; @Inject public DocInterniViewModel(DocInterniRESTConsumer docInterniRESTConsumer, MtbColtRepository documentRepository) { @@ -49,9 +55,9 @@ public class DocInterniViewModel { public void init() { this.sendOnLoadingStarted(); // new Thread(() -> { - mDocInterniRESTConsumer.getDocTypesAndGroupArts(returnDto -> { + mDocInterniRESTConsumer.getDocInterniSetup(returnDto -> { this.sendOnLoadingEnded(); - this.mListener.onGruppiArtAndTipiDocFetch(returnDto); + this.mListener.onDocInterniSetupFetched(returnDto); }, this::sendError); // }).start(); } @@ -77,20 +83,23 @@ public class DocInterniViewModel { return mDocsList; } - public void setSelectedDocDetails(DialogSelectMgrpDtipPairViewModel selection) { - if (selection.getSelectedGruppoArt() != null && selection.getSelectedTipoDoc() != null) { - if (this.dtbTipi.getValue() == null || this.mtbGrup.getValue() == null || !this.dtbTipi.getValue().equals(selection.getSelectedTipoDoc()) || !this.mtbGrup.getValue().equals(selection.getSelectedGruppoArt())) { - this.dtbTipi.setValue(selection.getSelectedTipoDoc()); - this.mtbGrup.setValue(selection.getSelectedGruppoArt()); - this.fetchProducts(); - this.fetchDocuments(); - } + public void setSelectedDocDetails(DialogSelectDocInfoViewModel selection) { + + this.fornitore.postValue(selection.getSelectedFornitore()); + this.mtbGrup.postValue(selection.getSelectedGruppoArt()); + this.dataDoc.postValue(selection.getDataDoc()); + this.numDoc.postValue(selection.getNumDoc()); + this.note.postValue(selection.getNote()); + + if (selection.getSelectedTipoDoc() != null ) { + this.dtbTipi.postValue(selection.getSelectedTipoDoc()); } } public void fetchProducts() { this.productsFetched = false; - mDocInterniRESTConsumer.fetchProducts(this.dtbTipi.getValue().getCodDtip(), this.mtbGrup.getValue().getCodMgrp(), returnDto -> { + this.sendOnLoadingStarted(); + mDocInterniRESTConsumer.fetchProducts(this.getCodDtip(), this.getCodMgrp(), returnDto -> { this.productsFetched = true; this.productsList = returnDto; this.artsSize.set(returnDto.getGrigliaAcquistiChild().size()); @@ -103,16 +112,22 @@ public class DocInterniViewModel { public void fetchDocuments() { this.docsFetched = false; this.sendOnLoadingStarted(); - documentRepository.getLocalDocumentsByCodDtipAndCodMgrp(this.getCodDtip(), this.getCodMgrp(), list -> { - documentRepository.getNextNumCollo(nextNumCollo->{ + String codAnag = null, codVdes = null; + FornitoreDTO fornitore = this.fornitore.getValue(); + if (fornitore != null){ + codAnag = fornitore.getCodAnag(); + codVdes = fornitore.getCodVdes(); + } + documentRepository.getLocalDocumentsByCodDtip(this.getCodDtip(), codAnag, codVdes, dataDoc.getValue(),numDoc.getValue(), list -> { + documentRepository.getNextNumCollo(nextNumCollo -> { this.mDocsList.postValue(list); this.setNextNumCollo(nextNumCollo); this.docsFetched = true; if (this.productsFetched) { this.sendOnLoadingEnded(); } - },this::sendError); - },this::sendError); + }, this::sendError); + }, this::sendError); } private void setNextNumCollo(Integer nextNumCollo) { @@ -147,28 +162,36 @@ public class DocInterniViewModel { document.setCodMgrp(this.getCodMgrp()); document.setDataCollo(new Date()); document.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()); - document.setAnnotazioni(""); + document.setAnnotazioni(this.note.getValue()); document.setSegno(-1); document.setSerCollo("/"); document.setNumCollo(this.nextNumCollo); document.setGestione("L"); - documentRepository.insert(document,id->{ + document.setDataDoc(this.dataDoc.getValue()); + if (this.numDoc.getValue() != null){ + document.setNumDoc(Integer.parseInt(this.numDoc.getValue())); + } + if (this.fornitore.getValue() != null){ + document.setCodAnag(this.fornitore.getValue().getCodAnag()); + document.setCodVdes(this.fornitore.getValue().getCodVdes()); + } + documentRepository.insert(document, id -> { document.setId(id); this.editDocument(document); }, this::sendError); } public boolean hasDocDetails() { - return this.dtbTipi.getValue() != null && this.mtbGrup.getValue() != null; + return this.dtbTipi.getValue() != null; } public interface Listener extends ILoadingListener { void onError(Exception ex); - void onGruppiArtAndTipiDocFetch(TipiDocAndGruppiArtDTO tipiDocAndGruppiArtDTO); + void onDocInterniSetupFetched(DocInterniSetupDTO docInterniSetupDTO); - void onDocDetailsChanged(DialogSelectMgrpDtipPairViewModel selection); + void onDocDetailsChanged(DialogSelectDocInfoViewModel selection); void onDocumentEditRequest(SqlMtbColt document, GrigliaAcquistiDTO arts); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoComponent.java new file mode 100644 index 00000000..bc9442f7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoComponent.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dialog; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogSelectDocInfoComponent { + + @Subcomponent.Factory + interface Factory { + DialogSelectDocInfoComponent create(); + } + + + void inject(DialogSelectDocInfoView dialogSelectDocInfoView); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoModule.java new file mode 100644 index 00000000..07dc5ce4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoModule.java @@ -0,0 +1,17 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dialog; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = DialogSelectDocInfoComponent.class) +public class DialogSelectDocInfoModule { + + @Singleton + @Provides + DialogSelectDocInfoViewModel dialogSelectMgrpDtipPairViewModel() { + return new DialogSelectDocInfoViewModel(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoView.java new file mode 100644 index 00000000..a64d9ba2 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoView.java @@ -0,0 +1,240 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dialog; + +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.ArrayAdapter; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableField; + +import java.util.Date; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.di.BindableString; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityObservable; +import it.integry.integrywmsnative.databinding.DialogSelectDocInfoBinding; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO; + +public class DialogSelectDocInfoView extends BaseDialogFragment implements DialogSelectDocInfoViewModel.Listener { + + @Inject + DialogSelectDocInfoViewModel mViewModel; + private Context mCurrentContext; + + + public BindableString codDtip = new BindableString(); + public BindableString codMgrp = new BindableString(); + public BindableString codAnag = new BindableString(); + public BindableString numDoc = new BindableString(); + public BindableString note = new BindableString(); + public ObservableField dataDoc = new ObservableField<>(); + + private ArrayAdapter arrayAdapterCodDtips; + private ArrayAdapter arrayAdapterCodMgrps; + private ArrayAdapter arrayAdapterCodAnags; + private ArrayAdapter arrayAdapterNote; + private DialogSelectDocInfoBinding mBindings; + + private final RunnableArgs currentOnFilterDone; + private final DocInterniSetupDTO docInterniSetupDTO; + private final TipiDocDTO selectedDtip; + private final GruppiArticoloDTO selectedGrp; + private final FornitoreDTO selectedAnag; + private final Date selectedDataDoc; + private final String selectedNumDoc; + private final String selectedNote; + + public static DialogSelectDocInfoView newInstance( + DocInterniSetupDTO docInterniSetupDTO, + TipiDocDTO tipiDocDTO, + GruppiArticoloDTO gruppiArticoloDTO, + FornitoreDTO fornitoreDTO, + Date dataDoc, + String numDoc, + String note, + RunnableArgs onDismiss + ) { + return new DialogSelectDocInfoView(docInterniSetupDTO, tipiDocDTO, gruppiArticoloDTO, fornitoreDTO, dataDoc, numDoc,note, onDismiss); + } + + + private DialogSelectDocInfoView(DocInterniSetupDTO docInterniSetupDTO, + TipiDocDTO tipiDocDTO, + GruppiArticoloDTO gruppiArticoloDTO, + FornitoreDTO fornitoreDTO, + Date dataDoc, + String numDoc, + String note, + RunnableArgs onDismiss) { + super(); + currentOnFilterDone = onDismiss; + this.docInterniSetupDTO = docInterniSetupDTO; + selectedDtip = tipiDocDTO; + selectedGrp = gruppiArticoloDTO; + selectedDataDoc = dataDoc; + selectedNumDoc = numDoc; + selectedNote = note; + selectedAnag = fornitoreDTO; + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + if (currentOnFilterDone != null) currentOnFilterDone.run(mViewModel); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + this.mCurrentContext = this.requireActivity(); + + mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_select_doc_info, container, false); + mBindings.setLifecycleOwner(this); + + MainApplication + .appComponent + .dialogSelectMgrpDtipPairComponent() + .create() + .inject(this); + mViewModel.init(docInterniSetupDTO); + mViewModel.setListeners(this); + mBindings.setView(this); + mBindings.setViewmodel(mViewModel); + + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + initView(); + + + mBindings.positiveBtn.setOnClickListener(view -> { + if (this.isInputValid()) { + getDialog().dismiss(); + } + }); + + + return mBindings.getRoot(); + } + + private void initView() { + initArrayAdapters(); + initBindables(); + + if (selectedDtip != null) { + codDtip.set(selectedDtip.getLabel()); + } + if (selectedGrp != null) { + codMgrp.set(selectedGrp.getLabel()); + } + if (selectedAnag != null) { + codAnag.set(selectedAnag.getLabel()); + } + if (selectedDataDoc != null) { + dataDoc.set(selectedDataDoc); + } + if (selectedNumDoc != null) { + numDoc.set(selectedNumDoc); + } + if (selectedNote != null) { + note.set(selectedNote); + } + } + + private boolean isInputValid() { + if (this.mViewModel.getSelectedTipoDoc() == null) { + mBindings.inputCodDtip.setErrorEnabled(true); + mBindings.inputCodDtip.setError("Seleziona un tipo documento"); + return false; + } + + if (this.mViewModel.requiresFornitore() && this.mViewModel.getSelectedFornitore() == null) { + mBindings.inputCodAnagForn.setErrorEnabled(true); + mBindings.inputCodAnagForn.setError("Seleziona un fornitore/destinatario"); + return false; + } + + if (this.mViewModel.requiresDocData() && this.mViewModel.getDataDoc() == null){ + mBindings.inputDataDoc.setError("Seleziona la data del documento"); + return false; + } + + if (this.mViewModel.requiresDocData() && (this.mViewModel.getNumDoc() == null || this.mViewModel.getNumDoc().isEmpty() )){ + mBindings.inputNumDoc.setError("Seleziona il numero del documento"); + return false; + } + + if (this.mViewModel.requiresNote() && (this.mViewModel.getNote() == null || this.mViewModel.getNote().isEmpty() )){ + mBindings.inputNoteLayout.setErrorEnabled(true); + mBindings.inputNoteLayout.setError("Specifica delle note per il documento"); + return false; + } + + return true; + } + + private void initArrayAdapters() { + + arrayAdapterCodDtips = new ArrayAdapter<>(mCurrentContext, R.layout.dialog_select_doc_info__single_item); + arrayAdapterCodDtips.addAll(mViewModel.getAvailableCodDtips()); + mBindings.filledExposedDropdownCodDtips.setAdapter(arrayAdapterCodDtips); + + arrayAdapterCodMgrps = new ArrayAdapter<>(mCurrentContext, R.layout.dialog_select_doc_info__single_item); + arrayAdapterCodMgrps.addAll(mViewModel.getAvailableCodMgrps()); + mBindings.filledExposedDropdownCodMgrps.setAdapter(arrayAdapterCodMgrps); + + arrayAdapterCodAnags = new ArrayAdapter<>(mCurrentContext, R.layout.dialog_select_doc_info__single_item); + arrayAdapterCodAnags.addAll(mViewModel.getAvailableFornitori()); + mBindings.filledExposedDropdownCodAnagList.setAdapter(arrayAdapterCodAnags); + + arrayAdapterNote = new ArrayAdapter<>(mCurrentContext, R.layout.dialog_select_doc_info__single_item); + arrayAdapterNote.addAll(mViewModel.getAdditionalNotes()); + mBindings.filledExposedDropdownNote.setAdapter(arrayAdapterNote); + } + + private void initBindables() { + BindableString.registerListener(codDtip, codDtip -> { + mViewModel.setCodDtip(codDtip); + mBindings.inputCodAnagForn.setVisibility(mViewModel.requiresFornitore() ? View.VISIBLE : View.GONE); + mBindings.inputDataDocLayout.setVisibility(mViewModel.requiresDocData() ? View.VISIBLE : View.GONE); + mBindings.inputNumDocLayout.setVisibility(mViewModel.requiresDocData() ? View.VISIBLE : View.GONE); + mBindings.inputNoteLayout.setVisibility(mViewModel.requiresNote() ? View.VISIBLE : View.GONE); + }); + BindableString.registerListener(codMgrp, mViewModel::setCodMgrp); + BindableString.registerListener(codAnag, mViewModel::setCodAnag); + BindableString.registerListener(numDoc, mViewModel::setNumDoc); + BindableString.registerListener(note, mViewModel::setNote); + UtilityObservable.addPropertyChanged(this.dataDoc, (value) -> { + this.mViewModel.setDataDoc(value); + }); + } + + + @Override + public void onDocTypeSelected() { + arrayAdapterCodAnags.clear(); + if (mViewModel.getSelectedFornitore() != null && !mViewModel.getAvailableFornitori().contains(mViewModel.getSelectedFornitore().getLabel())) { + codAnag.set(""); + } + if (mViewModel.getNote() != null && ! mViewModel.requiresNote()){ + mViewModel.setNote(null); + } + arrayAdapterCodAnags.addAll(mViewModel.getAvailableFornitori()); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java new file mode 100644 index 00000000..ed158cf7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectDocInfoViewModel.java @@ -0,0 +1,195 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dialog; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniViewModel; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO; + + +public class DialogSelectDocInfoViewModel { + + + private DocInterniSetupDTO mDocInterniSetupDTO; + + private String mTipoDoc; + + private String mGruppoArt; + + private String mFornitore; + + private Date mDataDoc; + + private String mNumDoc; + + private String mNote; + + private Listener mListener; + + public void init(DocInterniSetupDTO initialList) { + this.mDocInterniSetupDTO = initialList; + } + + public String getCodDtip() { + return mTipoDoc; + } + + public void setCodDtip(String codDtip) { + this.mTipoDoc = codDtip; + if (this.getSelectedTipoDoc() != null) { + this.mListener.onDocTypeSelected(); + } + } + + public String getCodMgrp() { + return mGruppoArt; + } + + public void setCodMgrp(String codMgrp) { + this.mGruppoArt = codMgrp; + } + + public void setCodAnag(String codAnag) { + this.mFornitore = codAnag; + } + + public Date getDataDoc() { + return mDataDoc; + } + + public void setDataDoc(Date mDataDoc) { + this.mDataDoc = mDataDoc; + } + + public String getNumDoc() { + return mNumDoc; + } + + public void setNumDoc(String numDoc) { + this.mNumDoc = numDoc; + } + + public String getNote() { + return mNote; + } + + public DialogSelectDocInfoViewModel setNote(String note) { + this.mNote = note; + return this; + } + + public DialogSelectDocInfoViewModel setListeners(Listener listener) { + this.mListener = listener; + return this; + } + + public List getAvailableCodDtips() { + return Stream.of(mDocInterniSetupDTO.getTipiDoc()).map(TipiDocDTO::getLabel).toList(); + } + + public List getAvailableCodMgrps() { + return Stream.of(mDocInterniSetupDTO.getGruppiArt()).map(GruppiArticoloDTO::getLabel).toList(); + } + + public List getAvailableFornitori() { + if (!this.requiresFornitore()) { + return new ArrayList<>(); + } + TipiDocDTO selectedDocType = getSelectedTipoDoc(); + + return Stream.of(mDocInterniSetupDTO.getFornitori()) + .filter(forn -> { + if (selectedDocType.getGestioneDoc().equalsIgnoreCase("T")) { + return forn.getTipoAnag().equalsIgnoreCase("D") && + forn.getGestioneAnag().equalsIgnoreCase( + selectedDocType.getGestione().equalsIgnoreCase("V") ? "V" : "A" + ); + } else { + return forn.getTipoAnag().equalsIgnoreCase("F") ; + } + }) + .map(FornitoreDTO::getLabel).toList(); + } + + public TipiDocDTO getSelectedTipoDoc() { + return Stream.of(mDocInterniSetupDTO.getTipiDoc()).filter(x -> x.getLabel().equals(mTipoDoc)).findFirstOrElse(null); + } + + public FornitoreDTO getSelectedFornitore() { + return Stream.of(mDocInterniSetupDTO.getFornitori()).filter(x -> x.getLabel().equals(mFornitore)).findFirstOrElse(null); + } + + public GruppiArticoloDTO getSelectedGruppoArt() { + if (mGruppoArt == null) { + return null; + } + + return Stream.of(mDocInterniSetupDTO.getGruppiArt()).filter(x -> x.getLabel().equals(mGruppoArt)).findFirstOrElse(null); + } + + public boolean requiresFornitore() { + return this.getSelectedTipoDoc() != null && ( + this.getSelectedTipoDoc().getGestioneDoc().equals("T") || + this.getSelectedTipoDoc().getGestioneDoc().equals("A") || + ( + this.getSelectedTipoDoc().getGestioneDoc().equals("P") && + !this.getSelectedTipoDoc().getGestione().equals("L") + ) + ); + } + + public boolean requiresNote() { + return this.getSelectedTipoDoc() != null && + this.getSelectedTipoDoc().getGestioneDoc().equals("P") && + this.getSelectedTipoDoc().getGestione().equals("L") + ; + } + + public boolean isInputValid() { + if (this.getSelectedTipoDoc() == null) { + return false; + } + + if (this.requiresFornitore() && this.getSelectedFornitore() == null) { + return false; + } + + if (this.requiresDocData() && (this.getDataDoc() == null || this.getNumDoc() == null)){ + return false; + } + + + if (this.requiresNote() && (this.getNote() == null || this.getNote().length() <= 0) ){ + return false; + } + + return true; + } + + public boolean requiresDocData() { + TipiDocDTO doc = this.getSelectedTipoDoc(); + return doc != null && doc.getGestioneDoc().equalsIgnoreCase("P") && !doc.getGestione().equalsIgnoreCase("L"); + } + + public List getAdditionalNotes() { + return SettingsManager.iDB().getNotePerditaDocInterni(); + } + + public interface Listener extends ILoadingListener { + + void onError(Exception ex); + + void onDocTypeSelected(); + + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairComponent.java deleted file mode 100644 index 1dad1961..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairComponent.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.integry.integrywmsnative.gest.contab_doc_interni.dialog; - -import dagger.Subcomponent; -import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniFragment; - -@Subcomponent -public interface DialogSelectMgrpDtipPairComponent { - - @Subcomponent.Factory - interface Factory { - DialogSelectMgrpDtipPairComponent create(); - } - - - void inject(DialogSelectMgrpDtipPairView dialogSelectMgrpDtipPairView); - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairModule.java deleted file mode 100644 index 870b1ab3..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairModule.java +++ /dev/null @@ -1,17 +0,0 @@ -package it.integry.integrywmsnative.gest.contab_doc_interni.dialog; - -import javax.inject.Singleton; - -import dagger.Module; -import dagger.Provides; - -@Module(subcomponents = DialogSelectMgrpDtipPairComponent.class) -public class DialogSelectMgrpDtipPairModule { - - @Singleton - @Provides - DialogSelectMgrpDtipPairViewModel dialogSelectMgrpDtipPairViewModel() { - return new DialogSelectMgrpDtipPairViewModel(); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairView.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairView.java deleted file mode 100644 index 95b70691..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairView.java +++ /dev/null @@ -1,161 +0,0 @@ -package it.integry.integrywmsnative.gest.contab_doc_interni.dialog; - -import android.content.Context; -import android.content.DialogInterface; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.view.WindowManager; -import android.widget.ArrayAdapter; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; - -import javax.inject.Inject; - -import it.integry.integrywmsnative.MainApplication; -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.di.BindableString; -import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.databinding.DialogSelectTipoDocAndGroupArtBinding; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocAndGruppiArtDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO; - -public class DialogSelectMgrpDtipPairView extends BaseDialogFragment { - - @Inject - DialogSelectMgrpDtipPairViewModel mViewModel; - private Context mCurrentContext; - - - public BindableString codDtip = new BindableString(); - public BindableString codMgrp = new BindableString(); - private ArrayAdapter arrayAdapterCodDtips; - private ArrayAdapter arrayAdapterCodMgrps; - private DialogSelectTipoDocAndGroupArtBinding mBindings; - - private RunnableArgs currentOnFilterDone; - private TipiDocAndGruppiArtDTO mTipiDocAndGruppiArtDTO; - private TipiDocDTO mSelectedDtip; - private GruppiArticoloDTO mSelectedGrp; - - - public static DialogSelectMgrpDtipPairView newInstance( - TipiDocAndGruppiArtDTO tipiDocAndGruppiArtDTO, - TipiDocDTO tipiDocDTO, - GruppiArticoloDTO gruppiArticoloDTO, - RunnableArgs onDismiss - ) { - return new DialogSelectMgrpDtipPairView(tipiDocAndGruppiArtDTO,tipiDocDTO,gruppiArticoloDTO, onDismiss); - } - - - private DialogSelectMgrpDtipPairView(TipiDocAndGruppiArtDTO tipiDocAndGruppiArtDTO,TipiDocDTO tipiDocDTO, GruppiArticoloDTO gruppiArticoloDTO, RunnableArgs onDismiss) { - super(); - currentOnFilterDone = onDismiss; - mTipiDocAndGruppiArtDTO = tipiDocAndGruppiArtDTO; - mSelectedDtip = tipiDocDTO; - mSelectedGrp = gruppiArticoloDTO; - } - - @Override - public void onDismiss(@NonNull DialogInterface dialog) { - super.onDismiss(dialog); - if (currentOnFilterDone != null) currentOnFilterDone.run(mViewModel); - } - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - this.mCurrentContext = this.requireActivity(); - - mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_select_tipo_doc_and_group_art, container, false); - mBindings.setLifecycleOwner(this); - - MainApplication - .appComponent - .dialogSelectMgrpDtipPairComponent() - .create() - .inject(this); - mViewModel.init(mTipiDocAndGruppiArtDTO); - mBindings.setView(this); - mBindings.setViewmodel(mViewModel); - - getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); - getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - initView(); - - - mBindings.positiveBtn.setOnClickListener(view -> { - if (this.isInputValid()) { - getDialog().dismiss(); - } - }); - - - return mBindings.getRoot(); - } - - private void initView() { - initArrayAdapters(); - initBindables(); - if (mSelectedDtip != null){ - codDtip.set(mSelectedDtip.getLabel()); - } - if (mSelectedGrp != null){ - codMgrp.set(mSelectedGrp.getLabel()); - } - } - - private boolean isInputValid() { - if (this.mViewModel.getSelectedTipoDoc() == null) { - mBindings.inputCodDtip.setErrorEnabled(true); - mBindings.inputCodDtip.setError("Seleziona un tipo documento"); - return false; - } - if (this.mViewModel.getSelectedGruppoArt() == null) { - mBindings.inputCodMgrps.setErrorEnabled(true); - mBindings.inputCodMgrps.setError("Seleziona un gruppo merceologico"); - return false; - } - - return true; - } - - private void initArrayAdapters() { - - arrayAdapterCodDtips = new ArrayAdapter<>(mCurrentContext, R.layout.dialog_select_tipo_doc_and_group_art__single_item); - arrayAdapterCodDtips.addAll(mViewModel.getAvailableCodDtips()); - mBindings.filledExposedDropdownCodDtips.setAdapter(arrayAdapterCodDtips); - - - arrayAdapterCodMgrps = new ArrayAdapter<>(mCurrentContext, R.layout.dialog_select_tipo_doc_and_group_art__single_item); - arrayAdapterCodMgrps.addAll(mViewModel.getAvailableCodMgrps()); - mBindings.filledExposedDropdownCodMgrps.setAdapter(arrayAdapterCodMgrps); - } - - public DialogSelectMgrpDtipPairView setCodDtip(String codDtip) { - this.codDtip.set(codDtip); - return this; - } - - public DialogSelectMgrpDtipPairView setCodMgrp(String codMgrp) { - this.codMgrp.set(codMgrp); - return this; - } - - - private void initBindables() { - - BindableString.registerListener(codDtip, mViewModel::setCodDtip); - BindableString.registerListener(codMgrp, mViewModel::setCodMgrp); - - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairViewModel.java deleted file mode 100644 index c931f301..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairViewModel.java +++ /dev/null @@ -1,62 +0,0 @@ -package it.integry.integrywmsnative.gest.contab_doc_interni.dialog; - -import com.annimon.stream.Stream; - -import java.util.List; - -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocAndGruppiArtDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO; - - -public class DialogSelectMgrpDtipPairViewModel { - - - private TipiDocAndGruppiArtDTO mTipiDocAndGruppiArtDTO; - - private String mTipoDoc; - private String mGruppoArt; - - public void init(TipiDocAndGruppiArtDTO initialList) { - this.mTipiDocAndGruppiArtDTO = initialList; - } - - public String getCodDtip() { - return mTipoDoc; - } - - public void setCodDtip(String codDtip) { - this.mTipoDoc = codDtip; - } - - public String getCodMgrp() { - return mGruppoArt; - } - - public void setCodMgrp(String codMgrp) { - this.mGruppoArt = codMgrp; - } - - public List getAvailableCodDtips() { - return Stream.of(mTipiDocAndGruppiArtDTO.getTipiDoc()).map(TipiDocDTO::getLabel).toList(); - } - - public List getAvailableCodMgrps() { - return Stream.of(mTipiDocAndGruppiArtDTO.getGruppiArt()).map(GruppiArticoloDTO::getLabel).toList(); - } - - public TipiDocDTO getSelectedTipoDoc(){ - if (mTipoDoc == null){ - return null; - } - return Stream.of(mTipiDocAndGruppiArtDTO.getTipiDoc()).filter(x->x.getLabel().equals(mTipoDoc)).findFirstOrElse(null); - } - - public GruppiArticoloDTO getSelectedGruppoArt(){ - if (mGruppoArt == null){ - return null; - } - - return Stream.of(mTipiDocAndGruppiArtDTO.getGruppiArt()).filter(x->x.getLabel().equals(mGruppoArt)).findFirstOrElse(null); - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipiDocAndGruppiArtDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DocInterniSetupDTO.java similarity index 67% rename from app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipiDocAndGruppiArtDTO.java rename to app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DocInterniSetupDTO.java index e2ed1253..619a6fb2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipiDocAndGruppiArtDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DocInterniSetupDTO.java @@ -2,14 +2,15 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.dto; import java.util.List; -public class TipiDocAndGruppiArtDTO { +public class DocInterniSetupDTO { private List tipiDoc; - private List gruppiArt; + private List fornitori; + public List getTipiDoc() { return tipiDoc; @@ -26,4 +27,12 @@ public class TipiDocAndGruppiArtDTO { public void setGruppiArt(List gruppiArt) { this.gruppiArt = gruppiArt; } + + public List getFornitori() { + return fornitori; + } + + public void setFornitori(List fornitori) { + this.fornitori = fornitori; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DocSetupDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DocSetupDTO.java new file mode 100644 index 00000000..3f715f40 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DocSetupDTO.java @@ -0,0 +1,4 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +public class DocSetupDTO { +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/FornitoreDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/FornitoreDTO.java new file mode 100644 index 00000000..195cc353 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/FornitoreDTO.java @@ -0,0 +1,60 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +public class FornitoreDTO { + + + private String codAnag; + + private String descrizione; + + private String codVdes; + + private String tipoAnag; + + private String gestioneAnag; + + + public String getCodAnag() { + return codAnag; + } + + public void setCodAnag(String codAnag) { + this.codAnag = codAnag; + } + + public String getCodVdes() { + return codVdes; + } + + public void setCodVdes(String codVdes) { + this.codVdes = codVdes; + } + + public String getDescrizione() { + return descrizione; + } + + public void setDescrizione(String descrizione) { + this.descrizione = descrizione; + } + + public String getTipoAnag() { + return tipoAnag; + } + + public void setTipoAnag(String tipoAnag) { + this.tipoAnag = tipoAnag; + } + + public String getGestioneAnag() { + return gestioneAnag; + } + + public void setGestioneAnag(String gestioneAnag) { + this.gestioneAnag = gestioneAnag; + } + + public String getLabel() { + return this.codAnag + (this.codVdes != null ? " - "+ this.codVdes : "") +" ( " + this.descrizione+" )"; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java index 35183d18..349e46c9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java @@ -12,7 +12,12 @@ public class GrigliaAcquistiChildDTO { public BigDecimal merceDaRic; public BigDecimal mediaSett; public String flagQtaMultipla; + public String flagTracciabilita; public BigDecimal qtaMinOrdinabile; + private int ggScadenza; + private float giacenza; + private float qtaPrevistaVendita; + private float qtaProposta; public String getCodMart() { return codMart; @@ -94,4 +99,49 @@ public class GrigliaAcquistiChildDTO { this.qtaMinOrdinabile = qtaMinOrdinabile; return this; } + + public String getFlagTracciabilita() { + return flagTracciabilita; + } + + public GrigliaAcquistiChildDTO setFlagTracciabilita(String flagTracciabilita) { + this.flagTracciabilita = flagTracciabilita; + return this; + } + + public int getGgScadenza() { + return ggScadenza; + } + + public GrigliaAcquistiChildDTO setGgScadenza(int ggScadenza) { + this.ggScadenza = ggScadenza; + return this; + } + + public float getGiacenza() { + return giacenza; + } + + public GrigliaAcquistiChildDTO setGiacenza(float giacenza) { + this.giacenza = giacenza; + return this; + } + + public float getQtaPrevistaVendita() { + return qtaPrevistaVendita; + } + + public GrigliaAcquistiChildDTO setQtaPrevistaVendita(float qtaPrevistaVendita) { + this.qtaPrevistaVendita = qtaPrevistaVendita; + return this; + } + + public float getQtaProposta() { + return qtaProposta; + } + + public GrigliaAcquistiChildDTO setQtaProposta(float qtaProposta) { + this.qtaProposta = qtaProposta; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipiDocDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipiDocDTO.java index 0d8d5c64..a6fb22ae 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipiDocDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipiDocDTO.java @@ -4,6 +4,8 @@ public class TipiDocDTO { private String codDtip; private String descrizione; + private String gestione; + private String gestioneDoc; public String getCodDtip() { return codDtip; @@ -21,6 +23,21 @@ public class TipiDocDTO { this.descrizione = descrizione; } + public String getGestione() { + return gestione; + } + + public void setGestione(String gestione) { + this.gestione = gestione; + } + + public String getGestioneDoc() { + return gestioneDoc; + } + + public void setGestioneDoc(String gestioneDoc) { + this.gestioneDoc = gestioneDoc; + } public String getLabel(){ return this.codDtip +" - "+this.descrizione; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java index 2b2c15f4..603ad11f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java @@ -3,35 +3,31 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.text.Html; +import android.view.View; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.databinding.DataBindingUtil; import androidx.databinding.ObservableArrayList; -import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.LinearLayoutManager; import com.annimon.stream.Stream; -import com.ravikoradiya.liveadapter.LiveAdapter; import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; import javax.inject.Inject; -import it.integry.barcode_base_android_library.model.BarcodeScanDTO; -import it.integry.integrywmsnative.BR; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; import it.integry.integrywmsnative.core.data_cache.DataCache; -import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrRepository; -import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.di.BindableInteger; import it.integry.integrywmsnative.core.di.BindableString; @@ -44,10 +40,6 @@ import it.integry.integrywmsnative.databinding.ActivityContabDocInterniEditBindi import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiChildDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui.DocumentRowsListAdapter; -import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListAdapter; -import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListModel; -import it.integry.integrywmsnative.gest.ordini_uscita_elenco.filters.FilterDepositoLayoutView; -import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; import it.integry.integrywmsnative.view.dialogs.DialogCommon; @@ -69,9 +61,11 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter private int mBarcodeScannerIstanceID; private ActivityContabDocInterniEditBinding binding; public BindableString documentHeader = new BindableString(true); + public BindableString documentRifHeader = new BindableString(true); public BindableString codDtip = new BindableString(); public BindableString note = new BindableString(); public BindableString codMgrp = new BindableString(); + public BindableString codAnag = new BindableString(); public BindableInteger prodsCount = new BindableInteger(0); public BindableBoolean isDocumentExportable = new BindableBoolean(false); private final ObservableArrayList documentRowsObservableList = new ObservableArrayList<>(); @@ -107,8 +101,24 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter SqlMtbColt document = this.viewModel.getDocument(); this.codDtip.set(document.getCodDtipProvv()); this.note.set(document.getAnnotazioni()); - this.codMgrp.set(document.getCodMgrp()); + if(document.getCodMgrp() != null){ + this.codMgrp.set(document.getCodMgrp()); + }else{ + binding.mtbGrupContainer.setVisibility(View.GONE); + } + if (document.getCodAnag() != null){ + this.codAnag.set(document.getCodAnag() + (document.getCodVdes()!=null?" - "+document.getCodVdes():"")); + }else{ + this.binding.supplierLayout.setVisibility(View.GONE); + } + this.documentHeader.set(String.format(this.getString(R.string.doc_interni_doc_header), document.getId(), document.getCodDtipProvv())); + + if (document.getNumDoc() != null && document.getDataDoc() != null){ + this.documentRifHeader.set(String.format(this.getString(R.string.doc_testata), document.getNumDoc().toString(), document.getDataDoc())); + }else{ + this.binding.docRifLayout.setVisibility(View.GONE); + } } private void initView() { @@ -117,7 +127,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter setSupportActionBar(binding.toolbar); binding.toolbar.setTitle(R.string.edit_doc); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - FabMenuCustomAnimations.changeIconOnFocus(binding.closeActivityFab, R.drawable.ic_check_white_24dp, R.drawable.ic_close_24dp); + FabMenuCustomAnimations.changeIconOnFocus(binding.closeActivityFab, R.drawable.ic_menu_24dp, R.drawable.ic_close_24dp); binding.bottomSheetMtbColrEdit.setListener(this); binding.bottomSheetMtbColrEdit.init(binding.bottomSheetMtbColrEdit, binding.bottomSheetMtbColrEditBackground); } @@ -126,8 +136,8 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter this.viewModel.setListeners(this); this.viewModel.setDocument(document); this.viewModel.setProductsList(productList); - } + } private void initRecyclerView() { this.viewModel.docRows.observe(this, this::refreshList); DocumentRowsListAdapter listAdapter = new DocumentRowsListAdapter(this, documentRowsObservableList); @@ -145,14 +155,6 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter this.documentRowsObservableList.addAll(this.viewModel.docRows.getValue()); } - public void editNote() { - BarcodeManager.disable(); - DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre/codice articolo da cercare", note -> { - this.note.set(note); - this.viewModel.setNote(note); - BarcodeManager.enable(); - }, BarcodeManager::enable).show(); - } public void closeEdit() { @@ -161,7 +163,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter public void manualSearch() { BarcodeManager.disable(); - DialogSimpleInputHelper.makeInputDialog(this, "Aggiungi delle annotazioni al documento", this.note.get(), this.viewModel::onSearch, BarcodeManager::enable).show(); + DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre/codice articolo da cercare", null, this.viewModel::onSearch, BarcodeManager::enable).show(); } @@ -206,7 +208,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter } @Override - public void onEditRowRequest(SqlMtbColr row) { + public void onEditRowRequest(SqlMtbColr row, boolean flagTracciabilita) { MtbAart mtbAart = new MtbAart(); mtbAart.setBarCode(row.getCodBarre()); mtbAart.setDiacod(row.getCodBarre()); @@ -215,6 +217,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter mtbAart.setQtaCnf(BigDecimal.valueOf(row.getQtaCnf())); mtbAart.setDescrizione(row.getDescrizione()); mtbAart.setDescrizioneEstesa(row.getDescrizione()); + mtbAart.setFlagTracciabilita(flagTracciabilita? "S" : "N"); mtbAart.setUntMis(row.getUntMis()); DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() @@ -222,10 +225,22 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter .setInitialNumCnf(BigDecimal.valueOf(row.getNumCnf())) .setInitialQtaCnf(BigDecimal.valueOf(row.getQtaCnf())) .setInitialQtaTot(BigDecimal.valueOf(row.getQtaCol())) + .setNote(row.getNote()) + .setPartitaMag(row.getPartitaMag()) .setDataScad(row.getDataScad()) .setCanOverflowOrderQuantity(false) .setCanLUBeClosed(false) - .setCanPartitaMagBeChanged(false); + .setNotesAllowed(true) + .setDataScadMandatory(flagTracciabilita) + .setCanPartitaMagBeChanged(flagTracciabilita) + .setSuggestPartitaMag(data -> { + Date dataScad = data.getDataScad(); + String partitaMag = null; + if (dataScad != null){ + partitaMag = new SimpleDateFormat("yyyymmdd").format(dataScad); + } + return partitaMag; + }); DialogInputQuantityV2View .newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { @@ -255,7 +270,8 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter @Override public void onMtbColrEdit(MtbColr mtbColr) { - this.viewModel.editRow(entityToSql(mtbColr)); + GrigliaAcquistiChildDTO articolo = viewModel.getArticoloByCodMart(mtbColr.getCodMart()); + this.viewModel.editRow(entityToSql(mtbColr),articolo.getFlagTracciabilita().equalsIgnoreCase("S")); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java index 2c701c6d..3cc8ae14 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java @@ -68,8 +68,8 @@ public class DocInterniEditFormViewModel { } - public void editRow(SqlMtbColr row) { - this.listener.onEditRowRequest(row); + public void editRow(SqlMtbColr row,boolean flagTracciabilita) { + this.listener.onEditRowRequest(row,flagTracciabilita); } private Integer getNextIdRiga() { @@ -91,6 +91,17 @@ public class DocInterniEditFormViewModel { }, this::sendError); }, this::sendError); } +public void deleteDocument() { + this.sendOnLoadingStarted(); + docInterniRESTConsumer.saveDoc(this.getSaveDto(), obj -> { + SqlMtbColt document = this.getDocument(); + document.setCodDtip(document.getCodDtipProvv()); + mtbColtRepository.update(document, doc -> { + this.sendOnLoadingEnded(); + this.listener.onDocExported(); + }, this::sendError); + }, this::sendError); + } public void holdDocument() { this.listener.onDocumentHoldRequest(); @@ -105,7 +116,7 @@ public class DocInterniEditFormViewModel { return; } SqlMtbColr row = this.getRowForArticolo(articolo); - this.editRow(row); + this.editRow(row,articolo.getFlagTracciabilita().equalsIgnoreCase("S")); } @@ -207,6 +218,7 @@ public class DocInterniEditFormViewModel { row.setQtaCnf(resultDTO.getQtaCnf().floatValue()); row.setNumCnf(resultDTO.getNumCnf().floatValue()); row.setQtaCol(resultDTO.getQtaTot().floatValue()); + row.setNote(resultDTO.getNote()); row.setDataScad(resultDTO.getDataScad()); if (row.getId() > 0) { this.mtbColrRepository.update(row, id -> { @@ -233,13 +245,17 @@ public class DocInterniEditFormViewModel { return this.docRows.getValue(); } + public GrigliaAcquistiChildDTO getArticoloByCodMart(String codMart) { + return Stream.of(productsList).filter(prod->prod.codMart.equalsIgnoreCase(codMart)).findFirstOrElse(null); + } + public interface Listener extends ILoadingListener { void onError(Exception ex); void onRowsChanged(List rows); - void onEditRowRequest(SqlMtbColr row); + void onEditRowRequest(SqlMtbColr row,boolean flagTracciabilita); void onDocumentHoldRequest(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumer.java index ec2c5196..333fd525 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumer.java @@ -2,18 +2,15 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.rest; import com.google.gson.JsonObject; -import java.util.List; - import javax.inject.Singleton; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; -import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocAndGruppiArtDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -21,16 +18,16 @@ import retrofit2.Response; @Singleton public class DocInterniRESTConsumer extends _BaseRESTConsumer { - public void getDocTypesAndGroupArts(RunnableArgs onComplete, RunnableArgs onFailed) { + public void getDocInterniSetup(RunnableArgs onComplete, RunnableArgs onFailed) { DocInterniRESTConsumerService service = RESTBuilder.getService(DocInterniRESTConsumerService.class); - service.getDocTypesAndGroupArts().enqueue(new Callback<>() { + service.getSetupDocInterni().enqueue(new Callback<>() { @Override - public void onResponse(Call> call, Response> response) { - analyzeAnswer(response, "getDocTypesAndGroupArts", onComplete, onFailed); + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "getSetupDocInterni", onComplete, onFailed); } @Override - public void onFailure(Call> call, Throwable t) { + public void onFailure(Call> call, Throwable t) { onFailed.run(new Exception(t)); } }); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java index 4be6cf4a..0f20c77f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java @@ -2,15 +2,10 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.rest; import com.google.gson.JsonObject; -import java.util.List; - import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; -import it.integry.integrywmsnative.gest.accettazione.dto.GetPickingListAccettazioneDTO; -import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO; -import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocAndGruppiArtDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.GET; @@ -20,8 +15,8 @@ import retrofit2.http.Query; public interface DocInterniRESTConsumerService { - @GET("getDocTypesAndArtsGroups") - Call> getDocTypesAndGroupArts(); + @GET("getDocInterniSetup") + Call> getSetupDocInterni(); @POST("SM2SaveTerminalinoWMS") Call> save(@Body SaveDTO saveDTO); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/ProdVersamentoMaterialeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/ProdVersamentoMaterialeFragment.java index 32dbb576..f55bc6d8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/ProdVersamentoMaterialeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/ProdVersamentoMaterialeFragment.java @@ -284,16 +284,16 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro if (offsetCnf.floatValue() != 0 || offsetCol.floatValue() != 0){ if ( SettingsManager.iDB().isFlagForceAllToColli() || (majorOrder.getOriginalMtbAart() != null && !majorOrder.getOriginalMtbAart().isFlagQtaCnfFissaBoolean())) { majorOrder.setNumCnfBigDecimal(majorOrder.getNumCnfBigDecimal().add(offsetCnf)); - majorOrder.getOriginalOrdineLavorazione().setNumCnfVersamento(majorOrder.getNumCnfBigDecimal().add(offsetCnf).floatValue()); + majorOrder.getOriginalOrdineLavorazione().setNumCnfVersamento(majorOrder.getNumCnfBigDecimal().floatValue()); majorOrder.setQtaBigDecimal(majorOrder.getQtaBigDecimal().add(offsetCol)); - majorOrder.getOriginalOrdineLavorazione().setQtaColVersamento(majorOrder.getQtaBigDecimal().add(offsetCol).floatValue()); + majorOrder.getOriginalOrdineLavorazione().setQtaColVersamento(majorOrder.getQtaBigDecimal().floatValue()); } else { majorOrder.setQtaBigDecimal(majorOrder.getQtaBigDecimal().add(offsetCol)); - majorOrder.getOriginalOrdineLavorazione().setQtaColVersamento(majorOrder.getQtaBigDecimal().add(offsetCol).floatValue()); + majorOrder.getOriginalOrdineLavorazione().setQtaColVersamento(majorOrder.getQtaBigDecimal().floatValue()); majorOrder.setNumCnfBigDecimal(UtilityBigDecimal.divide(majorOrder.getQtaBigDecimal(), qtaCnf)); - majorOrder.getOriginalOrdineLavorazione().setNumCnfVersamento(UtilityBigDecimal.divide(majorOrder.getQtaBigDecimal(), qtaCnf).floatValue()); + majorOrder.getOriginalOrdineLavorazione().setNumCnfVersamento(majorOrder.getNumCnfBigDecimal().floatValue()); } } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java index 9088d7f5..febbc9ca 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -183,13 +183,14 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { } private void addArticolo(ArticoloOrdine articoloOrdine) { - runOnUiThread(() -> EditArticoloDialog.make(this, mhelper, articoloOrdine, articolo -> { + + runOnUiThread(() -> EditArticoloDialog.newInstance(this, mhelper, articoloOrdine, articolo -> { BarcodeManager.enable(); if (articolo != null) { Toast.makeText(this, "Articolo aggiunto all'ordine!", Toast.LENGTH_SHORT).show(); } fetchArticoli(); - }).show()); + }).show(this.getSupportFragmentManager(), "tag")); } private void fetchDetails() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java index 667234a0..54925165 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java @@ -1,177 +1,165 @@ package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog; import android.app.Activity; -import android.app.Dialog; -import android.content.Context; +import android.content.DialogInterface; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; -import android.text.Editable; -import android.text.TextWatcher; +import android.os.Bundle; +import android.text.InputType; import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.DialogFragment; +import androidx.lifecycle.MutableLiveData; + +import java.math.BigDecimal; +import java.math.RoundingMode; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; -import it.integry.integrywmsnative.core.expansion.BaseDialog; +import it.integry.integrywmsnative.core.di.BindableBigDecimal; +import it.integry.integrywmsnative.core.di.BindableInteger; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.utility.UtilityDialog; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityFocus; -import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper; -public class EditArticoloDialog { - - private Activity mContext; - - private Dialog mDialog; +public class EditArticoloDialog extends BaseDialogFragment { + private final Activity mContext; private DialogPvEditArticoloBinding mBinding; - - private PVEditOrderHelper mHelper; - - private ArticoloOrdine mArticolo; - private ArticoloOrdine mSavedArt; - + private final PVEditOrderHelper mHelper; + private final MutableLiveData mArticolo = new MutableLiveData<>(); + private final RunnableArgs onDialogDismiss; private boolean mLockedInput = false; - private Dialog mCurrentProgress; + public final BindableBigDecimal qtaOrd = new BindableBigDecimal(BigDecimal.ZERO); + public final BindableInteger numCnf = new BindableInteger(0); + public final BindableBigDecimal qtaCnf = new BindableBigDecimal(BigDecimal.ZERO); - public static Dialog make(Activity context, PVEditOrderHelper helper, ArticoloOrdine articolo, RunnableArgs onDialogDismiss) { - return new EditArticoloDialog(context, helper, articolo, onDialogDismiss).mDialog; + public static EditArticoloDialog newInstance(Activity context, PVEditOrderHelper helper, ArticoloOrdine articolo, RunnableArgs onDialogDismiss) { + return new EditArticoloDialog(context, helper, articolo, onDialogDismiss); } - private EditArticoloDialog(Activity context, PVEditOrderHelper helper, ArticoloOrdine articolo, RunnableArgs onDialogDismiss) { mContext = context; - mArticolo = articolo; + mArticolo.setValue(articolo); mHelper = helper; + qtaOrd.set(BigDecimal.valueOf(articolo.getQtaOrd())); + numCnf.set(BigDecimal.valueOf(articolo.getQtaOrd()).divide(BigDecimal.valueOf(articolo.getQtaCnf()),0,RoundingMode.CEILING).intValue()); + qtaCnf.set(BigDecimal.valueOf(articolo.getQtaCnf())); - mSavedArt = null; + this.onDialogDismiss = onDialogDismiss; - LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog); + + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + super.onDismiss(dialog); + ArticoloOrdine articolo = mArticolo.getValue(); + if (articolo != null && articolo.getQtaOrd() <= 0f){ + articolo = null; + } + onDialogDismiss.run(articolo); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_pv_edit_articolo, null, false); - mBinding.setViewmodel(this); + mBinding.setView(this); + mBinding.toolbar.setTitle("Inserimento articolo"); + mBinding.inputQtaOrd.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + initBindings(); - mDialog = new BaseDialog(context); - mDialog.setContentView(mBinding.getRoot()); - UtilityDialog.setTo90PercentWidth(mContext, mDialog); - mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - int qtaCnf = (int) Math.ceil(mArticolo.getQtaOrd() / mArticolo.getQtaCnf()); - mBinding.qtaTot.setText(String.valueOf(mArticolo.getQtaOrd())); - mBinding.qtaCnf.setText(String.valueOf(qtaCnf)); - mDialog.setOnShowListener(dialog -> { - UtilityFocus.focusTextBox(mContext, mBinding.qtaTot); - }); - - mDialog.setOnDismissListener(dialog -> { - onDialogDismiss.run(mSavedArt); - }); - setListeners(); + return mBinding.getRoot(); } - private void setListeners() { - mBinding.qtaTot.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - setQtaOrd(s.toString().length() > 0 ? Float.parseFloat(s.toString()) : 0); - } - - @Override - public void afterTextChanged(Editable s) { - } - }); - mBinding.qtaCnf.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - setQtaCnf(s.toString().length() > 0 ? Integer.parseInt(s.toString()) : 0); - } - - @Override - public void afterTextChanged(Editable s) { - - } - }); + @Override + public void onStart() { + super.onStart(); + UtilityFocus.focusTextBox(mContext, mBinding.inputQtaOrd); } - public void setQtaCnf(int qtaCnf) { - if (mLockedInput) { - mLockedInput = false; - } else { - mLockedInput = true; + private void initBindings() { - float qtaTot = qtaCnf * mArticolo.getQtaCnf(); - mBinding.qtaTot.setText(String.valueOf(qtaTot)); - } - } + BindableBigDecimal.registerListener(qtaOrd, qta -> { + if (!mLockedInput) { + mLockedInput = true; - public void setQtaOrd(float qtaOrd) { - mArticolo.setQtaOrd(qtaOrd); - if (mLockedInput) { - mLockedInput = false; - } else { - mLockedInput = true; - mBinding.qtaCnf.setText(String.valueOf((int) Math.ceil(qtaOrd / mArticolo.getQtaCnf()))); - } + ArticoloOrdine articoloOrdine = mArticolo.getValue(); + BigDecimal qtaCnf = BigDecimal.valueOf(articoloOrdine.getQtaCnf()); + int cnf = 0; + if (qtaOrd.get() != null && qtaOrd.get().compareTo(BigDecimal.ZERO) > 0){ + cnf = qtaOrd.get().divide(qtaCnf, 0, RoundingMode.CEILING).intValue(); + } + this.numCnf.set( cnf); + this.mBinding.executePendingBindings(); + + mLockedInput = false; + } + }); + BindableInteger.registerListener(numCnf, qta -> { + if (!mLockedInput){ + mLockedInput = true; + + ArticoloOrdine articoloOrdine = mArticolo.getValue(); + BigDecimal qtaCnf = BigDecimal.valueOf(articoloOrdine.getQtaCnf()); + this.qtaOrd.set(BigDecimal.valueOf(numCnf.get() * qtaCnf.floatValue()).setScale(2, RoundingMode.CEILING)); + this.mBinding.executePendingBindings(); + + mLockedInput = false; + } + }); } public void saveAndExit() { - this.openProgress(); + this.onLoadingStarted(); try { - float qtaOrd = Float.parseFloat(mBinding.qtaTot.getText().toString()); - if (qtaOrd <= 0) { + ArticoloOrdine articolo = mArticolo.getValue(); + if (articolo == null) { + throw new Exception("Articolo non valido"); + } + if (qtaOrd.get().compareTo(BigDecimal.ZERO) <= 0) { throw new Exception("La quantità ordinata deve essere maggiore di 0"); } - mArticolo.setQtaOrd(qtaOrd); + + articolo.setQtaOrd(qtaOrd.get().floatValue()); + mArticolo.postValue(articolo); } catch (Exception e) { mContext.runOnUiThread(() -> UtilityExceptions.defaultException(mContext, e)); - this.closeProgress(); + this.onLoadingEnded(); return; } - mHelper.saveArticoloToOrdine(mArticolo, () -> { - mSavedArt = mArticolo; - this.closeProgress(); - mDialog.dismiss(); + mHelper.saveArticoloToOrdine(mArticolo.getValue(), () -> { + this.onLoadingEnded(); + this.dismiss(); }, e -> mContext.runOnUiThread(() -> UtilityExceptions.defaultException(mContext, e))); } public ArticoloOrdine getArticolo() { - return mArticolo; + return mArticolo.getValue(); } public void cancel() { - mArticolo = null; - mDialog.dismiss(); - } - - protected void openProgress() { - mContext.runOnUiThread(() -> { - if (this.mCurrentProgress == null) { - this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(mContext); - } - }); - } - - protected void closeProgress() { - mContext.runOnUiThread(() -> { - if (mCurrentProgress != null) { - mCurrentProgress.dismiss(); - mCurrentProgress = null; - } - }); + mArticolo.postValue(null); + this.dismiss(); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java index f32066af..72852662 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2DTO.java @@ -3,6 +3,7 @@ package it.integry.integrywmsnative.view.dialogs.input_quantity_v2; import java.math.BigDecimal; import java.util.Date; +import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; @@ -27,10 +28,14 @@ public class DialogInputQuantityV2DTO { private BigDecimal qtaCnfAvailable; private boolean canPartitaMagBeChanged = true; + private boolean isDataScadMandatory = false; + private boolean isNotesAllowed = false; private boolean canLUBeClosed; private String partitaMag; + private String note; private Date dataScad; + private RunnableArgsWithReturn suggestPartitaMag; private boolean canOverflowOrderQuantity; @@ -178,6 +183,15 @@ public class DialogInputQuantityV2DTO { return this; } + public String getNote() { + return note; + } + + public DialogInputQuantityV2DTO setNote(String note) { + this.note = note; + return this; + } + public Date getDataScad() { return dataScad; } @@ -195,4 +209,31 @@ public class DialogInputQuantityV2DTO { this.canOverflowOrderQuantity = canOverflowOrderQuantity; return this; } + + public DialogInputQuantityV2DTO setDataScadMandatory(boolean dataScadMandatory) { + isDataScadMandatory = dataScadMandatory; + return this; + } + + public boolean isDataScadMandatory() { + return isDataScadMandatory ; + } + + public boolean isNotesAllowed() { + return isNotesAllowed; + } + + public DialogInputQuantityV2DTO setNotesAllowed(boolean notesAllowed) { + isNotesAllowed = notesAllowed; + return this; + } + + public RunnableArgsWithReturn getSuggestPartitaMag() { + return suggestPartitaMag; + } + + public DialogInputQuantityV2DTO setSuggestPartitaMag(RunnableArgsWithReturn suggestPartitaMag) { + this.suggestPartitaMag = suggestPartitaMag; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ResultDTO.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ResultDTO.java index bc36c5db..b5c3a104 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ResultDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ResultDTO.java @@ -6,6 +6,7 @@ import java.util.Date; public class DialogInputQuantityV2ResultDTO { private String partitaMag; + private String note; private Date dataScad; private BigDecimal numCnf; @@ -21,6 +22,15 @@ public class DialogInputQuantityV2ResultDTO { return this; } + public String getNote() { + return note; + } + + public DialogInputQuantityV2ResultDTO setNote(String note) { + this.note = note; + return this; + } + public Date getDataScad() { return dataScad; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index f1abc006..58b8ddcd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -56,6 +56,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia private Runnable mOnAbort; public ObservableField currentPartitaMag = new ObservableField<>(); + public ObservableField currentNotes = new ObservableField<>(); public ObservableField currentDataScad = new ObservableField<>(); public ObservableField currentNumCnf = new ObservableField<>(); @@ -67,6 +68,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia public ObservableField enabledQtaTot = new ObservableField<>(true); public ObservableField enabledChangePartitaMag = new ObservableField<>(true); + public ObservableField enabledNotes = new ObservableField<>(false); public ObservableField enabledLUCloseButton = new ObservableField<>(true); private Context context; @@ -127,6 +129,8 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia .setCanOverflowOrderQuantity(mDialogInputQuantityV2DTO.isCanOverflowOrderQuantity()) .setQtaCnfAvailable(mDialogInputQuantityV2DTO.getQtaCnfAvailable()) .setPartitaMag(mDialogInputQuantityV2DTO.getPartitaMag()) + .setNote(mDialogInputQuantityV2DTO.getNote()) + .setSuggestPartitaMagRunnable(mDialogInputQuantityV2DTO.getSuggestPartitaMag()) .setDataScad(mDialogInputQuantityV2DTO.getDataScad()); mBindings.setView(this); @@ -196,6 +200,12 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia } }); + UtilityObservable.addPropertyChanged(this.currentNotes, (value) -> { + if (this.mEnableDataCallback) { + this.mViewModel.setNote(value); + } + }); + UtilityObservable.addPropertyChanged(this.currentDataScad, (value) -> { if (this.mEnableDataCallback) { this.mViewModel.setDataScad(value); @@ -326,6 +336,8 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia this.mViewModel.setCanPartitaMagBeChanged(this.mDialogInputQuantityV2DTO.isCanPartitaMagBeChanged()); this.enabledChangePartitaMag.set(this.mDialogInputQuantityV2DTO.isCanPartitaMagBeChanged()); + this.mViewModel.shouldAskDataScad = this.mDialogInputQuantityV2DTO.isDataScadMandatory(); + this.enabledNotes.set(this.mDialogInputQuantityV2DTO.isNotesAllowed()); this.enabledLUCloseButton.set(this.mDialogInputQuantityV2DTO.isCanLUBeClosed()); } @@ -350,6 +362,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia this.mEnableDataCallback = false; this.currentPartitaMag.set(this.mViewModel.getPartitaMag()); + this.currentNotes.set(this.mViewModel.getNote()); this.currentDataScad.set(this.mViewModel.getDataScad()); this.currentNumCnf.set(this.mViewModel.getNumCnf()); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java index 7ee06dc3..a696b4cc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2ViewModel.java @@ -8,6 +8,7 @@ import java.util.Date; import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.expansion.RunnableArgsWithReturn; import it.integry.integrywmsnative.core.model.MtbAart; import it.integry.integrywmsnative.core.rest.consumers.BarcodeRESTConsumer; import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; @@ -59,8 +60,11 @@ public class DialogInputQuantityV2ViewModel { private BigDecimal internalQtaTot; private String internalPartitaMag; + private String internalNote; private Date internalDataScad; + private RunnableArgsWithReturn suggestPartitaMagRunnable; + private boolean canOverflowOrderQuantity; private boolean canPartitaMagBeChanged; private int onNumCnfInputChanged; @@ -98,8 +102,10 @@ public class DialogInputQuantityV2ViewModel { this.internalQtaTot = totalQtaOrd; } - this.shouldAskDataScad = mtbAart.get().isFlagTracciabilitaBoolean() && mtbAart.get().getGgScadPartita() != null && mtbAart.get().getGgScadPartita() > 0; - this.shouldShowDataScad = this.internalDataScad != null; + if (this.shouldAskDataScad == null){ + this.shouldAskDataScad = mtbAart.get().isFlagTracciabilitaBoolean() && mtbAart.get().getGgScadPartita() != null && mtbAart.get().getGgScadPartita() > 0; + } + this.shouldShowDataScad = this.shouldAskDataScad || this.internalDataScad != null; this.blockedNumCnf.set(false); this.blockedQtaCnf.set(false); @@ -194,6 +200,10 @@ public class DialogInputQuantityV2ViewModel { return internalPartitaMag; } + public String getNote() { + return internalNote; + } + public Date getDataScad() { return internalDataScad; } @@ -285,6 +295,10 @@ public class DialogInputQuantityV2ViewModel { return this; } + public boolean canPartitaMagBeChanged() { + return canPartitaMagBeChanged; + } + public DialogInputQuantityV2ViewModel setPartitaMag(String internalPartitaMag) { this.internalPartitaMag = internalPartitaMag; return this; @@ -389,9 +403,16 @@ public class DialogInputQuantityV2ViewModel { return false; } else if (mtbAart.get().isFlagTracciabilitaBoolean() && UtilityString.isNullOrEmpty(internalPartitaMag)) { - - this.mListener.onError(new InvalidBatchLotException()); - return false; + if (suggestPartitaMagRunnable != null){ + internalPartitaMag = suggestPartitaMagRunnable.run(this); + if (internalPartitaMag == null){ + this.mListener.onError(new InvalidBatchLotException()); + return false; + } + }else{ + this.mListener.onError(new InvalidBatchLotException()); + return false; + } } else if (this.shouldAskDataScad && UtilityString.isNullOrEmpty(internalPartitaMag)) { @@ -445,6 +466,7 @@ public class DialogInputQuantityV2ViewModel { .setDataScad(this.internalDataScad) .setNumCnf(this.internalNumCnf) .setQtaCnf(this.internalQtaCnf) + .setNote(this.internalNote) .setQtaTot(this.internalQtaTot); } @@ -453,6 +475,16 @@ public class DialogInputQuantityV2ViewModel { this.mListener = listener; } + public DialogInputQuantityV2ViewModel setNote(String value) { + this.internalNote = value; + return this; + } + + public DialogInputQuantityV2ViewModel setSuggestPartitaMagRunnable(RunnableArgsWithReturn suggestPartitaMagRunnable) { + this.suggestPartitaMagRunnable = suggestPartitaMagRunnable; + return this; + } + public interface Listener { void onDataChanged(); diff --git a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml index a209e26d..9cdf90ca 100644 --- a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml @@ -409,6 +409,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? 1f : 2f}" + android:visibility="@{viewmodel.canPartitaMagBeChanged() || viewmodel.partitaMag != null ? View.VISIBLE : View.GONE}" android:enabled="@{view.enabledChangePartitaMag}" android:paddingEnd="4dp" tools:layout_weight="1"> @@ -528,6 +529,36 @@ + + + + + + + + + + + - @@ -131,11 +121,14 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/black" + android:layout_marginStart="4dp" android:textStyle="italic" app:binding="@{view.codDtip}" tools:text="CodDtip" /> + @@ -152,12 +145,64 @@ style="@style/AppTheme.NewMaterial.Text.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="4dp" android:textColor="@android:color/black" android:textStyle="italic" app:binding="@{view.codMgrp}" tools:text="CodMgrp" /> + + + + + + + + + + + + + + @@ -236,7 +282,7 @@ app:layout_anchorGravity="center" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:menu_icon="@drawable/ic_check_white_24dp" + app:menu_icon="@drawable/ic_menu_24dp" fab:menu_animationDelayPerItem="50" fab:menu_backgroundColor="@color/white_bg_alpha" fab:menu_buttonSpacing="0dp" @@ -267,7 +313,7 @@ + + @@ -419,6 +420,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? 1f : 2f}" + android:visibility="@{viewmodel.canPartitaMagBeChanged() || viewmodel.partitaMag != null ? View.VISIBLE : View.GONE}" android:enabled="@{view.enabledChangePartitaMag}" android:paddingEnd="4dp" tools:layout_weight="1"> @@ -538,6 +540,36 @@ + + + + + + + + + + + - + android:layout_height="match_parent" + android:background="@android:color/white"> - + android:background="?attr/colorPrimary" + android:minHeight="?attr/actionBarSize" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:titleTextColor="@android:color/white"> + + + + + + + android:layout_marginTop="8dp"> + + + + - + android:ellipsize="end" + android:text="@{view.articolo.descrizione}" + android:textColor="@color/red_600" + tools:text="BOSCAIOLA DI POLLO" /> - + - - - - - - - - - - - + android:text="@string/gg_scadenza" + android:textSize="16sp" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:text='@{String.valueOf(view.articolo.ggScadenza)}' + android:textSize="16sp" + android:textStyle="bold" + tools:text="5" /> - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_select_doc_info.xml b/app/src/main/res/layout/dialog_select_doc_info.xml new file mode 100644 index 00000000..d64695cf --- /dev/null +++ b/app/src/main/res/layout/dialog_select_doc_info.xml @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_select_tipo_doc_and_group_art__single_item.xml b/app/src/main/res/layout/dialog_select_doc_info__single_item.xml similarity index 100% rename from app/src/main/res/layout/dialog_select_tipo_doc_and_group_art__single_item.xml rename to app/src/main/res/layout/dialog_select_doc_info__single_item.xml diff --git a/app/src/main/res/layout/dialog_select_tipo_doc_and_group_art.xml b/app/src/main/res/layout/dialog_select_tipo_doc_and_group_art.xml deleted file mode 100644 index d59a6d14..00000000 --- a/app/src/main/res/layout/dialog_select_tipo_doc_and_group_art.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_doc_interni.xml b/app/src/main/res/layout/fragment_doc_interni.xml index 212fd431..ad15b30c 100644 --- a/app/src/main/res/layout/fragment_doc_interni.xml +++ b/app/src/main/res/layout/fragment_doc_interni.xml @@ -45,7 +45,7 @@ android:layout_marginRight="8dp" android:background="@drawable/gray_detail_background_round8" android:orientation="vertical" - android:onClick="@{() -> view.selectCodMgrpAndCodDtip()}" + android:onClick="@{() -> view.selectDocInfo()}" android:padding="16dp"> @@ -122,6 +123,60 @@ tools:text="FOOD" /> + + + + + + + + + + + + + + + %s del %s]]> %s del %s]]> %s del %s]]> + %s del %s]]> %s]]> Cerca… Login @@ -216,6 +217,7 @@ Data inizio Data fine Data documento + Numero documento Termini di consegna Automezzo Paese @@ -358,4 +360,12 @@ Modifica documento Esporta documento Salva documento + Fornitore + Fornitore + Elimina documento + Documento rif. : + Shelf life: + Previsione di vendita + Giacenza + Qtà proposta \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 30f960fe..2ad1b2a6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,6 +51,7 @@ %s of %s]]> %s of %s]]> %s of %s]]> + %s of %s]]> %s]]> Check in Check in order @@ -219,6 +220,7 @@ Start date End date Document date + Document number Terms of delivery Vehicle City @@ -365,4 +367,12 @@ Edit document Export document Save document + Supplier + Supplier + Elimina documento + Reference doc.: + Shelf life: + Sales prediction + Stock + Suggested Qty diff --git a/app/src/main/res/values/text_input_layout_style.xml b/app/src/main/res/values/text_input_layout_style.xml index d43afb5c..6d8d6123 100644 --- a/app/src/main/res/values/text_input_layout_style.xml +++ b/app/src/main/res/values/text_input_layout_style.xml @@ -17,4 +17,10 @@ @android:color/black + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 8b4ccf8a..94b01d9c 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.0.3' + classpath 'com.android.tools.build:gradle:7.0.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.5' classpath 'com.google.firebase:perf-plugin:1.3.5'