bugfix e ottimizzazioni gestione ordini acquisto

This commit is contained in:
Valerio Castellana 2022-11-23 12:56:23 +01:00
parent f967514f97
commit ae8db5791e
35 changed files with 475 additions and 2674 deletions

View File

@ -2,7 +2,7 @@
"formatVersion": 1,
"database": {
"version": 12,
"identityHash": "1fbbe769d42f5fb33a56580bea8b11c6",
"identityHash": "a3c4983a84b2d615e548dcceba15ecf0",
"entities": [
{
"tableName": "articoli_griglia",
@ -192,7 +192,7 @@
},
{
"tableName": "ordini",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`ordine_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `data_ins` INTEGER, `annotazioni` TEXT, `transmitted` INTEGER NOT NULL, `transmission_date` INTEGER, `gestione` TEXT, `data_ord` INTEGER, `num_ord` INTEGER, `cod_mdep` TEXT, `id_griglia` INTEGER NOT NULL)",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`ordine_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `data_ins` INTEGER, `annotazioni` TEXT, `transmitted` INTEGER NOT NULL, `transmission_date` INTEGER, `gestione` TEXT, `data_ord` INTEGER, `num_ord` INTEGER, `cod_mdep` TEXT, `id_griglia` INTEGER NOT NULL, `cod_alis` TEXT NOT NULL)",
"fields": [
{
"fieldPath": "ordineId",
@ -253,6 +253,12 @@
"columnName": "id_griglia",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "codAlis",
"columnName": "cod_alis",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
@ -868,7 +874,7 @@
},
{
"tableName": "inventari",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `id_inventario` INTEGER, `cod_mdep` TEXT NOT NULL, `data_inventario` INTEGER, `data_reg` INTEGER, `data_ver` INTEGER, `filtro` TEXT, `flag_stato` TEXT, `flag_operazione` TEXT, `cod_anag` TEXT, `cod_dtip` TEXT, `inserito_da` TEXT, `registrato_da` TEXT, `verificato_da` TEXT, `data_ora_inizio` INTEGER, `data_ora_fine` INTEGER, `causale` TEXT, `remote_sync_date` INTEGER)",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `id_inventario` INTEGER, `cod_mdep` TEXT NOT NULL, `data_inventario` INTEGER, `data_reg` INTEGER, `data_ver` INTEGER, `filtro` TEXT, `flag_stato` TEXT, `flag_operazione` TEXT, `cod_anag` TEXT, `cod_dtip` TEXT, `inserito_da` TEXT, `registrato_da` TEXT, `verificato_da` TEXT, `data_ora_inizio` INTEGER, `data_ora_fine` INTEGER, `causale` TEXT, `zona` TEXT, `remote_sync_date` INTEGER)",
"fields": [
{
"fieldPath": "id",
@ -972,6 +978,12 @@
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "zona",
"columnName": "zona",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "remoteSyncDate",
"columnName": "remote_sync_date",
@ -1006,12 +1018,139 @@
}
],
"foreignKeys": []
},
{
"tableName": "inventario_rows",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `parent_id` INTEGER, `cod_mart` TEXT NOT NULL, `partita_mag` TEXT, `descrizione` TEXT, `qta` REAL NOT NULL DEFAULT 0, `num_cnf` REAL NOT NULL DEFAULT 0, `qta_cnf` REAL NOT NULL DEFAULT 0, `unt_mis` TEXT NOT NULL DEFAULT '0', `data_ora_inv` INTEGER, `scan_cod_barre` TEXT, `zona` TEXT, `remote_sync_date` INTEGER, FOREIGN KEY(`parent_id`) REFERENCES `inventari`(`_id`) ON UPDATE NO ACTION ON DELETE NO ACTION )",
"fields": [
{
"fieldPath": "id",
"columnName": "_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "parentId",
"columnName": "parent_id",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "codMart",
"columnName": "cod_mart",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "partitaMag",
"columnName": "partita_mag",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "descrizione",
"columnName": "descrizione",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "qta",
"columnName": "qta",
"affinity": "REAL",
"notNull": true,
"defaultValue": "0"
},
{
"fieldPath": "numConf",
"columnName": "num_cnf",
"affinity": "REAL",
"notNull": true,
"defaultValue": "0"
},
{
"fieldPath": "qtaConf",
"columnName": "qta_cnf",
"affinity": "REAL",
"notNull": true,
"defaultValue": "0"
},
{
"fieldPath": "untMis",
"columnName": "unt_mis",
"affinity": "TEXT",
"notNull": true,
"defaultValue": "'0'"
},
{
"fieldPath": "dataOraInv",
"columnName": "data_ora_inv",
"affinity": "INTEGER",
"notNull": false
},
{
"fieldPath": "scanCodBarre",
"columnName": "scan_cod_barre",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "zona",
"columnName": "zona",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "remoteSyncDate",
"columnName": "remote_sync_date",
"affinity": "INTEGER",
"notNull": false
}
],
"primaryKey": {
"columnNames": [
"_id"
],
"autoGenerate": true
},
"indices": [
{
"name": "index_inventario_rows__id",
"unique": false,
"columnNames": [
"_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_inventario_rows__id` ON `${TABLE_NAME}` (`_id`)"
},
{
"name": "index_inventario_rows_parent_id",
"unique": false,
"columnNames": [
"parent_id"
],
"orders": [],
"createSql": "CREATE INDEX IF NOT EXISTS `index_inventario_rows_parent_id` ON `${TABLE_NAME}` (`parent_id`)"
}
],
"foreignKeys": [
{
"table": "inventari",
"onDelete": "NO ACTION",
"onUpdate": "NO ACTION",
"columns": [
"parent_id"
],
"referencedColumns": [
"_id"
]
}
]
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1fbbe769d42f5fb33a56580bea8b11c6')"
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'a3c4983a84b2d615e548dcceba15ecf0')"
]
}
}

View File

@ -39,7 +39,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
InventarioRoomDTO.class,
InventarioRowRoomDTO.class
},
version = 11,
version = 12,
exportSchema = true)
@TypeConverters({
DateConverter.class,
@ -63,7 +63,8 @@ public abstract class AppDatabase extends RoomDatabase {
if (sInstance == null) {
var builder = Room.databaseBuilder(applicationContext,
AppDatabase.class, "integry_wms")
.addMigrations(MIGRATION_10_11);
.addMigrations(MIGRATION_10_11)
.addMigrations(MIGRATION_11_12);
sInstance = builder.build();
}
@ -100,6 +101,14 @@ public abstract class AppDatabase extends RoomDatabase {
database.execSQL("CREATE INDEX IF NOT EXISTS index_inventario_rows__parent_id ON inventario_rows (parent_id)");
}
};
static final Migration MIGRATION_11_12 = new Migration(11, 12) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("DROP TABLE IF EXISTS ordini_tmp;");
database.execSQL("CREATE TABLE ordini_tmp (ordine_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, data_ins INTEGER, annotazioni TEXT, transmitted INTEGER NOT NULL, transmission_date INTEGER, gestione TEXT, data_ord INTEGER, num_ord INTEGER, cod_mdep TEXT, id_griglia INTEGER NOT NULL, cod_alis TEXT NOT NULL);");
database.execSQL("INSERT INTO ordini_tmp(ordine_id,data_ins,annotazioni,transmitted,transmission_date,gestione,data_ord,num_ord,cod_mdep,id_griglia,cod_alis) SELECT ordini.ordine_id,ordini.data_ins,ordini.annotazioni,ordini.transmitted,ordini.transmission_date,ordini.gestione,ordini.data_ord,ordini.num_ord,ordini.cod_mdep,ordini.id_griglia,griglie.cod_alis from ordini left outer join griglie on ordini.id_griglia = griglie.griglia_id;");
database.execSQL("DROP TABLE ordini;");
database.execSQL("ALTER TABLE ordini_tmp RENAME TO ordini;");
}
};
}

View File

@ -9,7 +9,6 @@ import androidx.room.Update;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.wrappers.ArticoloOrdineWrapper;
@Dao
public interface ArticoloOrdineDao {
@ -33,17 +32,10 @@ public interface ArticoloOrdineDao {
@Update
void update(ArticoloOrdine articolo);
@Query("SELECT articoli_ordine.*," +
"articoli_griglia.gg_scadenza," +
"articoli_griglia.giacenza," +
"articoli_griglia.qta_prevista_vendita," +
"articoli_griglia.qta_proposta " +
@Query("SELECT *" +
"FROM articoli_ordine " +
"INNER JOIN ordini on articoli_ordine.id_ordine = ordini.ordine_id " +
"LEFT OUTER JOIN articoli_griglia " +
"on articoli_ordine.cod_mart = articoli_griglia.cod_mart and ordini.id_griglia = articoli_griglia.id_griglia and articoli_ordine.bar_code = articoli_griglia.bar_code " +
"where id_ordine = :ordineId")
List<ArticoloOrdineWrapper> findArticoliByOrdine(int ordineId);
List<ArticoloOrdine> findArticoliByOrdine(int ordineId);
@Query("SELECt * from articoli_ordine where cod_mart = :codMart and id_ordine = :ordineId LIMIT 1")
ArticoloOrdine findArticoloByCodMartAndOrdine(int ordineId, String codMart);

View File

@ -9,15 +9,14 @@ 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.wrappers.GrigliaWrapper;
@Dao
public interface GrigliaDao {
@Query("SELECT * from griglie")
List<Griglia> getAll();
@Query("SELECT griglie.*, 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")
GrigliaWrapper findByCodAlis(String codAlis);
@Query("SELECT * from griglie where cod_alis = :codAlis")
Griglia findByCodAlis(String codAlis);
@Insert
long insert(Griglia griglia);

View File

@ -9,12 +9,9 @@ import androidx.room.Update;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
import it.integry.integrywmsnative.core.data_store.db.view_model.OrdineWithGriglia;
import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper;
import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper;
@Dao
public interface MtbColtDao {
@Query("SELECT * from mtb_colt")

View File

@ -9,7 +9,6 @@ import androidx.room.Update;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.view_model.OrdineWithGriglia;
import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper;
@Dao
@ -17,11 +16,11 @@ public interface OrdineDao {
@Query("SELECT * from ordini ")
List<Ordine> getAll();
@Query("SELECT ordini.*, griglie.* from ordini inner join griglie ON id_griglia = griglie.griglia_id where ordini.transmitted = 1")
List<OrdineWithGriglia> getAllTrasnmitted();
@Query("SELECT ordini.* from ordini where ordini.transmitted = 1")
List<Ordine> 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<OrdineWrapper> getAllOpenOrdersByGriglia(int idGriglia);
@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.cod_alis = :codAlis group by ordini.ordine_id")
List<OrdineWrapper> getAllOpenOrdersByGriglia(String codAlis);
@Insert
Long insert(Ordine ordine);

View File

@ -6,13 +6,6 @@ import androidx.room.ForeignKey;
import androidx.room.Index;
import androidx.room.PrimaryKey;
import org.json.JSONObject;
import java.math.BigDecimal;
import java.util.HashMap;
import it.integry.integrywmsnative.core.utility.UtilityDate;
@Entity(
tableName = "articoli_griglia",
indices = {
@ -215,38 +208,4 @@ public class ArticoloGriglia {
public void setQtaOrd(float qtaOrd) {
this.qtaOrd = qtaOrd;
}
public String generateSystemNote() {
HashMap<String, String> pairs = new HashMap<>();
pairs.put("qta_proposta", String.valueOf(qtaProposta));
pairs.put("giacenza", String.valueOf(giacenza));
return new JSONObject(pairs).toString();
}
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(UtilityDate.getDateInstance());
articolo.setGgScadenza(this.getGgScadenza());
articolo.setGiacenza(BigDecimal.valueOf(this.getGiacenza()));
articolo.setQtaPrevistaVendita(BigDecimal.valueOf(this.getQtaPrevistaVendita()));
articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta()));
articolo.setNewNoPromo(this.isNewNoPromo());
articolo.setSystemNote(generateSystemNote());
articolo.setQtaOrd(this.getQtaOrd());
return articolo;
}
}

View File

@ -2,11 +2,10 @@ package it.integry.integrywmsnative.core.data_store.db.entity;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.Index;
import androidx.room.PrimaryKey;
@Entity(tableName ="griglie",
@Entity(tableName = "griglie",
indices = {
@Index(value = "cod_alis", unique = true)
}
@ -22,8 +21,6 @@ public class Griglia {
private String descrLisa;
@ColumnInfo(name = "descr_depo")
private String descrDepo;
@Ignore
private int countArticoli = 0;
public int getGrigliaId() {
@ -58,11 +55,4 @@ public class Griglia {
this.descrDepo = descrDepo;
}
public int getCountArticoli() {
return countArticoli;
}
public void setCountArticoli(int countArticoli) {
this.countArticoli = countArticoli;
}
}

View File

@ -1,5 +1,6 @@
package it.integry.integrywmsnative.core.data_store.db.entity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
@ -47,15 +48,16 @@ public class Ordine {
@Nullable
private String codMdep;
@Ignore
private int countArticoli = 0;
@Ignore
private boolean orderNewProducts = false;
@ColumnInfo(name = "id_griglia")
private int idGriglia;
@ColumnInfo(name = "cod_alis")
@NonNull
private String codAlis;
public int getOrdineId() {
return ordineId;
}
@ -105,14 +107,6 @@ public class Ordine {
this.transmissionDate = transmissionDate;
}
public int getCountArticoli() {
return countArticoli;
}
public void setCountArticoli(int countArticoli) {
this.countArticoli = countArticoli;
}
@Nullable
public String getGestione() {
return gestione;
@ -157,8 +151,15 @@ public class Ordine {
return orderNewProducts;
}
public Ordine setOrderNewProducts(boolean orderNewProducts) {
public void setOrderNewProducts(boolean orderNewProducts) {
this.orderNewProducts = orderNewProducts;
return this;
}
public String getCodAlis() {
return codAlis;
}
public void setCodAlis(String codAlis) {
this.codAlis = codAlis;
}
}

View File

@ -3,16 +3,15 @@ package it.integry.integrywmsnative.core.data_store.db.repository;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.wrappers.GrigliaWrapper;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public interface GrigliaRepository {
void selectAll(RunnableArgs<List<Griglia>> onSuccess, RunnableArgs<Exception> onError);
void findByCodAlis(String codAlis , RunnableArgs<GrigliaWrapper> onSuccess, RunnableArgs<Exception> onError);
void findByCodAlis(String codAlis, RunnableArgs<Griglia> onSuccess, RunnableArgs<Exception> onError);
void saveGriglia(Griglia griglia, RunnableArgs<Integer> onSuccess,RunnableArgs<Exception> onFail);
void saveGriglia(Griglia griglia, RunnableArgs<Integer> onSuccess, RunnableArgs<Exception> onFail);
void findGrigliaById(int idGriglia, RunnableArgs<Griglia> onLoad, RunnableArgs<Exception> onFail);
}

View File

@ -3,12 +3,8 @@ package it.integry.integrywmsnative.core.data_store.db.repository;
import java.util.Date;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt;
import it.integry.integrywmsnative.core.data_store.db.view_model.OrdineWithGriglia;
import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper;
import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public interface MtbColtRepository {

View File

@ -2,9 +2,7 @@ package it.integry.integrywmsnative.core.data_store.db.repository;
import java.util.List;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.view_model.OrdineWithGriglia;
import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@ -12,9 +10,9 @@ public interface OrdineRepository {
void selectAll(RunnableArgs<List<Ordine>> onSuccess, RunnableArgs<Exception> onError);
void selectAllTransmitted(RunnableArgs<List<OrdineWithGriglia>> onSuccess, RunnableArgs<Exception> onError);
void selectAllTransmitted(RunnableArgs<List<Ordine>> onSuccess, RunnableArgs<Exception> onError);
void selectAllOpenOrders(Griglia griglia, RunnableArgs<List<OrdineWrapper>> onSuccess, RunnableArgs<Exception> onError);
void selectAllOpenOrders(String codAlis, RunnableArgs<List<OrdineWrapper>> onSuccess, RunnableArgs<Exception> onError);
void insert(Ordine ordine, RunnableArgs<Integer> onSuccess, RunnableArgs<Exception> onError);

View File

@ -2,8 +2,6 @@ package it.integry.integrywmsnative.core.data_store.db.repository.datasource;
import android.os.Handler;
import com.annimon.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
@ -16,7 +14,6 @@ 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.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.wrappers.ArticoloOrdineWrapper;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public class ArticoliOrdineDataSource extends BaseDataSource implements ArticoliOrdineRepository {
@ -90,23 +87,7 @@ public class ArticoliOrdineDataSource extends BaseDataSource implements Articoli
}
public void findArticoliByOrdine(Ordine ordine, RunnableArgs<List<ArticoloOrdine>> onSuccess, RunnableArgs<Exception> onError) {
executorService.execute(() -> {
try {
List<ArticoloOrdineWrapper> list = mArticoloOrdineDao.findArticoliByOrdine(ordine.getOrdineId());
var tmpList = Stream.of(list).map(x -> {
ArticoloOrdine art = x.getArticoloOrdine();
art.setGgScadenza(x.getGgScadenza());
art.setGiacenza(x.getGiacenza());
art.setQtaProposta(x.getQtaProposta());
art.setQtaPrevistaVendita(x.getQtaPrevistaVendita());
return art;
}).toList();
handler.post(() -> onSuccess.run(tmpList));
} catch (Exception e) {
onError.run(e);
}
});
execute(() -> mArticoloOrdineDao.findArticoliByOrdine(ordine.getOrdineId()), onSuccess, onError);
}
public void deleteArticolo(ArticoloOrdine articolo, Runnable onSuccess, RunnableArgs<Exception> onError) {

View File

@ -10,7 +10,6 @@ import javax.inject.Inject;
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.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.wrappers.GrigliaWrapper;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public class GrigliaDataSource extends BaseDataSource implements GrigliaRepository {
@ -29,7 +28,7 @@ public class GrigliaDataSource extends BaseDataSource implements GrigliaReposito
execute(mGrigliaDao::getAll, onSuccess, onError);
}
public void findByCodAlis(String codAlis, RunnableArgs<GrigliaWrapper> onSuccess, RunnableArgs<Exception> onError) {
public void findByCodAlis(String codAlis, RunnableArgs<Griglia> onSuccess, RunnableArgs<Exception> onError) {
execute(() -> mGrigliaDao.findByCodAlis(codAlis), onSuccess, onError);
}

View File

@ -8,10 +8,8 @@ import java.util.concurrent.ExecutorService;
import javax.inject.Inject;
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.repository.OrdineRepository;
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;
@ -31,12 +29,12 @@ public class OrdineDataSource extends BaseDataSource implements OrdineRepository
execute(mOrdineDao::getAll, onSuccess, onError);
}
public void selectAllTransmitted(RunnableArgs<List<OrdineWithGriglia>> onSuccess, RunnableArgs<Exception> onError) {
public void selectAllTransmitted(RunnableArgs<List<Ordine>> onSuccess, RunnableArgs<Exception> onError) {
execute(mOrdineDao::getAllTrasnmitted, onSuccess, onError);
}
public void selectAllOpenOrders(Griglia griglia, RunnableArgs<List<OrdineWrapper>> onSuccess, RunnableArgs<Exception> onError) {
execute(() -> mOrdineDao.getAllOpenOrdersByGriglia(griglia.getGrigliaId()), onSuccess, onError);
public void selectAllOpenOrders(String codAlis, RunnableArgs<List<OrdineWrapper>> onSuccess, RunnableArgs<Exception> onError) {
execute(() -> mOrdineDao.getAllOpenOrdersByGriglia(codAlis), onSuccess, onError);
}
public void insert(Ordine ordine, RunnableArgs<Integer> onSuccess, RunnableArgs<Exception> onError) {

View File

@ -1,6 +1,14 @@
package it.integry.integrywmsnative.core.data_store.db.view_model;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import java.math.BigDecimal;
import java.util.HashMap;
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.utility.UtilityDate;
public class ArticoloDTO {
@ -161,24 +169,50 @@ public class ArticoloDTO {
return this;
}
public ArticoloGriglia toArticoloGriglia() {
ArticoloGriglia result = new ArticoloGriglia();
result.setBarCode(this.getBarCode());
result.setDescrizione(this.getDescrizione());
result.setCodMart(this.getCodMart());
result.setUntMis(this.getUntMis());
result.setQtaCnf(this.getQtaCnf());
result.setMerceDaRic(this.getMerceDaRic());
result.setMediaSett(this.getMediaSett());
result.setFlagQtaMultipla(this.getFlagQtaMultipla());
result.setQtaMinOrdinabile(this.getQtaMinOrdinabile());
result.setGgScadenza(this.ggScadenza);
result.setNewNoPromo(this.newNoPromo);
result.setQtaOrd(this.getQtaOrd());
result.setGiacenza(this.giacenza);
result.setQtaPrevistaVendita(this.qtaPrevistaVendita);
result.setQtaProposta(this.qtaProposta);
public ArticoloOrdine convertToArticoloOrdine(Ordine ordine) {
ArticoloOrdine articolo = new ArticoloOrdine();
return result;
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(UtilityDate.getDateInstance());
articolo.setGgScadenza(this.getGgScadenza());
articolo.setGiacenza(BigDecimal.valueOf(this.getGiacenza()));
articolo.setQtaPrevistaVendita(BigDecimal.valueOf(this.getQtaPrevistaVendita()));
articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta()));
articolo.setNewNoPromo(this.isNewNoPromo());
articolo.setSystemNote(generateSystemNote());
articolo.setQtaOrd(this.getQtaOrd());
return articolo;
}
public String generateSystemNote() {
HashMap<String, String> pairs = new HashMap<>();
pairs.put("qta_proposta", String.valueOf(qtaProposta));
pairs.put("giacenza", String.valueOf(giacenza));
return new JSONObject(pairs).toString();
}
public int getSortByBarcodeCondition(String barcode) {
if (codMart.equalsIgnoreCase(barcode))
return 1;
if (barcode != null) {
if (barcode.equalsIgnoreCase(barcode))
return 2;
if (StringUtils.leftPad(barcode, 13, "0").equalsIgnoreCase(barcode))
return 3;
}
return 100;
}
}

View File

@ -1,30 +0,0 @@
package it.integry.integrywmsnative.core.data_store.db.wrappers;
import androidx.room.ColumnInfo;
import androidx.room.Embedded;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
public class GrigliaWrapper {
@Embedded
private Griglia griglia;
@ColumnInfo(name = "countArticoli")
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;
}
}

View File

@ -1,5 +1,6 @@
package it.integry.integrywmsnative.core.rest.consumers;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
@ -9,6 +10,7 @@ import java.util.List;
import javax.inject.Singleton;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.model.MtbTCol;
import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
@ -44,17 +46,43 @@ public class MagazzinoRESTConsumer extends _BaseRESTConsumer {
}
public <T> void saveTerminalino(SaveDTO saveDTO, RunnableArgs<T> onComplete, RunnableArgs<Exception> onFailed) {
public void saveOrdine(SaveDTO saveDTO, RunnableArgs<DtbOrdt> onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class);
service.<T>saveTerminalino(saveDTO)
service.saveOrdine(saveDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<T>> call, Response<ServiceRESTResponse<T>> response) {
analyzeAnswer(response, "saveTerminalino", onComplete, onFailed);
public void onResponse(Call<List<ServiceRESTResponse<DtbOrdt>>> call, Response<List<ServiceRESTResponse<DtbOrdt>>> response) {
if (response.body() != null && response.body().size() > 0) {
analyzeListOfAnswers(response, "saveOrdine", dtoList -> {
if (dtoList.size() > 0) {
onComplete.run(dtoList.get(0));
} else {
onFailed.run(new Exception("Nessun ordine generato"));
}
}, onFailed);
} else {
onFailed.run(new Exception("Nessun ordine generato"));
}
}
@Override
public void onFailure(Call<ServiceRESTResponse<T>> call, Throwable t) {
public void onFailure(Call<List<ServiceRESTResponse<DtbOrdt>>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});
}
public void saveTerminalinoWMS(SaveDTO saveDTO, RunnableArgs<JsonObject> onComplete, RunnableArgs<Exception> onFailed) {
MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class);
service.saveTerminalinoWMS(saveDTO)
.enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<JsonObject>> call, Response<ServiceRESTResponse<JsonObject>> response) {
analyzeAnswer(response, "saveTerminalinoWMS", onComplete, onFailed);
}
@Override
public void onFailure(Call<ServiceRESTResponse<JsonObject>> call, Throwable t) {
onFailed.run(new Exception(t));
}
});

View File

@ -1,5 +1,10 @@
package it.integry.integrywmsnative.core.rest.consumers;
import com.google.gson.JsonObject;
import java.util.List;
import it.integry.integrywmsnative.core.model.DtbOrdt;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO;
import retrofit2.Call;
@ -9,6 +14,9 @@ import retrofit2.http.POST;
public interface MagazzinoRESTConsumerService {
@POST("SM2SaveTerminalinoWMS")
<T> Call<ServiceRESTResponse<T>> saveTerminalino(@Body SaveDTO saveDTO);
Call<ServiceRESTResponse<JsonObject>> saveTerminalinoWMS(@Body SaveDTO saveDTO);
@POST("SM2SaveTerminalino")
Call<List<ServiceRESTResponse<DtbOrdt>>> saveOrdine(@Body SaveDTO saveDTO);
}

View File

@ -12,12 +12,10 @@ import java.util.List;
import javax.inject.Singleton;
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.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.utility.UtilityDate;
@ -41,7 +39,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
public void getArticoliListino(String codAlis, RunnableArgs<GrigliaDTO> onSuccess, RunnableArgs<Exception> onFailed) {
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class);
PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class, 300);
ordiniARestService
.getArticoliListino(codAlis)
.enqueue(new Callback<>() {
@ -87,7 +85,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
});
}
public void saveOrdine(Ordine ordine, List<ArticoloOrdine> articoli, Griglia griglia, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onFailed) {
public void saveOrdine(Ordine ordine, List<ArticoloOrdine> articoli, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onFailed) {
SaveDTO saveDTO = new SaveDTO();
OrdineDTO ordineDTO = new OrdineDTO();
List<ArtDTO> artRows = new ArrayList<>();
@ -98,15 +96,15 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer {
artRows.add(convertArtToDTO(art, i));
}
ordineDTO.setChiaveGriglia(griglia.getCodAlis());
ordineDTO.setChiaveGriglia(ordine.getCodAlis());
ordineDTO.setDataCons(UtilityDate.getDateInstance());
ordineDTO.setArtRows(artRows);
saveDTO.setGestione("O");
saveDTO.setOrdineDTO(ordineDTO);
magazzinoRESTConsumer.<DtbOrdt>saveTerminalino(saveDTO, data -> {
if(data == null) {
magazzinoRESTConsumer.saveOrdine(saveDTO, data -> {
if (data == null) {
onFailed.run(new Exception("Nessun ordine generato"));
return;
}

View File

@ -35,11 +35,11 @@ import it.integry.integrywmsnative.core.settings.SettingsManager;
import it.integry.integrywmsnative.core.utility.UtilityBigDecimal;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.databinding.FragmentMainAccettazioneBinding;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione.ui.MainListAccettazioneAdapter;
import it.integry.integrywmsnative.gest.accettazione.ui.MainListAccettazioneClienteListModel;
import it.integry.integrywmsnative.gest.accettazione.ui.MainListAccettazioneListModel;
import it.integry.integrywmsnative.gest.accettazione.dto.OrdineAccettazioneInevasoDTO;
import it.integry.integrywmsnative.gest.accettazione.dto.SitArtOrdDTO;
import it.integry.integrywmsnative.gest.accettazione_picking.AccettazionePickingActivity;
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
@ -86,12 +86,11 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearchabl
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if(savedInstanceState != null && savedInstanceState.containsKey("mToolbar"))
if (savedInstanceState != null && savedInstanceState.containsKey("mToolbar"))
mToolbar = DataCache.retrieveItem(savedInstanceState.getString("mToolbar"));
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_accettazione, container, false);
@ -134,7 +133,7 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearchabl
private void initRecyclerView() {
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), x->{
this.mViewModel.getOrderList().observe(getViewLifecycleOwner(), x -> {
this.refreshList(getFilteredList(mTextFilter));
});
@ -198,7 +197,7 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearchabl
listModel.setGroupTitle(x.getRagSocOrd());
listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero().toString(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
List<MainListAccettazioneClienteListModel> clienti = Stream.of(dataList)
.filter(y -> y.getBarcode().equals(x.getBarcode()))
@ -243,7 +242,7 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearchabl
@Override
public boolean onQueryTextChange(String newText) {
List<OrdineAccettazioneInevasoDTO> originalList = this.mViewModel.getOrderList().getValue();
if(originalList == null || originalList.isEmpty()) return false;
if (originalList == null || originalList.isEmpty()) return false;
mTextFilter = newText;
List<OrdineAccettazioneInevasoDTO> filteredOrders = getFilteredList(newText);
@ -254,9 +253,9 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearchabl
private List<OrdineAccettazioneInevasoDTO> getFilteredList(String newText) {
List<OrdineAccettazioneInevasoDTO> filteredOrders = new ArrayList<>();
List<OrdineAccettazioneInevasoDTO> originalList = this.mViewModel.getOrderList().getValue();
if(originalList == null || originalList.isEmpty() || newText == null) return originalList;
for(int i = 0; i < originalList.size(); i++){
if(originalList.get(i).getRagSocOrd().toLowerCase().contains(newText.toLowerCase())){
if (originalList == null || originalList.isEmpty() || newText == null) return originalList;
for (int i = 0; i < originalList.size(); i++) {
if (originalList.get(i).getRagSocOrd().toLowerCase().contains(newText.toLowerCase())) {
filteredOrders.add(originalList.get(i));
}
}

View File

@ -9,9 +9,9 @@ import it.integry.integrywmsnative.core.rest.RESTBuilder;
import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer;
import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer;
import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaArticoliDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO;
import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@ -42,7 +42,7 @@ public class DocInterniRESTConsumer extends _BaseRESTConsumer {
public void fetchProducts(String codDtip, String codMgrp, RunnableArgs<GrigliaArticoliDTO> onComplete, RunnableArgs<Exception> onFailed) {
DocInterniRESTConsumerService service = RESTBuilder.getService(DocInterniRESTConsumerService.class);
service.retrieveProducts(codDtip,codMgrp,"L").enqueue(new Callback<>() {
service.retrieveProducts(codDtip, codMgrp, "L").enqueue(new Callback<>() {
@Override
public void onResponse(Call<ServiceRESTResponse<GrigliaArticoliDTO>> call, Response<ServiceRESTResponse<GrigliaArticoliDTO>> response) {
analyzeAnswer(response, "fetchProducts", onComplete, onFailed);
@ -56,7 +56,7 @@ public class DocInterniRESTConsumer extends _BaseRESTConsumer {
}
public void saveDoc(SaveDTO saveDTO, RunnableArgs<JsonObject> onComplete, RunnableArgs<Exception> onFailed){
magazzinoRESTConsumer.saveTerminalino(saveDTO, onComplete, onFailed);
public void saveDoc(SaveDTO saveDTO, RunnableArgs<JsonObject> onComplete, RunnableArgs<Exception> onFailed) {
magazzinoRESTConsumer.saveTerminalinoWMS(saveDTO, onComplete, onFailed);
}
}

View File

@ -310,7 +310,7 @@ public class ProdOrdineProduzioneElencoFragment extends BaseFragment implements
listModel.setGroupTitle(x.getRagSocOrd());
listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero().toString(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
listModel.setDescription(String.format(getString(R.string.ord_acq_testata), x.getNumero(), UtilityDate.formatDate(x.getDataD(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)));
List<MainListProdOrdineProduzioneElencoClienteListModel> clienti = Stream.of(dataList)
.filter(y -> y.getBarcode().equals(x.getBarcode()))

View File

@ -8,6 +8,7 @@ import android.text.SpannableString;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.ActionBar;
import androidx.core.content.ContextCompat;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.LinearLayoutManager;
@ -15,6 +16,8 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import com.ravikoradiya.liveadapter.LiveAdapter;
import com.ravikoradiya.liveadapter.Type;
import java.util.List;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
@ -26,6 +29,7 @@ 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.Ordine;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO;
import it.integry.integrywmsnative.core.expansion.BaseActivity;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.settings.SettingsManager;
@ -42,20 +46,19 @@ import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdineAcquistoEditViewModel.Listener {
private static String DATA_KEY_ORDER = "keyOrdine";
private Ordine mOrdine;
private static String DATA_LIST_ARTS = "listArts";
private ActivityPvOrdineAcquistoEditBinding mBinding;
private int barcodeScannerIstanceID;
@Inject
PVOrdineAcquistoEditViewModel mViewModel;
public static Intent newInstance(Context context, Ordine ordine) {
public static Intent newInstance(Context context, Ordine ordine, List<ArticoloDTO> listArts) {
Intent myIntent = new Intent(context, PVOrdineAcquistoEditActivity.class);
String keyOrdine = DataCache.addItem(ordine);
String keyListArts = DataCache.addItem(listArts);
myIntent.putExtra(DATA_KEY_ORDER, keyOrdine);
myIntent.putExtra(DATA_LIST_ARTS, keyListArts);
return myIntent;
}
@ -71,20 +74,24 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
mBinding = DataBindingUtil.setContentView(this, R.layout.activity_pv_ordine_acquisto_edit);
mBinding.setViewModel(this);
mOrdine = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_ORDER));
Ordine ordine = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_ORDER));
setSupportActionBar(mBinding.toolbar);
mBinding.toolbar.setTitle(R.string.edit_order);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
if (mOrdine == null) {
if (ordine == null) {
Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show();
close();
return;
}
if (ordine.isTransmitted()) {
Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show();
close();
}
if (mOrdine.isTransmitted()) {
Toast.makeText(this, "Impossibile modificare ordine esportato", Toast.LENGTH_SHORT).show();
close();
}
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));
String testataOrdString = String.format(this.getString(R.string.ord_acq_testata), ordine.getOrdineId(), UtilityDate.formatDate(ordine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
mBinding.orderIdentifier.setText(Html.fromHtml(testataOrdString));
FabMenuCustomAnimations.changeIconOnFocus(mBinding.closeActivityFab, R.drawable.ic_check_white_24dp, R.drawable.ic_close_24dp);
@ -94,9 +101,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
this.mViewModel.setListener(this);
this.mViewModel.getCurrentGriglia().observe(this, griglia -> {
mBinding.codAlis.setText(griglia.getCodAlis());
});
mBinding.codAlis.setText(ordine.getCodAlis());
this.mViewModel.getArticoli().observe(this, articoli -> {
mBinding.countArtOrd.setText(String.valueOf(articoli.size()));
@ -104,16 +109,16 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
mBinding.closeActivityFab.close(false);
mBinding.scanArtSpinner.setVisibility(articoli.size() > 0 ? View.GONE : View.VISIBLE);
if (mOrdine.isOrderNewProducts() && articoli.isEmpty() && isOrderNewProdsForced()) {
if (ordine.isOrderNewProducts() && articoli.isEmpty() && isOrderNewProdsForced()) {
this.mViewModel.orderNewProducts();
mOrdine.setOrderNewProducts(false);
ordine.setOrderNewProducts(false);
}
});
List<ArticoloDTO> articoliGriglia = DataCache.retrieveItem(getIntent().getStringExtra(DATA_LIST_ARTS));
this.mViewModel.init(mOrdine);
this.mViewModel.init(ordine, articoliGriglia);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
@ -148,7 +153,6 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
mBinding.articoliOrdineList.addItemDecoration(itemDecorator);
}
private void selectAction(ArticoloOrdine articoloOrdine) {
mBinding.closeActivityFab.close(false);
BarcodeManager.disable();
@ -156,7 +160,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
DialogAskActionView.newInstance(articoloOrdine.getDescrizione(),
articoloOrdine.getQtaOrd() + " " + articoloOrdine.getUntMis(),
() -> {
this.mViewModel.checkArticolo(mOrdine, articoloOrdine.getCodMart(),
this.mViewModel.checkArticolo(articoloOrdine.getCodMart(),
artOrd -> {
this.onItemDispatched(artOrd);
BarcodeManager.enable();
@ -184,6 +188,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
private final RunnableArgs<BarcodeScanDTO> onScanSuccessful = data -> {
mBinding.closeActivityFab.close(false);
this.onLoadingStarted();
BarcodeManager.disable();
this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded);
@ -191,19 +196,16 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
@Override
public void onItemDispatched(ArticoloOrdine articoloOrdine) {
BarcodeManager.disable();
DialogEditArticoloView
.newInstance(articoloOrdine, articolo -> {
runOnUiThread(() -> {
if (articolo != null) {
Toast.makeText(this, "Articolo aggiunto all'ordine!", Toast.LENGTH_SHORT).show();
}
this.mViewModel.saveArticolo(articolo);
this.mViewModel.refreshListArticoli();
});
}, () -> {
}).show(this.getSupportFragmentManager(), "tag");
}, null).show(this.getSupportFragmentManager(), "tag");
}
@Override
@ -211,7 +213,6 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
return getResources().getColor(resId);
}
public void exportOrdine() {
this.mViewModel.exportOrdine(() -> {
runOnUiThread(() -> {
@ -221,7 +222,6 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
});
}
public void close() {
onBackPressed();
}
@ -236,7 +236,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi
BarcodeManager.disable();
DialogSimpleInputHelper.makeInputDialog(this, "Inserisci il codice a barre/codice articolo da cercare", codice -> {
this.onLoadingStarted();
this.mViewModel.checkArticolo(mOrdine, codice,
this.mViewModel.checkArticolo(codice,
articoloOrdine -> {
this.onItemDispatched(articoloOrdine);
this.onLoadingEnded();

View File

@ -4,16 +4,16 @@ import androidx.lifecycle.MutableLiveData;
import com.annimon.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javax.inject.Inject;
import it.integry.barcode_base_android_library.model.BarcodeScanDTO;
import it.integry.integrywmsnative.R;
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.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
@ -21,6 +21,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineR
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
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.interfaces.viewmodel_listeners.ILoadingListener;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
@ -49,7 +50,7 @@ public class PVOrdineAcquistoEditViewModel {
private Listener mListener;
private final MutableLiveData<Griglia> mCurrentGriglia = new MutableLiveData<>();
private List<ArticoloDTO> mArticoliGriglia = new ArrayList<>();
private final MutableLiveData<List<ArticoloOrdine>> mArticoli = new MutableLiveData<>();
@ -65,83 +66,52 @@ public class PVOrdineAcquistoEditViewModel {
this.pvOrdiniAcquistoRESTConsumer = pvOrdiniAcquistoRESTConsumer;
}
public void init(Ordine ordine) {
public void init(Ordine ordine, List<ArticoloDTO> articoliGriglia) {
this.mCurrentOrdine = ordine;
this.sendOnLoadingStarted();
this.loadGriglia(ordine.getIdGriglia(), griglia -> {
mCurrentGriglia.postValue(griglia);
this.loadArticoli(mCurrentOrdine, articoli -> {
articoli = Stream.of(articoli).map(this::setBgTint).toList();
this.mArticoli.postValue(articoli);
this.sendOnLoadingEnded();
});
mArticoliGriglia.clear();
mArticoliGriglia.addAll(articoliGriglia);
this.refreshListArticoli();
}
public void refreshListArticoli() {
this.loadArticoli(mCurrentOrdine, articoli -> {
articoli = Stream.of(articoli).map(this::completeDataArticoli).toList();
this.mArticoli.postValue(articoli);
this.sendOnLoadingEnded();
});
}
private ArticoloOrdine setBgTint(ArticoloOrdine art) {
int chk = art.checkQtaProposta();
switch (chk) {
case -1:
art.setBgTint(this.mListener.getColorFromResource(R.color.red_600));
break;
case 1:
art.setBgTint(this.mListener.getColorFromResource(R.color.orange_600));
break;
default:
art.setBgTint(this.mListener.getColorFromResource(R.color.colorPrimary));
}
private ArticoloOrdine completeDataArticoli(ArticoloOrdine art) {
art.setBgTint(getBgTint(art));
ArticoloDTO artGrid = Stream.of(mArticoliGriglia).filter(x -> art.getCodMart().equalsIgnoreCase(x.getCodMart())).findFirstOrElse(new ArticoloDTO());
art.setGgScadenza(artGrid.getGgScadenza());
art.setGiacenza(BigDecimal.valueOf(artGrid.getGiacenza()));
art.setQtaProposta(BigDecimal.valueOf(artGrid.getQtaProposta()));
art.setQtaPrevistaVendita(BigDecimal.valueOf(artGrid.getQtaPrevistaVendita()));
return art;
}
public MutableLiveData<Griglia> getCurrentGriglia() {
return mCurrentGriglia;
private int getBgTint(ArticoloOrdine art) {
int chk = art.checkQtaProposta();
switch (chk) {
case -1:
return this.mListener.getColorFromResource(R.color.red_600);
case 1:
return this.mListener.getColorFromResource(R.color.orange_600);
default:
return this.mListener.getColorFromResource(R.color.colorPrimary);
}
}
public MutableLiveData<List<ArticoloOrdine>> getArticoli() {
return mArticoli;
}
public void saveArticolo(ArticoloOrdine articolo) {
setBgTint(articolo);
var newList = this.mArticoli.getValue();
var alreadySavedItem = Stream.of(newList)
.filter(x -> Objects.equals(x.getCodMart(), articolo.getCodMart()))
.findFirst();
if (alreadySavedItem.isPresent()) newList.remove(alreadySavedItem.get());
newList.add(articolo);
this.mArticoli.postValue(newList);
}
public void saveArticoli(List<ArticoloOrdine> articoli) {
var newList = this.mArticoli.getValue();
if (newList == null) {
newList = new ArrayList<>();
}
for (ArticoloOrdine articolo : articoli) {
setBgTint(articolo);
var alreadySavedItem = Stream.of(newList)
.filter(x -> Objects.equals(x.getCodMart(), articolo.getCodMart()))
.findFirst();
if (alreadySavedItem.isPresent()) newList.remove(alreadySavedItem.get());
newList.add(articolo);
}
this.mArticoli.postValue(newList);
}
public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) {
this.checkArticolo(
mCurrentOrdine,
barcodeScanDTO.getStringValue(),
articoloOrdine -> {
this.sendOnItemDispatched(articoloOrdine);
@ -151,7 +121,6 @@ public class PVOrdineAcquistoEditViewModel {
);
}
private void loadGriglia(int idGriglia, RunnableArgs<Griglia> onLoad) {
try {
mGrigliaRepository.findGrigliaById(idGriglia, onLoad, this::sendError);
@ -168,42 +137,47 @@ public class PVOrdineAcquistoEditViewModel {
}
}
public void checkArticolo(Ordine ordine, String barcode, RunnableArgs<ArticoloOrdine> onSuccess, RunnableArgs<Exception> onFail) {
public void checkArticolo(String barcode, RunnableArgs<ArticoloOrdine> onSuccess, RunnableArgs<Exception> onFail) {
try {
mArticoloGrigliaRepository.findArticoloByScanAndGriglia(barcode, ordine.getIdGriglia(), artGrid -> {
if (artGrid != null) {
mArticoliOrdineRepository.findArticoloByScanAndOrdine(ordine, barcode, (articolo) -> {
if (articolo != null) {
articolo
.setQtaPrevistaVendita(BigDecimal.valueOf(artGrid.getQtaPrevistaVendita()))
.setQtaProposta(BigDecimal.valueOf(artGrid.getQtaProposta()))
.setGiacenza(BigDecimal.valueOf(artGrid.getGiacenza()))
.setMediaSett(artGrid.getMediaSett());
if (mArticoliGriglia == null || mArticoliGriglia.isEmpty()) {
onFail.run(new Exception("Nessun articolo è presente nella griglia"));
return;
}
ArticoloDTO art = Stream.of(mArticoliGriglia).filter(articolo ->
articolo.getCodMart().equalsIgnoreCase(barcode) ||
articolo.getBarcode().equalsIgnoreCase(barcode) ||
articolo.getBarcode().equalsIgnoreCase(StringUtils.leftPad(barcode, 13, "0"))
).sortBy(x -> x.getSortByBarcodeCondition(barcode)).findFirst().orElse(null);
articolo.setQtaMinOrdinabile(artGrid.getQtaMinOrdinabile());
articolo.setMerceDaRic(artGrid.getMerceDaRic());
articolo.setNewNoPromo(artGrid.isNewNoPromo());
articolo.setFlagQtaMultipla(artGrid.getFlagQtaMultipla());
articolo.setSystemNote(artGrid.generateSystemNote());
if (art == null) {
onFail.run(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia"));
return;
}
onSuccess.run(articolo);
} else {
ArticoloOrdine art = artGrid.convertToArticoloOrdine(ordine);
if (isAutoOrderOnScan()) {
art.setQtaOrd(art.getQtaCnf());
mArticoliOrdineRepository.saveArticoloToOrdine(art, () -> {
saveArticolo(art);
this.sendOnLoadingEnded();
mArticoliOrdineRepository.findArticoloByScanAndOrdine(mCurrentOrdine, art.codMart, (articolo) -> {
}, this::sendError);
} else {
onSuccess.run(art);
}
}
}, onFail);
if (articolo != null) {
articolo
.setQtaPrevistaVendita(BigDecimal.valueOf(art.getQtaPrevistaVendita()))
.setQtaProposta(BigDecimal.valueOf(art.getQtaProposta()))
.setGiacenza(BigDecimal.valueOf(art.getGiacenza()))
.setMediaSett(art.getMediaSett());
articolo.setQtaMinOrdinabile(art.getQtaMinOrdinabile());
articolo.setMerceDaRic(art.getMerceDaRic());
articolo.setNewNoPromo(art.isNewNoPromo());
articolo.setFlagQtaMultipla(art.getFlagQtaMultipla());
articolo.setSystemNote(art.generateSystemNote());
onSuccess.run(articolo);
} else {
onFail.run(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia"));
articolo = art.convertToArticoloOrdine(mCurrentOrdine);
if (isAutoOrderOnScan()) {
articolo.setQtaOrd(articolo.getQtaCnf());
mArticoliOrdineRepository.saveArticoloToOrdine(articolo, this::refreshListArticoli, this::sendError);
} else {
onSuccess.run(articolo);
}
}
}, onFail);
@ -217,43 +191,38 @@ public class PVOrdineAcquistoEditViewModel {
return SettingsManager.iDB().isFlagOrdinaArticoliOnScan();
}
private void getNewArticoli(int idGrigla, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onError) {
mArticoloGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError);
private List<ArticoloDTO> getNewArticoli() {
return Stream.of(mArticoliGriglia).filter(x -> x.getQtaOrd() > 0f).toList();
}
public void orderNewProducts() {
this.sendOnLoadingStarted();
this.getNewArticoli(mCurrentOrdine.getIdGriglia(), articoli -> {
if (articoli != null && !articoli.isEmpty()) {
List<ArticoloOrdine> articoliToSave = new ArrayList<>();
List<ArticoloDTO> newArts = getNewArticoli();
if (!newArts.isEmpty()) {
List<ArticoloOrdine> articoliToSave = new ArrayList<>();
Stream.of(articoli).forEach(articolo -> {
if (
Stream.of(mArticoli.getValue())
.filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()))
.findFirst()
.isEmpty()
Stream.of(newArts).forEach(articolo -> {
if (
Stream.of(mArticoli.getValue())
.filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()))
.findFirst()
.isEmpty()
&& Stream.of(articoliToSave)
.filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()))
.findFirst()
.isEmpty()
) {
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mCurrentOrdine);
articoliToSave.add(dto);
}
});
if (!articoliToSave.isEmpty()) {
mArticoliOrdineRepository.saveArticoliToOrdine(articoliToSave, () -> {
this.saveArticoli(articoliToSave);
this.sendOnLoadingEnded();
&& Stream.of(articoliToSave)
.filter(x -> x.getCodMart().equalsIgnoreCase(articolo.getCodMart()))
.findFirst()
.isEmpty()
) {
ArticoloOrdine dto = articolo.convertToArticoloOrdine(mCurrentOrdine);
articoliToSave.add(dto);
}
});
if (!articoliToSave.isEmpty()) {
mArticoliOrdineRepository.saveArticoliToOrdine(articoliToSave, this::refreshListArticoli, this::sendError);
}, this::sendError);
} else this.sendOnLoadingEnded();
} else this.sendOnLoadingEnded();
}, this::sendError);
} else this.sendOnLoadingEnded();
}
public void deleteArticolo(ArticoloOrdine articoloOrdine) {
@ -265,7 +234,7 @@ public class PVOrdineAcquistoEditViewModel {
public void exportOrdine(Runnable onComplete) {
this.sendOnLoadingStarted();
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), mCurrentGriglia.getValue(), (ordine) -> {
pvOrdiniAcquistoRESTConsumer.saveOrdine(mCurrentOrdine, mArticoli.getValue(), (ordine) -> {
mOrdineRepository.updateOrder(ordine, ord -> {
this.sendOnLoadingEnded();

View File

@ -24,6 +24,8 @@ import javax.inject.Inject;
import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
@ -46,6 +48,7 @@ public class DialogEditArticoloView extends BaseDialogFragment implements Dialog
private DialogPvEditArticoloBinding mBindings;
private boolean mEnableDataCallback = true;
private int barcodeScannerIstanceID;
public static DialogEditArticoloView newInstance(ArticoloOrdine articolo, RunnableArgs<ArticoloOrdine> onComplete, Runnable onAbort) {
return new DialogEditArticoloView(articolo, onComplete, onAbort);
@ -96,6 +99,7 @@ public class DialogEditArticoloView extends BaseDialogFragment implements Dialog
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initBarcodeReader();
setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog);
}
@ -108,10 +112,21 @@ public class DialogEditArticoloView extends BaseDialogFragment implements Dialog
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
this.mOnAbort.run();
if (this.mOnAbort != null) {
this.mOnAbort.run();
}
super.onDismiss(dialog);
}
private void initBarcodeReader() {
barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO()
.setOnScanSuccessful((barcodeScanDTO) -> {
})
.setOnScanFailed(this::onError));
BarcodeManager.enable();
}
private void initBindings() {
UtilityObservable.addPropertyChanged(this.currentNumCnf, (value) -> {

View File

@ -1,57 +0,0 @@
package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.helper;
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;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
public class PVEditOrderHelper {
private final GrigliaRepository mGrigliaRepository;
private final ArticoliOrdineRepository mArticoliOrdineRepository;
private final ArticoloGrigliaRepository mArticoliGrigliaRepository;
public PVEditOrderHelper(GrigliaRepository grigliaRepository, ArticoliOrdineRepository articoliOrdineRepository, ArticoloGrigliaRepository articoloGrigliaRepository) {
mGrigliaRepository = grigliaRepository;
mArticoliOrdineRepository = articoliOrdineRepository;
mArticoliGrigliaRepository = articoloGrigliaRepository;
}
public void checkArticolo(Ordine ordine, String barcode, RunnableArgs<ArticoloOrdine> onSuccess, RunnableArgs<Exception> 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 saveArticoliToOrdine(List<ArticoloOrdine> articoli, Runnable onSave, RunnableArgs<Exception> onFail) {
mArticoliOrdineRepository.saveArticoliToOrdine(articoli, onSave, onFail);
}
public void removeArticoloFromOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs<Exception> onError) {
mArticoliOrdineRepository.deleteArticolo(articolo, onSave, onError);
}
public void getNewArticoli(int idGrigla, RunnableArgs<List<ArticoloGriglia>> onSuccess, RunnableArgs<Exception> onError) {
mArticoliGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError);
}
}

View File

@ -28,6 +28,7 @@ import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineR
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
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.data_store.db.wrappers.OrdineWrapper;
import it.integry.integrywmsnative.core.expansion.BaseFragment;
import it.integry.integrywmsnative.core.interfaces.IPoppableActivity;
@ -41,7 +42,6 @@ import it.integry.integrywmsnative.gest.pv_ordini_acquisto.ui.OrdineAcquistoPvOp
import it.integry.integrywmsnative.ui.ElevatedToolbar;
import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration;
import it.integry.integrywmsnative.view.dialogs.DialogAskActionView;
import it.integry.integrywmsnative.view.dialogs.DialogProgressView;
import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView;
public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITitledFragment, IScrollableFragment {
@ -49,8 +49,8 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
private FragmentPvOrdiniAcquistoBinding mBinding;
private Griglia mGriglia;
private OrdineAcquistoPvOpenListAdapter mAdapter;
private DialogProgressView mCurrentProgress;
private final List<OrdineWrapper> mRenderedOrderList = new ArrayList<>();
private final List<ArticoloDTO> mListArticoli = new ArrayList<>();
private boolean mRedirectToNewOrder = true;
private final List<Runnable> mOnPreDestroyList = new ArrayList<>();
@ -99,11 +99,11 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
private void init() {
BarcodeManager.enable();
DialogScanGrigliaAcquistoView.newInstance(griglia -> {
DialogScanGrigliaAcquistoView.newInstance((griglia, listArticoli) -> {
if (griglia == null) {
((IPoppableActivity) requireActivity()).pop();
} else {
setGriglia(griglia);
setGriglia(griglia, listArticoli);
}
}).show(requireActivity().getSupportFragmentManager(), "tag");
@ -114,13 +114,15 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
titleText.setText(context.getText(R.string.pv_elenco_ordiniA_title_fragment).toString());
}
private void setGriglia(Griglia griglia) {
private void setGriglia(Griglia griglia, List<ArticoloDTO> listArticoli) {
mGriglia = griglia;
mListArticoli.clear();
mListArticoli.addAll(listArticoli);
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()));
mBinding.countArtLis.setText(String.valueOf(listArticoli.size()));
fetchOrders();
}
@ -128,9 +130,8 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
private void fetchOrders() {
this.onLoadingStarted();
mOrdineRepository.selectAllOpenOrders(mGriglia, ordini -> {
mOrdineRepository.selectAllOpenOrders(mGriglia.getCodAlis(), ordini -> {
this.onLoadingEnded();
requireActivity().runOnUiThread(() -> {
setOrdini(ordini);
});
@ -149,9 +150,6 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
}
}
public Griglia getGriglia() {
return mGriglia;
}
private void initRecyclerView() {
mBinding.ordiniAApertiMainList.setHasFixedSize(true);
@ -165,13 +163,13 @@ public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITi
}
private void editOrdine(Ordine ordine) {
requireActivity().startActivity(PVOrdineAcquistoEditActivity.newInstance(requireActivity(), ordine));
requireActivity().startActivity(PVOrdineAcquistoEditActivity.newInstance(requireActivity(), ordine, mListArticoli));
}
private void selectAction(Ordine ordine) {
DialogAskActionView.newInstance(Html.fromHtml(String.format(this.getString(R.string.ord_acq_testata), String.valueOf(ordine.getOrdineId()), UtilityDate.formatDate(ordine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))).toString(),
ordine.getCountArticoli() + " articoli",
DialogAskActionView.newInstance(Html.fromHtml(String.format(this.getString(R.string.ord_acq_testata), ordine.getOrdineId(), UtilityDate.formatDate(ordine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))).toString(),
mListArticoli.size() + " articoli",
() -> this.editOrdine(ordine),
() -> this.deleteOrdine(ordine))
.show(requireActivity().getSupportFragmentManager(), "tag");

View File

@ -33,6 +33,7 @@ public class PVOrdiniAcquistoGrigliaViewModel {
Ordine ordine = new Ordine();
ordine.setDataIns(UtilityDate.getDateInstance());
ordine.setIdGriglia(griglia.getGrigliaId());
ordine.setCodAlis(griglia.getCodAlis());
ordine.setOrderNewProducts(true);
ordineRepository.insert(ordine, id -> {
ordine.setOrdineId(id);

View File

@ -11,7 +11,6 @@ import androidx.databinding.DataBindingUtil;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
@ -21,13 +20,11 @@ import it.integry.integrywmsnative.MainApplication;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO;
import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager;
import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO;
import it.integry.integrywmsnative.core.expansion.BaseDialogFragment;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
import it.integry.integrywmsnative.databinding.DialogScanCodiceGrigliaBinding;
@ -36,25 +33,20 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
private DialogScanCodiceGrigliaBinding mBinding;
private int mBarcodeScannerIstanceID;
private final RunnableArgs<Griglia> mOnDialogDismiss;
private final RunnableArgss<Griglia, List<ArticoloDTO>> mOnDialogDismiss;
@Inject
PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer;
@Inject
ArticoloGrigliaRepository articoloGrigliaRepository;
@Inject
GrigliaRepository grigliaRepository;
private Griglia mGriglia;
private List<ArticoloDTO> mListArticoli;
public static DialogScanGrigliaAcquistoView newInstance(RunnableArgs<Griglia> onDialogDismiss) {
public static DialogScanGrigliaAcquistoView newInstance(RunnableArgss<Griglia, List<ArticoloDTO>> onDialogDismiss) {
return new DialogScanGrigliaAcquistoView(onDialogDismiss);
}
private DialogScanGrigliaAcquistoView(RunnableArgs<Griglia> onDialogDismiss) {
private DialogScanGrigliaAcquistoView(RunnableArgss<Griglia, List<ArticoloDTO>> onDialogDismiss) {
super();
mOnDialogDismiss = onDialogDismiss;
}
@ -93,75 +85,38 @@ public class DialogScanGrigliaAcquistoView extends BaseDialogFragment {
@Override
public void onDismiss(@NonNull DialogInterface dialog) {
BarcodeManager.removeCallback(mBarcodeScannerIstanceID);
mOnDialogDismiss.run(mGriglia);
mOnDialogDismiss.run(mGriglia, mListArticoli);
super.onDismiss(dialog);
}
private final RunnableArgs<BarcodeScanDTO> onScanSuccessfull = data -> {
BarcodeManager.disable();
this.onLoadingStarted();
RunnableArgs<Exception> mOnError = exception -> {
this.onError(exception);
BarcodeManager.enable();
};
RunnableArgs<Griglia> onGrigliaAvailable = griglia -> {
this.onLoadingEnded();
mGriglia = griglia;
dismiss();
};
grigliaRepository.findByCodAlis(data.getStringValue(), grigliaWrapper -> {
if (grigliaWrapper != null) {
var griglia = grigliaWrapper.getGriglia();
griglia.setCountArticoli(grigliaWrapper.getCountArticoli());
updateGriglia(griglia, onGrigliaAvailable, mOnError);
} else {
downloadAndSaveLisA(data.getStringValue(), onGrigliaAvailable, mOnError);
}
}, mOnError);
fetchArticoli(data.getStringValue(), mOnError);
};
public void downloadAndSaveLisA(String codAlis, RunnableArgs<Griglia> onSave, RunnableArgs<Exception> onFailed) {
Griglia griglia = new Griglia();
griglia.setCodAlis(codAlis);
updateGriglia(griglia, onSave, onFailed);
}
public void updateGriglia(Griglia griglia, RunnableArgs<Griglia> onSaved, RunnableArgs<Exception> onFailed) {
pvOrdiniAcquistoRESTConsumer.getArticoliListino(griglia.getCodAlis(), dto -> {
public void fetchArticoli(String codAlis, RunnableArgs<Exception> onFailed) {
this.onLoadingStarted();
pvOrdiniAcquistoRESTConsumer.getArticoliListino(codAlis, dto -> {
this.onLoadingEnded();
if (dto.getGrigliaAcquistiChild().size() <= 0) {
onFailed.run(new Exception("La griglia selezionata (" + griglia.getCodAlis() + ") non esiste o non presenta articoli"));
onFailed.run(new Exception("La griglia selezionata (" + codAlis + ") non esiste o non presenta articoli"));
return;
}
griglia.setDescrLisa(dto.getDescrLisa());
griglia.setDescrDepo(dto.getDescrDepo());
griglia.setCountArticoli(dto.getGrigliaAcquistiChild().size());
grigliaRepository.saveGriglia(griglia, id -> {
saveLisAToGriglia(dto.getGrigliaAcquistiChild(), griglia, onSaved, onFailed);
}, onFailed);
mGriglia = new Griglia();
mGriglia.setCodAlis(codAlis);
mGriglia.setDescrLisa(dto.getDescrLisa());
mGriglia.setDescrDepo(dto.getDescrDepo());
mListArticoli = dto.getGrigliaAcquistiChild();
this.dismiss();
}, onFailed);
}
private void saveLisAToGriglia(List<ArticoloDTO> articoli, Griglia griglia, RunnableArgs<Griglia> onSave, RunnableArgs<Exception> onFail) {
List<ArticoloGriglia> articoliGriglia = new ArrayList<>();
for (ArticoloDTO articolo : articoli) {
ArticoloGriglia toSave = articolo.toArticoloGriglia();
toSave.setIdGriglia(griglia.getGrigliaId());
articoliGriglia.add(toSave);
}
articoloGrigliaRepository.saveArticoliToGriglia(articoliGriglia, griglia, () -> onSave.run(griglia), onFail);
}
}

View File

@ -101,7 +101,7 @@ public class OrdineAcquistoPvOpenListAdapter extends SectionedRecyclerViewAdapte
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));
String testataOrdString = String.format(mContext.getString(R.string.ord_acq_testata), ordine.getOrdineId(), UtilityDate.formatDate(ordine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN));
holder.binding.numArts.setText(Html.fromHtml(String.format(mContext.getString(R.string.ord_acq_num_articoli), String.valueOf(ordineWrapper.getCountArticoli()))));

View File

@ -9,7 +9,7 @@
<string name="loading">Caricamento</string>
<string name="completed">Completato</string>
<string name="success">Successo</string>
<string name="ord_acq_testata"><![CDATA[N° <b>%s</b> del <b>%s</b>]]></string>
<string name="ord_acq_testata"><![CDATA[N° <b>%d</b> del <b>%s</b>]]></string>
<string name="ord_ven_testata"><![CDATA[N° <b>%s</b> del <b>%s</b>]]></string>
<string name="ord_testata"><![CDATA[N° <b>%s</b> del <b>%s</b>]]></string>
<string name="doc_testata"><![CDATA[N° <b>%s</b> del <b>%s</b>]]></string>

View File

@ -49,7 +49,7 @@
<string name="search">Search&#8230;</string>
<string name="login">Login</string>
<string name="permission_request_message">Permissions are required for app to work properly</string>
<string name="ord_acq_testata"><![CDATA[#<b>%s</b> of <b>%s</b>]]></string>
<string name="ord_acq_testata"><![CDATA[#<b>%d</b> of <b>%s</b>]]></string>
<string name="ord_ven_testata"><![CDATA[#<b>%s</b> of <b>%s</b>]]></string>
<string name="ord_testata"><![CDATA[#<b>%s</b> of <b>%s</b>]]></string>
<string name="doc_testata"><![CDATA[#<b>%s</b> of <b>%s</b>]]></string>