diff --git a/app/build.gradle b/app/build.gradle index 989b3895..bf9cb5de 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ apply plugin: 'com.google.gms.google-services' android { - def appVersionCode = 360 - def appVersionName = '1.32.20' + def appVersionCode = 364 + def appVersionName = '1.32.24' signingConfigs { release { diff --git a/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/17.json b/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/17.json new file mode 100644 index 00000000..c6fe3d58 --- /dev/null +++ b/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/17.json @@ -0,0 +1,1168 @@ +{ + "formatVersion": 1, + "database": { + "version": 17, + "identityHash": "58c34e414c93055981d403d04eb9f353", + "entities": [ + { + "tableName": "articoli_griglia", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`articolo_griglia_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cod_mart` TEXT, `descrizione` TEXT, `unt_mis` TEXT, `qta_cnf` REAL NOT NULL, `bar_code` TEXT, `merce_da_ric` REAL NOT NULL, `media_sett` REAL NOT NULL, `flag_qta_multipla` TEXT, `qta_min_ordinabile` REAL NOT NULL, `gg_scadenza` INTEGER NOT NULL, `giacenza` REAL NOT NULL, `qta_prevista_vendita` REAL NOT NULL, `qta_proposta` REAL NOT NULL, `qta_ord` REAL NOT NULL, `id_griglia` INTEGER NOT NULL, `new_no_promo` INTEGER NOT NULL, FOREIGN KEY(`id_griglia`) REFERENCES `griglie`(`griglia_id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "articoloGrigliaId", + "columnName": "articolo_griglia_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMart", + "columnName": "cod_mart", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrizione", + "columnName": "descrizione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "untMis", + "columnName": "unt_mis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "qtaCnf", + "columnName": "qta_cnf", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "barCode", + "columnName": "bar_code", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "merceDaRic", + "columnName": "merce_da_ric", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "mediaSett", + "columnName": "media_sett", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "flagQtaMultipla", + "columnName": "flag_qta_multipla", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "qtaMinOrdinabile", + "columnName": "qta_min_ordinabile", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "ggScadenza", + "columnName": "gg_scadenza", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "giacenza", + "columnName": "giacenza", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "qtaPrevistaVendita", + "columnName": "qta_prevista_vendita", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "qtaProposta", + "columnName": "qta_proposta", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "qtaOrd", + "columnName": "qta_ord", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "idGriglia", + "columnName": "id_griglia", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "newNoPromo", + "columnName": "new_no_promo", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "articolo_griglia_id" + ] + }, + "indices": [ + { + "name": "index_articoli_griglia_id_griglia", + "unique": false, + "columnNames": [ + "id_griglia" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_articoli_griglia_id_griglia` ON `${TABLE_NAME}` (`id_griglia`)" + } + ], + "foreignKeys": [ + { + "table": "griglie", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "id_griglia" + ], + "referencedColumns": [ + "griglia_id" + ] + } + ] + }, + { + "tableName": "griglie", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`griglia_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cod_alis` TEXT, `descr_lisa` TEXT, `descr_depo` TEXT)", + "fields": [ + { + "fieldPath": "grigliaId", + "columnName": "griglia_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "codAlis", + "columnName": "cod_alis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrLisa", + "columnName": "descr_lisa", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrDepo", + "columnName": "descr_depo", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "griglia_id" + ] + }, + "indices": [ + { + "name": "index_griglie_cod_alis", + "unique": true, + "columnNames": [ + "cod_alis" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_griglie_cod_alis` ON `${TABLE_NAME}` (`cod_alis`)" + } + ], + "foreignKeys": [] + }, + { + "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, `cod_alis` TEXT)", + "fields": [ + { + "fieldPath": "ordineId", + "columnName": "ordine_id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "dataIns", + "columnName": "data_ins", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "annotazioni", + "columnName": "annotazioni", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "transmitted", + "columnName": "transmitted", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "transmissionDate", + "columnName": "transmission_date", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "gestione", + "columnName": "gestione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataOrd", + "columnName": "data_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numOrd", + "columnName": "num_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMdep", + "columnName": "cod_mdep", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "idGriglia", + "columnName": "id_griglia", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codAlis", + "columnName": "cod_alis", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "ordine_id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "articoli_ordine", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`articolo_ordine_id` INTEGER PRIMARY KEY AUTOINCREMENT, `cod_mart` TEXT, `descrizione` TEXT, `unt_mis` TEXT, `qta_cnf` REAL NOT NULL, `bar_code` TEXT, `merce_da_ric` REAL NOT NULL, `media_sett` REAL NOT NULL, `flag_qta_multipla` TEXT, `qta_min_ordinabile` REAL NOT NULL, `id_ordine` INTEGER NOT NULL, `qta_ord` REAL NOT NULL, `data_ins` INTEGER, `new_no_promo` INTEGER NOT NULL, `system_note` TEXT, `cod_alis` TEXT, FOREIGN KEY(`id_ordine`) REFERENCES `ordini`(`ordine_id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "articoloOrdineId", + "columnName": "articolo_ordine_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMart", + "columnName": "cod_mart", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrizione", + "columnName": "descrizione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "untMis", + "columnName": "unt_mis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "qtaCnf", + "columnName": "qta_cnf", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "barCode", + "columnName": "bar_code", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "merceDaRic", + "columnName": "merce_da_ric", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "mediaSett", + "columnName": "media_sett", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "flagQtaMultipla", + "columnName": "flag_qta_multipla", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "qtaMinOrdinabile", + "columnName": "qta_min_ordinabile", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "idOrdine", + "columnName": "id_ordine", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "qtaOrd", + "columnName": "qta_ord", + "affinity": "REAL", + "notNull": true + }, + { + "fieldPath": "dataIns", + "columnName": "data_ins", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "newNoPromo", + "columnName": "new_no_promo", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "systemNote", + "columnName": "system_note", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codAlis", + "columnName": "cod_alis", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "articolo_ordine_id" + ] + }, + "indices": [ + { + "name": "index_articoli_ordine_id_ordine", + "unique": false, + "columnNames": [ + "id_ordine" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_articoli_ordine_id_ordine` ON `${TABLE_NAME}` (`id_ordine`)" + }, + { + "name": "index_articoli_ordine_id_ordine_cod_mart", + "unique": true, + "columnNames": [ + "id_ordine", + "cod_mart" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_articoli_ordine_id_ordine_cod_mart` ON `${TABLE_NAME}` (`id_ordine`, `cod_mart`)" + } + ], + "foreignKeys": [ + { + "table": "ordini", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "id_ordine" + ], + "referencedColumns": [ + "ordine_id" + ] + } + ] + }, + { + "tableName": "mtb_colt", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `username` TEXT, `gestione` TEXT, `data_collo` INTEGER, `ser_collo` TEXT, `num_collo` INTEGER, `rif_ord` TEXT, `cod_anag` TEXT, `cod_vdes` TEXT, `cod_mdep` TEXT, `cod_vlis` TEXT, `cod_dtip` TEXT, `cod_tcol` TEXT, `ser_doc` TEXT, `annotazioni` TEXT, `posizione` TEXT, `cod_dtip_provv` TEXT, `ser_doc_provv` TEXT, `cod_jfas` TEXT, `data_ord` INTEGER, `data_doc` INTEGER, `data_doc_provv` INTEGER, `cod_mgrp` TEXT, `data_vers` INTEGER, `segno` INTEGER, `num_ord` INTEGER, `num_doc` INTEGER, `num_doc_provv` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "username", + "columnName": "username", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "gestione", + "columnName": "gestione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataCollo", + "columnName": "data_collo", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "serCollo", + "columnName": "ser_collo", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "numCollo", + "columnName": "num_collo", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "rifOrd", + "columnName": "rif_ord", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codAnag", + "columnName": "cod_anag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codVdes", + "columnName": "cod_vdes", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codMdep", + "columnName": "cod_mdep", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codVlis", + "columnName": "cod_vlis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codDtip", + "columnName": "cod_dtip", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codTcol", + "columnName": "cod_tcol", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serDoc", + "columnName": "ser_doc", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "annotazioni", + "columnName": "annotazioni", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "posizione", + "columnName": "posizione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codDtipProvv", + "columnName": "cod_dtip_provv", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serDocProvv", + "columnName": "ser_doc_provv", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codJfas", + "columnName": "cod_jfas", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataOrd", + "columnName": "data_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataDoc", + "columnName": "data_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataDocProvv", + "columnName": "data_doc_provv", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMgrp", + "columnName": "cod_mgrp", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataVers", + "columnName": "data_vers", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "segno", + "columnName": "segno", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numOrd", + "columnName": "num_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numDoc", + "columnName": "num_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numDocProvv", + "columnName": "num_doc_provv", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_mtb_colt_data_collo_ser_collo_num_collo_gestione", + "unique": true, + "columnNames": [ + "data_collo", + "ser_collo", + "num_collo", + "gestione" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_mtb_colt_data_collo_ser_collo_num_collo_gestione` ON `${TABLE_NAME}` (`data_collo`, `ser_collo`, `num_collo`, `gestione`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "mtb_colr", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `id_collo` INTEGER NOT NULL, `data_collo` INTEGER, `gestione` TEXT, `ser_collo` TEXT, `descrizione` TEXT, `num_collo` INTEGER, `riga` INTEGER, `riga_ord` INTEGER, `cod_mart` TEXT, `cod_barre` TEXT, `cod_col` TEXT, `cod_tagl` TEXT, `partita_mag` TEXT, `gestione_rif` TEXT, `ser_collo_rif` TEXT, `note` TEXT, `data_ord` INTEGER, `data_collo_rif` INTEGER, `qta_cnf` REAL, `qta_col` REAL, `num_ord` INTEGER, `num_etich` INTEGER, `num_collo_rif` INTEGER, `datetime_row` INTEGER, `cod_jcom` TEXT, `num_cnf` REAL, `causale` TEXT, `utente` TEXT, `cod_anag_doc` TEXT, `cod_dtip_doc` TEXT, `data_doc` INTEGER, `ser_doc` TEXT, `num_doc` INTEGER, `id_riga_doc` INTEGER, `unt_mis` TEXT, `data_scad` INTEGER, FOREIGN KEY(`id_collo`) REFERENCES `mtb_colt`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "idCollo", + "columnName": "id_collo", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "dataCollo", + "columnName": "data_collo", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "gestione", + "columnName": "gestione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serCollo", + "columnName": "ser_collo", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "descrizione", + "columnName": "descrizione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "numCollo", + "columnName": "num_collo", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "riga", + "columnName": "riga", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "rigaOrd", + "columnName": "riga_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMart", + "columnName": "cod_mart", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codBarre", + "columnName": "cod_barre", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codCol", + "columnName": "cod_col", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codTagl", + "columnName": "cod_tagl", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "partitaMag", + "columnName": "partita_mag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "gestioneRif", + "columnName": "gestione_rif", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "serColloRif", + "columnName": "ser_collo_rif", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "note", + "columnName": "note", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataOrd", + "columnName": "data_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataColloRif", + "columnName": "data_collo_rif", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "qtaCnf", + "columnName": "qta_cnf", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "qtaCol", + "columnName": "qta_col", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "numOrd", + "columnName": "num_ord", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numEtich", + "columnName": "num_etich", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "numColloRif", + "columnName": "num_collo_rif", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "datetimeRow", + "columnName": "datetime_row", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codJcom", + "columnName": "cod_jcom", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "numCnf", + "columnName": "num_cnf", + "affinity": "REAL", + "notNull": false + }, + { + "fieldPath": "causale", + "columnName": "causale", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "utente", + "columnName": "utente", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codAnagDoc", + "columnName": "cod_anag_doc", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codDtipDoc", + "columnName": "cod_dtip_doc", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataDoc", + "columnName": "data_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "serDoc", + "columnName": "ser_doc", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "numDoc", + "columnName": "num_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "idRigaDoc", + "columnName": "id_riga_doc", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "untMis", + "columnName": "unt_mis", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataScad", + "columnName": "data_scad", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [ + { + "name": "index_mtb_colr_data_collo_ser_collo_num_collo_gestione_riga", + "unique": true, + "columnNames": [ + "data_collo", + "ser_collo", + "num_collo", + "gestione", + "riga" + ], + "orders": [], + "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_mtb_colr_data_collo_ser_collo_num_collo_gestione_riga` ON `${TABLE_NAME}` (`data_collo`, `ser_collo`, `num_collo`, `gestione`, `riga`)" + }, + { + "name": "index_mtb_colr_id_collo", + "unique": false, + "columnNames": [ + "id_collo" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_mtb_colr_id_collo` ON `${TABLE_NAME}` (`id_collo`)" + } + ], + "foreignKeys": [ + { + "table": "mtb_colt", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "id_collo" + ], + "referencedColumns": [ + "id" + ] + } + ] + }, + { + "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, `zona` TEXT, `new` INTEGER, `remote_sync_date` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "idInventario", + "columnName": "id_inventario", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "codMdep", + "columnName": "cod_mdep", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "dataInventario", + "columnName": "data_inventario", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataReg", + "columnName": "data_reg", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataVer", + "columnName": "data_ver", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "filtro", + "columnName": "filtro", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "flagStato", + "columnName": "flag_stato", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "flagOperazione", + "columnName": "flag_operazione", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codAnag", + "columnName": "cod_anag", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "codDtip", + "columnName": "cod_dtip", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "inseritoDa", + "columnName": "inserito_da", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "registratoDa", + "columnName": "registrato_da", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "verificatoDa", + "columnName": "verificato_da", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "dataOraInizio", + "columnName": "data_ora_inizio", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dataOraFine", + "columnName": "data_ora_fine", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "causale", + "columnName": "causale", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "zona", + "columnName": "zona", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "isNew", + "columnName": "new", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteSyncDate", + "columnName": "remote_sync_date", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "indices": [ + { + "name": "index_inventari__id", + "unique": false, + "columnNames": [ + "_id" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_inventari__id` ON `${TABLE_NAME}` (`_id`)" + }, + { + "name": "index_inventari_id_inventario", + "unique": false, + "columnNames": [ + "id_inventario" + ], + "orders": [], + "createSql": "CREATE INDEX IF NOT EXISTS `index_inventari_id_inventario` ON `${TABLE_NAME}` (`id_inventario`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "inventario_rows", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `parent_id` INTEGER, `cod_mart` TEXT, `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 CASCADE )", + "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": false + }, + { + "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": { + "autoGenerate": true, + "columnNames": [ + "_id" + ] + }, + "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": "CASCADE", + "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, '58c34e414c93055981d403d04eb9f353')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java index 969a3ffe..03988019 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/class_router/configs/MenuConfiguration.java @@ -201,7 +201,7 @@ public class MenuConfiguration extends BaseMenuConfiguration { .setID(it.integry.integrywmsnative.R.id.nav_pv_doc_interni) .setTitleText(it.integry.integrywmsnative.R.string.doc_interni) .setTitleIcon(R.drawable.ic_dashboard_contab_doc_interni) - .setDrawerIcon(it.integry.integrywmsnative.R.drawable.ic_dashboard_contab_doc_interni) + .setDrawerIcon(R.drawable.ic_documents_outline) .setFragmentFactory(DocInterniFragment::newInstance)) // .addItem(new MenuItem() 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 7938f4e6..c5608a7f 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 @@ -40,7 +40,7 @@ import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; InventarioRoomDTO.class, InventarioRowRoomDTO.class }, - version = 16) + version = 17) @TypeConverters({ DateConverter.class, BigDecimalConverter.class, @@ -68,7 +68,8 @@ public abstract class AppDatabase extends RoomDatabase { .addMigrations(MIGRATION_12_13) .addMigrations(MIGRATION_13_14) .addMigrations(MIGRATION_14_15) - .addMigrations(MIGRATION_15_16); + .addMigrations(MIGRATION_15_16) + .addMigrations(MIGRATION_16_17); sInstance = builder.build(); } @@ -161,4 +162,20 @@ public abstract class AppDatabase extends RoomDatabase { public void migrate(@NonNull SupportSQLiteDatabase database) { } }; + static final Migration MIGRATION_16_17 = new Migration(16, 17) { + @Override + public void migrate(@NonNull SupportSQLiteDatabase database) { + database.execSQL("ALTER TABLE inventario_rows RENAME TO _inventario_rows_old;"); + database.execSQL("DROP INDEX index_inventario_rows__id;"); + database.execSQL("DROP INDEX index_inventario_rows_parent_id;"); + + database.execSQL("CREATE TABLE inventario_rows (_id INTEGER PRIMARY KEY AUTOINCREMENT, parent_id INTEGER, cod_mart TEXT, 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 CASCADE);"); + + database.execSQL("INSERT INTO inventario_rows SELECT * FROM _inventario_rows_old;"); + + database.execSQL("CREATE INDEX index_inventario_rows__id ON inventario_rows (_id);"); + database.execSQL("CREATE INDEX index_inventario_rows_parent_id ON inventario_rows (parent_id)"); + database.execSQL("DROP TABLE _inventario_rows_old;"); + } + }; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/InventarioRowRoomDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/InventarioRowRoomDTO.java index 3e4e851e..5b21ce9b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/InventarioRowRoomDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/InventarioRowRoomDTO.java @@ -17,7 +17,8 @@ import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInte @ForeignKey( entity = InventarioRoomDTO.class, parentColumns = {BaseSyncDTO.Columns.ID}, - childColumns = {InventarioRowRoomDTO.Columns.PARENT_ID} + childColumns = {InventarioRowRoomDTO.Columns.PARENT_ID}, + onDelete = ForeignKey.CASCADE ) } ) diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/_BaseRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/_BaseRepository.java index f5d52879..b6d97ea2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/_BaseRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/_BaseRepository.java @@ -58,7 +58,7 @@ public abstract class _BaseRepository< .collect(Collectors.toList()); var dataToDelete = finalLocalData.stream() - .filter(x -> x.isSyncronized() && finalRemoteData.stream().noneMatch(y -> keyComparator.run(y, x))) + .filter(x -> finalRemoteData.stream().noneMatch(y -> keyComparator.run(y, x))) .collect(Collectors.toList()); var dataToInsert = finalRemoteData.stream() diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java index e8ad206a..b6223f41 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/BindableFloat.java @@ -1,10 +1,9 @@ package it.integry.integrywmsnative.core.di; -import java.math.BigDecimal; -import java.math.RoundingMode; - import androidx.databinding.BaseObservable; +import java.math.BigDecimal; + import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.utility.UtilityNumber; @@ -20,7 +19,7 @@ public class BindableFloat extends BaseObservable { if(numberOfDigits > CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS) numberOfDigits = CommonConst.Config.NUMBER_OF_DECIMAL_DIGITS; - return new BigDecimal(get()); + return BigDecimal.valueOf(get()); } public Float get(boolean defaultIfNull) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java index a49ae8b1..a8d66c0d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/DBSettingsModel.java @@ -56,6 +56,7 @@ public class DBSettingsModel { private boolean showCodFornSpedizione = true; private boolean flagCanCreateInventario = true; private boolean flagCanAddUnknownItemsInventario = true; + private boolean flagShouldAskToCreateOrUpdateRowInventario = false; public boolean isFlagSpedizioneEnableFakeGiacenza() { return flagSpedizioneEnableFakeGiacenza; @@ -418,6 +419,15 @@ public class DBSettingsModel { return this; } + public boolean isFlagShouldAskToCreateOrUpdateRowInventario() { + return flagShouldAskToCreateOrUpdateRowInventario; + } + + public DBSettingsModel setFlagShouldAskToCreateOrUpdateRowInventario(boolean flagShouldAskToCreateOrUpdateRowInventario) { + this.flagShouldAskToCreateOrUpdateRowInventario = flagShouldAskToCreateOrUpdateRowInventario; + return this; + } + public boolean isFlagConsentiFuoriPianoLogistico() { return flagConsentiFuoriPianoLogistico; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java index d2c4832b..a65aa78f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/settings/SettingsManager.java @@ -363,6 +363,10 @@ public class SettingsManager { .setGestName("PICKING") .setSection("INVENTARIO") .setKeySection("FLAG_CAN_ADD_UNKNOWN_ITEMS")); + stbGestSetupList.add(new StbGestSetup() + .setGestName("PICKING") + .setSection("INVENTARIO") + .setKeySection("FLAG_SHOULD_ASK_TO_CREATE_OR_UPDATE_ROW")); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); mGestSetupRESTConsumer.getValues(codMdep, stbGestSetupList, list -> { @@ -398,6 +402,7 @@ public class SettingsManager { dbSettingsModelIstance.setGroupShippingByCommodityGroup(getValueFromList(list, "SPEDIZIONE", "FLAG_GROUP_BY_GRP_MERC", Boolean.class, Boolean.FALSE)); dbSettingsModelIstance.setFlagCanCreateInventario(getValueFromList(list, "INVENTARIO", "FLAG_CAN_CREATE_INVENTARIO", Boolean.class, Boolean.TRUE)); dbSettingsModelIstance.setFlagCanAddUnknownItemsInventario(getValueFromList(list, "INVENTARIO", "FLAG_CAN_ADD_UNKNOWN_ITEMS", Boolean.class, Boolean.TRUE)); + dbSettingsModelIstance.setFlagShouldAskToCreateOrUpdateRowInventario(getValueFromList(list, "INVENTARIO", "FLAG_SHOULD_ASK_TO_CREATE_OR_UPDATE_ROW", Boolean.class, Boolean.FALSE)); String notePerdita = getValueFromList(list, "DOC_INTERNI", "NOTE_PERDITA", String.class); if (notePerdita != null) @@ -435,7 +440,7 @@ public class SettingsManager { } else if (clazz == Integer.class && value.getValue() != null) { return clazz.cast(Integer.parseInt(value.getValue())); } - } else { + } else if(defaultValue == null) { if (clazz == Boolean.class) { return clazz.cast(Boolean.FALSE); } else if (clazz == Integer.class) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java index b225c9ea..90f98586 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniFragment.java @@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.contab_doc_interni; import android.content.Context; import android.os.Bundle; -import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -30,7 +29,6 @@ import it.integry.integrywmsnative.core.expansion.BaseFragment; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.rest.model.documento.DocumentoArtDTO; -import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.FragmentDocInterniBinding; import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoResponseDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoView; @@ -125,26 +123,7 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, @Override public void onDocDetailsChanged(DialogSelectDocInfoResponseDTO selection) { mViewModel.setSelectedDocDetails(selection); - - if (selection.isFornitoreRequired()) { - mBinding.codAnagContainer.setVisibility(View.VISIBLE); - } else { - mBinding.codAnagContainer.setVisibility(View.GONE); - } - - -// if (selection.getGruppoArt() != null) { -// mBinding.mtbGrpContainer.setVisibility(View.VISIBLE); -// } else { -// mBinding.mtbGrpContainer.setVisibility(View.GONE); -// } - - if (selection.isDocumentRequired()) { - mBinding.docContainer.setVisibility(View.VISIBLE); - mBinding.document.setText(Html.fromHtml(getString(R.string.doc_testata, String.valueOf(selection.getNumDoc()), UtilityDate.formatDate(selection.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)))); - } else { - mBinding.docContainer.setVisibility(View.GONE); - } + mBinding.invalidateAll(); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java index f686a216..84a04510 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/DocInterniViewModel.java @@ -35,14 +35,14 @@ public class DocInterniViewModel { private boolean docsFetched = true; private int nextNumCollo = 0; private List availableArts; - private MutableLiveData> mDocsList = new MutableLiveData<>(); + private final MutableLiveData> mDocsList = new MutableLiveData<>(); - public final MutableLiveData dtbTipi = new MutableLiveData<>(); - public final MutableLiveData mtbGrup = new MutableLiveData<>(); - public final MutableLiveData fornitore = new MutableLiveData<>(); - public final MutableLiveData dataDoc = new MutableLiveData<>(); - public final MutableLiveData numDoc = new MutableLiveData<>(); - public final MutableLiveData note = new MutableLiveData<>(); + public TipoDocDTO dtbTipi; + public GruppoArticoloDTO mtbGrup; + public FornitoreDTO fornitore; + public Date dataDoc; + public String numDoc; + public String note; public final BindableInteger artsSize = new BindableInteger(0); @Inject @@ -86,13 +86,13 @@ public class DocInterniViewModel { } public void setSelectedDocDetails(DialogSelectDocInfoResponseDTO selection) { - this.fornitore.postValue(selection.getFornitore()); - this.dtbTipi.postValue(selection.getTipoDoc()); + this.fornitore = selection.getFornitore(); + this.dtbTipi = selection.getTipoDoc(); - this.mtbGrup.postValue(selection.getGruppoArt()); - this.dataDoc.postValue(selection.getDataDoc()); - this.numDoc.postValue(selection.getNumDoc() != null ? selection.getNumDoc().toString() : null); - this.note.postValue(selection.getNote()); + this.mtbGrup = selection.getGruppoArt(); + this.dataDoc = selection.getDataDoc(); + this.numDoc = selection.getNumDoc() != null ? selection.getNumDoc().toString() : null; + this.note = selection.getNote(); this.sendOnLoadingStarted(); fetchProducts(() -> { @@ -118,7 +118,7 @@ public class DocInterniViewModel { String codAnag = null; String codVdes = null; - FornitoreDTO fornitore = this.fornitore.getValue(); + FornitoreDTO fornitore = this.fornitore; if (fornitore != null) { codAnag = fornitore.getCodAnag(); codVdes = fornitore.getCodVdes(); @@ -126,7 +126,7 @@ public class DocInterniViewModel { var docsList = documentRepository.getDocuments(this.getCodDtip(), - codAnag, codVdes, dataDoc.getValue(), numDoc.getValue()); + codAnag, codVdes, dataDoc, numDoc); docsList.observeForever(data -> { this.mDocsList.postValue(data); @@ -145,31 +145,28 @@ public class DocInterniViewModel { } private String getCodDtip() { - if (this.dtbTipi.getValue() == null) { + if (this.dtbTipi == null) { return null; } - return this.dtbTipi.getValue().getCodDtip(); + return this.dtbTipi.getCodDtip(); } public TipoDocDTO getTipoDoc() { - if (this.dtbTipi.getValue() == null) { - return null; - } - return this.dtbTipi.getValue(); + return this.dtbTipi; } private String getCodMgrp() { - if (this.mtbGrup.getValue() == null) { + if (this.mtbGrup == null) { return null; } - return this.mtbGrup.getValue().getCodMgrp(); + return this.mtbGrup.getCodMgrp(); } private String getCodAnagForn() { - if (this.fornitore.getValue() == null) { + if (this.fornitore == null) { return null; } - return this.fornitore.getValue().getCodAnag(); + return this.fornitore.getCodAnag(); } public void editDocument(SqlMtbColt document) { @@ -178,7 +175,7 @@ public class DocInterniViewModel { public void newDocument() { SqlMtbColt document = new SqlMtbColt(); - if (this.dtbTipi.getValue() == null) { + if (this.dtbTipi == null) { this.sendError(new NoDocTypeSelectedException()); return; } @@ -186,18 +183,18 @@ public class DocInterniViewModel { document.setCodMgrp(this.getCodMgrp()); document.setDataCollo(new Date()); document.setCodMdep(SettingsManager.i().getUserSession().getDepo().getCodMdep()); - document.setAnnotazioni(this.note.getValue()); + document.setAnnotazioni(this.note); document.setSegno(-1); document.setSerCollo("/"); document.setNumCollo(this.nextNumCollo); document.setGestione("L"); - document.setDataDoc(this.dataDoc.getValue()); - if (this.numDoc.getValue() != null) { - document.setNumDoc(Integer.parseInt(this.numDoc.getValue())); + document.setDataDoc(this.dataDoc); + if (this.numDoc != null) { + document.setNumDoc(Integer.parseInt(this.numDoc)); } - if (this.fornitore.getValue() != null) { - document.setCodAnag(this.fornitore.getValue().getCodAnag()); - document.setCodVdes(this.fornitore.getValue().getCodVdes()); + if (this.fornitore != null) { + document.setCodAnag(this.fornitore.getCodAnag()); + document.setCodVdes(this.fornitore.getCodVdes()); } documentRepository.insert(document, id -> { document.setId(id); @@ -206,7 +203,7 @@ public class DocInterniViewModel { } public boolean hasDocDetails() { - return this.dtbTipi.getValue() != null; + return this.dtbTipi != null; } public interface Listener extends ILoadingListener { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java index a1ab5ea4..46d2d6be 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormActivity.java @@ -3,7 +3,6 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form; import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.view.View; import android.widget.Toast; import androidx.annotation.Nullable; @@ -130,7 +129,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter if (document.getCodAnag() != null) { this.codAnag.set(document.getCodAnag() + (document.getCodVdes() != null ? " - " + document.getCodVdes() : "")); } else { - this.binding.supplierLayout.setVisibility(View.GONE); + this.codAnag.set(null); } this.documentHeader.set(String.format(this.getString(R.string.doc_interni_doc_header), document.getId(), document.getCodDtipProvv())); @@ -138,7 +137,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter if (document.getNumDoc() != null && document.getDataDoc() != null) { this.documentRifHeader.set(String.format(this.getString(R.string.doc_testata), document.getNumDoc().toString(), UtilityDate.formatDate(document.getDataDoc(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))); } else { - this.binding.docRifLayout.setVisibility(View.GONE); + this.documentRifHeader.set(null); } } @@ -186,7 +185,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter "Ricerca articolo", null, "Cod articolo / Barcode", - barcodeProd -> this.viewModel.loadArticoloByCodMart(barcodeProd), BarcodeManager::enable).show(); + barcodeProd -> this.viewModel.loadArticoloByCodMartOrBarcode(barcodeProd), BarcodeManager::enable).show(); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java index fea0f8dd..278a41d4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java @@ -9,7 +9,6 @@ import org.json.JSONObject; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import javax.inject.Inject; @@ -37,17 +36,17 @@ import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQua public class DocInterniEditFormViewModel { - @Inject - MtbColrDataSource mtbColrRepository; - @Inject - MtbColtRepository mtbColtRepository; + private final MtbColrDataSource mtbColrRepository; + private final MtbColtRepository mtbColtRepository; private final DocInterniRESTConsumer docInterniRESTConsumer; - private DocInterniEditFormViewModel.Listener listener; + private Listener listener; private List productsList; - private HashMap flattedBarcodesCodMarts; private TipoDocDTO tipoDoc; + private boolean isCheckPartitaMag = false; private JSONObject checkFornitoreRules = null; + + public MutableLiveData document = new MutableLiveData<>(); public MutableLiveData> docRows = new MutableLiveData<>(); @@ -129,9 +128,10 @@ public class DocInterniEditFormViewModel { this.listener.onDocumentHoldRequest(); } - public void loadArticoloByCodMart(String codMart) { + public void loadArticoloByCodMartOrBarcode(String codMart) { var matchedArt = Stream.of(productsList) - .filter(x -> x.getCodMart().equalsIgnoreCase(codMart)) + .filter(x -> x.getCodMart().equalsIgnoreCase(codMart) || + x.getBarcode().contains(codMart)) .findFirst() .orElse(null); @@ -298,13 +298,6 @@ public class DocInterniEditFormViewModel { public void setProductsList(List productsList) { this.productsList = productsList; - this.flattedBarcodesCodMarts = new HashMap<>(); - - for (DocumentoArtDTO documentArt : productsList) { - for (String barcode : documentArt.getBarcode()) { - this.flattedBarcodesCodMarts.put(barcode, documentArt.getCodMart()); - } - } } public void processBarcode(BarcodeScanDTO dto) { @@ -312,10 +305,7 @@ public class DocInterniEditFormViewModel { } public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO) { - if(UtilityBarcode.isCode128(barcodeScanDTO)) { - this.loadArticoloByCodMart(barcodeScanDTO.getStringValue()); - - } else if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { + if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { //Cerco tramite etichetta ean peso this.executeEtichettaEanPeso(barcodeScanDTO); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java index a399dabb..6e13463f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java @@ -36,6 +36,8 @@ import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.databinding.ActivityPickingInventarioBinding; import it.integry.integrywmsnative.databinding.ActivityPickingInventarioListItemBinding; +import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsItemListModel; +import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsView; import it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_row_actions.BottomSheetInventarioRowActionsView; import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; @@ -99,7 +101,8 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn mViewModel.init( DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO)), DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO_ARTS)), - SettingsManager.iDB().isFlagCanAddUnknownItemsInventario()); + SettingsManager.iDB().isFlagCanAddUnknownItemsInventario(), + SettingsManager.iDB().isFlagShouldAskToCreateOrUpdateRowInventario()); initToolbar(); initBarcodeReader(); @@ -236,6 +239,36 @@ public class PickingInventarioActivity extends BaseActivity implements PickingIn .show(getSupportFragmentManager(), "tag"); } + @Override + public void onItemAlreadyFound(InventarioArtDTO matchedArt, List alreadyScannedItems) { + final List> dialogSelectDocRowsItemListModels = Stream.of(alreadyScannedItems) + .map(x -> new DialogSelectDocRowsItemListModel<>() + .setBarcode(x.getScanCodBarre()) + .setCodMart(x.getCodMart()) + .setDescrizione(x.getDescrizione()) + .setQtaOrd(x.getQta()) + .setUntMisOrd(x.getUntMis()) + .setNew(false) + .setOriginalModel(x)) + .toList(); + + dialogSelectDocRowsItemListModels.add(new DialogSelectDocRowsItemListModel<>() + .setCodMart(matchedArt.getCodMart()) + .setDescrizione(matchedArt.getDescrizione()) + .setQtaOrd(BigDecimal.ZERO) + .setUntMisOrd(matchedArt.getUntMis()) + .setNew(true)); + + DialogSelectDocRowsView.newInstance(dialogSelectDocRowsItemListModels, data -> { + if(data.isNew()) + this.mViewModel.dispatchRowInsert(null, matchedArt, null); + else + this.mViewModel.dispatchRowEdit(matchedArt.toMtbAart(), (InventarioRowRoomDTO) data.getOriginalModel()); + }, () -> { + + }).show(this.getSupportFragmentManager(), "DialogSelectDocRowsView"); + } + public void showAvailableArts() { var listaMtbAart = Stream.of(this.mViewModel.getAvailableArts()) .map(InventarioArtDTO::toMtbAart) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioViewModel.java index 3bf83309..6c06338b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioViewModel.java @@ -4,6 +4,8 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; +import com.annimon.stream.Stream; + import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; @@ -37,6 +39,7 @@ public class PickingInventarioViewModel extends ViewModel { private final InventarioRowRepository inventarioRowRepository; private boolean canAddUnknownItems; + private boolean flagShouldAskToCreateOrUpdateRowInventario; public MutableLiveData currentInventario = new MutableLiveData<>(); public LiveData> currentInventarioRows = new MutableLiveData<>(); @@ -51,8 +54,9 @@ public class PickingInventarioViewModel extends ViewModel { this.inventarioRowRepository = inventarioRowRepository; } - public void init(InventarioRoomDTO inventarioRoomDTO, List inventarioArts, boolean canAddUnknownItems) { + public void init(InventarioRoomDTO inventarioRoomDTO, List inventarioArts, boolean canAddUnknownItems, boolean flagShouldAskToCreateOrUpdateRowInventario) { this.canAddUnknownItems = canAddUnknownItems; + this.flagShouldAskToCreateOrUpdateRowInventario = flagShouldAskToCreateOrUpdateRowInventario; this.sendOnLoadingStarted(); @@ -159,24 +163,41 @@ public class PickingInventarioViewModel extends ViewModel { if (canAddUnknownItems && matchedArt == null) { matchedArt = new InventarioArtDTO() - .setBarcode(barcodeList) - .setFlagQtaCnfFissa(true) - .setPlu(false) - .setUntMis("PZ") - .setQtaCnf(BigDecimal.ONE); + .setBarcode(barcodeList) + .setFlagQtaCnfFissa(true) + .setPlu(false) + .setUntMis("PZ") + .setQtaCnf(BigDecimal.ONE); } if (matchedArt != null) { - this.dispatchRowInsert(barcodeProd, matchedArt, ean128Model); + var alreadyScannedItems = searchArtInAlreadyScannedItems(matchedArt); + + if (alreadyScannedItems == null || alreadyScannedItems.isEmpty() || !flagShouldAskToCreateOrUpdateRowInventario) + this.dispatchRowInsert(barcodeProd, matchedArt, ean128Model); + + else { + this.sendOnItemAlreadyFound(matchedArt, alreadyScannedItems); + + } onComplete.run(); } else this.sendError(new NoResultFromBarcodeException(barcodeProd)); + } + private List searchArtInAlreadyScannedItems(InventarioArtDTO inventarioArtDTO) { + final List inventarioRows = this.currentInventarioRows.getValue(); + + if (inventarioRows == null) return null; + + return Stream.of(inventarioRows) + .filter(x -> x.getCodMart().equalsIgnoreCase(inventarioArtDTO.getCodMart())) + .toList(); } - private void dispatchRowInsert(String barcode, InventarioArtDTO inventarioArtDTO, Ean128Model ean128Model) { + public void dispatchRowInsert(String barcode, InventarioArtDTO inventarioArtDTO, Ean128Model ean128Model) { var mtbAart = inventarioArtDTO.toMtbAart(); mtbAart.setFlagTracciabilita("N"); @@ -290,7 +311,7 @@ public class PickingInventarioViewModel extends ViewModel { } } - private void dispatchRowEdit(MtbAart mtbAart, InventarioRowRoomDTO inventarioRowRoomDTO) { + public void dispatchRowEdit(MtbAart mtbAart, InventarioRowRoomDTO inventarioRowRoomDTO) { final PickingObjectDTO pickingObjectDTO = new PickingObjectDTO() .setMtbAart(mtbAart); @@ -393,6 +414,11 @@ public class PickingInventarioViewModel extends ViewModel { onComplete); } + private void sendOnItemAlreadyFound(InventarioArtDTO matchedArt, List alreadyScannedItems) { + if(this.mListener != null) + this.mListener.onItemAlreadyFound(matchedArt, alreadyScannedItems); + } + public PickingInventarioViewModel setListener(Listener listener) { this.mListener = listener; return this; @@ -419,5 +445,7 @@ public class PickingInventarioViewModel extends ViewModel { RunnableArgss onComplete); + void onItemAlreadyFound(InventarioArtDTO matchedArt, List alreadyScannedItems); + } } \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/info_situazione_articolo/DialogInfoSituazioneArticoloView.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/info_situazione_articolo/DialogInfoSituazioneArticoloView.java index e0add105..827c02e6 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/info_situazione_articolo/DialogInfoSituazioneArticoloView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/dialogs/row_info/info_situazione_articolo/DialogInfoSituazioneArticoloView.java @@ -119,7 +119,7 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView { availableItems = new ArrayList<>(); availableItems = Stream.of(availableItems) - .filter(x -> UtilityDate.isAfterToday(x.getDataScad())) + .filter(x -> x.getDataScad() == null || UtilityDate.isAfterToday(x.getDataScad())) .toList(); if(availableItems.isEmpty()) @@ -141,7 +141,7 @@ public class DialogInfoSituazioneArticoloView extends BaseDialogRowInfoView { var itemListCommessaNotMatchMatch = Stream.of(itemList) .filter(dialogInfoSituazioneArticoloAvailableListItem -> !dialogInfoSituazioneArticoloAvailableListItem.isCommessaMatch()) - .sortBy(x -> x.getDataScad()) + .sortBy(x -> x.getDataScad() == null ? UtilityDate.getNow() : x.getDataScad()) .toList(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java index 34ea056a..b466f34c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/ui/SpedizioneListAdapter.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.expansion.OnListGeneralChangedCallback; import it.integry.integrywmsnative.core.expansion.OnSingleClickListener; import it.integry.integrywmsnative.core.expansion.RunnableArgsss; @@ -150,8 +151,18 @@ public class SpedizioneListAdapter extends SectionedRecyclerViewAdapter + + diff --git a/app/src/main/res/drawable/ic_documents_outline.xml b/app/src/main/res/drawable/ic_documents_outline.xml new file mode 100644 index 00000000..a5967ce4 --- /dev/null +++ b/app/src/main/res/drawable/ic_documents_outline.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_contab_doc_interni_edit.xml b/app/src/main/res/layout/activity_contab_doc_interni_edit.xml index 18b4e323..eba83439 100644 --- a/app/src/main/res/layout/activity_contab_doc_interni_edit.xml +++ b/app/src/main/res/layout/activity_contab_doc_interni_edit.xml @@ -71,136 +71,158 @@ - + android:layout_margin="12dp" + app:cardCornerRadius="16dp" + app:cardElevation="4dp"> + android:background="@color/colorPrimary" + android:orientation="horizontal" + android:padding="16dp"> - - - - - - - - - - - - - - - - - - - + + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + + + android:layout_marginTop="2dp" + android:orientation="horizontal"> - + + + + + + + + android:layout_marginTop="2dp" + android:orientation="horizontal"> + + + + + + + + - - - - - + + android:paddingEnd="2dp" + tools:itemCount="5" + tools:listitem="@layout/activity_contab_doc_interno_row__list_single_item" /> + + + + - - + + + + + + android:text="Tipo doc:" /> + + + android:layout_marginTop="2dp" + android:orientation="horizontal" + app:reverse_visibility="@{viewModel.fornitore == null}"> + android:text="Fornitore:" /> - - - - - - - + android:layout_marginTop="2dp" + android:orientation="horizontal" + app:reverse_visibility="@{UtilityString.isNullOrEmpty(viewModel.numDoc)}"> + android:text="Documento:" /> + android:layout_marginStart="4dp" + android:text="@{Html.fromHtml(context.getString(R.string.doc_testata, viewModel.numDoc, UtilityDate.formatDate(viewModel.dataDoc, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)))}" + tools:text="n. 123 del 29/03/2023" /> + - + - + + + + + + android:layout_height="match_parent" + android:layout_marginTop="16dp" + android:background="@color/full_white" + android:paddingStart="2dp" + android:paddingEnd="2dp" + tools:itemCount="5" + tools:listitem="@layout/doc_interni_list_model" /> - + - + - + + + + + + + android:adjustViewBounds="true" + android:src="@drawable/ic_playlist_add_check_24dp" /> - - - - - + - app:layout_constraintEnd_toStartOf="@id/guideline_empty_right" - app:layout_constraintStart_toEndOf="@id/guideline_empty_left" - app:layout_constraintTop_toTopOf="@id/guideline_empty_top"> - - - - - - - + - - +