diff --git a/app/build.gradle b/app/build.gradle index 52491f55..ffaa4f0d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -41,6 +41,13 @@ android { versionName appVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" signingConfig signingConfigs.release + + javaCompileOptions { + annotationProcessorOptions { + arguments += ["room.schemaLocation": + "$projectDir/schemas".toString()] + } + } } buildTypes { @@ -59,8 +66,9 @@ android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 - + coreLibraryDesugaringEnabled true } + productFlavors { } @@ -152,6 +160,8 @@ dependencies { implementation "androidx.room:room-runtime:$room_version" annotationProcessor "androidx.room:room-compiler:$room_version" + implementation "androidx.room:room-rxjava3:$room_version" + androidTestImplementation "androidx.room:room-testing:2.4.3" //AppUpdate implementation 'com.github.javiersantos:AppUpdater:2.7' @@ -178,6 +188,9 @@ dependencies { // RxJava is also required. implementation 'io.reactivex.rxjava2:rxjava:2.1.12' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' + + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.0' + } repositories { diff --git a/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/11.json b/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/11.json new file mode 100644 index 00000000..5138adfb --- /dev/null +++ b/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/11.json @@ -0,0 +1,1150 @@ +{ + "formatVersion": 1, + "database": { + "version": 11, + "identityHash": "6a7fc5a013080ef96827187ce0637459", + "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": { + "columnNames": [ + "articolo_griglia_id" + ], + "autoGenerate": true + }, + "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": { + "columnNames": [ + "griglia_id" + ], + "autoGenerate": true + }, + "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 NOT NULL)", + "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": true + } + ], + "primaryKey": { + "columnNames": [ + "ordine_id" + ], + "autoGenerate": true + }, + "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, 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 + } + ], + "primaryKey": { + "columnNames": [ + "articolo_ordine_id" + ], + "autoGenerate": true + }, + "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": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "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": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "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, `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": "remoteSyncDate", + "columnName": "remote_sync_date", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "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 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, '6a7fc5a013080ef96827187ce0637459')" + ] + } +} \ No newline at end of file diff --git a/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/12.json b/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/12.json new file mode 100644 index 00000000..9e87fdb6 --- /dev/null +++ b/app/schemas/it.integry.integrywmsnative.core.data_store.db.AppDatabase/12.json @@ -0,0 +1,1156 @@ +{ + "formatVersion": 1, + "database": { + "version": 12, + "identityHash": "a3c4983a84b2d615e548dcceba15ecf0", + "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": { + "columnNames": [ + "articolo_griglia_id" + ], + "autoGenerate": true + }, + "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": { + "columnNames": [ + "griglia_id" + ], + "autoGenerate": true + }, + "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 NOT NULL, `cod_alis` TEXT NOT NULL)", + "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": true + }, + { + "fieldPath": "codAlis", + "columnName": "cod_alis", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "ordine_id" + ], + "autoGenerate": true + }, + "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, 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 + } + ], + "primaryKey": { + "columnNames": [ + "articolo_ordine_id" + ], + "autoGenerate": true + }, + "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": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "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": { + "columnNames": [ + "id" + ], + "autoGenerate": true + }, + "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, `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": "remoteSyncDate", + "columnName": "remote_sync_date", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "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 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, 'a3c4983a84b2d615e548dcceba15ecf0')" + ] + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 38e73666..836facd1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -74,6 +74,12 @@ android:label="@string/activity_contenuto_bancale_title" android:screenOrientation="portrait" android:theme="@style/Light" /> + { - if (permanentlyDenied) { + if (permanentlyDenied) onError(new SpannableString(getText(R.string.permissions_permanently_denied))); - } else { - initPermissions(onComplete); - } + +// else { +// initPermissions(onComplete); +// } }); } 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 8e1c4763..48af157d 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 @@ -4,6 +4,7 @@ import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.model.secondary.GestioneEnum; import it.integry.integrywmsnative.gest.accettazione.MainAccettazioneFragment; import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniFragment; +import it.integry.integrywmsnative.gest.inventario.ElencoInventariFragment; import it.integry.integrywmsnative.gest.ordini_uscita_elenco.OrdiniUscitaElencoFragment; import it.integry.integrywmsnative.gest.picking_libero.PickingLiberoFragment; import it.integry.integrywmsnative.gest.prod_accettazione_ord_produzione.ProdOrdineProduzioneElencoFragment; @@ -164,6 +165,14 @@ public class MenuConfiguration extends BaseMenuConfiguration { .setDrawerIcon(R.drawable.ic_black_empty_box) .setFragmentFactory(RettificaGiacenzeFragment::newInstance)) + .addItem(new MenuItem() + .setID(R.id.nav_inventario) + .setCodMenu("MG062") + .setTitleText(R.string.inventario_fragment_title) + .setTitleIcon(R.drawable.ic_dashboard_rettifica_giacenze) + .setDrawerIcon(R.drawable.ic_black_empty_box) + .setFragmentFactory(ElencoInventariFragment::newInstance)) + ).addGroup( new MenuGroup() diff --git a/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java b/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java index 27a11b70..4b65e475 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/context/AppContext.java @@ -31,6 +31,9 @@ public class AppContext { @Inject AppDatabase mAppDatabase; + @Inject + SettingsManager mSettingsManager; + public AppContext(Context context) { this.mApplicationContext = context; @@ -53,7 +56,7 @@ public class AppContext { private void initSettings() { Stash.init(mApplicationContext); - SettingsManager.init(mApplicationContext); + mSettingsManager.init(); } private void initCrashlytics() { @@ -80,7 +83,7 @@ public class AppContext { Logger.addLogAdapter(new AndroidLogAdapter()); File logsFolder = new File(mApplicationContext.getExternalFilesDir(null).getAbsolutePath()); - int maxBytesSize = 5000; + int maxBytesSize = 5 * 1024 * 1024; Logger.addLogAdapter(new DiskLogAdapter(logsFolder, maxBytesSize)); } 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 a56b35d2..9317a702 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 @@ -1,31 +1,76 @@ package it.integry.integrywmsnative.core.data_store.db; +import android.content.Context; + import androidx.room.Database; +import androidx.room.Room; import androidx.room.RoomDatabase; import androidx.room.TypeConverters; +import androidx.room.migration.Migration; +import androidx.sqlite.db.SupportSQLiteDatabase; +import it.integry.integrywmsnative.core.data_store.db.converter.AppDatabaseConverters; import it.integry.integrywmsnative.core.data_store.db.converter.BigDecimalConverter; import it.integry.integrywmsnative.core.data_store.db.converter.DateConverter; import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloGrigliaDao; import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloOrdineDao; import it.integry.integrywmsnative.core.data_store.db.dao.GrigliaDao; +import it.integry.integrywmsnative.core.data_store.db.dao.InventarioDao; +import it.integry.integrywmsnative.core.data_store.db.dao.InventarioRowDao; import it.integry.integrywmsnative.core.data_store.db.dao.MtbColrDao; import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao; import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao; 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.InventarioRoomDTO; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; -@Database(entities = {ArticoloGriglia.class, Griglia.class, Ordine.class, ArticoloOrdine.class, SqlMtbColt.class, SqlMtbColr.class}, version = 10, exportSchema = false) +@Database(entities = { + ArticoloGriglia.class, + Griglia.class, + Ordine.class, + ArticoloOrdine.class, + SqlMtbColt.class, + SqlMtbColr.class, + InventarioRoomDTO.class, + InventarioRowRoomDTO.class +}, + version = 12, + exportSchema = true) @TypeConverters({ DateConverter.class, - BigDecimalConverter.class + BigDecimalConverter.class, + AppDatabaseConverters.class }) public abstract class AppDatabase extends RoomDatabase { + /** + * The only instance + */ + private static AppDatabase sInstance; + + /** + * Gets the singleton instance of SampleDatabase. + * + * @param applicationContext The context. + * @return The singleton instance of SampleDatabase. + */ + public static synchronized AppDatabase getInstance(Context applicationContext) { + if (sInstance == null) { + var builder = Room.databaseBuilder(applicationContext, + AppDatabase.class, "integry_wms") + .addMigrations(MIGRATION_10_11) + .addMigrations(MIGRATION_11_12); + + sInstance = builder.build(); + } + return sInstance; + } + public abstract ArticoloGrigliaDao articoloGrigliaDao(); public abstract GrigliaDao grigliaDao(); @@ -38,5 +83,32 @@ public abstract class AppDatabase extends RoomDatabase { public abstract MtbColrDao mtbColrDao(); + public abstract InventarioDao inventarioDao(); + public abstract InventarioRowDao inventarioRowDao(); + + + static final Migration MIGRATION_10_11 = new Migration(10, 11) { + @Override + public void migrate(SupportSQLiteDatabase database) { + database.execSQL("CREATE TABLE IF NOT EXISTS inventari (_id INTEGER PRIMARY KEY AUTOINCREMENT, id_inventario INTEGER, cod_mdep TEXT NOT NULL, zona TEXT, 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)"); + database.execSQL("CREATE INDEX IF NOT EXISTS index_inventari__id ON inventari (_id)"); + database.execSQL("CREATE INDEX IF NOT EXISTS index_inventari_id_inventario ON inventari (id_inventario)"); + + + database.execSQL("CREATE TABLE IF NOT EXISTS inventario_rows (_id INTEGER PRIMARY KEY AUTOINCREMENT, parent_id INTEGER, cod_mart TEXT NOT NULL, descrizione TEXT, partita_mag 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 )"); + database.execSQL("CREATE INDEX IF NOT EXISTS index_inventario_rows__id ON inventario_rows (_id)"); + 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;"); + } + }; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/RoomModule.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/RoomModule.java index b2577066..e9b8f6e8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/RoomModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/RoomModule.java @@ -1,8 +1,9 @@ package it.integry.integrywmsnative.core.data_store.db; import android.app.Application; +import android.os.Handler; -import androidx.room.Room; +import java.util.concurrent.ExecutorService; import javax.inject.Singleton; @@ -11,32 +12,38 @@ import dagger.Provides; import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloGrigliaDao; import it.integry.integrywmsnative.core.data_store.db.dao.ArticoloOrdineDao; import it.integry.integrywmsnative.core.data_store.db.dao.GrigliaDao; +import it.integry.integrywmsnative.core.data_store.db.dao.InventarioDao; +import it.integry.integrywmsnative.core.data_store.db.dao.InventarioRowDao; import it.integry.integrywmsnative.core.data_store.db.dao.MtbColrDao; import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao; import it.integry.integrywmsnative.core.data_store.db.dao.OrdineDao; 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.data_store.db.repository.MtbColrRepository; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSource; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository; -import it.integry.integrywmsnative.core.data_store.db.repository.implementations.ArticoliGrigliaDataSource; -import it.integry.integrywmsnative.core.data_store.db.repository.implementations.ArticoliOrdineDataSource; -import it.integry.integrywmsnative.core.data_store.db.repository.implementations.GrigliaDataSource; -import it.integry.integrywmsnative.core.data_store.db.repository.implementations.OrdineDataSource; -import it.integry.integrywmsnative.core.data_store.db.repository.implementations.SqlMtbColrDataSource; -import it.integry.integrywmsnative.core.data_store.db.repository.implementations.SqlMtbColtDataSource; +import it.integry.integrywmsnative.core.data_store.db.repository.datasource.ArticoliGrigliaDataSource; +import it.integry.integrywmsnative.core.data_store.db.repository.datasource.ArticoliOrdineDataSource; +import it.integry.integrywmsnative.core.data_store.db.repository.datasource.GrigliaDataSource; +import it.integry.integrywmsnative.core.data_store.db.repository.datasource.OrdineDataSource; +import it.integry.integrywmsnative.core.data_store.db.repository.datasource.SqlMtbColrDataSource; +import it.integry.integrywmsnative.core.data_store.db.repository.datasource.SqlMtbColtDataSource; +import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRepository; +import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRowRepository; +import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioLocalDataSource; +import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioRowLocalDataSource; +import it.integry.integrywmsnative.core.mapper.InventarioMapper; +import it.integry.integrywmsnative.core.mapper.InventarioRowMapper; +import it.integry.integrywmsnative.core.rest.consumers.InventarioRESTConsumer; @Module public class RoomModule { private AppDatabase appDatabase; - public RoomModule(Application application) { - appDatabase = Room.databaseBuilder(application, - AppDatabase.class, "integry_wms") - .fallbackToDestructiveMigration() - .build(); + public RoomModule(Application applicationContext) { + appDatabase = AppDatabase.getInstance(applicationContext); } @Singleton @@ -84,46 +91,109 @@ public class RoomModule { return appDatabase.mtbColrDao(); } - - - - - - @Singleton @Provides - ArticoloGrigliaRepository providesArticoloGrigliaRepository(ArticoloGrigliaDao articoloGrigliaDao) { - return new ArticoliGrigliaDataSource(articoloGrigliaDao); + InventarioDao providesInventarioDao(AppDatabase appDatabase) { + return appDatabase.inventarioDao(); } @Singleton @Provides - ArticoliOrdineRepository providesArticoliOrdineRepository(ArticoloOrdineDao articoloOrdineDao) { - return new ArticoliOrdineDataSource(articoloOrdineDao); + InventarioRowDao providesInventarioRowDao(AppDatabase appDatabase) { + return appDatabase.inventarioRowDao(); + } + + + + + + + + + @Singleton + @Provides + InventarioRowMapper providesInventarioRowMapper() { + return new InventarioRowMapper(); } @Singleton @Provides - GrigliaRepository providesGrigliaRepository(GrigliaDao grigliaDao) { - return new GrigliaDataSource(grigliaDao); + InventarioMapper providesInventarioMapper(InventarioRowMapper inventarioRowMapper) { + return new InventarioMapper(inventarioRowMapper); + } + + + @Singleton + @Provides + InventarioLocalDataSource providesInventarioLocalDataSource(ExecutorService executorService, InventarioDao inventarioDao) { + return new InventarioLocalDataSource(executorService, inventarioDao); + } + + + @Singleton + @Provides + InventarioRowLocalDataSource providesInventarioRowLocalDataSource(ExecutorService executorService, InventarioRowDao inventarioRowDao) { + return new InventarioRowLocalDataSource(executorService, inventarioRowDao); + } + + + + + + + + @Singleton + @Provides + ArticoloGrigliaRepository providesArticoloGrigliaRepository(ExecutorService executorService, Handler handler, ArticoloGrigliaDao articoloGrigliaDao) { + return new ArticoliGrigliaDataSource(executorService, handler, articoloGrigliaDao); } @Singleton @Provides - OrdineRepository providesOrdineRepository(OrdineDao ordineDao) { - return new OrdineDataSource(ordineDao); + ArticoliOrdineRepository providesArticoliOrdineRepository(ExecutorService executorService, Handler handler, ArticoloOrdineDao articoloOrdineDao) { + return new ArticoliOrdineDataSource(executorService, handler, articoloOrdineDao); } @Singleton @Provides - MtbColtRepository providesMtbColtRepository(MtbColtDao mtbColtDao) { - return new SqlMtbColtDataSource(mtbColtDao); + GrigliaRepository providesGrigliaRepository(ExecutorService executorService, Handler handler, GrigliaDao grigliaDao) { + return new GrigliaDataSource(executorService, handler, grigliaDao); } @Singleton @Provides - MtbColrRepository providesMtbColrRepository(MtbColrDao mtbColrDao) { - return new SqlMtbColrDataSource(mtbColrDao); + OrdineRepository providesOrdineRepository(ExecutorService executorService, Handler handler, OrdineDao ordineDao) { + return new OrdineDataSource(executorService, handler, ordineDao); + } + + @Singleton + @Provides + MtbColtRepository providesMtbColtRepository(ExecutorService executorService, Handler handler, MtbColtDao mtbColtDao) { + return new SqlMtbColtDataSource(executorService, handler, mtbColtDao); + } + + @Singleton + @Provides + MtbColrDataSource providesMtbColrRepository(ExecutorService executorService, Handler handler, MtbColrDao mtbColrDao) { + return new SqlMtbColrDataSource(executorService, handler, mtbColrDao); + } + + @Singleton + @Provides + InventarioRepository providesInventarioRepository(ExecutorService executorService, Handler handler, + InventarioLocalDataSource inventarioLocalDataSource, + InventarioRESTConsumer inventarioRESTConsumer, + InventarioMapper inventarioMapper) { + return new InventarioRepository(inventarioLocalDataSource, inventarioRESTConsumer, inventarioMapper, handler); + } + + @Singleton + @Provides + InventarioRowRepository providesInventarioRowRepository(ExecutorService executorService, Handler handler, + InventarioRowLocalDataSource inventarioRowLocalDataSource, + InventarioRESTConsumer inventarioRESTConsumer, + InventarioRowMapper inventarioRowMapper) { + return new InventarioRowRepository(inventarioRowLocalDataSource, inventarioRESTConsumer, inventarioRowMapper, handler); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/converter/AppDatabaseConverters.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/converter/AppDatabaseConverters.java new file mode 100644 index 00000000..613bc37e --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/converter/AppDatabaseConverters.java @@ -0,0 +1,49 @@ +package it.integry.integrywmsnative.core.data_store.db.converter; + +import androidx.room.TypeConverter; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.lang.reflect.Type; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.ArrayList; + +import it.integry.integrywmsnative.core.utility.UtilityDate; + +public class AppDatabaseConverters { + @TypeConverter + public static LocalDateTime longToLocalDateTime(Long value) { + return value == null ? null : UtilityDate.timeToLocalDateTime(value, null); + } + + @TypeConverter + public static Long localDateTimeToTimestamp(LocalDateTime date) { + return date == null ? null : UtilityDate.localDateTimeToTime(date, null); + } + + @TypeConverter + public static LocalDate longToLocalDate(Long value) { + return value == null ? null : UtilityDate.timeToLocalDate(value, null); + } + + @TypeConverter + public static Long localDateToTimestamp(LocalDate date) { + return date == null ? null : UtilityDate.localDateToTime(date); + } + + @TypeConverter + public static ArrayList fromString(String value) { + Type listType = new TypeToken>() {}.getType(); + return new Gson().fromJson(value, listType); + } + + @TypeConverter + public static String fromArrayList(ArrayList list) { + Gson gson = new Gson(); + String json = gson.toJson(list); + return json; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloOrdineDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloOrdineDao.java index e7b43b26..bde8bdae 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloOrdineDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/ArticoloOrdineDao.java @@ -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 findArticoliByOrdine(int ordineId); + List findArticoliByOrdine(int ordineId); @Query("SELECt * from articoli_ordine where cod_mart = :codMart and id_ordine = :ordineId LIMIT 1") ArticoloOrdine findArticoloByCodMartAndOrdine(int ordineId, String codMart); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/GrigliaDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/GrigliaDao.java index a3c33d80..7449a371 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/GrigliaDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/GrigliaDao.java @@ -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 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); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/InventarioDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/InventarioDao.java new file mode 100644 index 00000000..79d345d3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/InventarioDao.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative.core.data_store.db.dao; + +import androidx.room.Dao; +import androidx.room.Query; + +import java.util.List; + +import io.reactivex.rxjava3.core.Flowable; +import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; +import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityDaoInterface; + +@Dao +public interface InventarioDao extends EntityDaoInterface { + + + @Query("SELECT * FROM " + InventarioRoomDTO.TABLE_NAME + + " WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))") + List selectAll(boolean toBeSync); + + + @Query("SELECT * FROM " + InventarioRoomDTO.TABLE_NAME + + " WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" + + " ORDER BY " + InventarioRoomDTO.Columns.DATA_INVENTARIO + " DESC") + Flowable> selectAllFlowable(boolean toBeSync); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/InventarioRowDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/InventarioRowDao.java new file mode 100644 index 00000000..dc698bbe --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/InventarioRowDao.java @@ -0,0 +1,28 @@ +package it.integry.integrywmsnative.core.data_store.db.dao; + +import androidx.room.Dao; +import androidx.room.Query; + +import java.util.List; + +import io.reactivex.rxjava3.core.Flowable; +import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; +import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityDaoInterface; + +@Dao +public interface InventarioRowDao extends EntityDaoInterface { + + @Query("SELECT * FROM " + InventarioRowRoomDTO.TABLE_NAME + + " WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))") + List selectAll(boolean toBeSync); + + + @Query("SELECT * FROM " + InventarioRowRoomDTO.TABLE_NAME + + " WHERE ((:toBeSync = 1 AND " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NULL) OR (:toBeSync = 0))" + + " AND " + InventarioRowRoomDTO.Columns.PARENT_ID + " = :parentId " + + " ORDER BY " + + " CASE WHEN :reversed = 1 THEN " + BaseSyncDTO.Columns.ID + " END DESC," + + " CASE WHEN :reversed = 0 THEN " + BaseSyncDTO.Columns.ID + " END ASC") + Flowable> selectAllFlowable(long parentId, boolean reversed, boolean toBeSync); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColrDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColrDao.java index 6ab430fd..f5d16abf 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColrDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColrDao.java @@ -9,7 +9,6 @@ import androidx.room.Update; import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; @Dao public interface MtbColrDao { @@ -26,5 +25,5 @@ public interface MtbColrDao { void delete(SqlMtbColr mtbColr); @Query("SELECT * from mtb_colr where id_collo = :idDocument") - List getDocumentRows(int idDocument); + List getDocumentRows(long idDocument); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java index 262cb324..ab0daf24 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/MtbColtDao.java @@ -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") diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/OrdineDao.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/OrdineDao.java index 22ae973d..840daa56 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/OrdineDao.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/dao/OrdineDao.java @@ -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 getAll(); - @Query("SELECT ordini.*, griglie.* from ordini inner join griglie ON id_griglia = griglie.griglia_id where ordini.transmitted = 1") - List getAllTrasnmitted(); + @Query("SELECT ordini.* from ordini where ordini.transmitted = 1") + List getAllTrasnmitted(); - @Query("SELECT ordini.*, count(articolo_ordine_id) as countArticoli from ordini left join articoli_ordine ON ordini.ordine_id = articoli_ordine.id_ordine where ordini.transmitted = 0 and ordini.id_griglia = :idGriglia group by ordini.ordine_id") - List getAllOpenOrdersByGriglia(int idGriglia); + @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 getAllOpenOrdersByGriglia(String codAlis); @Insert Long insert(Ordine ordine); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java index 4602b8e2..a55f4582 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/ArticoloGriglia.java @@ -6,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 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; - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/BaseRoomDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/BaseRoomDTO.java new file mode 100644 index 00000000..2ec1b907 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/BaseRoomDTO.java @@ -0,0 +1,4 @@ +package it.integry.integrywmsnative.core.data_store.db.entity; + +public abstract class BaseRoomDTO { +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/BaseSyncDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/BaseSyncDTO.java new file mode 100644 index 00000000..5d1030de --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/BaseSyncDTO.java @@ -0,0 +1,45 @@ +package it.integry.integrywmsnative.core.data_store.db.entity; + +import android.provider.BaseColumns; + +import androidx.room.ColumnInfo; +import androidx.room.PrimaryKey; + +import java.util.Date; + +public abstract class BaseSyncDTO extends BaseRoomDTO { + + + public static class Columns { + public static final String ID = BaseColumns._ID; + public static final String COLUMN_REMOTE_SYNC_DATE = "remote_sync_date"; + } + + /** The unique ID of the cheese. */ + @PrimaryKey(autoGenerate = true) + @ColumnInfo(index = true, name = Columns.ID) + private Long id; + + @ColumnInfo(name = Columns.COLUMN_REMOTE_SYNC_DATE) + private Date remoteSyncDate; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Date getRemoteSyncDate() { + return remoteSyncDate; + } + + public void setRemoteSyncDate(Date remoteSyncDate) { + this.remoteSyncDate = remoteSyncDate; + } + + public boolean isSyncronized() { + return getRemoteSyncDate() != null; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Griglia.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Griglia.java index b056d387..7921b5df 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Griglia.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Griglia.java @@ -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; - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/InventarioRoomDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/InventarioRoomDTO.java new file mode 100644 index 00000000..93a69d30 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/InventarioRoomDTO.java @@ -0,0 +1,245 @@ +package it.integry.integrywmsnative.core.data_store.db.entity; + +import androidx.annotation.NonNull; +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.Ignore; +import androidx.room.PrimaryKey; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface; + +@Entity(tableName = InventarioRoomDTO.TABLE_NAME) +public class InventarioRoomDTO extends BaseSyncDTO implements EntityModelInterface { + + public static final String TABLE_NAME = "inventari"; + + public static class Columns { + public static final String ID_INVENTARIO = "id_inventario"; + public static final String COD_MDEP = "cod_mdep"; + public static final String DATA_INVENTARIO = "data_inventario"; + public static final String DATA_REG = "data_reg"; + public static final String DATA_VER = "data_ver"; + public static final String FILTRO = "filtro"; + public static final String FLAG_STATO = "flag_stato"; + public static final String FLAG_OPERAZIONE = "flag_operazione"; + public static final String COD_ANAG = "cod_anag"; + public static final String COD_DTIP = "cod_dtip"; + public static final String INSERITO_DA = "inserito_da"; + public static final String REGISTRATO_DA = "registrato_da"; + public static final String VERIFICATO_DA = "verificato_da"; + public static final String DATA_ORA_INIZIO = "data_ora_inizio"; + public static final String DATA_ORA_FINE = "data_ora_fine"; + public static final String CAUSALE = "causale"; + public static final String ZONA = "zona"; + } + + /** The unique ID of the cheese. */ + @PrimaryKey(autoGenerate = true) + @ColumnInfo(index = true, name = BaseSyncDTO.Columns.ID) + private Long id; + + /** The unique ID of the cheese. */ + @ColumnInfo(index = true, name = Columns.ID_INVENTARIO) + private Long idInventario; + + @NonNull + @ColumnInfo(name = Columns.COD_MDEP) + private String codMdep; + + @ColumnInfo(name = Columns.DATA_INVENTARIO) + private LocalDate dataInventario; + + @ColumnInfo(name = Columns.DATA_REG) + private LocalDateTime dataReg; + + @ColumnInfo(name = Columns.DATA_VER) + private LocalDateTime dataVer; + + @ColumnInfo(name = Columns.FILTRO) + private String filtro; + + @ColumnInfo(name = Columns.FLAG_STATO) + private String flagStato; + + @ColumnInfo(name = Columns.FLAG_OPERAZIONE) + private String flagOperazione; + + @ColumnInfo(name = Columns.COD_ANAG) + private String codAnag; + + @ColumnInfo(name = Columns.COD_DTIP) + private String codDtip; + + @ColumnInfo(name = Columns.INSERITO_DA) + private String inseritoDa; + + @ColumnInfo(name = Columns.REGISTRATO_DA) + private String registratoDa; + + @ColumnInfo(name = Columns.VERIFICATO_DA) + private String verificatoDa; + + @ColumnInfo(name = Columns.DATA_ORA_INIZIO) + private LocalDateTime dataOraInizio; + + @ColumnInfo(name = Columns.DATA_ORA_FINE) + private LocalDateTime dataOraFine; + + @ColumnInfo(name = Columns.CAUSALE) + private String causale; + + @ColumnInfo(name = Columns.ZONA) + private String zona; + + @Ignore + private List inventarioRowList; + + public Long getIdInventario() { + return idInventario; + } + + public void setIdInventario(Long idInventario) { + this.idInventario = idInventario; + } + + @NonNull + public String getCodMdep() { + return codMdep; + } + + public void setCodMdep(@NonNull String codMdep) { + this.codMdep = codMdep; + } + + public LocalDate getDataInventario() { + return dataInventario; + } + + public void setDataInventario(LocalDate dataInventario) { + this.dataInventario = dataInventario; + } + + public LocalDateTime getDataReg() { + return dataReg; + } + + public void setDataReg(LocalDateTime dataReg) { + this.dataReg = dataReg; + } + + public LocalDateTime getDataVer() { + return dataVer; + } + + public void setDataVer(LocalDateTime dataVer) { + this.dataVer = dataVer; + } + + public String getFiltro() { + return filtro; + } + + public void setFiltro(String filtro) { + this.filtro = filtro; + } + + public String getFlagStato() { + return flagStato; + } + + public void setFlagStato(String flagStato) { + this.flagStato = flagStato; + } + + public String getFlagOperazione() { + return flagOperazione; + } + + public void setFlagOperazione(String flagOperazione) { + this.flagOperazione = flagOperazione; + } + + public String getCodAnag() { + return codAnag; + } + + public void setCodAnag(String codAnag) { + this.codAnag = codAnag; + } + + public String getCodDtip() { + return codDtip; + } + + public void setCodDtip(String codDtip) { + this.codDtip = codDtip; + } + + public String getInseritoDa() { + return inseritoDa; + } + + public void setInseritoDa(String inseritoDa) { + this.inseritoDa = inseritoDa; + } + + public String getRegistratoDa() { + return registratoDa; + } + + public void setRegistratoDa(String registratoDa) { + this.registratoDa = registratoDa; + } + + public String getVerificatoDa() { + return verificatoDa; + } + + public void setVerificatoDa(String verificatoDa) { + this.verificatoDa = verificatoDa; + } + + public LocalDateTime getDataOraInizio() { + return dataOraInizio; + } + + public void setDataOraInizio(LocalDateTime dataOraInizio) { + this.dataOraInizio = dataOraInizio; + } + + public LocalDateTime getDataOraFine() { + return dataOraFine; + } + + public void setDataOraFine(LocalDateTime dataOraFine) { + this.dataOraFine = dataOraFine; + } + + public String getCausale() { + return causale; + } + + public void setCausale(String causale) { + this.causale = causale; + } + + public String getZona() { + return zona; + } + + public void setZona(String zona) { + this.zona = zona; + } + + public List getInventarioRowList() { + return inventarioRowList; + } + + public void setInventarioRowList(List inventarioRowList) { + this.inventarioRowList = inventarioRowList; + } +} 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 new file mode 100644 index 00000000..a4c3c5eb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/InventarioRowRoomDTO.java @@ -0,0 +1,180 @@ +package it.integry.integrywmsnative.core.data_store.db.entity; + +import androidx.annotation.NonNull; +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.ForeignKey; +import androidx.room.PrimaryKey; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface; + +@Entity( + tableName = InventarioRowRoomDTO.TABLE_NAME, + foreignKeys = { + @ForeignKey( + entity = InventarioRoomDTO.class, + parentColumns = {BaseSyncDTO.Columns.ID}, + childColumns = {InventarioRowRoomDTO.Columns.PARENT_ID} + ) + } +) +public class InventarioRowRoomDTO extends BaseSyncDTO implements EntityModelInterface { + + public static final String TABLE_NAME = "inventario_rows"; + + public static class Columns { + public static final String PARENT_ID = "parent_id"; + public static final String COD_MART = "cod_mart"; + public static final String PARTITA_MAG = "partita_mag"; + public static final String DESCRIZIONE = "descrizione"; + public static final String QTA = "qta"; + public static final String NUM_CNF = "num_cnf"; + public static final String QTA_CNF = "qta_cnf"; + public static final String UNT_MIS = "unt_mis"; + public static final String DATA_ORA_INV = "data_ora_inv"; + public static final String SCAN_COD_BARRE = "scan_cod_barre"; + public static final String ZONA = "zona"; + } + + /** + * The unique ID + */ + @PrimaryKey(autoGenerate = true) + @ColumnInfo(index = true, name = BaseSyncDTO.Columns.ID) + private Long id; + + @ColumnInfo(index = true, name = Columns.PARENT_ID) + private Long parentId; + + @NonNull + @ColumnInfo(name = Columns.COD_MART) + private String codMart; + + @ColumnInfo(name = Columns.PARTITA_MAG) + private String partitaMag; + + @ColumnInfo(name = Columns.DESCRIZIONE) + private String descrizione; + + @NonNull + @ColumnInfo(name = Columns.QTA, defaultValue = "0") + private BigDecimal qta; + + @NonNull + @ColumnInfo(name = Columns.NUM_CNF, defaultValue = "0") + private BigDecimal numConf; + + @NonNull + @ColumnInfo(name = Columns.QTA_CNF, defaultValue = "0") + private BigDecimal qtaConf; + + @NonNull + @ColumnInfo(name = Columns.UNT_MIS, defaultValue = "0") + private String untMis; + + @ColumnInfo(name = Columns.DATA_ORA_INV) + private LocalDateTime dataOraInv; + + @ColumnInfo(name = Columns.SCAN_COD_BARRE) + private String scanCodBarre; + + @ColumnInfo(name = Columns.ZONA) + private String zona; + + + public Long getParentId() { + return parentId; + } + + public void setParentId(Long parentId) { + this.parentId = parentId; + } + + @NonNull + public String getCodMart() { + return codMart; + } + + public void setCodMart(@NonNull String codMart) { + this.codMart = codMart; + } + + public String getPartitaMag() { + return partitaMag; + } + + public void setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + } + + public String getDescrizione() { + return descrizione; + } + + public void setDescrizione(String descrizione) { + this.descrizione = descrizione; + } + + @NonNull + public BigDecimal getQta() { + return qta; + } + + public void setQta(@NonNull BigDecimal qta) { + this.qta = qta; + } + + @NonNull + public BigDecimal getNumConf() { + return numConf; + } + + public void setNumConf(@NonNull BigDecimal numConf) { + this.numConf = numConf; + } + + @NonNull + public BigDecimal getQtaConf() { + return qtaConf; + } + + public void setQtaConf(@NonNull BigDecimal qtaConf) { + this.qtaConf = qtaConf; + } + + @NonNull + public String getUntMis() { + return untMis; + } + + public void setUntMis(@NonNull String untMis) { + this.untMis = untMis; + } + + public LocalDateTime getDataOraInv() { + return dataOraInv; + } + + public void setDataOraInv(LocalDateTime dataOraInv) { + this.dataOraInv = dataOraInv; + } + + public String getScanCodBarre() { + return scanCodBarre; + } + + public void setScanCodBarre(String scanCodBarre) { + this.scanCodBarre = scanCodBarre; + } + + public String getZona() { + return zona; + } + + public void setZona(String zona) { + this.zona = zona; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java index 5f7e35a5..1fa78020 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/entity/Ordine.java @@ -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; } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/interfaces/EntityDaoInterface.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/interfaces/EntityDaoInterface.java new file mode 100644 index 00000000..b273cc18 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/interfaces/EntityDaoInterface.java @@ -0,0 +1,31 @@ +package it.integry.integrywmsnative.core.data_store.db.interfaces; + +import androidx.room.Delete; +import androidx.room.Insert; +import androidx.room.RawQuery; +import androidx.room.Update; +import androidx.sqlite.db.SupportSQLiteQuery; + +import java.util.List; + +public interface EntityDaoInterface { + + @RawQuery() + List execRaw(SupportSQLiteQuery query); + + @Insert + long insert(R objectToInsert); + + @Insert + List insertAll(List objectToInsert); + + @Delete + void delete(R objectToInsert); + + @Update + void updateAll(List cheese); + + @Update + int update(R cheese); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/interfaces/EntityModelInterface.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/interfaces/EntityModelInterface.java new file mode 100644 index 00000000..db6cc6b1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/interfaces/EntityModelInterface.java @@ -0,0 +1,9 @@ +package it.integry.integrywmsnative.core.data_store.db.interfaces; + +public interface EntityModelInterface { + + void setId(Long id); + + Long getId(); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/GrigliaRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/GrigliaRepository.java index 707a1272..a5a190a9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/GrigliaRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/GrigliaRepository.java @@ -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> onSuccess, RunnableArgs onError); - void findByCodAlis(String codAlis , RunnableArgs onSuccess, RunnableArgs onError); + void findByCodAlis(String codAlis, RunnableArgs onSuccess, RunnableArgs onError); - void saveGriglia(Griglia griglia, RunnableArgs onSuccess,RunnableArgs onFail); + void saveGriglia(Griglia griglia, RunnableArgs onSuccess, RunnableArgs onFail); void findGrigliaById(int idGriglia, RunnableArgs onLoad, RunnableArgs onFail); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColrRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColrDataSource.java similarity index 79% rename from app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColrRepository.java rename to app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColrDataSource.java index 30741319..ee949079 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColrRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColrDataSource.java @@ -3,19 +3,18 @@ package it.integry.integrywmsnative.core.data_store.db.repository; import java.util.List; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -public interface MtbColrRepository { +public interface MtbColrDataSource { void selectAll(RunnableArgs> onSuccess, RunnableArgs onError); + void selectAllByDocumentID(long documentID, RunnableArgs> onSuccess, RunnableArgs onError); + void insert(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError); void update(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError); void delete(SqlMtbColr mtbColr, Runnable onSuccess, RunnableArgs onError); - void getDocumentRows(SqlMtbColt sqlMtbColt, RunnableArgs> onSuccess, RunnableArgs onError); - } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java index c5093ab3..abf4d080 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/MtbColtRepository.java @@ -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 { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/OrdineRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/OrdineRepository.java index e42ae623..a77bb3f3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/OrdineRepository.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/OrdineRepository.java @@ -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> onSuccess, RunnableArgs onError); - void selectAllTransmitted(RunnableArgs> onSuccess, RunnableArgs onError); + void selectAllTransmitted(RunnableArgs> onSuccess, RunnableArgs onError); - void selectAllOpenOrders(Griglia griglia, RunnableArgs> onSuccess, RunnableArgs onError); + void selectAllOpenOrders(String codAlis, RunnableArgs> onSuccess, RunnableArgs onError); void insert(Ordine ordine, RunnableArgs onSuccess, RunnableArgs onError); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliGrigliaDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/ArticoliGrigliaDataSource.java similarity index 64% rename from app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliGrigliaDataSource.java rename to app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/ArticoliGrigliaDataSource.java index da7ecbeb..8961e841 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliGrigliaDataSource.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/ArticoliGrigliaDataSource.java @@ -1,4 +1,6 @@ -package it.integry.integrywmsnative.core.data_store.db.repository.implementations; +package it.integry.integrywmsnative.core.data_store.db.repository.datasource; + +import android.os.Handler; import com.annimon.stream.Stream; @@ -9,9 +11,8 @@ import java.util.HashMap; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Future; -import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import javax.inject.Inject; @@ -21,24 +22,29 @@ 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.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.utility.UtilityHashMap; -public class ArticoliGrigliaDataSource extends Repository implements ArticoloGrigliaRepository { +public class ArticoliGrigliaDataSource extends BaseDataSource implements ArticoloGrigliaRepository { private final ArticoloGrigliaDao mArticoloGrigliaDao; @Inject - public ArticoliGrigliaDataSource(ArticoloGrigliaDao articoloGrigliaDao) { + public ArticoliGrigliaDataSource(ExecutorService executorService, + Handler handler, + ArticoloGrigliaDao articoloGrigliaDao) { + super(executorService, handler); this.mArticoloGrigliaDao = articoloGrigliaDao; } - public void saveArticoliToGriglia(List updatedArts, Griglia griglia, Runnable onSuccess, RunnableArgs onFail) { - execute(() -> { - try { - var tmp = calcItemsToInsertAndUpdate(updatedArts); - var toInsert = (List) tmp.get("toInsert"); - var toUpdate = (List) tmp.get("toUpdate"); - var codMarts = (List) tmp.get("codMarts"); + public void saveArticoliToGriglia(List updatedArts, Griglia griglia, Runnable onSuccess, RunnableArgs onError) { + try { + var tmp = calcItemsToInsertAndUpdate(updatedArts); + var toInsert = UtilityHashMap.>getValue(tmp, "toInsert"); + var toUpdate = UtilityHashMap.>getValue(tmp, "toUpdate"); + var codMarts = UtilityHashMap.>getValue(tmp, "codMarts"); + + executorService.execute(() -> { mArticoloGrigliaDao.insertAll(toInsert); mArticoloGrigliaDao.updateAll(toUpdate); @@ -46,11 +52,12 @@ public class ArticoliGrigliaDataSource extends Repository implements ArticoloGri List toDelete = Stream.of(articoliGriglia).filter(articolo -> !codMarts.contains(articolo.getCodMart())).toList(); mArticoloGrigliaDao.deleteList(toDelete); - onSuccess.run(); - } catch (Exception e) { - onFail.run(e); - } - }); + handler.post(onSuccess); + }); + + } catch (Exception e) { + onError.run(e); + } } private HashMap calcItemsToInsertAndUpdate(List updatedArts) throws InterruptedException, ExecutionException { @@ -58,12 +65,11 @@ public class ArticoliGrigliaDataSource extends Repository implements ArticoloGri var toUpdate = new ArrayList(); var codMarts = new ArrayList(); - int cores = Runtime.getRuntime().availableProcessors(); - ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(cores); List> calls = new ArrayList<>(); for (int i = 0; i < updatedArts.size(); i++) { int finalI = i; + Callable callableTask = () -> { var updatedArt = updatedArts.get(finalI); Integer id = mArticoloGrigliaDao.getIdArticoloByGrigliaAndBarcodeAndCodMart(updatedArt.getIdGriglia(), updatedArt.getBarCode(), updatedArt.getCodMart()); @@ -78,7 +84,7 @@ public class ArticoliGrigliaDataSource extends Repository implements ArticoloGri calls.add(callableTask); } - List> futures = executor.invokeAll(calls, Long.MAX_VALUE, TimeUnit.MILLISECONDS); + List> futures = executorService.invokeAll(calls, Long.MAX_VALUE, TimeUnit.MILLISECONDS); for (Future future : futures) { if (future.isDone()) { @@ -99,51 +105,38 @@ public class ArticoliGrigliaDataSource extends Repository implements ArticoloGri return tmp; } - public void findArticoloByBarcodeAndGriglia(String barcode, int idGriglia, RunnableArgs onSuccess, RunnableArgs onFail) { - execute(() -> { - try { - onSuccess.run(mArticoloGrigliaDao.findArticoloByBarcodeAndGriglia(barcode, idGriglia)); - } catch (Exception e) { - onFail.run(e); - } - }); + public void findArticoloByBarcodeAndGriglia(String barcode, int idGriglia, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mArticoloGrigliaDao.findArticoloByBarcodeAndGriglia(barcode, idGriglia), onSuccess, onError); } - public void findArticoloByCodMartAndGriglia(String codMart, int idGriglia, RunnableArgs onSuccess, RunnableArgs onFail) { - execute(() -> { - try { - onSuccess.run(mArticoloGrigliaDao.findArticoloByCodMartAndGriglia(codMart, idGriglia)); - } catch (Exception e) { - onFail.run(e); - } - }); + public void findArticoloByCodMartAndGriglia(String codMart, int idGriglia, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mArticoloGrigliaDao.findArticoloByCodMartAndGriglia(codMart, idGriglia), onSuccess, onError); } - public void findArticoloByScanAndGriglia(String scan, int idGriglia, RunnableArgs onSuccess, RunnableArgs onFail) { - execute(() -> { + public void findArticoloByScanAndGriglia(String scan, int idGriglia, RunnableArgs onSuccess, RunnableArgs onError) { + + executorService.execute(() -> { try { ArticoloGriglia articolo = mArticoloGrigliaDao.findArticoloByCodMartAndGriglia(scan, idGriglia); + if (articolo == null) { articolo = mArticoloGrigliaDao.findArticoloByBarcodeAndGriglia(scan, idGriglia); - if (articolo == null) { - String barcode = StringUtils.leftPad(scan, 13, "0"); - articolo = mArticoloGrigliaDao.findArticoloByBarcodeAndGriglia(barcode, idGriglia); - } } - onSuccess.run(articolo); + + if (articolo == null) { + String barcode = StringUtils.leftPad(scan, 13, "0"); + articolo = mArticoloGrigliaDao.findArticoloByBarcodeAndGriglia(barcode, idGriglia); + } + + final ArticoloGriglia finalArticolo = articolo; + handler.post(() -> onSuccess.run(finalArticolo)); } catch (Exception e) { - onFail.run(e); + onError.run(e); } }); } - public void findNewArticoliInGrigla(int idGriglia, RunnableArgs> onSuccess, RunnableArgs onFail) { - execute(() -> { - try { - onSuccess.run(mArticoloGrigliaDao.getNewArticoliInGriglia(idGriglia)); - } catch (Exception e) { - onFail.run(e); - } - }); + public void findNewArticoliInGrigla(int idGriglia, RunnableArgs> onSuccess, RunnableArgs onError) { + execute(() -> mArticoloGrigliaDao.getNewArticoliInGriglia(idGriglia), onSuccess, onError); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/ArticoliOrdineDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/ArticoliOrdineDataSource.java new file mode 100644 index 00000000..188e3e9a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/ArticoliOrdineDataSource.java @@ -0,0 +1,99 @@ +package it.integry.integrywmsnative.core.data_store.db.repository.datasource; + +import android.os.Handler; + +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutorService; + +import javax.inject.Inject; + +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.expansion.RunnableArgs; + +public class ArticoliOrdineDataSource extends BaseDataSource implements ArticoliOrdineRepository { + + private final ArticoloOrdineDao mArticoloOrdineDao; + + @Inject + public ArticoliOrdineDataSource(ExecutorService executorService, + Handler handler, + ArticoloOrdineDao articoloOrdineDao) { + super(executorService, handler); + this.mArticoloOrdineDao = articoloOrdineDao; + } + + public void saveArticoliToOrdine(List articoli, Runnable onSuccess, RunnableArgs onError) { + executorService.execute(() -> { + try { + List toUpdate = new ArrayList<>(); + List toInsert = new ArrayList<>(); + for (ArticoloOrdine art : articoli) { + if (art.getArticoloOrdineId() != null && art.getArticoloOrdineId() > 0) { + toUpdate.add(art); + } else { + toInsert.add(art); + } + } + for (ArticoloOrdine newArt : toInsert) { + mArticoloOrdineDao.insert(newArt); + } + mArticoloOrdineDao.updateAll(toUpdate); + handler.post(onSuccess); + + } catch (Exception e) { + onError.run(e); + } + }); + } + + public void saveArticoloToOrdine(ArticoloOrdine articolo, Runnable onSuccess, RunnableArgs onError) { + if (articolo.getArticoloOrdineId() != null && articolo.getArticoloOrdineId() > 0) { + execute(() -> mArticoloOrdineDao.update(articolo), onSuccess, onError); + } else { + execute(() -> mArticoloOrdineDao.insert(articolo), onSuccess, onError); + } + } + + public void findArticoloByOrdineAndBarcode(Ordine ordine, String barcode, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mArticoloOrdineDao.findArticoloByOrdineAndBarcode(ordine.getOrdineId(), barcode), onSuccess, onError); + } + + public void findArticoloByScanAndOrdine(Ordine ordine, String barcode, RunnableArgs onSuccess, RunnableArgs onError) { + executorService.execute(() -> { + try { + ArticoloOrdine articolo = mArticoloOrdineDao.findArticoloByCodMartAndOrdine(ordine.getOrdineId(), barcode); + + if (articolo == null) { + articolo = mArticoloOrdineDao.findArticoloByBarcodeAndOrdine(ordine.getOrdineId(), barcode); + } + + if (articolo == null) { + String scannedCode = StringUtils.leftPad(barcode, 13, '0'); + articolo = mArticoloOrdineDao.findArticoloByBarcodeAndOrdine(ordine.getOrdineId(), scannedCode); + } + + final ArticoloOrdine finalArticolo = articolo; + handler.post(() -> onSuccess.run(finalArticolo)); + } catch (Exception e) { + onError.run(e); + } + }); + } + + public void findArticoliByOrdine(Ordine ordine, RunnableArgs> onSuccess, RunnableArgs onError) { + execute(() -> mArticoloOrdineDao.findArticoliByOrdine(ordine.getOrdineId()), onSuccess, onError); + } + + public void deleteArticolo(ArticoloOrdine articolo, Runnable onSuccess, RunnableArgs onError) { + execute(() -> mArticoloOrdineDao.delete(articolo), + onSuccess, + onError); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/BaseDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/BaseDataSource.java new file mode 100644 index 00000000..3aa26405 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/BaseDataSource.java @@ -0,0 +1,41 @@ +package it.integry.integrywmsnative.core.data_store.db.repository.datasource; + +import android.os.Handler; + +import java.util.concurrent.ExecutorService; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.RunnableWithReturn; + +public class BaseDataSource { + + protected final ExecutorService executorService; + protected final Handler handler; + + protected BaseDataSource(ExecutorService executorService, Handler handler) { + this.executorService = executorService; + this.handler = handler; + } + + protected void execute(RunnableWithReturn query, RunnableArgs onSuccess, RunnableArgs onError) { + executorService.execute(() -> { + try { + var data = query.run(); + handler.post(() -> onSuccess.run(data)); + } catch (Exception ex) { + handler.post(() -> onError.run(ex)); + } + }); + } + + protected void execute(Runnable query, Runnable onSuccess, RunnableArgs onError) { + executorService.execute(() -> { + try { + query.run(); + handler.post(onSuccess); + } catch (Exception ex) { + handler.post(() -> onError.run(ex)); + } + }); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/GrigliaDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/GrigliaDataSource.java new file mode 100644 index 00000000..71561436 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/GrigliaDataSource.java @@ -0,0 +1,51 @@ +package it.integry.integrywmsnative.core.data_store.db.repository.datasource; + +import android.os.Handler; + +import java.util.List; +import java.util.concurrent.ExecutorService; + +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.expansion.RunnableArgs; + +public class GrigliaDataSource extends BaseDataSource implements GrigliaRepository { + + private final GrigliaDao mGrigliaDao; + + @Inject + public GrigliaDataSource(ExecutorService executorService, + Handler handler, + GrigliaDao grigliaDao) { + super(executorService, handler); + this.mGrigliaDao = grigliaDao; + } + + public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { + execute(mGrigliaDao::getAll, onSuccess, onError); + } + + public void findByCodAlis(String codAlis, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mGrigliaDao.findByCodAlis(codAlis), onSuccess, onError); + } + + + public void saveGriglia(Griglia griglia, RunnableArgs onSuccess, RunnableArgs onFail) { + if (griglia.getGrigliaId() <= 0) { + execute(() -> (int) mGrigliaDao.insert(griglia), grigliaId -> { + griglia.setGrigliaId(grigliaId); + onSuccess.run(grigliaId); + }, onFail); + } else { + execute(() -> mGrigliaDao.update(griglia), () -> onSuccess.run(griglia.getGrigliaId()), onFail); + } + + } + + public void findGrigliaById(int idGriglia, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mGrigliaDao.findGrigliaById(idGriglia), onSuccess, onError); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/OrdineDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/OrdineDataSource.java new file mode 100644 index 00000000..1a1c0055 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/OrdineDataSource.java @@ -0,0 +1,58 @@ +package it.integry.integrywmsnative.core.data_store.db.repository.datasource; + +import android.os.Handler; + +import java.util.List; +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.Ordine; +import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository; +import it.integry.integrywmsnative.core.data_store.db.wrappers.OrdineWrapper; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public class OrdineDataSource extends BaseDataSource implements OrdineRepository { + + private final OrdineDao mOrdineDao; + + @Inject + public OrdineDataSource(ExecutorService executorService, + Handler handler, + OrdineDao ordineDao) { + super(executorService, handler); + this.mOrdineDao = ordineDao; + } + + public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { + execute(mOrdineDao::getAll, onSuccess, onError); + } + + public void selectAllTransmitted(RunnableArgs> onSuccess, RunnableArgs onError) { + execute(mOrdineDao::getAllTrasnmitted, onSuccess, onError); + } + + public void selectAllOpenOrders(String codAlis, RunnableArgs> onSuccess, RunnableArgs onError) { + execute(() -> mOrdineDao.getAllOpenOrdersByGriglia(codAlis), onSuccess, onError); + } + + public void insert(Ordine ordine, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mOrdineDao.insert(ordine), + ordineId -> onSuccess.run(ordineId.intValue()), + onError); + } + + + public void updateOrder(Ordine ordine, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mOrdineDao.update(ordine), + () -> onSuccess.run(ordine), + onError); + } + + public void delete(Ordine ordine, Runnable onSuccess, RunnableArgs onError) { + execute(() -> mOrdineDao.delete(ordine), + onSuccess, + onError); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColrDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColrDataSource.java new file mode 100644 index 00000000..75a39c9f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColrDataSource.java @@ -0,0 +1,53 @@ +package it.integry.integrywmsnative.core.data_store.db.repository.datasource; + +import android.os.Handler; + +import java.util.List; +import java.util.concurrent.ExecutorService; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.core.data_store.db.dao.MtbColrDao; +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSource; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public class SqlMtbColrDataSource extends BaseDataSource implements MtbColrDataSource { + + private final MtbColrDao mMtbColrDao; + + @Inject + public SqlMtbColrDataSource(ExecutorService executorService, + Handler handler, + MtbColrDao mtbColrDao) { + super(executorService, handler); + this.mMtbColrDao = mtbColrDao; + } + + public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { + execute(mMtbColrDao::getAll, onSuccess, onError); + } + + public void selectAllByDocumentID(long documentId, RunnableArgs> onSuccess, RunnableArgs onError) { + execute(() -> mMtbColrDao.getDocumentRows(documentId), onSuccess, onError); + } + + public void insert(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mMtbColrDao.insert(mtbColr), + mtbColrId -> onSuccess.run(mtbColrId.intValue()), + onError); + } + + + public void update(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mMtbColrDao.update(mtbColr), + () -> onSuccess.run(mtbColr), + onError); + } + + public void delete(SqlMtbColr mtbColr, Runnable onSuccess, RunnableArgs onError) { + execute(() -> mMtbColrDao.delete(mtbColr), + onSuccess, + onError); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColtDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColtDataSource.java new file mode 100644 index 00000000..b2eaac80 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/datasource/SqlMtbColtDataSource.java @@ -0,0 +1,67 @@ +package it.integry.integrywmsnative.core.data_store.db.repository.datasource; + +import android.os.Handler; + +import java.util.Date; +import java.util.List; +import java.util.concurrent.ExecutorService; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao; +import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; +import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public class SqlMtbColtDataSource extends BaseDataSource implements MtbColtRepository { + + private final MtbColtDao mMtbColtDao; + + @Inject + public SqlMtbColtDataSource(ExecutorService executorService, + Handler handler, + MtbColtDao mtbColtDao) { + super(executorService, handler); + this.mMtbColtDao = mtbColtDao; + } + + public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { + execute(mMtbColtDao::getAll, onSuccess, onError); + } + + public void insert(SqlMtbColt mtbColt, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mMtbColtDao.insert(mtbColt), + mtbColtId -> onSuccess.run(mtbColtId.intValue()), + onError); + } + + + public void update(SqlMtbColt mtbColt, RunnableArgs onSuccess, RunnableArgs onError) { + execute(() -> mMtbColtDao.update(mtbColt), + () -> onSuccess.run(mtbColt), + onError); + } + + public void delete(SqlMtbColt mtbColt, Runnable onSuccess, RunnableArgs onError) { + execute(() -> mMtbColtDao.delete(mtbColt), + onSuccess, + onError); + } + + @Override + public void getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc, RunnableArgs> onSuccess, RunnableArgs onError) { + execute(() -> mMtbColtDao.getLocalDocumentsByCodDtip(codDtip, codAnag, codVdes, dataDoc, numDoc), + onSuccess, + onError); + } + + @Override + public void getNextNumCollo(RunnableArgs onSuccess, RunnableArgs onError) { + execute(mMtbColtDao::getNextNumCollo, + onSuccess, + onError); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliOrdineDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliOrdineDataSource.java deleted file mode 100644 index cd1c3403..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/ArticoliOrdineDataSource.java +++ /dev/null @@ -1,127 +0,0 @@ -package it.integry.integrywmsnative.core.data_store.db.repository.implementations; - -import com.annimon.stream.Stream; - -import org.apache.commons.lang3.StringUtils; - -import java.util.ArrayList; -import java.util.List; - -import javax.inject.Inject; - -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 Repository implements ArticoliOrdineRepository { - - private final ArticoloOrdineDao mArticoloOrdineDao; - - @Inject - public ArticoliOrdineDataSource(ArticoloOrdineDao articoloOrdineDao) { - this.mArticoloOrdineDao = articoloOrdineDao; - } - - public void saveArticoliToOrdine(List articoli, Runnable onSuccess, RunnableArgs onFail) { - execute(() -> { - try { - List toUpdate = new ArrayList<>(); - List toInsert = new ArrayList<>(); - for (ArticoloOrdine art : articoli) { - if (art.getArticoloOrdineId() != null && art.getArticoloOrdineId() > 0) { - toUpdate.add(art); - } else { - toInsert.add(art); - } - } - for (ArticoloOrdine newArt : toInsert) { - mArticoloOrdineDao.insert(newArt); - } - mArticoloOrdineDao.updateAll(toUpdate); - onSuccess.run(); - - - } catch (Exception e) { - onFail.run(e); - } - }); - } - - public void saveArticoloToOrdine(ArticoloOrdine articolo, Runnable onSuccess, RunnableArgs onFail) { - execute(() -> { - try { - if (articolo.getArticoloOrdineId() != null && articolo.getArticoloOrdineId() > 0) { - mArticoloOrdineDao.update(articolo); - } else { - mArticoloOrdineDao.insert(articolo); - } - onSuccess.run(); - } catch (Exception e) { - onFail.run(e); - } - }); - } - - public void findArticoloByOrdineAndBarcode(Ordine ordine, String barcode, RunnableArgs onSuccess, RunnableArgs onFail) { - execute(() -> { - try { - ArticoloOrdine articolo = mArticoloOrdineDao.findArticoloByOrdineAndBarcode(ordine.getOrdineId(), barcode); - onSuccess.run(articolo); - } catch (Exception e) { - onFail.run(e); - } - }); - } - - public void findArticoloByScanAndOrdine(Ordine ordine, String barcode, RunnableArgs onSuccess, RunnableArgs onFail) { - execute(() -> { - try { - String scannedCode = barcode; - ArticoloOrdine articolo = mArticoloOrdineDao.findArticoloByCodMartAndOrdine(ordine.getOrdineId(), scannedCode); - if (articolo == null) { - articolo = mArticoloOrdineDao.findArticoloByBarcodeAndOrdine(ordine.getOrdineId(), scannedCode); - if (articolo == null) { - scannedCode = StringUtils.leftPad(scannedCode, 13, '0'); - articolo = mArticoloOrdineDao.findArticoloByBarcodeAndOrdine(ordine.getOrdineId(), scannedCode); - } - } - onSuccess.run(articolo); - } catch (Exception e) { - onFail.run(e); - } - }); - } - - public void findArticoliByOrdine(Ordine ordine, RunnableArgs> onLoad, RunnableArgs onError) { - execute(() -> { - try { - List list = mArticoloOrdineDao.findArticoliByOrdine(ordine.getOrdineId()); - onLoad.run(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()); - } catch (Exception e) { - onError.run(e); - } - }); - } - - public void deleteArticolo(ArticoloOrdine articolo, Runnable onSave, RunnableArgs onError) { - execute(() -> { - try { - mArticoloOrdineDao.delete(articolo); - onSave.run(); - } catch (Exception e) { - onError.run(e); - } - }); - } - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/GrigliaDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/GrigliaDataSource.java deleted file mode 100644 index b73a9105..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/GrigliaDataSource.java +++ /dev/null @@ -1,69 +0,0 @@ -package it.integry.integrywmsnative.core.data_store.db.repository.implementations; - -import java.util.List; - -import javax.inject.Inject; - -import it.integry.integrywmsnative.core.data_store.db.dao.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 Repository implements GrigliaRepository { - - private final GrigliaDao mGrigliaDao; - - @Inject - public GrigliaDataSource(GrigliaDao grigliaDao) { - this.mGrigliaDao = grigliaDao; - } - - public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mGrigliaDao.getAll()); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } - - public void findByCodAlis(String codAlis, RunnableArgs onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mGrigliaDao.findByCodAlis(codAlis)); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } - - - public void saveGriglia(Griglia griglia, RunnableArgs onSuccess, RunnableArgs onFail) { - execute(() -> { - try { - if (griglia.getGrigliaId() <= 0) { - griglia.setGrigliaId((int) mGrigliaDao.insert(griglia)); - } else { - mGrigliaDao.update(griglia); - } - onSuccess.run(griglia.getGrigliaId()); - } catch (Exception e) { - onFail.run(e); - } - }); - } - - public void findGrigliaById(int idGriglia, RunnableArgs onLoad, RunnableArgs onFail) { - execute(() -> { - try { - onLoad.run(mGrigliaDao.findGrigliaById(idGriglia)); - } catch (Exception e) { - onFail.run(e); - } - }); - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/OrdineDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/OrdineDataSource.java deleted file mode 100644 index 93edfaee..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/OrdineDataSource.java +++ /dev/null @@ -1,90 +0,0 @@ -package it.integry.integrywmsnative.core.data_store.db.repository.implementations; - -import java.util.List; - -import javax.inject.Inject; - -import it.integry.integrywmsnative.core.data_store.db.dao.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; - -public class OrdineDataSource extends Repository implements OrdineRepository { - - private OrdineDao mOrdineDao; - - @Inject - public OrdineDataSource(OrdineDao ordineDao) { - this.mOrdineDao = ordineDao; - } - - public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mOrdineDao.getAll()); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } - - public void selectAllTransmitted(RunnableArgs> onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mOrdineDao.getAllTrasnmitted()); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } - - public void selectAllOpenOrders(Griglia griglia, RunnableArgs> onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mOrdineDao.getAllOpenOrdersByGriglia(griglia.getGrigliaId())); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } - - public void insert(Ordine ordine, RunnableArgs onSuccess, RunnableArgs onError) { - execute(() -> { - try { - Long id = mOrdineDao.insert(ordine); - onSuccess.run(id.intValue()); - } catch (Exception e) { - onError.run(e); - } - }); - } - - - public void updateOrder(Ordine ordine, RunnableArgs onSuccess, RunnableArgs onError) { - execute(() -> { - try { - mOrdineDao.update(ordine); - onSuccess.run(ordine); - } catch (Exception e) { - onError.run(e); - } - }); - } - - public void delete(Ordine ordine, Runnable onSuccess, RunnableArgs onError) { - execute(() -> { - try { - mOrdineDao.delete(ordine); - onSuccess.run(); - } catch (Exception e) { - onError.run(e); - } - }); - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/Repository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/Repository.java deleted file mode 100644 index 0637fde2..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/Repository.java +++ /dev/null @@ -1,9 +0,0 @@ -package it.integry.integrywmsnative.core.data_store.db.repository.implementations; - -public class Repository { - - - public void execute(Runnable query){ - new Thread(query).start(); - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColrDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColrDataSource.java deleted file mode 100644 index 3ad66cbe..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColrDataSource.java +++ /dev/null @@ -1,77 +0,0 @@ -package it.integry.integrywmsnative.core.data_store.db.repository.implementations; - -import java.util.List; - -import javax.inject.Inject; - -import it.integry.integrywmsnative.core.data_store.db.dao.MtbColrDao; -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; -import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrRepository; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; - -public class SqlMtbColrDataSource extends Repository implements MtbColrRepository { - - private MtbColrDao mMtbColrDao; - - @Inject - public SqlMtbColrDataSource(MtbColrDao mtbColrDao) { - this.mMtbColrDao = mtbColrDao; - } - - public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mMtbColrDao.getAll()); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } - - public void insert(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError) { - execute(() -> { - try { - Long id = mMtbColrDao.insert(mtbColr); - onSuccess.run(id.intValue()); - } catch (Exception e) { - onError.run(e); - } - }); - } - - - public void update(SqlMtbColr mtbColr, RunnableArgs onSuccess, RunnableArgs onError) { - execute(() -> { - try { - mMtbColrDao.update(mtbColr); - onSuccess.run(mtbColr); - } catch (Exception e) { - onError.run(e); - } - }); - } - - public void delete(SqlMtbColr mtbColr, Runnable onSuccess, RunnableArgs onError) { - execute(() -> { - try { - mMtbColrDao.delete(mtbColr); - onSuccess.run(); - } catch (Exception e) { - onError.run(e); - } - }); - } - - public void getDocumentRows(SqlMtbColt document, RunnableArgs> onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mMtbColrDao.getDocumentRows(document.getId())); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColtDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColtDataSource.java deleted file mode 100644 index 307332be..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/repository/implementations/SqlMtbColtDataSource.java +++ /dev/null @@ -1,93 +0,0 @@ -package it.integry.integrywmsnative.core.data_store.db.repository.implementations; - -import java.util.Date; -import java.util.List; - -import javax.inject.Inject; - -import it.integry.integrywmsnative.core.data_store.db.dao.MtbColtDao; -import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; -import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; -import it.integry.integrywmsnative.core.data_store.db.wrappers.DocInternoWrapper; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; - -public class SqlMtbColtDataSource extends Repository implements MtbColtRepository { - - private MtbColtDao mMtbColtDao; - - @Inject - public SqlMtbColtDataSource(MtbColtDao mtbColtDao) { - this.mMtbColtDao = mtbColtDao; - } - - public void selectAll(RunnableArgs> onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mMtbColtDao.getAll()); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } - - public void insert(SqlMtbColt mtbColt, RunnableArgs onSuccess, RunnableArgs onError) { - execute(() -> { - try { - Long id = mMtbColtDao.insert(mtbColt); - onSuccess.run(id.intValue()); - } catch (Exception e) { - onError.run(e); - } - }); - } - - - public void update(SqlMtbColt mtbColt, RunnableArgs onSuccess, RunnableArgs onError) { - execute(() -> { - try { - mMtbColtDao.update(mtbColt); - onSuccess.run(mtbColt); - } catch (Exception e) { - onError.run(e); - } - }); - } - - public void delete(SqlMtbColt mtbColt, Runnable onSuccess, RunnableArgs onError) { - execute(() -> { - try { - mMtbColtDao.delete(mtbColt); - onSuccess.run(); - } catch (Exception e) { - onError.run(e); - } - }); - } - - @Override - public void getLocalDocumentsByCodDtip(String codDtip, String codAnag, String codVdes, Date dataDoc, String numDoc, RunnableArgs> onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mMtbColtDao.getLocalDocumentsByCodDtip(codDtip,codAnag,codVdes,dataDoc,numDoc)); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } - - @Override - public void getNextNumCollo(RunnableArgs onSuccess, RunnableArgs onError) { - Runnable query = () -> { - try { - onSuccess.run(mMtbColtDao.getNextNumCollo()); - } catch (Exception e) { - onError.run(e); - } - }; - execute(query); - } - - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/InventarioRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/InventarioRepository.java new file mode 100644 index 00000000..bc729191 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/InventarioRepository.java @@ -0,0 +1,67 @@ +package it.integry.integrywmsnative.core.data_store.db.respository_new; + +import android.os.Handler; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + +import java.util.Date; +import java.util.List; + +import javax.inject.Inject; + +import io.reactivex.rxjava3.schedulers.Schedulers; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; +import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioLocalDataSource; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.mapper.InventarioMapper; +import it.integry.integrywmsnative.core.model.MtbInvent; +import it.integry.integrywmsnative.core.rest.consumers.InventarioRESTConsumer; + +public class InventarioRepository extends _BaseRepository { + + private final Handler handler; + + private final MutableLiveData> internalLiveData = new MutableLiveData<>(); + + @Inject + public InventarioRepository(InventarioLocalDataSource localDataSource, + InventarioRESTConsumer remoteDataSource, + InventarioMapper dataMapper, + Handler handler) { + super(dataMapper, localDataSource, remoteDataSource); + this.handler = handler; + } + + + public LiveData> retrieve() { + localDataSource.makeSynchronousRetrieveAllLive(false) + .observeOn(Schedulers.io()) + .subscribe(internalLiveData::postValue); +// refresh(onComplete, onError); + + return internalLiveData; + } + + + public void insert(InventarioRoomDTO inventarioDTO, Runnable onComplete, RunnableArgs onError) { + localDataSource.makeInsertRequest(inventarioDTO, localResult -> { + if (onComplete != null) handler.post(onComplete); + }, onError); + } + + public void export(InventarioRoomDTO inventarioDTO, Runnable onComplete, RunnableArgs onError) { + remoteDataSource.makeInsertRequest(dataMapper.mapRoomToRest(inventarioDTO), () -> { + inventarioDTO.setRemoteSyncDate(new Date()); + + localDataSource.makeUpdateRequest(inventarioDTO, (ignored) -> { + handler.post(onComplete); + }, onError); + }, onError); + } + + public void delete(InventarioRoomDTO inventarioDTO, Runnable onComplete, RunnableArgs onError){ + localDataSource.makeDeleteRequest(inventarioDTO, onComplete, onError); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/InventarioRowRepository.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/InventarioRowRepository.java new file mode 100644 index 00000000..62b0bfd5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/InventarioRowRepository.java @@ -0,0 +1,64 @@ +package it.integry.integrywmsnative.core.data_store.db.respository_new; + +import android.os.Handler; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; + +import java.util.List; + +import javax.inject.Inject; + +import io.reactivex.rxjava3.schedulers.Schedulers; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; +import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source.InventarioRowLocalDataSource; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.mapper.InventarioRowMapper; +import it.integry.integrywmsnative.core.model.MtbInvenr; +import it.integry.integrywmsnative.core.rest.consumers.InventarioRESTConsumer; + +public class InventarioRowRepository extends _BaseRepository { + + private final Handler handler; + private final MutableLiveData> internalLiveData = new MutableLiveData<>(); + + @Inject + public InventarioRowRepository(InventarioRowLocalDataSource localDataSource, + InventarioRESTConsumer remoteDataSource, + InventarioRowMapper dataMapper, + Handler handler) { + super(dataMapper, localDataSource, remoteDataSource); + this.handler = handler; + } + + + public LiveData> retrieve(long parentId) { + localDataSource.makeSynchronousRetrieveAllLive(parentId, true, false) + .observeOn(Schedulers.io()) + .subscribe(internalLiveData::postValue); +// refresh(onComplete, onError); + + return internalLiveData; + } + + + public void insert(InventarioRowRoomDTO inventarioRowDTO, Runnable onComplete, RunnableArgs onError) { + localDataSource.makeInsertRequest(inventarioRowDTO, localResult -> { + if (onComplete != null) handler.post(onComplete); + }, onError); + } + + + public void delete(InventarioRowRoomDTO inventarioRowDTO, Runnable onComplete, RunnableArgs onError) { + localDataSource.makeDeleteRequest(inventarioRowDTO, onComplete, onError); + } + + + public void update(InventarioRowRoomDTO inventarioRowDTO, Runnable onComplete, RunnableArgs onError) { + inventarioRowDTO.setRemoteSyncDate(null); + + localDataSource.makeUpdateRequest(inventarioRowDTO, localResult -> { + if (onComplete != null) handler.post(onComplete); + }, onError); + } +} 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 new file mode 100644 index 00000000..f5d52879 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/_BaseRepository.java @@ -0,0 +1,80 @@ +package it.integry.integrywmsnative.core.data_store.db.respository_new; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO; +import it.integry.integrywmsnative.core.data_store.db.respository_new.data_source._BaseRoomDataSource; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.expansion.RunnableArgssWithReturn; +import it.integry.integrywmsnative.core.mapper.BaseMapper; +import it.integry.integrywmsnative.core.model.BaseRestDTO; +import it.integry.integrywmsnative.core.rest.consumers._BaseRESTConsumer; + +public abstract class _BaseRepository< + A extends BaseRestDTO, + B extends BaseSyncDTO, + T extends BaseMapper, + U extends _BaseRoomDataSource, + V extends _BaseRESTConsumer> { + + protected final T dataMapper; + protected final U localDataSource; + protected final V remoteDataSource; + + public _BaseRepository(T dataMapper, U localDataSource, V remoteDataSource) { + this.dataMapper = dataMapper; + this.localDataSource = localDataSource; + this.remoteDataSource = remoteDataSource; + } + + protected void resolveFetch(List remoteData, + List localData, + RunnableArgssWithReturn keyComparator, + RunnableArgss dataCopy, + Runnable onComplete, + RunnableArgs onError) { + List finalRemoteData = dataMapper.mapRestsToRooms(remoteData); + + if (localData == null) localData = new ArrayList<>(); + List finalLocalData = localData; + + for (var x : finalRemoteData) { + var matched = finalLocalData.stream().filter(y -> keyComparator.run(y, x)) + .findFirst() + .orElse(null); + + if (matched != null) { + x.setId(matched.getId()); + dataCopy.run(x, matched); + } + } + + + var dataToUpdate = finalRemoteData.stream() + .filter(x -> x.getId() != null && finalLocalData.stream().noneMatch(x::equals)) + .collect(Collectors.toList()); + + var dataToDelete = finalLocalData.stream() + .filter(x -> x.isSyncronized() && finalRemoteData.stream().noneMatch(y -> keyComparator.run(y, x))) + .collect(Collectors.toList()); + + var dataToInsert = finalRemoteData.stream() + .filter(x -> x.getId() == null) + .collect(Collectors.toList()); + + + localDataSource.makeUpdateAllRequest(dataToUpdate, localUpdateResult -> { + + localDataSource.makeDeleteAllRequest(dataToDelete, () -> { + + localDataSource.makeInsertAllRequest(dataToInsert, onComplete, onError); + + }, onError); + + }, onError); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/data_source/InventarioLocalDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/data_source/InventarioLocalDataSource.java new file mode 100644 index 00000000..4b9581e9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/data_source/InventarioLocalDataSource.java @@ -0,0 +1,32 @@ +package it.integry.integrywmsnative.core.data_store.db.respository_new.data_source; + +import java.util.List; +import java.util.concurrent.ExecutorService; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import io.reactivex.rxjava3.core.Flowable; +import it.integry.integrywmsnative.core.data_store.db.dao.InventarioDao; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; + +@Singleton +public class InventarioLocalDataSource extends _BaseRoomDataSource { + + @Inject + public InventarioLocalDataSource(ExecutorService executorService, InventarioDao entityDao) { + super(executorService, entityDao, InventarioRoomDTO.TABLE_NAME); + } + + @Override + public List makeSynchronousRetrieveAllRequest(boolean onlyToBeSync) { + return entityDao + .selectAll(onlyToBeSync); + } + + @Override + public Flowable> makeSynchronousRetrieveAllLive(boolean onlyToBeSync) { + return entityDao + .selectAllFlowable(onlyToBeSync); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/data_source/InventarioRowLocalDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/data_source/InventarioRowLocalDataSource.java new file mode 100644 index 00000000..385ec16c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/data_source/InventarioRowLocalDataSource.java @@ -0,0 +1,37 @@ +package it.integry.integrywmsnative.core.data_store.db.respository_new.data_source; + +import java.util.List; +import java.util.concurrent.ExecutorService; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import io.reactivex.rxjava3.core.Flowable; +import it.integry.integrywmsnative.core.data_store.db.dao.InventarioRowDao; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; + +@Singleton +public class InventarioRowLocalDataSource extends _BaseRoomDataSource { + + @Inject + public InventarioRowLocalDataSource(ExecutorService executorService, InventarioRowDao entityDao) { + super(executorService, entityDao, InventarioRowRoomDTO.TABLE_NAME); + } + + @Override + public List makeSynchronousRetrieveAllRequest(boolean onlyToBeSync) { + return entityDao + .selectAll(onlyToBeSync); + } + + @Override + public Flowable> makeSynchronousRetrieveAllLive(boolean onlyToBeSync) { + return entityDao + .selectAllFlowable(-1, false, onlyToBeSync); + } + + public Flowable> makeSynchronousRetrieveAllLive(long parentId, boolean reversed, boolean onlyToBeSync) { + return entityDao + .selectAllFlowable(parentId, reversed, onlyToBeSync); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/data_source/_BaseRoomDataSource.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/data_source/_BaseRoomDataSource.java new file mode 100644 index 00000000..a14ea1c4 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/respository_new/data_source/_BaseRoomDataSource.java @@ -0,0 +1,175 @@ +package it.integry.integrywmsnative.core.data_store.db.respository_new.data_source; + +import androidx.annotation.NonNull; +import androidx.sqlite.db.SimpleSQLiteQuery; + +import java.util.List; +import java.util.concurrent.ExecutorService; + +import io.reactivex.rxjava3.core.Flowable; +import it.integry.integrywmsnative.core.data_store.db.entity.BaseSyncDTO; +import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityDaoInterface; +import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; + +public abstract class _BaseRoomDataSource> { + + protected final ExecutorService executorService; + protected final T entityDao; + + protected final String TABLE_NAME; + + public _BaseRoomDataSource(ExecutorService executorService, T entityDao, String tableName) { + this.executorService = executorService; + this.entityDao = entityDao; + this.TABLE_NAME = tableName; + } + + + public void makeRetrieveAllRequest(boolean onlyToBeSync, final RunnableArgs> onComplete, final RunnableArgs onError) { + executorService.execute(() -> { + try { + if (onComplete != null) + onComplete.run(makeSynchronousRetrieveAllRequest(onlyToBeSync)); + } catch (Exception ex) { + if (onError != null) onError.run(ex); + } + }); + } + + public abstract List makeSynchronousRetrieveAllRequest(boolean onlyToBeSync); + + public abstract Flowable> makeSynchronousRetrieveAllLive(boolean onlyToBeSync); + + + public void makeInsertAllRequest(final List itemsToInsert, final Runnable onComplete, final RunnableArgs onError) { + executorService.execute(() -> { + try { + makeSynchronousInsertAllRequest(itemsToInsert); + if (onComplete != null) onComplete.run(); + } catch (Exception ex) { + if (onError != null) onError.run(ex); + } + }); + } + + public void makeSynchronousInsertAllRequest(final List itemsToInsert) { + if(itemsToInsert == null) return; + + var ids = entityDao.insertAll(itemsToInsert); + + for(int i = 0; i < itemsToInsert.size(); i++) { + var inputObject = itemsToInsert.get(i); + + if (inputObject instanceof EntityModelInterface) { + ((EntityModelInterface) inputObject).setId(ids.get(i)); + } + } + } + + + public void makeInsertRequest(final R itemToInsert, final RunnableArgs onComplete, final RunnableArgs onError) { + executorService.execute(() -> { + try { + makeSynchronousInsertRequest(itemToInsert); + if (onComplete != null) onComplete.run(itemToInsert); + } catch (Exception ex) { + if (onError != null) onError.run(ex); + } + }); + } + + public void makeSynchronousInsertRequest(final R itemToInsert) { + var id = entityDao.insert(itemToInsert); + + if (itemToInsert instanceof EntityModelInterface) { + ((EntityModelInterface) itemToInsert).setId(id); + } + } + + + public void makeUpdateRequest(final R itemToUpdate, final RunnableArgs onComplete, final RunnableArgs onError) { + executorService.execute(() -> { + try { + makeSynchronousUpdateRequest(itemToUpdate); + if (onComplete != null) onComplete.run(itemToUpdate); + } catch (Exception ex) { + if (onError != null) onError.run(ex); + } + }); + } + + public void makeSynchronousUpdateRequest(final R itemToUpdate) { + var id = entityDao.update(itemToUpdate); + } + + + public void makeUpdateAllRequest(final List itemToUpdate, final RunnableArgs> onComplete, final RunnableArgs onError) { + executorService.execute(() -> { + try { + makeSynchronousUpdateAllRequest(itemToUpdate); + if (onComplete != null) onComplete.run(itemToUpdate); + } catch (Exception ex) { + if (onError != null) onError.run(ex); + } + }); + } + + public void makeSynchronousUpdateAllRequest(final List itemsToUpdate) { + if(itemsToUpdate == null) return; + entityDao.updateAll(itemsToUpdate); + } + + + public void makeDeleteRequest(@NonNull final R itemToDelete, final Runnable onComplete, final RunnableArgs onError) { + executorService.execute(() -> { + try { + makeSynchronousDeleteRequest(itemToDelete); + if (onComplete != null) onComplete.run(); + } catch (Exception ex) { + if (onError != null) onError.run(ex); + } + }); + } + + public void makeSynchronousDeleteRequest(@NonNull final R itemToDelete) { + entityDao.delete(itemToDelete); + } + + + public void makeDeleteAllRequest(@NonNull final List itemsToDelete, final Runnable onComplete, final RunnableArgs onError) { + executorService.execute(() -> { + try { + makeSynchronousDeleteAllRequest(itemsToDelete); + if (onComplete != null) onComplete.run(); + } catch (Exception ex) { + if (onError != null) onError.run(ex); + } + }); + } + + public void makeSynchronousDeleteAllRequest(@NonNull final List itemsToDelete) { + for (R itemToDelete : itemsToDelete) { + makeSynchronousDeleteRequest(itemToDelete); + } + } + + + public void makeClearAllDataRequest(boolean excludeNotSync, final Runnable onComplete, final RunnableArgs onError) { + executorService.execute(() -> { + try { + makeSynchronousClearAllDataRequest(excludeNotSync); + if (onComplete != null) onComplete.run(); + } catch (Exception ex) { + if (onError != null) onError.run(ex); + } + }); + } + + public void makeSynchronousClearAllDataRequest(boolean excludeNotSync) { + entityDao + .execRaw(new SimpleSQLiteQuery("DELETE FROM " + TABLE_NAME + (excludeNotSync ? " WHERE " + BaseSyncDTO.Columns.COLUMN_REMOTE_SYNC_DATE + " IS NOT NULL" : ""))); + } + + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java index 2859998e..6f78e336 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/view_model/ArticoloDTO.java @@ -1,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 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; } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/GrigliaWrapper.java b/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/GrigliaWrapper.java deleted file mode 100644 index 9273c89a..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/core/data_store/db/wrappers/GrigliaWrapper.java +++ /dev/null @@ -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; - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java index d882780d..9fe6386d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/Converters.java @@ -1,6 +1,5 @@ package it.integry.integrywmsnative.core.di; -import android.app.DatePickerDialog; import android.content.res.ColorStateList; import android.text.Html; import android.text.SpannableString; @@ -26,6 +25,7 @@ import androidx.databinding.BindingConversion; import androidx.databinding.Observable; import androidx.databinding.ObservableField; +import com.google.android.material.datepicker.MaterialDatePicker; import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputLayout; @@ -34,7 +34,6 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Calendar; import java.util.Date; -import java.util.GregorianCalendar; import java.util.Locale; import it.integry.integrywmsnative.MainApplication; @@ -227,6 +226,33 @@ public class Converters { } } + @BindingAdapter("binding") + public static void bindTextInputEditTextBigDecimal(EditText view, final ObservableField observableBigDecimal) { + Pair, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != observableBigDecimal) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + BigDecimal value = null; + if (!UtilityString.isNullOrEmpty(s.toString())) + value = new BigDecimal(s.toString()); + observableBigDecimal.set(value); + } + }; + view.setTag(R.id.bound_observable, new Pair<>(observableBigDecimal, watcher)); + view.addTextChangedListener(watcher); + } + BigDecimal newValue = observableBigDecimal.get(); + BigDecimal viewValue = view.getText().toString().trim().length() > 0 ? new BigDecimal(view.getText().toString()) : null; + + if (!UtilityBigDecimal.equalsTo(viewValue, newValue)) { + view.setText(UtilityNumber.decimalToString(newValue)); + } + } + @BindingAdapter("binding") public static void bindTextInputEditTextBigDecimal(TextInputEditText view, final BindableBigDecimal bindableBigDecimal) { Pair pair = (Pair) view.getTag(R.id.bound_observable); @@ -305,6 +331,60 @@ public class Converters { } } + @BindingAdapter("binding") + public static void bindTextInputEditTextInteger(TextInputEditText view, final ObservableField observableInteger) { + Pair, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != observableInteger) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + Integer value = null; + if (!UtilityString.isNullOrEmpty(s.toString())) + value = Integer.valueOf(s.toString()); + observableInteger.set(value); + } + }; + view.setTag(R.id.bound_observable, new Pair<>(observableInteger, watcher)); + view.addTextChangedListener(watcher); + } + Integer newValue = observableInteger.get(); + Integer viewValue = view.getText().toString().trim().length() > 0 ? Integer.valueOf(view.getText().toString()) : Integer.valueOf(0); + + if (!viewValue.equals(newValue) && newValue != null) { + view.setText(newValue.toString()); + } + } + + @BindingAdapter("binding") + public static void bindTextInputEditTextLong(TextInputEditText view, final ObservableField observableLong) { + Pair, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != observableLong) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + Long value = null; + if (!UtilityString.isNullOrEmpty(s.toString())) + value = Long.valueOf(s.toString()); + observableLong.set(value); + } + }; + view.setTag(R.id.bound_observable, new Pair<>(observableLong, watcher)); + view.addTextChangedListener(watcher); + } + Long newValue = observableLong.get(); + Long viewValue = view.getText().toString().trim().length() > 0 ? Long.valueOf(view.getText().toString()) : Long.valueOf(0); + + if (!viewValue.equals(newValue) && newValue != null) { + view.setText(newValue.toString()); + } + } + @BindingAdapter(value = {"binding", "parentView", "warningOnOldDates"}, requireAll = false) public static void bindTextInputEditTextDate(TextInputEditText view, final ObservableField observableDate, BaseDialogFragment parentFragment, boolean warningOnOldDates) { Pair, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); @@ -328,29 +408,110 @@ public class Converters { c.setTime(observableDate.get()); } - int mYear = c.get(Calendar.YEAR); - int mMonth = c.get(Calendar.MONTH); - int mDay = c.get(Calendar.DAY_OF_MONTH); - DatePickerDialog datePickerDialog = new DatePickerDialog(view.getContext(), - (cView, year, month, day) -> { - Date resultDate = new GregorianCalendar(year, month, day).getTime(); + var datePicker = + MaterialDatePicker.Builder.datePicker() + .setSelection(c.getTimeInMillis()) + .build(); - if (parentFragment != null && warningOnOldDates && resultDate.before(new Date())) { - DialogSimpleMessageView - .makeWarningDialog(new SpannableString("Hai scelto una data precedente a quella odierna. Continuare?"), null, () -> { - view.setText(UtilityDate.formatDate(resultDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); - observableDate.set(resultDate); - }, () -> { + datePicker.addOnDismissListener(dialog -> { + if(datePicker.getSelection() != null) { + var timeInMillis = datePicker.getSelection(); - }) - .show(parentFragment.requireActivity().getSupportFragmentManager(), "tag"); - } else { - view.setText(UtilityDate.formatDate(resultDate, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); - observableDate.set(resultDate); - } - }, mYear, mMonth, mDay); - datePickerDialog.show(); + var calendar = UtilityDate.getCalendarInstance(); + calendar.setTimeInMillis(timeInMillis); + + if (parentFragment != null && warningOnOldDates && calendar.before(UtilityDate.getCalendarInstance())) { + DialogSimpleMessageView + .makeWarningDialog(new SpannableString("Hai scelto una data precedente a quella odierna. Continuare?"), null, () -> { + view.setText(UtilityDate.formatDate(calendar.getTime(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + observableDate.set(calendar.getTime()); + }, () -> { + + }) + .show(parentFragment.requireActivity().getSupportFragmentManager(), "tag"); + } else { + view.setText(UtilityDate.formatDate(calendar.getTime(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + observableDate.set(calendar.getTime()); + } + } + else { + view.setText(""); + observableDate.set(null); + } + }); + + datePicker.show(parentFragment.requireActivity().getSupportFragmentManager(), "tag"); + }; + + //Adding click-listener + view.setOnClickListener(onClick::run); + if (view.getParent() != null && view.getParent().getParent() != null && view.getParent().getParent() instanceof TextInputLayout) { + ((FrameLayout) view.getParent()).setOnClickListener(onClick::run); + ((TextInputLayout) view.getParent().getParent()).setOnClickListener(onClick::run); + } + } + Date newValue = observableDate.get(); + view.setText(UtilityDate.formatDate(newValue, UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + } + + @BindingAdapter(value = {"binding", "parentView", "warningOnOldDates"}, requireAll = false) + public static void bindEditTextDate(EditText view, final ObservableField observableDate, BaseDialogFragment parentFragment, boolean warningOnOldDates) { + Pair, TextWatcherAdapter> pair = (Pair) view.getTag(R.id.bound_observable); + if (pair == null || pair.first != observableDate) { + if (pair != null) { + view.removeTextChangedListener(pair.second); + } + TextWatcherAdapter watcher = new TextWatcherAdapter() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + }; + view.setTag(R.id.bound_observable, new Pair<>(observableDate, watcher)); + view.addTextChangedListener(watcher); + + RunnableArgs onClick = v -> { + // Get Current Date + Calendar c = UtilityDate.getCalendarInstance(); + + if (observableDate.get() != null) { + c.setTime(observableDate.get()); + } + + + var datePicker = + MaterialDatePicker.Builder.datePicker() + .setSelection(c.getTimeInMillis()) + .build(); + + datePicker.addOnDismissListener(dialog -> { + if(datePicker.getSelection() != null) { + var timeInMillis = datePicker.getSelection(); + + var calendar = UtilityDate.getCalendarInstance(); + calendar.setTimeInMillis(timeInMillis); + + if (parentFragment != null && warningOnOldDates && calendar.before(UtilityDate.getCalendarInstance())) { + DialogSimpleMessageView + .makeWarningDialog(new SpannableString("Hai scelto una data precedente a quella odierna. Continuare?"), null, () -> { + view.setText(UtilityDate.formatDate(calendar.getTime(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + observableDate.set(calendar.getTime()); + }, () -> { + + }) + .show(parentFragment.requireActivity().getSupportFragmentManager(), "tag"); + } else { + view.setText(UtilityDate.formatDate(calendar.getTime(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN)); + observableDate.set(calendar.getTime()); + } + } + else { + view.setText(""); + observableDate.set(null); + } + }); + + datePicker.show(parentFragment.requireActivity().getSupportFragmentManager(), "tag"); }; //Adding click-listener @@ -589,6 +750,12 @@ public class Converters { } + @BindingAdapter("reverse_visibility") + public static void bindViewReverseVisibility(View view, boolean bool) { + view.setVisibility(!bool ? View.VISIBLE : View.GONE); + } + + @BindingAdapter("android:layout_weight") public static void setLayoutWeight(View view, final Float weight) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/di/ViewConverters.java b/app/src/main/java/it/integry/integrywmsnative/core/di/ViewConverters.java index 9ade457e..04beded9 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/di/ViewConverters.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/di/ViewConverters.java @@ -2,11 +2,9 @@ package it.integry.integrywmsnative.core.di; import android.view.View; -import androidx.appcompat.widget.AppCompatTextView; -import androidx.core.util.Pair; import androidx.databinding.BindingAdapter; -import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.OnMultipleClickListener; import it.integry.integrywmsnative.core.expansion.OnSingleClickListener; public class ViewConverters { @@ -25,4 +23,16 @@ public class ViewConverters { }); } + @BindingAdapter("multipleClick") + public static void bindViewMultipleClick(View view, final Runnable callback) { + view.setFocusable(true); + view.setClickable(true); + view.setOnClickListener(new OnMultipleClickListener() { + @Override + public void onSingleClick(View v) { + callback.run(); + } + }); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java index c0123045..85e6c7cd 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseActivity.java @@ -1,11 +1,8 @@ package it.integry.integrywmsnative.core.expansion; -import android.content.Context; -import android.util.AttributeSet; +import android.os.Bundle; import android.view.KeyEvent; -import android.view.View; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -23,17 +20,14 @@ public class BaseActivity extends AppCompatActivity { private boolean progressOpened; - @Nullable @Override - public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) { - var v = super.onCreateView(parent, name, context, attrs); + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); MainApplication.appComponent .baseActivityComponent() .create() .inject(this); - - return v; } public void onLoadingStarted() { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java index c18ae504..aa44347b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/BaseFragment.java @@ -11,6 +11,7 @@ import androidx.fragment.app.Fragment; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ExecutorService; import javax.inject.Inject; @@ -26,6 +27,9 @@ public abstract class BaseFragment extends Fragment { @Inject public DialogProgressView mCurrentProgress; + @Inject + public ExecutorService executorService; + protected ElevatedToolbar mToolbar; protected final List mOnPreDestroyList = new ArrayList<>(); @@ -65,7 +69,7 @@ public abstract class BaseFragment extends Fragment { BarcodeManager.disable(); if (!progressOpened && !this.mCurrentProgress.isAdded()) { this.progressOpened = true; - requireActivity().runOnUiThread(() -> { + executorService.execute(() -> { this.mCurrentProgress.show(requireActivity().getSupportFragmentManager(), "tag"); }); } @@ -75,7 +79,7 @@ public abstract class BaseFragment extends Fragment { BarcodeManager.enable(); if (progressOpened) { this.progressOpened = false; - requireActivity().runOnUiThread(() -> { + executorService.execute(() -> { mCurrentProgress.dismissAllowingStateLoss(); }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/OnMultipleClickListener.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/OnMultipleClickListener.java new file mode 100644 index 00000000..5bbdceb3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/OnMultipleClickListener.java @@ -0,0 +1,59 @@ +package it.integry.integrywmsnative.core.expansion; + +import android.view.View; + + +/** + * Implementation of {@link View.OnClickListener} that ignores subsequent clicks that happen too quickly after the first one.
+ * To use this class, implement {@link #onSingleClick(View)} instead of {@link View.OnClickListener#onClick(View)}. + */ +public abstract class OnMultipleClickListener implements View.OnClickListener { + private static final String TAG = OnMultipleClickListener.class.getSimpleName(); + + private static final long MAX_DELAY_MS = 2000; + + private long mLastClickTime; + private int mClickCounter = 0; + + @Override + public final void onClick(View v) { + long now = System.currentTimeMillis(); + long lastClickTime = mLastClickTime; + mLastClickTime = now; + + if(now - lastClickTime > MAX_DELAY_MS) { + mClickCounter = 0; + } + mClickCounter++; + + if (mClickCounter < 5) { + return; + } + + onSingleClick(v); + mClickCounter = 0; + } + + /** + * Called when a view has been clicked. + * + * @param v The view that was clicked. + */ + public abstract void onSingleClick(View v); + + /** + * Wraps an {@link View.OnClickListener} into an {@link OnMultipleClickListener}.
+ * The argument's {@link View.OnClickListener#onClick(View)} method will be called when a single click is registered. + * + * @param onClickListener The listener to wrap. + * @return the wrapped listener.a + */ + public static View.OnClickListener wrap(final View.OnClickListener onClickListener) { + return new OnMultipleClickListener() { + @Override + public void onSingleClick(View v) { + onClickListener.onClick(v); + } + }; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgssWithReturn.java b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgssWithReturn.java new file mode 100644 index 00000000..2f99a916 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/expansion/RunnableArgssWithReturn.java @@ -0,0 +1,7 @@ +package it.integry.integrywmsnative.core.expansion; + +public interface RunnableArgssWithReturn { + + R run(T data1, U data2); + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/core/mapper/BaseMapper.java b/app/src/main/java/it/integry/integrywmsnative/core/mapper/BaseMapper.java new file mode 100644 index 00000000..535cf608 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/mapper/BaseMapper.java @@ -0,0 +1,33 @@ +package it.integry.integrywmsnative.core.mapper; + +import com.annimon.stream.Stream; + +import java.util.List; + +import it.integry.integrywmsnative.core.data_store.db.entity.BaseRoomDTO; +import it.integry.integrywmsnative.core.model.BaseRestDTO; + +public abstract class BaseMapper { + + public List mapRestsToRooms(List inputRestList) { + if(inputRestList == null) return null; + + return Stream.of(inputRestList) + .map(this::mapRestToRoom) + .toList(); + } + + public abstract U mapRestToRoom(T inputData); + + + public List mapRoomsToRests(List inputRoomList) { + if(inputRoomList == null) return null; + + return Stream.of(inputRoomList) + .map(this::mapRoomToRest) + .toList(); + } + + public abstract T mapRoomToRest(U inputData); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/mapper/InventarioMapper.java b/app/src/main/java/it/integry/integrywmsnative/core/mapper/InventarioMapper.java new file mode 100644 index 00000000..038fad40 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/mapper/InventarioMapper.java @@ -0,0 +1,70 @@ +package it.integry.integrywmsnative.core.mapper; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; +import it.integry.integrywmsnative.core.model.MtbInvent; + +@Singleton +public class InventarioMapper extends BaseMapper { + + private final InventarioRowMapper inventarioRowMapper; + + public InventarioMapper(InventarioRowMapper inventarioRowMapper) { + this.inventarioRowMapper = inventarioRowMapper; + } + + @Override + public InventarioRoomDTO mapRestToRoom(MtbInvent inputData) { + if(inputData == null) return null; + + var data = new InventarioRoomDTO(); + data.setIdInventario(inputData.getIdInventario()); + data.setCodMdep(inputData.getCodMdep()); + data.setDataInventario(inputData.getDataInventario()); + data.setDataReg(inputData.getDataReg()); + data.setDataVer(inputData.getDataVer()); + data.setFiltro(inputData.getFiltro()); + data.setFlagStato(inputData.getFlagStato()); + data.setFlagOperazione(inputData.getFlagOperazione()); + data.setCodAnag(inputData.getCodAnag()); + data.setCodDtip(inputData.getCodDtip()); + data.setInseritoDa(inputData.getInseritoDa()); + data.setRegistratoDa(inputData.getRegistratoDa()); + data.setVerificatoDa(inputData.getVerificatoDa()); + data.setDataOraInizio(inputData.getDataOraInizio()); + data.setDataOraFine(inputData.getDataOraFine()); + data.setCausale(inputData.getCausale()); + + data.setInventarioRowList(inventarioRowMapper.mapRestsToRooms(inputData.getMtbInvenr())); + + return data; + } + + @Override + public MtbInvent mapRoomToRest(InventarioRoomDTO inputData) { + if(inputData == null) return null; + + var data = new MtbInvent(); + data.setIdInventario(inputData.getIdInventario()); + data.setCodMdep(inputData.getCodMdep()); + data.setDataInventario(inputData.getDataInventario()); + data.setDataReg(inputData.getDataReg()); + data.setDataVer(inputData.getDataVer()); + data.setFiltro(inputData.getFiltro()); + data.setFlagStato(inputData.getFlagStato()); + data.setFlagOperazione(inputData.getFlagOperazione()); + data.setCodAnag(inputData.getCodAnag()); + data.setCodDtip(inputData.getCodDtip()); + data.setInseritoDa(inputData.getInseritoDa()); + data.setRegistratoDa(inputData.getRegistratoDa()); + data.setVerificatoDa(inputData.getVerificatoDa()); + data.setDataOraInizio(inputData.getDataOraInizio()); + data.setDataOraFine(inputData.getDataOraFine()); + data.setCausale(inputData.getCausale()); + + data.setMtbInvenr(inventarioRowMapper.mapRoomsToRests(inputData.getInventarioRowList())); + + return data; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/mapper/InventarioRowMapper.java b/app/src/main/java/it/integry/integrywmsnative/core/mapper/InventarioRowMapper.java new file mode 100644 index 00000000..f54b84c9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/mapper/InventarioRowMapper.java @@ -0,0 +1,37 @@ +package it.integry.integrywmsnative.core.mapper; + +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; +import it.integry.integrywmsnative.core.model.MtbInvenr; + +public class InventarioRowMapper extends BaseMapper { + + @Override + public InventarioRowRoomDTO mapRestToRoom(MtbInvenr inputData) { + if(inputData == null) return null; + + var data = new InventarioRowRoomDTO(); + data.setCodMart(inputData.getCodMart()); + data.setPartitaMag(inputData.getPartitaMag()); + data.setQta(inputData.getQtaInv()); + data.setNumConf(inputData.getNumConf()); + data.setDataOraInv(inputData.getDataOraInv()); + data.setScanCodBarre(inputData.getScanCodBarre()); + data.setZona(inputData.getZona()); + return data; + } + + @Override + public MtbInvenr mapRoomToRest(InventarioRowRoomDTO inputData) { + if(inputData == null) return null; + + var data = new MtbInvenr(); + data.setCodMart(inputData.getCodMart()); + data.setPartitaMag(inputData.getPartitaMag()); + data.setQtaInv(inputData.getQta()); + data.setNumConf(inputData.getNumConf()); + data.setDataOraInv(inputData.getDataOraInv()); + data.setScanCodBarre(inputData.getScanCodBarre()); + data.setZona(inputData.getZona()); + return data; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/BaseRestDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/model/BaseRestDTO.java new file mode 100644 index 00000000..a836419d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/BaseRestDTO.java @@ -0,0 +1,4 @@ +package it.integry.integrywmsnative.core.model; + +public abstract class BaseRestDTO { +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/EntityBase.java b/app/src/main/java/it/integry/integrywmsnative/core/model/EntityBase.java index 732682f0..487411b3 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/EntityBase.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/EntityBase.java @@ -2,7 +2,7 @@ package it.integry.integrywmsnative.core.model; import android.util.Log; -public abstract class EntityBase implements Cloneable{ +public abstract class EntityBase extends BaseRestDTO implements Cloneable{ public String operation; public String type; diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbInvenr.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbInvenr.java new file mode 100644 index 00000000..2a62bb35 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbInvenr.java @@ -0,0 +1,202 @@ +package it.integry.integrywmsnative.core.model; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; + +public class MtbInvenr extends EntityBase { + + private Long idInventario; + private Integer idRiga; + private String codMdep; + private String codMart; + private String codCol; + private String codTagl; + private BigDecimal qtaInv; + private LocalDateTime dataOraInv; + private BigDecimal costoInv; + private BigDecimal giacenzaConf; + private BigDecimal giacenzaDb; + private String idDisp; + private Date dataCreate; + private BigDecimal numConf; + private String partitaMag; + private String scanCodBarre; + private String zona; + private Date dataInventario; + private String regolaCalcoloCosto; + private Date dataScadPartitaMag; + private MtbPartitaMag mtbPartitaMag; + + public MtbInvenr() { + type = "mtb_invenr"; + } + + public Long getIdInventario() { + return idInventario; + } + + public void setIdInventario(Long idInventario) { + this.idInventario = idInventario; + } + + public Integer getIdRiga() { + return idRiga; + } + + public void setIdRiga(Integer idRiga) { + this.idRiga = idRiga; + } + + public String getCodMdep() { + return codMdep; + } + + public void setCodMdep(String codMdep) { + this.codMdep = codMdep; + } + + public String getCodMart() { + return codMart; + } + + public void setCodMart(String codMart) { + this.codMart = codMart; + } + + public String getCodCol() { + return codCol; + } + + public void setCodCol(String codCol) { + this.codCol = codCol; + } + + public String getCodTagl() { + return codTagl; + } + + public void setCodTagl(String codTagl) { + this.codTagl = codTagl; + } + + public BigDecimal getQtaInv() { + return qtaInv; + } + + public void setQtaInv(BigDecimal qtaInv) { + this.qtaInv = qtaInv; + } + + public LocalDateTime getDataOraInv() { + return dataOraInv; + } + + public void setDataOraInv(LocalDateTime dataOraInv) { + this.dataOraInv = dataOraInv; + } + + public BigDecimal getCostoInv() { + return costoInv; + } + + public void setCostoInv(BigDecimal costoInv) { + this.costoInv = costoInv; + } + + public BigDecimal getGiacenzaConf() { + return giacenzaConf; + } + + public void setGiacenzaConf(BigDecimal giacenzaConf) { + this.giacenzaConf = giacenzaConf; + } + + public BigDecimal getGiacenzaDb() { + return giacenzaDb; + } + + public void setGiacenzaDb(BigDecimal giacenzaDb) { + this.giacenzaDb = giacenzaDb; + } + + public String getIdDisp() { + return idDisp; + } + + public void setIdDisp(String idDisp) { + this.idDisp = idDisp; + } + + public Date getDataCreate() { + return dataCreate; + } + + public void setDataCreate(Date dataCreate) { + this.dataCreate = dataCreate; + } + + public BigDecimal getNumConf() { + return numConf; + } + + public void setNumConf(BigDecimal numConf) { + this.numConf = numConf; + } + + public String getPartitaMag() { + return partitaMag; + } + + public void setPartitaMag(String partitaMag) { + this.partitaMag = partitaMag; + } + + public String getScanCodBarre() { + return scanCodBarre; + } + + public void setScanCodBarre(String scanCodBarre) { + this.scanCodBarre = scanCodBarre; + } + + public String getZona() { + return zona; + } + + public void setZona(String zona) { + this.zona = zona; + } + + public Date getDataInventario() { + return dataInventario; + } + + public void setDataInventario(Date dataInventario) { + this.dataInventario = dataInventario; + } + + public String getRegolaCalcoloCosto() { + return regolaCalcoloCosto; + } + + public void setRegolaCalcoloCosto(String regolaCalcoloCosto) { + this.regolaCalcoloCosto = regolaCalcoloCosto; + } + + public Date getDataScadPartitaMag() { + return dataScadPartitaMag; + } + + public void setDataScadPartitaMag(Date dataScadPartitaMag) { + this.dataScadPartitaMag = dataScadPartitaMag; + } + + public MtbPartitaMag getMtbPartitaMag() { + return mtbPartitaMag; + } + + public void setMtbPartitaMag(MtbPartitaMag mtbPartitaMag) { + this.mtbPartitaMag = mtbPartitaMag; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/MtbInvent.java b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbInvent.java new file mode 100644 index 00000000..93a54964 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/MtbInvent.java @@ -0,0 +1,230 @@ +package it.integry.integrywmsnative.core.model; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +public class MtbInvent extends EntityBase { + + private Long idInventario; + private String codMdep; + private LocalDate dataInventario; + private LocalDateTime dataReg; + private LocalDateTime dataVer; + private String filtro; + private String flagStato; + private String flagOperazione; + private String codAnag; + private String codDtip; + private String inseritoDa; + private String registratoDa; + private String tipoGiacenza; + private String tipoVerifica; + private String verificatoDa; + private Date dataIns; + private Date dataDoc; + private String serDoc; + private Integer numDoc; + private String regolaCalcoloCosto; + private LocalDateTime dataOraInizio; + private LocalDateTime dataOraFine; + private String causale; + private List mtbInvenr; + + public MtbInvent() { + type = "mtb_invent"; + } + + public Long getIdInventario() { + return idInventario; + } + + public void setIdInventario(Long idInventario) { + this.idInventario = idInventario; + } + + public String getCodMdep() { + return codMdep; + } + + public void setCodMdep(String codMdep) { + this.codMdep = codMdep; + } + + public LocalDate getDataInventario() { + return dataInventario; + } + + public void setDataInventario(LocalDate dataInventario) { + this.dataInventario = dataInventario; + } + + public LocalDateTime getDataReg() { + return dataReg; + } + + public void setDataReg(LocalDateTime dataReg) { + this.dataReg = dataReg; + } + + public LocalDateTime getDataVer() { + return dataVer; + } + + public void setDataVer(LocalDateTime dataVer) { + this.dataVer = dataVer; + } + + public String getFiltro() { + return filtro; + } + + public void setFiltro(String filtro) { + this.filtro = filtro; + } + + public String getFlagStato() { + return flagStato; + } + + public void setFlagStato(String flagStato) { + this.flagStato = flagStato; + } + + public String getFlagOperazione() { + return flagOperazione; + } + + public void setFlagOperazione(String flagOperazione) { + this.flagOperazione = flagOperazione; + } + + public String getCodAnag() { + return codAnag; + } + + public void setCodAnag(String codAnag) { + this.codAnag = codAnag; + } + + public String getCodDtip() { + return codDtip; + } + + public void setCodDtip(String codDtip) { + this.codDtip = codDtip; + } + + public String getInseritoDa() { + return inseritoDa; + } + + public void setInseritoDa(String inseritoDa) { + this.inseritoDa = inseritoDa; + } + + public String getRegistratoDa() { + return registratoDa; + } + + public void setRegistratoDa(String registratoDa) { + this.registratoDa = registratoDa; + } + + public String getTipoGiacenza() { + return tipoGiacenza; + } + + public void setTipoGiacenza(String tipoGiacenza) { + this.tipoGiacenza = tipoGiacenza; + } + + public String getTipoVerifica() { + return tipoVerifica; + } + + public void setTipoVerifica(String tipoVerifica) { + this.tipoVerifica = tipoVerifica; + } + + public String getVerificatoDa() { + return verificatoDa; + } + + public void setVerificatoDa(String verificatoDa) { + this.verificatoDa = verificatoDa; + } + + public Date getDataIns() { + return dataIns; + } + + public void setDataIns(Date dataIns) { + this.dataIns = dataIns; + } + + public Date getDataDoc() { + return dataDoc; + } + + public void setDataDoc(Date dataDoc) { + this.dataDoc = dataDoc; + } + + public String getSerDoc() { + return serDoc; + } + + public void setSerDoc(String serDoc) { + this.serDoc = serDoc; + } + + public Integer getNumDoc() { + return numDoc; + } + + public void setNumDoc(Integer numDoc) { + this.numDoc = numDoc; + } + + public String getRegolaCalcoloCosto() { + return regolaCalcoloCosto; + } + + public void setRegolaCalcoloCosto(String regolaCalcoloCosto) { + this.regolaCalcoloCosto = regolaCalcoloCosto; + } + + public LocalDateTime getDataOraInizio() { + return dataOraInizio; + } + + public void setDataOraInizio(LocalDateTime dataOraInizio) { + this.dataOraInizio = dataOraInizio; + } + + public LocalDateTime getDataOraFine() { + return dataOraFine; + } + + public void setDataOraFine(LocalDateTime dataOraFine) { + this.dataOraFine = dataOraFine; + } + + public String getCausale() { + return causale; + } + + public void setCausale(String causale) { + this.causale = causale; + } + + public List getMtbInvenr() { + return mtbInvenr; + } + + public void setMtbInvenr(List mtbInvenr) { + this.mtbInvenr = mtbInvenr; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/model/secondary/GestioneEnum.java b/app/src/main/java/it/integry/integrywmsnative/core/model/secondary/GestioneEnum.java index b063f094..e5d4d9db 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/model/secondary/GestioneEnum.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/model/secondary/GestioneEnum.java @@ -7,7 +7,7 @@ public enum GestioneEnum { LAVORAZIONE("L"), VENDITA("V"); - private String text; + private final String text; GestioneEnum(String text) { this.text = text; } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/HttpLoggerInterceptor.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/HttpLoggerInterceptor.java new file mode 100644 index 00000000..fb0550ed --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/HttpLoggerInterceptor.java @@ -0,0 +1,50 @@ +package it.integry.integrywmsnative.core.rest; + +import java.io.IOException; +import java.nio.charset.Charset; + +import it.integry.integrywmsnative.core.utility.UtilityLogger; +import okhttp3.HttpUrl; +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okio.Buffer; +import okio.BufferedSource; + +/** + * Created by GiuseppeS on 06/03/2018. + */ + +public class HttpLoggerInterceptor implements Interceptor { + + @Override + public Response intercept(Chain chain) throws IOException { + final Request request = chain.request(); + final HttpUrl url = request.url(); + + UtilityLogger.info("Logging request: [" + url + "]"); + + if (request.body() != null) { + var buffer = new Buffer(); + request.body().writeTo(buffer); + + UtilityLogger.info(buffer.readUtf8()); + } + + var response = chain.proceed(chain.request()); + + if (response.body() != null) { + ResponseBody responseBody = response.body(); + BufferedSource source = responseBody.source(); + source.request(Long.MAX_VALUE); // request the entire body. + Buffer buffer = source.getBuffer(); +// clone buffer before reading from it + String responseBodyString = buffer.clone().readString(Charset.forName("UTF-8")); + UtilityLogger.info(responseBodyString); + + } + + return response; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/RESTBuilder.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/RESTBuilder.java index f367c89a..3def3811 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/RESTBuilder.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/RESTBuilder.java @@ -4,8 +4,14 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import java.lang.reflect.Modifier; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.concurrent.TimeUnit; +import it.integry.integrywmsnative.core.rest.deserializer.LocalDateDeserializer; +import it.integry.integrywmsnative.core.rest.deserializer.LocalDateTimeDeserializer; +import it.integry.integrywmsnative.core.rest.serializer.LocalDateSerializer; +import it.integry.integrywmsnative.core.rest.serializer.LocalDateTimeSerializer; import it.integry.integrywmsnative.core.settings.SettingsManager; import okhttp3.OkHttpClient; import retrofit2.Retrofit; @@ -17,6 +23,8 @@ import retrofit2.converter.gson.GsonConverterFactory; public class RESTBuilder { + private static final boolean ADD_LOGGER_INTERCEPTOR = false; + public static T getService(final Class service) { return getService(service, SettingsManager.i().getServer().getHost(), SettingsManager.i().getServer().getPort(), true); @@ -45,6 +53,7 @@ public class RESTBuilder { clientBuilder.retryOnConnectionFailure(true); if (addInterceptors) clientBuilder.addInterceptor(new HttpInterceptor()); + if (ADD_LOGGER_INTERCEPTOR) clientBuilder.addInterceptor(new HttpLoggerInterceptor()); OkHttpClient client = clientBuilder.build(); @@ -52,6 +61,10 @@ public class RESTBuilder { Gson gson = new GsonBuilder() .setDateFormat("dd/MM/yyyy HH:mm:ss") + .registerTypeAdapter(LocalDate.class, new LocalDateDeserializer()) + .registerTypeAdapter(LocalDate.class, new LocalDateSerializer()) + .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeDeserializer()) + .registerTypeAdapter(LocalDateTime.class, new LocalDateTimeSerializer()) .excludeFieldsWithModifiers(Modifier.TRANSIENT) .create(); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/AziendaRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/AziendaRESTConsumer.java new file mode 100644 index 00000000..b994b3db --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/AziendaRESTConsumer.java @@ -0,0 +1,31 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.Azienda; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +@Singleton +public class AziendaRESTConsumer extends _BaseRESTConsumer { + + public void retrieveAzienda(RunnableArgs onComplete, RunnableArgs onFailed) { + AziendaRESTConsumerService aziendaRESTConsumerService = RESTBuilder.getService(AziendaRESTConsumerService.class); + aziendaRESTConsumerService.retrieveDefaultAzienda().enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "Retrieve default azienda", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/AziendaRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/AziendaRESTConsumerService.java new file mode 100644 index 00000000..dfc09716 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/AziendaRESTConsumerService.java @@ -0,0 +1,13 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import it.integry.integrywmsnative.core.model.Azienda; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import retrofit2.Call; +import retrofit2.http.GET; + +public interface AziendaRESTConsumerService { + + @GET("defaultAzienda") + Call> retrieveDefaultAzienda(); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java index a55fb81f..58421651 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/ColliMagazzinoRESTConsumer.java @@ -332,7 +332,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { List mtbColtList = new ArrayList<>(); mtbColtList.add(mtbColt); - fillMtbAartsOfMtbColtsStatic(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed); + fillMtbAartsOfMtbColts(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed); } else { onComplete.run(mtbColt); } @@ -350,7 +350,6 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { public void fillMtbAartsOfMtbColts(List mtbColts, RunnableArgs> onComplete, RunnableArgs onFailed) { fillMtbAartsOfMtbColtsStatic(mtbColts, onComplete, onFailed); } - public static void fillMtbAartsOfMtbColtsStatic(List mtbColts, RunnableArgs> onComplete, RunnableArgs onFailed) { List codMarts = new ArrayList<>(); @@ -432,7 +431,7 @@ public class ColliMagazzinoRESTConsumer extends _BaseRESTConsumer { if (mtbColt != null && mtbColt.getMtbColr() != null && mtbColt.getMtbColr().size() > 0) { List mtbColtList = new ArrayList<>(); mtbColtList.add(mtbColt); - fillMtbAartsOfMtbColtsStatic(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed); + fillMtbAartsOfMtbColts(mtbColtList, mtbColts -> onComplete.run(mtbColts.get(0)), onFailed); } else { onComplete.run(mtbColt); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GestSetupRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GestSetupRESTConsumer.java index 78ad94f1..acd1f047 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GestSetupRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/GestSetupRESTConsumer.java @@ -78,7 +78,7 @@ public class GestSetupRESTConsumer extends _BaseRESTConsumer { } - public static void getValues(String codMdep, List stbGestSetupList, RunnableArgs> onComplete, RunnableArgs onFailed) { + public void getValues(String codMdep, List stbGestSetupList, RunnableArgs> onComplete, RunnableArgs onFailed) { GestSetupRESTConsumerService service = RESTBuilder.getService(GestSetupRESTConsumerService.class); service.getGestSetupValues(codMdep, stbGestSetupList).enqueue(new Callback<>() { @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumer.java new file mode 100644 index 00000000..4c2daeb9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumer.java @@ -0,0 +1,77 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import androidx.annotation.NonNull; + +import javax.inject.Singleton; + +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.model.MtbInvent; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.rest.model.inventario.InsertInventarioRequestDTO; +import it.integry.integrywmsnative.core.rest.model.inventario.RetrieveInventarioArtsResponseDTO; +import it.integry.integrywmsnative.core.rest.model.inventario.RetrieveInventarioResponseDTO; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; + +@Singleton +public class InventarioRESTConsumer extends _BaseRESTConsumer { + + + public void loadInventario(long inventoryId, RunnableArgs onComplete, RunnableArgs onFailed) { + var inventarioRESTConsumerService = RESTBuilder.getService(InventarioRESTConsumerService.class); + inventarioRESTConsumerService.retrieve(inventoryId) + .enqueue(new Callback<>() { + @Override + public void onResponse(@NonNull Call> call, @NonNull Response> response) { + analyzeAnswer(response, "loadInventario", onComplete, onFailed); + } + + @Override + public void onFailure(@NonNull Call> call, @NonNull Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + + public void loadInventarioArts(long inventoryId, RunnableArgs onComplete, RunnableArgs onFailed) { + var inventarioRESTConsumerService = RESTBuilder.getService(InventarioRESTConsumerService.class); + inventarioRESTConsumerService.retrieveArts(inventoryId) + .enqueue(new Callback<>() { + @Override + public void onResponse(@NonNull Call> call, @NonNull Response> response) { + analyzeAnswer(response, "loadInventario", onComplete, onFailed); + } + + @Override + public void onFailure(@NonNull Call> call, @NonNull Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + + public void makeInsertRequest(MtbInvent inventarioToInsert, final Runnable onComplete, final RunnableArgs onFailed) { + var request = new InsertInventarioRequestDTO() + .setMtbInvent(inventarioToInsert); + + var inventarioRESTConsumerService = RESTBuilder.getService(InventarioRESTConsumerService.class, 120); + inventarioRESTConsumerService + .insert(inventarioToInsert.getIdInventario(), request) + .enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "insertInventario", ignored -> onComplete.run(), onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumerService.java new file mode 100644 index 00000000..5054be1a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/InventarioRESTConsumerService.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative.core.rest.consumers; + +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.core.rest.model.inventario.InsertInventarioRequestDTO; +import it.integry.integrywmsnative.core.rest.model.inventario.RetrieveInventarioArtsResponseDTO; +import it.integry.integrywmsnative.core.rest.model.inventario.RetrieveInventarioResponseDTO; +import retrofit2.Call; +import retrofit2.http.Body; +import retrofit2.http.GET; +import retrofit2.http.POST; +import retrofit2.http.Path; + +public interface InventarioRESTConsumerService { + + @GET("wms/inventario/{inventoryId}") + Call> retrieve( + @Path("inventoryId") long inventoryId); + + @POST("wms/inventario/{inventoryId}") + Call> insert( + @Path("inventoryId") long inventoryId, + @Body InsertInventarioRequestDTO insertInventarioRequestDTO); + + @GET("wms/inventario/{inventoryId}/arts") + Call> retrieveArts( + @Path("inventoryId") long inventoryId); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumer.java index 91df4313..5b5801aa 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumer.java @@ -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,57 +10,81 @@ 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.utility.UtilityDB; +import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; @Singleton public class MagazzinoRESTConsumer extends _BaseRESTConsumer { + private final SystemRESTConsumer mSystemRESTConsumer; - - public void getTipoCollo(String codTcol, RunnableArgs onComplete, RunnableArgs onFailed) { - String baseSql = "SELECT * " + - "FROM mtb_tcol " + - "WHERE cod_tcol = " + UtilityDB.valueToString(codTcol); - - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(baseSql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(List values) { - if(onComplete != null) { - MtbTCol value = values != null && values.size() > 0 ? values.get(0) : null; - onComplete.run(value); - } - } - - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); - } - }); + public MagazzinoRESTConsumer(SystemRESTConsumer mSystemRESTConsumer) { + this.mSystemRESTConsumer = mSystemRESTConsumer; } + public void getTipiCollo(RunnableArgs> onComplete, RunnableArgs onFailed) { - getTipiColloStatic(onComplete, onFailed); - } - - public static void getTipiColloStatic(RunnableArgs> onComplete, RunnableArgs onFailed) { String baseSql = "SELECT * " + "FROM mtb_tcol "; - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(baseSql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(List values) { - if(onComplete != null) { - onComplete.run(values); - } - } + Type typeOfObjectsList = new TypeToken>() { + }.getType(); - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); + mSystemRESTConsumer.>processSql(baseSql, typeOfObjectsList, values -> { + if (onComplete != null) { + onComplete.run(values); } + }, ex -> { + if (onFailed != null) onFailed.run(ex); }); } + + + public void saveOrdine(SaveDTO saveDTO, RunnableArgs onComplete, RunnableArgs onFailed) { + MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class); + service.saveOrdine(saveDTO) + .enqueue(new Callback<>() { + @Override + public void onResponse(Call>> call, Response>> 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>> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } + + public void saveTerminalinoWMS(SaveDTO saveDTO, RunnableArgs onComplete, RunnableArgs onFailed) { + MagazzinoRESTConsumerService service = RESTBuilder.getService(MagazzinoRESTConsumerService.class); + service.saveTerminalinoWMS(saveDTO) + .enqueue(new Callback<>() { + @Override + public void onResponse(Call> call, Response> response) { + analyzeAnswer(response, "saveTerminalinoWMS", onComplete, onFailed); + } + + @Override + public void onFailure(Call> call, Throwable t) { + onFailed.run(new Exception(t)); + } + }); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumerService.java index 18b07b0f..39ce7a20 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/MagazzinoRESTConsumerService.java @@ -1,4 +1,22 @@ 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; +import retrofit2.http.Body; +import retrofit2.http.POST; + public interface MagazzinoRESTConsumerService { + + @POST("SM2SaveTerminalinoWMS") + Call> saveTerminalinoWMS(@Body SaveDTO saveDTO); + + @POST("SM2SaveTerminalino") + Call>> saveOrdine(@Body SaveDTO saveDTO); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java index 33ddaf0d..6185d6b4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumer.java @@ -12,20 +12,18 @@ 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; import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityThread; -import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.ArtDTO; -import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.OrdineDTO; -import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.SaveDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.ArtDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.OrdineDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -33,13 +31,15 @@ import retrofit2.Response; @Singleton public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { + private final MagazzinoRESTConsumer magazzinoRESTConsumer; - public void getArticoliListino(String codAlis, RunnableArgs onSuccess, RunnableArgs onFailed) { - getArticoliListinoStatic(codAlis, onSuccess, onFailed); + public PVOrdiniAcquistoRESTConsumer(MagazzinoRESTConsumer magazzinoRESTConsumer) { + this.magazzinoRESTConsumer = magazzinoRESTConsumer; } - public static void getArticoliListinoStatic(String codAlis, RunnableArgs onSuccess, RunnableArgs onFailed) { - PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class); + public void getArticoliListino(String codAlis, RunnableArgs onSuccess, RunnableArgs onFailed) { + + PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class, 300); ordiniARestService .getArticoliListino(codAlis) .enqueue(new Callback<>() { @@ -85,7 +85,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { }); } - public void saveOrdine(Ordine ordine, List articoli, Griglia griglia, RunnableArgs onSuccess, RunnableArgs onFailed) { + public void saveOrdine(Ordine ordine, List articoli, RunnableArgs onSuccess, RunnableArgs onFailed) { SaveDTO saveDTO = new SaveDTO(); OrdineDTO ordineDTO = new OrdineDTO(); List artRows = new ArrayList<>(); @@ -96,44 +96,27 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { artRows.add(convertArtToDTO(art, i)); } - ordineDTO.setChiaveGriglia(griglia.getCodAlis()); - ordineDTO.setDataConsD(UtilityDate.getDateInstance()); + ordineDTO.setChiaveGriglia(ordine.getCodAlis()); + ordineDTO.setDataCons(UtilityDate.getDateInstance()); ordineDTO.setArtRows(artRows); saveDTO.setGestione("O"); saveDTO.setOrdineDTO(ordineDTO); - PVOrdiniAcquistoRESTConsumerService ordiniARestService = RESTBuilder.getService(PVOrdiniAcquistoRESTConsumerService.class); - ordiniARestService - .saveOrdine(saveDTO) - .enqueue(new Callback>>() { - @Override - public void onResponse(Call>> call, Response>> response) { - if (response.body() != null && response.body().size() > 0) { - analyzeListOfAnswers(response, "getArticoliListino", dtoList -> { - if (dtoList.size() > 0) { - DtbOrdt dto = dtoList.get(0); - ordine.setTransmitted(true); - ordine.setTransmissionDate(UtilityDate.getDateInstance()); - ordine.setGestione(dto.getGestione()); - ordine.setDataOrdS(dto.getDataOrd()); - ordine.setCodMdep(dto.getCodMdep()); - ordine.setNumOrd(dto.getNumOrd()); - onSuccess.run(ordine); - } else { - onFailed.run(new Exception("Nessun ordine generato")); - } - }, onFailed); - } - } + magazzinoRESTConsumer.saveOrdine(saveDTO, data -> { + if (data == null) { + onFailed.run(new Exception("Nessun ordine generato")); + return; + } - @Override - public void onFailure(Call>> call, Throwable t) { - Log.e("saveOrdineTerminale_pv", t.toString()); - UtilityLogger.error(new Exception(t)); - onFailed.run(new Exception(t)); - } - }); + ordine.setTransmitted(true); + ordine.setTransmissionDate(UtilityDate.getDateInstance()); + ordine.setGestione(data.getGestione()); + ordine.setDataOrdS(data.getDataOrd()); + ordine.setCodMdep(data.getCodMdep()); + ordine.setNumOrd(data.getNumOrd()); + onSuccess.run(ordine); + }, onFailed); } @@ -144,7 +127,7 @@ public class PVOrdiniAcquistoRESTConsumer extends _BaseRESTConsumer { dto.setCodMart(art.getCodMart()); dto.setBarcode(art.getBarCode()); dto.setDescrizione(art.getDescrizione()); - dto.setDataInsD(art.getDataIns()); + dto.setDataIns(art.getDataIns()); dto.setUntMis(art.getUntMis()); dto.setSystemNote(art.getSystemNote()); dto.setQta(BigDecimal.valueOf(art.getQtaOrd())); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumerService.java index 427e65ec..4123f9f0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PVOrdiniAcquistoRESTConsumerService.java @@ -1,14 +1,8 @@ package it.integry.integrywmsnative.core.rest.consumers; -import java.util.List; - import it.integry.integrywmsnative.core.data_store.db.view_model.GrigliaDTO; -import it.integry.integrywmsnative.core.model.DtbOrdt; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; -import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto.SaveDTO; import retrofit2.Call; -import retrofit2.http.Body; -import retrofit2.http.Header; import retrofit2.http.POST; import retrofit2.http.Query; @@ -16,7 +10,4 @@ public interface PVOrdiniAcquistoRESTConsumerService { @POST("SM2GetElencoArticoli") Call> getArticoliListino(@Query("chiaveGriglia") String codAlis); - - @POST("SM2SaveTerminalino") - Call>> saveOrdine(@Body SaveDTO saveDTO); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PosizioniRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PosizioniRESTConsumer.java index 1a3aad17..25cf1d01 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PosizioniRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/PosizioniRESTConsumer.java @@ -19,7 +19,7 @@ import retrofit2.Callback; import retrofit2.Response; @Singleton -public class PosizioniRESTConsumer extends _BaseRESTConsumer{ +public class PosizioniRESTConsumer extends _BaseRESTConsumer { private final SystemRESTConsumer mSystemRESTConsumer; @@ -27,29 +27,7 @@ public class PosizioniRESTConsumer extends _BaseRESTConsumer{ this.mSystemRESTConsumer = systemRESTConsumer; } - public void getPosizioneFromString(String posizione, RunnableArgs onComplete, RunnableArgs onFailed) { - String sql = "SELECT TOP 1 mtb_depo_posizioni.*," + - " CASE WHEN jtb_fasi.cod_jfas IS NULL THEN 'N' ELSE 'S' END AS flag_linea_produzione " + - " FROM mtb_depo_posizioni " + - " LEFT OUTER JOIN jtb_fasi " + - " ON mtb_depo_posizioni.posizione = jtb_fasi.cod_jfas " + - " WHERE posizione = " + UtilityDB.valueToString(posizione); - - SystemRESTConsumer.processSqlStatic(sql, MtbDepoPosizione.class, new ISimpleOperationCallback() { - @Override - public void onSuccess(MtbDepoPosizione value) { - if(onComplete != null) onComplete.run(value); - } - - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); - } - }); - } - - public static void getAvailablePosizioni(RunnableArgs> onComplete, RunnableArgs onFailed) { -// String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); + public void getAvailablePosizioni(RunnableArgs> onComplete, RunnableArgs onFailed) { String codMdep = null; PosizioniRESTConsumerService posizioniRESTConsumerService = RESTBuilder.getService(PosizioniRESTConsumerService.class); @@ -70,20 +48,19 @@ public class PosizioniRESTConsumer extends _BaseRESTConsumer{ public void getBancaliInPosizione(MtbDepoPosizione mtbDepoPosizione, RunnableArgs> onComplete, RunnableArgs onFailed) { - String sql = "SELECT * FROM mtb_colt WHERE segno > 0 AND cod_mdep = " + UtilityDB.valueToString(mtbDepoPosizione.getCodMdep()) + " AND posizione = " + UtilityDB.valueToString(mtbDepoPosizione.getPosizione()); + String sql = "SELECT * FROM mtb_colt " + + "WHERE segno > 0 " + + "AND cod_mdep = " + UtilityDB.valueToString(mtbDepoPosizione.getCodMdep()) + " " + + "AND posizione = " + UtilityDB.valueToString(mtbDepoPosizione.getPosizione()); - Type typeOfObjectsList = new TypeToken>() {}.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(List value) { - if(onComplete != null) onComplete.run(value); - } + Type typeOfObjectsList = new TypeToken>() { + }.getType(); - @Override - public void onFailed(Exception ex) { - if(onFailed != null) onFailed.run(ex); - } + mSystemRESTConsumer.>processSql(sql, typeOfObjectsList, value -> { + if (onComplete != null) onComplete.run(value); + }, ex -> { + if (onFailed != null) onFailed.run(ex); }); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java index 8b0d8bd5..f9d81216 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/SystemRESTConsumer.java @@ -7,7 +7,6 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonDeserializer; import com.google.gson.JsonParseException; -import com.google.gson.reflect.TypeToken; import com.orhanobut.logger.Logger; import java.io.ByteArrayInputStream; @@ -16,7 +15,6 @@ import java.io.InputStreamReader; import java.io.Reader; import java.lang.reflect.Type; import java.net.ConnectException; -import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -26,7 +24,6 @@ import it.integry.integrywmsnative.BuildConfig; import it.integry.integrywmsnative.core.CommonConst; import it.integry.integrywmsnative.core.exception.InvalidConnectionException; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.model.Azienda; import it.integry.integrywmsnative.core.rest.RESTBuilder; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.rest.model.MailRequestDTO; @@ -34,7 +31,6 @@ import it.integry.integrywmsnative.core.rest.model.NativeSqlRequestDTO; import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.core.utility.UtilityDate; -import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.core.utility.UtilityString; import retrofit2.Call; import retrofit2.Callback; @@ -43,8 +39,7 @@ import retrofit2.Response; @Singleton public class SystemRESTConsumer extends _BaseRESTConsumer { - public static void processSqlStatic(String nativeSql, final Type clazz, RunnableArgs onComplete, RunnableArgs onFailed) { - + public void processSql(String nativeSql, final Type clazz, final RunnableArgs onComplete, final RunnableArgs onFailed) { NativeSqlRequestDTO nativeSqlDTO = new NativeSqlRequestDTO(); nativeSqlDTO.nativeSql = nativeSql; @@ -86,49 +81,10 @@ public class SystemRESTConsumer extends _BaseRESTConsumer { onFailed.run(new Exception(t)); } }); - - } - - public static void processSqlStatic(String nativeSql, final Type clazz, final ISimpleOperationCallback callback) { - - processSqlStatic(nativeSql, clazz, data -> { - callback.onSuccess((T) data); - }, callback::onFailed); - - } - - public void processSql(String nativeSql, final Type clazz, final RunnableArgs onComplete, final RunnableArgs onFailed) { - processSqlStatic(nativeSql, clazz, onComplete, onFailed); - } - - - public static void getAvailableProfiles(final RunnableArgs> onSuccess, RunnableArgs onFailed) { - - SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class); - service.getAvailableProfiles(SettingsManager.i().getUser().getUsername(), SettingsManager.i().getUser().getPassword()).enqueue(new Callback>>() { - @Override - public void onResponse(Call>> call, Response>> response) { - analyzeAnswer(response, "ProfilesAvailable", onSuccess, onFailed); - } - - @Override - public void onFailure(Call>> call, final Throwable t) { - Log.e("ProfilesAvailable", t.toString()); - onFailed.run(new Exception(t)); - UtilityLogger.error(new Exception(t)); - } - }); - - } public void getAvailableCodMdeps(final RunnableArgs> onSuccess, RunnableArgs onFailed) { - getAvailableCodMdepsStatic(onSuccess, onFailed); - } - - public static void getAvailableCodMdepsStatic(final RunnableArgs> onSuccess, RunnableArgs onFailed) { - SystemRESTConsumerService service = RESTBuilder.getService(SystemRESTConsumerService.class); service.getAvailableCodMdeps().enqueue(new Callback<>() { @Override @@ -197,24 +153,4 @@ public class SystemRESTConsumer extends _BaseRESTConsumer { }); } - - public static void getAzienda(RunnableArgs onComplete, RunnableArgs onFailed) { - - String sql = "SELECT TOP 1 * FROM azienda"; - - Type typeOfObjectsList = new TypeToken>() { - }.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(List value) { - if (onComplete != null) onComplete.run(value.get(0)); - } - - @Override - public void onFailed(Exception ex) { - if (onFailed != null) onFailed.run(ex); - } - }); - - } } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java index 02b7194b..ed399da0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/consumers/_BaseRESTConsumer.java @@ -39,9 +39,10 @@ public abstract class _BaseRESTConsumer { } } else { if (response.code() == 404) { - Log.e(logTitle, "Errore " + response.code() + ": risorsa non trovata (" + response.raw().request().url().toString() + ")"); - onFailed.run(new Exception("Errore " + response.code() + ": risorsa non trovata (" + logTitle + ")")); - } else if (response.code() == 550) + Log.e(logTitle, "Errore " + response.code() + ": risorsa non trovata (" + response.raw().request().url() + ")"); + onFailed.run(new Exception("Errore " + response.code() + ": risorsa non trovata (" + response.raw().request().url() + ")")); + } + else if (response.code() == 550) onFailed.run(new NotValidLicenseException()); else { Log.e(logTitle, "Status " + response.code() + ": " + response.message()); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateDeserializer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateDeserializer.java new file mode 100644 index 00000000..5570f9ba --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateDeserializer.java @@ -0,0 +1,27 @@ +package it.integry.integrywmsnative.core.rest.deserializer; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; + +import java.lang.reflect.Type; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityString; + +public class LocalDateDeserializer implements JsonDeserializer { + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH); + + + @Override + public LocalDate deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { + String date = element.getAsString(); + if (UtilityString.isNullOrEmpty(date)) return null; + + return LocalDate.parse(date, formatter); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateTimeDeserializer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateTimeDeserializer.java new file mode 100644 index 00000000..c2683ea5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/deserializer/LocalDateTimeDeserializer.java @@ -0,0 +1,26 @@ +package it.integry.integrywmsnative.core.rest.deserializer; + +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; + +import java.lang.reflect.Type; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +import it.integry.integrywmsnative.core.utility.UtilityString; + +public class LocalDateTimeDeserializer implements JsonDeserializer { + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss"); + + + @Override + public LocalDateTime deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException { + String date = element.getAsString(); + if (UtilityString.isNullOrEmpty(date)) return null; + + return LocalDateTime.parse(date, formatter); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/InsertInventarioRequestDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/InsertInventarioRequestDTO.java new file mode 100644 index 00000000..df3d3b0f --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/InsertInventarioRequestDTO.java @@ -0,0 +1,17 @@ +package it.integry.integrywmsnative.core.rest.model.inventario; + +import it.integry.integrywmsnative.core.model.MtbInvent; + +public class InsertInventarioRequestDTO { + + private MtbInvent mtbInvent; + + public MtbInvent getMtbInvent() { + return mtbInvent; + } + + public InsertInventarioRequestDTO setMtbInvent(MtbInvent mtbInvent) { + this.mtbInvent = mtbInvent; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/InventarioArtDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/InventarioArtDTO.java new file mode 100644 index 00000000..d6561e6d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/InventarioArtDTO.java @@ -0,0 +1,123 @@ +package it.integry.integrywmsnative.core.rest.model.inventario; + +import java.math.BigDecimal; +import java.util.List; + +import it.integry.integrywmsnative.core.model.MtbAart; + +public class InventarioArtDTO { + + private String codMart; + private String descrizione; + private String untMis; + private BigDecimal qtaCnf; + private List barcode; + private boolean flagTracciabilita; + private boolean flagQtaCnfFissa; + private BigDecimal giacenza; + private boolean plu; + private BigDecimal przVendIva; + + public String getCodMart() { + return codMart; + } + + public InventarioArtDTO setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizione() { + return descrizione; + } + + public InventarioArtDTO setDescrizione(String descrizione) { + this.descrizione = descrizione; + return this; + } + + public String getUntMis() { + return untMis; + } + + public InventarioArtDTO setUntMis(String untMis) { + this.untMis = untMis; + return this; + } + + public BigDecimal getQtaCnf() { + return qtaCnf; + } + + public InventarioArtDTO setQtaCnf(BigDecimal qtaCnf) { + this.qtaCnf = qtaCnf; + return this; + } + + public List getBarcode() { + return barcode; + } + + public InventarioArtDTO setBarcode(List barcode) { + this.barcode = barcode; + return this; + } + + public boolean isFlagTracciabilita() { + return flagTracciabilita; + } + + public InventarioArtDTO setFlagTracciabilita(boolean flagTracciabilita) { + this.flagTracciabilita = flagTracciabilita; + return this; + } + + public boolean isFlagQtaCnfFissa() { + return flagQtaCnfFissa; + } + + public InventarioArtDTO setFlagQtaCnfFissa(boolean flagQtaCnfFissa) { + this.flagQtaCnfFissa = flagQtaCnfFissa; + return this; + } + + public BigDecimal getGiacenza() { + return giacenza; + } + + public InventarioArtDTO setGiacenza(BigDecimal giacenza) { + this.giacenza = giacenza; + return this; + } + + public boolean isPlu() { + return plu; + } + + public InventarioArtDTO setPlu(boolean plu) { + this.plu = plu; + return this; + } + + public BigDecimal getPrzVendIva() { + return przVendIva; + } + + public InventarioArtDTO setPrzVendIva(BigDecimal przVendIva) { + this.przVendIva = przVendIva; + return this; + } + + public MtbAart toMtbAart() { + return new MtbAart() + .setCodMart(getCodMart()) + .setDescrizione(getDescrizione()) + .setDescrizioneEstesa(getDescrizione()) + .setBarCode(!getBarcode().isEmpty() ? getBarcode().get(0) : null) + .setUntMis(getUntMis()) + .setQtaCnf(getQtaCnf()) + .setPlu(isPlu() ? "S" : "N") + .setFlagTracciabilita(isFlagTracciabilita() ? "S" : "N") + .setFlagQtaCnfFissa(isFlagQtaCnfFissa() ? "S" : "N"); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/RetrieveInventarioArtsResponseDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/RetrieveInventarioArtsResponseDTO.java new file mode 100644 index 00000000..39db421d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/RetrieveInventarioArtsResponseDTO.java @@ -0,0 +1,13 @@ +package it.integry.integrywmsnative.core.rest.model.inventario; + +import java.util.List; + +public class RetrieveInventarioArtsResponseDTO { + + private List arts; + + public List getArts() { + return arts; + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/RetrieveInventarioResponseDTO.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/RetrieveInventarioResponseDTO.java new file mode 100644 index 00000000..034a03bd --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/model/inventario/RetrieveInventarioResponseDTO.java @@ -0,0 +1,12 @@ +package it.integry.integrywmsnative.core.rest.model.inventario; + +import it.integry.integrywmsnative.core.model.MtbInvent; + +public class RetrieveInventarioResponseDTO { + + private MtbInvent mtbInvent; + + public MtbInvent getMtbInvent() { + return mtbInvent; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/serializer/LocalDateSerializer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/serializer/LocalDateSerializer.java new file mode 100644 index 00000000..2ee005ca --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/serializer/LocalDateSerializer.java @@ -0,0 +1,21 @@ +package it.integry.integrywmsnative.core.rest.serializer; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; +import java.time.LocalDate; + +import it.integry.integrywmsnative.core.utility.UtilityDate; + +public class LocalDateSerializer implements JsonSerializer { + + @Override + public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) { + String dateString = UtilityDate.formatDate(src, UtilityDate.COMMONS_DATE_FORMATS.DMY_SLASH); + + return src == null ? null : new JsonPrimitive(dateString); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/core/rest/serializer/LocalDateTimeSerializer.java b/app/src/main/java/it/integry/integrywmsnative/core/rest/serializer/LocalDateTimeSerializer.java new file mode 100644 index 00000000..28af20f9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/rest/serializer/LocalDateTimeSerializer.java @@ -0,0 +1,21 @@ +package it.integry.integrywmsnative.core.rest.serializer; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; + +import java.lang.reflect.Type; +import java.time.LocalDateTime; + +import it.integry.integrywmsnative.core.utility.UtilityDate; + +public class LocalDateTimeSerializer implements JsonSerializer { + + @Override + public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) { + String dateString = UtilityDate.formatDate(src, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH); + + return src == null ? null : new JsonPrimitive(dateString); + } +} 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 8f4f299e..748aa1eb 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 @@ -133,15 +133,6 @@ public class DBSettingsModel { return this; } - public String getDefaultCausaleRettificaGiacenze() { - return defaultCausaleRettificaGiacenze; - } - - public DBSettingsModel setDefaultCausaleRettificaGiacenze(String defaultCausaleRettificaGiacenze) { - this.defaultCausaleRettificaGiacenze = defaultCausaleRettificaGiacenze; - return this; - } - public DistribuzioneColloDTO.CriterioDistribuzione getDefaultCriterioDistribuzione() { return defaultCriterioDistribuzione; } 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 6ad366f1..f5b616a8 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 @@ -12,16 +12,20 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import javax.inject.Singleton; + import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.model.StbGestSetup; import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO; +import it.integry.integrywmsnative.core.rest.consumers.AziendaRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.GestSetupRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.PosizioniRESTConsumer; import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO; import it.integry.integrywmsnative.core.utility.UtilityFirebase; +@Singleton public class SettingsManager { private static String TAG = "SETTINGS"; @@ -32,10 +36,24 @@ public class SettingsManager { private static boolean firstStart = false; private static Context mContext; + private static SystemRESTConsumer mSystemRESTConsumer; + private static AziendaRESTConsumer mAziendaRESTConsumer; + private static GestSetupRESTConsumer mGestSetupRESTConsumer; + private static PosizioniRESTConsumer mPosizioniRESTConsumer; - public static void init(Context context) { + public SettingsManager(Context context, + SystemRESTConsumer systemRESTConsumer, + AziendaRESTConsumer aziendaRESTConsumer, + GestSetupRESTConsumer gestSetupRESTConsumer, + PosizioniRESTConsumer posizioniRESTConsumer) { mContext = context; + mSystemRESTConsumer = systemRESTConsumer; + mAziendaRESTConsumer = aziendaRESTConsumer; + mGestSetupRESTConsumer = gestSetupRESTConsumer; + mPosizioniRESTConsumer = posizioniRESTConsumer; + } + public void init() { settingsModelIstance = (SettingsModel) Stash.getObject(TAG, SettingsModel.class); if (settingsModelIstance == null) { @@ -52,6 +70,11 @@ public class SettingsManager { } + public SettingsModel getSettings() { + return settingsModelIstance; + } + + public static SettingsModel i() { return settingsModelIstance; } @@ -110,7 +133,7 @@ public class SettingsManager { private static void loadDatiAzienda(Runnable onComplete, RunnableArgs onFailed) { - SystemRESTConsumer.getAzienda(datiAzienda -> { + mAziendaRESTConsumer.retrieveAzienda(datiAzienda -> { SettingsManager.iDB().setDatiAzienda(datiAzienda); if (!SettingsManager.iDB().isFlagUseCodAnagAziendale()) { @@ -128,7 +151,7 @@ public class SettingsManager { Type type = new TypeToken>() { }.getType(); - SystemRESTConsumer.>processSqlStatic(internalCodAnagsQuery, type, internalCodAnagsList -> { + mSystemRESTConsumer.>processSql(internalCodAnagsQuery, type, internalCodAnagsList -> { SettingsManager.iDB().setInternalCodAnags(internalCodAnagsList); if (onComplete != null) onComplete.run(); @@ -137,20 +160,8 @@ public class SettingsManager { }, onFailed); } - private static void loadAvailableProfiles(Runnable onComplete, RunnableArgs onFailed) { - SystemRESTConsumer.getAvailableProfiles(availableProfiles -> { - dbSettingsModelIstance.setAvailableProfiles(availableProfiles); - - onComplete.run(); - - }, ex -> { - //BOH - if (onFailed != null) onFailed.run(ex); - }); - } - private static void loadAvailableCodMdeps(Runnable onComplete, RunnableArgs onFailed) { - SystemRESTConsumer.getAvailableCodMdepsStatic(availableCodMdeps -> { + mSystemRESTConsumer.getAvailableCodMdeps(availableCodMdeps -> { dbSettingsModelIstance.setAvailableCodMdep(availableCodMdeps); if (availableCodMdeps == null || availableCodMdeps.size() == 0) { @@ -183,7 +194,7 @@ public class SettingsManager { private static void loadAvailablePosizioni(Runnable onComplete, RunnableArgs onFailed) { - PosizioniRESTConsumer.getAvailablePosizioni(availablePosizioni -> { + mPosizioniRESTConsumer.getAvailablePosizioni(availablePosizioni -> { dbSettingsModelIstance.setAvailablePosizioni(availablePosizioni); if (onComplete != null) onComplete.run(); @@ -198,10 +209,6 @@ public class SettingsManager { List stbGestSetupList = new ArrayList<>(); - stbGestSetupList.add(new StbGestSetup() - .setGestName("PICKING") - .setSection("SETUP") - .setKeySection("DEFAULT_CAUSALE_RETTIFICA_GIACENZE")); stbGestSetupList.add(new StbGestSetup() .setGestName("PICKING") .setSection("SETUP") @@ -336,8 +343,7 @@ public class SettingsManager { .setKeySection("FLAG_NOTIFICA_STATO_PARTITA")); String codMdep = SettingsManager.i().getUserSession().getDepo().getCodMdep(); - GestSetupRESTConsumer.getValues(codMdep, stbGestSetupList, list -> { - dbSettingsModelIstance.setDefaultCausaleRettificaGiacenze(getValueFromList(list, "SETUP", "DEFAULT_CAUSALE_RETTIFICA_GIACENZE", String.class)); + mGestSetupRESTConsumer.getValues(codMdep, stbGestSetupList, list -> { dbSettingsModelIstance.setEnableCheckPartitaMagCheckPickingV(getValueFromList(list, "SETUP", "ENABLE_CHECK_PARTITA_MAG_PICKING_V", Boolean.class)); dbSettingsModelIstance.setFlagMultiClienteOrdV(getValueFromList(list, "SETUP", "FLAG_MULTI_CLIENTE_ORD_VENDITA", Boolean.class)); dbSettingsModelIstance.setFlagUseCodAnagAziendale(getValueFromList(list, "SETUP", "FLAG_USE_COD_ANAG_AZIENDALE", Boolean.class)); diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java index c68e7828..aef9d815 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/PermissionsHelper.java @@ -43,33 +43,21 @@ public class PermissionsHelper { activity.setOnRequestPermissionsResult((requestCode, permissions, grantResults) -> { - switch (requestCode) { - case 1: { + if (requestCode == 1) { + boolean allGranted = Stream.of(grantResults).allMatch(x -> x == PackageManager.PERMISSION_GRANTED); - boolean allGranted = Stream.of(grantResults).allMatch(x -> x == PackageManager.PERMISSION_GRANTED); + // If request is cancelled, the result arrays are empty. + if (grantResults.size() > 0 && allGranted) { + onPermissionsConfirmed.run(); - // If request is cancelled, the result arrays are empty. - if (grantResults.size() > 0 && allGranted) { - - onPermissionsConfirmed.run(); - - } else { - boolean anyPermDeny = shouldShowRequestPermissionRationale( activity, permissions ); - - onPermissionsDenied.run(anyPermDeny); - } - return; + } else { + boolean anyPermDeny = shouldShowRequestPermissionRationale(activity, permissions); + onPermissionsDenied.run(anyPermDeny); } - - // other 'case' lines to check for other - // permissions this app might request } }); - - ActivityCompat.requestPermissions(activity, permissionArray,1); - } private static boolean shouldShowRequestPermissionRationale(AppCompatActivity activity, String[] permissions) { diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDate.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDate.java index 5b7f01b3..d5130ea0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDate.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDate.java @@ -1,9 +1,17 @@ package it.integry.integrywmsnative.core.utility; +import androidx.annotation.Nullable; + import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.Calendar; import java.util.Date; +import java.util.concurrent.TimeUnit; import it.integry.integrywmsnative.core.exception.DateNotRecognizedException; import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException; @@ -14,6 +22,8 @@ import it.integry.integrywmsnative.core.exception.TimeNotRecognizedException; public class UtilityDate { + private static final ZoneId currentZone = ZoneId.systemDefault(); + public static class COMMONS_DATE_FORMATS { public static final String DMY_SLASH = "dd/MM/yyyy"; public static final String YMD_SLASH = "yyyy/MM/dd"; @@ -119,4 +129,97 @@ public class UtilityDate { public static Calendar getCalendarInstance() { return Calendar.getInstance(); } + + + + + public static String formatDate(LocalDate dateToFormat, String format) { + if (dateToFormat != null) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); + return dateToFormat.format(formatter); + } else return null; + } + + + public static String formatDate(LocalDateTime dateToFormat, String format) { + if (dateToFormat != null) { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); + return dateToFormat.format(formatter); + } else return null; + } + + public static boolean isBeforeToday(LocalDateTime inputDate) { + return inputDate != null && inputDate.toLocalDate().isBefore(getNow()); + } + + public static boolean isAfterToday(LocalDateTime inputDate) { + return inputDate != null && inputDate.toLocalDate().isAfter(getNow()); + } + + public static boolean isToday(LocalDateTime inputDate) { + return inputDate != null && inputDate.toLocalDate().isEqual(getNow()); + } + + public static LocalDate toLocalDate(Date dateToConvert) { + return dateToConvert.toInstant() + .atZone(currentZone) + .toLocalDate(); + } + + public static LocalDateTime toLocalDateTime(Date dateToConvert) { + return dateToConvert.toInstant() + .atZone(currentZone) + .toLocalDateTime(); + } + + public static Date toDate(LocalDate dateToConvert) { + return Date.from(dateToConvert.atStartOfDay() + .atZone(currentZone) + .toInstant()); + } + + public static Date toDateTime(LocalDateTime dateToConvert) { + return Date.from(dateToConvert + .atZone(currentZone) + .toInstant()); + } + + + + public static LocalDate getNow() { + return Instant.now() + .atZone(currentZone) + .toLocalDate(); + } + + public static LocalDateTime getNowTime() { + return Instant.now() + .atZone(currentZone) + .toLocalDateTime(); + } + public static LocalDate timeToLocalDate(long time, @Nullable String timezone) { + return Instant.ofEpochSecond(time) + .atZone(timezone == null ? currentZone : ZoneId.of(timezone)) + .toLocalDate(); + } + + public static LocalDateTime timeToLocalDateTime(long time, @Nullable String timezone) { + return Instant.ofEpochSecond(time) + .atZone(timezone == null ? currentZone : ZoneId.of(timezone)) + .toLocalDateTime(); + } + + + + public static long localDateTimeToTime(LocalDateTime localDateTime, @Nullable String timezone) { + return localDateTime + .atZone(timezone == null ? currentZone : ZoneId.of(timezone)) + .toEpochSecond(); + } + + public static long localDateToTime(LocalDate localDate) { + return TimeUnit.DAYS.toSeconds(localDate.toEpochDay()); + } + + } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDimension.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDimension.java index 71d12bae..8a9cb2c2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDimension.java +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityDimension.java @@ -17,10 +17,26 @@ public class UtilityDimension { ); } - public static float convertDpToPixel(float dp){ - DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); - float px = dp * (metrics.densityDpi / 160f); - return Math.round(px); + /** + * This method converts dp unit to equivalent pixels, depending on device density. + * + * @param dp A value in dp (density independent pixels) unit. Which we need to convert into pixels + * @param context Context to get resources and device specific display metrics + * @return A float value to represent px equivalent to dp depending on device density + */ + public static float convertDpToPixel(float dp, Context context){ + return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT); + } + + /** + * This method converts device specific pixels to density independent pixels. + * + * @param px A value in px (pixels) unit. Which we need to convert into db + * @param context Context to get resources and device specific display metrics + * @return A float value to represent dp equivalent to px value + */ + public static float convertPixelsToDp(float px, Context context){ + return px / ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT); } diff --git a/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLiveData.java b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLiveData.java new file mode 100644 index 00000000..b84a6faa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/core/utility/UtilityLiveData.java @@ -0,0 +1,18 @@ +package it.integry.integrywmsnative.core.utility; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.Observer; + +public class UtilityLiveData { + + public static void observeOnce(final LiveData liveData, final Observer observer) { + liveData.observeForever(new Observer() { + @Override + public void onChanged(T t) { + liveData.removeObserver(this); + observer.onChanged(t); + } + }); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java index babc2d6d..0a2e3a28 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione/MainAccettazioneFragment.java @@ -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 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 originalList = this.mViewModel.getOrderList().getValue(); - if(originalList == null || originalList.isEmpty()) return false; + if (originalList == null || originalList.isEmpty()) return false; mTextFilter = newText; List filteredOrders = getFilteredList(newText); @@ -254,9 +253,9 @@ public class MainAccettazioneFragment extends BaseFragment implements ISearchabl private List getFilteredList(String newText) { List filteredOrders = new ArrayList<>(); List 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)); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java index 33ddd09d..3641df5d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/accettazione_picking/AccettazionePickingActivity.java @@ -72,7 +72,7 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.dialogs.ask_should_versamento_automatico_ul.DialogAskShouldVersamentoAutomaticoULView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; -import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.InfoAggiuntiveLUDialog; +import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; import it.integry.integrywmsnative.view.dialogs.versamento_automatico_ul_done.DialogVersamentoAutomaticoULDoneView; @@ -129,7 +129,6 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta setSupportActionBar(mBindings.toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - mBindings.bottomSheetLuContent.init(mBindings.bottomSheetLuContent, null); mBottomSheetFragmentLUContentViewModel = mBindings.bottomSheetLuContent.getViewModelInstance(); mBindings.bottomSheetLuContent.setListener(this); mBottomSheetFragmentLUContentViewModel.setListener(this); @@ -787,7 +786,7 @@ public class AccettazionePickingActivity extends BaseActivity implements Accetta @Override public void onInfoAggiuntiveRequest(RunnableArgss onComplete) { runOnUiThread(() -> { - InfoAggiuntiveLUDialog.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog"); + DialogInfoAggiuntiveLU.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog"); }); } 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 aaff1b99..190e36b0 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 @@ -32,7 +32,7 @@ import it.integry.integrywmsnative.databinding.FragmentDocInterniBinding; import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoView; import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoViewModel; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaArticoliDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.DocInterniEditFormActivity; import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListAdapter; import it.integry.integrywmsnative.gest.contab_doc_interni.ui.DocInterniListModel; @@ -200,7 +200,7 @@ public class DocInterniFragment extends BaseFragment implements ITitledFragment, } @Override - public void onDocumentEditRequest(SqlMtbColt document, GrigliaAcquistiDTO arts) { + public void onDocumentEditRequest(SqlMtbColt document, GrigliaArticoliDTO arts) { requireActivity().startActivity(DocInterniEditFormActivity.newInstance(requireActivity(), document, arts, mViewModel.getTipoDoc())); } } 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 11c63f54..7b10cba1 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 @@ -17,7 +17,7 @@ import it.integry.integrywmsnative.core.settings.SettingsManager; import it.integry.integrywmsnative.gest.contab_doc_interni.dialog.DialogSelectDocInfoViewModel; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.FornitoreDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaArticoliDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GruppiArticoloDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; @@ -31,7 +31,7 @@ public class DocInterniViewModel { private boolean productsFetched = true; private boolean docsFetched = true; private int nextNumCollo = 0; - private GrigliaAcquistiDTO productsList; + private GrigliaArticoliDTO productsList; private final MutableLiveData> mDocsList = new MutableLiveData<>(); public final MutableLiveData dtbTipi = new MutableLiveData<>(); @@ -198,7 +198,7 @@ public class DocInterniViewModel { void onDocDetailsChanged(DialogSelectDocInfoViewModel selection); - void onDocumentEditRequest(SqlMtbColt document, GrigliaAcquistiDTO arts); + void onDocumentEditRequest(SqlMtbColt document, GrigliaArticoliDTO arts); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ArtDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ArtDTO.java index 3a61eb81..3f95ed4b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ArtDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/ArtDTO.java @@ -27,6 +27,8 @@ public class ArtDTO { private Date dataScad; + private String systemNote; + public Integer getRigaOrd() { return rigaOrd; } @@ -114,4 +116,12 @@ public class ArtDTO { public void setDataScad(Date dataScad) { this.dataScad = dataScad; } + + public String getSystemNote() { + return systemNote; + } + + public void setSystemNote(String systemNote) { + this.systemNote = systemNote; + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java index a88b0100..8273167a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiChildDTO.java @@ -4,17 +4,17 @@ import java.math.BigDecimal; public class GrigliaAcquistiChildDTO { - public String codMart; - public String descrizione; - public String untMis; - public BigDecimal qtaCnf; - public String barcode; - public BigDecimal merceDaRic; - public BigDecimal mediaSett; - public String flagQtaMultipla; - public String flagTracciabilita; - public BigDecimal qtaMinOrdinabile; - public boolean newNoPromo; + private String codMart; + private String descrizione; + private String untMis; + private BigDecimal qtaCnf; + private String barcode; + private BigDecimal merceDaRic; + private BigDecimal mediaSett; + private String flagQtaMultipla; + private String flagTracciabilita; + private BigDecimal qtaMinOrdinabile; + private boolean newNoPromo; private int ggScadenza; private float giacenza; private float qtaPrevistaVendita; diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaArticoliDTO.java similarity index 95% rename from app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiDTO.java rename to app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaArticoliDTO.java index dc5da0a3..a09f00ae 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaAcquistiDTO.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/dto/GrigliaArticoliDTO.java @@ -2,7 +2,7 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.dto; import java.util.List; -public class GrigliaAcquistiDTO { +public class GrigliaArticoliDTO { private String descrLisa; 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 3355f832..fd1c5880 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 @@ -27,7 +27,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.SqlMtbColr; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; -import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrRepository; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSource; import it.integry.integrywmsnative.core.di.BindableBoolean; import it.integry.integrywmsnative.core.di.BindableInteger; import it.integry.integrywmsnative.core.di.BindableString; @@ -38,7 +38,7 @@ import it.integry.integrywmsnative.core.model.MtbPartitaMag; import it.integry.integrywmsnative.core.utility.UtilityDate; import it.integry.integrywmsnative.databinding.ActivityContabDocInterniEditBinding; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiChildDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaArticoliDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.TipiDocDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.dialog.selectDocRows.DialogSelectDocRowsView; import it.integry.integrywmsnative.gest.contab_doc_interni.edit_form.ui.DocumentRowsListAdapter; @@ -56,7 +56,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter private static final String DATA_KEY_TIPO_DOC = "docType"; @Inject - MtbColrRepository documentRowsRepository; + MtbColrDataSource documentRowsRepository; @Inject DocInterniEditFormViewModel viewModel; @@ -77,7 +77,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter public BindableBoolean isDocumentExportable = new BindableBoolean(false); private final ObservableArrayList documentRowsObservableList = new ObservableArrayList<>(); - public static Intent newInstance(Context context, SqlMtbColt document, GrigliaAcquistiDTO productList, TipiDocDTO tipoDoc) { + public static Intent newInstance(Context context, SqlMtbColt document, GrigliaArticoliDTO productList, TipiDocDTO tipoDoc) { Intent myIntent = new Intent(context, DocInterniEditFormActivity.class); String doc = DataCache.addItem(document); @@ -98,7 +98,7 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter .create() .inject(this); SqlMtbColt document = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_DOCUMENT)); - GrigliaAcquistiDTO griglia = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_PRODUCTS_LIST)); + GrigliaArticoliDTO griglia = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_PRODUCTS_LIST)); List productList = griglia.getGrigliaAcquistiChild(); TipiDocDTO docType = DataCache.retrieveItem(getIntent().getStringExtra(DATA_KEY_TIPO_DOC)); @@ -145,7 +145,6 @@ public class DocInterniEditFormActivity extends BaseActivity implements DocInter getSupportActionBar().setDisplayHomeAsUpEnabled(true); FabMenuCustomAnimations.changeIconOnFocus(binding.closeActivityFab, R.drawable.ic_menu_24dp, R.drawable.ic_close_24dp); binding.bottomSheetMtbColrEdit.setListener(this); - binding.bottomSheetMtbColrEdit.init(binding.bottomSheetMtbColrEdit, binding.bottomSheetMtbColrEditBackground); } private void initViewModel() { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormModule.java index fda802b1..a6d16d39 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormModule.java @@ -2,10 +2,8 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.edit_form; import dagger.Module; import dagger.Provides; -import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrRepository; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSource; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; -import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniComponent; -import it.integry.integrywmsnative.gest.contab_doc_interni.DocInterniViewModel; import it.integry.integrywmsnative.gest.contab_doc_interni.rest.DocInterniRESTConsumer; @Module(subcomponents = DocInterniEditFormComponent.class) @@ -13,7 +11,7 @@ public class DocInterniEditFormModule { @Provides - DocInterniEditFormViewModel docInterniEditFormViewModel(DocInterniRESTConsumer docInterniRESTConsumer, MtbColrRepository mtbColrRepository, MtbColtRepository mtbColtRepository) { + DocInterniEditFormViewModel docInterniEditFormViewModel(DocInterniRESTConsumer docInterniRESTConsumer, MtbColrDataSource mtbColrRepository, MtbColtRepository mtbColtRepository) { return new DocInterniEditFormViewModel(docInterniRESTConsumer,mtbColrRepository, mtbColtRepository); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/edit_form/DocInterniEditFormViewModel.java index 17658dae..ca0576a9 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 @@ -17,7 +17,7 @@ import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColr; import it.integry.integrywmsnative.core.data_store.db.entity.SqlMtbColt; -import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrRepository; +import it.integry.integrywmsnative.core.data_store.db.repository.MtbColrDataSource; import it.integry.integrywmsnative.core.data_store.db.repository.MtbColtRepository; import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; import it.integry.integrywmsnative.core.settings.SettingsManager; @@ -33,7 +33,7 @@ import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQua public class DocInterniEditFormViewModel { @Inject - MtbColrRepository mtbColrRepository; + MtbColrDataSource mtbColrRepository; @Inject MtbColtRepository mtbColtRepository; private final DocInterniRESTConsumer docInterniRESTConsumer; @@ -46,7 +46,7 @@ public class DocInterniEditFormViewModel { public MutableLiveData> docRows = new MutableLiveData<>(); @Inject - public DocInterniEditFormViewModel(DocInterniRESTConsumer docInterniRESTConsumer, MtbColrRepository mtbColrRepository, MtbColtRepository mtbColtRepository) { + public DocInterniEditFormViewModel(DocInterniRESTConsumer docInterniRESTConsumer, MtbColrDataSource mtbColrRepository, MtbColtRepository mtbColtRepository) { this.docInterniRESTConsumer = docInterniRESTConsumer; this.mtbColrRepository = mtbColrRepository; this.mtbColtRepository = mtbColtRepository; @@ -77,7 +77,7 @@ public class DocInterniEditFormViewModel { public void fetchDocumentRows() { this.sendOnLoadingStarted(); - mtbColrRepository.getDocumentRows(this.document.getValue(), rows -> { + mtbColrRepository.selectAllByDocumentID(this.document.getValue().getId(), rows -> { this.docRows.postValue(rows); this.listener.onRowsChanged(rows); this.sendOnLoadingEnded(); @@ -298,7 +298,7 @@ public class DocInterniEditFormViewModel { } public GrigliaAcquistiChildDTO getArticoloByCodMart(String codMart) { - return Stream.of(productsList).filter(prod -> prod.codMart.equalsIgnoreCase(codMart)).findFirstOrElse(null); + return Stream.of(productsList).filter(prod -> prod.getCodMart().equalsIgnoreCase(codMart)).findFirstOrElse(null); } public DocInterniEditFormViewModel setTipoDoc(TipiDocDTO docType) { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumer.java index 333fd525..ae79ad8c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumer.java @@ -6,11 +6,12 @@ import javax.inject.Singleton; import it.integry.integrywmsnative.core.expansion.RunnableArgs; import it.integry.integrywmsnative.core.rest.RESTBuilder; +import it.integry.integrywmsnative.core.rest.consumers.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.GrigliaAcquistiDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; 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 retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; @@ -18,6 +19,12 @@ import retrofit2.Response; @Singleton public class DocInterniRESTConsumer extends _BaseRESTConsumer { + private final MagazzinoRESTConsumer magazzinoRESTConsumer; + + public DocInterniRESTConsumer(MagazzinoRESTConsumer magazzinoRESTConsumer) { + this.magazzinoRESTConsumer = magazzinoRESTConsumer; + } + public void getDocInterniSetup(RunnableArgs onComplete, RunnableArgs onFailed) { DocInterniRESTConsumerService service = RESTBuilder.getService(DocInterniRESTConsumerService.class); service.getSetupDocInterni().enqueue(new Callback<>() { @@ -33,34 +40,23 @@ public class DocInterniRESTConsumer extends _BaseRESTConsumer { }); } - public void fetchProducts(String codDtip, String codMgrp, RunnableArgs onComplete, RunnableArgs onFailed) { + public void fetchProducts(String codDtip, String codMgrp, RunnableArgs onComplete, RunnableArgs onFailed) { DocInterniRESTConsumerService service = RESTBuilder.getService(DocInterniRESTConsumerService.class); - service.fetchProducts(codDtip,codMgrp,"L").enqueue(new Callback<>() { + service.retrieveProducts(codDtip, codMgrp, "L").enqueue(new Callback<>() { @Override - public void onResponse(Call> call, Response> response) { + public void onResponse(Call> call, Response> response) { analyzeAnswer(response, "fetchProducts", onComplete, onFailed); } @Override - public void onFailure(Call> call, Throwable t) { + public void onFailure(Call> call, Throwable t) { onFailed.run(new Exception(t)); } }); } - public void saveDoc(SaveDTO saveDTO, RunnableArgs onComplete, RunnableArgs onFailed){ - DocInterniRESTConsumerService service = RESTBuilder.getService(DocInterniRESTConsumerService.class); - service.save(saveDTO).enqueue(new Callback<>() { - @Override - public void onResponse(Call> call, Response> response) { - analyzeAnswer(response, "saveDoc", onComplete, onFailed); - } - - @Override - public void onFailure(Call> call, Throwable t) { - onFailed.run(new Exception(t)); - } - }); + public void saveDoc(SaveDTO saveDTO, RunnableArgs onComplete, RunnableArgs onFailed) { + magazzinoRESTConsumer.saveTerminalinoWMS(saveDTO, onComplete, onFailed); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java index 0f20c77f..6f307241 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/contab_doc_interni/rest/DocInterniRESTConsumerService.java @@ -1,15 +1,10 @@ package it.integry.integrywmsnative.gest.contab_doc_interni.rest; -import com.google.gson.JsonObject; - import it.integry.integrywmsnative.core.rest.model.ServiceRESTResponse; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaAcquistiDTO; -import it.integry.integrywmsnative.gest.contab_doc_interni.dto.SaveDTO; import it.integry.integrywmsnative.gest.contab_doc_interni.dto.DocInterniSetupDTO; +import it.integry.integrywmsnative.gest.contab_doc_interni.dto.GrigliaArticoliDTO; import retrofit2.Call; -import retrofit2.http.Body; import retrofit2.http.GET; -import retrofit2.http.POST; import retrofit2.http.Query; @@ -18,9 +13,11 @@ public interface DocInterniRESTConsumerService { @GET("getDocInterniSetup") Call> getSetupDocInterni(); - @POST("SM2SaveTerminalinoWMS") - Call> save(@Body SaveDTO saveDTO); @GET("getElencoArticoli") - Call> fetchProducts(@Query("codDtip") String codDtip, @Query("codMgrp") String codMgrp, @Query("gestione") String gestione); + Call> retrieveProducts( + @Query("codDtip") String codDtip, + @Query("codMgrp") String codMgrp, + @Query("gestione") String gestione); + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariComponent.java new file mode 100644 index 00000000..deed598a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.inventario; + +import dagger.Subcomponent; + +@Subcomponent +public interface ElencoInventariComponent { + + @Subcomponent.Factory + interface Factory { + + ElencoInventariComponent create(); + } + + void inject(ElencoInventariFragment inventarioFragment); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariFragment.java new file mode 100644 index 00000000..c73848f1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariFragment.java @@ -0,0 +1,186 @@ +package it.integry.integrywmsnative.gest.inventario; + +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.appcompat.widget.AppCompatTextView; + +import com.ravikoradiya.liveadapter.LiveAdapter; +import com.ravikoradiya.liveadapter.Type; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.BR; +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; +import it.integry.integrywmsnative.core.expansion.BaseFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.interfaces.ILifecycleFragment; +import it.integry.integrywmsnative.core.interfaces.ITitledFragment; +import it.integry.integrywmsnative.core.rest.model.inventario.InventarioArtDTO; +import it.integry.integrywmsnative.databinding.FragmentElencoInventarioBinding; +import it.integry.integrywmsnative.databinding.FragmentElencoInventarioListSingleItemBinding; +import it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_actions.BottomSheetInventarioActionsView; +import it.integry.integrywmsnative.gest.inventario.dialogs.ask_info_inventario.DialogAskInfoInventarioView; +import it.integry.integrywmsnative.gest.inventario.picking.PickingInventarioActivity; +import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView; + +public class ElencoInventariFragment extends BaseFragment implements ITitledFragment, ILifecycleFragment, ElencoInventariViewModel.Listener { + + private FragmentElencoInventarioBinding mBinding; + + @Inject + ElencoInventariViewModel mViewModel; + + private int barcodeScannerIstanceID = -1; + + public ElencoInventariFragment() { + // Required empty public constructor + } + + + public static ElencoInventariFragment newInstance() { + return new ElencoInventariFragment(); + } + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + + MainApplication.appComponent + .inventarioComponent() + .create() + .inject(this); + + mViewModel.setListener(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + mBinding = FragmentElencoInventarioBinding.inflate(inflater, container, false); + + mBinding.setLifecycleOwner(this); + mBinding.setViewmodel(mViewModel); + + mViewModel.loadData(); + this.initRecyclerView(); + + return mBinding.getRoot(); + } + + private void initRecyclerView() { + mViewModel.getInventarioList().observe(getViewLifecycleOwner(), data -> { + mBinding.emptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE); + }); + + var itemType = new Type(R.layout.fragment_elenco_inventario_list_single_item, BR.item); + itemType.onClick(x -> { + + var item = x.getBinding().getItem(); + + if (!item.isSyncronized()) { + var bottomSheetActions = new BottomSheetInventarioActionsView(item) + .setListener(new BottomSheetInventarioActionsView.Listener() { + @Override + public void onItemEdit() { + mViewModel.loadInventarioData(item.getIdInventario(), listArts -> { + startPicking(item, listArts); + }); + } + + @Override + public void onItemDelete() { + deleteInventarioRequest(item); + } + }); + + + bottomSheetActions.show(requireActivity().getSupportFragmentManager(), "tag"); + } + + return null; + }); + + new LiveAdapter(mViewModel.getInventarioList(), this) + .map(InventarioRoomDTO.class, itemType) + .into(this.mBinding.inventarioList); + + +// binding.swiperefresh.setRefreshing(true); +// binding.swiperefresh.setOnRefreshListener(() -> { +// viewModel.loadData(); +// }); + } + + + @Override + public void onPreDestroy(Runnable onComplete) { + mViewModel.destroyData(); + onComplete.run(); + } + + @Override + public void onCreateActionBar(AppCompatTextView titleText, Context context) { + titleText.setText(context.getText(R.string.inventario_fragment_title).toString()); + } + + @Override + public void onInventarioInfoRequest(RunnableArgss onComplete) { + DialogAskInfoInventarioView.newInstance(onComplete, null) + .show(requireActivity().getSupportFragmentManager(), "tag"); + } + + @Override + public void onInventarioLoaded(InventarioRoomDTO inventarioRoomDTO, List listaArts) { + startPicking(inventarioRoomDTO, listaArts); + } + + + private void startPicking(InventarioRoomDTO inventarioRoomDTO, List listArts) { + PickingInventarioActivity.startActivity(requireContext(), inventarioRoomDTO, listArts); + } + + @Override + public void onCreateInventarioRequest(long inventoryId, String zone) { + DialogYesNoView + .newInstance(null, "Vuoi procedere con la creazione di un nuovo inventario con codice " + inventoryId + "?", + dialogResponse -> { + switch (dialogResponse) { + case YES: + this.mViewModel.createNewInventario(inventoryId, zone, this::startPicking); + break; + + case NO: + case ABORT: + mViewModel.openInventario(); + break; + } + }) + .show(requireActivity().getSupportFragmentManager(), "tag"); + } + + public void deleteInventarioRequest(InventarioRoomDTO inventarioRoomDTO) { + DialogYesNoView + .newInstance(null, "Vuoi cancellare l'inventario?", + dialogResponse -> { + switch (dialogResponse) { + case YES: + this.mViewModel.deleteInventario(inventarioRoomDTO); + break; + + case NO: + case ABORT: + break; + } + }) + .show(requireActivity().getSupportFragmentManager(), "tag"); + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariModule.java new file mode 100644 index 00000000..04752e0c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariModule.java @@ -0,0 +1,29 @@ +package it.integry.integrywmsnative.gest.inventario; + +import javax.inject.Singleton; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRepository; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.rest.consumers.InventarioRESTConsumer; + +@Module(subcomponents = ElencoInventariComponent.class) +public class ElencoInventariModule { + + @Provides + @Singleton + InventarioRESTConsumer providesInventarioRESTConsumer() { + return new InventarioRESTConsumer(); + } + + @Provides + @Singleton + ElencoInventariViewModel providesInventarioViewModel( + InventarioRepository inventarioRepository, + InventarioRESTConsumer inventarioRESTConsumer, + SettingsManager settingsManager) { + return new ElencoInventariViewModel(inventarioRepository, inventarioRESTConsumer, settingsManager); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java new file mode 100644 index 00000000..70c36d60 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/ElencoInventariViewModel.java @@ -0,0 +1,165 @@ +package it.integry.integrywmsnative.gest.inventario; + +import androidx.lifecycle.LiveData; + +import java.util.List; +import java.util.Objects; + +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; +import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRepository; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.rest.consumers.InventarioRESTConsumer; +import it.integry.integrywmsnative.core.rest.model.inventario.InventarioArtDTO; +import it.integry.integrywmsnative.core.settings.SettingsManager; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityString; + +public class ElencoInventariViewModel { + + private final InventarioRepository inventarioRepository; + private final InventarioRESTConsumer inventarioRESTConsumer; + private final SettingsManager settingsManager; + private Listener listener; + + private LiveData> inventarioList; + + private final String codMdep; + + public ElencoInventariViewModel( + InventarioRepository inventarioRepository, + InventarioRESTConsumer inventarioRESTConsumer, + SettingsManager settingsManager) { + this.inventarioRepository = inventarioRepository; + this.inventarioRESTConsumer = inventarioRESTConsumer; + this.settingsManager = settingsManager; + + + codMdep = settingsManager.getSettings().getUserSession().getDepo().getCodMdep(); + } + + public void loadData() { + inventarioList = inventarioRepository.retrieve(); + } + + public void destroyData() { + inventarioList = null; + } + + public LiveData> getInventarioList() { + return inventarioList; + } + + public void openInventario() { + sendOnInventarioInfoRequest((inventoryId, zone) -> { + this.sendOnLoadingStarted(); + + inventarioRESTConsumer.loadInventario(inventoryId, loadedInventario -> { + + if (loadedInventario == null || loadedInventario.getMtbInvent() == null) { + this.sendOnLoadingEnded(); + this.sendCreateInventarioRequest(inventoryId, zone); + } else { + + var matchedInventory = getInventarioList().getValue() + .stream() + .filter(x -> Objects.equals(x.getIdInventario(), inventoryId) && UtilityString.equalsIgnoreCase(x.getZona(), zone) && + !x.isSyncronized()) + .findFirst() + .orElse(null); + + if (matchedInventory == null) + this.createNewInventario(inventoryId, zone, (inventarioRoom, listaArts) -> { + this.sendOnLoadingEnded(); + this.sendOnInventarioLoaded(inventarioRoom, listaArts); + }); + + else + loadInventarioData(inventoryId, listaArts -> { + this.sendOnLoadingEnded(); + this.sendOnInventarioLoaded(matchedInventory, listaArts); + }); + + } + }, this::sendOnError); + }); + } + + + public void loadInventarioData(long inventoryId, RunnableArgs> onComplete) { + this.sendOnLoadingStarted(); + inventarioRESTConsumer.loadInventarioArts(inventoryId, inventarioArts -> { + this.sendOnLoadingEnded(); + + onComplete.run(inventarioArts.getArts()); + }, this::sendOnError); + } + + + public void createNewInventario(long inventoryId, String zone, RunnableArgss> onComplete) { + this.sendOnLoadingStarted(); + + var codMdep = settingsManager.getSettings().getUserSession().getDepo().getCodMdep(); + + var createdInventario = new InventarioRoomDTO(); + createdInventario.setIdInventario(inventoryId); + createdInventario.setZona(zone); + createdInventario.setCodMdep(codMdep); + createdInventario.setInseritoDa(settingsManager.getSettings().getUser().getFullname()); + createdInventario.setDataInventario(UtilityDate.getNow()); + + loadInventarioData(inventoryId, inventarioArts -> { + inventarioRepository.insert(createdInventario, () -> { + this.sendOnLoadingEnded(); + onComplete.run(createdInventario, inventarioArts); + }, this::sendOnError); + }); + } + + public void deleteInventario(InventarioRoomDTO inventarioRoomDTO) { + inventarioRepository.delete(inventarioRoomDTO, null, this::sendOnError); + } + + + public void setListener(Listener listener) { + this.listener = listener; + } + + private void sendOnInventarioInfoRequest(RunnableArgss onComplete) { + if (listener != null) listener.onInventarioInfoRequest(onComplete); + } + + private void sendOnInventarioLoaded(InventarioRoomDTO inventarioRoomDTO, List listaArts) { + if (listener != null) listener.onInventarioLoaded(inventarioRoomDTO, listaArts); + } + + private void sendCreateInventarioRequest(long inventoryId, String zone) { + if (this.listener != null) this.listener.onCreateInventarioRequest(inventoryId, zone); + } + + private void sendOnLoadingStarted() { + if (this.listener != null) listener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.listener != null) listener.onLoadingEnded(); + } + + private void sendOnError(Exception ex) { + if (this.listener != null) listener.onError(ex); + } + + public interface Listener extends ILoadingListener { + + void onInventarioInfoRequest(RunnableArgss onComplete); + + void onInventarioLoaded(InventarioRoomDTO inventarioRoomDTO, List listaArts); + + void onCreateInventarioRequest(long inventoryId, String zone); + + void onError(Exception ex); + + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsComponent.java new file mode 100644 index 00000000..896332e1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_actions; + +import dagger.Subcomponent; + +@Subcomponent +public interface BottomSheetInventarioActionsComponent { + + @Subcomponent.Factory + interface Factory { + BottomSheetInventarioActionsComponent create(); + } + + void inject(BottomSheetInventarioActionsView bottomSheetItemEditView); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsModule.java new file mode 100644 index 00000000..87ed55bb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_actions; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = BottomSheetInventarioActionsComponent.class) +public class BottomSheetInventarioActionsModule { + + @Provides + BottomSheetInventarioActionsViewModel providesBottomSheetItemEditViewModel() { + return new BottomSheetInventarioActionsViewModel(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsView.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsView.java new file mode 100644 index 00000000..96283ccc --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsView.java @@ -0,0 +1,111 @@ +package it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_actions; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.ObservableField; + +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; +import it.integry.integrywmsnative.databinding.BottomSheetInventarioActionsViewBinding; + +public class BottomSheetInventarioActionsView extends BottomSheetDialogFragment { + + @Inject + BottomSheetInventarioActionsViewModel mViewModel; + + public ObservableField enabledEditButton = new ObservableField<>(true); + public ObservableField enabledDeleteButton = new ObservableField<>(true); + + private BottomSheetInventarioActionsViewBinding mBinding; + private Listener mListener; + + private final InventarioRoomDTO inputItem; + + public BottomSheetInventarioActionsView(InventarioRoomDTO inputItem) { + this.inputItem = inputItem; + } + + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + MainApplication.appComponent + .bottomSheetInventarioActionsComponent() + .create() + .inject(this); + + mViewModel.init(inputItem); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBinding = BottomSheetInventarioActionsViewBinding.inflate(inflater, container, true); + + mBinding.setLifecycleOwner(this); + mBinding.setViewModel(mViewModel); + mBinding.setView(this); + + mBinding.executePendingBindings(); + + return mBinding.getRoot(); + } + + + + + public BottomSheetInventarioActionsView enableEditButton() { + this.enabledEditButton.set(true); + return this; + } + + public BottomSheetInventarioActionsView disableEditButton() { + this.enabledEditButton.set(false); + return this; + } + + public BottomSheetInventarioActionsView enableDeleteButton() { + this.enabledDeleteButton.set(true); + return this; + } + + public BottomSheetInventarioActionsView disableDeleteButton() { + this.enabledDeleteButton.set(false); + return this; + } + + + + public void editItem() { + if(this.mListener != null) this.mListener.onItemEdit(); + this.dismiss(); + } + + public void deleteItem() { + if(this.mListener != null) this.mListener.onItemDelete(); + this.dismiss(); + } + + + + public BottomSheetInventarioActionsView setListener(Listener listener) { + this.mListener = listener; + return this; + } + + public interface Listener { + void onItemEdit(); + + void onItemDelete(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsViewModel.java new file mode 100644 index 00000000..c1d14ab1 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_actions/BottomSheetInventarioActionsViewModel.java @@ -0,0 +1,18 @@ +package it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_actions; + +import androidx.lifecycle.MutableLiveData; + +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; + +public class BottomSheetInventarioActionsViewModel { + + private final MutableLiveData mCurrentItem = new MutableLiveData<>(); + + public void init(InventarioRoomDTO item) { + this.mCurrentItem.postValue(item); + } + + public MutableLiveData getCurrentItem() { + return mCurrentItem; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsComponent.java new file mode 100644 index 00000000..f4e33f9c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_row_actions; + +import dagger.Subcomponent; + +@Subcomponent +public interface BottomSheetInventarioRowActionsComponent { + + @Subcomponent.Factory + interface Factory { + BottomSheetInventarioRowActionsComponent create(); + } + + void inject(BottomSheetInventarioRowActionsView bottomSheetItemEditView); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsModule.java new file mode 100644 index 00000000..dc1e37e6 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_row_actions; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = BottomSheetInventarioRowActionsComponent.class) +public class BottomSheetInventarioRowActionsModule { + + @Provides + BottomSheetInventarioRowActionsViewModel providesBottomSheetItemEditViewModel() { + return new BottomSheetInventarioRowActionsViewModel(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsView.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsView.java new file mode 100644 index 00000000..f6b02cb7 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsView.java @@ -0,0 +1,111 @@ +package it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_row_actions; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.ObservableField; + +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; +import it.integry.integrywmsnative.databinding.BottomSheetInventarioRowActionsViewBinding; + +public class BottomSheetInventarioRowActionsView extends BottomSheetDialogFragment { + + @Inject + BottomSheetInventarioRowActionsViewModel mViewModel; + + public ObservableField enabledEditButton = new ObservableField<>(true); + public ObservableField enabledDeleteButton = new ObservableField<>(true); + + private BottomSheetInventarioRowActionsViewBinding mBinding; + private Listener mListener; + + private final InventarioRowRoomDTO inputItem; + + public BottomSheetInventarioRowActionsView(InventarioRowRoomDTO inputItem) { + this.inputItem = inputItem; + } + + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + MainApplication.appComponent + .bottomSheetInventarioRowActionsComponent() + .create() + .inject(this); + + mViewModel.init(inputItem); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + mBinding = BottomSheetInventarioRowActionsViewBinding.inflate(inflater, container, true); + + mBinding.setLifecycleOwner(this); + mBinding.setViewModel(mViewModel); + mBinding.setView(this); + + mBinding.executePendingBindings(); + + return mBinding.getRoot(); + } + + + + + public BottomSheetInventarioRowActionsView enableEditButton() { + this.enabledEditButton.set(true); + return this; + } + + public BottomSheetInventarioRowActionsView disableEditButton() { + this.enabledEditButton.set(false); + return this; + } + + public BottomSheetInventarioRowActionsView enableDeleteButton() { + this.enabledDeleteButton.set(true); + return this; + } + + public BottomSheetInventarioRowActionsView disableDeleteButton() { + this.enabledDeleteButton.set(false); + return this; + } + + + + public void editItem() { + if(this.mListener != null) this.mListener.onItemEdit(); + this.dismiss(); + } + + public void deleteItem() { + if(this.mListener != null) this.mListener.onItemDelete(); + this.dismiss(); + } + + + + public BottomSheetInventarioRowActionsView setListener(Listener listener) { + this.mListener = listener; + return this; + } + + public interface Listener { + void onItemEdit(); + + void onItemDelete(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsViewModel.java new file mode 100644 index 00000000..a078a3f0 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/bottom_sheet__inventario_row_actions/BottomSheetInventarioRowActionsViewModel.java @@ -0,0 +1,18 @@ +package it.integry.integrywmsnative.gest.inventario.bottom_sheet__inventario_row_actions; + +import androidx.lifecycle.MutableLiveData; + +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; + +public class BottomSheetInventarioRowActionsViewModel { + + private final MutableLiveData mCurrentItem = new MutableLiveData<>(); + + public void init(InventarioRowRoomDTO item) { + this.mCurrentItem.postValue(item); + } + + public MutableLiveData getCurrentItem() { + return mCurrentItem; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioComponent.java new file mode 100644 index 00000000..61c6dc6b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.inventario.dialogs.ask_info_inventario; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogAskInfoInventarioComponent { + + @Subcomponent.Factory + interface Factory { + DialogAskInfoInventarioComponent create(); + } + + void inject(DialogAskInfoInventarioView dialogAskInfoInventarioView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioModule.java new file mode 100644 index 00000000..9f8b6a07 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.inventario.dialogs.ask_info_inventario; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = DialogAskInfoInventarioComponent.class) +public class DialogAskInfoInventarioModule { + + @Provides + DialogAskInfoInventarioViewModel providesDialogAskInfoInventarioViewModel() { + return new DialogAskInfoInventarioViewModel(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioView.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioView.java new file mode 100644 index 00000000..a53929bb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioView.java @@ -0,0 +1,87 @@ +package it.integry.integrywmsnative.gest.inventario.dialogs.ask_info_inventario; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.ObservableField; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import org.apache.commons.lang3.StringUtils; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.utility.UtilityString; +import it.integry.integrywmsnative.databinding.DialogAskInfoInventarioBinding; + +public class DialogAskInfoInventarioView extends BaseDialogFragment { + + @Inject + DialogAskInfoInventarioViewModel mViewModel; + + private final RunnableArgss onConfirmed; + private final Runnable onAbort; + + public ObservableField inventoryId = new ObservableField<>(); + public ObservableField zone = new ObservableField<>(); + + private DialogAskInfoInventarioBinding mBindings; + private Context mContext; + + //Pass here all external parameters + public static DialogAskInfoInventarioView newInstance(RunnableArgss onConfirmed, Runnable onAbort) { + return new DialogAskInfoInventarioView(onConfirmed, onAbort); + } + + private DialogAskInfoInventarioView(RunnableArgss onConfirmed, Runnable onAbort) { + super(); + + this.onConfirmed = onConfirmed; + this.onAbort = onAbort; + } + + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + this.mContext = requireContext(); + + mBindings = DialogAskInfoInventarioBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); + mBindings.setView(this); + + MainApplication.appComponent + .dialogAskInfoInventarioComponent() + .create() + .inject(this); + + var cancelable = true; + + var alertDialog = new MaterialAlertDialogBuilder(this.mContext) + .setView(mBindings.getRoot()) + .setCancelable(cancelable) + .setPositiveButton(R.string.ok, (dialog, which) -> { + var zone = UtilityString.empty2null(this.zone.get()); + if(zone != null) zone = StringUtils.capitalize(zone); + + + if (this.onConfirmed != null) + this.onConfirmed.run(this.inventoryId.get(), zone); + }) + .setNegativeButton(R.string.abort, (dialog, which) -> { + if (this.onAbort != null) this.onAbort.run(); + }) + .create(); + + alertDialog.setCanceledOnTouchOutside(cancelable); + return alertDialog; + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioViewModel.java new file mode 100644 index 00000000..7c079924 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/dialogs/ask_info_inventario/DialogAskInfoInventarioViewModel.java @@ -0,0 +1,5 @@ +package it.integry.integrywmsnative.gest.inventario.dialogs.ask_info_inventario; + +public class DialogAskInfoInventarioViewModel { + +} \ No newline at end of file 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 new file mode 100644 index 00000000..7fc13d3a --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioActivity.java @@ -0,0 +1,226 @@ +package it.integry.integrywmsnative.gest.inventario.picking; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; + +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; + +import com.ravikoradiya.liveadapter.LiveAdapter; +import com.ravikoradiya.liveadapter.Type; + +import java.math.BigDecimal; +import java.util.Date; +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.BR; +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.R; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; +import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; +import it.integry.integrywmsnative.core.data_cache.DataCache; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; +import it.integry.integrywmsnative.core.expansion.BaseActivity; +import it.integry.integrywmsnative.core.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.rest.model.inventario.InventarioArtDTO; +import it.integry.integrywmsnative.core.utility.UtilityExceptions; +import it.integry.integrywmsnative.databinding.ActivityPickingInventarioBinding; +import it.integry.integrywmsnative.databinding.ActivityPickingInventarioListItemBinding; +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; +import it.integry.integrywmsnative.view.dialogs.DialogConsts; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; +import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; +import it.integry.integrywmsnative.view.dialogs.yes_no.DialogYesNoView; + +public class PickingInventarioActivity extends BaseActivity implements PickingInventarioViewModel.Listener { + + @Inject + PickingInventarioViewModel mViewModel; + + @Inject + DialogInputQuantityV2View mDialogInputQuantityV2View; + + private ActivityPickingInventarioBinding mBindings; + + private static final String KEY_INVENTARIO = "key_inventario"; + private static final String KEY_INVENTARIO_ARTS = "key_inventario_arts"; + private int barcodeScannerIstanceID; + + //Pass here all external parameters + public static void startActivity(Context context, InventarioRoomDTO inventarioRoomDTO, List inventarioArts) { + Intent myIntent = new Intent(context, PickingInventarioActivity.class); + + String keyExtraItem = DataCache.addItem(inventarioRoomDTO); + myIntent.putExtra(KEY_INVENTARIO, keyExtraItem); + + String keyExtraArtsItem = DataCache.addItem(inventarioArts); + myIntent.putExtra(KEY_INVENTARIO_ARTS, keyExtraArtsItem); + + context.startActivity(myIntent); + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.picking_inventario_menu, menu); + return true; + } + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mBindings = DataBindingUtil.setContentView(this, R.layout.activity_picking_inventario); + mBindings.setLifecycleOwner(this); + mBindings.setView(this); + + MainApplication.appComponent + .pickingInventarioComponent() + .create() + .inject(this); + + mViewModel.setListener(this); + mBindings.setViewmodel(mViewModel); + + initToolbar(); + initBarcodeReader(); + } + + @Override + protected void onStart() { + super.onStart(); + + mViewModel.init( + DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO)), + DataCache.retrieveItem(getIntent().getStringExtra(KEY_INVENTARIO_ARTS))); + + initRecyclerView(); + } + + @Override + public boolean onSupportNavigateUp() { + onBackPressed(); + return true; + } + + private void initToolbar() { + setSupportActionBar(mBindings.toolbar); + + mBindings.toolbar.setOnMenuItemClickListener(menuItem -> { + if (menuItem.getItemId() == R.id.export) { + requestExportConfirm(); + return true; + } + + return false; + }); + } + + private void initRecyclerView() { + mViewModel.getCurrentInventarioRows().observe(this, data -> { +// binding.reportEmptyView.setVisibility(data == null || data.isEmpty() ? View.VISIBLE : View.GONE); + }); + + var itemType = new Type(R.layout.activity_picking_inventario__list_item, BR.item); + itemType.areItemSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId())); + itemType.areContentsTheSame((oldItem, newItem) -> Objects.equals(oldItem.getId(), newItem.getId())); + itemType.onClick(x -> { + new BottomSheetInventarioRowActionsView(x.getBinding().getItem()) + .setListener(new BottomSheetInventarioRowActionsView.Listener() { + @Override + public void onItemEdit() { + updateItem(x.getBinding().getItem()); + } + + @Override + public void onItemDelete() { + deleteItemRequest(x.getBinding().getItem()); + } + }) + .show(getSupportFragmentManager(), "tag"); + + return null; + }); + + new LiveAdapter(mViewModel.getCurrentInventarioRows(), this) + .map(InventarioRowRoomDTO.class, itemType) + .into(this.mBindings.pickingInventarioMainList); + } + + private void initBarcodeReader() { + barcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessful(onScanSuccessful) + .setOnScanFailed(ex -> UtilityExceptions.defaultException(this, ex, false))); + } + + private final RunnableArgs onScanSuccessful = data -> { + this.mViewModel.processBarcodeDTO(data, () -> { + }); + }; + + + private void updateItem(InventarioRowRoomDTO itemToUpdate) { + mViewModel.updateRow(itemToUpdate); + } + + + private void deleteItemRequest(InventarioRowRoomDTO itemToDelete) { + DialogYesNoView.newInstance("Eliminazione", "Vuoi davvero eliminare l'articolo?", result -> { + if (result == DialogConsts.Results.YES) { + mViewModel.deleteRow(itemToDelete); + } + }).show(getSupportFragmentManager(), "tag"); + } + + public void requestExportConfirm() { + DialogYesNoView.newInstance("Esporta", "Vuoi confermare e chiudere l'inventario?", result -> { + mViewModel.exportAll(this::onBackPressed); + }) + .show(getSupportFragmentManager(), "tag"); + } + + @Override + public void onItemDispatched(PickingObjectDTO pickingObjectDTO, MtbAart mtbAart, BigDecimal initialNumCnf, BigDecimal initialQtaCnf, BigDecimal initialQtaTot, BigDecimal totalQtaAvailable, BigDecimal totalNumCnfAvailable, BigDecimal qtaCnfAvailable, BigDecimal totalQtaToBeTaken, BigDecimal totalNumCnfToBeTaken, BigDecimal qtaCnfToBeTaken, String partitaMag, Date dataScad, boolean canOverflowOrderQuantity, boolean canPartitaMagBeChanged, boolean canLUBeClosed, RunnableArgss onComplete) { + DialogInputQuantityV2DTO dialogInputQuantityV2DTO = new DialogInputQuantityV2DTO() + .setMtbAart(mtbAart) + .setInitialNumCnf(initialNumCnf) + .setInitialQtaCnf(initialQtaCnf) + .setInitialQtaTot(initialQtaTot) + .setTotalQtaAvailable(totalQtaAvailable) + .setTotalNumCnfAvailable(totalNumCnfAvailable) + .setQtaCnfAvailable(qtaCnfAvailable) + .setTotalQtaToBeTaken(totalQtaToBeTaken) + .setTotalNumCnfToBeTaken(totalNumCnfToBeTaken) + .setQtaCnfToBeTaken(qtaCnfToBeTaken) + .setPartitaMag(partitaMag) + .setDataScad(dataScad) + .setCanOverflowOrderQuantity(canOverflowOrderQuantity) + .setCanPartitaMagBeChanged(canPartitaMagBeChanged) + .setCanLUBeClosed(canLUBeClosed) + .setNumCnfEditable(false); + + if (!mDialogInputQuantityV2View.isVisible()) + mDialogInputQuantityV2View.setDialogInputQuantityV2DTO(dialogInputQuantityV2DTO) + .setOnComplete((resultDTO, shouldCloseLU) -> { + PickedQuantityDTO pickedQuantityDTO = new PickedQuantityDTO() + .setNumCnf(resultDTO.getNumCnf()) + .setQtaCnf(resultDTO.getQtaCnf()) + .setQtaTot(resultDTO.getQtaTot()) + .setPartitaMag(resultDTO.getPartitaMag()) + .setDataScad(resultDTO.getDataScad()); + + onComplete.run(pickedQuantityDTO, shouldCloseLU); + }) + .show(getSupportFragmentManager(), "tag"); + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioComponent.java new file mode 100644 index 00000000..b76c36e3 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.inventario.picking; + +import dagger.Subcomponent; + +@Subcomponent +public interface PickingInventarioComponent { + + @Subcomponent.Factory + interface Factory { + PickingInventarioComponent create(); + } + + void inject(PickingInventarioActivity PickingInventarioActivity); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioListAdapter.java new file mode 100644 index 00000000..4475427c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioListAdapter.java @@ -0,0 +1,85 @@ +package it.integry.integrywmsnative.gest.inventario.picking; + +import android.view.LayoutInflater; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.databinding.ObservableArrayList; +import androidx.recyclerview.widget.RecyclerView; + +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; +import it.integry.integrywmsnative.core.expansion.view.ExtendedRecyclerView; +import it.integry.integrywmsnative.core.model.MtbColr; +import it.integry.integrywmsnative.databinding.ActivityPickingInventarioListItemBinding; + +public class PickingInventarioListAdapter extends ExtendedRecyclerView { + + private PickingInventarioListAdapter.OnItemClickListener mOnItemClickListener; + + public PickingInventarioListAdapter(ObservableArrayList myDataset) { + super(myDataset); + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + protected ActivityPickingInventarioListItemBinding mViewDataBinding; + + + public ViewHolder(ActivityPickingInventarioListItemBinding v) { + super(v.getRoot()); + mViewDataBinding = v; + } + + public void bind(InventarioRowRoomDTO inventarioRowRoomDTO) { + mViewDataBinding.setItem(inventarioRowRoomDTO); + mViewDataBinding.executePendingBindings(); + } + } + + + @NonNull + @Override + public PickingInventarioListAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + // create a new view + ActivityPickingInventarioListItemBinding viewDataBinding = + ActivityPickingInventarioListItemBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); + + return new ViewHolder(viewDataBinding); + } + + @Override + public void onBindViewHolder(@NonNull PickingInventarioListAdapter.ViewHolder holder, int position) { + InventarioRowRoomDTO mtbColr = mDataset.get(position); + holder.bind(mtbColr); +// +// //Setting qty with unt_mis +// if(!SettingsManager.iDB().isFlagForceAllToColli() && (mtbColr.getMtbAart() == null || mtbColr.getMtbAart().isFlagQtaCnfFissaBoolean())){ +// String text = UtilityNumber.decimalToString(mtbColr.getQtaCol()); +// +// if(mtbColr.getMtbAart() != null) { +// text += !UtilityString.isNullOrEmpty(mtbColr.getMtbAart().getUntMis()) ? "\n" + mtbColr.getMtbAart().getUntMis() : ""; +// } +// +// holder.mViewDataBinding.qtaTextview.setText(text); +// } else { +// holder.mViewDataBinding.qtaTextview.setText(UtilityNumber.decimalToString(mtbColr.getNumCnf()) + "\n" + UtilityResources.getString(R.string.unt_mis_col)); +// } +// +// holder.mViewDataBinding.getRoot().setOnClickListener(x -> { +// if(mOnItemClickListener != null) { +// mOnItemClickListener.onItemClick(holder.mViewDataBinding.getMtbColr()); +// } +// }); +// +// holder.mViewDataBinding.executePendingBindings(); + } + + + public PickingInventarioListAdapter setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.mOnItemClickListener = onItemClickListener; + return this; + } + + public interface OnItemClickListener { + void onItemClick(MtbColr item); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioModule.java new file mode 100644 index 00000000..b7f6cafa --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioModule.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.gest.inventario.picking; + +import dagger.Module; +import dagger.Provides; +import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRepository; +import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRowRepository; + +@Module(subcomponents = PickingInventarioComponent.class) +public class PickingInventarioModule { + + @Provides + PickingInventarioViewModel providesPickingInventarioViewModel(InventarioRepository inventarioRepository, InventarioRowRepository inventarioRowRepository) { + return new PickingInventarioViewModel(inventarioRepository, inventarioRowRepository); + } + +} \ No newline at end of file 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 new file mode 100644 index 00000000..7a4792b5 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/inventario/picking/PickingInventarioViewModel.java @@ -0,0 +1,417 @@ +package it.integry.integrywmsnative.gest.inventario.picking; + +import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; +import androidx.lifecycle.ViewModel; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Random; +import java.util.stream.Collectors; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRoomDTO; +import it.integry.integrywmsnative.core.data_store.db.entity.InventarioRowRoomDTO; +import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRepository; +import it.integry.integrywmsnative.core.data_store.db.respository_new.InventarioRowRepository; +import it.integry.integrywmsnative.core.exception.NoResultFromBarcodeException; +import it.integry.integrywmsnative.core.expansion.RunnableArgss; +import it.integry.integrywmsnative.core.interfaces.viewmodel_listeners.ILoadingListener; +import it.integry.integrywmsnative.core.model.MtbAart; +import it.integry.integrywmsnative.core.model.dto.PickDataDTO; +import it.integry.integrywmsnative.core.rest.model.Ean128Model; +import it.integry.integrywmsnative.core.rest.model.Ean13PesoModel; +import it.integry.integrywmsnative.core.rest.model.inventario.InventarioArtDTO; +import it.integry.integrywmsnative.core.utility.UtilityBarcode; +import it.integry.integrywmsnative.core.utility.UtilityBigDecimal; +import it.integry.integrywmsnative.core.utility.UtilityDate; +import it.integry.integrywmsnative.core.utility.UtilityLiveData; +import it.integry.integrywmsnative.gest.spedizione.exceptions.InvalidPesoKGException; +import it.integry.integrywmsnative.gest.spedizione.model.PickedQuantityDTO; +import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; + +public class PickingInventarioViewModel extends ViewModel { + + + private final InventarioRepository inventarioRepository; + private final InventarioRowRepository inventarioRowRepository; + + public MutableLiveData currentInventario = new MutableLiveData<>(); + public LiveData> currentInventarioRows = new MutableLiveData<>(); + + private List availableInventarioArts; + private Listener mListener; + + public PickingInventarioViewModel( + InventarioRepository inventarioRepository, + InventarioRowRepository inventarioRowRepository) { + this.inventarioRepository = inventarioRepository; + this.inventarioRowRepository = inventarioRowRepository; + } + + public void init(InventarioRoomDTO inventarioRoomDTO, List inventarioArts) { + this.sendOnLoadingStarted(); + + this.currentInventario.postValue(inventarioRoomDTO); + this.currentInventarioRows = inventarioRowRepository.retrieve(inventarioRoomDTO.getId()); + this.availableInventarioArts = inventarioArts == null ? new ArrayList<>() : inventarioArts; + + UtilityLiveData.observeOnce(this.currentInventarioRows, data -> { + this.sendOnLoadingEnded(); + }); + + this.sendOnLoadingEnded(); + } + + private void generateRandomItems() { + for (int i = 0; i < 500; i++) { + Random r = new Random(); + int randomIndex = r.nextInt(availableInventarioArts.size()); + + + var item = getAvailableArts().get(randomIndex); + var itemMtbAart = item.toMtbAart(); + + var fakePickingObjectDto = new PickingObjectDTO() + .setMtbAart(itemMtbAart); + + var qta = BigDecimal.valueOf(r.nextInt(50)); + var numCnf = UtilityBigDecimal.multiply(qta, itemMtbAart.getQtaCnf()); + + saveNewRow(fakePickingObjectDto, qta, itemMtbAart.getQtaCnf(), numCnf, null, null); + } + + + } + + public LiveData getCurrentInventario() { + return currentInventario; + } + + public LiveData> getCurrentInventarioRows() { + return currentInventarioRows; + } + + public List getAvailableArts() { + return availableInventarioArts; + } + + public void processBarcodeDTO(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + if (UtilityBarcode.isEanPeso(barcodeScanDTO)) { + //Cerco tramite etichetta ean 128 (che può indicarmi un articolo o una UL) + this.executeEtichettaEanPeso(barcodeScanDTO, onComplete); + + } else { + this.loadArticolo(barcodeScanDTO.getStringValue(), null, onComplete); + } + } + + public void updateRow(InventarioRowRoomDTO itemToUpdate) { + var matchedArt = availableInventarioArts.stream() + .filter(x -> x.getCodMart().contains(itemToUpdate.getCodMart())) + .findFirst() + .orElse(null); + + var articolo = matchedArt.toMtbAart(); + articolo.setFlagTracciabilita("N"); + dispatchRowEdit(articolo, itemToUpdate); + } + + public void deleteRow(InventarioRowRoomDTO itemToDelete) { + this.inventarioRowRepository.delete(itemToDelete, () -> { + }, this::sendError); + } + + + public void exportAll(Runnable onComplete) { + this.sendOnLoadingStarted(); + currentInventario.getValue().setInventarioRowList(this.currentInventarioRows.getValue()); + + this.inventarioRepository.export(currentInventario.getValue(), () -> { + this.sendOnLoadingEnded(); + onComplete.run(); + }, this::sendError); + } + + + private void executeEtichettaEanPeso(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { + try { + Ean13PesoModel ean13PesoModel = Ean13PesoModel.fromBarcode(barcodeScanDTO.getStringValue()); + this.loadArticolo(ean13PesoModel.getPrecode(), ean13PesoModel.toEan128(), onComplete); + } catch (Exception ex) { + this.sendError(ex); + } + } + + private void loadArticolo(String barcodeProd, Ean128Model ean128Model, Runnable onComplete) { + var matchedArts = availableInventarioArts.stream() + .filter(x -> x.getBarcode().contains(barcodeProd)) + .collect(Collectors.toList()); + + if (matchedArts.size() > 0) { + this.dispatchRowInsert(matchedArts.get(0), ean128Model); + onComplete.run(); + + } else { + this.sendError(new NoResultFromBarcodeException(barcodeProd)); + } + } + + + private void dispatchRowInsert(InventarioArtDTO inventarioArtDTO, Ean128Model ean128Model) { + var mtbAart = inventarioArtDTO.toMtbAart(); + mtbAart.setFlagTracciabilita("N"); + + PickingObjectDTO pickingObjectDTO = new PickingObjectDTO() + .setMtbAart(mtbAart) + .setTempPickData(PickDataDTO.fromEan128(ean128Model)); + + BigDecimal numCnfDaPrelevare = null; + BigDecimal qtaColDaPrelevare = null; + BigDecimal qtaCnfDaPrelevare = null; + + BigDecimal initialNumCnf; + BigDecimal initialQtaCnf; + BigDecimal initialQtaTot; + + String partitaMag = null; + Date dataScad = null; + + if (pickingObjectDTO.getTempPickData() != null && pickingObjectDTO.getTempPickData().getManualPickDTO() != null) { + //Oppure le info del barcode scansionato + PickDataDTO.ManualPickDTO manualPickDTO = pickingObjectDTO.getTempPickData().getManualPickDTO(); + + qtaColDaPrelevare = manualPickDTO.getQtaTot(); + numCnfDaPrelevare = manualPickDTO.getNumCnf(); + + if (inventarioArtDTO.isPlu()) { +// if(inventarioArtDTO.getPrzVendIva().equals(BigDecimal.ZERO)) +// this.sendError(); + + qtaColDaPrelevare = UtilityBigDecimal.multiply(qtaColDaPrelevare, BigDecimal.TEN); + qtaColDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, inventarioArtDTO.getPrzVendIva(), RoundingMode.HALF_UP); + } + + if (mtbAart.isFlagQtaCnfFissaBoolean()) { + qtaCnfDaPrelevare = mtbAart.getQtaCnf(); + + if (manualPickDTO.isEanPeso()) { + if (mtbAart.getUntMisRifPeso() == MtbAart.UntMisRifPesoEnum.M) { + if (UtilityBigDecimal.equalsTo(mtbAart.getPesoKg(), BigDecimal.ZERO)) { + this.sendError(new InvalidPesoKGException()); + } else { + qtaColDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, mtbAart.getPesoKg()); + } + } + } + + } else if (qtaColDaPrelevare != null && numCnfDaPrelevare != null) { + qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare); + } + + + if (qtaColDaPrelevare != null && numCnfDaPrelevare == null) { + if (!mtbAart.isFlagQtaCnfFissaBoolean()) { + numCnfDaPrelevare = UtilityBigDecimal.divideAndRoundToInteger(qtaColDaPrelevare, mtbAart.getQtaCnf()); + if (UtilityBigDecimal.equalsTo(numCnfDaPrelevare, BigDecimal.ZERO)) + numCnfDaPrelevare = BigDecimal.ONE; + qtaCnfDaPrelevare = UtilityBigDecimal.divide(qtaColDaPrelevare, numCnfDaPrelevare); + } else { + numCnfDaPrelevare = UtilityBigDecimal.divideToInteger(qtaColDaPrelevare, mtbAart.getQtaCnf()); + } + + } else if (numCnfDaPrelevare != null && qtaColDaPrelevare == null) { + qtaCnfDaPrelevare = mtbAart.getQtaCnf(); + qtaColDaPrelevare = UtilityBigDecimal.multiply(numCnfDaPrelevare, qtaCnfDaPrelevare); + } + + if (manualPickDTO.getMtbPartitaMag() != null) { + partitaMag = manualPickDTO.getMtbPartitaMag().getPartitaMag(); + dataScad = manualPickDTO.getMtbPartitaMag().getDataScadD(); + } + + initialNumCnf = numCnfDaPrelevare; + initialQtaCnf = qtaCnfDaPrelevare; + initialQtaTot = qtaColDaPrelevare; + } else { + initialNumCnf = BigDecimal.ONE; + initialQtaCnf = mtbAart.getQtaCnf(); + initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf); + } + + if (numCnfDaPrelevare == null && qtaColDaPrelevare == null && initialNumCnf == null && initialQtaTot == null) { + initialNumCnf = BigDecimal.ONE; + initialQtaCnf = mtbAart.getQtaCnf(); + initialQtaTot = UtilityBigDecimal.multiply(initialNumCnf, initialQtaCnf); + } + + + this.sendOnItemDispatched( + pickingObjectDTO, + pickingObjectDTO.getMtbAart(), + null, //initialNumCnf, + initialQtaCnf, + null, //initialQtaTot, + null, + null, + null, + null, + null, + null, + partitaMag, + dataScad, + false, + true, + false, + (pickedQuantityDTO, shouldCloseLU) -> { + this.saveNewRow(pickingObjectDTO, + pickedQuantityDTO.getNumCnf(), + pickedQuantityDTO.getQtaCnf(), + pickedQuantityDTO.getQtaTot(), + pickedQuantityDTO.getPartitaMag(), + pickedQuantityDTO.getDataScad()); + }); + } + + private void dispatchRowEdit(MtbAart mtbAart, InventarioRowRoomDTO inventarioRowRoomDTO) { + + final PickingObjectDTO pickingObjectDTO = new PickingObjectDTO() + .setMtbAart(mtbAart); + + + this.sendOnItemDispatched( + pickingObjectDTO, + pickingObjectDTO.getMtbAart(), + inventarioRowRoomDTO.getNumConf(), + inventarioRowRoomDTO.getQtaConf(), + inventarioRowRoomDTO.getQta(), + null, null, null, + null, null, null, + inventarioRowRoomDTO.getPartitaMag(), + null, + false, + false, + false, + (pickedQuantityDTO, shouldCloseLU) -> { + + this.saveEditedRow(inventarioRowRoomDTO, + pickedQuantityDTO.getNumCnf(), + pickedQuantityDTO.getQtaCnf(), + pickedQuantityDTO.getQtaTot(), + pickedQuantityDTO.getPartitaMag(), + pickedQuantityDTO.getDataScad()); + }); + + } + + + private void saveNewRow(PickingObjectDTO pickingObjectDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad) { + final InventarioRowRoomDTO inventarioRow = new InventarioRowRoomDTO(); + inventarioRow.setCodMart(pickingObjectDTO.getMtbAart().getCodMart()); + inventarioRow.setDescrizione(pickingObjectDTO.getMtbAart().getDescrizioneEstesa()); + inventarioRow.setPartitaMag(partitaMag); + inventarioRow.setQta(qtaTot); + inventarioRow.setNumConf(numCnf); + inventarioRow.setQtaConf(qtaCnf); + inventarioRow.setUntMis(pickingObjectDTO.getMtbAart().getUntMis()); + inventarioRow.setDataOraInv(UtilityDate.getNowTime()); + inventarioRow.setZona(currentInventario.getValue().getZona()); + inventarioRow.setParentId(currentInventario.getValue().getId()); + + inventarioRowRepository.insert(inventarioRow, () -> { + }, this::sendError); + } + + private void saveEditedRow(InventarioRowRoomDTO inventarioRowRoomDTO, BigDecimal numCnf, BigDecimal qtaCnf, BigDecimal qtaTot, String partitaMag, Date dataScad) { + inventarioRowRoomDTO.setPartitaMag(partitaMag); + inventarioRowRoomDTO.setQta(qtaTot); + inventarioRowRoomDTO.setNumConf(numCnf); + inventarioRowRoomDTO.setQtaConf(qtaCnf); + inventarioRowRoomDTO.setDataOraInv(UtilityDate.getNowTime()); + + inventarioRowRepository.update(inventarioRowRoomDTO, () -> { + }, this::sendError); + } + + + private void sendOnLoadingStarted() { + if (this.mListener != null) mListener.onLoadingStarted(); + } + + private void sendOnLoadingEnded() { + if (this.mListener != null) mListener.onLoadingEnded(); + } + + private void sendError(Exception ex) { + if (this.mListener != null) mListener.onError(ex); + } + + private void sendOnItemDispatched(PickingObjectDTO pickingObjectDTO, + MtbAart mtbAart, + BigDecimal initialNumCnf, + BigDecimal initialQtaCnf, + BigDecimal initialQtaTot, + BigDecimal totalQtaAvailable, + BigDecimal totalNumCnfAvailable, + BigDecimal qtaCnfAvailable, + BigDecimal totalQtaToBeTaken, + BigDecimal totalNumCnfToBeTaken, + BigDecimal qtaCnfToBeTaken, + String partitaMag, + Date dataScad, + boolean canOverflowOrderQuantity, + boolean canPartitaMagBeChanged, + boolean canLUBeClosed, + RunnableArgss onComplete) { + if (this.mListener != null) mListener.onItemDispatched(pickingObjectDTO, + mtbAart, + initialNumCnf, + initialQtaCnf, + initialQtaTot, + totalQtaAvailable, + totalNumCnfAvailable, + qtaCnfAvailable, + totalQtaToBeTaken, + totalNumCnfToBeTaken, + qtaCnfToBeTaken, + partitaMag, + dataScad, + canOverflowOrderQuantity, + canPartitaMagBeChanged, + canLUBeClosed, + onComplete); + } + + public PickingInventarioViewModel setListener(Listener listener) { + this.mListener = listener; + return this; + } + + public interface Listener extends ILoadingListener { + + void onError(Exception ex); + + void onItemDispatched(PickingObjectDTO pickingObjectDTO, + MtbAart mtbAart, + BigDecimal initialNumCnf, + BigDecimal initialQtaCnf, + BigDecimal initialQtaTot, + BigDecimal totalQtaAvailable, + BigDecimal totalNumCnfAvailable, + BigDecimal qtaCnfAvailable, + BigDecimal totalQtaToBeTaken, + BigDecimal totalNumCnfToBeTaken, + BigDecimal qtaCnfToBeTaken, + String partitaMag, + Date dataScad, + boolean canOverflowOrderQuantity, + boolean canPartitaMagBeChanged, + boolean canLUBeClosed, + RunnableArgss onComplete); + + + } +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java index dd2d7314..eefe275b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/main/MainFragment.java @@ -1,7 +1,10 @@ package it.integry.integrywmsnative.gest.main; +import android.animation.ArgbEvaluator; +import android.animation.ObjectAnimator; import android.content.Context; +import android.graphics.Color; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -71,6 +74,8 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab private LayoutInflater mLayoutInflater; + private boolean easterEggToggle = false; + public MainFragment() { } @@ -85,18 +90,23 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - this.mLayoutInflater = inflater; + public void onAttach(@NonNull Context context) { + super.onAttach(context); MainApplication.appComponent .mainFragmentComponent() .create() .inject(this); + } + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + this.mLayoutInflater = inflater; mBindings = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false); + mBindings.setView(this); - + mBindings.easterEggHorrorBloodExpandableLayout.setExpanded(false, false); return mBindings.getRoot(); } @@ -301,4 +311,87 @@ public class MainFragment extends Fragment implements ITitledFragment, IScrollab public void addOnPreDestroy(Runnable onPreDestroy) { this.mOnPreDestroyList.add(onPreDestroy); } + + + public void toggleEasterEggMode() { + easterEggToggle =! easterEggToggle; + + + int rootBgStart, rootBgEnd; + int profileBgStart, profileBgEnd; + float titleFlipStart, titleFlipEnd; + int animationTimeMillis = 0; + + if (easterEggToggle) { + rootBgStart = Color.argb(255, 255, 255, 255); + rootBgEnd = Color.argb(255, 0, 0, 0); + + profileBgStart = Color.argb(255, 26, 115, 232); + profileBgEnd = Color.argb(255, 211, 47, 47); + animationTimeMillis = 2500; + titleFlipStart = 1f; + titleFlipEnd = -1f; + } else { + rootBgStart = Color.argb(255, 0, 0, 0); + rootBgEnd = Color.argb(255, 255, 255, 255); + + profileBgStart = Color.argb(255, 211, 47, 47); + profileBgEnd = Color.argb(255, 26, 115, 232); + animationTimeMillis = 750; + titleFlipStart = -1f; + titleFlipEnd = 1f; + } + + mBindings.easterEggHorrorBloodExpandableLayout.setDuration(animationTimeMillis); + mBindings.easterEggHorrorBloodExpandableLayout.setExpanded(easterEggToggle, true); + + View rootActivityView = requireActivity().findViewById(R.id.drawer_layout); + ObjectAnimator colorFadeRootBg = ObjectAnimator.ofObject(rootActivityView, "backgroundColor", + new ArgbEvaluator(), + rootBgStart, + rootBgEnd); + + colorFadeRootBg.setDuration(animationTimeMillis); + colorFadeRootBg.start(); + + View toolbarActivityView = requireActivity().findViewById(R.id.toolbar); + ObjectAnimator colorFadeToolbarBg = ObjectAnimator.ofObject(toolbarActivityView, "backgroundColor", + new ArgbEvaluator(), + rootBgStart, + rootBgEnd); + + colorFadeToolbarBg.setDuration(animationTimeMillis); + colorFadeToolbarBg.start(); + + ObjectAnimator colorFadeProfileBg = ObjectAnimator.ofObject(mBindings.profileRootContainer, "backgroundColor", + new ArgbEvaluator(), + profileBgStart, + profileBgEnd); + + colorFadeProfileBg.setDuration(animationTimeMillis); + colorFadeProfileBg.start(); + + View toolbarTitleActivityView = requireActivity().findViewById(R.id.toolbar_title); + ObjectAnimator flipToolbarTitleX = ObjectAnimator.ofFloat(toolbarTitleActivityView, "scaleX", + titleFlipStart, + titleFlipEnd); + + flipToolbarTitleX.setDuration(animationTimeMillis); + flipToolbarTitleX.start(); + + ObjectAnimator flipToolbarTitleY = ObjectAnimator.ofFloat(toolbarTitleActivityView, "scaleY", + titleFlipStart, + titleFlipEnd); + + flipToolbarTitleY.setDuration(animationTimeMillis); + flipToolbarTitleY.start(); + + ObjectAnimator colorFadeTitleTextColor = ObjectAnimator.ofObject(toolbarTitleActivityView, "textColor", + new ArgbEvaluator(), + rootBgEnd, + rootBgStart); + + colorFadeTitleTextColor.setDuration(animationTimeMillis); + colorFadeTitleTextColor.start(); + } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java index 9f558e1b..b68f73c7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_libero/PickingLiberoFragment.java @@ -164,7 +164,6 @@ public class PickingLiberoFragment extends BaseFragment implements ITitledFragme private void initBottomSheet() { mBindings.bottomSheetMtbColrEdit.setListener(this); - mBindings.bottomSheetMtbColrEdit.init(mBindings.bottomSheetMtbColrEdit, mBindings.bottomSheetMtbColrEditBackground); } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java index 075e8628..b7fd2278 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/picking_resi/PickingResiActivity.java @@ -52,7 +52,7 @@ import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFrag import it.integry.integrywmsnative.view.bottom_sheet__lu_content.BottomSheetFragmentLUContentViewModel; import it.integry.integrywmsnative.view.dialogs.ask_should_print.DialogAskShouldPrint; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; -import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.InfoAggiuntiveLUDialog; +import it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2DTO; import it.integry.integrywmsnative.view.dialogs.input_quantity_v2.DialogInputQuantityV2View; @@ -121,7 +121,6 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag mBindings.setLifecycleOwner(this); mBindings.setPickingResiView(this); - mBindings.bottomSheetLuContent.init(mBindings.bottomSheetLuContent, null); mBottomSheetFragmentLUContentViewModel = mBindings.bottomSheetLuContent.getViewModelInstance(); mBindings.bottomSheetLuContent.setListener(this); mBottomSheetFragmentLUContentViewModel.setListener(this); @@ -277,7 +276,7 @@ public class PickingResiActivity extends BaseActivity implements BottomSheetFrag @Override public void onInfoAggiuntiveRequired(RunnableArgss onComplete) { - InfoAggiuntiveLUDialog.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog"); + DialogInfoAggiuntiveLU.newInstance(onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog"); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java index 4bf063de..63798bcc 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_accettazione_ord_produzione/ProdOrdineProduzioneElencoFragment.java @@ -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 clienti = Stream.of(dataList) .filter(y -> y.getBarcode().equals(x.getBarcode())) diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/dialog_ask_mag_prossimita/DialogAskMagazzinoProssimitaView.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/dialog_ask_mag_prossimita/DialogAskMagazzinoProssimitaView.java index 47a04a68..62b8d83b 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/dialog_ask_mag_prossimita/DialogAskMagazzinoProssimitaView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_fabbisogno_linee_prod/dialog_ask_mag_prossimita/DialogAskMagazzinoProssimitaView.java @@ -49,7 +49,6 @@ public class DialogAskMagazzinoProssimitaView extends BaseDialogFragment impleme private DialogAskMagazzinoProssimitaView(RunnableArgsss onItemSelected) { super(); - this.mOnItemSelected = onItemSelected; } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java index 14782e1d..b92300de 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/prod_rientro_merce/ProdRientroMerceFragment.java @@ -185,7 +185,6 @@ public class ProdRientroMerceFragment extends BaseFragment implements private void initBottomSheet() { mBindings.bottomSheetMtbColrEdit.setListener(this); mBindings.bottomSheetMtbColrEdit.disableEditButton(); - mBindings.bottomSheetMtbColrEdit.init(mBindings.bottomSheetMtbColrEdit, mBindings.bottomSheetMtbColrEditBackground); } @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java index 18fcb4a6..be45bc01 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditActivity.java @@ -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; @@ -35,27 +39,26 @@ import it.integry.integrywmsnative.databinding.FragmentPvArticoliOrdineAcquistoL import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dialog.DialogEditArticoloView; import it.integry.integrywmsnative.ui.FabMenuCustomAnimations; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; -import it.integry.integrywmsnative.view.dialogs.DialogAskAction; +import it.integry.integrywmsnative.view.dialogs.DialogAskActionView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleInputHelper; 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 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 articoliGriglia = DataCache.retrieveItem(getIntent().getStringExtra(DATA_LIST_ARTS)); - this.mViewModel.init(mOrdine); + this.mViewModel.init(ordine, articoliGriglia); } - @Override public boolean onSupportNavigateUp() { onBackPressed(); @@ -148,28 +153,25 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi mBinding.articoliOrdineList.addItemDecoration(itemDecorator); } - private void selectAction(ArticoloOrdine articoloOrdine) { mBinding.closeActivityFab.close(false); BarcodeManager.disable(); - runOnUiThread(() -> { - DialogAskAction.make(this, - articoloOrdine.getDescrizione(), - articoloOrdine.getQtaOrd() + " " + articoloOrdine.getUntMis(), - () -> { - this.mViewModel.checkArticolo(mOrdine, articoloOrdine.getCodMart(), - artOrd -> { - this.onItemDispatched(artOrd); - BarcodeManager.enable(); - }, - this::onError); - BarcodeManager.enable(); - }, - () -> { - this.deleteArticolo(articoloOrdine); - BarcodeManager.enable(); - }).show(); - }); + + DialogAskActionView.newInstance(articoloOrdine.getDescrizione(), + articoloOrdine.getQtaOrd() + " " + articoloOrdine.getUntMis(), + () -> { + this.mViewModel.checkArticolo(articoloOrdine.getCodMart(), + artOrd -> { + this.onItemDispatched(artOrd); + BarcodeManager.enable(); + }, + this::onError); + BarcodeManager.enable(); + }, + () -> { + this.deleteArticolo(articoloOrdine); + BarcodeManager.enable(); + }).show(getSupportFragmentManager(), "tag"); } @@ -186,6 +188,7 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi private final RunnableArgs onScanSuccessful = data -> { mBinding.closeActivityFab.close(false); this.onLoadingStarted(); + BarcodeManager.disable(); this.mViewModel.processBarcodeDTO(data, this::onLoadingEnded); @@ -193,19 +196,15 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi @Override public void onItemDispatched(ArticoloOrdine articoloOrdine) { - 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(), "DialogEditArticoloView"); } @Override @@ -213,7 +212,6 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi return getResources().getColor(resId); } - public void exportOrdine() { this.mViewModel.exportOrdine(() -> { runOnUiThread(() -> { @@ -223,7 +221,6 @@ public class PVOrdineAcquistoEditActivity extends BaseActivity implements PVOrdi }); } - public void close() { onBackPressed(); } @@ -238,7 +235,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(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditModule.java index d81cd2f6..b738b4a4 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditModule.java @@ -1,7 +1,5 @@ package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit; -import javax.inject.Singleton; - import dagger.Module; import dagger.Provides; import it.integry.integrywmsnative.core.data_store.db.repository.ArticoliOrdineRepository; @@ -13,14 +11,6 @@ import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsu @Module(subcomponents = PVOrdineAcquistoEditComponent.class) public class PVOrdineAcquistoEditModule { - - - @Provides - @Singleton - PVOrdiniAcquistoRESTConsumer providesPVOrdiniAcquistoRESTConsumer() { - return new PVOrdiniAcquistoRESTConsumer(); - } - @Provides PVOrdineAcquistoEditViewModel providesPvOrdineAcquistoEditViewModel(OrdineRepository ordineRepository, GrigliaRepository grigliaRepository, diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java index d78ada1f..187a96e2 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/PVOrdineAcquistoEditViewModel.java @@ -4,23 +4,23 @@ 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; 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.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 +49,7 @@ public class PVOrdineAcquistoEditViewModel { private Listener mListener; - private final MutableLiveData mCurrentGriglia = new MutableLiveData<>(); + private List mArticoliGriglia = new ArrayList<>(); private final MutableLiveData> mArticoli = new MutableLiveData<>(); @@ -65,83 +65,52 @@ public class PVOrdineAcquistoEditViewModel { this.pvOrdiniAcquistoRESTConsumer = pvOrdiniAcquistoRESTConsumer; } - public void init(Ordine ordine) { + public void init(Ordine ordine, List 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) { + 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())); + art.setBgTint(getBgTint(art)); return art; } - public MutableLiveData 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> 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 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,15 +120,6 @@ public class PVOrdineAcquistoEditViewModel { ); } - - private void loadGriglia(int idGriglia, RunnableArgs onLoad) { - try { - mGrigliaRepository.findGrigliaById(idGriglia, onLoad, this::sendError); - } catch (Exception e) { - this.sendError(e); - } - } - private void loadArticoli(Ordine ordine, RunnableArgs> onLoad) { try { mArticoliOrdineRepository.findArticoliByOrdine(ordine, onLoad, this::sendError); @@ -168,42 +128,53 @@ public class PVOrdineAcquistoEditViewModel { } } - public void checkArticolo(Ordine ordine, String barcode, RunnableArgs onSuccess, RunnableArgs onFail) { + public void checkArticolo(String barcode, RunnableArgs onSuccess, RunnableArgs 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) -> { + + if (articolo != null) { + if (isAutoOrderOnScan()) { + articolo.setQtaOrd(articolo.getQtaOrd() + articolo.getQtaCnf()); + mArticoliOrdineRepository.saveArticoloToOrdine(articolo, this::refreshListArticoli, this::sendError); + } else { + 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); + } - }, this::sendError); - } else { - onSuccess.run(art); - } - } - }, onFail); } 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 +188,38 @@ public class PVOrdineAcquistoEditViewModel { return SettingsManager.iDB().isFlagOrdinaArticoliOnScan(); } - private void getNewArticoli(int idGrigla, RunnableArgs> onSuccess, RunnableArgs onError) { - mArticoloGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError); + private List 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 articoliToSave = new ArrayList<>(); + List newArts = getNewArticoli(); + if (!newArts.isEmpty()) { + List 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 +231,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(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloView.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloView.java index fbc9b8bd..ea96cd2a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloView.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dialog/DialogEditArticoloView.java @@ -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 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,22 @@ public class DialogEditArticoloView extends BaseDialogFragment implements Dialog @Override public void onDismiss(@NonNull DialogInterface dialog) { - this.mOnAbort.run(); + if (this.mOnAbort != null) { + this.mOnAbort.run(); + } + BarcodeManager.removeCallback(barcodeScannerIstanceID); 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) -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/ArtDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/ArtDTO.java deleted file mode 100644 index 9b0bcf4a..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/ArtDTO.java +++ /dev/null @@ -1,146 +0,0 @@ -package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto; - -import java.math.BigDecimal; -import java.util.Date; - -import it.integry.integrywmsnative.core.utility.UtilityDate; - -public class ArtDTO { - private Integer rigaOrd; - - private String codMart; - - private String barcode; - - private String descrizione; - - private String dataIns; - - private String untMis; - - private BigDecimal qta; - - private BigDecimal qtaCnf; - - private BigDecimal colli; - - private String partitaMag; - - private String dataScad; - - private String systemNote; - - public Integer getRigaOrd() { - return rigaOrd; - } - - public void setRigaOrd(Integer rigaOrd) { - this.rigaOrd = rigaOrd; - } - - public String getCodMart() { - return codMart; - } - - public void setCodMart(String codMart) { - this.codMart = codMart; - } - - public String getBarcode() { - return barcode; - } - - public void setBarcode(String barcode) { - this.barcode = barcode; - } - - public String getDescrizione() { - return descrizione; - } - - public void setDescrizione(String descrizione) { - this.descrizione = descrizione; - } - - public String getDataIns() { - return dataIns; - } - - public Date getDataInsD() { - return UtilityDate.recognizeDateWithExceptionHandler(getDataIns()); - } - - public void setDataIns(String dataIns) { - this.dataIns = dataIns; - } - - public void setDataInsD(Date dataIns) { - setDataIns(UtilityDate.formatDate(dataIns, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); - } - - - public String getUntMis() { - return untMis; - } - - public void setUntMis(String untMis) { - this.untMis = untMis; - } - - public BigDecimal getQta() { - return qta; - } - - public void setQta(BigDecimal qta) { - this.qta = qta; - } - - public BigDecimal getQtaCnf() { - return qtaCnf; - } - - public void setQtaCnf(BigDecimal qtaCnf) { - this.qtaCnf = qtaCnf; - } - - public BigDecimal getColli() { - return colli; - } - - public void setColli(BigDecimal colli) { - this.colli = colli; - } - - public String getPartitaMag() { - return partitaMag; - } - - public void setPartitaMag(String partitaMag) { - this.partitaMag = partitaMag; - } - - public String getDataScad() { - return dataScad; - } - - public void setDataScad(String dataScad) { - this.dataScad = dataScad; - } - - public Date getDataScadD() { - return UtilityDate.recognizeDateWithExceptionHandler(getDataScad()); - } - - public void setDataScadD(Date dataScad) { - setDataScad(UtilityDate.formatDate(dataScad, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); - } - - public String getSystemNote() { - return systemNote; - } - - public ArtDTO setSystemNote(String systemNote) { - this.systemNote = systemNote; - return this; - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/OrdineDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/OrdineDTO.java deleted file mode 100644 index 1fe38bb4..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/OrdineDTO.java +++ /dev/null @@ -1,46 +0,0 @@ -package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto; - -import java.util.Date; -import java.util.List; - -import it.integry.integrywmsnative.core.utility.UtilityDate; - -public class OrdineDTO { - private String chiaveGriglia; - private String dataCons; - - private List artRows; - - public String getChiaveGriglia() { - return chiaveGriglia; - } - - public void setChiaveGriglia(String chiaveGriglia) { - this.chiaveGriglia = chiaveGriglia; - } - - public String getDataCons() { - return dataCons; - } - - public void setDataCons(String dataCons) { - this.dataCons = dataCons; - } - - public List getArtRows() { - return artRows; - } - - public void setArtRows(List artRows) { - this.artRows = artRows; - } - public Date getDataConsD() { - return UtilityDate.recognizeDateWithExceptionHandler(getDataCons()); - } - - public void setDataConsD(Date dataCons) { - setDataCons(UtilityDate.formatDate(dataCons, UtilityDate.COMMONS_DATE_FORMATS.DMY_TIME_SLASH)); - } - - -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/SaveDTO.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/SaveDTO.java deleted file mode 100644 index 442ed0a5..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/dto/SaveDTO.java +++ /dev/null @@ -1,24 +0,0 @@ -package it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.dto; - -public class SaveDTO { - private String gestione = "O"; - - - private OrdineDTO ordineDTO; - - public String getGestione() { - return gestione; - } - - public void setGestione(String gestione) { - this.gestione = gestione; - } - - public OrdineDTO getOrdineDTO() { - return ordineDTO; - } - - public void setOrdineDTO(OrdineDTO ordineDTO) { - this.ordineDTO = ordineDTO; - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java deleted file mode 100644 index 32c6abbf..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordine_acquisto_edit/helper/PVEditOrderHelper.java +++ /dev/null @@ -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 onSuccess, RunnableArgs onFail) { - try { - mArticoliOrdineRepository.findArticoloByScanAndOrdine(ordine, barcode, (articolo) -> { - if (articolo != null) { - onSuccess.run(articolo); - } else { - mArticoliGrigliaRepository.findArticoloByScanAndGriglia(barcode, ordine.getIdGriglia(), artGrid -> { - if (artGrid != null) { - onSuccess.run(artGrid.convertToArticoloOrdine(ordine)); - } else { - onFail.run(new Exception("L' articolo ( " + barcode + " ) non è presente nella griglia")); - } - }, onFail); - } - }, onFail); - - } catch (Exception e) { - onFail.run(e); - } - } - - - public void saveArticoliToOrdine(List articoli, Runnable onSave, RunnableArgs onFail) { - mArticoliOrdineRepository.saveArticoliToOrdine(articoli, onSave, onFail); - } - - public void removeArticoloFromOrdine(ArticoloOrdine articolo, Runnable onSave, RunnableArgs onError) { - mArticoliOrdineRepository.deleteArticolo(articolo, onSave, onError); - } - - public void getNewArticoli(int idGrigla, RunnableArgs> onSuccess, RunnableArgs onError) { - mArticoliGrigliaRepository.findNewArticoliInGrigla(idGrigla, onSuccess, onError); - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java index 0d5c1a58..c77a0082 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaFragment.java @@ -12,7 +12,6 @@ import android.widget.Toast; import androidx.appcompat.widget.AppCompatTextView; import androidx.core.content.ContextCompat; import androidx.databinding.DataBindingUtil; -import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.LinearLayoutManager; import java.util.ArrayList; @@ -29,32 +28,29 @@ 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; import it.integry.integrywmsnative.core.interfaces.IScrollableFragment; import it.integry.integrywmsnative.core.interfaces.ITitledFragment; import it.integry.integrywmsnative.core.utility.UtilityDate; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; import it.integry.integrywmsnative.databinding.FragmentPvOrdiniAcquistoBinding; import it.integry.integrywmsnative.gest.pv_ordine_acquisto_edit.PVOrdineAcquistoEditActivity; -import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanLisA; -import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper; +import it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs.DialogScanGrigliaAcquistoView; import it.integry.integrywmsnative.gest.pv_ordini_acquisto.ui.OrdineAcquistoPvOpenListAdapter; import it.integry.integrywmsnative.ui.ElevatedToolbar; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; -import it.integry.integrywmsnative.view.dialogs.DialogAskAction; -import it.integry.integrywmsnative.view.dialogs.DialogProgressView; +import it.integry.integrywmsnative.view.dialogs.DialogAskActionView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; -public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitledFragment, IScrollableFragment { +public class PVOrdiniAcquistoGrigliaFragment extends BaseFragment implements ITitledFragment, IScrollableFragment { private FragmentPvOrdiniAcquistoBinding mBinding; - private OrdineAcquistoPvHelper mHelper; private Griglia mGriglia; private OrdineAcquistoPvOpenListAdapter mAdapter; - private DialogProgressView mCurrentProgress; private final List mRenderedOrderList = new ArrayList<>(); + private final List mListArticoli = new ArrayList<>(); private boolean mRedirectToNewOrder = true; private final List mOnPreDestroyList = new ArrayList<>(); @@ -71,14 +67,15 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled @Inject OrdineRepository mOrdineRepository; + @Inject + PVOrdiniAcquistoGrigliaViewModel mPvOrdiniAcquistoGrigliaViewModel; + public PVOrdiniAcquistoGrigliaFragment() { // Gets appComponent from MyApplication available in the base Gradle module MainApplication.appComponent .pvOrdineAcquistoGrigliaComponent() .create() .inject(this); - - } public static PVOrdiniAcquistoGrigliaFragment newInstance() { @@ -95,23 +92,20 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_pv_ordini_acquisto, container, false); mBinding.setViewmodel(this); - mHelper = new OrdineAcquistoPvHelper(requireActivity(), mGrigliaRepository, mArticoloGrigliaRepository, mArticoliOrdineRepository, mOrdineRepository); - init(); initRecyclerView(); return mBinding.getRoot(); } private void init() { - BarcodeManager.enable(); - DialogScanLisA.make(requireActivity(), mGrigliaRepository, mHelper, griglia -> { + DialogScanGrigliaAcquistoView.newInstance((griglia, listArticoli) -> { if (griglia == null) { ((IPoppableActivity) requireActivity()).pop(); } else { - setGriglia(griglia); + setGriglia(griglia, listArticoli); } - }).show(); + }).show(requireActivity().getSupportFragmentManager(), "tag"); } @@ -120,30 +114,28 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled titleText.setText(context.getText(R.string.pv_elenco_ordiniA_title_fragment).toString()); } - private void setGriglia(Griglia griglia) { + private void setGriglia(Griglia griglia, List 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(); } private void fetchOrders() { - this.openProgress(); + this.onLoadingStarted(); - mOrdineRepository.selectAllOpenOrders(mGriglia, (ordini) -> requireActivity().runOnUiThread(() -> { - this.closeProgress(); - setOrdini(ordini); - }), (e) -> { - this.closeProgress(); - String errorMessage = e.getMessage(); - requireActivity().runOnUiThread(() -> DialogSimpleMessageView - .makeErrorDialog(new SpannableString(errorMessage), null, null) - .show(requireActivity().getSupportFragmentManager(), "tag")); - }); + mOrdineRepository.selectAllOpenOrders(mGriglia.getCodAlis(), ordini -> { + this.onLoadingEnded(); + requireActivity().runOnUiThread(() -> { + setOrdini(ordini); + }); + }, this::onError); } private void setOrdini(List ordini) { @@ -158,13 +150,9 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled } } - public Griglia getGriglia() { - return mGriglia; - } private void initRecyclerView() { mBinding.ordiniAApertiMainList.setHasFixedSize(true); - mBinding.ordiniAApertiMainList.setLayoutManager(new LinearLayoutManager(requireActivity())); SimpleDividerItemDecoration itemDecorator = new SimpleDividerItemDecoration(requireActivity(), SimpleDividerItemDecoration.VERTICAL); @@ -175,16 +163,16 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled } private void editOrdine(Ordine ordine) { - requireActivity().startActivity(PVOrdineAcquistoEditActivity.newInstance(requireActivity(), ordine)); + requireActivity().startActivity(PVOrdineAcquistoEditActivity.newInstance(requireActivity(), ordine, mListArticoli)); } private void selectAction(Ordine ordine) { - requireActivity().runOnUiThread(() -> DialogAskAction.make(requireActivity(), - Html.fromHtml(String.format(this.getString(R.string.ord_acq_testata), String.valueOf(ordine.getOrdineId()), UtilityDate.formatDate(ordine.getDataIns(), UtilityDate.COMMONS_DATE_FORMATS.DMY_HUMAN))).toString(), - ordine.getCountArticoli() + " articoli", - () -> this.editOrdine(ordine), - () -> this.deleteOrdine(ordine)).show()); + 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"); } @@ -192,18 +180,16 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled String text = "Stai per eliminare un ordine sei sicuro?"; DialogSimpleMessageView.makeWarningDialog(new SpannableString(Html.fromHtml(text)), null, () -> requireActivity().runOnUiThread(() -> { - this.openProgress(); - mHelper.deleteOrder(ordine, () -> { + this.onLoadingStarted(); + mPvOrdiniAcquistoGrigliaViewModel.deleteOrder(ordine, () -> { requireActivity().runOnUiThread(() -> { - this.closeProgress(); + this.onLoadingEnded(); Toast.makeText(requireActivity(), "Ordine eliminato!", Toast.LENGTH_SHORT).show(); fetchOrders(); }); - }, e -> { - this.closeProgress(); - requireActivity().runOnUiThread(() -> UtilityExceptions.defaultException(requireActivity(), e)); - }); + }, this::onError); }), () -> { + }).show(requireActivity().getSupportFragmentManager(), "tag"); } @@ -213,15 +199,12 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled } public void createNewOrder() { - this.openProgress(); - mHelper.createNewOrder(mGriglia, order -> { - this.closeProgress(); + this.onLoadingStarted(); + + mPvOrdiniAcquistoGrigliaViewModel.createNewOrder(mGriglia, order -> { + this.onLoadingEnded(); requireActivity().runOnUiThread(() -> editOrdine(order)); - }, e -> requireActivity().runOnUiThread(() -> { - UtilityExceptions.defaultException(requireActivity(), e); - this.closeProgress(); - } - )); + }, this::onError); } @Override @@ -251,21 +234,4 @@ public class PVOrdiniAcquistoGrigliaFragment extends Fragment implements ITitled this.mOnPreDestroyList.add(onPreDestroy); } - protected void openProgress() { - requireActivity().runOnUiThread(() -> { - if (this.mCurrentProgress == null) { - this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(requireActivity()); - } - }); - } - - protected void closeProgress() { - requireActivity().runOnUiThread(() -> { - if (mCurrentProgress != null) { - mCurrentProgress.dismiss(); - mCurrentProgress = null; - } - }); - } - } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaModule.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaModule.java index 997d2b0d..69573276 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaModule.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaModule.java @@ -1,7 +1,23 @@ package it.integry.integrywmsnative.gest.pv_ordini_acquisto; import dagger.Module; +import dagger.Provides; +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.rest.consumers.PVOrdiniAcquistoRESTConsumer; @Module(subcomponents = PVOrdiniAcquistoGrigliaComponent.class) public class PVOrdiniAcquistoGrigliaModule { + + + + @Provides + PVOrdiniAcquistoGrigliaViewModel providesPvOrdiniAcquistoGrigliaViewModel(PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer, + ArticoloGrigliaRepository articoloGrigliaRepository, + OrdineRepository ordineRepository, + GrigliaRepository grigliaRepository){ + return new PVOrdiniAcquistoGrigliaViewModel(pvOrdiniAcquistoRESTConsumer, articoloGrigliaRepository, ordineRepository, grigliaRepository); + } + } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java new file mode 100644 index 00000000..84426639 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/PVOrdiniAcquistoGrigliaViewModel.java @@ -0,0 +1,48 @@ +package it.integry.integrywmsnative.gest.pv_ordini_acquisto; + +import javax.inject.Inject; + +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.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.expansion.RunnableArgs; +import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; +import it.integry.integrywmsnative.core.utility.UtilityDate; + +public class PVOrdiniAcquistoGrigliaViewModel { + + private final PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer; + private final ArticoloGrigliaRepository articoloGrigliaRepository; + private final OrdineRepository ordineRepository; + private final GrigliaRepository grigliaRepository; + + @Inject + public PVOrdiniAcquistoGrigliaViewModel(PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer, + ArticoloGrigliaRepository articoloGrigliaRepository, + OrdineRepository ordineRepository, + GrigliaRepository grigliaRepository) { + this.pvOrdiniAcquistoRESTConsumer = pvOrdiniAcquistoRESTConsumer; + this.articoloGrigliaRepository = articoloGrigliaRepository; + this.ordineRepository = ordineRepository; + this.grigliaRepository = grigliaRepository; + } + + public void createNewOrder(Griglia griglia, RunnableArgs onSuccess, RunnableArgs onError) { + 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); + onSuccess.run(ordine); + }, onError); + } + + public void deleteOrder(Ordine ordine, Runnable onSuccess, RunnableArgs onFail) { + ordineRepository.delete(ordine, onSuccess, onFail); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoComponent.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoComponent.java new file mode 100644 index 00000000..0e54bb2d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogScanGrigliaAcquistoComponent { + + @Subcomponent.Factory + interface Factory { + DialogScanGrigliaAcquistoComponent create(); + } + + void inject(DialogScanGrigliaAcquistoView dialogScanLisAView); +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoView.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoView.java new file mode 100644 index 00000000..c2d4fde6 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanGrigliaAcquistoView.java @@ -0,0 +1,122 @@ +package it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs; + +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.databinding.DataBindingUtil; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import java.util.List; + +import javax.inject.Inject; + +import it.integry.barcode_base_android_library.model.BarcodeScanDTO; +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.Griglia; +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; + +public class DialogScanGrigliaAcquistoView extends BaseDialogFragment { + + private DialogScanCodiceGrigliaBinding mBinding; + private int mBarcodeScannerIstanceID; + + private final RunnableArgss> mOnDialogDismiss; + + @Inject + PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer; + + private Griglia mGriglia; + private List mListArticoli; + + + public static DialogScanGrigliaAcquistoView newInstance(RunnableArgss> onDialogDismiss) { + return new DialogScanGrigliaAcquistoView(onDialogDismiss); + } + + private DialogScanGrigliaAcquistoView(RunnableArgss> onDialogDismiss) { + super(); + mOnDialogDismiss = onDialogDismiss; + } + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + this.initBarcode(); + + MainApplication.appComponent + .dialogScanLisAComponent() + .create() + .inject(this); + + mBinding = DataBindingUtil.inflate(LayoutInflater.from(requireContext()), R.layout.dialog_scan_codice_griglia, null, false); + mBinding.setLifecycleOwner(this); + mBinding.setView(this); + + var alertDialogBuilder = new MaterialAlertDialogBuilder(requireContext()) + .setView(mBinding.getRoot()) + .setCancelable(true); + + var alertDialog = alertDialogBuilder.create(); + alertDialog.setCanceledOnTouchOutside(true); + return alertDialog; + } + + private void initBarcode() { + mBarcodeScannerIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() + .setOnScanSuccessful(onScanSuccessfull) + .setOnScanFailed(this::onError)); + + this.setBarcodeListener(true); + } + + @Override + public void onDismiss(@NonNull DialogInterface dialog) { + BarcodeManager.removeCallback(mBarcodeScannerIstanceID); + mOnDialogDismiss.run(mGriglia, mListArticoli); + + super.onDismiss(dialog); + } + + private final RunnableArgs onScanSuccessfull = data -> { + BarcodeManager.disable(); + + RunnableArgs mOnError = exception -> { + this.onError(exception); + BarcodeManager.enable(); + }; + + fetchArticoli(data.getStringValue(), mOnError); + }; + + public void fetchArticoli(String codAlis, RunnableArgs onFailed) { + this.onLoadingStarted(); + pvOrdiniAcquistoRESTConsumer.getArticoliListino(codAlis, dto -> { + this.onLoadingEnded(); + if (dto.getGrigliaAcquistiChild().size() <= 0) { + onFailed.run(new Exception("La griglia selezionata (" + codAlis + ") non esiste o non presenta articoli")); + return; + } + + mGriglia = new Griglia(); + mGriglia.setCodAlis(codAlis); + mGriglia.setDescrLisa(dto.getDescrLisa()); + mGriglia.setDescrDepo(dto.getDescrDepo()); + mListArticoli = dto.getGrigliaAcquistiChild(); + this.dismiss(); + }, onFailed); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java deleted file mode 100644 index 1f8c1998..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/dialogs/DialogScanLisA.java +++ /dev/null @@ -1,130 +0,0 @@ -package it.integry.integrywmsnative.gest.pv_ordini_acquisto.dialogs; - -import android.app.Dialog; -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.view.LayoutInflater; - -import androidx.databinding.DataBindingUtil; -import androidx.fragment.app.FragmentActivity; - -import it.integry.barcode_base_android_library.model.BarcodeScanDTO; -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.barcode_reader.BarcodeCallbackDTO; -import it.integry.integrywmsnative.core.barcode_reader.BarcodeManager; -import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; -import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository; -import it.integry.integrywmsnative.core.expansion.BaseDialog; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.utility.UtilityExceptions; -import it.integry.integrywmsnative.core.utility.UtilityProgress; -import it.integry.integrywmsnative.databinding.DialogScanCodiceGrigliaBinding; -import it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper.OrdineAcquistoPvHelper; -import it.integry.integrywmsnative.view.dialogs.DialogProgressView; - -public class DialogScanLisA { - - private FragmentActivity mContext; - - private BaseDialog mDialog; - private DialogProgressView mCurrentProgress; - - private final DialogScanCodiceGrigliaBinding mBinding; - - private RunnableArgs mOnDialogDismiss; - - private OrdineAcquistoPvHelper mHelper; - - private GrigliaRepository mGrigliaRepository; - private Griglia mGriglia; - - private DialogScanLisA(FragmentActivity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs onDialogDismiss) { - mOnDialogDismiss = null; - mContext = context; - mGrigliaRepository = grigliaRepository; - mHelper = helper; - - LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - mGriglia = null; - mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_scan_codice_griglia, null, false); - - mDialog = new BaseDialog(context); - mDialog.setContentView(mBinding.getRoot()); - mDialog.setCanceledOnTouchOutside(false); - mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - mOnDialogDismiss = onDialogDismiss; - initBarcode(); - - } - - public static Dialog make(FragmentActivity context, GrigliaRepository grigliaRepository, OrdineAcquistoPvHelper helper, RunnableArgs onDialogDismiss) { - return new DialogScanLisA(context, grigliaRepository, helper, onDialogDismiss).mDialog; - } - - - private void initBarcode() { - - int barcodeIstanceID = BarcodeManager.addCallback(new BarcodeCallbackDTO() - .setOnScanSuccessful(onScanSuccessfull) - .setOnScanFailed(ex -> UtilityExceptions.defaultException(mContext, ex, false))); - - mDialog.setBarcodeListener(true); - mDialog.setOnDismissListener(dialog -> { - BarcodeManager.removeCallback(barcodeIstanceID); - BarcodeManager.enable(); - mOnDialogDismiss.run(mGriglia); - }); - } - - private final RunnableArgs onScanSuccessfull = data -> { - BarcodeManager.disable(); - - this.openProgress(); - Context context = mContext; - RunnableArgs mOnError = exception -> { - mContext.runOnUiThread(() -> { - this.closeProgress(); - UtilityExceptions.defaultException(context, exception); - BarcodeManager.enable(); - }); - }; - - RunnableArgs onGrigliaAvailable = griglia -> { - mContext.runOnUiThread(() -> { - this.closeProgress(); - mGriglia = griglia; - mDialog.dismiss(); - }); - }; - - - mGrigliaRepository.findByCodAlis(data.getStringValue(), griglia -> { - if (griglia != null) { - griglia.getGriglia().setCountArticoli(griglia.getCountArticoli()); - mHelper.updateGriglia(griglia.getGriglia(), onGrigliaAvailable, mOnError); - } else { - mHelper.downloadAndSaveLisA(data.getStringValue(), onGrigliaAvailable, mOnError); - } - }, mOnError); - - - }; - - protected void openProgress() { - mContext.runOnUiThread(() -> { - if (this.mCurrentProgress == null) { - this.mCurrentProgress = UtilityProgress.createDefaultProgressDialog(mContext); - } - }); - } - - protected void closeProgress() { - mContext.runOnUiThread(() -> { - if (mCurrentProgress != null) { - mCurrentProgress.dismiss(); - mCurrentProgress = null; - } - }); - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java deleted file mode 100644 index f32b2c6f..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/helper/OrdineAcquistoPvHelper.java +++ /dev/null @@ -1,86 +0,0 @@ -package it.integry.integrywmsnative.gest.pv_ordini_acquisto.helper; - -import android.app.Activity; - -import java.util.ArrayList; -import java.util.List; - -import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloGriglia; -import it.integry.integrywmsnative.core.data_store.db.entity.Griglia; -import it.integry.integrywmsnative.core.data_store.db.entity.Ordine; -import it.integry.integrywmsnative.core.data_store.db.repository.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.data_store.db.repository.OrdineRepository; -import it.integry.integrywmsnative.core.data_store.db.view_model.ArticoloDTO; -import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer; -import it.integry.integrywmsnative.core.utility.UtilityDate; - -public class OrdineAcquistoPvHelper { - - private Activity mContext; - private GrigliaRepository mGrigliaRepository; - private ArticoloGrigliaRepository mArticoliGrigliaRepository; - private ArticoliOrdineRepository mArticoliOrdineRepository; - private OrdineRepository mOrdineRepository; - - public OrdineAcquistoPvHelper(Activity context, GrigliaRepository grigliaRepository, ArticoloGrigliaRepository articoloGrigliaRepository, ArticoliOrdineRepository articoliOrdineRepository, OrdineRepository ordineRepository) { - this.mContext = context; - this.mGrigliaRepository = grigliaRepository; - this.mArticoliGrigliaRepository = articoloGrigliaRepository; - this.mArticoliOrdineRepository = articoliOrdineRepository; - this.mOrdineRepository = ordineRepository; - - } - - public void downloadAndSaveLisA(String codAlis, RunnableArgs onSave, RunnableArgs onFail) { - Griglia griglia = new Griglia(); - griglia.setCodAlis(codAlis); - updateGriglia(griglia, onSave, onFail); - } - - public void updateGriglia(Griglia griglia, RunnableArgs onSaved, RunnableArgs onFail) { - PVOrdiniAcquistoRESTConsumer.getArticoliListinoStatic(griglia.getCodAlis(), dto -> { - mContext.runOnUiThread(() -> { - if (dto.getGrigliaAcquistiChild().size() <= 0) { - onFail.run(new Exception("La griglia selezionata (" + griglia.getCodAlis() + ") non esiste o non presenta articoli")); - return; - } - griglia.setDescrLisa(dto.getDescrLisa()); - griglia.setDescrDepo(dto.getDescrDepo()); - griglia.setCountArticoli(dto.getGrigliaAcquistiChild().size()); - - - mGrigliaRepository.saveGriglia(griglia, id -> { - saveLisAToGriglia(dto.getGrigliaAcquistiChild(), griglia, onSaved, onFail); - }, onFail); - }); - }, onFail); - } - - private void saveLisAToGriglia(List articoli, Griglia griglia, RunnableArgs onSave, RunnableArgs onFail) { - List articoliGriglia = new ArrayList<>(); - for (ArticoloDTO articolo : articoli) { - ArticoloGriglia toSave = articolo.toArticoloGriglia(); - toSave.setIdGriglia(griglia.getGrigliaId()); - articoliGriglia.add(toSave); - } - mArticoliGrigliaRepository.saveArticoliToGriglia(articoliGriglia, griglia, () -> onSave.run(griglia), onFail); - } - - public void createNewOrder(Griglia griglia, RunnableArgs onSuccess, RunnableArgs onError) { - Ordine ordine = new Ordine(); - ordine.setDataIns(UtilityDate.getDateInstance()); - ordine.setIdGriglia(griglia.getGrigliaId()); - ordine.setOrderNewProducts(true); - mOrdineRepository.insert(ordine, id -> { - ordine.setOrdineId(id); - onSuccess.run(ordine); - }, onError); - } - - public void deleteOrder(Ordine ordine, Runnable onSuccess, RunnableArgs onFail) { - mOrdineRepository.delete(ordine, onSuccess, onFail); - } -} diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/ui/OrdineAcquistoPvOpenListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/ui/OrdineAcquistoPvOpenListAdapter.java index d0579d82..0b47d50f 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/ui/OrdineAcquistoPvOpenListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/pv_ordini_acquisto/ui/OrdineAcquistoPvOpenListAdapter.java @@ -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())))); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java index 3d7b65ca..cec2e443 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeFragment.java @@ -11,6 +11,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; +import androidx.annotation.NonNull; import androidx.appcompat.widget.AppCompatTextView; import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; @@ -56,7 +57,6 @@ import it.integry.integrywmsnative.gest.spedizione.model.PickingObjectDTO; import it.integry.integrywmsnative.ui.SimpleDividerItemDecoration; import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.BottomSheetMtbColrEditView; import it.integry.integrywmsnative.view.dialogs.DialogConsts; -import it.integry.integrywmsnative.view.dialogs.DialogProgressView; import it.integry.integrywmsnative.view.dialogs.ask_position_of_lu.DialogAskPositionOfLUView; import it.integry.integrywmsnative.view.dialogs.base.DialogSimpleMessageView; import it.integry.integrywmsnative.view.dialogs.choose_art_from_lista_arts.DialogChooseArtFromListaArtsView; @@ -84,8 +84,6 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr private int barcodeScannerIstanceID = -1; - private DialogProgressView mCurrentProgress; - public RettificaGiacenzeFragment() { // Required empty public constructor } @@ -109,16 +107,23 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public void onAttach(@NonNull Context context) { + super.onAttach(context); - mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_rettifica_giacenze, container, false); MainApplication.appComponent .rettificaGiacenzeComponent() .create() .inject(this); mViewModel.setListener(this); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + + mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_rettifica_giacenze, container, false); + mBinding.setLifecycleOwner(this); mBinding.setView(this); @@ -149,7 +154,6 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr private void initBottomSheet() { mBinding.bottomSheetMtbColrEdit.setListener(this); - mBinding.bottomSheetMtbColrEdit.init(mBinding.bottomSheetMtbColrEdit, mBinding.bottomSheetMtbColrEditBackground); } private void initRecyclerView() { @@ -196,16 +200,9 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr mViewModel.init( SettingsManager.i().getUser().getFullname(), - SettingsManager.iDB().getDefaultCausaleRettificaGiacenze(), SettingsManager.i().getUserSession().getDepo().getCodMdep()); } - - @Override - public void onAttach(Context context) { - super.onAttach(context); - } - @Override public void onCreateActionBar(AppCompatTextView titleText, Context context) { titleText.setText(context.getText(R.string.rettifica_giacenze_fragment_title).toString()); @@ -459,7 +456,6 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr () -> onComplete.run(true), () -> onComplete.run(false)) .show(getActivity().getSupportFragmentManager(), "tag"); - ; } @Override @@ -475,7 +471,7 @@ public class RettificaGiacenzeFragment extends BaseFragment implements ITitledFr @Override public void onLUPositionChangeRequest(RunnableArgss onComplete) { - new DialogYesNoView(null, "Vuoi cambiare la posizione della UL corrente?", result -> { + DialogYesNoView.newInstance(null, "Vuoi cambiare la posizione della UL corrente?", result -> { switch (result) { case YES: DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> { diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java index 7c4b0a82..dc697c0c 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/RettificaGiacenzeViewModel.java @@ -51,7 +51,6 @@ public class RettificaGiacenzeViewModel { private RettificaGiacenzeViewModel.Listener mListener; private String mCurrentUser; - private String mDefaultCausale; private String mCurrentCodMdep; private boolean mIsCreatedLU; @@ -71,9 +70,8 @@ public class RettificaGiacenzeViewModel { } - public void init(String currentUser, String defaultCausale, String currentCodMdep) { + public void init(String currentUser, String currentCodMdep) { this.mCurrentUser = currentUser; - this.mDefaultCausale = defaultCausale; this.mCurrentCodMdep = currentCodMdep; this.sendOnLoadingStarted(); @@ -442,7 +440,7 @@ public class RettificaGiacenzeViewModel { }, this::sendError); }; - if (!UtilityString.isNullOrEmpty(mDefaultCausale) && (saveCausale || mAnyEditDone)) { + if (saveCausale || mAnyEditDone) { this.saveCausaleRettificaGiacenze(saveAction); } else { saveAction.run(); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/ui/RettificaGiacenzeMainListAdapter.java b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/ui/RettificaGiacenzeMainListAdapter.java index 143bbc23..bea7a0a5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/ui/RettificaGiacenzeMainListAdapter.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/rettifica_giacenze/ui/RettificaGiacenzeMainListAdapter.java @@ -44,7 +44,6 @@ public class RettificaGiacenzeMainListAdapter extends ExtendedRecyclerView onComplete) { -// DialogInputPesoView.make(this, codTcol, netWeightKG, grossWeightKG, (newCodTcol, newNetWeight, newGrossWeight) -> { -// onComplete.run(newCodTcol, netWeightKG, grossWeightKG); -// }).show(); - - - new DialogInputPesoLuView(null, new BigDecimal(50), new BigDecimal(55), (newCodTcol, newNetWeight, newGrossWeight) -> { -// onComplete.run(newCodTcol, netWeightKG, grossWeightKG); + DialogInputPesoLUView.newInstance(null, new BigDecimal(50), new BigDecimal(55), (newCodTcol, newNetWeight, newGrossWeight) -> { + onComplete.run(newCodTcol, netWeightKG, grossWeightKG); }) .show(getSupportFragmentManager(), "tag"); } @@ -862,7 +858,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo @Override public void onLUPositionChangeRequest(RunnableArgss onComplete) { - new DialogYesNoView(null, "Vuoi cambiare la posizione della UL corrente?", result -> { + DialogYesNoView.newInstance(null, "Vuoi cambiare la posizione della UL corrente?", result -> { switch (result) { case YES: DialogAskPositionOfLUView.makeBase(false, (status, mtbDepoPosizione) -> { @@ -929,7 +925,7 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo @Override public void onCreateDocsRequest() { - new DialogYesNoView("Chiusura ordine", "Vuoi creare i documenti per gli ordini selezionati?", result -> { + DialogYesNoView.newInstance("Chiusura ordine", "Vuoi creare i documenti per gli ordini selezionati?", result -> { this.mViewmodel.onCreateDocsAnswered(result); }).show(this.getSupportFragmentManager(), "tag"); } @@ -984,6 +980,6 @@ public class SpedizioneActivity extends BaseActivity implements SpedizioneViewMo @Override public void onInfoAggiuntiveRequired(MtbColt mtbColt, RunnableArgss onComplete) { - InfoAggiuntiveLUDialog.newInstance(mtbColt, onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog"); + DialogInfoAggiuntiveLU.newInstance(mtbColt, onComplete).show(getSupportFragmentManager(), "InfoAggiuntiveLUDialog"); } } diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java index 4e063ded..e1473094 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/spedizione/SpedizioneViewModel.java @@ -698,7 +698,14 @@ public class SpedizioneViewModel { List scannedMtbColrs = pickingObjectDTO.getTempPickData().getSourceMtbColt().getMtbColr(); - List availableBatchLots = Stream.of(scannedMtbColrs).filter(x -> x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && (x.getPartitaMag() == null || UtilityString.isNullOrEmpty(x.getMtbPartitaMag().getDataScadS()) || UtilityDate.getDateInstance().before(x.getMtbPartitaMag().getDataScadD()))).distinctBy(MtbColr::getPartitaMag).map(x -> x.getPartitaMag() == null ? new MtbPartitaMag().setCodMart(x.getMtbAart().getCodMart()) : x.getMtbPartitaMag()).toList(); + List availableBatchLots = Stream.of(scannedMtbColrs) + .filter(x -> + x.getCodMart().equalsIgnoreCase(pickingObjectDTO.getMtbAart().getCodMart()) && + (x.getPartitaMag() == null || + UtilityString.isNullOrEmpty(x.getMtbPartitaMag().getDataScadS()) || + UtilityDate.getDateInstance().before(x.getMtbPartitaMag().getDataScadD()))) + .distinctBy(MtbColr::getPartitaMag) + .map(x -> x.getPartitaMag() == null ? new MtbPartitaMag().setCodMart(x.getMtbAart().getCodMart()) : x.getMtbPartitaMag()).toList(); //Controllo se una delle partite combacia con quella che voglio evadere if (refMtbColr != null && refMtbColr.getMtbPartitaMag() != null) { @@ -1645,11 +1652,12 @@ public class SpedizioneViewModel { onOrderClosedPrintingDone(); return; } - List closedOrders = Stream.of(this.mTestateOrdini).map(ord -> { - DtbOrdt ordV = new DtbOrdt(); - ordV.setDataOrd(ord.getDataOrdS()).setNumOrd(ord.getNumOrd()).setGestione(ord.getGestione()).setCodAnag(ord.getCodAnagOrd()); - return ordV; - }).toList(); + List closedOrders = Stream.of(this.mTestateOrdini) + .map(ord -> { + DtbOrdt ordV = new DtbOrdt(); + ordV.setDataOrd(ord.getDataOrdS()).setNumOrd(ord.getNumOrd()).setGestione(ord.getGestione()).setCodAnag(ord.getCodAnagOrd()); + return ordV; + }).toList(); dto.setPrintList(closedOrders); printClosedOrders(dto, this::onOrderClosedPrintingDone, ex -> this.sendLUPrintError(ex, this::sendOnLoadingEnded)); diff --git a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java index f75733e3..b3de49d5 100644 --- a/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java +++ b/app/src/main/java/it/integry/integrywmsnative/gest/ultime_consegne_cliente/rest/UltimeConsegneClienteRESTConsumer.java @@ -1,26 +1,18 @@ package it.integry.integrywmsnative.gest.ultime_consegne_cliente.rest; -import com.annimon.stream.Stream; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import javax.inject.Singleton; -import it.integry.integrywmsnative.core.model.GtbAnag; -import it.integry.integrywmsnative.core.rest.consumers.ArticoloRESTConsumer; -import it.integry.integrywmsnative.core.rest.consumers.ISimpleOperationCallback; -import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.expansion.RunnableArgs; -import it.integry.integrywmsnative.core.model.DtbDocr; -import it.integry.integrywmsnative.core.model.MtbAart; -import it.integry.integrywmsnative.core.utility.UtilityDB; -import it.integry.integrywmsnative.core.utility.UtilityQuery; -import it.integry.integrywmsnative.gest.picking_resi.rest.WithdrawableDtbDocr; +import it.integry.integrywmsnative.core.model.GtbAnag; +import it.integry.integrywmsnative.core.rest.consumers.SystemRESTConsumer; import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO; +import it.integry.integrywmsnative.core.utility.UtilityDB; @Singleton public class UltimeConsegneClienteRESTConsumer { @@ -72,155 +64,4 @@ public class UltimeConsegneClienteRESTConsumer { }); } - - public static void loadDocRowFromConsegna(List consegne, RunnableArgs> onComplete, RunnableArgs onFailed) { - List> filterCond = new ArrayList<>(); - - for (int i = 0; i < consegne.size(); i++) { - HashMap filter = new HashMap<>(); - - filter.put("dtb_docr.data_doc", consegne.get(i).getDataDocD()); - filter.put("dtb_docr.num_doc", consegne.get(i).getNumDoc()); - filter.put("dtb_docr.ser_doc", consegne.get(i).getSerDoc()); - filter.put("dtb_docr.cod_anag", consegne.get(i).getCodAnag()); - filter.put("dtb_docr.cod_dtip", consegne.get(i).getCodDtip()); - - filterCond.add(filter); - } - - String sql = "SELECT dtb_docr.[cod_anag]" + - " ,dtb_docr.[cod_dtip]" + - " ,dtb_docr.[data_doc]" + - " ,dtb_docr.[ser_doc]" + - " ,dtb_docr.[num_doc]" + - " ,dtb_docr.[id_riga]" + - " ,dtb_docr.[cod_mart]" + - " ,dtb_docr.[descrizione]" + - " ,dtb_docr.[unt_doc]" + - " ,(dtb_docr.[rap_conv] / dtb_docr.[rap_conv]) as rap_conv" + - " ,(dtb_docr.[qta_doc] * dtb_docr.[rap_conv]) - ISNULL(mtb_colr.qta_col, 0) as qta_doc" + - " ,dtb_docr.[val_unt]" + - " ,dtb_docr.[sconto5]" + - " ,dtb_docr.[sconto6]" + - " ,dtb_docr.[sconto7]" + - " ,dtb_docr.[sconto8]" + - " ,dtb_docr.[cod_aliq]" + - " ,dtb_docr.[perc_prov]" + - " ,dtb_docr.[val_prov]" + - " ,dtb_docr.[data_ord]" + - " ,dtb_docr.[num_ord]" + - " ,dtb_docr.[riga_ord]" + - " ,dtb_docr.[importo_riga]" + - " ,dtb_docr.[cod_col]" + - " ,dtb_docr.[cod_tagl]" + - " ,dtb_docr.[cod_jcom]" + - " ,dtb_docr.[cod_mdep]" + - " ,dtb_docr.[perc_gest]" + - " ,dtb_docr.[val_gest]" + - " ,dtb_docr.[partita_mag]" + - " ,dtb_docr.[val_unt_iva]" + - " ,dtb_docr.[qta_cnf]" + - " ,dtb_docr.[descrizione_estesa]" + - " ,dtb_docr.[costo_unt]" + - " ,dtb_docr.[perc_ispe]" + - " ,dtb_docr.[val_ispe]" + - " ,dtb_docr.[perc_promo]" + - " ,dtb_docr.[val_promo]" + - " ,dtb_docr.[perc_oneri]" + - " ,dtb_docr.[val_oneri]" + - " ,dtb_docr.[flag_evaso_forzato]" + - " ,dtb_docr.[cod_dtip_comp]" + - " ,dtb_docr.[data_doc_comp]" + - " ,dtb_docr.[ser_doc_comp]" + - " ,dtb_docr.[num_doc_comp]" + - " ,dtb_docr.[cod_promo]" + - " ,dtb_docr.[perc_prov2]" + - " ,dtb_docr.[val_prov2]" + - " ,dtb_docr.[cod_art_for]" + - " ,dtb_docr.[unt_doc2]" + - " ,dtb_docr.[qta_doc2]" + - " ,dtb_docr.[unt_doc3]" + - " ,dtb_docr.[qta_doc3]" + - " ,dtb_docr.[num_cnf]" + - " ,dtb_docr.[peso_lordo]" + - " ,dtb_docr.[posizione]" + - " ,dtb_docr.[cod_anag_comp]" + - " ,dtb_docr.[cod_mtip]" + - " ,dtb_docr.[matricola]" + - " ,dtb_docr.[data_iniz_comp]" + - " ,dtb_docr.[data_fine_comp]" + - " ,dtb_docr.[cod_kit]" + - " ,dtb_docr.[cod_alis]" + - " ,dtb_docr.[data_ins_row]" + - " ,dtb_docr.[note] " + - " ,dtb_doct.[gestione] " + - "FROM dtb_docr " + - "INNER JOIN dtb_doct ON dtb_docr.num_doc = dtb_doct.num_doc AND dtb_docr.data_doc = dtb_doct.data_doc AND dtb_docr.cod_anag = dtb_doct.cod_anag AND dtb_docr.cod_dtip = dtb_doct.cod_dtip AND dtb_docr.ser_doc = dtb_doct.ser_doc " + - "INNER JOIN mtb_aart ON dtb_docr.cod_mart = mtb_aart.cod_mart " + - "LEFT OUTER JOIN ctb_cont ON mtb_aart.cod_ccon_ricavi = ctb_cont.cod_ccon " + - "LEFT OUTER JOIN ctb_grup ON ctb_cont.cod_cgrp = ctb_grup.cod_cgrp " + - "LEFT OUTER JOIN mtb_colr ON " + - " dtb_docr.cod_anag = mtb_colr.cod_anag_doc AND " + - " dtb_docr.cod_dtip = mtb_colr.cod_dtip_doc AND " + - " dtb_docr.ser_doc = mtb_colr.ser_doc AND " + - " dtb_docr.data_doc = mtb_colr.data_doc AND " + - " dtb_docr.num_doc = mtb_colr.num_doc AND " + - " dtb_docr.id_riga = mtb_colr.id_riga_doc " + - "WHERE " + - " (ctb_grup.sezione <> 1 OR ctb_grup.sezione IS NULL) AND " + - " dtb_docr.[qta_doc] - ISNULL(mtb_colr.qta_col, 0) > 0 AND" + - " ( " + - UtilityQuery.concatFieldListInWhereCond(filterCond) + - " ) " + - "ORDER BY cod_mart"; - - - Type typeOfObjectsList = new TypeToken>() { - }.getType(); - SystemRESTConsumer.processSqlStatic(sql, typeOfObjectsList, new ISimpleOperationCallback>() { - @Override - public void onSuccess(ArrayList values) { - - if (values != null && values.size() > 0) { - List codMarts = Stream.of(values) - .map(DtbDocr::getCodMart) - .withoutNulls() - .distinct() - .toList(); - - ArticoloRESTConsumer.getByCodMartsStatic(codMarts, arts -> { - - if (arts != null && arts.size() > 0) { - for (DtbDocr value : values) { - - MtbAart foundMtbAart = null; - - List mtbAartStream = Stream.of(arts) - .filter(x -> x.getCodMart().equalsIgnoreCase(value.getCodMart())).toList(); - - if (mtbAartStream != null && mtbAartStream.size() > 0) { - foundMtbAart = mtbAartStream.get(0); - } - - value.setMtbAart(foundMtbAart); - } - - - if (onComplete != null) onComplete.run(values); - } - - }, onFailed); - - } else { - if (onComplete != null) onComplete.run(values); - } - } - - @Override - public void onFailed(Exception ex) { - if (onFailed != null) onFailed.run(ex); - } - }); - } - } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__base/BottomSheetFragmentBaseView.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__base/BottomSheetFragmentBaseView.java index 7720e652..d2765734 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__base/BottomSheetFragmentBaseView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__base/BottomSheetFragmentBaseView.java @@ -3,12 +3,14 @@ package it.integry.integrywmsnative.view.bottom_sheet__base; import android.content.Context; import android.util.AttributeSet; import android.view.View; +import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; import com.google.android.material.bottomsheet.BottomSheetBehavior; +import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.utility.UtilityLogger; import it.integry.integrywmsnative.view.bottom_sheet__base.exceptions.BottomSheetFragmentViewNotInitializedException; @@ -16,16 +18,31 @@ public abstract class BottomSheetFragmentBaseView extends ConstraintLayout { protected Context mContext; protected View parentView; + protected View backgroundView; + protected int backgroundViewId; - protected BottomSheetBehavior mBottomSheetBehavior; + protected BottomSheetBehavior mBottomSheetBehavior; - public BottomSheetFragmentBaseView(Context context) { - this(context, null); - } public BottomSheetFragmentBaseView(Context context, AttributeSet attrs) { super(context, attrs); this.mContext = context; + + int backgroundViewId = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res-auto", "backgroundView", -1); + int parentViewId = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res-auto", "parentView", -1); + +// if(backgroundViewId == -1) +// throw new RuntimeException("Please declare app:backgroundView on BottomSheet"); + + if (parentViewId == -1) + throw new RuntimeException("Please declare app:parentView on BottomSheet"); + + + this.init( + getRootView().findViewById(parentViewId), + null, + backgroundViewId); + } public BottomSheetFragmentBaseView(Context context, AttributeSet attrs, int defStyleAttr) { @@ -36,14 +53,41 @@ public abstract class BottomSheetFragmentBaseView extends ConstraintLayout { this(context, attrs); } + private void init(View parentView, View backgroundView, int backgroundViewId) { + this.parentView = parentView; +// this.backgroundView = backgroundView; +// this.backgroundViewId = backgroundViewId; + } - public void init(View view, View backgroundView) { - this.parentView = view; - this.mBottomSheetBehavior = BottomSheetBehavior.from(this.parentView); + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + + this.mBottomSheetBehavior = AutoCloseBottomSheetBehavior.from(this.parentView); this.mBottomSheetBehavior.addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { @Override public void onStateChanged(@NonNull View bottomSheet, int newState) { +// if(backgroundViewId != -1) { +// backgroundView = ((View) getParent()).findViewById(backgroundViewId); +// } + + if (backgroundView == null) { + var rootView = getRootParent((ViewGroup) getParent()); + backgroundView = rootView.findViewById(R.id.bottom_sheet__background); + backgroundView.setOnClickListener(v -> { + collapse(); + }); + +// backgroundView = new View(mContext, null); +// backgroundView.setBackgroundColor(getResources().getColor(R.color.bottom_sheet_background_color)); +// backgroundView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); +// backgroundView.setElevation(UtilityDimension.convertDpToPixel(0, mContext)); +// backgroundView.setAlpha(0.6f); + +// rootView.addView(backgroundView, 0); + } + if (newState == BottomSheetBehavior.STATE_COLLAPSED && backgroundView != null) backgroundView.setVisibility(View.GONE); @@ -52,7 +96,7 @@ public abstract class BottomSheetFragmentBaseView extends ConstraintLayout { @Override public void onSlide(@NonNull View bottomSheet, float slideOffset) { - if(backgroundView != null) { + if (backgroundView != null) { backgroundView.setVisibility(View.VISIBLE); backgroundView.setAlpha(slideOffset); } @@ -62,8 +106,27 @@ public abstract class BottomSheetFragmentBaseView extends ConstraintLayout { }); } + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + + + } + + + private ViewGroup getRootParent(ViewGroup viewGroup) { + if (viewGroup.getParent() != null && viewGroup.getParent() instanceof ViewGroup) { + var parent = (ViewGroup) viewGroup.getParent(); + + if (parent != null) + return getRootParent(parent); + } + + return viewGroup; + } + public void expand() { - if(this.mBottomSheetBehavior == null) { + if (this.mBottomSheetBehavior == null) { UtilityLogger.error(new BottomSheetFragmentViewNotInitializedException()); return; } @@ -72,7 +135,7 @@ public abstract class BottomSheetFragmentBaseView extends ConstraintLayout { } public void collapse() { - if(this.mBottomSheetBehavior == null) { + if (this.mBottomSheetBehavior == null) { UtilityLogger.error(new BottomSheetFragmentViewNotInitializedException()); return; } @@ -90,7 +153,7 @@ public abstract class BottomSheetFragmentBaseView extends ConstraintLayout { public State getState() { - if(this.mBottomSheetBehavior == null) { + if (this.mBottomSheetBehavior == null) { UtilityLogger.error(new BottomSheetFragmentViewNotInitializedException()); return null; } @@ -99,17 +162,17 @@ public abstract class BottomSheetFragmentBaseView extends ConstraintLayout { } public void toggle() { - if(isExpanded()) collapse(); + if (isExpanded()) collapse(); else expand(); } protected State mapState(int stateInt) { - if(stateInt == BottomSheetBehavior.STATE_DRAGGING) return State.DRAGGING; - if(stateInt == BottomSheetBehavior.STATE_SETTLING) return State.SETTLING; - if(stateInt == BottomSheetBehavior.STATE_EXPANDED) return State.EXPANDED; - if(stateInt == BottomSheetBehavior.STATE_COLLAPSED) return State.COLLAPSED; - if(stateInt == BottomSheetBehavior.STATE_HIDDEN) return State.HIDDEN; - if(stateInt == BottomSheetBehavior.STATE_HALF_EXPANDED) return State.HALF_EXPANDED; + if (stateInt == BottomSheetBehavior.STATE_DRAGGING) return State.DRAGGING; + if (stateInt == BottomSheetBehavior.STATE_SETTLING) return State.SETTLING; + if (stateInt == BottomSheetBehavior.STATE_EXPANDED) return State.EXPANDED; + if (stateInt == BottomSheetBehavior.STATE_COLLAPSED) return State.COLLAPSED; + if (stateInt == BottomSheetBehavior.STATE_HIDDEN) return State.HIDDEN; + if (stateInt == BottomSheetBehavior.STATE_HALF_EXPANDED) return State.HALF_EXPANDED; return null; } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditComponent.java new file mode 100644 index 00000000..99839e0c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditComponent.java @@ -0,0 +1,15 @@ +package it.integry.integrywmsnative.view.bottom_sheet__item_edit; + +import dagger.Subcomponent; + +@Subcomponent +public interface BottomSheetItemEditComponent { + + @Subcomponent.Factory + interface Factory { + BottomSheetItemEditComponent create(); + } + + void inject(BottomSheetItemEditView bottomSheetItemEditView); + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditDTO.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditDTO.java new file mode 100644 index 00000000..3d07199b --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditDTO.java @@ -0,0 +1,58 @@ +package it.integry.integrywmsnative.view.bottom_sheet__item_edit; + +import java.math.BigDecimal; + +public class BottomSheetItemEditDTO { + + private String codMart; + private String descrizioneArticolo; + + private BigDecimal qta; + private BigDecimal numCnf; + private String untMis; + + public String getCodMart() { + return codMart; + } + + public BottomSheetItemEditDTO setCodMart(String codMart) { + this.codMart = codMart; + return this; + } + + public String getDescrizioneArticolo() { + return descrizioneArticolo; + } + + public BottomSheetItemEditDTO setDescrizioneArticolo(String descrizioneArticolo) { + this.descrizioneArticolo = descrizioneArticolo; + return this; + } + + public BigDecimal getQta() { + return qta; + } + + public BottomSheetItemEditDTO setQta(BigDecimal qta) { + this.qta = qta; + return this; + } + + public BigDecimal getNumCnf() { + return numCnf; + } + + public BottomSheetItemEditDTO setNumCnf(BigDecimal numCnf) { + this.numCnf = numCnf; + return this; + } + + public String getUntMis() { + return untMis; + } + + public BottomSheetItemEditDTO setUntMis(String untMis) { + this.untMis = untMis; + return this; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditModule.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditModule.java new file mode 100644 index 00000000..c750b310 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.bottom_sheet__item_edit; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = BottomSheetItemEditComponent.class) +public class BottomSheetItemEditModule { + + @Provides + BottomSheetItemEditViewModel providesBottomSheetItemEditViewModel() { + return new BottomSheetItemEditViewModel(); + } + +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditView.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditView.java new file mode 100644 index 00000000..cfd2ca9c --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditView.java @@ -0,0 +1,108 @@ +package it.integry.integrywmsnative.view.bottom_sheet__item_edit; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; + +import androidx.databinding.ObservableField; + +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; +import it.integry.integrywmsnative.databinding.BottomSheetItemEditViewBinding; +import it.integry.integrywmsnative.view.bottom_sheet__base.BottomSheetFragmentBaseView; + +public class BottomSheetItemEditView extends BottomSheetFragmentBaseView { + + + @Inject + BottomSheetItemEditViewModel mViewModel; + + public ObservableField enabledEditButton = new ObservableField<>(true); + public ObservableField enabledDeleteButton = new ObservableField<>(true); + + private final BottomSheetItemEditViewBinding mBinding; + private Listener mListener; + + public BottomSheetItemEditView(Context context, AttributeSet attrs) { + super(context, attrs); + mBinding = BottomSheetItemEditViewBinding.inflate(LayoutInflater.from(context), this, true); + + MainApplication.appComponent + .bottomSheetItemEditComponent() + .create() + .inject(this); + + + + mBinding.setViewModel(mViewModel); + mBinding.setView(this); + } + + public BottomSheetItemEditView setItem(BottomSheetItemEditDTO item) { + this.mBinding.invalidateAll(); + + this.mViewModel.init(item); + + this.mBinding.executePendingBindings(); + this.parentView.requestLayout(); + + return this; + } + + public BottomSheetItemEditView enableEditButton() { + this.enabledEditButton.set(true); + return this; + } + + public BottomSheetItemEditView disableEditButton() { + this.enabledEditButton.set(false); + return this; + } + + public BottomSheetItemEditView enableDeleteButton() { + this.enabledDeleteButton.set(true); + return this; + } + + public BottomSheetItemEditView disableDeleteButton() { + this.enabledDeleteButton.set(false); + return this; + } + + + + public void editItem() { + if(this.mListener != null) this.mListener.onItemEdit(); + this.collapse(); + } + + public void deleteItem() { + if(this.mListener != null) this.mListener.onItemDelete(); + this.collapse(); + } + + + + @Override + protected void onStateChangedCallback(State newState) { + if(newState == State.COLLAPSED) this.mViewModel.init(null); + } + + @Override + protected void onSlideCallback(float slideOffset) { + + } + + + public BottomSheetItemEditView setListener(Listener listener) { + this.mListener = listener; + return this; + } + + public interface Listener { + void onItemEdit(); + + void onItemDelete(); + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditViewModel.java new file mode 100644 index 00000000..0b7395b6 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__item_edit/BottomSheetItemEditViewModel.java @@ -0,0 +1,16 @@ +package it.integry.integrywmsnative.view.bottom_sheet__item_edit; + +import androidx.lifecycle.MutableLiveData; + +public class BottomSheetItemEditViewModel { + + private final MutableLiveData mCurrentItem = new MutableLiveData<>(); + + public void init(BottomSheetItemEditDTO item) { + this.mCurrentItem.postValue(item); + } + + public MutableLiveData getCurrentItem() { + return mCurrentItem; + } +} diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java index 54514c3e..7bd1451a 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__lu_content/BottomSheetFragmentLUContentView.java @@ -42,7 +42,6 @@ public class BottomSheetFragmentLUContentView extends BottomSheetFragmentBaseVie mBinding.setViewModel(mViewModel); mBinding.bottomSheetMtbColrEdit.setListener(this); - mBinding.bottomSheetMtbColrEdit.init(mBinding.bottomSheetMtbColrEdit, mBinding.bottomSheetMtbColrEditBackground); mBinding.titleLayout.setOnClickListener(new OnSingleClickListener() { @Override diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__mtb_colr_edit/BottomSheetMtbColrEditView.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__mtb_colr_edit/BottomSheetMtbColrEditView.java index ef02a59a..70f7ec55 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__mtb_colr_edit/BottomSheetMtbColrEditView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__mtb_colr_edit/BottomSheetMtbColrEditView.java @@ -16,8 +16,8 @@ import it.integry.integrywmsnative.view.bottom_sheet__mtb_colr_edit.exceptions.N public class BottomSheetMtbColrEditView extends BottomSheetFragmentBaseView { - private BottomSheetMtbColrEditBinding mBinding; - private BottomSheetMtbColrEditViewModel mViewModel; + private final BottomSheetMtbColrEditBinding mBinding; + private final BottomSheetMtbColrEditViewModel mViewModel; public ObservableField enabledEditButton = new ObservableField<>(true); public ObservableField enabledDeleteButton = new ObservableField<>(true); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__mtb_colr_edit/BottomSheetMtbColrEditViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__mtb_colr_edit/BottomSheetMtbColrEditViewModel.java index d237c14c..019096b1 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__mtb_colr_edit/BottomSheetMtbColrEditViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/bottom_sheet__mtb_colr_edit/BottomSheetMtbColrEditViewModel.java @@ -6,7 +6,7 @@ import it.integry.integrywmsnative.core.model.MtbColr; public class BottomSheetMtbColrEditViewModel { - private ObservableField mtbColr = new ObservableField<>(); + private final ObservableField mtbColr = new ObservableField<>(); public MtbColr getMtbColr() { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskAction.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskAction.java deleted file mode 100644 index 90ebbbaa..00000000 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskAction.java +++ /dev/null @@ -1,58 +0,0 @@ -package it.integry.integrywmsnative.view.dialogs; - -import android.app.Activity; -import android.app.Dialog; -import android.content.Context; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.view.LayoutInflater; - -import androidx.databinding.DataBindingUtil; - -import it.integry.integrywmsnative.R; -import it.integry.integrywmsnative.core.expansion.BaseDialog; -import it.integry.integrywmsnative.core.utility.UtilityDialog; -import it.integry.integrywmsnative.databinding.DialogAskActionEditDeleteBinding; - -public class DialogAskAction { - private Activity mContext; - private Dialog mDialog; - private Runnable mOnEditSelected; - private Runnable mOnDeleteSelected; - - private DialogAskAction(Activity context,String title, String subTitle, Runnable onEditSelected, Runnable onDeleteSelected) { - mContext = context; - mOnEditSelected = onEditSelected; - mOnDeleteSelected = onDeleteSelected; - - LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - DialogAskActionEditDeleteBinding mBinding = DataBindingUtil.inflate(inflater, R.layout.dialog_ask_action_edit_delete, null, false); - mBinding.setViewmodel(this); - - mDialog = new BaseDialog(context); - mDialog.setContentView(mBinding.getRoot()); - UtilityDialog.setTo90PercentWidth(mContext, mDialog); - mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); - - mBinding.bottomSheetActionsTitle.setText(title); - mBinding.bottomSheetActionsSubtitle.setText(subTitle); - - } - - - public static Dialog make(Activity context, String title, String subtitle, Runnable onEdit, Runnable onDelete) { - return new DialogAskAction(context, title,subtitle,onEdit,onDelete).mDialog; - } - - - public void onEdit(){ - mDialog.dismiss(); - mOnEditSelected.run(); - } - public void onDelete(){ - mDialog.dismiss(); - mOnDeleteSelected.run(); - } - -} - diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskActionView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskActionView.java new file mode 100644 index 00000000..05535a7d --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/DialogAskActionView.java @@ -0,0 +1,66 @@ +package it.integry.integrywmsnative.view.dialogs; + +import android.app.Dialog; +import android.os.Bundle; +import android.view.LayoutInflater; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; +import it.integry.integrywmsnative.databinding.DialogAskActionEditDeleteBinding; + +public class DialogAskActionView extends BaseDialogFragment { + + private final String mTitle; + private final String mSubtitle; + + private final Runnable mOnEditSelected; + private final Runnable mOnDeleteSelected; + + + + public static DialogAskActionView newInstance(String title, String subtitle, Runnable onEdit, Runnable onDelete) { + return new DialogAskActionView(title, subtitle, onEdit, onDelete); + } + + private DialogAskActionView(String title, String subTitle, Runnable onEditSelected, Runnable onDeleteSelected) { + super(); + + mTitle = title; + mSubtitle = subTitle; + + mOnEditSelected = onEditSelected; + mOnDeleteSelected = onDeleteSelected; + } + + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + DialogAskActionEditDeleteBinding mBinding = DialogAskActionEditDeleteBinding.inflate(LayoutInflater.from(requireContext()), null, false); + mBinding.setLifecycleOwner(this); + mBinding.setViewmodel(this); + + var alertDialogBuilder = new MaterialAlertDialogBuilder(requireContext()) + .setView(mBinding.getRoot()); + + mBinding.bottomSheetActionsTitle.setText(mTitle); + mBinding.bottomSheetActionsSubtitle.setText(mSubtitle); + + return alertDialogBuilder.create(); + } + + public void onEdit() { + dismiss(); + mOnEditSelected.run(); + } + + public void onDelete() { + dismiss(); + mOnDeleteSelected.run(); + } + +} + diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialog.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/DialogInfoAggiuntiveLU.java similarity index 94% rename from app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialog.java rename to app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/DialogInfoAggiuntiveLU.java index 9c6bf1da..fa732a2d 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialog.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/DialogInfoAggiuntiveLU.java @@ -35,7 +35,7 @@ import it.integry.integrywmsnative.databinding.DialogNoteAggiuntiveNuovaUlBindin import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloAdapter; import it.integry.integrywmsnative.view.dialogs.input_lu_prod.adapter.DialogInputLUProdTipoColloListModel; -public class InfoAggiuntiveLUDialog extends BaseDialogFragment implements InfoAggiuntiveLUDialogViewModel.Listener { +public class DialogInfoAggiuntiveLU extends BaseDialogFragment implements InfoAggiuntiveLUDialogViewModel.Listener { @Inject InfoAggiuntiveLUDialogViewModel mViewModel; @@ -48,15 +48,15 @@ public class InfoAggiuntiveLUDialog extends BaseDialogFragment implements InfoAg public ObservableField selectedMtbTcol = new ObservableField<>(); public ObservableField currentMtbTCol = new ObservableField<>(); - public static InfoAggiuntiveLUDialog newInstance(@NotNull RunnableArgss onComplete) { - return new InfoAggiuntiveLUDialog(null, onComplete); + public static DialogInfoAggiuntiveLU newInstance(@NotNull RunnableArgss onComplete) { + return new DialogInfoAggiuntiveLU(null, onComplete); } - public static InfoAggiuntiveLUDialog newInstance(MtbColt mtbColt, @NotNull RunnableArgss onComplete) { - return new InfoAggiuntiveLUDialog(mtbColt, onComplete); + public static DialogInfoAggiuntiveLU newInstance(MtbColt mtbColt, @NotNull RunnableArgss onComplete) { + return new DialogInfoAggiuntiveLU(mtbColt, onComplete); } - private InfoAggiuntiveLUDialog(MtbColt mtbColt, @NotNull RunnableArgss onComplete) { + private DialogInfoAggiuntiveLU(MtbColt mtbColt, @NotNull RunnableArgss onComplete) { super(); this.mOnComplete = onComplete; this.currentMtbColt = mtbColt; diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogComponent.java index e5f7969c..276788a8 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogComponent.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/info_aggiuntive_lu/InfoAggiuntiveLUDialogComponent.java @@ -10,6 +10,6 @@ public interface InfoAggiuntiveLUDialogComponent { InfoAggiuntiveLUDialogComponent create(); } - void inject(InfoAggiuntiveLUDialog infoAggiuntiveLUDialog); + void inject(DialogInfoAggiuntiveLU infoAggiuntiveLUDialog); } diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUComponent.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUComponent.java new file mode 100644 index 00000000..e294bfdb --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUComponent.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.input_peso_lu; + +import dagger.Subcomponent; + +@Subcomponent +public interface DialogInputPesoLUComponent { + + @Subcomponent.Factory + interface Factory { + DialogInputPesoLUComponent create(); + } + + void inject(DialogInputPesoLUView dialogInputPesoLUView); +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUModule.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUModule.java new file mode 100644 index 00000000..097dc769 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUModule.java @@ -0,0 +1,14 @@ +package it.integry.integrywmsnative.view.dialogs.input_peso_lu; + +import dagger.Module; +import dagger.Provides; + +@Module(subcomponents = DialogInputPesoLUComponent.class) +public class DialogInputPesoLUModule { + + @Provides + DialogInputPesoLUViewModel providesDialogInputPesoLUViewModel() { + return new DialogInputPesoLUViewModel(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLuView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUView.java similarity index 67% rename from app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLuView.java rename to app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUView.java index a2db677a..2cc755d0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLuView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUView.java @@ -1,13 +1,13 @@ package it.integry.integrywmsnative.view.dialogs.input_peso_lu; import android.app.Dialog; +import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.widget.ArrayAdapter; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; import com.annimon.stream.Optional; import com.annimon.stream.Stream; @@ -16,8 +16,12 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.math.BigDecimal; import java.util.List; +import javax.inject.Inject; + +import it.integry.integrywmsnative.MainApplication; import it.integry.integrywmsnative.R; import it.integry.integrywmsnative.core.di.BindableString; +import it.integry.integrywmsnative.core.expansion.BaseDialogFragment; import it.integry.integrywmsnative.core.expansion.RunnableArgsss; import it.integry.integrywmsnative.core.model.MtbTCol; import it.integry.integrywmsnative.core.rest.consumers.MagazzinoRESTConsumer; @@ -25,9 +29,17 @@ import it.integry.integrywmsnative.core.utility.UtilityExceptions; import it.integry.integrywmsnative.core.utility.UtilityNumber; import it.integry.integrywmsnative.databinding.DialogInputPesoLuBinding; -public class DialogInputPesoLuView extends DialogFragment { +public class DialogInputPesoLUView extends BaseDialogFragment { + + @Inject + DialogInputPesoLUViewModel mViewModel; + + @Inject + MagazzinoRESTConsumer magazzinoRESTConsumer; private DialogInputPesoLuBinding mBindings; + private Context mContext; + private RunnableArgsss onDialogDismiss; public BindableString codTcol = new BindableString(); @@ -39,7 +51,13 @@ public class DialogInputPesoLuView extends DialogFragment { private ArrayAdapter codTcolArrayAdapter = null; - public DialogInputPesoLuView(String codTcol, BigDecimal netWeight, BigDecimal grossWeight, RunnableArgsss onDialogDismiss) { + //Pass here all external parameters + public static DialogInputPesoLUView newInstance(String codTcol, BigDecimal netWeight, BigDecimal grossWeight, RunnableArgsss onDialogDismiss) { + return new DialogInputPesoLUView(codTcol, netWeight, grossWeight, onDialogDismiss); + } + + private DialogInputPesoLUView(String codTcol, BigDecimal netWeight, BigDecimal grossWeight, RunnableArgsss onDialogDismiss) { + super(); this.onDialogDismiss = onDialogDismiss; this.codTcol.set(codTcol); @@ -47,44 +65,39 @@ public class DialogInputPesoLuView extends DialogFragment { this.grossWeight.set(UtilityNumber.decimalToString(grossWeight)); } + @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { - mBindings = DialogInputPesoLuBinding.inflate(LayoutInflater.from(requireContext()), null, false); + this.mContext = requireContext(); + + mBindings = DialogInputPesoLuBinding.inflate(LayoutInflater.from(this.mContext), null, false); + mBindings.setLifecycleOwner(this); mBindings.setView(this); + MainApplication.appComponent + .dialogInputPesoLUComponent() + .create() + .inject(this); + this.init(); - var alertDialog = new MaterialAlertDialogBuilder(requireContext()) + var cancelable = false; + + var alertDialog = new MaterialAlertDialogBuilder(this.mContext) .setView(mBindings.getRoot()) - .setCancelable(false) - .setPositiveButton(R.string.confirm, (dialog, which) -> { - String newCodTcol = null; - - if(codTcol.get() != null) { - Optional newCodTcolOptional = Stream.of(codTcolList) - .filter(x -> (x.getCodTcol() + " - " + x.getDescrizione()).equalsIgnoreCase(codTcol.get())) - .findSingle(); - - if(newCodTcolOptional.isPresent()) newCodTcol = newCodTcolOptional.get().getCodTcol(); - } - - - BigDecimal netWeightDecimal = new BigDecimal(netWeight.get()); - BigDecimal grossWeightDecimal = new BigDecimal(grossWeight.get()); - - onDialogDismiss.run(newCodTcol, netWeightDecimal, grossWeightDecimal); - }) + .setCancelable(cancelable) .create(); - alertDialog.setCanceledOnTouchOutside(false); + + alertDialog.setCanceledOnTouchOutside(cancelable); return alertDialog; } + + private void init() { -// final DialogProgressView progressDialog = UtilityProgress.createDefaultProgressDialog(mContext); - - MagazzinoRESTConsumer.getTipiColloStatic(codTcols -> { + magazzinoRESTConsumer.getTipiCollo(codTcols -> { this.codTcolList = codTcols; List codTcolDescriptions = Stream.of(codTcols) @@ -112,5 +125,4 @@ public class DialogInputPesoLuView extends DialogFragment { } - -} +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUViewModel.java new file mode 100644 index 00000000..3c6534c9 --- /dev/null +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_peso_lu/DialogInputPesoLUViewModel.java @@ -0,0 +1,5 @@ +package it.integry.integrywmsnative.view.dialogs.input_peso_lu; + +public class DialogInputPesoLUViewModel { + +} \ No newline at end of file diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java index 3b396079..7d870f63 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/input_quantity_v2/DialogInputQuantityV2View.java @@ -116,6 +116,11 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia public DialogInputQuantityV2View() { super(); // openInFullScreen(); + + MainApplication.appComponent + .dialogInputQuantityV2Component() + .create() + .inject(this); } @Override @@ -123,6 +128,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, R.style.AppTheme_NewMaterial_Dialog_FullscreenDialog); this.initBarcode(); + } @NonNull @@ -142,11 +148,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia mBindings.setLifecycleOwner(this); mBindings.toolbar.setTitle("Inserimento articolo"); - MainApplication.appComponent - .dialogInputQuantityV2Component() - .create() - .inject(this); - this.mViewModel .setMtbAart(mDialogInputQuantityV2DTO.getMtbAart()) .setInitialNumCnf(mDialogInputQuantityV2DTO.getInitialNumCnf()) @@ -186,7 +187,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia if (mDialogInputQuantityV2DTO.isSaveOnImeDone()) { - mBindings.inputNumCnfText.setOnEditorActionListener((v, actionId, event) -> { if (actionId == EditorInfo.IME_ACTION_DONE) { save(); @@ -195,7 +195,6 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia return false; }); } - this.onLoadingEnded(); if (mDialogInputQuantityV2DTO.isFocusOnStart()) { getDialog().setOnShowListener(dialog -> { @@ -236,7 +235,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia super.onDestroyView(); BarcodeManager.removeCallback(mBarcodeScannerIstanceID); - if (mAbort) this.mOnAbort.run(); + if (mAbort && this.mOnAbort != null) this.mOnAbort.run(); } private void initBarcode() { @@ -465,7 +464,7 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia this.enabledNotes.set(this.mDialogInputQuantityV2DTO.isNotesAllowed()); this.showProductLotStatus.set(SettingsManager.iDB().isNotifyLotStatus()); this.enabledLUCloseButton.set(this.mDialogInputQuantityV2DTO.isCanLUBeClosed()); - this.currentTaraArticolo.set(this.mViewModel.getMtbAart().getTaraKg()); + this.currentTaraArticolo.set(this.mViewModel.getMtbAart().getTaraKg() != null ? this.mViewModel.getMtbAart().getTaraKg() : BigDecimal.ZERO); if (this.mDialogInputQuantityV2DTO.getMtbAart().isFlagQtaCnfFissaBoolean() && this.mDialogInputQuantityV2DTO.getTotalQtaOrd() != null && !this.mDialogInputQuantityV2DTO.getTotalQtaOrd().equals(BigDecimal.ZERO) && !(this.mDialogInputQuantityV2DTO.getQtaCnfOrd().compareTo(BigDecimal.ZERO) == 0)) { int numCnftoTake = this.mDialogInputQuantityV2DTO.getTotalQtaOrd().divide(this.mDialogInputQuantityV2DTO.getQtaCnfOrd(), 0, RoundingMode.DOWN).intValue(); @@ -508,8 +507,10 @@ public class DialogInputQuantityV2View extends BaseDialogFragment implements Dia this.currentQtaTot.set(this.mViewModel.getQtaTot()); MtbAart articolo = this.mViewModel.getMtbAart(); + if (articolo != null && !articolo.isFlagQtaCnfFissaBoolean()) { - BigDecimal taraTot = this.mViewModel.getNumCnf().multiply(articolo.getTaraKg()); + BigDecimal taraTot = articolo.getTaraKg() != null ? this.mViewModel.getNumCnf().multiply(articolo.getTaraKg()) : BigDecimal.ZERO; + this.currentTaraTot.set(taraTot); this.currentPesoLordo.set(this.mViewModel.getQtaTot().add(taraTot)); this.flagShowCnfToTakeLabel.set(false); diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java index 4488525f..291b1ff7 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_art/DialogScanArtView.java @@ -10,7 +10,6 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; import com.annimon.stream.Stream; @@ -20,7 +19,6 @@ import javax.inject.Inject; import it.integry.barcode_base_android_library.model.BarcodeScanDTO; 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.expansion.BaseDialogFragment; @@ -62,7 +60,7 @@ public class DialogScanArtView extends BaseDialogFragment implements DialogScanA public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { this.initBarcode(); - mBindings = DataBindingUtil.inflate(inflater, R.layout.dialog_scan_art, container, false); + mBindings = DialogScanArtBinding.inflate(inflater, container, false); mBindings.setLifecycleOwner(this); MainApplication.appComponent diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java index e1219bcc..6493cea0 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/scan_or_create_lu/DialogScanOrCreateLUViewModel.java @@ -167,7 +167,7 @@ public class DialogScanOrCreateLUViewModel { private void executeEAN13(BarcodeScanDTO barcodeScanDTO, Runnable onComplete) { this.mArticoloRESTConsumer.getByBarcodeProd(barcodeScanDTO.getStringValue(), articoli -> { - if (articoli.size() == 1) { + if (articoli != null && articoli.size() == 1) { MtbAart articolo = articoli.get(0); MtbDepoPosizione posizione = UtilityPosizione.getFromCache(articolo.getPosizione()); if (posizione != null && posizione.isFlagMonoCollo()) { diff --git a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/yes_no/DialogYesNoView.java b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/yes_no/DialogYesNoView.java index 40d63adc..62891bbe 100644 --- a/app/src/main/java/it/integry/integrywmsnative/view/dialogs/yes_no/DialogYesNoView.java +++ b/app/src/main/java/it/integry/integrywmsnative/view/dialogs/yes_no/DialogYesNoView.java @@ -23,7 +23,11 @@ public class DialogYesNoView extends DialogFragment { private final String description; private final RunnableArgs onDialogDismiss; - public DialogYesNoView(final String title, final String description, RunnableArgs onDialogDismiss) { + public static DialogYesNoView newInstance(final String title, final String description, RunnableArgs onDialogDismiss) { + return new DialogYesNoView(title, description, onDialogDismiss); + } + + private DialogYesNoView(final String title, final String description, RunnableArgs onDialogDismiss) { super(); this.title = title; diff --git a/app/src/main/res/drawable/bottom_sheet_background.xml b/app/src/main/res/drawable/bottom_sheet_background.xml new file mode 100644 index 00000000..ff847aa3 --- /dev/null +++ b/app/src/main/res/drawable/bottom_sheet_background.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/easter_egg__horror_blood.xml b/app/src/main/res/drawable/easter_egg__horror_blood.xml new file mode 100644 index 00000000..adc323f1 --- /dev/null +++ b/app/src/main/res/drawable/easter_egg__horror_blood.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/gray_detail_background_round4.xml b/app/src/main/res/drawable/gray_detail_background_round4.xml index 885d9a58..17ce17f0 100644 --- a/app/src/main/res/drawable/gray_detail_background_round4.xml +++ b/app/src/main/res/drawable/gray_detail_background_round4.xml @@ -4,8 +4,8 @@ diff --git a/app/src/main/res/drawable/ic_black_upload.xml b/app/src/main/res/drawable/ic_black_upload.xml index 6edadf8e..b4ec3e7e 100644 --- a/app/src/main/res/drawable/ic_black_upload.xml +++ b/app/src/main/res/drawable/ic_black_upload.xml @@ -1,4 +1,5 @@ diff --git a/app/src/main/res/drawable/ic_inventario_header_outline.png b/app/src/main/res/drawable/ic_inventario_header_outline.png new file mode 100644 index 00000000..fb2e1527 Binary files /dev/null and b/app/src/main/res/drawable/ic_inventario_header_outline.png differ diff --git a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml index 5452db46..73d8344b 100644 --- a/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml +++ b/app/src/main/res/layout-land-hdpi/dialog_input_quantity_v2.xml @@ -721,7 +721,7 @@ android:visibility="@{viewmodel.canPartitaMagBeChanged() || viewmodel.partitaMag != null ? View.VISIBLE : View.GONE}" tools:layout_weight="1"> - - - - - - - - - + android:weightSum="3"> - - - diff --git a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml index 1444c7e1..4bafa159 100644 --- a/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml +++ b/app/src/main/res/layout/activity_accettazione_ordine_inevaso.xml @@ -202,7 +202,8 @@ app:behavior_hideable="false" app:behavior_peekHeight="66dp" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" - app:visibility="@{accettazioneView.bottomSheetEnabled}" /> + app:visibility="@{accettazioneView.bottomSheetEnabled}" + app:parentView="@id/bottom_sheet_lu_content"/> 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 de1e7a22..b8c1d53a 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 @@ -47,7 +47,7 @@ + android:layout_height="?attr/actionBarSize"> + app:layout_behavior=".view.bottom_sheet__base.AutoCloseBottomSheetBehavior" + app:parentView="@id/bottom_sheet__mtb_colr_edit" + app:backgroundView="@id/bottom_sheet__mtb_colr_edit__background"/> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_contenuto_bancale.xml b/app/src/main/res/layout/activity_contenuto_bancale.xml index e6c2bf2c..34b600f4 100644 --- a/app/src/main/res/layout/activity_contenuto_bancale.xml +++ b/app/src/main/res/layout/activity_contenuto_bancale.xml @@ -38,7 +38,7 @@ diff --git a/app/src/main/res/layout/activity_lista_bancali.xml b/app/src/main/res/layout/activity_lista_bancali.xml index 511e76ab..8d7a59b1 100644 --- a/app/src/main/res/layout/activity_lista_bancali.xml +++ b/app/src/main/res/layout/activity_lista_bancali.xml @@ -20,7 +20,7 @@ + android:layout_height="?attr/actionBarSize"/> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 9b2b5087..693d9d75 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -7,7 +7,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/full_white" - android:fitsSystemWindows="true" + android:fitsSystemWindows="false" tools:openDrawer="start"> + + diff --git a/app/src/main/res/layout/activity_picking_inventario.xml b/app/src/main/res/layout/activity_picking_inventario.xml new file mode 100644 index 00000000..3ded5a0e --- /dev/null +++ b/app/src/main/res/layout/activity_picking_inventario.xml @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_picking_inventario__list_item.xml b/app/src/main/res/layout/activity_picking_inventario__list_item.xml new file mode 100644 index 00000000..07248401 --- /dev/null +++ b/app/src/main/res/layout/activity_picking_inventario__list_item.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_picking_resi.xml b/app/src/main/res/layout/activity_picking_resi.xml index bb0ac519..a3114789 100644 --- a/app/src/main/res/layout/activity_picking_resi.xml +++ b/app/src/main/res/layout/activity_picking_resi.xml @@ -45,10 +45,9 @@ + app:layout_collapseMode="pin"> @@ -260,7 +259,8 @@ app:visibility="@{pickingResiView.bottomSheetEnabled}" app:behavior_hideable="false" app:behavior_peekHeight="66dp" - app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" /> + app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" + app:parentView="@id/bottom_sheet_lu_content"/> diff --git a/app/src/main/res/layout/activity_prod_dettaglio_linea.xml b/app/src/main/res/layout/activity_prod_dettaglio_linea.xml index 7fe0fe54..5d1fd624 100644 --- a/app/src/main/res/layout/activity_prod_dettaglio_linea.xml +++ b/app/src/main/res/layout/activity_prod_dettaglio_linea.xml @@ -27,7 +27,7 @@ + android:background="#ebebeb"> + android:layout_height="?attr/actionBarSize"> diff --git a/app/src/main/res/layout/activity_pv_ordine_acquisto_edit.xml b/app/src/main/res/layout/activity_pv_ordine_acquisto_edit.xml index 26a62561..5d24dddb 100644 --- a/app/src/main/res/layout/activity_pv_ordine_acquisto_edit.xml +++ b/app/src/main/res/layout/activity_pv_ordine_acquisto_edit.xml @@ -37,7 +37,7 @@ + android:layout_height="?attr/actionBarSize"> + app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior" + app:parentView="@id/bottom_sheet_lu_content" /> diff --git a/app/src/main/res/layout/app_bar_main.xml b/app/src/main/res/layout/app_bar_main.xml index b361628d..ea9e8c9b 100644 --- a/app/src/main/res/layout/app_bar_main.xml +++ b/app/src/main/res/layout/app_bar_main.xml @@ -21,7 +21,7 @@ diff --git a/app/src/main/res/layout/bottom_sheet__inventario_actions_view.xml b/app/src/main/res/layout/bottom_sheet__inventario_actions_view.xml new file mode 100644 index 00000000..4d3b4f88 --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet__inventario_actions_view.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet__inventario_row_actions_view.xml b/app/src/main/res/layout/bottom_sheet__inventario_row_actions_view.xml new file mode 100644 index 00000000..0b7ed174 --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet__inventario_row_actions_view.xml @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet__item_edit_view.xml b/app/src/main/res/layout/bottom_sheet__item_edit_view.xml new file mode 100644 index 00000000..96e92a60 --- /dev/null +++ b/app/src/main/res/layout/bottom_sheet__item_edit_view.xml @@ -0,0 +1,217 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet__mtb_colr_edit.xml b/app/src/main/res/layout/bottom_sheet__mtb_colr_edit.xml index af488e79..ffb0b93e 100644 --- a/app/src/main/res/layout/bottom_sheet__mtb_colr_edit.xml +++ b/app/src/main/res/layout/bottom_sheet__mtb_colr_edit.xml @@ -7,6 +7,7 @@ + - + android:layout_height="wrap_content" + android:background="@drawable/bottom_sheet_background" + android:orientation="vertical" + android:padding="16dp"> - - - + android:layout_marginBottom="8dp" + android:orientation="vertical" + app:layout_constraintEnd_toStartOf="@id/qta_layout" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + android:ellipsize="end" + android:maxLines="2" + android:paddingStart="0dp" + android:paddingEnd="8dp" + android:text="@{viewModel.mtbColr.descrizione}" + android:textColor="#444" + android:textStyle="bold" + tools:text="Descrizione articolo" /> - + - + - + - - + + + android:gravity="end" + android:text="@{UtilityNumber.decimalToString(viewModel.mtbColr.qtaCol)}" + android:textStyle="bold" + tools:text="250" /> - - - - - - - - - - - - - - - - - - - - - - - - - + android:layout_marginStart="4dp" + android:gravity="end" + android:text="@{viewModel.mtbColr.untMis}" + android:textStyle="bold" + tools:text="PZ" /> - + + + + + + android:gravity="end" + android:text="@{UtilityNumber.decimalToString(viewModel.mtbColr.numCnf)}" + android:textStyle="bold" + tools:text="250" /> - - - - - - - + android:layout_marginStart="4dp" + android:gravity="end" + android:text="@string/unt_mis_col" + android:textAllCaps="true" + android:textStyle="bold" /> - + - + + - - + - + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml b/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml index 3b26ec5e..0819763c 100644 --- a/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml +++ b/app/src/main/res/layout/bottom_sheet_fragment__lu_content.xml @@ -544,6 +544,8 @@ android:layout_height="wrap_content" app:behavior_hideable="true" app:behavior_peekHeight="0dp" - app:layout_behavior=".view.bottom_sheet__base.AutoCloseBottomSheetBehavior" /> + app:layout_behavior=".view.bottom_sheet__base.AutoCloseBottomSheetBehavior" + app:parentView="@id/bottom_sheet__mtb_colr_edit" + app:backgroundView="@id/bottom_sheet__mtb_colr_edit__background" /> \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_ask_action_edit_delete.xml b/app/src/main/res/layout/dialog_ask_action_edit_delete.xml index 055aa010..912e71e3 100644 --- a/app/src/main/res/layout/dialog_ask_action_edit_delete.xml +++ b/app/src/main/res/layout/dialog_ask_action_edit_delete.xml @@ -7,7 +7,7 @@ + type="it.integry.integrywmsnative.view.dialogs.DialogAskActionView" /> diff --git a/app/src/main/res/layout/dialog_ask_info_inventario.xml b/app/src/main/res/layout/dialog_ask_info_inventario.xml new file mode 100644 index 00000000..cee7a82c --- /dev/null +++ b/app/src/main/res/layout/dialog_ask_info_inventario.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_base.xml b/app/src/main/res/layout/dialog_base.xml index 2525d373..800e6e51 100644 --- a/app/src/main/res/layout/dialog_base.xml +++ b/app/src/main/res/layout/dialog_base.xml @@ -29,7 +29,7 @@ + type="it.integry.integrywmsnative.view.dialogs.input_peso_lu.DialogInputPesoLUView" /> - - - - - @@ -873,7 +873,7 @@ android:paddingEnd="4dp" tools:layout_weight="1"> - - - - + android:weightSum="3"> - - + android:text="@string/abort" + app:iconGravity="start" /> - + app:iconGravity="start" /> diff --git a/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml b/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml index a542f304..a457a835 100644 --- a/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml +++ b/app/src/main/res/layout/dialog_note_aggiuntive_nuova_ul.xml @@ -17,7 +17,7 @@ + type="it.integry.integrywmsnative.view.dialogs.info_aggiuntive_lu.DialogInfoAggiuntiveLU" /> + + + + - - - - - - - - - - - + android:orientation="vertical" + android:paddingStart="24dp" + android:paddingTop="24dp" + android:paddingEnd="24dp" + android:paddingBottom="12dp"> - + android:gravity="center_horizontal" + android:text="@string/title_open_grid_pv" /> - + + + + + + android:layout_gravity="center_vertical" + android:layout_marginStart="8dp" + android:layout_marginEnd="12dp" + android:gravity="center_horizontal" + android:text="@string/scan_grid" + android:textSize="16sp" /> + - + - - + + - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/dialog_select_doc_info.xml b/app/src/main/res/layout/dialog_select_doc_info.xml index 72e2f6d7..fc8e074f 100644 --- a/app/src/main/res/layout/dialog_select_doc_info.xml +++ b/app/src/main/res/layout/dialog_select_doc_info.xml @@ -134,7 +134,8 @@ android:focusableInTouchMode="false" android:hint="@string/document_date" android:inputType="text" - app:binding="@{view.dataDoc}"/> + app:binding="@{view.dataDoc}" + app:parentView="@{view}"/> diff --git a/app/src/main/res/layout/fragment_doc_interni.xml b/app/src/main/res/layout/fragment_doc_interni.xml index 4854cade..ad26fce2 100644 --- a/app/src/main/res/layout/fragment_doc_interni.xml +++ b/app/src/main/res/layout/fragment_doc_interni.xml @@ -310,15 +310,14 @@ + app:singleClick="@{viewModel::newDocument}" + style="?attr/floatingActionButtonPrimaryStyle" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_elenco_inventario.xml b/app/src/main/res/layout/fragment_elenco_inventario.xml new file mode 100644 index 00000000..730607a2 --- /dev/null +++ b/app/src/main/res/layout/fragment_elenco_inventario.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_elenco_inventario_list_single_item.xml b/app/src/main/res/layout/fragment_elenco_inventario_list_single_item.xml new file mode 100644 index 00000000..66c0e900 --- /dev/null +++ b/app/src/main/res/layout/fragment_elenco_inventario_list_single_item.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index df8fae60..7c062d15 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -1,22 +1,27 @@ - + + + + + - - - + android:paddingEnd="8dp" + android:paddingBottom="12dp" + android:text="NESSUNA CONNESSIONE DISPONIBILE, RIPROVA" + android:textColor="@color/white" /> - - - @@ -53,37 +53,33 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - - - - + android:layout_height="wrap_content"> - + android:layout_margin="12dp" + app:cardCornerRadius="16dp" + app:cardElevation="4dp"> + android:background="@color/colorPrimary" + android:orientation="vertical" + android:padding="16dp"> - - - - - + - + - - + - + - + + + + - - + + - + - - + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_accettazione.xml b/app/src/main/res/layout/fragment_main_accettazione.xml index 13233729..a968f396 100644 --- a/app/src/main/res/layout/fragment_main_accettazione.xml +++ b/app/src/main/res/layout/fragment_main_accettazione.xml @@ -85,15 +85,12 @@ + style="?attr/floatingActionButtonPrimaryStyle" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main_menu_group_layout.xml b/app/src/main/res/layout/fragment_main_menu_group_layout.xml index 67742385..c553e1d7 100644 --- a/app/src/main/res/layout/fragment_main_menu_group_layout.xml +++ b/app/src/main/res/layout/fragment_main_menu_group_layout.xml @@ -24,21 +24,6 @@ tools:text="Group Title" /> - - - - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml b/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml index 9e048f23..6a6ae8e4 100644 --- a/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml +++ b/app/src/main/res/layout/fragment_main_rettifica_giacenze.xml @@ -298,7 +298,7 @@ + app:layout_behavior=".view.bottom_sheet__base.AutoCloseBottomSheetBehavior" + app:parentView="@id/bottom_sheet__mtb_colr_edit" + app:backgroundView="@id/bottom_sheet__mtb_colr_edit__background"/> diff --git a/app/src/main/res/layout/fragment_main_ultime_consegne_cliente.xml b/app/src/main/res/layout/fragment_main_ultime_consegne_cliente.xml index b5a1066e..68fc4dee 100644 --- a/app/src/main/res/layout/fragment_main_ultime_consegne_cliente.xml +++ b/app/src/main/res/layout/fragment_main_ultime_consegne_cliente.xml @@ -96,15 +96,13 @@ - + android:layout_margin="16dp" + app:srcCompat="@drawable/ic_check_black_24dp" + style="?attr/floatingActionButtonPrimaryStyle" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_picking_libero.xml b/app/src/main/res/layout/fragment_picking_libero.xml index 66b71f75..d25f296e 100644 --- a/app/src/main/res/layout/fragment_picking_libero.xml +++ b/app/src/main/res/layout/fragment_picking_libero.xml @@ -154,7 +154,9 @@ android:layout_height="wrap_content" app:behavior_hideable="true" app:behavior_peekHeight="0dp" - app:layout_behavior=".view.bottom_sheet__base.AutoCloseBottomSheetBehavior" /> + app:layout_behavior=".view.bottom_sheet__base.AutoCloseBottomSheetBehavior" + app:backgroundView="@id/bottom_sheet__mtb_colr_edit__background" + app:parentView="@id/bottom_sheet__mtb_colr_edit" /> diff --git a/app/src/main/res/layout/fragment_prod_rientro_merce.xml b/app/src/main/res/layout/fragment_prod_rientro_merce.xml index 5e996160..a6f0d828 100644 --- a/app/src/main/res/layout/fragment_prod_rientro_merce.xml +++ b/app/src/main/res/layout/fragment_prod_rientro_merce.xml @@ -73,7 +73,9 @@ android:layout_height="wrap_content" app:behavior_hideable="true" app:behavior_peekHeight="0dp" - app:layout_behavior=".view.bottom_sheet__base.AutoCloseBottomSheetBehavior" /> + app:layout_behavior=".view.bottom_sheet__base.AutoCloseBottomSheetBehavior" + app:parentView="@id/bottom_sheet__mtb_colr_edit" + app:backgroundView="@id/bottom_sheet__mtb_colr_edit__background" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_prod_versamento_materiale.xml b/app/src/main/res/layout/fragment_prod_versamento_materiale.xml index 1a4021e3..2c7121ab 100644 --- a/app/src/main/res/layout/fragment_prod_versamento_materiale.xml +++ b/app/src/main/res/layout/fragment_prod_versamento_materiale.xml @@ -184,11 +184,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" - android:layout_margin="@dimen/fab_margin" - android:tint="@android:color/white" + android:layout_margin="16dp" + app:srcCompat="@drawable/ic_check_black_24dp" app:visibility="@{view.fabVisible}" app:singleClick="@{view::onConfirmClicked}" - style="@style/Widget.MaterialComponents.FloatingActionButton" - app:srcCompat="@drawable/ic_check_black_24dp" /> + style="?attr/floatingActionButtonPrimaryStyle" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_single_item.xml b/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_single_item.xml index 74516a07..aab6b20d 100644 --- a/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_single_item.xml +++ b/app/src/main/res/layout/fragment_pv_ordini_acquisto__list_single_item.xml @@ -2,69 +2,58 @@ + + - + android:paddingEnd="8dp" + android:paddingBottom="8dp"> - + android:layout_marginEnd="4dp" + android:layout_toStartOf="@id/data_ord" + android:ellipsize="end" + android:singleLine="true" + android:textColor="@android:color/black" + tools:text="IDENTIFIER" /> + - - - - - - - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml b/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml index fc6272ce..ac053f79 100644 --- a/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml +++ b/app/src/main/res/layout/fragment_ultimi_arrivi_fornitore.xml @@ -98,15 +98,13 @@ - + android:layout_margin="16dp" + app:srcCompat="@drawable/ic_check_black_24dp" + style="?attr/floatingActionButtonPrimaryStyle" /> \ No newline at end of file diff --git a/app/src/main/res/layout/lista_rettifica_giacenze_model.xml b/app/src/main/res/layout/lista_rettifica_giacenze_model.xml index 50883ad9..d864f80a 100644 --- a/app/src/main/res/layout/lista_rettifica_giacenze_model.xml +++ b/app/src/main/res/layout/lista_rettifica_giacenze_model.xml @@ -19,7 +19,7 @@ android:padding="8dp"> - - - - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index e575dfce..b453ceac 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -9,7 +9,7 @@ Caricamento Completato Successo - %s
del %s]]>
+ %d del %s]]>
%s del %s]]>
%s del %s]]> %s del %s]]> @@ -21,6 +21,7 @@ Ordini di accettazione Spedizione Rettifica giacenze + Inventario Approvvig. linee prod. Posizionamento merce Errore @@ -63,6 +64,7 @@ Stampa UL Stampa Conferma + Salva Note Aggiuntive Inserisci eventuali note aggiuntive della tua UL Non è possibile scansionare il barcode di una UL adesso @@ -206,6 +208,7 @@ Nessun ordine compatibile Nessun articolo Nessuna UL versata in produzione + Nessun inventario disponibile Il barcode scansionato non ha fornito alcun risultato @@ -226,6 +229,8 @@ Numero ordine Commessa Cliente + ID Inventario + Zona Commessa Destinatario Data consegna @@ -381,6 +386,7 @@ Numero articoli: Modifica documento Esporta documento + Esporta Salva documento Fornitore Fornitore @@ -422,4 +428,7 @@ Nessun articolo compatibile trovato UL vuota %s %s]]> + Inventario + Non sincronizzato + Nuovo \ No newline at end of file diff --git a/app/src/main/res/values/attr.xml b/app/src/main/res/values/attr.xml index 4e7f2483..a9e9cd76 100644 --- a/app/src/main/res/values/attr.xml +++ b/app/src/main/res/values/attr.xml @@ -6,4 +6,18 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/buttons_style.xml b/app/src/main/res/values/buttons_style.xml index 894166d2..173e230e 100644 --- a/app/src/main/res/values/buttons_style.xml +++ b/app/src/main/res/values/buttons_style.xml @@ -22,15 +22,11 @@ - --> - + + + + + @@ -123,27 +145,6 @@ - - - - - - + + + + - + + + - + + + - + + + + + + + diff --git a/build.gradle b/build.gradle index 913495f7..29dbf0a6 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.3.0' + classpath 'com.android.tools.build:gradle:7.3.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.13'