diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 554ffcdb..ae78c113 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,53 +1,5 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/.idea/runConfigurations/app.xml b/.idea/runConfigurations/app.xml deleted file mode 100644 index 6c4702c4..00000000 --- a/.idea/runConfigurations/app.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 3ff735ca..41c1d63d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -113,6 +113,7 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-runtime:2.1.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0' implementation 'androidx.lifecycle:lifecycle-common-java8:2.1.0' + implementation 'org.apache.commons:commons-text:1.6' //kapt "androidx.lifecycle:lifecycle-compiler:2.0.0" implementation 'com.danielpuiu:ghostfish:2.0.0' annotationProcessor "com.danielpuiu:ghostfish-compiler:2.0.0" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e72614ee..9c827172 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,6 +18,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true"> + appDb.clearAllTables()).start(); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java index 1b658568..39dd708d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/AppDatabase.java @@ -17,7 +17,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; -@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class}, version = 3, exportSchema = false) +@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class}, version = 1, exportSchema = false) @TypeConverters({ DateConverter.class }) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java index 7b1c20f0..0a83e2df 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloGrigliaDao.java @@ -24,4 +24,13 @@ public interface ArticoloGrigliaDao { void updateAll(List articoli); @Update void update(ArticoloGriglia articolo); + + @Query("SELECT * FROM articoli_griglia WHERE bar_code = :barcode AND id_griglia = :idGriglia LIMIT 1") + ArticoloGriglia findArticoloByBarcodeAndGriglia(String barcode, int idGriglia); + + @Query("SELECT * FROM articoli_griglia WHERE cod_mart = :codMart AND id_griglia = :idGriglia LIMIT 1") + ArticoloGriglia findArticoloByCodMartAndGriglia(String codMart, int idGriglia); + + @Query("SELECT * FROM articoli_griglia WHERE (cod_mart = :scan OR bar_code =:scan )AND id_griglia = :idGriglia LIMIT 1") + ArticoloGriglia findArticoloByScanAndGriglia(String scan, int idGriglia); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloOrdineDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloOrdineDao.java index 300b1c73..fee0cfb1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloOrdineDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloOrdineDao.java @@ -1,15 +1,53 @@ package it.integry.integrywmsnative.core.data_store.db.dao; import androidx.room.Dao; +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.ArticoloGriglia; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; +import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; @Dao public interface ArticoloOrdineDao { + @Query("SELECT * from articoli_ordine") List getAll(); + + @Insert + void insertAll(List toInsert); + + @Insert + void insert(ArticoloOrdine articolo); + + @Query("SELECT * FROM articoli_ordine where bar_code = :barcode and id_ordine = :ordine LIMIT 1") + ArticoloOrdine findArticoloByOrdineAndBarcode(int ordine, String barcode); + + + @Update + void updateAll(List toUpdate); + + @Update + void update(ArticoloOrdine articolo); + + @Query("SELECT * FROM articoli_ordine where id_ordine = :ordineId") + List findArticoliByOrdine(int ordineId); + + @Query("SELECt * from articoli_ordine where cod_mart = :codMart and id_ordine = :ordineId LIMIT 1") + ArticoloOrdine findArticoloByCodMartAndOrdine(int ordineId, String codMart); + + @Query( " SELECT articoli_ordine.* " + + " FROM articoli_ordine " + + " LEFT OUTER JOIN articoli_griglia on articoli_ordine.cod_mart = articoli_griglia.cod_mart " + + " WHERE " + + " (" + + " articoli_ordine.bar_code = :barcode" + + " OR articoli_griglia.bar_code = :barcode" + + " )" + + " AND articoli_ordine.id_ordine = :ordineId " + + " LIMIT 1") + ArticoloOrdine findArticoloByBarcodeAndOrdine(int ordineId, String barcode); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/GrigliaDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/GrigliaDao.java index 864966db..8cdf61ed 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/GrigliaDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/GrigliaDao.java @@ -10,6 +10,7 @@ import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; +import it.integry.integrywmsnative.core.data_store.db.wrappers.GrigliaWrapper; @Dao public interface GrigliaDao { @@ -17,7 +18,7 @@ public interface GrigliaDao { List getAll(); @Query("SELECT *, COUNT(articoli_griglia.articolo_griglia_id) as countArticoli from griglie LEFT JOIN articoli_griglia ON (griglie.griglia_id = articoli_griglia.id_griglia) where cod_alis = :codAlis GROUP BY griglie.griglia_id") - Griglia findByCodAlis(String codAlis); + GrigliaWrapper findByCodAlis(String codAlis); @Insert long insert(Griglia griglia); @@ -33,4 +34,7 @@ public interface GrigliaDao { @Delete void delete(Griglia griglia); + + @Query("SELECT * from griglie where griglia_id = :idGriglia") + Griglia findGrigliaById(int idGriglia); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/OrdineDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/OrdineDao.java index c8b76fe2..f4484d6f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/OrdineDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/OrdineDao.java @@ -1,19 +1,30 @@ package it.integry.integrywmsnative.core.data_store.db.dao; import androidx.room.Dao; +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.Griglia; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.view_model.OrdineWithGriglia; +import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; @Dao public interface OrdineDao { @Query("SELECT * from ordini ") List getAll(); - @Query("SELECT ordini.*, griglie.* from ordini inner join griglie ON id_griglia = griglie.griglia_id") + @Query("SELECT ordini.*, griglie.* from ordini inner join griglie ON id_griglia = griglie.griglia_id where ordini.transmitted = 1") List getAllTrasnmitted(); + + @Query("SELECT ordini.*, count(articolo_ordine_id) as countArticoli from ordini left join articoli_ordine ON ordini.ordine_id = articoli_ordine.id_ordine where ordini.transmitted = 0 and ordini.id_griglia = :idGriglia group by ordini.ordine_id") + List getAllOpenOrdersByGriglia(int idGriglia); + + @Insert + Long insert(Ordine ordine); + + @Update + void update(Ordine ordine); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java index 763941be..5d1d42df 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java @@ -6,6 +6,8 @@ import androidx.room.ForeignKey; import androidx.room.Index; import androidx.room.PrimaryKey; +import java.util.Date; + @Entity( tableName = "articoli_griglia", indices = { @@ -19,7 +21,7 @@ import androidx.room.PrimaryKey; onDelete = ForeignKey.CASCADE ) } - ) +) public class ArticoloGriglia { @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "articolo_griglia_id") @@ -41,7 +43,7 @@ public class ArticoloGriglia { private String barCode; @ColumnInfo(name = "merce_da_ric") - private int merceDaRic; + private float merceDaRic; @ColumnInfo(name = "media_sett") private float mediaSett; @@ -50,7 +52,7 @@ public class ArticoloGriglia { private String flagQtaMultipla; @ColumnInfo(name = "qta_min_ordinabile") - private int qtaMinOrdinabile; + private float qtaMinOrdinabile; @ColumnInfo(name = "id_griglia") private int idGriglia; @@ -103,11 +105,11 @@ public class ArticoloGriglia { this.barCode = barCode; } - public int getMerceDaRic() { + public float getMerceDaRic() { return merceDaRic; } - public void setMerceDaRic(int merceDaRic) { + public void setMerceDaRic(float merceDaRic) { this.merceDaRic = merceDaRic; } @@ -127,11 +129,11 @@ public class ArticoloGriglia { this.flagQtaMultipla = flagQtaMultipla; } - public int getQtaMinOrdinabile() { + public float getQtaMinOrdinabile() { return qtaMinOrdinabile; } - public void setQtaMinOrdinabile(int qtaMinOrdinabile) { + public void setQtaMinOrdinabile(float qtaMinOrdinabile) { this.qtaMinOrdinabile = qtaMinOrdinabile; } @@ -142,4 +144,24 @@ public class ArticoloGriglia { public void setIdGriglia(int idGriglia) { this.idGriglia = idGriglia; } + + public ArticoloOrdine convertToArticoloOrdine(Ordine ordine) { + ArticoloOrdine articolo = new ArticoloOrdine(); + + articolo.setIdOrdine(ordine.getOrdineId()); + + articolo.setBarCode(this.getBarCode()); + articolo.setCodMart(this.getCodMart()); + articolo.setMediaSett(this.getMediaSett()); + articolo.setFlagQtaMultipla(this.getFlagQtaMultipla()); + articolo.setQtaMinOrdinabile(this.getQtaMinOrdinabile()); + articolo.setMerceDaRic(this.getMerceDaRic()); + articolo.setQtaCnf(this.getQtaCnf()); + articolo.setUntMis(this.getUntMis()); + articolo.setDescrizione(this.getDescrizione()); + articolo.setDataIns(new Date()); + articolo.setQtaOrd(0); + + return articolo; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java index 5fe50c30..6b0c8f16 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloOrdine.java @@ -6,10 +6,13 @@ import androidx.room.ForeignKey; import androidx.room.Index; import androidx.room.PrimaryKey; +import java.util.Date; + @Entity( tableName = "articoli_ordine", indices = { - @Index(value = "id_ordine") + @Index(value = "id_ordine"), + @Index(value = {"id_ordine","cod_mart"}, unique = true) }, foreignKeys = { @ForeignKey( @@ -41,7 +44,7 @@ public class ArticoloOrdine { private String barCode; @ColumnInfo(name = "merce_da_ric") - private int merceDaRic; + private float merceDaRic; @ColumnInfo(name = "media_sett") private float mediaSett; @@ -50,11 +53,17 @@ public class ArticoloOrdine { private String flagQtaMultipla; @ColumnInfo(name = "qta_min_ordinabile") - private int qtaMinOrdinabile; + private float qtaMinOrdinabile; @ColumnInfo(name = "id_ordine") private int idOrdine; + @ColumnInfo(name = "qta_ord") + private float qtaOrd; + + @ColumnInfo(name = "data_ins") + private Date dataIns; + public int getArticoloOrdineId() { return articoloOrdineId; } @@ -103,11 +112,11 @@ public class ArticoloOrdine { this.barCode = barCode; } - public int getMerceDaRic() { + public float getMerceDaRic() { return merceDaRic; } - public void setMerceDaRic(int merceDaRic) { + public void setMerceDaRic(float merceDaRic) { this.merceDaRic = merceDaRic; } @@ -127,11 +136,11 @@ public class ArticoloOrdine { this.flagQtaMultipla = flagQtaMultipla; } - public int getQtaMinOrdinabile() { + public float getQtaMinOrdinabile() { return qtaMinOrdinabile; } - public void setQtaMinOrdinabile(int qtaMinOrdinabile) { + public void setQtaMinOrdinabile(float qtaMinOrdinabile) { this.qtaMinOrdinabile = qtaMinOrdinabile; } @@ -142,4 +151,20 @@ public class ArticoloOrdine { public void setIdOrdine(int idOrdine) { this.idOrdine = idOrdine; } + + public float getQtaOrd() { + return qtaOrd; + } + + public void setQtaOrd(float qtaOrd) { + this.qtaOrd = qtaOrd; + } + + public Date getDataIns() { + return dataIns; + } + + public void setDataIns(Date dataIns) { + this.dataIns = dataIns; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java index a0f9a2e4..ae68bda0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java @@ -3,12 +3,13 @@ package it.integry.integrywmsnative.core.data_store.db.entity; import androidx.annotation.Nullable; import androidx.room.ColumnInfo; import androidx.room.Entity; +import androidx.room.Ignore; import androidx.room.PrimaryKey; -import androidx.room.TypeConverter; -import androidx.room.TypeConverters; import java.util.Date; +import it.integry.integrywmsnative.core.utility.UtilityDate; + @Entity(tableName = "ordini") public class Ordine { @@ -17,8 +18,8 @@ public class Ordine { @ColumnInfo(name = "ordine_id") private int ordineId; - @ColumnInfo(name = "data_ord") - private Date dataOrd; + @ColumnInfo(name = "data_ins") + private Date dataIns; @ColumnInfo(name = "annotazioni") private String annotazioni; @@ -30,6 +31,25 @@ public class Ordine { @Nullable private Date transmissionDate; + @ColumnInfo(name = "gestione") + @Nullable + private String gestione; + + @ColumnInfo(name = "data_ord") + @Nullable + private Date dataOrd; + + @ColumnInfo(name = "num_ord") + @Nullable + private Integer numOrd; + + @ColumnInfo(name = "cod_mdep") + @Nullable + private String codMdep; + + @Ignore + private int countArticoli = 0; + @ColumnInfo(name = "id_griglia") private int idGriglia; @@ -41,12 +61,12 @@ public class Ordine { this.ordineId = ordineId; } - public Date getDataOrd() { - return dataOrd; + public Date getDataIns() { + return dataIns; } - public void setDataOrd(Date dataOrd) { - this.dataOrd = dataOrd; + public void setDataIns(Date dataIns) { + this.dataIns = dataIns; } public String getAnnotazioni() { @@ -81,4 +101,51 @@ public class Ordine { public void setTransmissionDate(@Nullable Date transmissionDate) { this.transmissionDate = transmissionDate; } + + public int getCountArticoli() { + return countArticoli; + } + + public void setCountArticoli(int countArticoli) { + this.countArticoli = countArticoli; + } + + @Nullable + public String getGestione() { + return gestione; + } + + public void setGestione(@Nullable String gestione) { + this.gestione = gestione; + } + + @Nullable + public Date getDataOrd() { + return dataOrd; + } + + public void setDataOrd(@Nullable Date dataOrd) { + this.dataOrd = dataOrd; + } + + @Nullable + public Integer getNumOrd() { + return numOrd; + } + + public void setNumOrd(@Nullable Integer numOrd) { + this.numOrd = numOrd; + } + + @Nullable + public String getCodMdep() { + return codMdep; + } + + public void setCodMdep(@Nullable String codMdep) { + this.codMdep = codMdep; } + + public void setDataOrdS(String dataOrd) { + setDataOrd(UtilityDate.recognizeDateWithExceptionHandler(dataOrd)); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliGrigliaRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliGrigliaRepository.java index 76b10e76..7929014a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliGrigliaRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliGrigliaRepository.java @@ -1,14 +1,13 @@ package it.integry.integrywmsnative.core.data_store.db.repository; +import org.apache.commons.lang3.StringUtils; + import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloGrigliaDao; -import it.integry.integrywmsnative.core.data_store.db.dao.GrigliaDao; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; -import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; -import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; import it.integry.integrywmsnative.core.expansion.RunnableArgs; public class ArticoliGrigliaRepository extends Repository{ @@ -25,7 +24,6 @@ public class ArticoliGrigliaRepository extends Repository{ List toUpdate = new ArrayList<>(); List toInsert = new ArrayList<>(); for (ArticoloGriglia art : articoli){ - Integer id = mRepository.getIdArticoloByGrigliaAndCodMart(art.getIdGriglia(),art.getCodMart()); if (id != null){ art.setArticoloGrigliaId(id); @@ -37,8 +35,42 @@ public class ArticoliGrigliaRepository extends Repository{ mRepository.insertAll(toInsert); mRepository.updateAll(toUpdate); onSuccess.run(); + }catch (Exception e){ + onFail.run(e); + } + }); + } - + public void findArticoloByBarcodeAndGriglia(String barcode, int idGriglia,RunnableArgs onSuccess, RunnableArgs onFail ){ + execute(()->{ + try{ + onSuccess.run(mRepository.findArticoloByBarcodeAndGriglia(barcode, idGriglia)); + }catch (Exception e){ + onFail.run(e); + } + }); + } + public void findArticoloByCodMartAndGriglia(String codMart, int idGriglia,RunnableArgs onSuccess, RunnableArgs onFail ){ + execute(()->{ + try{ + onSuccess.run(mRepository.findArticoloByCodMartAndGriglia(codMart, idGriglia)); + }catch (Exception e){ + onFail.run(e); + } + }); + } + public void findArticoloByScanAndGriglia(String scan, int idGriglia,RunnableArgs onSuccess, RunnableArgs onFail ){ + execute(()->{ + try{ + ArticoloGriglia articolo = mRepository.findArticoloByCodMartAndGriglia(scan, idGriglia); + if (articolo == null){ + articolo = mRepository.findArticoloByBarcodeAndGriglia(scan,idGriglia); + if (articolo==null){ + String barcode= StringUtils.leftPad(scan,13,"0"); + articolo = mRepository.findArticoloByBarcodeAndGriglia(barcode,idGriglia); + } + } + onSuccess.run(articolo); }catch (Exception e){ onFail.run(e); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliOrdineRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliOrdineRepository.java new file mode 100644 index 00000000..57689e86 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/ArticoliOrdineRepository.java @@ -0,0 +1,97 @@ +package it.integry.integrywmsnative.core.data_store.db.repository; + +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloOrdineDao; +import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; +import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public class ArticoliOrdineRepository extends Repository { + + ArticoloOrdineDao mRepository; + + public ArticoliOrdineRepository() { + this.mRepository = MainApplication.getArticoliOrdineRepository(); + } + + public void saveArticoliToOrdine(List articoli, Runnable onSuccess, RunnableArgs onFail) { + execute(() -> { + try { + List toUpdate = new ArrayList<>(); + List toInsert = new ArrayList<>(); + for (ArticoloOrdine art : articoli) { + if (art.getArticoloOrdineId() > 0) { + toUpdate.add(art); + } else { + toInsert.add(art); + } + } + mRepository.insertAll(toInsert); + mRepository.updateAll(toUpdate); + onSuccess.run(); + + + } catch (Exception e) { + onFail.run(e); + } + }); + } + public void saveArticoloToOrdine(ArticoloOrdine articolo, Runnable onSuccess, RunnableArgs onFail) { + execute(() -> { + try { + if (articolo.getArticoloOrdineId() > 0) { + mRepository.update(articolo); + } else { + mRepository.insert(articolo); + } + onSuccess.run(); + } catch (Exception e) { + onFail.run(e); + } + }); + } + + public void findArticoloByOrdineAndBarcode(Ordine ordine, String barcode, RunnableArgs onSuccess, RunnableArgs onFail) { + execute(() -> { + try { + ArticoloOrdine articolo = mRepository.findArticoloByOrdineAndBarcode(ordine.getOrdineId(), barcode); + onSuccess.run(articolo); + } catch (Exception e) { + onFail.run(e); + } + }); + } +public void findArticoloByScanAndOrdine(Ordine ordine, String barcode, RunnableArgs onSuccess, RunnableArgs onFail) { + execute(() -> { + try { + String scannedCode = barcode; + ArticoloOrdine articolo = mRepository.findArticoloByCodMartAndOrdine(ordine.getOrdineId(), scannedCode); + if (articolo == null){ + articolo = mRepository.findArticoloByBarcodeAndOrdine(ordine.getOrdineId(), scannedCode); + if (articolo == null){ + scannedCode= StringUtils.leftPad(scannedCode,13,'0'); + articolo = mRepository.findArticoloByBarcodeAndOrdine(ordine.getOrdineId(), scannedCode); + } + } + onSuccess.run(articolo); + } catch (Exception e) { + onFail.run(e); + } + }); + } + + public void findArticoliByOrdine(Ordine ordine, RunnableArgs> onLoad, RunnableArgs onError) { + execute(() -> { + try { + onLoad.run(mRepository.findArticoliByOrdine(ordine.getOrdineId())); + } catch (Exception e) { + onError.run(e); + } + }); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/GrigliaRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/GrigliaRepository.java index 33896dff..437d9e65 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/GrigliaRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/GrigliaRepository.java @@ -5,6 +5,8 @@ import java.util.List; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.core.data_store.db.dao.GrigliaDao; import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; +import it.integry.integrywmsnative.core.data_store.db.wrappers.GrigliaWrapper; +import it.integry.integrywmsnative.core.expansion.BaseActivity; import it.integry.integrywmsnative.core.expansion.RunnableArgs; public class GrigliaRepository extends Repository{ @@ -26,7 +28,7 @@ public class GrigliaRepository extends Repository{ execute(query); } - public void findByCodAlis(String codAlis ,RunnableArgs onSuccess, RunnableArgs onError){ + public void findByCodAlis(String codAlis , RunnableArgs onSuccess, RunnableArgs onError){ Runnable query = ()->{ try{ onSuccess.run(mRepository.findByCodAlis(codAlis)); @@ -52,4 +54,14 @@ public class GrigliaRepository extends Repository{ } }); } + + public void findGrigliaById(int idGriglia, RunnableArgs onLoad, RunnableArgs onFail) { + execute(()->{ + try{ + onLoad.run(mRepository.findGrigliaById(idGriglia)); + }catch (Exception e){ + onFail.run(e); + } + }); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/OrdineRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/OrdineRepository.java index c22b925b..6b220cd3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/OrdineRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/OrdineRepository.java @@ -4,13 +4,15 @@ import java.util.List; import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao; +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.view_model.OrdineWithGriglia; +import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; import it.integry.integrywmsnative.core.expansion.RunnableArgs; public class OrdineRepository extends Repository{ - OrdineDao mRepository; + private OrdineDao mRepository; public OrdineRepository() { this.mRepository = MainApplication.getOrdiniRepository(); @@ -37,5 +39,37 @@ public class OrdineRepository extends Repository{ execute(query); } + public void selectAllOpenOrders(Griglia griglia, RunnableArgs> onSuccess, RunnableArgs onError){ + Runnable query = ()->{ + try{ + onSuccess.run(mRepository.getAllOpenOrdersByGriglia(griglia.getGrigliaId())); + }catch (Exception e){ + onError.run(e); + } + }; + execute(query); + } + public void insert(Ordine ordine, RunnableArgs onSuccess, RunnableArgs onError){ + execute(()->{ + try{ + Long id = mRepository.insert(ordine); + onSuccess.run(id.intValue()); + }catch (Exception e){ + onError.run(e); + } + }); + } + + + public void updateOrder(Ordine ordine, RunnableArgs onSuccess, RunnableArgs onError) { + execute(()->{ + try{ + mRepository.update(ordine); + onSuccess.run(ordine); + }catch (Exception e){ + onError.run(e); + } + }); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java index 7aa4b6e7..9dc95f6b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java @@ -19,7 +19,7 @@ public class ArticoloDTO { private String barcode; - private int merceDaRic; + private float merceDaRic; private float mediaSett; @@ -27,7 +27,7 @@ public class ArticoloDTO { private String flagQtaMultipla; - private int qtaMinOrdinabile; + private float qtaMinOrdinabile; public String getCodMart() { return codMart; @@ -69,11 +69,11 @@ public class ArticoloDTO { this.barcode = barCode; } - public int getMerceDaRic() { + public float getMerceDaRic() { return merceDaRic; } - public void setMerceDaRic(int merceDaRic) { + public void setMerceDaRic(float merceDaRic) { this.merceDaRic = merceDaRic; } @@ -93,11 +93,11 @@ public class ArticoloDTO { this.flagQtaMultipla = flagQtaMultipla; } - public int getQtaMinOrdinabile() { + public float getQtaMinOrdinabile() { return qtaMinOrdinabile; } - public void setQtaMinOrdinabile(int qtaMinOrdinabile) { + public void setQtaMinOrdinabile(float qtaMinOrdinabile) { this.qtaMinOrdinabile = qtaMinOrdinabile; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/OrdineWithGriglia.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/OrdineWithGriglia.java index aaf1337b..e9c0a785 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/OrdineWithGriglia.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/OrdineWithGriglia.java @@ -14,12 +14,6 @@ public class OrdineWithGriglia { @Embedded private Griglia griglia; - @Ignore - public BindableBoolean selected; - - public OrdineWithGriglia() { - this.selected = new BindableBoolean(false); - } public Ordine getOrdine() { return ordine; @@ -36,13 +30,4 @@ public class OrdineWithGriglia { public void setGriglia(Griglia griglia) { this.griglia = griglia; } - - public boolean isSelected() { - return selected.get(); - } - - public OrdineWithGriglia setSelected(boolean selected) { - this.selected.set(selected); - return this; - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/GrigliaWrapper.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/GrigliaWrapper.java new file mode 100644 index 00000000..0640a799 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/GrigliaWrapper.java @@ -0,0 +1,28 @@ +package it.integry.integrywmsnative.core.data_store.db.wrappers; + +import androidx.room.Embedded; + +import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; + +public class GrigliaWrapper { + @Embedded + private Griglia griglia; + + private int countArticoli = 0; + + public Griglia getGriglia() { + return griglia; + } + + public void setGriglia(Griglia griglia) { + this.griglia = griglia; + } + + public int getCountArticoli() { + return countArticoli; + } + + public void setCountArticoli(int countArticoli) { + this.countArticoli = countArticoli; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/OrdineWrapper.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/OrdineWrapper.java new file mode 100644 index 00000000..c50209b1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/OrdineWrapper.java @@ -0,0 +1,29 @@ +package it.integry.integrywmsnative.core.data_store.db.wrappers; + +import androidx.room.Embedded; + +import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; + +public class OrdineWrapper { + + @Embedded + private Ordine ordine; + + private int countArticoli = 0; + + public Ordine getOrdine() { + return ordine; + } + + public void setOrdine(Ordine ordine) { + this.ordine = ordine; + } + + public int getCountArticoli() { + return countArticoli; + } + + public void setCountArticoli(int countArticoli) { + this.countArticoli = countArticoli; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java index 717813d8..5e438ca2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java @@ -2,12 +2,29 @@ package it.integry.integrywmsnative.core.rest.consumers; import android.util.Log; +import com.annimon.stream.Stream; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; +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.repository.OrdineRepository; +import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; import it.integry.integrywmsnative.core.data_store.db.view_model.GrigliaDTO; import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityLogger; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.ArtDTO; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.OrdineDTO; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.SaveDTO; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -18,14 +35,34 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { public static void getArticoliListino(String codAlis, RunnableArgs onSuccess, RunnableArgs onFailed) { - PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class); ordiniARestService .getArticoliListino(codAlis, SettingsManager.i().userSession.profileDB, SettingsManager.i().user.username, SettingsManager.i().user.password) .enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { - analyzeAnswer(response,"getArticoliListino",onSuccess,onFailed); + analyzeAnswer(response, "getArticoliListino", griglia -> { + + List listaArticoli = new ArrayList<>(); + Stream.of(griglia.getGrigliaAcquistiChild()) + .map(ArticoloDTO::getCodMart) + .distinct() + .withoutNulls() + .forEach(art -> { + List inList = Stream.of(griglia.getGrigliaAcquistiChild()).filter(x -> x.getCodMart().equalsIgnoreCase(art)).toList(); + if (inList.size() > 1) { + for (ArticoloDTO articolo : inList) { + if (!articolo.getBarCode().endsWith(articolo.getCodMart())) { + listaArticoli.add(articolo); + } + } + } else { + listaArticoli.add(inList.get(0)); + } + }); + griglia.setGrigliaAcquistiChild(listaArticoli); + onSuccess.run(griglia); + }, onFailed); } @Override @@ -37,4 +74,73 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { }); } + public static void saveOrdine(Ordine ordine, List articoli, Griglia griglia, RunnableArgs onSuccess, RunnableArgs onFailed) { + SaveDTO saveDTO = new SaveDTO(); + OrdineDTO ordineDTO = new OrdineDTO(); + List artRows = new ArrayList<>(); + + int i = 0; + for (ArticoloOrdine art : articoli) { + i++; + artRows.add(convertArtToDTO(art,i)); + } + + ordineDTO.setChiaveGriglia(griglia.getCodAlis()); + ordineDTO.setDataConsD(new Date()); + ordineDTO.setArtRows(artRows); + saveDTO.setGestione("O"); + saveDTO.setOrdineDTO(ordineDTO); + + + PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class); + ordiniARestService + .saveOrdine(saveDTO, SettingsManager.i().userSession.profileDB, SettingsManager.i().user.username, SettingsManager.i().user.password) + .enqueue(new Callback>>() { + @Override + public void onResponse(Call>> call, Response>> response) { + if (response.body() != null && response.body().size() > 0){ + analyzeListOfAnswers(response, "getArticoliListino", dtoList-> { + if (dtoList.size() > 0){ + DtbOrdt dto = dtoList.get(0); + ordine.setTransmitted(true); + ordine.setTransmissionDate(new Date()); + ordine.setGestione(dto.getGestione()); + ordine.setDataOrdS(dto.getDataOrd()); + ordine.setCodMdep(dto.getCodMdep()); + ordine.setNumOrd(dto.getNumOrd()); + OrdineRepository repository = new OrdineRepository(); + repository.updateOrder(ordine,onSuccess,onFailed); + }else{ + onFailed.run(new Exception("Nessun ordine generato")); + } + }, onFailed); + } + } + + @Override + public void onFailure(Call>>call, Throwable t) { + Log.e("saveOrdineTerminale_pv", t.toString()); + UtilityLogger.errorMe(new Exception(t)); + onFailed.run(new Exception(t)); + } + }); + + + + } + + private static ArtDTO convertArtToDTO(ArticoloOrdine art, int rigaOrd) { + ArtDTO dto = new ArtDTO(); + dto.setRigaOrd(rigaOrd); + dto.setCodMart(art.getCodMart()); + dto.setBarcode(art.getBarCode()); + dto.setDescrizione(art.getDescrizione()); + dto.setDataInsD(art.getDataIns()); + dto.setUntMis(art.getUntMis()); + dto.setQta(BigDecimal.valueOf(art.getQtaOrd())); + dto.setQtaCnf(BigDecimal.valueOf(art.getQtaCnf())); + dto.setColli(BigDecimal.ZERO); + return dto; + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumerService.java index ec53b2e2..30ff9292 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumerService.java @@ -1,9 +1,13 @@ package it.integry.integrywmsnative.core.rest.consumers; -import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; +import java.util.List; + import it.integry.integrywmsnative.core.data_store.db.view_model.GrigliaDTO; +import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.SaveDTO; import retrofit2.Call; +import retrofit2.http.Body; import retrofit2.http.Header; import retrofit2.http.POST; import retrofit2.http.Query; @@ -14,5 +18,5 @@ public interface PVOrdiniAcquistoRESTConsumerService { Call> getArticoliListino(@Query("chiaveGriglia") String codAlis, @Query("profileDb") String profileDb, @Header("username") String username, @Header("password") String password); @POST("SM2SaveTerminalino") - Call> saveOrdine(@Query("barcode") String barcodeProd,@Query("profileDb") String profileDb, @Header("username") String username, @Header("password") String password); + Call>> saveOrdine(@Body SaveDTO saveDTO, @Query("profileDb") String profileDb, @Header("username") String username, @Header("password") String password); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java index ba413697..9257eefb 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java @@ -2,6 +2,7 @@ package it.integry.integrywmsnative.core.rest.consumers; import android.util.Log; +import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.core.rest.CommonRESTException; @@ -14,11 +15,11 @@ import retrofit2.Response; public class _BaseRESTConsumer { - public static void analyzeAnswer(Response> response, String logTitle, final ISimpleOperationCallback callback){ - if(response.isSuccessful()) { - if(response.body() != null) { - if(response.body().getEsito() == EsitoType.OK) { - if(!UtilityString.isNullOrEmpty(response.body().getErrorMessage())){ + public static void analyzeAnswer(Response> response, String logTitle, final ISimpleOperationCallback callback) { + if (response.isSuccessful()) { + if (response.body() != null) { + if (response.body().getEsito() == EsitoType.OK) { + if (!UtilityString.isNullOrEmpty(response.body().getErrorMessage())) { callback.onFailed(new Exception(response.body().getErrorMessage())); } else { @@ -43,7 +44,7 @@ public class _BaseRESTConsumer { } } - public static void analyzeAnswer(Response> response, String logTitle, RunnableArgs onComplete, RunnableArgs onFailed){ + public static void analyzeAnswer(Response> response, String logTitle, RunnableArgs onComplete, RunnableArgs onFailed) { analyzeAnswer(response, logTitle, new ISimpleOperationCallback() { @Override public void onSuccess(T value) { @@ -58,11 +59,11 @@ public class _BaseRESTConsumer { } - public static void analyzeAnswerList(Response> response, String logTitle, final ISimpleOperationCallback> callback){ - if(response.isSuccessful()) { - if(response.body() != null) { - if(response.body().getEsito() == EsitoType.OK) { - if(!UtilityString.isNullOrEmpty(response.body().getErrorMessage())){ + public static void analyzeAnswerList(Response> response, String logTitle, final ISimpleOperationCallback> callback) { + if (response.isSuccessful()) { + if (response.body() != null) { + if (response.body().getEsito() == EsitoType.OK) { + if (!UtilityString.isNullOrEmpty(response.body().getErrorMessage())) { callback.onFailed(new Exception(response.body().getErrorMessage())); } else { @@ -84,7 +85,7 @@ public class _BaseRESTConsumer { } } - public static void analyzeAnswerList(Response> response, String logTitle, RunnableArgs> onComplete, RunnableArgs onFailed){ + public static void analyzeAnswerList(Response> response, String logTitle, RunnableArgs> onComplete, RunnableArgs onFailed) { analyzeAnswerList(response, logTitle, new ISimpleOperationCallback>() { @Override public void onSuccess(List value) { @@ -98,4 +99,35 @@ public class _BaseRESTConsumer { }); } + public static void analyzeListOfAnswers(Response>> responseList, String logTitle, RunnableArgs> onComplete, RunnableArgs onFailed) { + if (responseList.isSuccessful()) { + if (responseList.body() != null) { + List analyzedList = new ArrayList<>(); + for (ServiceRESTResponse response : responseList.body()){ + if (response.getEsito() == EsitoType.OK) { + if (!UtilityString.isNullOrEmpty(response.getErrorMessage())) { + onFailed.run(new Exception(response.getErrorMessage())); + } else { + T dataObj = response.getDto() != null ? + response.getDto() : + response.getEntity(); + if (dataObj !=null ) analyzedList.add(dataObj); + + } + } else { + Log.e(logTitle, response.getErrorMessage()); + onFailed.run(CommonRESTException.tryRecognizeException(response.getErrorMessage())); + return; + } + } + onComplete.run(analyzedList); + } else { + Log.e(logTitle, responseList.message()); + onFailed.run(new Exception(responseList.message())); + } + } else { + Log.e(logTitle, "Status " + responseList.code() + ": " + responseList.message()); + onFailed.run(new Exception("Status " + responseList.code() + ": " + responseList.message())); + } + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java index 6ac2a5e2..23faedda 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityProgress.java @@ -20,6 +20,11 @@ public class UtilityProgress { progress.show(); return progress; } + public static Dialog createDefaultProgressDialog(Context mContext,String subtitle) { + Dialog progress = DialogProgress.make(mContext,subtitle); + progress.show(); + return progress; + } public static Thread makeProgressBarIndeterminate(ProgressBar progressBar) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilitySettings.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilitySettings.java index 7c41cb75..4d111d95 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilitySettings.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilitySettings.java @@ -1,5 +1,6 @@ package it.integry.integrywmsnative.core.utility; +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.settings.SettingsModel; @@ -9,7 +10,7 @@ public class UtilitySettings { public static void logout(){ SettingsManager.i().user = null; SettingsManager.i().userSession = null; - + MainApplication.clearDB(); SettingsManager.update(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/PVOrdiniAcquistoGrigliaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/PVOrdiniAcquistoGrigliaFragment.java deleted file mode 100644 index 67945929..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/PVOrdiniAcquistoGrigliaFragment.java +++ /dev/null @@ -1,73 +0,0 @@ -package it.integry.integrywmsnative.gest.ordini_acquisto_pv; - -import android.content.Context; -import android.os.Bundle; -import android.text.Html; -import android.text.SpannableString; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.appcompat.widget.AppCompatTextView; -import androidx.databinding.DataBindingUtil; -import androidx.fragment.app.Fragment; - -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; -import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; -import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; -import it.integry.integrywmsnative.core.interfaces.ITitledFragment; -import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoBinding; -import it.integry.integrywmsnative.gest.ordini_acquisto_pv.core.OrdiniAcquistoElencoHelper; -import it.integry.integrywmsnative.gest.ordini_acquisto_pv.dialogs.DialogScanLisA; -import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; - -public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitledFragment { - - private FragmentPvOrdiniAcquistoBinding mBinding; - private OrdiniAcquistoElencoHelper mHelper; - private Griglia mGriglia; - - - public PVOrdiniAcquistoGrigliaFragment() { - } - - public static PVOrdiniAcquistoGrigliaFragment newInstance() { - PVOrdiniAcquistoGrigliaFragment fragment = new PVOrdiniAcquistoGrigliaFragment(); - Bundle args = new Bundle(); - fragment.setArguments(args); - return fragment; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { - // Inflate the layout for this fragment - - mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_pv_ordini_acquisto, container, false); - - init(); - return mBinding.getRoot(); - } - - private void init() { - - BarcodeManager.enable(); - DialogScanLisA.make(getActivity(), griglia -> { - if(griglia == null) { - ((IPoppableActivity) getActivity()).pop(); - } else { - setGriglia(griglia); - } - }).show(); - - } - - @Override - public void onCreateActionBar(AppCompatTextView titleText, Context context) { - titleText.setText(context.getText(R.string.pv_elenco_ordiniA_title_fragment).toString()); - } - - private void setGriglia(Griglia griglia){ - mGriglia = griglia; - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/core/OrdiniAcquistoElencoHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/core/OrdiniAcquistoElencoHelper.java deleted file mode 100644 index 28ec5c47..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/core/OrdiniAcquistoElencoHelper.java +++ /dev/null @@ -1,13 +0,0 @@ -package it.integry.integrywmsnative.gest.ordini_acquisto_pv.core; - -import android.content.Context; - -public class OrdiniAcquistoElencoHelper { - - private Context mContext; - - public OrdiniAcquistoElencoHelper(Context context) { - this.mContext = context; - } - -} 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 new file mode 100644 index 00000000..43077dc7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -0,0 +1,179 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit; + +import android.app.Dialog; +import android.os.Bundle; +import android.text.Html; +import android.text.SpannableString; +import android.view.View; +import android.widget.Toast; + +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +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.Griglia; +import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; +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.adapter.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.view.dialogs.base.DialogSimpleMessageHelper; + +public class PVOrdineAcquistoEditActivity extends BaseActivity { + + private Ordine mOrdine; + private Griglia mGriglia; + private List mArticoli = new ArrayList<>(); + private PVEditOrderHelper mhelper; + private ActivityPvordineAcquistoEditBinding mBinding; + private int mBarcodeScannerIstanceID; + private OrdineAcquistoArtListAdapter mAdapter; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mhelper = new PVEditOrderHelper(this); + mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pvordine_acquisto_edit); + mBinding.setViewModel(this); + mOrdine = DataCache.retrieveItem(getIntent().getStringExtra("keyOrdine")); + if (mOrdine.isTransmitted()){ + Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show(); + closeEdit(); + } + String testataOrdString = String.format(this.getString(R.string.ord_acq_testata), String.valueOf(mOrdine.getOrdineId()), UtilityDate.formatDate(mOrdine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + mBinding.orderIdentifier.setText(Html.fromHtml(testataOrdString)); + initRecyclerView(); + fetchDetails(); + mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessfull(this::onScanSuccessful) + .setOnScanFailed(this::handleException)); + + } + + private void initRecyclerView() { + mBinding.articoliOrdineList.setHasFixedSize(true); + + mBinding.articoliOrdineList.setLayoutManager(new LinearLayoutManager(this)); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider)); + mBinding.articoliOrdineList.addItemDecoration(itemDecorator); + mAdapter = new OrdineAcquistoArtListAdapter(this, mArticoli, this::addArticolo); + mBinding.articoliOrdineList.setAdapter(mAdapter); + } + + private void handleException(Exception ex) { + runOnUiThread(()->{ + BarcodeManager.enable(); + UtilityExceptions.defaultException(this, ex, false); + }); + } + + private void onScanSuccessful(BarcodeScanDTO dto) { + BarcodeManager.disable(); + final Dialog progress = UtilityProgress.createDefaultProgressDialog(this); + mhelper.checkArticolo( + mOrdine, + dto.getStringValue(), + articoloOrdine -> { + progress.dismiss(); + addArticolo(articoloOrdine); + }, + e -> { + progress.dismiss(); + handleException(e); + } + ); + } + + private void addArticolo(ArticoloOrdine articoloOrdine) { + runOnUiThread(()->{ + EditArticoloDialog.make(this, articoloOrdine, articolo -> { + BarcodeManager.enable(); + if (articolo == null) { + Toast.makeText(this, "Inserimento articolo annullato", Toast.LENGTH_SHORT).show(); + } else { + fetchArticoli(); + } + }).show(); + }); + } + + private void fetchDetails() { + fetchGriglia(); + fetchArticoli(); + } + + private void fetchGriglia() { + mhelper.loadGriglia(mOrdine.getIdGriglia(), griglia -> { + runOnUiThread(()->{ + mGriglia = griglia; + mBinding.codAlis.setText(mGriglia.getCodAlis()); + }); + }, this::handleException); + } + + private void fetchArticoli() { + final Dialog progress = UtilityProgress.createDefaultProgressDialog(this); + mhelper.loadArticoli(mOrdine, articoli -> { + progress.dismiss(); + mArticoli = articoli; + runOnUiThread(()->{ + mAdapter.updateItems(mArticoli); + mBinding.countArtOrd.setText(String.valueOf(mArticoli.size())); + mBinding.pvOrdineExport.setVisibility(mArticoli.size() > 0 ? View.VISIBLE : View.GONE); + }); + }, this::handleException); + } + + public void closeEdit() { + onBackPressed(); + } + + public void exportOrdine() { + final Dialog progress = UtilityProgress.createDefaultProgressDialog(this); + PVOrdiniAcquistoRESTConsumer.saveOrdine(mOrdine , mArticoli,mGriglia,(ordine)->{ + progress.dismiss(); + runOnUiThread(()-> { + Toast.makeText(this, "Ordine salvato con successo", Toast.LENGTH_SHORT).show(); + onBackPressed(); + }); + },e-> runOnUiThread(()-> { + progress.dismiss(); + UtilityExceptions.defaultException(this,e); + })); + } + + @Override + public void onBackPressed() { + BarcodeManager.removeCallback(mBarcodeScannerIstanceID); + super.onBackPressed(); + } + + private void showDataSavedDialog() { + + DialogSimpleMessageHelper.makeSuccessDialog( + this, + getString(R.string.completed), + new SpannableString(getString(R.string.data_saved)), + null, null).show(); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/adapter/OrdineAcquistoArtListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/adapter/OrdineAcquistoArtListAdapter.java new file mode 100644 index 00000000..ed070376 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/adapter/OrdineAcquistoArtListAdapter.java @@ -0,0 +1,125 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.adapter; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import com.annimon.stream.Stream; +import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; +import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; +import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.databinding.FragmentPvArticoliOrdineAcquistoListSingleItemBinding; +import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoListHeaderBinding; +import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoListSingleItemBinding; +import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; + +public class OrdineAcquistoArtListAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { + + + private Context mContext; + + private List mDataset; + RunnableArgs mOnItemSelect; + + + static class SubheaderHolder extends RecyclerView.ViewHolder { + + FragmentPvOrdiniAcquistoListHeaderBinding binding; + + SubheaderHolder(FragmentPvOrdiniAcquistoListHeaderBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + } + + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + FragmentPvArticoliOrdineAcquistoListSingleItemBinding binding; + + SingleItemViewHolder(FragmentPvArticoliOrdineAcquistoListSingleItemBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } + + + public OrdineAcquistoArtListAdapter(Context context, List myDataset, RunnableArgs onItemSelect) { + mContext = context; + mDataset = orderItems(myDataset); + mOnItemSelect = onItemSelect; + } + + public void updateItems(List updatedDataset) { + mDataset.clear(); + mDataset.addAll(orderItems(updatedDataset)); + notifyDataSetChanged(); + notifyDataChanged(); + } + + + private List orderItems(List dataset) { + return Stream.of(dataset) + .distinctBy(ArticoloOrdine::getArticoloOrdineId) + .sortBy(x -> UtilityDate.formatDate(x.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)) + .toList(); + + } + + + @Override + public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { + FragmentPvOrdiniAcquistoListHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_pv_ordini_acquisto__list_header, parent, false); + return new SubheaderHolder(binding); + } + + @Override + public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { + FragmentPvArticoliOrdineAcquistoListSingleItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_pv_articoli_ordine_acquisto__list_single_item, parent, false); + return new SingleItemViewHolder(binding); + } + + + @Override + public void onBindSubheaderViewHolder(OrdineAcquistoArtListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) { + subheaderHolder.binding.title.setText(mContext.getString(R.string.ordini_a_aperti)); + } + + @Override + public void onBindItemViewHolder(OrdineAcquistoArtListAdapter.SingleItemViewHolder h, int itemPosition) { + final ArticoloOrdine articoloOrdine = mDataset.get(itemPosition); + final OrdineAcquistoArtListAdapter.SingleItemViewHolder holder = h; + + holder.binding.setArticolo(articoloOrdine); + holder.binding.getRoot().setOnClickListener(v -> mOnItemSelect.run(articoloOrdine)); + + } + + + @Override + public boolean onPlaceSubheaderBetweenItems(int position) { + return false; + } + + @Override + public int getItemSize() { + return mDataset.size(); + } + + @Override + public String getSectionTitle(int position) { + return null; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java new file mode 100644 index 00000000..a44fe39b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/EditArticoloDialog.java @@ -0,0 +1,149 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; + +import androidx.databinding.DataBindingUtil; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; +import it.integry.integrywmsnative.core.expansion.BaseDialog; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityDialog; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.databinding.DialogPvEditArticoloBinding; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper.PVEditOrderHelper; + +public class EditArticoloDialog { + + private Activity mContext; + + private Dialog mDialog; + + private DialogPvEditArticoloBinding mBinding; + + private PVEditOrderHelper mHelper; + + private ArticoloOrdine mArticolo; + + private ArticoloOrdine mSavedArt; + + private boolean mLockedInput = false; + + private EditArticoloDialog(Activity context, ArticoloOrdine articolo, RunnableArgs onDialogDismiss) { + mContext = context; + mArticolo = articolo; + mHelper = new PVEditOrderHelper(context); + + LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_pv_edit_articolo, null, false); + mBinding.setViewmodel(this); + + mDialog = new BaseDialog(context); + mDialog.setContentView(mBinding.getRoot()); + UtilityDialog.setTo90PercentSize(mContext, mDialog); + mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + + mBinding.qtaTot.setText(String.valueOf(mArticolo.getQtaOrd())); + mSavedArt = null; + + mDialog.setOnDismissListener(dialog -> { + onDialogDismiss.run(mSavedArt); + }); + setListeners(); + } + + private void setListeners() { + mBinding.qtaTot.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + setQtaOrd(s.toString().length() >0 ? Float.parseFloat(s.toString()) : 0); + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + mBinding.qtaCnf.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + setQtaCnf(s.toString().length() >0 ? Float.parseFloat(s.toString()) : 0); + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } + public void setQtaCnf(float qtaCnf){ + if (mLockedInput){ + mLockedInput = false; + }else{ + mLockedInput = true; + + float qtaTot = qtaCnf * mArticolo.getQtaCnf(); + mBinding.qtaTot.setText(String.valueOf(qtaTot)); + } + } + public void setQtaOrd(float qtaOrd){ + mArticolo.setQtaOrd(qtaOrd); + if (mLockedInput){ + mLockedInput = false; + }else{ + mLockedInput = true; + float qtaCnf = qtaOrd / mArticolo.getQtaCnf(); + mBinding.qtaCnf.setText(String.valueOf(qtaCnf)); + } + } + + public static Dialog make(Activity context, ArticoloOrdine articolo, RunnableArgs onDialogDismiss) { + return new EditArticoloDialog(context, articolo, onDialogDismiss).mDialog; + } + + public void saveAndExit(){ + final Dialog progress = UtilityProgress.createDefaultProgressDialog(mContext); + try{ + float qtaOrd = Float.parseFloat(mBinding.qtaTot.getText().toString()); + if (qtaOrd <= 0){ + throw new Exception("La quantità ordinata deve essere maggiore di 0"); + } + mArticolo.setQtaOrd(qtaOrd); + + }catch (Exception e){ + mContext.runOnUiThread(()-> UtilityExceptions.defaultException(mContext,e)); + } + mHelper.saveArticoloToOrdine(mArticolo, ()->{ + mSavedArt = mArticolo; + progress.dismiss(); + mDialog.dismiss(); + },e-> mContext.runOnUiThread(()-> UtilityExceptions.defaultException(mContext,e))); + } + + public ArticoloOrdine getArticolo() { + return mArticolo; + } + + public void cancel() { + mArticolo = null; + mDialog.dismiss(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/ArtDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/ArtDTO.java new file mode 100644 index 00000000..1a8d5d9e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/ArtDTO.java @@ -0,0 +1,134 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto; + +import java.math.BigDecimal; +import java.util.Date; + +import it.integry.integrywmsnative.core.utility.UtilityDate; + +public class ArtDTO { + private Integer rigaOrd; + + private String codMart; + + private String barcode; + + private String descrizione; + + private String dataIns; + + private String untMis; + + private BigDecimal qta; + + private BigDecimal qtaCnf; + + private BigDecimal colli; + + private String partitaMag; + + private String 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 String getDataIns() { + return dataIns; + } + public Date getDataInsD() { + return UtilityDate.recognizeDateWithExceptionHandler(getDataIns()); + } + + public void setDataIns(String dataIns) { + this.dataIns = dataIns; + } + public void setDataInsD(Date dataIns) { + setDataIns(UtilityDate.formatDate(dataIns, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); + } + + + 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 String getDataScad() { + return dataScad; + } + + public void setDataScad(String dataScad) { + this.dataScad = dataScad; + } + public Date getDataScadD() { + return UtilityDate.recognizeDateWithExceptionHandler(getDataScad()); + } + + public void setDataScadD(Date dataScad) { + setDataScad(UtilityDate.formatDate(dataScad, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/OrdineDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/OrdineDTO.java new file mode 100644 index 00000000..1fe38bb4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/OrdineDTO.java @@ -0,0 +1,46 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto; + +import java.util.Date; +import java.util.List; + +import it.integry.integrywmsnative.core.utility.UtilityDate; + +public class OrdineDTO { + private String chiaveGriglia; + private String dataCons; + + private List artRows; + + public String getChiaveGriglia() { + return chiaveGriglia; + } + + public void setChiaveGriglia(String chiaveGriglia) { + this.chiaveGriglia = chiaveGriglia; + } + + public String getDataCons() { + return dataCons; + } + + public void setDataCons(String dataCons) { + this.dataCons = dataCons; + } + + public List getArtRows() { + return artRows; + } + + public void setArtRows(List artRows) { + this.artRows = artRows; + } + public Date getDataConsD() { + return UtilityDate.recognizeDateWithExceptionHandler(getDataCons()); + } + + public void setDataConsD(Date dataCons) { + setDataCons(UtilityDate.formatDate(dataCons, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/SaveDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/SaveDTO.java new file mode 100644 index 00000000..442ed0a5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/SaveDTO.java @@ -0,0 +1,24 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto; + +public class SaveDTO { + private String gestione = "O"; + + + private OrdineDTO ordineDTO; + + public String getGestione() { + return gestione; + } + + public void setGestione(String gestione) { + this.gestione = gestione; + } + + public OrdineDTO getOrdineDTO() { + return ordineDTO; + } + + public void setOrdineDTO(OrdineDTO ordineDTO) { + this.ordineDTO = ordineDTO; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java new file mode 100644 index 00000000..13fb0d5c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java @@ -0,0 +1,70 @@ +package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper; + +import android.content.Context; + +import java.util.List; + +import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine; +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.repository.ArticoliGrigliaRepository; +import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository; +import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; + +public class PVEditOrderHelper { + private Context mContext; + private GrigliaRepository mGrigliaRepository; + private ArticoliOrdineRepository mArticoliOrdineRepository; + private ArticoliGrigliaRepository mArticoliGrigliaRepository; + + public PVEditOrderHelper(Context mContext) { + this.mContext = mContext; + mGrigliaRepository = new GrigliaRepository(); + mArticoliOrdineRepository = new ArticoliOrdineRepository(); + mArticoliGrigliaRepository = new ArticoliGrigliaRepository(); + } + + public void checkArticolo(Ordine ordine, String barcode, RunnableArgs onSuccess, RunnableArgs onFail) { + try { + mArticoliOrdineRepository.findArticoloByScanAndOrdine(ordine, barcode, (articolo) -> { + if (articolo != null) { + onSuccess.run(articolo); + } else { + mArticoliGrigliaRepository.findArticoloByScanAndGriglia(barcode, ordine.getIdGriglia(), artGrid -> { + if (artGrid != null) { + onSuccess.run(artGrid.convertToArticoloOrdine(ordine)); + } else { + onFail.run(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia")); + } + }, onFail); + } + }, onFail); + + } catch (Exception e) { + onFail.run(e); + } + } + + public void loadGriglia(int idGriglia, RunnableArgs onLoad, RunnableArgs onError) { + try { + mGrigliaRepository.findGrigliaById(idGriglia, onLoad, onError); + } catch (Exception e) { + onError.run(e); + } + } + + public void loadArticoli(Ordine ordine, RunnableArgs> onLoad, RunnableArgs onError) { + try { + mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, onError); + } catch (Exception e) { + onError.run(e); + } + } + + + public void saveArticoloToOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs onFail) { + mArticoliOrdineRepository.saveArticoloToOrdine(articolo, onSave, onFail); + } +} 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 new file mode 100644 index 00000000..12793b9f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java @@ -0,0 +1,182 @@ +package it.integry.integrywmsnative.gest.pv_ordini_acquisto; + +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.SpannableString; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.appcompat.widget.AppCompatTextView; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; + +import java.util.ArrayList; +import java.util.List; + +import it.integry.integrywmsnative.R; +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.Griglia; +import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; +import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository; +import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.interfaces.IPoppableActivity; +import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.core.utility.UtilityProgress; +import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoBinding; +import it.integry.integrywmsnative.gest.pv_ordini_acquisto.core.OrdineAcquistoPvOpenListAdapter; +import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanLisA; +import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper; +import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity; +import it.integry.integrywmsnative.ui.ElevatedToolbar; +import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; + +public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitledFragment, IScrollableFragment { + + private FragmentPvOrdiniAcquistoBinding mBinding; + private OrdineAcquistoPvHelper mHelper; + private Griglia mGriglia; + private OrdineAcquistoPvOpenListAdapter mAdapter; + private List mRenderedOrderList = new ArrayList<>(); + + + public PVOrdiniAcquistoGrigliaFragment() { + mHelper = new OrdineAcquistoPvHelper(getActivity()); + } + + public static PVOrdiniAcquistoGrigliaFragment newInstance() { + PVOrdiniAcquistoGrigliaFragment fragment = new PVOrdiniAcquistoGrigliaFragment(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // Inflate the layout for this fragment + + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_pv_ordini_acquisto, container, false); + mBinding.setViewmodel(this); + + init(); + initRecyclerView(); + return mBinding.getRoot(); + } + + private void init() { + + BarcodeManager.enable(); + DialogScanLisA.make(getActivity(), griglia -> { + if (griglia == null) { + ((IPoppableActivity) getActivity()).pop(); + } else { + setGriglia(griglia); + } + }).show(); + + } + + @Override + public void onCreateActionBar(AppCompatTextView titleText, Context context) { + titleText.setText(context.getText(R.string.pv_elenco_ordiniA_title_fragment).toString()); + } + + private void setGriglia(Griglia griglia) { + mGriglia = griglia; + mBinding.fabNewOrder.setVisibility(View.VISIBLE); + mBinding.codAlis.setText(griglia.getCodAlis()); + mBinding.descrLis.setText(griglia.getDescrLisa()); + mBinding.descrDepo.setText(griglia.getDescrDepo()); + mBinding.countArtLis.setText(String.valueOf(griglia.getCountArticoli())); + + fetchOrders(); + } + + private void fetchOrders() { + final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity(), getString(R.string.ordini_a_aperti_progress)); + OrdineRepository repository = new OrdineRepository(); + repository.selectAllOpenOrders(mGriglia, (ordini) -> getActivity().runOnUiThread(() -> { + progress.dismiss(); + setOrdini(ordini); + }), (e) -> { + progress.dismiss(); + String errorMessage = e.getMessage(); + getActivity().runOnUiThread(() -> DialogSimpleMessageHelper.makeErrorDialog(getActivity(), new SpannableString(errorMessage), null, null).show()); + }); + } + + private void setOrdini(List ordini) { + mBinding.ordiniAApertiMainList.setVisibility(ordini != null && ordini.size() > 0 ? View.VISIBLE : View.GONE); + mBinding.ordiniAEmptyView.setVisibility(ordini == null || ordini.size() <= 0 ? View.VISIBLE : View.GONE); + refreshRenderedOrdini(ordini); + mAdapter.updateItems(mRenderedOrderList); + } + + public Griglia getGriglia() { + return mGriglia; + } + + private void initRecyclerView() { + mBinding.ordiniAApertiMainList.setHasFixedSize(true); + + mBinding.ordiniAApertiMainList.setLayoutManager(new LinearLayoutManager(getActivity())); + + DividerItemDecoration itemDecorator = new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL); + itemDecorator.setDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.divider)); + mBinding.ordiniAApertiMainList.addItemDecoration(itemDecorator); + mAdapter = new OrdineAcquistoPvOpenListAdapter(getActivity(), mRenderedOrderList, selectOrdine); + mBinding.ordiniAApertiMainList.setAdapter(mAdapter); + } + + private RunnableArgs selectOrdine = ordine -> { + + Intent myIntent = new Intent(getActivity(), PVOrdineAcquistoEditActivity.class); + + String keyOrdine = DataCache.addItem(ordine); + myIntent.putExtra("keyOrdine", keyOrdine); + + getActivity().startActivity(myIntent); + + }; + + private void refreshRenderedOrdini(List ordini) { + mRenderedOrderList.clear(); + if (ordini != null) mRenderedOrderList.addAll(ordini); + } + + public void createNewOrder() { + final Dialog progress = UtilityProgress.createDefaultProgressDialog(getActivity(), getString(R.string.ordini_a_aperti_progress)); + mHelper.createNewOrder(mGriglia, order -> { + progress.dismiss(); + getActivity().runOnUiThread(()-> selectOrdine.run(order)); + + }, e -> getActivity().runOnUiThread(() -> UtilityExceptions.defaultException(getActivity(), e, progress))); + } + + @Override + public void setScrollToolbar(ElevatedToolbar toolbar) { + + } + + @Override + public void setOnPreDestroy(Runnable onPreDestroy) { + + } + + @Override + public void onResume() { + super.onResume(); + if (mGriglia != null){ + fetchOrders(); + } + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/PVOrdiniAcquistoTransmittedListFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoTransmittedListFragment.java similarity index 92% rename from app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/PVOrdiniAcquistoTransmittedListFragment.java rename to app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoTransmittedListFragment.java index ec82aa7a..93a9d429 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/PVOrdiniAcquistoTransmittedListFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoTransmittedListFragment.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.ordini_acquisto_pv; +package it.integry.integrywmsnative.gest.pv_ordini_acquisto; import android.app.Dialog; import android.content.Context; @@ -23,8 +23,7 @@ import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.FragmentPvOrdiniATrasmessiElencoBinding; -import it.integry.integrywmsnative.gest.ordini_acquisto_pv.core.OrdineAcquistoPvTransmittedListAdapter; -import it.integry.integrywmsnative.gest.ordini_acquisto_pv.core.OrdiniAcquistoElencoHelper; +import it.integry.integrywmsnative.gest.pv_ordini_acquisto.core.OrdineAcquistoPvTransmittedListAdapter; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.dialog.DialogOrdineProduzioneFiltroAvanzato; import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; @@ -32,15 +31,11 @@ import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageHelper; public class PVOrdiniAcquistoTransmittedListFragment extends Fragment implements ITitledFragment, IScrollableFragment, IFilterableFragment { private FragmentPvOrdiniATrasmessiElencoBinding mBinding; - private OrdiniAcquistoElencoHelper mHelper; - private ElevatedToolbar mToolbar; private OrdineAcquistoPvTransmittedListAdapter mAdapter; private List mOriginalOrderList; private List mRenderedOrderList = new ArrayList<>(); - private AppCompatTextView mAppBarTitle; - private DialogOrdineProduzioneFiltroAvanzato.DialogOrdineProduzioneFiltroAvanzatoViewModel mAppliedFilterViewModel; public PVOrdiniAcquistoTransmittedListFragment() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/core/OrdineAcquistoPvOpenListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/core/OrdineAcquistoPvOpenListAdapter.java new file mode 100644 index 00000000..bdec5020 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/core/OrdineAcquistoPvOpenListAdapter.java @@ -0,0 +1,132 @@ +package it.integry.integrywmsnative.gest.pv_ordini_acquisto.core; + +import android.content.Context; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.databinding.DataBindingUtil; +import androidx.recyclerview.widget.RecyclerView; + +import com.annimon.stream.Stream; +import com.zhukic.sectionedrecyclerview.SectionedRecyclerViewAdapter; + +import java.util.List; + +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; +import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoListHeaderBinding; +import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoListSingleItemBinding; +import it.integry.integrywmsnative.ui.fastscroll.SectionTitleProvider; + +public class OrdineAcquistoPvOpenListAdapter extends SectionedRecyclerViewAdapter implements SectionTitleProvider { + + + private Context mContext; + + private List mDataset; + RunnableArgs mOnItemSelect; + + + static class SubheaderHolder extends RecyclerView.ViewHolder { + + FragmentPvOrdiniAcquistoListHeaderBinding binding; + + SubheaderHolder(FragmentPvOrdiniAcquistoListHeaderBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + } + + static class SingleItemViewHolder extends RecyclerView.ViewHolder { + + FragmentPvOrdiniAcquistoListSingleItemBinding binding; + + SingleItemViewHolder(FragmentPvOrdiniAcquistoListSingleItemBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + } + + + public OrdineAcquistoPvOpenListAdapter(Context context, List myDataset, RunnableArgs onItemSelect) { + mContext = context; + mDataset = orderItems(myDataset); + mOnItemSelect = onItemSelect; + } + + public void updateItems(List updatedDataset) { + mDataset.clear(); + mDataset.addAll(orderItems(updatedDataset)); + notifyDataSetChanged(); + notifyDataChanged(); + } + + + private List orderItems(List dataset) { + return Stream.of(dataset) + .distinctBy(OrdineWrapper::getOrdine) + .sortBy(x -> UtilityDate.formatDate(x.getOrdine().getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)) + .toList(); + + } + + + @Override + public SubheaderHolder onCreateSubheaderViewHolder(ViewGroup parent, int viewType) { + FragmentPvOrdiniAcquistoListHeaderBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_pv_ordini_acquisto__list_header, parent, false); + return new SubheaderHolder(binding); + } + + @Override + public SingleItemViewHolder onCreateItemViewHolder(ViewGroup parent, int viewType) { + FragmentPvOrdiniAcquistoListSingleItemBinding binding = DataBindingUtil.inflate(LayoutInflater.from(mContext), R.layout.fragment_pv_ordini_acquisto__list_single_item, parent, false); + return new SingleItemViewHolder(binding); + } + + + @Override + public void onBindSubheaderViewHolder(OrdineAcquistoPvOpenListAdapter.SubheaderHolder subheaderHolder, int nextItemPosition) { + subheaderHolder.binding.title.setText(mContext.getString(R.string.ordini_a_aperti)); + } + + @Override + public void onBindItemViewHolder(OrdineAcquistoPvOpenListAdapter.SingleItemViewHolder h, int itemPosition) { + final OrdineWrapper ordineWrapper = mDataset.get(itemPosition); + final Ordine ordine = ordineWrapper.getOrdine(); + final OrdineAcquistoPvOpenListAdapter.SingleItemViewHolder holder = h; + + + String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), String.valueOf(ordine.getOrdineId()), UtilityDate.formatDate(ordine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + + holder.binding.numArts.setText(String.format(mContext.getString(R.string.ord_acq_num_articoli), String.valueOf(ordineWrapper.getCountArticoli()))); + + holder.binding.orderIdentifier.setText(Html.fromHtml(testataOrdString)); + + holder.binding.getRoot().setOnClickListener(v -> { + mOnItemSelect.run(ordine); + }); + + } + + + @Override + public boolean onPlaceSubheaderBetweenItems(int position) { + return false; + } + + @Override + public int getItemSize() { + return mDataset.size(); + } + + @Override + public String getSectionTitle(int position) { + return null; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/core/OrdineAcquistoPvTransmittedListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/core/OrdineAcquistoPvTransmittedListAdapter.java similarity index 96% rename from app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/core/OrdineAcquistoPvTransmittedListAdapter.java rename to app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/core/OrdineAcquistoPvTransmittedListAdapter.java index d519cf6f..d7f4449e 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/core/OrdineAcquistoPvTransmittedListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/core/OrdineAcquistoPvTransmittedListAdapter.java @@ -1,4 +1,4 @@ -package it.integry.integrywmsnative.gest.ordini_acquisto_pv.core; +package it.integry.integrywmsnative.gest.pv_ordini_acquisto.core; import android.content.Context; import android.text.Html; @@ -68,7 +68,7 @@ public class OrdineAcquistoPvTransmittedListAdapter extends SectionedRecyclerVie private List orderItems(List dataset) { return Stream.of(dataset) .distinctBy(OrdineWithGriglia::getGriglia) - .sortBy(x -> UtilityDate.formatDate(x.getOrdine().getDataOrd(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)) + .sortBy(x -> UtilityDate.formatDate(x.getOrdine().getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.YMD_SLASH)) .toList(); } @@ -100,7 +100,7 @@ public class OrdineAcquistoPvTransmittedListAdapter extends SectionedRecyclerVie final OrdineAcquistoPvTransmittedListAdapter.SingleItemViewHolder holder = h; - String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), String.valueOf(ordine.getOrdine().getOrdineId()), UtilityDate.formatDate(ordine.getOrdine().getDataOrd(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), String.valueOf(ordine.getOrdine().getOrdineId()), UtilityDate.formatDate(ordine.getOrdine().getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); holder.binding.badge1.setText(ordine.getOrdine().isTransmitted() ? "TRASMESSO" : "NON TRASMESSO"); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/dialogs/DialogScanLisA.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java similarity index 71% rename from app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/dialogs/DialogScanLisA.java rename to app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java index 0f3e4f2e..6cd28d4b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/dialogs/DialogScanLisA.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java @@ -1,5 +1,6 @@ -package it.integry.integrywmsnative.gest.ordini_acquisto_pv.dialogs; +package it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs; +import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.graphics.Color; @@ -19,11 +20,11 @@ import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.DialogScanCodiceGrigliaBinding; -import it.integry.integrywmsnative.gest.ordini_acquisto_pv.helper.OrdineAcquistoPvHelper; +import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper; public class DialogScanLisA { - private Context mContext; + private Activity mContext; private Dialog mDialog; @@ -32,34 +33,28 @@ public class DialogScanLisA { private RunnableArgs mOnDialogDismiss; private OrdineAcquistoPvHelper mHelper; + private Griglia mGriglia; - private DialogScanLisA(Context context, RunnableArgs onDialogDismiss) { + private DialogScanLisA(Activity context, RunnableArgs onDialogDismiss) { mOnDialogDismiss = null; mContext = context; mHelper = new OrdineAcquistoPvHelper(context); LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); - + mGriglia = null; mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_scan_codice_griglia, null, false); mDialog = new BaseDialog(context); mDialog.setContentView(mBinding.getRoot()); mDialog.setCanceledOnTouchOutside(false); -// mDialog.setCancelable(false); mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - init(onDialogDismiss); + mOnDialogDismiss = onDialogDismiss; initBarcode(); } - public static Dialog make(Context context, RunnableArgs onDialogDismiss) { + public static Dialog make(Activity context, RunnableArgs onDialogDismiss) { return new DialogScanLisA(context, onDialogDismiss).mDialog; } - - private void init(RunnableArgs onDialogDismiss) { - mOnDialogDismiss = onDialogDismiss; - } - private void initBarcode() { int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() @@ -69,34 +64,44 @@ public class DialogScanLisA { mDialog.setOnDismissListener(dialog -> { BarcodeManager.removeCallback(barcodeIstanceID); BarcodeManager.enable(); - mOnDialogDismiss.run(null); + mOnDialogDismiss.run(mGriglia); }); } private RunnableArgs onScanSuccessfull = data -> { BarcodeManager.disable(); + final Dialog progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); + Context context = mContext; RunnableArgs mOnError = exception -> { - UtilityExceptions.defaultException(mContext,exception,progressDialog); - BarcodeManager.enable(); + mContext.runOnUiThread(()->{ + progressDialog.dismiss(); + UtilityExceptions.defaultException(context,exception); + BarcodeManager.enable(); + }); }; + + RunnableArgs onGrigliaAvaialable = griglia->{ + mContext.runOnUiThread(()->{ + progressDialog.dismiss(); + mGriglia = griglia; + mDialog.dismiss(); + }); + }; + GrigliaRepository repository = new GrigliaRepository(); + repository.findByCodAlis(data.getStringValue(),griglia->{ if (griglia != null){ + griglia.getGriglia().setCountArticoli(griglia.getCountArticoli()); if (griglia.getCountArticoli() >0){ - mOnDialogDismiss.run(griglia); + onGrigliaAvaialable.run(griglia.getGriglia()); }else{ - mHelper.updateGriglia(griglia,(grigliaEntity)->{ - progressDialog.dismiss(); - mOnDialogDismiss.run(grigliaEntity); - },mOnError); + mHelper.updateGriglia(griglia.getGriglia(), onGrigliaAvaialable,mOnError); } }else{ - mHelper.downloadAndSaveLisA(data.getStringValue(),(grigliaEntity)->{ - progressDialog.dismiss(); - mOnDialogDismiss.run(grigliaEntity); - },mOnError); + mHelper.downloadAndSaveLisA(data.getStringValue(), onGrigliaAvaialable,mOnError); } },mOnError); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/helper/OrdineAcquistoPvHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java similarity index 72% rename from app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/helper/OrdineAcquistoPvHelper.java rename to app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java index f436f304..9df45f2d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ordini_acquisto_pv/helper/OrdineAcquistoPvHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java @@ -1,14 +1,17 @@ -package it.integry.integrywmsnative.gest.ordini_acquisto_pv.helper; +package it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper; import android.content.Context; import java.util.ArrayList; +import java.util.Date; import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; 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.repository.ArticoliGrigliaRepository; import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository; +import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository; import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; @@ -18,11 +21,13 @@ public class OrdineAcquistoPvHelper { private Context mContext; private GrigliaRepository mGrigliaRepository; private ArticoliGrigliaRepository mArticoliGrigliaRepository; - + private OrdineRepository mOrdineRepository; public OrdineAcquistoPvHelper(Context mContext) { this.mContext = mContext; this.mGrigliaRepository = new GrigliaRepository(); this.mArticoliGrigliaRepository = new ArticoliGrigliaRepository(); + this.mOrdineRepository = new OrdineRepository(); + } public void downloadAndSaveLisA(String codAlis, RunnableArgs onSave, RunnableArgs onFail) { @@ -40,6 +45,7 @@ public class OrdineAcquistoPvHelper { } griglia.setDescrLisa(dto.getDescrLisa()); griglia.setDescrDepo(dto.getDescrDepo()); + griglia.setCountArticoli(dto.getGrigliaAcquistiChild().size()); mGrigliaRepository.saveGriglia(griglia, id -> { saveLisAToGriglia(dto.getGrigliaAcquistiChild(), griglia, onSave, onFail); }, onFail); @@ -47,7 +53,7 @@ public class OrdineAcquistoPvHelper { }, onFail); } - public void saveLisAToGriglia(List articoli, Griglia griglia, RunnableArgs onSave, RunnableArgs onFail) { + private void saveLisAToGriglia(List articoli, Griglia griglia, RunnableArgs onSave, RunnableArgs onFail) { List articoliGriglia = new ArrayList<>(); for (ArticoloDTO articolo : articoli) { ArticoloGriglia toSave = articolo.toArticoloGriglia(); @@ -56,4 +62,14 @@ public class OrdineAcquistoPvHelper { } mArticoliGrigliaRepository.saveArticoliToGriglia(articoliGriglia, () -> onSave.run(griglia), onFail); } + + public void createNewOrder(Griglia griglia, RunnableArgs onSuccess, RunnableArgs onError) { + Ordine ordine = new Ordine(); + ordine.setDataIns(new Date()); + ordine.setIdGriglia(griglia.getGrigliaId()); + mOrdineRepository.insert(ordine,id->{ + ordine.setOrdineId(id); + onSuccess.run(ordine); + },onError); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgress.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgress.java index b5fcd238..629d7283 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgress.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogProgress.java @@ -22,13 +22,19 @@ public class DialogProgress { private Dialog mDialog; + public static Dialog make(Context context,String subtitle) { + DialogProgress progress = new DialogProgress(context); + progress.setSubtitle(subtitle); + return progress.mDialog; + } + public static Dialog make(Context context) { return new DialogProgress(context).mDialog; } - public DialogProgress(Context context) { + private DialogProgress(Context context) { mContext = context; LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); @@ -52,8 +58,8 @@ public class DialogProgress { }); } - public void setSubtitle(String subtitle){ - mBinding.setSubtitle(subtitle); + private void setSubtitle(String subtitle){ + mBinding.subtitleText.setText(subtitle); } } diff --git a/app/src/main/res/drawable/ic_save_24.xml b/app/src/main/res/drawable/ic_save_24.xml new file mode 100644 index 00000000..a561d632 --- /dev/null +++ b/app/src/main/res/drawable/ic_save_24.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_pvordine_acquisto_edit.xml b/app/src/main/res/layout/activity_pvordine_acquisto_edit.xml new file mode 100644 index 00000000..d8bf2236 --- /dev/null +++ b/app/src/main/res/layout/activity_pvordine_acquisto_edit.xml @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_pv_edit_articolo.xml b/app/src/main/res/layout/dialog_pv_edit_articolo.xml new file mode 100644 index 00000000..f2470965 --- /dev/null +++ b/app/src/main/res/layout/dialog_pv_edit_articolo.xml @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml b/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml index fd2b2a4b..4b3bad10 100644 --- a/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml +++ b/app/src/main/res/layout/fragment_ordini_a_pv__list_single_item.xml @@ -21,8 +21,7 @@ android:paddingTop="8dp" android:paddingBottom="8dp" android:orientation="horizontal" - android:background="@drawable/bg_checked_layout" - app:backgroundTintResID="@{ordine.isSelected() ? R.color.bg_checked_layout : android.R.color.transparent}" > + android:background="@drawable/bg_checked_layout"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_pv_ordini_a_trasmessi_elenco.xml b/app/src/main/res/layout/fragment_pv_ordini_a_trasmessi_elenco.xml index 5c9bf84b..33800c29 100644 --- a/app/src/main/res/layout/fragment_pv_ordini_a_trasmessi_elenco.xml +++ b/app/src/main/res/layout/fragment_pv_ordini_a_trasmessi_elenco.xml @@ -4,7 +4,7 @@ - + + tools:context="it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoTransmittedListFragment"> + type="it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaFragment" /> @@ -26,46 +26,11 @@ android:orientation="vertical" android:background="@color/full_white"> - - - - - - - - - - - - - - - + android:paddingTop="8dp"> + + + + + + - + + android:paddingEnd="2dp"/> - + + + + + + + + + + + + + + + + + + - - @@ -175,7 +221,7 @@ android:layout_width="0dp" android:layout_height="0dp" android:orientation="horizontal" - app:layout_constraintGuide_percent="0.35"/> + app:layout_constraintGuide_percent="0.3"/> diff --git a/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_header.xml b/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_header.xml new file mode 100644 index 00000000..726cef3e --- /dev/null +++ b/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_header.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_single_item.xml b/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_single_item.xml new file mode 100644 index 00000000..74516a07 --- /dev/null +++ b/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_single_item.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 3cd7d677..ea33bf06 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -116,6 +116,7 @@ Creazione UL Quantità + Confezioni Qtà Ord @@ -268,4 +269,15 @@ Altro Home Logout + Ordini aperti + Controllo ordini aperti + %s articoli]]> + Descrizione griglia: + Descrizione deposito: + Articoli in griglia: + Griglia: + Seleziona / Crea ordine + Agigungi + Chiudi ed esporta ordine + Chiudi ordine \ 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 32723e73..6f482fc1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -113,6 +113,7 @@ LU Creation Quantity + Packages Qty Ord @@ -273,4 +274,15 @@ Transmitted Orders Select grid scan the barcode for the wanted grid + Open orders + Checking for open orders + %s items]]> + Grid description: + Storage description: + Items in grid: + Grid: + Select/Create order + Add + Close and export + Close order diff --git a/build.gradle b/build.gradle index 9ceb8929..772ddfdf 100644 --- a/build.gradle +++ b/build.gradle @@ -16,8 +16,8 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:3.5.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.google.gms:google-services:4.2.0' - classpath 'com.google.firebase:perf-plugin:1.2.1' + classpath 'com.google.gms:google-services:4.3.2' + classpath 'com.google.firebase:perf-plugin:1.3.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/dynamic_saporiveri_pv/src/main/java/it/integry/wms/dynamic_customization/extensions/MenuConfigurationSAPORIVERIPV.java b/dynamic_saporiveri_pv/src/main/java/it/integry/wms/dynamic_customization/extensions/MenuConfigurationSAPORIVERIPV.java index 948f4a6e..adc468ed 100644 --- a/dynamic_saporiveri_pv/src/main/java/it/integry/wms/dynamic_customization/extensions/MenuConfigurationSAPORIVERIPV.java +++ b/dynamic_saporiveri_pv/src/main/java/it/integry/wms/dynamic_customization/extensions/MenuConfigurationSAPORIVERIPV.java @@ -1,8 +1,7 @@ package it.integry.wms.dynamic_customization.extensions; import it.integry.integrywmsnative.core.class_router.configs.BaseMenuConfiguration; -import it.integry.integrywmsnative.gest.ordini_acquisto_pv.PVOrdiniAcquistoGrigliaFragment; -import it.integry.integrywmsnative.gest.ordini_acquisto_pv.PVOrdiniAcquistoTransmittedListFragment; +import it.integry.integrywmsnative.gest.pv_ordini_acquisto.PVOrdiniAcquistoGrigliaFragment; public class MenuConfigurationSAPORIVERIPV extends BaseMenuConfiguration { @@ -20,12 +19,12 @@ public class MenuConfigurationSAPORIVERIPV extends BaseMenuConfiguration { .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv) .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_purchase_orders_pv) .setFragmentClass(PVOrdiniAcquistoGrigliaFragment.newInstance())) - .addItem(new MenuItem() - .setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto_trasmessi) - .setTitleText(it.integry.integrywmsnative.R.string.transmitted_orders) - .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_trasmitted_orders_list) - .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_trasmitted_orders_list) - .setFragmentClass(PVOrdiniAcquistoTransmittedListFragment.newInstance())) +// .addItem(new MenuItem() +// .setID(it.integry.integrywmsnative.R.id.nav_pv_ordini_acquisto_trasmessi) +// .setTitleText(it.integry.integrywmsnative.R.string.transmitted_orders) +// .setTitleIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_trasmitted_orders_list) +// .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_trasmitted_orders_list) +// .setFragmentClass(PVOrdiniAcquistoTransmittedListFragment.newInstance())) );