diff --git a/app/build.gradle b/app/build.gradle index e9a4c6c4..c502f789 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 244 - def appVersionName = '1.19.3' + def appVersionCode = 248 + def appVersionName = '1.20.1' signingConfigs { release { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 245da2b4..acf8fdef 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -29,6 +29,10 @@ android:screenOrientation="portrait" android:theme="@style/Light" android:windowSoftInputMode="adjustNothing" /> + getAll(); + + @Insert + Long insert(SqlMtbColr mtbColr); + + @Update + void update(SqlMtbColr mtbColr); + + @Delete + void delete(SqlMtbColr mtbColr); + + @Query("SELECT * from mtb_colr where id_collo = :idDocument") + List getDocumentRows(int idDocument); +} 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 new file mode 100644 index 00000000..15da5fc7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java @@ -0,0 +1,36 @@ +package it.integry.integrywmsnative.core.data_store.db.dao; + +import androidx.room.Dao; +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.Query; +import androidx.room.Update; + +import java.util.List; + +import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; +import it.integry.integrywmsnative.core.data_store.db.view_model.OrdineWithGriglia; +import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper; +import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; + +@Dao +public interface MtbColtDao { + @Query("SELECT * from mtb_colt") + List getAll(); + + @Insert + Long insert(SqlMtbColt mtbColt); + + @Update + void update(SqlMtbColt mtbColt); + + @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 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/SqlMtbColr.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/SqlMtbColr.java new file mode 100644 index 00000000..73e3666b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/SqlMtbColr.java @@ -0,0 +1,438 @@ +package it.integry.integrywmsnative.core.data_store.db.entity; + +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.ForeignKey; +import androidx.room.Index; +import androidx.room.PrimaryKey; + +import java.math.BigDecimal; +import java.util.Date; + +@Entity( + tableName = "mtb_colr", + indices = { + @Index(value = {"data_collo", "ser_collo", "num_collo", "gestione","riga"}, unique = true), + @Index(value = {"id_collo"}) + }, + foreignKeys = { + @ForeignKey( + entity = SqlMtbColt.class, + parentColumns = "id", + childColumns = "id_collo", + onDelete = ForeignKey.CASCADE + ) + } +) + +public class SqlMtbColr { + + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "id") + private int id; + + @ColumnInfo(name = "id_collo") + private int idCollo; + + + @ColumnInfo(name = "data_collo") + private Date dataCollo; + + @ColumnInfo(name = "gestione") + private String gestione; + + @ColumnInfo(name = "ser_collo") + private String serCollo; + + @ColumnInfo(name = "descrizione") + private String descrizione; + + @ColumnInfo(name = "num_collo") + private Integer numCollo; + + + @ColumnInfo(name = "riga") + private Integer riga; + + @ColumnInfo(name = "riga_ord") + private Integer rigaOrd; + + @ColumnInfo(name = "cod_mart") + private String codMart; + + @ColumnInfo(name = "cod_barre") + private String codBarre; + + @ColumnInfo(name = "cod_col") + private String codCol; + + @ColumnInfo(name = "cod_tagl") + private String codTagl; + + @ColumnInfo(name = "partita_mag") + private String partitaMag; + + @ColumnInfo(name = "gestione_rif") + private String gestioneRif; + + @ColumnInfo(name = "ser_collo_rif") + private String serColloRif; + + @ColumnInfo(name = "note") + private String note; + + @ColumnInfo(name = "data_ord") + private Date dataOrd; + + @ColumnInfo(name = "data_collo_rif") + private Date dataColloRif; + + @ColumnInfo(name = "qta_cnf") + private Float qtaCnf; + + @ColumnInfo(name = "qta_col") + private Float qtaCol; + + @ColumnInfo(name = "num_ord") + private Integer numOrd; + + @ColumnInfo(name = "num_etich") + private Integer numEtich; + + @ColumnInfo(name = "num_collo_rif") + private Integer numColloRif; + + @ColumnInfo(name = "datetime_row") + private Date datetimeRow; + + @ColumnInfo(name = "cod_jcom") + private String codJcom; + + @ColumnInfo(name = "num_cnf") + private Float numCnf; + + @ColumnInfo(name = "causale") + private String causale; + + @ColumnInfo(name = "utente") + private String utente; + + @ColumnInfo(name = "cod_anag_doc") + private String codAnagDoc; + + @ColumnInfo(name = "cod_dtip_doc") + private String codDtipDoc; + + @ColumnInfo(name = "data_doc") + private Date dataDoc; + + @ColumnInfo(name = "ser_doc") + private String serDoc; + + @ColumnInfo(name = "num_doc") + private Integer numDoc; + + @ColumnInfo(name = "id_riga_doc") + private Integer idRigaDoc; + + @ColumnInfo(name = "unt_mis") + private String untMis; + @ColumnInfo(name = "data_scad") + private Date dataScad; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public int getIdCollo() { + return idCollo; + } + + public void setIdCollo(int idCollo) { + this.idCollo = idCollo; + } + + public Date getDataCollo() { + return dataCollo; + } + + public void setDataCollo(Date dataCollo) { + this.dataCollo = dataCollo; + } + + public String getGestione() { + return gestione; + } + + public void setGestione(String gestione) { + this.gestione = gestione; + } + + public String getSerCollo() { + return serCollo; + } + + public void setSerCollo(String serCollo) { + this.serCollo = serCollo; + } + + public Integer getNumCollo() { + return numCollo; + } + + public void setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + } + + public Integer getRiga() { + return riga; + } + + public void setRiga(Integer riga) { + this.riga = riga; + } + + public Integer getRigaOrd() { + return rigaOrd; + } + + public void setRigaOrd(Integer rigaOrd) { + this.rigaOrd = rigaOrd; + } + + public String getCodMart() { + return codMart; + } + + public void setCodMart(String codMart) { + this.codMart = codMart; + } + + public String getCodBarre() { + return codBarre; + } + + public void setCodBarre(String codBarre) { + this.codBarre = codBarre; + } + + public String getCodCol() { + return codCol; + } + + public void setCodCol(String codCol) { + this.codCol = codCol; + } + + public String getCodTagl() { + return codTagl; + } + + public void setCodTagl(String codTagl) { + this.codTagl = codTagl; + } + + public String getPartitaMag() { + return partitaMag; + } + + public void setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + } + + public String getGestioneRif() { + return gestioneRif; + } + + public void setGestioneRif(String gestioneRif) { + this.gestioneRif = gestioneRif; + } + + public String getSerColloRif() { + return serColloRif; + } + + public void setSerColloRif(String serColloRif) { + this.serColloRif = serColloRif; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public Date getDataOrd() { + return dataOrd; + } + + public void setDataOrd(Date dataOrd) { + this.dataOrd = dataOrd; + } + + public Date getDataColloRif() { + return dataColloRif; + } + + public void setDataColloRif(Date dataColloRif) { + this.dataColloRif = dataColloRif; + } + + public Float getQtaCnf() { + return qtaCnf; + } + + public void setQtaCnf(Float qtaCnf) { + this.qtaCnf = qtaCnf; + } + + public Float getQtaCol() { + return qtaCol; + } + + public void setQtaCol(Float qtaCol) { + this.qtaCol = qtaCol; + } + + public Integer getNumOrd() { + return numOrd; + } + + public void setNumOrd(Integer numOrd) { + this.numOrd = numOrd; + } + + public Integer getNumEtich() { + return numEtich; + } + + public void setNumEtich(Integer numEtich) { + this.numEtich = numEtich; + } + + public Integer getNumColloRif() { + return numColloRif; + } + + public void setNumColloRif(Integer numColloRif) { + this.numColloRif = numColloRif; + } + + public Date getDatetimeRow() { + return datetimeRow; + } + + public void setDatetimeRow(Date datetimeRow) { + this.datetimeRow = datetimeRow; + } + + public String getCodJcom() { + return codJcom; + } + + public void setCodJcom(String codJcom) { + this.codJcom = codJcom; + } + + public Float getNumCnf() { + return numCnf; + } + + public void setNumCnf(Float numCnf) { + this.numCnf = numCnf; + } + + public String getCausale() { + return causale; + } + + public void setCausale(String causale) { + this.causale = causale; + } + + public String getUtente() { + return utente; + } + + public void setUtente(String utente) { + this.utente = utente; + } + + public String getCodAnagDoc() { + return codAnagDoc; + } + + public void setCodAnagDoc(String codAnagDoc) { + this.codAnagDoc = codAnagDoc; + } + + public String getCodDtipDoc() { + return codDtipDoc; + } + + public void setCodDtipDoc(String codDtipDoc) { + this.codDtipDoc = codDtipDoc; + } + + public Date getDataDoc() { + return dataDoc; + } + + public void setDataDoc(Date dataDoc) { + this.dataDoc = dataDoc; + } + + public String getSerDoc() { + return serDoc; + } + + public void setSerDoc(String serDoc) { + this.serDoc = serDoc; + } + + public Integer getNumDoc() { + return numDoc; + } + + public void setNumDoc(Integer numDoc) { + this.numDoc = numDoc; + } + + public Integer getIdRigaDoc() { + return idRigaDoc; + } + + public void setIdRigaDoc(Integer idRigaDoc) { + this.idRigaDoc = idRigaDoc; + } + + public String getUntMis() { + return untMis; + } + + public void setUntMis(String untMis) { + this.untMis = untMis; + } + + public String getDescrizione() { + return descrizione; + } + + public void setDescrizione(String descrizione) { + this.descrizione = descrizione; + } + + public Date getDataScad() { + return dataScad; + } + + public void setDataScad(Date dataScad) { + this.dataScad = dataScad; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/SqlMtbColt.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/SqlMtbColt.java new file mode 100644 index 00000000..43ab4491 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/SqlMtbColt.java @@ -0,0 +1,341 @@ +package it.integry.integrywmsnative.core.data_store.db.entity; + +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.Ignore; +import androidx.room.Index; +import androidx.room.PrimaryKey; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +@Entity( + tableName = "mtb_colt", + indices = { + @Index(value = {"data_collo", "ser_collo", "num_collo", "gestione"}, unique = true) + } +) + +public class SqlMtbColt { + + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "id") + private int id; + + @ColumnInfo(name = "username") + private String username; + + @ColumnInfo + private String gestione; + + @ColumnInfo(name = "data_collo") + private Date dataCollo; + + @ColumnInfo(name = "ser_collo") + private String serCollo; + + @ColumnInfo(name = "num_collo") + private Integer numCollo; + + @ColumnInfo(name = "rif_ord") + private String rifOrd; + + @ColumnInfo(name = "cod_anag") + private String codAnag; + + @ColumnInfo(name = "cod_vdes") + private String codVdes; + + @ColumnInfo(name = "cod_mdep") + private String codMdep; + + @ColumnInfo(name = "cod_vlis") + private String codVlis; + + @ColumnInfo(name = "cod_dtip") + private String codDtip; + + @ColumnInfo(name = "cod_tcol") + private String codTcol; + + @ColumnInfo(name = "ser_doc") + private String serDoc; + + @ColumnInfo(name = "annotazioni") + private String annotazioni; + + @ColumnInfo(name = "posizione") + private String posizione; + + @ColumnInfo(name = "cod_dtip_provv") + private String codDtipProvv; + + @ColumnInfo(name = "ser_doc_provv") + private String serDocProvv; + + @ColumnInfo(name = "cod_jfas") + private String codJfas; + + @ColumnInfo(name = "data_ord") + private Date dataOrd; + + @ColumnInfo(name = "data_doc") + private Date dataDoc; + + @ColumnInfo(name = "data_doc_provv") + private Date dataDocProvv; + + @ColumnInfo(name = "cod_mgrp") + private String codMgrp; + + @ColumnInfo(name = "data_vers") + private Date dataVers; + + @ColumnInfo(name = "segno") + private Integer segno; + + @ColumnInfo(name = "num_ord") + private Integer numOrd; + + @ColumnInfo(name = "num_doc") + private Integer numDoc; + + @ColumnInfo(name = "num_doc_provv") + private Integer numDocProvv; + + @Ignore + private List sqlMtbColrs = new ArrayList<>(); + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getGestione() { + return gestione; + } + + public void setGestione(String gestione) { + this.gestione = gestione; + } + + public Date getDataCollo() { + return dataCollo; + } + + public void setDataCollo(Date dataCollo) { + this.dataCollo = dataCollo; + } + + public String getSerCollo() { + return serCollo; + } + + public void setSerCollo(String serCollo) { + this.serCollo = serCollo; + } + + public Integer getNumCollo() { + return numCollo; + } + + public void setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + } + + public String getRifOrd() { + return rifOrd; + } + + public void setRifOrd(String rifOrd) { + this.rifOrd = rifOrd; + } + + 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 getCodMdep() { + return codMdep; + } + + public void setCodMdep(String codMdep) { + this.codMdep = codMdep; + } + + public String getCodVlis() { + return codVlis; + } + + public void setCodVlis(String codVlis) { + this.codVlis = codVlis; + } + + public String getCodDtip() { + return codDtip; + } + + public void setCodDtip(String codDtip) { + this.codDtip = codDtip; + } + + public String getCodTcol() { + return codTcol; + } + + public void setCodTcol(String codTcol) { + this.codTcol = codTcol; + } + + public String getSerDoc() { + return serDoc; + } + + public void setSerDoc(String serDoc) { + this.serDoc = serDoc; + } + + public String getAnnotazioni() { + return annotazioni; + } + + public void setAnnotazioni(String annotazioni) { + this.annotazioni = annotazioni; + } + + public String getPosizione() { + return posizione; + } + + public void setPosizione(String posizione) { + this.posizione = posizione; + } + + public String getCodDtipProvv() { + return codDtipProvv; + } + + public void setCodDtipProvv(String codDtipProvv) { + this.codDtipProvv = codDtipProvv; + } + + public String getSerDocProvv() { + return serDocProvv; + } + + public void setSerDocProvv(String serDocProvv) { + this.serDocProvv = serDocProvv; + } + + public String getCodJfas() { + return codJfas; + } + + public void setCodJfas(String codJfas) { + this.codJfas = codJfas; + } + + public Date getDataOrd() { + return dataOrd; + } + + public void setDataOrd(Date dataOrd) { + this.dataOrd = dataOrd; + } + + public Date getDataDoc() { + return dataDoc; + } + + public void setDataDoc(Date dataDoc) { + this.dataDoc = dataDoc; + } + + public Date getDataDocProvv() { + return dataDocProvv; + } + + public void setDataDocProvv(Date dataDocProvv) { + this.dataDocProvv = dataDocProvv; + } + + public Date getDataVers() { + return dataVers; + } + + public void setDataVers(Date dataVers) { + this.dataVers = dataVers; + } + + public Integer getSegno() { + return segno; + } + + public void setSegno(Integer segno) { + this.segno = segno; + } + + public Integer getNumOrd() { + return numOrd; + } + + public void setNumOrd(Integer numOrd) { + this.numOrd = numOrd; + } + + public Integer getNumDoc() { + return numDoc; + } + + public void setNumDoc(Integer numDoc) { + this.numDoc = numDoc; + } + + public Integer getNumDocProvv() { + return numDocProvv; + } + + public void setNumDocProvv(Integer numDocProvv) { + this.numDocProvv = numDocProvv; + } + + public List getSqlMtbColrs() { + return sqlMtbColrs; + } + + public void setSqlMtbColrs(List sqlMtbColrs) { + this.sqlMtbColrs = sqlMtbColrs; + } + + public String getCodMgrp() { + return codMgrp; + } + + public void setCodMgrp(String codMgrp) { + this.codMgrp = codMgrp; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColrRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColrRepository.java new file mode 100644 index 00000000..30741319 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColrRepository.java @@ -0,0 +1,21 @@ +package it.integry.integrywmsnative.core.data_store.db.repository; + +import java.util.List; + +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.expansion.RunnableArgs; + +public interface MtbColrRepository { + + void selectAll(RunnableArgs> onSuccess, RunnableArgs onError); + + void insert(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError); + + void update(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError); + + void delete(SqlMtbColr mtbColr, Runnable onSuccess, RunnableArgs onError); + + void getDocumentRows(SqlMtbColt sqlMtbColt, RunnableArgs> onSuccess, RunnableArgs onError); + +} 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 new file mode 100644 index 00000000..317d1056 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative.core.data_store.db.repository; + +import java.util.List; + +import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; +import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; +import it.integry.integrywmsnative.core.data_store.db.view_model.OrdineWithGriglia; +import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper; +import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public interface MtbColtRepository { + + void selectAll(RunnableArgs> onSuccess, RunnableArgs onError); + + void insert(SqlMtbColt mtbColt, RunnableArgs onSuccess, RunnableArgs onError); + + void update(SqlMtbColt mtbColt, RunnableArgs onSuccess, RunnableArgs onError); + + void delete(SqlMtbColt mtbColt, Runnable onSuccess, RunnableArgs onError); + + void getLocalDocumentsByCodDtipAndCodMgrp(String codDtip, String codMgrp, 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/SqlMtbColrDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColrDataSource.java new file mode 100644 index 00000000..3ad66cbe --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColrDataSource.java @@ -0,0 +1,77 @@ +package it.integry.integrywmsnative.core.data_store.db.repository.implementations; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.core.data_store.db.dao.MtbColrDao; +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.expansion.RunnableArgs; + +public class SqlMtbColrDataSource extends Repository implements MtbColrRepository { + + private MtbColrDao mMtbColrDao; + + @Inject + public SqlMtbColrDataSource(MtbColrDao mtbColrDao) { + this.mMtbColrDao = mtbColrDao; + } + + public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { + Runnable query = () -> { + try { + onSuccess.run(mMtbColrDao.getAll()); + } catch (Exception e) { + onError.run(e); + } + }; + execute(query); + } + + public void insert(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> { + try { + Long id = mMtbColrDao.insert(mtbColr); + onSuccess.run(id.intValue()); + } catch (Exception e) { + onError.run(e); + } + }); + } + + + public void update(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> { + try { + mMtbColrDao.update(mtbColr); + onSuccess.run(mtbColr); + } catch (Exception e) { + onError.run(e); + } + }); + } + + public void delete(SqlMtbColr mtbColr, Runnable onSuccess, RunnableArgs onError) { + execute(() -> { + try { + mMtbColrDao.delete(mtbColr); + onSuccess.run(); + } catch (Exception e) { + onError.run(e); + } + }); + } + + public void getDocumentRows(SqlMtbColt document, RunnableArgs> onSuccess, RunnableArgs onError) { + Runnable query = () -> { + try { + onSuccess.run(mMtbColrDao.getDocumentRows(document.getId())); + } catch (Exception e) { + onError.run(e); + } + }; + execute(query); + } +} 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 new file mode 100644 index 00000000..52f95f0f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColtDataSource.java @@ -0,0 +1,92 @@ +package it.integry.integrywmsnative.core.data_store.db.repository.implementations; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao; +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; +import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public class SqlMtbColtDataSource extends Repository implements MtbColtRepository { + + private MtbColtDao mMtbColtDao; + + @Inject + public SqlMtbColtDataSource(MtbColtDao mtbColtDao) { + this.mMtbColtDao = mtbColtDao; + } + + public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { + Runnable query = () -> { + try { + onSuccess.run(mMtbColtDao.getAll()); + } catch (Exception e) { + onError.run(e); + } + }; + execute(query); + } + + public void insert(SqlMtbColt mtbColt, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> { + try { + Long id = mMtbColtDao.insert(mtbColt); + onSuccess.run(id.intValue()); + } catch (Exception e) { + onError.run(e); + } + }); + } + + + public void update(SqlMtbColt mtbColt, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> { + try { + mMtbColtDao.update(mtbColt); + onSuccess.run(mtbColt); + } catch (Exception e) { + onError.run(e); + } + }); + } + + public void delete(SqlMtbColt mtbColt, Runnable onSuccess, RunnableArgs onError) { + execute(() -> { + try { + mMtbColtDao.delete(mtbColt); + onSuccess.run(); + } catch (Exception e) { + onError.run(e); + } + }); + } + + @Override + public void getLocalDocumentsByCodDtipAndCodMgrp(String codDtip, String codMgrp, RunnableArgs> onSuccess, RunnableArgs onError) { + Runnable query = () -> { + try { + onSuccess.run(mMtbColtDao.getLocalDocumentsByCodDtipAndCodMgrp(codDtip,codMgrp)); + } catch (Exception e) { + onError.run(e); + } + }; + execute(query); + } + + @Override + public void getNextNumCollo(RunnableArgs onSuccess, RunnableArgs onError) { + Runnable query = () -> { + try { + onSuccess.run(mMtbColtDao.getNextNumCollo()); + } catch (Exception e) { + onError.run(e); + } + }; + execute(query); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/DocInternoWrapper.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/DocInternoWrapper.java new file mode 100644 index 00000000..0bdb925d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/DocInternoWrapper.java @@ -0,0 +1,30 @@ +package it.integry.integrywmsnative.core.data_store.db.wrappers; + +import androidx.room.ColumnInfo; +import androidx.room.Embedded; + +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; + +public class DocInternoWrapper { + @Embedded + private SqlMtbColt document; + + @ColumnInfo(name = "countArticoli") + private int countArticoli = 0; + + public SqlMtbColt getDocument() { + return document; + } + + public void setDocument(SqlMtbColt document) { + this.document = document; + } + + public int getCountArticoli() { + return countArticoli; + } + + public void setCountArticoli(int countArticoli) { + this.countArticoli = countArticoli; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableString.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableString.java index 27bad837..e427859e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableString.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableString.java @@ -7,6 +7,20 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; public class BindableString extends BaseObservable { String value; + private boolean isHtml = false; + + public BindableString(){}; + public BindableString(boolean isHtml){ + this.isHtml = isHtml; + }; + public BindableString(String startingValue ,boolean isHtml){ + this.isHtml = isHtml; + this.set(startingValue); + }; + + public boolean isHtml() { + return isHtml; + } public String get() { return value != null ? value : ""; 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 5c9814a0..6c9ace57 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 @@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.di; import android.app.DatePickerDialog; import android.content.res.ColorStateList; +import android.text.Html; import android.text.SpannableString; import android.util.Log; import android.view.View; @@ -126,8 +127,9 @@ public class Converters { view.addTextChangedListener(watcher); } String newValue = bindableString.get(); + boolean isHtml = bindableString.isHtml(); if (!view.getText().toString().equals(newValue)) { - view.setText(newValue); + view.setText(isHtml ? Html.fromHtml(newValue) : newValue); } } @@ -367,8 +369,9 @@ public class Converters { view.addTextChangedListener(watcher); } String newValue = bindableString.get(); + boolean isHtml = bindableString.isHtml(); if (!view.getText().toString().equals(newValue)) { - view.setText(newValue); + view.setText(isHtml ? Html.fromHtml(newValue) : newValue); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java index 6f19b3a2..6db30d6e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java @@ -22,8 +22,6 @@ public abstract class BaseFragment extends Fragment { protected final List mOnPreDestroyList = new ArrayList<>(); - - public void setScrollToolbar(ElevatedToolbar toolbar) { mToolbar = toolbar; } @@ -34,10 +32,6 @@ public abstract class BaseFragment extends Fragment { } - - - - public void onLoadingStarted() { new Thread(() -> { BarcodeManager.disable(); @@ -71,23 +65,25 @@ public abstract class BaseFragment extends Fragment { } protected void openProgress() { - getActivity().runOnUiThread(() -> { - if (this.mCurrentProgress == null) { - this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity()); - } - }); + getActivity().runOnUiThread(() -> { + if (this.mCurrentProgress == null) { + this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity()); + } + }); } protected void closeProgress() { - getActivity().runOnUiThread(() -> { - if (mCurrentProgress != null) { - mCurrentProgress.dismiss(); - mCurrentProgress = null; - } - }); + getActivity().runOnUiThread(() -> { + if (mCurrentProgress != null) { + mCurrentProgress.dismiss(); + mCurrentProgress = null; + } + }); } protected void popMe() { - ((IPoppableActivity) requireActivity()).pop(); + getActivity().runOnUiThread(() -> { + ((IPoppableActivity) requireActivity()).pop(); + }); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/ISearcableFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/ISearchableFragment.java similarity index 61% rename from app/src/main/java/it/integry/integrywmsnative/core/interfaces/ISearcableFragment.java rename to app/src/main/java/it/integry/integrywmsnative/core/interfaces/ISearchableFragment.java index 1e6bd842..ed9f1bd4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/interfaces/ISearcableFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/interfaces/ISearchableFragment.java @@ -2,7 +2,7 @@ package it.integry.integrywmsnative.core.interfaces; import androidx.appcompat.widget.SearchView; -public interface ISearcableFragment extends SearchView.OnQueryTextListener, IDestroyableFragment { +public interface ISearchableFragment extends SearchView.OnQueryTextListener, IDestroyableFragment { void onSearchEnabled(); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java index 4ed21b07..56f4a086 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PrinterRESTConsumer.java @@ -57,10 +57,10 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer { public void printCollo(Type printerType, MtbColt testataColloToPrint, Runnable onComplete, RunnableArgs onFailed) { - if (BuildConfig.DEBUG) { - onComplete.run(); - return; - } +// if (BuildConfig.DEBUG) { +// onComplete.run(); +// return; +// } PrinterRESTConsumerService printerService = RESTBuilder.getService(PrinterRESTConsumerService.class); Call> callable = null; @@ -88,10 +88,10 @@ public class PrinterRESTConsumer extends _BaseRESTConsumer { public void printReport(String printerName, String reportName, HashMap params, int quantity, Runnable onComplete, RunnableArgs onFailed) { - if (BuildConfig.DEBUG) { - onComplete.run(); - return; - } +// if (BuildConfig.DEBUG) { +// onComplete.run(); +// return; +// } JasperDTO jasperDTO = new JasperDTO(); jasperDTO.setReportName(reportName); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java index a2f249c1..d88bd431 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java @@ -28,7 +28,7 @@ import it.integry.integrywmsnative.core.data_cache.DataCache; import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; -import it.integry.integrywmsnative.core.interfaces.ISearcableFragment; +import it.integry.integrywmsnative.core.interfaces.ISearchableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; @@ -43,7 +43,7 @@ import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePicking import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; -public class MainAccettazioneFragment extends BaseFragment implements ISearcableFragment, ITitledFragment, IScrollableFragment, MainAccettazioneViewModel.Listener { +public class MainAccettazioneFragment extends BaseFragment implements ISearchableFragment, ITitledFragment, IScrollableFragment, MainAccettazioneViewModel.Listener { public BindableBoolean fabVisible = new BindableBoolean(false); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniComponent.java new file mode 100644 index 00000000..1390140e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni; + +import dagger.Subcomponent; + +@Subcomponent() +public interface DocInterniComponent { + @Subcomponent.Factory + interface Factory { + DocInterniComponent create(); + } + + void inject(DocInterniFragment docInterniFragment); + +} 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 new file mode 100644 index 00000000..9bd200cb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java @@ -0,0 +1,177 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni; + + +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.appcompat.widget.AppCompatTextView; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.annimon.stream.Stream; + +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; +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.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.dto.GrigliaAcquistiDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocAndGruppiArtDTO; +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 { + + @Inject + DocInterniViewModel mViewModel; + + private final ObservableArrayList mDocInterniMutableData = new ObservableArrayList<>(); + private ElevatedToolbar mToolbar; + private FragmentDocInterniBinding mBinding; + private TipiDocAndGruppiArtDTO mTipiDocAndGruppiArtDTO; + private final List mOnPreDestroyList = new ArrayList<>(); + private boolean dialogInitialized = false; + + + public DocInterniFragment() { + // Required empty public constructor + } + + public static DocInterniFragment newInstance() { + DocInterniFragment fragment = new DocInterniFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreateActionBar(AppCompatTextView titleText, Context context) { + titleText.setText(context.getText(R.string.doc_interni).toString()); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_doc_interni, container, false); + MainApplication.appComponent + .docInterniComponent() + .create() + .inject(this); + + mViewModel.setListeners(this); + mBinding.setLifecycleOwner(this); + mBinding.setView(this); + mBinding.setViewModel(mViewModel); + this.initRecyclerView(); + + return mBinding.getRoot(); + } + + @Override + public void onStart() { + super.onStart(); + if (!this.mViewModel.hasDocDetails()){ + mViewModel.init(); + }else{ + this.mViewModel.fetchDocuments(); + } + } + + @Override + public void onDestroy() { + for (Runnable onPreDestroy : mOnPreDestroyList) { + onPreDestroy.run(); + } + super.onDestroy(); + } + + @Override + public void onGruppiArtAndTipiDocFetch(TipiDocAndGruppiArtDTO tipiDocAndGruppiArtDTO) { + this.mTipiDocAndGruppiArtDTO = tipiDocAndGruppiArtDTO; + this.dialogInitialized = true; + this.selectCodMgrpAndCodDtip(); + } + + @Override + public void onDocDetailsChanged(DialogSelectMgrpDtipPairViewModel selection) { + + this.mViewModel.setSelectedDocDetails(selection); + this.mBinding.mainFab.setVisibility(View.VISIBLE); + } + + @Override + public void setScrollToolbar(ElevatedToolbar toolbar) { + mToolbar = toolbar; + } + + @Override + public void addOnPreDestroy(Runnable onPreDestroy) { + this.mOnPreDestroyList.add(onPreDestroy); + } + + public void selectCodMgrpAndCodDtip() { + if (this.dialogInitialized){ + DialogSelectMgrpDtipPairView.newInstance( + mTipiDocAndGruppiArtDTO, + this.mViewModel.dtbTipi.getValue(), + this.mViewModel.mtbGrup.getValue(), + this::onDocDetailsChanged + ).show(requireActivity().getSupportFragmentManager(), "tag"); + } + } + + private void initRecyclerView() { + this.mViewModel.getDocsList().observe(getViewLifecycleOwner(), this::refreshList); + DocInterniListAdapter docInterniListAdapter = new DocInterniListAdapter(this.requireActivity(), this.mDocInterniMutableData); + docInterniListAdapter.setEmptyView(this.mBinding.docInterniEmptyView); + this.mBinding.docInterniMainList.setAdapter(docInterniListAdapter); + this.mBinding.docInterniMainList.setLayoutManager(new LinearLayoutManager(this.requireActivity())); + + docInterniListAdapter.setOnItemClicked(this.mViewModel::editDocument); + if (mToolbar != null) + mToolbar.setRecyclerView(this.mBinding.docInterniMainList); + } + + private void refreshList(List filteredList) { + this.mDocInterniMutableData.clear(); + this.mDocInterniMutableData.addAll(convertDataModelToListModel(mViewModel.getDocsList().getValue())); + } + + private List convertDataModelToListModel(List dataList) { + + return Stream.of(dataList) + .map(x -> { + DocInterniListModel listModel = new DocInterniListModel(); + listModel.setDocument(x.getDocument()); + listModel.setProductsCount(x.getCountArticoli()); + return listModel; + }) + .toList(); + + } + + @Override + public void onDocumentEditRequest(SqlMtbColt document, GrigliaAcquistiDTO arts) { + requireActivity().startActivity(DocInterniEditFormActivity.newInstance(requireActivity(),document,arts)); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniModule.java new file mode 100644 index 00000000..759b6f01 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniModule.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; +import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; + +@Module(subcomponents = DocInterniComponent.class) +public class DocInterniModule { + + @Provides + DocInterniViewModel docInterniViewModel(DocInterniRESTConsumer docInterniRESTConsumer, MtbColtRepository mtbColtRepository) { + return new DocInterniViewModel(docInterniRESTConsumer,mtbColtRepository); + } + +} 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 new file mode 100644 index 00000000..b21030e1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java @@ -0,0 +1,177 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni; + +import androidx.lifecycle.MutableLiveData; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; +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.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.TipiDocDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; + +public class DocInterniViewModel { + + private Listener mListener; + private final DocInterniRESTConsumer mDocInterniRESTConsumer; + private boolean productsFetched = true; + private boolean docsFetched = true; + private int nextNumCollo = 0; + private GrigliaAcquistiDTO productsList; + + + public final MutableLiveData dtbTipi = new MutableLiveData<>(); + public final MutableLiveData mtbGrup = new MutableLiveData<>(); + private final MutableLiveData> mDocsList = new MutableLiveData<>(); + public final BindableInteger artsSize = new BindableInteger(0); + @Inject + MtbColtRepository documentRepository; + + @Inject + public DocInterniViewModel(DocInterniRESTConsumer docInterniRESTConsumer, MtbColtRepository documentRepository) { + mDocInterniRESTConsumer = docInterniRESTConsumer; + this.documentRepository = documentRepository; + this.mDocsList.setValue(new ArrayList<>()); + } + + + public void init() { + this.sendOnLoadingStarted(); +// new Thread(() -> { + mDocInterniRESTConsumer.getDocTypesAndGroupArts(returnDto -> { + this.sendOnLoadingEnded(); + this.mListener.onGruppiArtAndTipiDocFetch(returnDto); + }, this::sendError); +// }).start(); + } + + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); + } + + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } + + public DocInterniViewModel setListeners(Listener listener) { + this.mListener = listener; + return this; + } + + public MutableLiveData> getDocsList() { + 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 fetchProducts() { + this.productsFetched = false; + mDocInterniRESTConsumer.fetchProducts(this.dtbTipi.getValue().getCodDtip(), this.mtbGrup.getValue().getCodMgrp(), returnDto -> { + this.productsFetched = true; + this.productsList = returnDto; + this.artsSize.set(returnDto.getGrigliaAcquistiChild().size()); + if (this.docsFetched) { + this.sendOnLoadingEnded(); + } + }, this::sendError); + } + + public void fetchDocuments() { + this.docsFetched = false; + this.sendOnLoadingStarted(); + documentRepository.getLocalDocumentsByCodDtipAndCodMgrp(this.getCodDtip(), this.getCodMgrp(), list -> { + documentRepository.getNextNumCollo(nextNumCollo->{ + this.mDocsList.postValue(list); + this.setNextNumCollo(nextNumCollo); + this.docsFetched = true; + if (this.productsFetched) { + this.sendOnLoadingEnded(); + } + },this::sendError); + },this::sendError); + } + + private void setNextNumCollo(Integer nextNumCollo) { + this.nextNumCollo = nextNumCollo; + } + + private String getCodDtip() { + if (this.dtbTipi.getValue() == null) { + return null; + } + return this.dtbTipi.getValue().getCodDtip(); + } + + private String getCodMgrp() { + if (this.mtbGrup.getValue() == null) { + return null; + } + return this.mtbGrup.getValue().getCodMgrp(); + } + + public void editDocument(SqlMtbColt document) { + this.mListener.onDocumentEditRequest(document, productsList); + } + + public void newDocument() { + SqlMtbColt document = new SqlMtbColt(); + if (this.dtbTipi.getValue() == null) { + this.sendError(new Exception("Nessun tipo documento selezionato!")); + return; + } + document.setCodDtipProvv(this.getCodDtip()); + document.setCodMgrp(this.getCodMgrp()); + document.setDataCollo(new Date()); + document.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()); + document.setAnnotazioni(""); + document.setSegno(-1); + document.setSerCollo("/"); + document.setNumCollo(this.nextNumCollo); + document.setGestione("L"); + documentRepository.insert(document,id->{ + document.setId(id); + this.editDocument(document); + }, this::sendError); + } + + public boolean hasDocDetails() { + return this.dtbTipi.getValue() != null && this.mtbGrup.getValue() != null; + } + + public interface Listener extends ILoadingListener { + + void onError(Exception ex); + + void onGruppiArtAndTipiDocFetch(TipiDocAndGruppiArtDTO tipiDocAndGruppiArtDTO); + + void onDocDetailsChanged(DialogSelectMgrpDtipPairViewModel selection); + + void onDocumentEditRequest(SqlMtbColt document, GrigliaAcquistiDTO arts); + + } + +} 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 new file mode 100644 index 00000000..1dad1961 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairComponent.java @@ -0,0 +1,17 @@ +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 new file mode 100644 index 00000000..870b1ab3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairModule.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 = 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 new file mode 100644 index 00000000..95b70691 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairView.java @@ -0,0 +1,161 @@ +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 new file mode 100644 index 00000000..c931f301 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dialog/DialogSelectMgrpDtipPairViewModel.java @@ -0,0 +1,62 @@ +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/ArtDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ArtDTO.java new file mode 100644 index 00000000..3a61eb81 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ArtDTO.java @@ -0,0 +1,117 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import java.math.BigDecimal; +import java.util.Date; + +public class ArtDTO { + + private Integer rigaOrd; + + private String codMart; + + private String barcode; + + private String descrizione; + + private Date dataIns; + + private String untMis; + + private BigDecimal qta; + + private BigDecimal qtaCnf; + + private BigDecimal colli; + + private String partitaMag; + + private Date dataScad; + + public Integer getRigaOrd() { + return rigaOrd; + } + + public void setRigaOrd(Integer rigaOrd) { + this.rigaOrd = rigaOrd; + } + + public String getCodMart() { + return codMart; + } + + public void setCodMart(String codMart) { + this.codMart = codMart; + } + + public String getBarcode() { + return barcode; + } + + public void setBarcode(String barcode) { + this.barcode = barcode; + } + + public String getDescrizione() { + return descrizione; + } + + public void setDescrizione(String descrizione) { + this.descrizione = descrizione; + } + + public Date getDataIns() { + return dataIns; + } + + public void setDataIns(Date dataIns) { + this.dataIns = dataIns; + } + + public String getUntMis() { + return untMis; + } + + public void setUntMis(String untMis) { + this.untMis = untMis; + } + + public BigDecimal getQta() { + return qta; + } + + public void setQta(BigDecimal qta) { + this.qta = qta; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public void setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + } + + public BigDecimal getColli() { + return colli; + } + + public void setColli(BigDecimal colli) { + this.colli = colli; + } + + public String getPartitaMag() { + return partitaMag; + } + + public void setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + } + + public Date getDataScad() { + return dataScad; + } + + public void setDataScad(Date dataScad) { + this.dataScad = dataScad; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java new file mode 100644 index 00000000..7b964890 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ColloDTO.java @@ -0,0 +1,127 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class ColloDTO { + + private String codMdep; + private String createdDate; + private String annotazioni; + private String gestione; + private String segno; + private String idDisp; + private String codDtip; + private List artRows = new ArrayList<>(); + private RifOrd rifOrd; + + public String getCodMdep() { + return codMdep; + } + + public void setCodMdep(String codMdep) { + this.codMdep = codMdep; + } + + public String getCreatedDate() { + return createdDate; + } + + public void setCreatedDate(String createdDate) { + this.createdDate = createdDate; + } + + public String getAnnotazioni() { + return annotazioni; + } + + public void setAnnotazioni(String annotazioni) { + this.annotazioni = annotazioni; + } + + public String getGestione() { + return gestione; + } + + public void setGestione(String gestione) { + this.gestione = gestione; + } + + public String getSegno() { + return segno; + } + + public void setSegno(String segno) { + this.segno = segno; + } + + public String getIdDisp() { + return idDisp; + } + + public void setIdDisp(String idDisp) { + this.idDisp = idDisp; + } + + public String getCodDtip() { + return codDtip; + } + + public void setCodDtip(String codDtip) { + this.codDtip = codDtip; + } + + public List getArtRows() { + return artRows; + } + + public void setArtRows(List artRows) { + this.artRows = artRows; + } + + public void addArtRow(ArtDTO artRow){ + this.artRows.add(artRow); + } + + public RifOrd getRifOrd() { + return rifOrd; + } + + public void setRifOrd(RifOrd rifOrd) { + this.rifOrd = rifOrd; + } + + public static class RifOrd { + + private Date dataOrd; + + private Integer numOrd; + + private String chiaveOrd; + + public Date getDataOrd() { + return dataOrd; + } + + public void setDataOrd(Date dataOrd) { + this.dataOrd = dataOrd; + } + + public Integer getNumOrd() { + return numOrd; + } + + public void setNumOrd(Integer numOrd) { + this.numOrd = numOrd; + } + + public String getChiaveOrd() { + return chiaveOrd; + } + + public void setChiaveOrd(String chiaveOrd) { + this.chiaveOrd = chiaveOrd; + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DocFromPickingDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DocFromPickingDTO.java new file mode 100644 index 00000000..4041729a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/DocFromPickingDTO.java @@ -0,0 +1,148 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +public class DocFromPickingDTO { + String codAnag, codVdes, tipoLista, noteDoc; + Date dataDoc; + Integer numDoc; + List colli; + List pedane; + + public String getCodAnag() { + return codAnag; + } + + public DocFromPickingDTO setCodAnag(String codAnag) { + this.codAnag = codAnag; + return this; + } + + public String getCodVdes() { + return codVdes; + } + + public DocFromPickingDTO setCodVdes(String codVdes) { + this.codVdes = codVdes; + return this; + } + + public String getTipoLista() { + return tipoLista; + } + + public DocFromPickingDTO setTipoLista(String tipoLista) { + this.tipoLista = tipoLista; + return this; + } + + public String getNoteDoc() { + return noteDoc; + } + + public DocFromPickingDTO setNoteDoc(String noteDoc) { + this.noteDoc = noteDoc; + return this; + } + + public Date getDataDoc() { + return dataDoc; + } + + public DocFromPickingDTO setDataDoc(Date dataDoc) { + this.dataDoc = dataDoc; + return this; + } + + public Integer getNumDoc() { + return numDoc; + } + + public DocFromPickingDTO setNumDoc(Integer numDoc) { + this.numDoc = numDoc; + return this; + } + + public List getColli() { + return colli; + } + + public DocFromPickingDTO setColli(List colli) { + this.colli = colli; + return this; + } + + public List getPedane() { + return pedane; + } + + public void setPedane(List pedane) { + this.pedane = pedane; + } + + public static class Pedane { + String codTcol; + BigDecimal qta; + + public String getCodTcol() { + return codTcol; + } + + public void setCodTcol(String codTcol) { + this.codTcol = codTcol; + } + + public BigDecimal getQta() { + return qta; + } + + public void setQta(BigDecimal qta) { + this.qta = qta; + } + } + + public static class DatiCollo { + String gestione, serCollo; + Date dataCollo; + Integer numCollo; + + public String getGestione() { + return gestione; + } + + public DatiCollo setGestione(String gestione) { + this.gestione = gestione; + return this; + } + + public String getSerCollo() { + return serCollo; + } + + public DatiCollo setSerCollo(String serCollo) { + this.serCollo = serCollo; + return this; + } + + public Date getDataCollo() { + return dataCollo; + } + + public DatiCollo setDataCollo(Date dataCollo) { + this.dataCollo = dataCollo; + return this; + } + + public Integer getNumCollo() { + return numCollo; + } + + public DatiCollo setNumCollo(Integer numCollo) { + this.numCollo = numCollo; + return this; + } + } +} 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 new file mode 100644 index 00000000..35183d18 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java @@ -0,0 +1,97 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import java.math.BigDecimal; + +public class GrigliaAcquistiChildDTO { + + public String codMart; + public String descrizione; + public String untMis; + public BigDecimal qtaCnf; + public String barcode; + public BigDecimal merceDaRic; + public BigDecimal mediaSett; + public String flagQtaMultipla; + public BigDecimal qtaMinOrdinabile; + + public String getCodMart() { + return codMart; + } + + public GrigliaAcquistiChildDTO setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public GrigliaAcquistiChildDTO setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getUntMis() { + return untMis; + } + + public GrigliaAcquistiChildDTO setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public GrigliaAcquistiChildDTO setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + + public String getBarcode() { + return barcode; + } + + public GrigliaAcquistiChildDTO setBarcode(String barcode) { + this.barcode = barcode; + return this; + } + + public BigDecimal getMerceDaRic() { + return merceDaRic; + } + + public GrigliaAcquistiChildDTO setMerceDaRic(BigDecimal merceDaRic) { + this.merceDaRic = merceDaRic; + return this; + } + + public BigDecimal getMediaSett() { + return mediaSett; + } + + public GrigliaAcquistiChildDTO setMediaSett(BigDecimal mediaSett) { + this.mediaSett = mediaSett; + return this; + } + + public String getFlagQtaMultipla() { + return flagQtaMultipla; + } + + public GrigliaAcquistiChildDTO setFlagQtaMultipla(String flagQtaMultipla) { + this.flagQtaMultipla = flagQtaMultipla; + return this; + } + + public BigDecimal getQtaMinOrdinabile() { + return qtaMinOrdinabile; + } + + public GrigliaAcquistiChildDTO setQtaMinOrdinabile(BigDecimal qtaMinOrdinabile) { + this.qtaMinOrdinabile = qtaMinOrdinabile; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiDTO.java new file mode 100644 index 00000000..dc5da0a3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiDTO.java @@ -0,0 +1,36 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import java.util.List; + +public class GrigliaAcquistiDTO { + + private String descrLisa; + + private String descrDepo; + + private List grigliaAcquistiChild; + + public String getDescrLisa() { + return descrLisa; + } + + public void setDescrLisa(String descrLisa) { + this.descrLisa = descrLisa; + } + + public String getDescrDepo() { + return descrDepo; + } + + public void setDescrDepo(String descrDepo) { + this.descrDepo = descrDepo; + } + + public List getGrigliaAcquistiChild() { + return grigliaAcquistiChild; + } + + public void setGrigliaAcquistiChild(List grigliaAcquistiChild) { + this.grigliaAcquistiChild = grigliaAcquistiChild; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GruppiArticoloDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GruppiArticoloDTO.java new file mode 100644 index 00000000..8cc28f35 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GruppiArticoloDTO.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +public class GruppiArticoloDTO { + + private String codMgrp; + private String descrizione; + + public String getCodMgrp() { + return codMgrp; + } + + public void setCodMgrp(String codMgrp) { + this.codMgrp = codMgrp; + } + + public String getDescrizione() { + return descrizione; + } + + public void setDescrizione(String descrizione) { + this.descrizione = descrizione; + } + + public String getLabel() { + return this.codMgrp+" - "+this.descrizione; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/InventarioDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/InventarioDTO.java new file mode 100644 index 00000000..5ca20c3c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/InventarioDTO.java @@ -0,0 +1,31 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import java.util.Date; +import java.util.List; + +/** + * Created by GiuseppeS on 28/06/2017. + */ +public class InventarioDTO { + + private List rowList; + + private Date dataCreate; + + + public List getRowList() { + return rowList; + } + + public void setRowList(List rowList) { + this.rowList = rowList; + } + + public Date getDataCreate() { + return dataCreate; + } + + public void setDataCreate(Date dataCreate) { + this.dataCreate = dataCreate; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/OrdineDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/OrdineDTO.java new file mode 100644 index 00000000..1d9918bb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/OrdineDTO.java @@ -0,0 +1,36 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import java.util.Date; +import java.util.List; + +public class OrdineDTO { + + private String chiaveGriglia; + private Date dataCons; + + private List artRows; + + public String getChiaveGriglia() { + return chiaveGriglia; + } + + public void setChiaveGriglia(String chiaveGriglia) { + this.chiaveGriglia = chiaveGriglia; + } + + public Date getDataCons() { + return dataCons; + } + + public void setDataCons(Date dataCons) { + this.dataCons = dataCons; + } + + public List getArtRows() { + return artRows; + } + + public void setArtRows(List artRows) { + this.artRows = artRows; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/PropostaOrdineDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/PropostaOrdineDTO.java new file mode 100644 index 00000000..29f3dc28 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/PropostaOrdineDTO.java @@ -0,0 +1,98 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +public class PropostaOrdineDTO { + + List articoli; + private Date dataOrd; + private String compilatoDa; + + public Date getDataOrd() { + return dataOrd; + } + + public PropostaOrdineDTO setDataOrd(Date dataOrd) { + this.dataOrd = dataOrd; + return this; + } + + public String getCompilatoDa() { + return compilatoDa; + } + + public PropostaOrdineDTO setCompilatoDa(String compilatoDa) { + this.compilatoDa = compilatoDa; + return this; + } + + public List getArticoli() { + return articoli; + } + + public PropostaOrdineDTO setArticoli(List articoli) { + this.articoli = articoli; + return this; + } + + public static class ArticoliDTO { + String codMart, untMis, codArtFor, listino; + BigDecimal qtaOrd, qtaCnf; + + public String getCodMart() { + return codMart; + } + + public ArticoliDTO setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getUntMis() { + return untMis; + } + + public ArticoliDTO setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + public String getCodArtFor() { + return codArtFor; + } + + public ArticoliDTO setCodArtFor(String codArtFor) { + this.codArtFor = codArtFor; + return this; + } + + public String getListino() { + return listino; + } + + public ArticoliDTO setListino(String listino) { + this.listino = listino; + return this; + } + + public BigDecimal getQtaOrd() { + return qtaOrd; + } + + public ArticoliDTO setQtaOrd(BigDecimal qtaOrd) { + this.qtaOrd = qtaOrd; + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public ArticoliDTO setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/SaveDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/SaveDTO.java new file mode 100644 index 00000000..48c1127c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/SaveDTO.java @@ -0,0 +1,115 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import java.util.Date; + +public class SaveDTO { + private String gestione; + private String codMdep; + private String idDisp; + private String zona; + private String segno; + private Date listCreate; + private String annotazioni; + private String codDtip; + private Integer idInventario; + + private OrdineDTO ordineDTO; + private ColloDTO colloDTO; + private InventarioDTO inventarioDTO; + + public String getGestione() { + return gestione; + } + + public void setGestione(String gestione) { + this.gestione = gestione; + } + + public String getCodMdep() { + return codMdep; + } + + public void setCodMdep(String codMdep) { + this.codMdep = codMdep; + } + + public String getIdDisp() { + return idDisp; + } + + public void setIdDisp(String idDisp) { + this.idDisp = idDisp; + } + + public String getZona() { + return zona; + } + + public void setZona(String zona) { + this.zona = zona; + } + + public String getSegno() { + return segno; + } + + public void setSegno(String segno) { + this.segno = segno; + } + + public Date getListCreate() { + return listCreate; + } + + public void setListCreate(Date listCreate) { + this.listCreate = listCreate; + } + + public String getAnnotazioni() { + return annotazioni; + } + + public void setAnnotazioni(String annotazioni) { + this.annotazioni = annotazioni; + } + + public String getCodDtip() { + return codDtip; + } + + public void setCodDtip(String codDtip) { + this.codDtip = codDtip; + } + + public Integer getIdInventario() { + return idInventario; + } + + public void setIdInventario(Integer idInventario) { + this.idInventario = idInventario; + } + + public OrdineDTO getOrdineDTO() { + return ordineDTO; + } + + public void setOrdineDTO(OrdineDTO ordineDTO) { + this.ordineDTO = ordineDTO; + } + + public ColloDTO getColloDTO() { + return colloDTO; + } + + public void setColloDTO(ColloDTO colloDTO) { + this.colloDTO = colloDTO; + } + + public InventarioDTO getInventarioDTO() { + return inventarioDTO; + } + + public void setInventarioDTO(InventarioDTO inventarioDTO) { + this.inventarioDTO = inventarioDTO; + } +} 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/TipiDocAndGruppiArtDTO.java new file mode 100644 index 00000000..e2ed1253 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipiDocAndGruppiArtDTO.java @@ -0,0 +1,29 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +import java.util.List; + +public class TipiDocAndGruppiArtDTO { + + + private List tipiDoc; + + + private List gruppiArt; + + + public List getTipiDoc() { + return tipiDoc; + } + + public void setTipiDoc(List tipiDoc) { + this.tipiDoc = tipiDoc; + } + + public List getGruppiArt() { + return gruppiArt; + } + + public void setGruppiArt(List gruppiArt) { + this.gruppiArt = gruppiArt; + } +} 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 new file mode 100644 index 00000000..0d8d5c64 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/TipiDocDTO.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.dto; + +public class TipiDocDTO { + + private String codDtip; + private String descrizione; + + public String getCodDtip() { + return codDtip; + } + + public void setCodDtip(String codDtip) { + this.codDtip = codDtip; + } + + public String getDescrizione() { + return descrizione; + } + + public void setDescrizione(String descrizione) { + this.descrizione = descrizione; + } + + 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 new file mode 100644 index 00000000..2b2c15f4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java @@ -0,0 +1,295 @@ +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.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.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; +import it.integry.integrywmsnative.core.expansion.BaseActivity; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.core.model.MtbPartitaMag; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.databinding.ActivityContabDocInterniEditBinding; +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; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; + +public class DocInterniEditFormActivity extends BaseActivity implements DocInterniEditFormViewModel.Listener, BottomSheetMtbColrEditView.Listener { + + private static String DATA_KEY_DOCUMENT = "document"; + private static String DATA_KEY_PRODUCTS_LIST = "productsList"; + + @Inject + MtbColrRepository documentRowsRepository; + @Inject + DocInterniEditFormViewModel viewModel; + + + private int mBarcodeScannerIstanceID; + private ActivityContabDocInterniEditBinding binding; + public BindableString documentHeader = new BindableString(true); + public BindableString codDtip = new BindableString(); + public BindableString note = new BindableString(); + public BindableString codMgrp = new BindableString(); + public BindableInteger prodsCount = new BindableInteger(0); + public BindableBoolean isDocumentExportable = new BindableBoolean(false); + private final ObservableArrayList documentRowsObservableList = new ObservableArrayList<>(); + + public static Intent newInstance(Context context, SqlMtbColt document, GrigliaAcquistiDTO productList) { + Intent myIntent = new Intent(context, DocInterniEditFormActivity.class); + + String doc = DataCache.addItem(document); + String productsKey = DataCache.addItem(productList); + myIntent.putExtra(DATA_KEY_DOCUMENT, doc); + myIntent.putExtra(DATA_KEY_PRODUCTS_LIST, productsKey); + return myIntent; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = DataBindingUtil.setContentView(this, R.layout.activity_contab_doc_interni_edit); + MainApplication.appComponent + .docInterniEditFormComponent() + .create() + .inject(this); + SqlMtbColt document = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_DOCUMENT)); + GrigliaAcquistiDTO griglia = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_PRODUCTS_LIST)); + List productList = griglia.getGrigliaAcquistiChild(); + this.initViewModel(document, productList); + this.initView(); + this.initBindables(); + this.initRecyclerView(); + } + + private void initBindables() { + SqlMtbColt document = this.viewModel.getDocument(); + this.codDtip.set(document.getCodDtipProvv()); + this.note.set(document.getAnnotazioni()); + this.codMgrp.set(document.getCodMgrp()); + this.documentHeader.set(String.format(this.getString(R.string.doc_interni_doc_header), document.getId(), document.getCodDtipProvv())); + } + + private void initView() { + binding.setViewModel(this.viewModel); + binding.setView(this); + 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); + binding.bottomSheetMtbColrEdit.setListener(this); + binding.bottomSheetMtbColrEdit.init(binding.bottomSheetMtbColrEdit, binding.bottomSheetMtbColrEditBackground); + } + + private void initViewModel(SqlMtbColt document, List productList) { + 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); + listAdapter.setEmptyView(binding.scanArtSpinner); + binding.documentRowsList.setAdapter(listAdapter); + binding.documentRowsList.setLayoutManager(new LinearLayoutManager(this)); + listAdapter.setOnItemClicked(row -> { + binding.bottomSheetMtbColrEdit.setMtbColr(sqlToEntity(row)); + binding.bottomSheetMtbColrEdit.expand(); + }); + } + + private void refreshList(List sqlMtbColrs) { + this.documentRowsObservableList.clear(); + 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() { + this.onBackPressed(); + } + + public void manualSearch() { + BarcodeManager.disable(); + DialogSimpleInputHelper.makeInputDialog(this, "Aggiungi delle annotazioni al documento", this.note.get(), this.viewModel::onSearch, BarcodeManager::enable).show(); + } + + + @Override + protected void onStart() { + super.onStart(); + SqlMtbColt document = this.viewModel.getDocument(); + if (document == null) { + Toast.makeText(this, "Nesusn documento selezionato!", Toast.LENGTH_SHORT).show(); + closeEdit(); + return; + } + + if (document.getCodDtip() != null) { + Toast.makeText(this, "Impossibile modificare un documento esportato", Toast.LENGTH_SHORT).show(); + closeEdit(); + return; + } + + mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(this.viewModel::onScanSuccessful) + .setOnScanFailed(this::onError)); + this.viewModel.fetchDocumentRows(); + } + + @Override + protected void onDestroy() { + BarcodeManager.removeCallback(mBarcodeScannerIstanceID); + super.onDestroy(); + } + + @Override + public boolean onSupportNavigateUp() { + onBackPressed(); + return true; + } + + @Override + public void onRowsChanged(List rows) { + this.prodsCount.set(rows.size()); + this.isDocumentExportable.set(rows.size() > 0); + } + + @Override + public void onEditRowRequest(SqlMtbColr row) { + MtbAart mtbAart = new MtbAart(); + mtbAart.setBarCode(row.getCodBarre()); + mtbAart.setDiacod(row.getCodBarre()); + mtbAart.setCodMart(row.getCodMart()); + mtbAart.setFlagQtaCnfFissa("S"); + mtbAart.setQtaCnf(BigDecimal.valueOf(row.getQtaCnf())); + mtbAart.setDescrizione(row.getDescrizione()); + mtbAart.setDescrizioneEstesa(row.getDescrizione()); + mtbAart.setUntMis(row.getUntMis()); + + DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() + .setMtbAart(mtbAart) + .setInitialNumCnf(BigDecimal.valueOf(row.getNumCnf())) + .setInitialQtaCnf(BigDecimal.valueOf(row.getQtaCnf())) + .setInitialQtaTot(BigDecimal.valueOf(row.getQtaCol())) + .setDataScad(row.getDataScad()) + .setCanOverflowOrderQuantity(false) + .setCanLUBeClosed(false) + .setCanPartitaMagBeChanged(false); + + DialogInputQuantityV2View + .newInstance(dialogInputQuantityV2DTO, (resultDTO, shouldCloseLU) -> { + this.onLoadingStarted(); + this.viewModel.saveRow(row, resultDTO); + }, this::onLoadingEnded) + .show(getSupportFragmentManager(), "tag"); + } + + @Override + public void onDocumentHoldRequest() { + this.closeEdit(); + } + + @Override + public void onDocExported() { + runOnUiThread(() -> { + DialogCommon.showDataSaved(this, this::closeEdit); + }); + } + + @Override + public void onBackPressed() { + BarcodeManager.removeCallback(mBarcodeScannerIstanceID); + super.onBackPressed(); + } + + @Override + public void onMtbColrEdit(MtbColr mtbColr) { + this.viewModel.editRow(entityToSql(mtbColr)); + } + + @Override + public void onMtbColrDelete(MtbColr mtbColr) { + this.viewModel.deleteRow(entityToSql(mtbColr)); + } + + + private MtbColr sqlToEntity(SqlMtbColr sqlMtbColr) { + MtbColr entity = new MtbColr(); + + entity + .setCodMart(sqlMtbColr.getCodMart()) + .setSerCollo(sqlMtbColr.getSerCollo()) + .setGestione(sqlMtbColr.getGestione()) + .setNumCollo(sqlMtbColr.getNumCollo()) + .setDataCollo(UtilityDate.formatDate(sqlMtbColr.getDataCollo(), UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)) + .setRiga(sqlMtbColr.getRiga()) + .setDescrizione(sqlMtbColr.getDescrizione()) + .setUntMis(sqlMtbColr.getUntMis()) + .setCodBarre(sqlMtbColr.getCodBarre()) + .setQtaCnf(BigDecimal.valueOf(sqlMtbColr.getQtaCnf())) + .setNumCnf(BigDecimal.valueOf(sqlMtbColr.getNumCnf())) + .setMtbPartitaMag(new MtbPartitaMag().setDataScad(sqlMtbColr.getDataScad())) + .setQtaCol(BigDecimal.valueOf(sqlMtbColr.getQtaCol())); + + return entity; + } + + private SqlMtbColr entityToSql(MtbColr mtbColr) { + + return Stream.of(this.viewModel.getDocumentRows()) + .filter(row -> row.getRiga().equals(mtbColr.getRiga())) + .findFirstOrElse(null); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormComponent.java new file mode 100644 index 00000000..efc54082 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form; + +import dagger.Subcomponent; + +@Subcomponent +public interface DocInterniEditFormComponent { + + @Subcomponent.Factory + interface Factory { + + DocInterniEditFormComponent create(); + } + + void inject(DocInterniEditFormActivity docInterniEditFormActivity); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormModule.java new file mode 100644 index 00000000..fda802b1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormModule.java @@ -0,0 +1,20 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrRepository; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; +import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniComponent; +import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniViewModel; +import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; + +@Module(subcomponents = DocInterniEditFormComponent.class) +public class DocInterniEditFormModule { + + + @Provides + DocInterniEditFormViewModel docInterniEditFormViewModel(DocInterniRESTConsumer docInterniRESTConsumer, MtbColrRepository mtbColrRepository, MtbColtRepository mtbColtRepository) { + return new DocInterniEditFormViewModel(docInterniRESTConsumer,mtbColrRepository, mtbColtRepository); + } + +} 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 new file mode 100644 index 00000000..2c701c6d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java @@ -0,0 +1,250 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form; + +import androidx.lifecycle.MutableLiveData; + +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.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.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ArtDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ColloDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiChildDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2ResultDTO; + +public class DocInterniEditFormViewModel { + + @Inject + MtbColrRepository mtbColrRepository; + @Inject + MtbColtRepository mtbColtRepository; + private final DocInterniRESTConsumer docInterniRESTConsumer; + private DocInterniEditFormViewModel.Listener listener; + private List productsList; + + public MutableLiveData document = new MutableLiveData<>(); + public MutableLiveData> docRows = new MutableLiveData<>(); + + @Inject + public DocInterniEditFormViewModel(DocInterniRESTConsumer docInterniRESTConsumer, MtbColrRepository mtbColrRepository, MtbColtRepository mtbColtRepository) { + this.docInterniRESTConsumer = docInterniRESTConsumer; + this.mtbColrRepository = mtbColrRepository; + this.mtbColtRepository = mtbColtRepository; + this.docRows.setValue(new ArrayList<>()); + } + + private void sendOnLoadingStarted() { + if (this.listener != null) listener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.listener != null) listener.onLoadingEnded(); + } + + private void sendError(Exception ex) { + if (this.listener != null) listener.onError(ex); + } + + public void fetchDocumentRows() { + this.sendOnLoadingStarted(); + mtbColrRepository.getDocumentRows(this.document.getValue(), rows -> { + this.docRows.postValue(rows); + this.listener.onRowsChanged(rows); + this.sendOnLoadingEnded(); + }, this::sendError); + + + } + + public void editRow(SqlMtbColr row) { + this.listener.onEditRowRequest(row); + } + + private Integer getNextIdRiga() { + List rows = this.docRows.getValue(); + if (rows == null || rows.size() <= 0) { + return 1; + } + return Stream.of(rows).mapToInt(SqlMtbColr::getRiga).max().getAsInt() + 1; + } + + public void exportDocument() { + 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(); + } + + public void onSearch(String search) { + this.sendOnLoadingStarted(); + GrigliaAcquistiChildDTO articolo = this.searchArticolo(search); + if (articolo == null) { + this.sendError(new Exception("Nessun articolo corrispondente al codice fornito!")); + this.sendOnLoadingEnded(); + return; + } + SqlMtbColr row = this.getRowForArticolo(articolo); + this.editRow(row); + + } + + private SqlMtbColr getRowForArticolo(GrigliaAcquistiChildDTO articolo) { + List docRows = this.docRows.getValue(); + if (docRows == null) { + docRows = new ArrayList<>(); + } + SqlMtbColt document = this.document.getValue(); + SqlMtbColr row = Stream.of(docRows).filter(docRow -> docRow.getCodMart().equalsIgnoreCase(articolo.getCodMart())).findFirstOrElse(null); + if (row == null) { + row = new SqlMtbColr(); + row.setIdCollo(document.getId()); + row.setRiga(getNextIdRiga()); + row.setCodMart(articolo.getCodMart()); + row.setSerCollo(document.getSerCollo()); + row.setGestione(document.getGestione()); + row.setNumCollo(document.getNumCollo()); + row.setDataCollo(document.getDataCollo()); + row.setDescrizione(articolo.getDescrizione()); + row.setUntMis(articolo.getUntMis()); + row.setCodBarre(articolo.getBarcode()); + row.setQtaCnf(articolo.getQtaCnf().floatValue()); + row.setNumCnf(0f); + row.setQtaCol(0f); + } + return row; + } + + private GrigliaAcquistiChildDTO searchArticolo(String filter) { + return Stream.of(this.productsList).filter(dto -> dto.getCodMart().equalsIgnoreCase(filter) || dto.getBarcode().equalsIgnoreCase(filter)).findFirstOrElse(null); + } + + private SaveDTO getSaveDto() { + SqlMtbColt document = this.getDocument(); + SaveDTO saveDTO = new SaveDTO(); + saveDTO.setIdDisp("1"); + saveDTO.setGestione(document.getGestione()); + saveDTO.setCodMdep(document.getCodMdep()); + saveDTO.setCodDtip(document.getCodDtipProvv()); + saveDTO.setAnnotazioni(document.getAnnotazioni()); + saveDTO.setSegno(document.getSegno().toString()); + + ColloDTO collo = new ColloDTO(); + collo.setIdDisp("1"); + collo.setGestione(document.getGestione()); + collo.setCodMdep(document.getCodMdep()); + collo.setCodDtip(document.getCodDtipProvv()); + collo.setCreatedDate(UtilityDate.formatDate(document.getDataCollo(), UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); + collo.setAnnotazioni(document.getAnnotazioni()); + collo.setSegno(saveDTO.getSegno()); + + for (SqlMtbColr row : this.getDocumentRows()) { + ArtDTO artDto = new ArtDTO(); + artDto.setBarcode(row.getCodBarre()); + artDto.setQta(BigDecimal.valueOf(row.getQtaCol())); + artDto.setDataIns(row.getDataCollo()); + artDto.setColli(BigDecimal.valueOf(row.getNumCnf())); + artDto.setUntMis(row.getUntMis()); + artDto.setCodMart(row.getCodMart()); + if (row.getDataScad() != null) { + artDto.setDataScad(row.getDataScad()); + } + artDto.setDescrizione(row.getDescrizione()); + collo.addArtRow(artDto); + } + saveDTO.setColloDTO(collo); + + return saveDTO; + } + + public DocInterniEditFormViewModel setListeners(Listener listener) { + this.listener = listener; + return this; + } + + public void setDocument(SqlMtbColt document) { + this.document.setValue(document); + } + + public SqlMtbColt getDocument() { + return document.getValue(); + } + + public List getProductsList() { + return productsList; + } + + public void setProductsList(List productsList) { + this.productsList = productsList; + } + + public void onScanSuccessful(BarcodeScanDTO dto) { + String code = dto.getStringValue(); + this.onSearch(code); + } + + public void saveRow(SqlMtbColr row, DialogInputQuantityV2ResultDTO resultDTO) { + row.setQtaCnf(resultDTO.getQtaCnf().floatValue()); + row.setNumCnf(resultDTO.getNumCnf().floatValue()); + row.setQtaCol(resultDTO.getQtaTot().floatValue()); + row.setDataScad(resultDTO.getDataScad()); + if (row.getId() > 0) { + this.mtbColrRepository.update(row, id -> { + this.fetchDocumentRows(); + }, this::sendError); + } else { + this.mtbColrRepository.insert(row, id -> { + this.fetchDocumentRows(); + }, this::sendError); + } + } + + public void deleteRow(SqlMtbColr sqlMtbColr) { + mtbColrRepository.delete(sqlMtbColr, this::fetchDocumentRows, this::sendError); + } + + public void setNote(String note) { + SqlMtbColt document = this.document.getValue(); + document.setAnnotazioni(note); + mtbColtRepository.update(document, doc -> this.document.postValue(doc), this::sendError); + } + + public List getDocumentRows() { + return this.docRows.getValue(); + } + + public interface Listener extends ILoadingListener { + + void onError(Exception ex); + + void onRowsChanged(List rows); + + void onEditRowRequest(SqlMtbColr row); + + void onDocumentHoldRequest(); + + void onDocExported(); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/ui/DocumentRowsListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/ui/DocumentRowsListAdapter.java new file mode 100644 index 00000000..ec51894a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/ui/DocumentRowsListAdapter.java @@ -0,0 +1,66 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; +import androidx.recyclerview.widget.RecyclerView; + +import it.integry.integrywmsnative.R; +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.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.view.ExtendedRecyclerView; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.databinding.ActivityContabDocInternoRowListSingleItemBinding; +import it.integry.integrywmsnative.databinding.DocInterniListModelBinding; + +public class DocumentRowsListAdapter extends ExtendedRecyclerView { + + private Context mContext; + + private RunnableArgs mOnItemClicked; + + public DocumentRowsListAdapter(Context context, ObservableArrayList myDataset) { + super(myDataset); + this.mContext = context; + } + + @NonNull + @Override + public SingleItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + ActivityContabDocInternoRowListSingleItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.activity_contab_doc_interno_row__list_single_item, parent, false); + return new SingleItemViewHolder(binding); + } + + @Override + public void onBindViewHolder(@NonNull SingleItemViewHolder holder, int position) { + final SqlMtbColr row = mDataset.get(position); + holder.binding.setItem(row); + holder.binding.executePendingBindings(); + holder.binding.getRoot().setOnClickListener(v -> { + if (this.mOnItemClicked != null) + this.mOnItemClicked.run(row); + }); + } + + + public void setOnItemClicked(RunnableArgs onItemClicked){ + this.mOnItemClicked = onItemClicked; + } + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + ActivityContabDocInternoRowListSingleItemBinding binding; + + SingleItemViewHolder(ActivityContabDocInternoRowListSingleItemBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } + + +} 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 new file mode 100644 index 00000000..ec2c5196 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumer.java @@ -0,0 +1,69 @@ +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 retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +@Singleton +public class DocInterniRESTConsumer extends _BaseRESTConsumer { + + public void getDocTypesAndGroupArts(RunnableArgs onComplete, RunnableArgs onFailed) { + DocInterniRESTConsumerService service = RESTBuilder.getService(DocInterniRESTConsumerService.class); + service.getDocTypesAndGroupArts().enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "getDocTypesAndGroupArts", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + public void fetchProducts(String codDtip, String codMgrp, RunnableArgs onComplete, RunnableArgs onFailed) { + DocInterniRESTConsumerService service = RESTBuilder.getService(DocInterniRESTConsumerService.class); + service.fetchProducts(codDtip,codMgrp,"L").enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "fetchProducts", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + + public void saveDoc(SaveDTO saveDTO, RunnableArgs onComplete, RunnableArgs onFailed){ + DocInterniRESTConsumerService service = RESTBuilder.getService(DocInterniRESTConsumerService.class); + service.save(saveDTO).enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "saveDoc", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java new file mode 100644 index 00000000..4be6cf4a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java @@ -0,0 +1,31 @@ +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 retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Query; + + +public interface DocInterniRESTConsumerService { + + @GET("getDocTypesAndArtsGroups") + Call> getDocTypesAndGroupArts(); + + @POST("SM2SaveTerminalinoWMS") + Call> save(@Body SaveDTO saveDTO); + + @GET("getElencoArticoli") + Call> fetchProducts(@Query("codDtip") String codDtip, @Query("codMgrp") String codMgrp, @Query("gestione") String gestione); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/ui/DocInterniListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/ui/DocInterniListAdapter.java new file mode 100644 index 00000000..d766051c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/ui/DocInterniListAdapter.java @@ -0,0 +1,72 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.ui; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableArrayList; +import androidx.recyclerview.widget.RecyclerView; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; +import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.view.ExtendedRecyclerView; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.databinding.DocInterniListModelBinding; + +public class DocInterniListAdapter extends ExtendedRecyclerView { + + private Context mContext; + + private RunnableArgs mOnItemClicked; + + public DocInterniListAdapter(Context context, ObservableArrayList myDataset) { + super(myDataset); + this.mContext = context; + } + + @NonNull + @Override + public SingleItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + DocInterniListModelBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.doc_interni_list_model, parent, false); + return new SingleItemViewHolder(binding); + } + + @Override + public void onBindViewHolder(@NonNull SingleItemViewHolder holder, int position) { + final DocInterniListModel doc = mDataset.get(position); + SqlMtbColt mtbColt = doc.getDocument(); + + String testataDocString = String.format(mContext.getString(R.string.doc_interni_doc_header), mtbColt.getId(), mtbColt.getCodDtipProvv()); + holder.binding.dataDoc.setText(Html.fromHtml(UtilityDate.formatDate(mtbColt.getDataCollo(), UtilityDate.COMMONS_DATE_FORMATS.DM_HUMAN))); + holder.binding.docDescription.setText(Html.fromHtml(testataDocString)); + holder.binding.numRows.setText(Html.fromHtml(String.format(mContext.getString(R.string.doc_interni_num_arts_doc), doc.getProductsCount()))); + + holder.binding.executePendingBindings(); + holder.binding.getRoot().setOnClickListener(v -> { + if (this.mOnItemClicked != null) + this.mOnItemClicked.run(mtbColt); + }); + } + + + public void setOnItemClicked(RunnableArgs onItemClicked){ + this.mOnItemClicked = onItemClicked; + } + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + DocInterniListModelBinding binding; + + SingleItemViewHolder(DocInterniListModelBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/ui/DocInterniListModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/ui/DocInterniListModel.java new file mode 100644 index 00000000..6ab3fb40 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/ui/DocInterniListModel.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative.gest.contab_doc_interni.ui; + +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; +import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper; + +public class DocInterniListModel { + + + private SqlMtbColt document; + private int productsCount; + + public SqlMtbColt getDocument() { + return document; + } + + public void setDocument(SqlMtbColt document) { + this.document = document; + } + + public int getProductsCount() { + return productsCount; + } + + public void setProductsCount(int productsCount) { + this.productsCount = productsCount; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java index d95f8cf0..0c76e122 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainActivity.java @@ -39,7 +39,7 @@ import it.integry.integrywmsnative.core.interfaces.IFilterableFragment; import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment; import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; -import it.integry.integrywmsnative.core.interfaces.ISearcableFragment; +import it.integry.integrywmsnative.core.interfaces.ISearchableFragment; import it.integry.integrywmsnative.core.interfaces.ISelectAllFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.menu.MenuService; @@ -280,21 +280,21 @@ public class MainActivity extends BaseActivity } private void adaptViewToFragment(Fragment fragment) { - if (fragment instanceof ISearcableFragment) { + if (fragment instanceof ISearchableFragment) { mBinding.appBarMain.mainSearch.setOnQueryTextListener((SearchView.OnQueryTextListener) fragment); mBinding.appBarMain.mainSearch.setVisibility(View.VISIBLE); mBinding.appBarMain.mainSearch.setOnSearchClickListener(v -> { - ((ISearcableFragment) fragment).onSearchEnabled(); + ((ISearchableFragment) fragment).onSearchEnabled(); mBinding.appBarMain.toolbarTitleLeft.setVisibility(View.GONE); }); mBinding.appBarMain.mainSearch.setOnCloseListener(() -> { - ((ISearcableFragment) fragment).onSearchDisabled(); + ((ISearchableFragment) fragment).onSearchDisabled(); mBinding.appBarMain.toolbarTitleLeft.setVisibility(View.VISIBLE); return false; }); - ((ISearcableFragment) fragment).addOnPreDestroy(() -> { + ((ISearchableFragment) fragment).addOnPreDestroy(() -> { mBinding.appBarMain.mainSearch.setIconified(true); mBinding.appBarMain.mainSearch.setVisibility(View.GONE); }); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java index 2b93d181..8e64395a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoBindings.java @@ -32,55 +32,66 @@ public class OrdiniUscitaElencoBindings { public static final HashMap AVAILABLE_FILTERS = new HashMap<>() {{ put(DEPOSITO_FILTER_ID, new FilterChipDTO() .setID(DEPOSITO_FILTER_ID) + .setPosizione(9) .setFilterChipText("Deposito") .setFilterLayoutView(new FilterDepositoLayoutView())); put(VIAGGIO_FILTER_ID, new FilterChipDTO() .setID(VIAGGIO_FILTER_ID) + .setPosizione(2) .setFilterChipText("Viaggio") .setFilterLayoutView(new FilterViaggioLayoutView())); put(NUM_ORD_FILTER_ID, new FilterChipDTO() .setID(NUM_ORD_FILTER_ID) + .setPosizione(0) .setFilterChipText("Numero ordine") .setFilterLayoutView(new FilterNumeroOrdineLayoutView())); put(CLIENTE_FILTER_ID, new FilterChipDTO() .setID(CLIENTE_FILTER_ID) + .setPosizione(1) .setFilterChipText("Cliente") .setFilterLayoutView(new FilterClienteLayoutView())); put(VETTORE_FILTER_ID, new FilterChipDTO() .setID(VETTORE_FILTER_ID) + .setPosizione(4) .setFilterChipText("Vettore") .setFilterLayoutView(new FilterVettoreLayoutView())); put(AUTOMEZZO_FILTER_ID, new FilterChipDTO() .setID(AUTOMEZZO_FILTER_ID) + .setPosizione(6) .setFilterChipText("Automezzo") .setFilterLayoutView(new FilterAutomezzoLayoutView())); put(PAESE_FILTER_ID, new FilterChipDTO() .setID(PAESE_FILTER_ID) + .setPosizione(8) .setFilterChipText("Paese") .setFilterLayoutView(new FilterPaeseLayoutView())); put(AGENTE_FILTER_ID, new FilterChipDTO() .setID(AGENTE_FILTER_ID) + .setPosizione(10) .setFilterChipText("Agente") .setFilterLayoutView(new FilterAgenteLayoutView())); put(TERM_CONS_FILTER_ID, new FilterChipDTO() .setID(TERM_CONS_FILTER_ID) + .setPosizione(5) .setFilterChipText("Termini consegna") .setFilterLayoutView(new FilterTermConsLayoutView())); put(DATA_CONS_FILTER_ID, new FilterChipDTO() .setID(DATA_CONS_FILTER_ID) + .setPosizione(3) .setFilterChipText("Data consegna")); put(GRUPPO_MERC_FILTER_ID, new FilterChipDTO() .setID(GRUPPO_MERC_FILTER_ID) + .setPosizione(7) .setFilterChipText("Gruppo merceologico") .setFilterLayoutView(new FilterGruppoMercLayoutView())); }}; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java index 6ae2f70c..7285449f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_uscita_elenco/OrdiniUscitaElencoFragment.java @@ -20,6 +20,7 @@ import com.google.android.material.datepicker.MaterialDatePicker; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.Objects; import javax.inject.Inject; @@ -192,7 +193,7 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.init(mViewModel.getOrderList().getValue()); - this.refreshList(v); + this.refreshList(null); }); OrdiniUscitaElencoAdapter ordiniUscitaElencoAdapter = @@ -261,14 +262,16 @@ public class OrdiniUscitaElencoFragment extends BaseFragment implements ITitledF mAppliedFilterViewModel.getCurrentDataConsPredicate().addOnPropertyChangedCallback(onPredicateChanged); mAppliedFilterViewModel.getCurrentGruppoMercPredicate().addOnPropertyChangedCallback(onPredicateChanged); - for (var filterChipDTO : OrdiniUscitaElencoBindings.AVAILABLE_FILTERS.entrySet()) { + List filterList = Stream.of(OrdiniUscitaElencoBindings.AVAILABLE_FILTERS.entrySet()).map(Map.Entry::getValue).sortBy(FilterChipDTO::getPosizione).toList(); + + for (FilterChipDTO filterChipDTO : filterList){ FilterChipView filterChipView = new FilterChipView( requireActivity(), - filterChipDTO.getValue().getFilterChipText(), - v -> initBottomSheetDialogFilter(filterChipDTO.getValue())); + filterChipDTO.getFilterChipText(), + v -> initBottomSheetDialogFilter(filterChipDTO)); - switch (filterChipDTO.getKey()) { + switch (filterChipDTO.getID()) { case OrdiniUscitaElencoBindings.DEPOSITO_FILTER_ID: mAppliedFilterViewModel.getCurrentDepositoPredicate().addOnPropertyChangedCallback(new OnGeneralChangedCallback() { @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java index a6b27584..df2659e2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java @@ -136,7 +136,7 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements mFilterViewModel.init(mViewModel.getOrderList().getValue()); - this.refreshList(v); + this.refreshList(null); }); mBindings.ordineProduzioneMainList.setLayoutManager(new LinearLayoutManager(getActivity())); 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 d6b16d1f..b1cdd7c8 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 @@ -319,6 +319,12 @@ public class ProdVersamentoMaterialeFragment extends BaseFragment implements Pro this.openLU(); } + @Override + public void onError(Exception ex, boolean requestClose) { + super.onError(ex); + if(requestClose) popMe(); + } + @Override public void onWarning(String warningText, Runnable action) { this.requireActivity().runOnUiThread(() -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/ProdVersamentoMaterialeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/ProdVersamentoMaterialeViewModel.java index 6d5c4742..d6ce0165 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/ProdVersamentoMaterialeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_versamento_materiale/ProdVersamentoMaterialeViewModel.java @@ -77,8 +77,13 @@ public class ProdVersamentoMaterialeViewModel { mtbDepoPosizione.getPosizione(), getIdMaterialeFromCollo(mtbColt), ordini -> { - setCurrentOrders(ordini, mtbColt.getMtbColr().get(0)); - this.sendOnLoadingEnded(); + if(ordini == null || ordini.isEmpty()) + this.sendError(new Exception("Nessun ordine compatibile con " + getIdMaterialeFromCollo(mtbColt) + " sulla linea " + mtbDepoPosizione.getPosizione()), true); + else { + setCurrentOrders(ordini, mtbColt.getMtbColr().get(0)); + this.sendOnLoadingEnded(); + } + }, e -> this.sendWarning(e.getMessage(), this::sendRequestLUOpen)); } @@ -194,7 +199,11 @@ public class ProdVersamentoMaterialeViewModel { } private void sendError(Exception ex) { - if (this.mListener != null) mListener.onError(ex); + if (this.mListener != null) mListener.onError(ex, false); + } + + private void sendError(Exception ex, boolean requestClose) { + if (this.mListener != null) mListener.onError(ex, requestClose); } private void sendOnDataSaved() { @@ -205,7 +214,7 @@ public class ProdVersamentoMaterialeViewModel { void requestLUOpen(); - void onError(Exception ex); + void onError(Exception ex, boolean requestClose); void onWarning(String warningText, Runnable action); 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 9209025f..9088d7f5 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 @@ -1,6 +1,7 @@ package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit; -import android.app.Dialog; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; import android.text.Html; import android.text.SpannableString; @@ -33,11 +34,10 @@ import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.ActivityPvOrdineAcquistoEditBinding; -import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListAdapter; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.EditArticoloDialog; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.ui.OrdineAcquistoArtListAdapter; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.dialogs.DialogAskAction; @@ -46,6 +46,7 @@ import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; public class PVOrdineAcquistoEditActivity extends BaseActivity { + private static String DATA_KEY_ORDER = "keyOrdine"; private Ordine mOrdine; private Griglia mGriglia; private List mArticoli = new ArrayList<>(); @@ -64,6 +65,13 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { ArticoloGrigliaRepository mArticoloGrigliaRepository; + public static Intent newInstance(Context context, Ordine ordine){ + Intent myIntent = new Intent(context, PVOrdineAcquistoEditActivity.class); + String keyOrdine = DataCache.addItem(ordine); + myIntent.putExtra(DATA_KEY_ORDER, keyOrdine); + return myIntent; + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -77,7 +85,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity { mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pv_ordine_acquisto_edit); mBinding.setViewModel(this); - mOrdine = DataCache.retrieveItem(getIntent().getStringExtra("keyOrdine")); + mOrdine = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_ORDER)); setSupportActionBar(mBinding.toolbar); mBinding.toolbar.setTitle(R.string.edit_order); getSupportActionBar().setDisplayHomeAsUpEnabled(true); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java index 1e7c593b..60abff71 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java @@ -97,7 +97,7 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_pv_ordini_acquisto, container, false); mBinding.setViewmodel(this); - mHelper = new OrdineAcquistoPvHelper(getActivity(), mGrigliaRepository, mArticoloGrigliaRepository, mArticoliOrdineRepository, mOrdineRepository); + mHelper = new OrdineAcquistoPvHelper(requireActivity(), mGrigliaRepository, mArticoloGrigliaRepository, mArticoliOrdineRepository, mOrdineRepository); init(); initRecyclerView(); @@ -107,9 +107,9 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled private void init() { BarcodeManager.enable(); - DialogScanLisA.make(getActivity(), mGrigliaRepository, mHelper, griglia -> { + DialogScanLisA.make(requireActivity(), mGrigliaRepository, mHelper, griglia -> { if (griglia == null) { - if (getActivity() != null) ((IPoppableActivity) getActivity()).pop(); + ((IPoppableActivity) requireActivity()).pop(); } else { setGriglia(griglia); } @@ -136,15 +136,15 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled private void fetchOrders() { this.openProgress(); - mOrdineRepository.selectAllOpenOrders(mGriglia, (ordini) -> getActivity().runOnUiThread(() -> { + mOrdineRepository.selectAllOpenOrders(mGriglia, (ordini) -> requireActivity().runOnUiThread(() -> { this.closeProgress(); setOrdini(ordini); }), (e) -> { this.closeProgress(); String errorMessage = e.getMessage(); - getActivity().runOnUiThread(() -> DialogSimpleMessageView + requireActivity().runOnUiThread(() -> DialogSimpleMessageView .makeErrorDialog(new SpannableString(errorMessage), null, null) - .show(getActivity().getSupportFragmentManager(), "tag")); + .show(requireActivity().getSupportFragmentManager(), "tag")); }); } @@ -167,29 +167,22 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled private void initRecyclerView() { mBinding.ordiniAApertiMainList.setHasFixedSize(true); - mBinding.ordiniAApertiMainList.setLayoutManager(new LinearLayoutManager(getActivity())); + mBinding.ordiniAApertiMainList.setLayoutManager(new LinearLayoutManager(requireActivity())); - SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(getActivity(), SimpleDividerItemDecoration.VERTICAL); - itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider)); + SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireActivity(), SimpleDividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(requireActivity(), R.drawable.divider)); mBinding.ordiniAApertiMainList.addItemDecoration(itemDecorator); - mAdapter = new OrdineAcquistoPvOpenListAdapter(getActivity(), mRenderedOrderList, this::selectAction); + mAdapter = new OrdineAcquistoPvOpenListAdapter(requireActivity(), mRenderedOrderList, this::selectAction); mBinding.ordiniAApertiMainList.setAdapter(mAdapter); } private void editOrdine(Ordine ordine) { - - Intent myIntent = new Intent(getActivity(), PVOrdineAcquistoEditActivity.class); - - String keyOrdine = DataCache.addItem(ordine); - myIntent.putExtra("keyOrdine", keyOrdine); - - getActivity().startActivity(myIntent); - + requireActivity().startActivity(PVOrdineAcquistoEditActivity.newInstance(requireActivity(),ordine)); } private void selectAction(Ordine ordine) { - getActivity().runOnUiThread(() -> DialogAskAction.make(getActivity(), + requireActivity().runOnUiThread(() -> DialogAskAction.make(requireActivity(), Html.fromHtml(String.format(this.getString(R.string.ord_acq_testata), String.valueOf(ordine.getOrdineId()), UtilityDate.formatDate(ordine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))).toString(), ordine.getCountArticoli() + " articoli", () -> this.editOrdine(ordine), @@ -200,20 +193,20 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled private void deleteOrdine(Ordine ordine) { String text = "Stai per eliminare un ordine sei sicuro?"; - DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> getActivity().runOnUiThread(() -> { + DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> requireActivity().runOnUiThread(() -> { this.openProgress(); mHelper.deleteOrder(ordine, () -> { - getActivity().runOnUiThread(() -> { + requireActivity().runOnUiThread(() -> { this.closeProgress(); - Toast.makeText(getActivity(), "Ordine eliminato!", Toast.LENGTH_SHORT).show(); + Toast.makeText(requireActivity(), "Ordine eliminato!", Toast.LENGTH_SHORT).show(); fetchOrders(); }); }, e -> { this.closeProgress(); - getActivity().runOnUiThread(() -> UtilityExceptions.defaultException(getActivity(), e)); + requireActivity().runOnUiThread(() -> UtilityExceptions.defaultException(requireActivity(), e)); }); }), () -> { - }).show(getActivity().getSupportFragmentManager(), "tag"); + }).show(requireActivity().getSupportFragmentManager(), "tag"); } private void refreshRenderedOrdini(List ordini) { @@ -225,9 +218,9 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled this.openProgress(); mHelper.createNewOrder(mGriglia, order -> { this.closeProgress(); - getActivity().runOnUiThread(() -> editOrdine(order)); - }, e -> getActivity().runOnUiThread(() -> { - UtilityExceptions.defaultException(getActivity(), e); + requireActivity().runOnUiThread(() -> editOrdine(order)); + }, e -> requireActivity().runOnUiThread(() -> { + UtilityExceptions.defaultException(requireActivity(), e); this.closeProgress(); } )); @@ -261,15 +254,15 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled } protected void openProgress() { - getActivity().runOnUiThread(() -> { + requireActivity().runOnUiThread(() -> { if (this.mCurrentProgress == null) { - this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(getActivity()); + this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(requireActivity()); } }); } protected void closeProgress() { - getActivity().runOnUiThread(() -> { + requireActivity().runOnUiThread(() -> { if (mCurrentProgress != null) { mCurrentProgress.dismiss(); mCurrentProgress = null; diff --git a/app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/FilterChipDTO.java b/app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/FilterChipDTO.java index 78572dfb..73c74bd8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/FilterChipDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/ui/filter_chips/FilterChipDTO.java @@ -3,6 +3,7 @@ package it.integry.integrywmsnative.ui.filter_chips; public class FilterChipDTO { private int ID; + private int posizione; private String filterChipText; private FilterLayoutView filterLayoutView; @@ -32,4 +33,13 @@ public class FilterChipDTO { this.filterLayoutView = filterLayoutView; return this; } + + public int getPosizione() { + return posizione; + } + + public FilterChipDTO setPosizione(int posizione) { + this.posizione = posizione; + return this; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java index 84aa0943..351619a1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/base/DialogSimpleInputHelper.java @@ -21,7 +21,7 @@ import it.integry.integrywmsnative.databinding.DialogInputGeneralBinding; public class DialogSimpleInputHelper { - private static Dialog makeBase(Context mContext, String titleText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ + private static Dialog makeBase(Context mContext, String titleText, String valueText, RunnableArgs onPositiveClick, Runnable onNegativeClick){ Dialog dialog = new Dialog(mContext); DialogSimpleInputViewModel viewModel = new DialogSimpleInputViewModel(dialog); @@ -39,6 +39,9 @@ public class DialogSimpleInputHelper { //Title VIEW mBinding.titleText.setText(titleText); + if (valueText != null){ + mBinding.generalInput.setText(valueText); + } ColorStateList colorStateList = ColorStateList.valueOf(Color.WHITE); //Content View @@ -56,6 +59,18 @@ public class DialogSimpleInputHelper { return makeBase(mContext, title, + null, + onPositiveClick, + onNegativeClick); + + } + + + public static Dialog makeInputDialog(Context mContext, String title,String value, RunnableArgs onPositiveClick, Runnable onNegativeClick){ + + return makeBase(mContext, + title, + value, onPositiveClick, onNegativeClick); diff --git a/app/src/main/res/drawable/ic_dashboard_contab_doc_interni.xml b/app/src/main/res/drawable/ic_dashboard_contab_doc_interni.xml new file mode 100644 index 00000000..997756a3 --- /dev/null +++ b/app/src/main/res/drawable/ic_dashboard_contab_doc_interni.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_contab_doc_interni_edit.xml b/app/src/main/res/layout/activity_contab_doc_interni_edit.xml new file mode 100644 index 00000000..600bbf09 --- /dev/null +++ b/app/src/main/res/layout/activity_contab_doc_interni_edit.xml @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_contab_doc_interno_row__list_single_item.xml b/app/src/main/res/layout/activity_contab_doc_interno_row__list_single_item.xml new file mode 100644 index 00000000..8e99b660 --- /dev/null +++ b/app/src/main/res/layout/activity_contab_doc_interno_row__list_single_item.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_input_quantity_v2.xml b/app/src/main/res/layout/dialog_input_quantity_v2.xml index 6f4ecbfb..b49c8aec 100644 --- a/app/src/main/res/layout/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout/dialog_input_quantity_v2.xml @@ -6,7 +6,9 @@ + + @@ -51,15 +53,34 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/toolbar"> - - + android:layout_marginTop="8dp"> + + + + + + android:padding="8dp" + android:visibility="@{viewmodel.totalNumCnfToBeTaken != null || viewmodel.totalQtaToBeTaken != null ? View.VISIBLE : View.GONE}"> - - - - - @@ -413,9 +429,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/batch_lot" + android:imeOptions="actionDone" android:inputType="text" - app:binding="@{view.currentPartitaMag}" - android:imeOptions="actionDone" /> + app:binding="@{view.currentPartitaMag}" /> @@ -424,21 +440,21 @@ style="@style/TextInputLayout.OutlinePrimary" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_weight="1" android:enabled="@{view.enabledChangePartitaMag}" - android:visibility="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? View.VISIBLE : View.GONE}" - android:layout_weight="1"> + android:visibility="@{viewmodel.shouldAskDataScad || viewmodel.shouldShowDataScad ? View.VISIBLE : View.GONE}"> + app:warningOnOldDates="@{true}" /> @@ -458,9 +474,9 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}" - android:paddingEnd="4dp" - android:focusableInTouchMode="false" android:enabled="@{view.enabledNumCnf}" + android:focusableInTouchMode="false" + android:paddingEnd="4dp" tools:layout_weight="1"> + app:binding="@{view.currentNumCnf}" /> @@ -481,9 +497,9 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" - android:paddingEnd="4dp" - android:focusableInTouchMode="false" android:enabled="@{view.enabledQtaCnf}" + android:focusableInTouchMode="false" + android:paddingEnd="4dp" android:visibility="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? View.VISIBLE : View.GONE}"> + app:binding="@{view.currentQtaCnf}" /> @@ -506,16 +522,16 @@ android:layout_weight="@{!viewmodel.mtbAart.flagQtaCnfFissaBoolean ? 1f : 1.5f}" android:enabled="@{view.enabledQtaTot}" android:focusableInTouchMode="false" - tools:layout_weight="1" - android:imeOptions="actionDone"> + android:imeOptions="actionDone" + tools:layout_weight="1"> @@ -528,9 +544,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="16dp" + android:gravity="center_horizontal" android:orientation="horizontal" - android:weightSum="1" - android:gravity="center_horizontal"> + android:weightSum="1"> + app:strokeColor="@color/colorPrimary" + app:visibility="@{view.enabledLUCloseButton}" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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_tipo_doc_and_group_art__single_item.xml new file mode 100644 index 00000000..d0736805 --- /dev/null +++ b/app/src/main/res/layout/dialog_select_tipo_doc_and_group_art__single_item.xml @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/app/src/main/res/layout/doc_interni_list_model.xml b/app/src/main/res/layout/doc_interni_list_model.xml new file mode 100644 index 00000000..ec1ec865 --- /dev/null +++ b/app/src/main/res/layout/doc_interni_list_model.xml @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + \ 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 new file mode 100644 index 00000000..212fd431 --- /dev/null +++ b/app/src/main/res/layout/fragment_doc_interni.xml @@ -0,0 +1,269 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail__mtb_colt_item_model.xml b/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail__mtb_colt_item_model.xml index 51a305c0..e4989418 100644 --- a/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail__mtb_colt_item_model.xml +++ b/app/src/main/res/layout/fragment_prod_rientro_merce_order_detail__mtb_colt_item_model.xml @@ -103,8 +103,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" - android:layout_toEndOf="@id/peso_lordo_collo" android:layout_marginStart="4dp" + android:layout_toEndOf="@id/peso_lordo_collo" android:text="@{mtbColt.timeVers}" android:textAppearance="@style/AppTheme.NewMaterial.Text.Small" android:textColor="@android:color/black" diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index acb6de02..950d8e23 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -340,4 +340,22 @@ Usa Indietro Rientro merce + Personalizzazioni Gramm + Personalizzazioni Agricoper + Titolo Modulo + Documenti interni + %d articoli]]> + %d_%s]]> + Seleziona estremi documento + Tipo documento + Gruppo articolo + Tipo doc. + Gruppo art. + Articoli disponibili + Nessun documento trovato + Documento: + Numero articoli: + Modifica documento + Esporta documento + Salva documento \ No newline at end of file diff --git a/app/src/main/res/values/config.xml b/app/src/main/res/values/config.xml index 4181bf2c..116c8646 100644 --- a/app/src/main/res/values/config.xml +++ b/app/src/main/res/values/config.xml @@ -30,5 +30,6 @@ + \ 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 0860a520..30f960fe 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -350,4 +350,19 @@ Ret of processing goods Agricoper customizations Module Title + Internal Docs + %d items]]> + %d_%s]]> + Choose Document details + Document type + Product group + Doc type + Product group + Available products + No document found + Document: + Products count: + Edit document + Export document + Save document