From 42ae5de8177e8039c01ca0788b2ca66a479cf3a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eudes=20In=C3=A1cio?= Date: Tue, 21 Sep 2021 06:09:41 +0100 Subject: [PATCH] Inicio page is offline --- config.xml | 2 +- package-lock.json | 439 +++++------------- package.json | 6 +- src/app/app.module.ts | 4 +- src/app/home/home.page.ts | 5 +- .../agenda/view-event/view-event.page.ts | 56 ++- src/app/pages/events/events.page.html | 2 +- src/app/pages/events/events.page.ts | 231 ++++++--- .../expediente/expediente.page.html | 2 +- .../expediente/expediente.page.ts | 86 +++- src/app/pages/login/login.page.ts | 12 +- src/app/services/notifications.service.ts | 9 +- src/app/services/socket/synchro.service.ts | 15 +- src/app/services/sqlite.service.spec.ts | 16 + src/app/services/sqlite.service.ts | 254 ++++++++++ 15 files changed, 702 insertions(+), 437 deletions(-) create mode 100644 src/app/services/sqlite.service.spec.ts create mode 100644 src/app/services/sqlite.service.ts diff --git a/config.xml b/config.xml index 97d2fb38d..7b18d7926 100644 --- a/config.xml +++ b/config.xml @@ -3,7 +3,7 @@ gabinete digital An awesome Ionic/Cordova app. Ionic Framework Team - + diff --git a/package-lock.json b/package-lock.json index c91352e98..447429397 100644 --- a/package-lock.json +++ b/package-lock.json @@ -765,9 +765,9 @@ } }, "make-fetch-happen": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.0.4.tgz", - "integrity": "sha512-sQWNKMYqSmbAGXqJg2jZ+PmHh5JAybvwu0xM8mZR/bsTjGiTASj3ldXJV7KFHy1k/IJIBkjxQFoWIVsv9+PQMg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, "requires": { "agentkeepalive": "^4.1.3", @@ -784,16 +784,17 @@ "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.2", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", + "socks-proxy-agent": "^6.0.0", "ssri": "^8.0.0" }, "dependencies": { "cacache": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.2.0.tgz", - "integrity": "sha512-uKoJSHmnrqXgthDFx/IU6ED/5xd+NNGe+Bb+kLZy7Ku4P+BaiWEUflAKPZ7eAzsYGcsAGASJZsybXp+quEcHTw==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "requires": { + "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -901,9 +902,9 @@ } }, "read-package-json-fast": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.2.tgz", - "integrity": "sha512-5fyFUyO9B799foVk4n6ylcoAktG/FbE3jwRKxvwaeSrIunaoMc0u81dzXxjeAFKOce7O5KncdfwpGvvs6r5PsQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, "requires": { "json-parse-even-better-errors": "^2.3.0", @@ -919,6 +920,27 @@ "lru-cache": "^6.0.0" } }, + "socks": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.1.tgz", + "integrity": "sha512-kLQ9N5ucj8uIcxrDwjm0Jsqk06xdpBjGNQtpXy4Q8/QY2k+fY7nZH8CARy+hkbG+SGAovmzzuauCpBlb8FrnBA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.0.0.tgz", + "integrity": "sha512-FIgZbQWlnjVEQvMkylz64/rUggGtrKstPnx8OZyYFG0tAFR8CSBtpXxSwbFLHyeXFn/cunFL7MpuSOvDSOPo9g==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.1", + "socks": "^2.6.1" + } + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -4509,6 +4531,12 @@ } } }, + "@gar/promisify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.2.tgz", + "integrity": "sha512-82cpyJyKRoQoRi+14ibCeGPu0CwypgtBAdBhq1WfvagpCZNKqwXbKwXllYSMG91DhmG4jt9gN8eP6lGOtozuaw==", + "dev": true + }, "@hapi/hoek": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", @@ -4663,11 +4691,18 @@ } }, "@ionic-native/sqlite": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/@ionic-native/sqlite/-/sqlite-5.31.1.tgz", - "integrity": "sha512-X26n+6mvqyv94ADG67lHOmDj/Ha+ZVbHztwsWzbvBqmnmgck9y+mo8ndC47UKIXRA/8lwoGMyAtJAfE81eT3mg==", + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/@ionic-native/sqlite/-/sqlite-5.36.0.tgz", + "integrity": "sha512-+1nXUqBucwG6MYoEvqKlZecvI3xVGWeKIzdZf8Nc4vQx4JFDUYdluiEw3mfzptCC1S/4l6skBsL8eZLFfpzUKA==", "requires": { "@types/cordova": "^0.0.34" + }, + "dependencies": { + "@types/cordova": { + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz", + "integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ=" + } } }, "@ionic-native/sqlite-porter": { @@ -4695,11 +4730,11 @@ } }, "@ionic/angular": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.5.4.tgz", - "integrity": "sha512-Iavv1rvOXNgVpYjy/HVKiPMO0SRx4a8Dwpn9/HHVsxrIbBX+Jr1Fo0UvCTyXOeWBCd6rkKTW1ro5zcWonuv8nw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.7.0.tgz", + "integrity": "sha512-oJLpHYRevSmih7IuBVm/VoCHkl8H5V24ZFaPT2XdqixyxcnwmoeQ10ew/Ha0UjgUv8q6T8t5I5c/LUqgwGypjQ==", "requires": { - "@ionic/core": "5.5.4", + "@ionic/core": "5.7.0", "tslib": "^1.9.3" }, "dependencies": { @@ -4711,12 +4746,12 @@ } }, "@ionic/angular-toolkit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@ionic/angular-toolkit/-/angular-toolkit-3.1.0.tgz", - "integrity": "sha512-qaNSFouUVM4TaGwiZMQNft13dFUkZpg2m/rKGVdBoajvTowXSM2sHUNoyzerDqjKZZdeD7mSn8J8bL40mUtyFQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@ionic/angular-toolkit/-/angular-toolkit-4.0.0.tgz", + "integrity": "sha512-HGRAGUtc1YSwNZ/Q7X7c2QRyYM2AfsSm++OasPrMo3LnPRVr8OIsUih2ithEU7f3CXrViUR7j/Anu90zGsRgzg==", "dev": true, "requires": { - "@schematics/angular": "^11.1.0", + "@schematics/angular": "^12.0.0", "cheerio": "1.0.0-rc.3", "colorette": "1.1.0", "copy-webpack-plugin": "^6.2.1", @@ -4725,40 +4760,11 @@ "ws": "^7.0.1" }, "dependencies": { - "@angular-devkit/core": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-11.2.1.tgz", - "integrity": "sha512-CPFQn+NNC4x28X/STwmwmWge127iY9dsKuXeIV8OCSTOQiY4odOTYigP19AglXyK4e9DG/0JKxej/3CeUYx6Tg==", - "dev": true, - "requires": { - "ajv": "6.12.6", - "fast-json-stable-stringify": "2.1.0", - "magic-string": "0.25.7", - "rxjs": "6.6.3", - "source-map": "0.7.3" - } - }, - "@angular-devkit/schematics": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-11.2.1.tgz", - "integrity": "sha512-y2tzJq+MMwLdQ6Li+AxjozI51miN5CjK9x9jtFHi+njqJr595WTNQi39RjyHxAue1VFMr8gu1VBnKGKJ1J3vNA==", - "dev": true, - "requires": { - "@angular-devkit/core": "11.2.1", - "ora": "5.3.0", - "rxjs": "6.6.3" - } - }, - "@schematics/angular": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-11.2.1.tgz", - "integrity": "sha512-CnN4bkRwhCp7jc4HGJ9qp/xqLwmnkn/zRf/EEb5tHFC0Bz2WvoNuAoqPRSkgIis3L+Ozahmeb8JxTIdazK1Hog==", - "dev": true, - "requires": { - "@angular-devkit/core": "11.2.1", - "@angular-devkit/schematics": "11.2.1", - "jsonc-parser": "3.0.0" - } + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "dev": true }, "ajv": { "version": "6.12.6", @@ -4772,92 +4778,6 @@ "uri-js": "^4.2.2" } }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cacache": { - "version": "15.0.5", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", - "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", - "dev": true, - "requires": { - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.0", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz", - "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "colorette": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.1.0.tgz", @@ -4881,63 +4801,6 @@ "schema-utils": "^3.0.0", "serialize-javascript": "^5.0.1", "webpack-sources": "^1.4.3" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "requires": { - "chalk": "^4.0.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" } }, "p-limit": { @@ -4949,91 +4812,16 @@ "yocto-queue": "^0.1.0" } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true } } }, @@ -5232,19 +5020,13 @@ } }, "@ionic/core": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.5.4.tgz", - "integrity": "sha512-IjbGN8vh3XuJ2ulo3BMlMflcWlUhvEGEexr29JKFvb+O4bWKP5sC2fkqSrswrIstOmv7axm7CeIi2MNRkwYwVA==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.7.0.tgz", + "integrity": "sha512-5GunAeZWDhjbo4/gFCYjA4vXP3V+8PEoGa9C+ZEojurpk7IBuAtI36KalCukrHLPoIbfUCywTXoZubfC1S6lHQ==", "requires": { - "ionicons": "^5.1.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } + "@stencil/core": "^2.4.0", + "ionicons": "^5.5.3", + "tslib": "^2.1.0" } }, "@ionic/lab": { @@ -6656,6 +6438,27 @@ "resolved": "https://registry.npmjs.org/@npmcli/ci-detect/-/ci-detect-1.3.0.tgz", "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==" }, + "@npmcli/fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz", + "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "@npmcli/git": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-2.0.6.tgz", @@ -6810,9 +6613,9 @@ } }, "@stencil/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.4.0.tgz", - "integrity": "sha512-gU6+Yyd6O0KrCSS/O6j8KKqmRo+/Dcs2fI0+APCpbAWK+nqhwDISpdnSEfGDCLMoAC08XOZCycBRk2K1VGnEcg==" + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.8.0.tgz", + "integrity": "sha512-WazFGUMnbumg8ePNvej8cIOEcxvuZ0ugKQkkE1xFbDYcl7DgJd62MiG+bIqCcQlIdLEfhjAdoixxlFdJgrgjyA==" }, "@szmarczak/http-timer": { "version": "1.1.2", @@ -9168,26 +8971,6 @@ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "dev": true }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", @@ -13824,19 +13607,19 @@ } }, "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "domelementtype": "^1.3.0", + "entities": "^1.1.1" }, "dependencies": { - "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true } } @@ -13879,9 +13662,9 @@ } }, "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { "dom-serializer": "0", @@ -16327,11 +16110,11 @@ "integrity": "sha512-ytlaVoz8Olq4k04Vaf/xuhDeoWEbdeCB/9kqTMnZgWfTkA+M87X72V4pyDtKEm1G+nDwxSboBRlYLDj9wtXdIA==" }, "ionicons": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-5.5.0.tgz", - "integrity": "sha512-0DUHTeoIrGSY+KNyNDaQW7v5+mDstjSkjx8dzT925kXKYBDrN3sGs8kUcSSQbTK132U4CbgDEZkn7FDUa9x8Qw==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-5.5.3.tgz", + "integrity": "sha512-L71djrMi8pAad66tpwdnO1vwcyluCFvehzxU1PpH1k/HpYBZhZ5IaYhqXipmqUvu5aEbd4cbRguYyI5Fd4bxTw==", "requires": { - "@stencil/core": "^2.4.0" + "@stencil/core": "^2.5.0" } }, "ios-sim": { diff --git a/package.json b/package.json index b90345524..acdb2729a 100644 --- a/package.json +++ b/package.json @@ -53,11 +53,11 @@ "@ionic-native/network": "^5.35.0", "@ionic-native/screen-orientation": "^5.35.0", "@ionic-native/splash-screen": "^5.31.1", - "@ionic-native/sqlite": "^5.31.1", + "@ionic-native/sqlite": "^5.36.0", "@ionic-native/sqlite-porter": "^5.31.1", "@ionic-native/status-bar": "^5.0.0", "@ionic-native/wheel-selector": "^5.31.1", - "@ionic/angular": "^5.5.4", + "@ionic/angular": "^5.7.0", "@ionic/pwa-elements": "^3.0.2", "@ionic/storage": "^2.3.1", "@logisticinfotech/ionic4-datepicker": "^1.4.4", @@ -115,7 +115,7 @@ "@angular/compiler": "^12.1.2", "@angular/compiler-cli": "^12.1.2", "@angular/language-service": "^12.1.2", - "@ionic/angular-toolkit": "^3.0.0", + "@ionic/angular-toolkit": "^4.0.0", "@ionic/lab": "3.1.7", "@types/jasmine": "~3.6.0", "@types/jasminewd2": "~2.0.3", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 2f37e9d58..997274736 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -57,6 +57,7 @@ import { fab } from '@fortawesome/free-brands-svg-icons' import { ScreenOrientation } from '@ionic-native/screen-orientation/ngx'; import { PdfViewerModule } from 'ng2-pdf-viewer'; +import { SQLite } from '@ionic-native/sqlite/ngx'; @NgModule({ @@ -110,7 +111,8 @@ import { PdfViewerModule } from 'ng2-pdf-viewer'; ScreenOrientation, Network, Media, - File + File, + SQLite ], bootstrap: [AppComponent], schemas: [CUSTOM_ELEMENTS_SCHEMA] diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index e1ce8dd83..ddc6983db 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -132,6 +132,8 @@ export class HomePage implements OnInit { mobilefirstConnect() { + console.log("Mobileconecct"); + if(window['WLAuthorizationManager']) { if(window['WLAuthorizationManager'].obtainAccessToken) { window['WLAuthorizationManager'].obtainAccessToken("").then((token) => { @@ -176,12 +178,13 @@ export class HomePage implements OnInit { synchro.registerCallback('Online',()=>{ + console.log('Onlineee') }) synchro.registerCallback('Offline',()=>{ - + console.log('Offlineee') }) diff --git a/src/app/pages/agenda/view-event/view-event.page.ts b/src/app/pages/agenda/view-event/view-event.page.ts index 6b2fa3ca7..aa9559cce 100644 --- a/src/app/pages/agenda/view-event/view-event.page.ts +++ b/src/app/pages/agenda/view-event/view-event.page.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import { AlertController, ModalController, PopoverController } from '@ionic/angular'; +import { AlertController, ModalController, PopoverController, Platform } from '@ionic/angular'; import { EventBody } from 'src/app/models/eventbody.model'; import { AttachmentsService } from 'src/app/services/attachments.service'; import { EventsService } from 'src/app/services/events.service'; @@ -12,6 +12,8 @@ import { ActivatedRoute, Router } from '@angular/router'; import { ToastService } from 'src/app/services/toast.service'; import { EliminateEventPage } from 'src/app/modals/eliminate-event/eliminate-event.page'; import { Location } from '@angular/common' +import { SqliteService } from 'src/app/services/sqlite.service'; +import { synchro } from '../../../services/socket/synchro.service'; @Component({ selector: 'app-view-event', @@ -42,6 +44,7 @@ export class ViewEventPage implements OnInit { dicIndex = 0; isModal = false header = true + synch = synchro; constructor( private modalController: ModalController, @@ -55,7 +58,11 @@ export class ViewEventPage implements OnInit { private activatedRoute: ActivatedRoute, private router: Router, private toastService: ToastService, - private location: Location + private location: Location, + public platform: Platform, + private sqliteservice: SqliteService + + ) { this.isEventEdited = false; @@ -88,8 +95,29 @@ export class ViewEventPage implements OnInit { ngOnInit() { - this.loadEvent(); + synchro.registerCallback('Online', () => { + this.loadEvent(); + console.log('Onlineee view-event') + }) + + synchro.registerCallback('Offline', () => { + this.platform.ready().then(() => { + this.sqliteservice.getEventById(this.eventId).then((event) => { + this.loadedEvent = event[0]; + console.log("Event ditails local,", event[0]) + }) + console.log('Offlineee') + }) + + }) + + /* this.sqliteservice.getEventById(this.eventId).then((event) => { + this.loadedEvent = event[0]; + console.log("Event ditails local,", event[0]) + }) + this.loadEvent(); */ + window.onresize = (event) => { // if not mobile remove all component @@ -126,6 +154,7 @@ export class ViewEventPage implements OnInit { const loader = this.toastService.loading(); this.eventsService.getEvent(this.eventId).subscribe(res => { this.loadedEvent = res; + this.sqliteservice.addEvent(res); /* this.today = new Date(res.StartDate); this.customDate = this.days[this.today.getDay()]+ ", " + this.today.getDate() +" de " + ( this.months[this.today.getMonth()]); */ loader.remove() @@ -289,4 +318,25 @@ export class ViewEventPage implements OnInit { this.dicIndex = index } + getEventsFromLocalDb() { + console.log("event id details ", this.eventId) + + synchro.registerCallback('Online', () => { + this.loadEvent(); + console.log('Onlineee view-event') + + }) + + synchro.registerCallback('Offline', () => { + this.platform.ready().then(() => { + this.sqliteservice.getEventById(this.eventId).then((event) => { + this.loadedEvent = event[0]; + console.log("Event ditails local,", event[0]) + }) + console.log('Offlineee') + }) + + }) + } + } diff --git a/src/app/pages/events/events.page.html b/src/app/pages/events/events.page.html index 5e192894f..3fc7279de 100644 --- a/src/app/pages/events/events.page.html +++ b/src/app/pages/events/events.page.html @@ -47,7 +47,7 @@ -
diff --git a/src/app/pages/events/events.page.ts b/src/app/pages/events/events.page.ts index 0ceb9b85d..2621f2b4b 100644 --- a/src/app/pages/events/events.page.ts +++ b/src/app/pages/events/events.page.ts @@ -12,10 +12,12 @@ import { EventDetailPage } from './event-detail/event-detail.page'; import { ProcessesService } from '../../services/processes.service'; import { DailyWorkTask } from '../../models/dailyworktask.model'; import { LoginUserRespose } from 'src/app/models/user.model'; -import { ToDayEventStorage } from 'src/app/store/to-day-event-storage.service'; +import { ToDayEventStorage } from 'src/app/store/to-day-event-storage.service'; import { ScreenOrientation } from '@ionic-native/screen-orientation/ngx'; import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe'; import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; +import { SqliteService } from 'src/app/services/sqlite.service'; +import { synchro } from '../../services/socket/synchro.service'; @Component({ selector: 'app-events', @@ -29,16 +31,16 @@ export class EventsPage implements OnInit { months = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]; days = ["Domingo", "Segunda-feira", "Terça-feira", "Quarta-feira", "Quinta-feira", "Sexta-feira", "Sábado"]; - customDate = this.days[this.today.getDay()]+ ", " + this.today.getDate() +" de " + ( this.months[this.today.getMonth()]); + customDate = this.days[this.today.getDay()] + ", " + this.today.getDate() + " de " + (this.months[this.today.getMonth()]); /* Setting appropriate greeting according to the time */ grettings = ["Bom dia", "Boa tarde", "Boa noite"]; - greetting=''; + greetting = ''; timeDate = this.today.getHours() + ":" + this.today.getMinutes(); /* Set segment variable */ - segment:string; - public profile:string; + segment: string; + public profile: string; currentEvent: any; eventsList: Event[]; @@ -52,55 +54,65 @@ export class EventsPage implements OnInit { combinedEvents: Event[]; customText = false; - totalEvent=0; + totalEvent = 0; currentHoursMinutes: Date | string; showLoader: boolean; - taskslist:DailyWorkTask[] = []; - expedientList:any; - hideSearchBtn: boolean=false; + taskslist: DailyWorkTask[] = []; + expedientList: any; + hideSearchBtn: boolean = false; // shared data toDayEventStorage = ToDayEventStorage expedienteGdStore = ExpedienteGdStore - + + listToPresent + expedienteTaskPipe = new ExpedienteTaskPipe() - @Output() openExpedientListPage:EventEmitter = new EventEmitter(); + @Output() openExpedientListPage: EventEmitter = new EventEmitter(); loggeduser: LoginUserRespose; existingScreenOrientation: string; + synch = synchro constructor( private eventService: EventsService, private router: Router, - private storageService:StorageService, + private storageService: StorageService, public activatedRoute: ActivatedRoute, private alertController: AlertService, private authService: AuthService, - private processes:ProcessesService, + private processes: ProcessesService, /* private gabineteService: GabineteDigitalPage, */ - private modalController:ModalController, + private modalController: ModalController, private screenOrientation: ScreenOrientation, public platform: Platform, - ) { - this.existingScreenOrientation = this.screenOrientation.type; - console.log(this.existingScreenOrientation); + private sqliteservice: SqliteService, + ) { + this.existingScreenOrientation = this.screenOrientation.type; + console.log(this.existingScreenOrientation); - this.loggeduser = authService.ValidatedUser; + this.loggeduser = authService.ValidatedUser; - this.prEventList = null; + this.prEventList = null; - this.platform.resize.subscribe(async () => { - //console.log('Resize event detected'); - // console.log('Resize event detected'); + this.platform.resize.subscribe(async () => { + //console.log('Resize event detected'); + // console.log('Resize event detected'); - }); + }); + try { + this.sqliteservice.databaseConn(); + } catch (error) { + console.log("Error creating local database: ", error) } + } + ngOnInit() { this.segment = "Combinada"; @@ -109,18 +121,20 @@ export class EventsPage implements OnInit { this.showGreeting(); this.router.events.forEach((event) => { - if(event instanceof NavigationEnd && event.url == '/home/events') { + if (event instanceof NavigationEnd && event.url == '/home/events') { this.RefreshEvents(); this.LoadList(); } }); this.hideSearch(); + this.getEventsFromLocalDb(); + //this.checkScreenOrientation(); } - hideSearch(){ - if(this.router.url == '/home/events'){ + hideSearch() { + if (this.router.url == '/home/events') { this.hideSearchBtn = true; } } @@ -136,28 +150,28 @@ export class EventsPage implements OnInit { } // Lock to portrait - lockToPortrait(){ + lockToPortrait() { this.screenOrientation.lock(this.screenOrientation.ORIENTATIONS.PORTRAIT); console.log('set'); } - // Lock to landscape - lockToLandscape(){ + // Lock to landscape + lockToLandscape() { this.screenOrientation.lock(this.screenOrientation.ORIENTATIONS.LANDSCAPE); } - // Unlock screen orientation - unlockScreenOrientation(){ + // Unlock screen orientation + unlockScreenOrientation() { this.screenOrientation.unlock(); } - checkScreenOrientation(){ - if( window.innerWidth < 701) { + checkScreenOrientation() { + if (window.innerWidth < 701) { this.lockToPortrait(); console.log('was here'); } - else{ + else { this.unlockScreenOrientation(); } } @@ -168,20 +182,24 @@ export class EventsPage implements OnInit { let date = new Date(); date.setMonth(date.getMonth() + 1); - let start = date.getFullYear()+"-"+ date.getMonth()+"-"+date.getDate()+" "+date.getHours()+":"+date.getMinutes()+ ":"+date.getSeconds(); - let end = date.getFullYear()+"-"+ date.getMonth()+"-"+date.getDate()+" 23:59:59"; + let start = date.getFullYear() + "-" + date.getMonth() + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(); + let end = date.getFullYear() + "-" + date.getMonth() + "-" + date.getDate() + " 23:59:59"; - if(this.loggeduser.Profile == 'MDGPR') { + if (this.loggeduser.Profile == 'MDGPR') { let mdOficialEvents = await this.eventService.getAllMdOficialEvents(start, end).toPromise(); let mdPessoalEvents = await this.eventService.getAllMdPessoalEvents(start, end).toPromise(); const list = mdOficialEvents.concat(mdPessoalEvents); - + console.log("getAllMdOficialPessoalEvents", list) + this.SqliteAddEvent(list); + this.listToPresent = this.toDayEventStorage.eventsList this.toDayEventStorage.reset(list) - if(this.toDayEventStorage.eventsList.length > 0){ + + + if (this.toDayEventStorage.eventsList.length > 0) { this.currentEvent = this.toDayEventStorage.eventsList[0].Subject; this.currentHoursMinutes = this.toDayEventStorage.eventsList[0].StartDate; } @@ -192,18 +210,20 @@ export class EventsPage implements OnInit { } else if (this.loggeduser.Profile == 'PR') { - let prOficialEvents= await this.eventService.getAllPrOficialEvents(start, end).toPromise(); - let prPessoalEvents= await this.eventService.getAllPrPessoalEvents(start, end).toPromise(); + let prOficialEvents = await this.eventService.getAllPrOficialEvents(start, end).toPromise(); + let prPessoalEvents = await this.eventService.getAllPrPessoalEvents(start, end).toPromise(); const list = prOficialEvents.concat(prPessoalEvents); - + console.log("getAllPrOficialPessoalEvents", list) + this.SqliteAddEvent(list); this.toDayEventStorage.reset(list) - if(this.toDayEventStorage.eventsList.length > 0) { + if (this.toDayEventStorage.eventsList.length > 0) { this.currentEvent = this.toDayEventStorage.eventsList[0].Subject; this.currentHoursMinutes = this.toDayEventStorage.eventsList[0].StartDate; } + this.listToPresent = this.toDayEventStorage.eventsList; this.totalEvent = this.toDayEventStorage.eventsList.length; this.showLoader = false; @@ -279,48 +299,110 @@ export class EventsPage implements OnInit { break; } */ } + SqliteAddEvent(list) { + list.forEach((event) => { + let data = { + EventId: event.EventId, + HasAttachments: event.HasAttachments, + Subject: event.Subject, + Location: event.Location, + CalendarId: event.CalendarId, + CalendarName: event.CalendarName, + StartDate: event.StartDate, + EndDate: event.EndDate, + EventType: "", + Attendees: "", + IsMeeting: "", + IsRecurring: "", + IsAllDayEvent: event.IsAllDayEvent, + AppointmentState: "", + TimeZone: "", + Organizer: "", + Category: "", + EventRecurrence: "", + Attachments: "", + Body: "" + } - showGreeting(){ - if(this.today.getHours() >= 6 && this.today.getHours() < 12){ + if(!event.Organizer){ + this.sqliteservice.addEvent(data); + console.log("Events page add event sqllite") + } + }) + + } + + getEventsFromLocalDb() { + + synchro.registerCallback('Online', () => { + this.router.events.forEach((event) => { + if (event instanceof NavigationEnd && event.url == '/home/events') { + this.RefreshEvents(); + this.LoadList(); + } + }); + console.log('Onlineee') + + }) + + + synchro.registerCallback('Offline', () => { + this.platform.ready().then(() => { + this.sqliteservice.getAllEvents().then((event) => { + this.listToPresent = event + this.totalEvent = this.listToPresent.length + this.currentEvent = this.listToPresent[0].Subject + this.currentHoursMinutes = this.listToPresent[0].StartDate + console.log("All events from local,", event) + }) + console.log('Offlineee') + }) + + }) + } + + + + showGreeting() { + if (this.today.getHours() >= 6 && this.today.getHours() < 12) { this.greetting = this.grettings[0]; } - else if(this.today.getHours() >= 12 && this.today.getHours() < 18){ + else if (this.today.getHours() >= 12 && this.today.getHours() < 18) { this.greetting = this.grettings[1]; } - else /* if(this.today.getHours() < 6 && this.today.getHours() >= 18) */{ + else /* if(this.today.getHours() < 6 && this.today.getHours() >= 18) */ { this.greetting = this.grettings[2]; } } - gotTo(){ + gotTo() { this.router.navigate(['/home/events']); } - changeProfile(){ - if(this.profile == "mdgpr"){ + changeProfile() { + if (this.profile == "mdgpr") { console.log('pr'); - this.profile ="pr"; + this.profile = "pr"; this.RefreshEvents(); } - else{ + else { console.log('mdgpr'); - this.profile ="mdgpr"; + this.profile = "mdgpr"; this.RefreshEvents(); } } - logout() - { + logout() { this.authService.ValidatedUser.BasicAuthKey = ""; this.router.navigate(['/home/login']); } - async openEventDetail1(id:any){ + async openEventDetail1(id: any) { console.log(id); const modal = await this.modalController.create({ component: EventDetailPage, - componentProps: { + componentProps: { eventId: id, }, cssClass: 'event-detail', @@ -335,52 +417,55 @@ export class EventsPage implements OnInit { this.processes.GetTaskListExpediente(false).subscribe(result => { console.log("Expediente", result); - const ExpedienteTask = result.map( e=> this.expedienteTaskPipe.transform(e)) + const ExpedienteTask = result.map(e => this.expedienteTaskPipe.transform(e)) this.expedienteGdStore.reset(ExpedienteTask) }); } - sortArrayISODate(myArray: any){ - return myArray.sort(function(a, b) { + sortArrayISODate(myArray: any) { + return myArray.sort(function (a, b) { return (a.CreateDate < b.CreateDate) ? -1 : ((a.CreateDate > b.CreateDate) ? 1 : 0); }); } - goToEvent(eventId:any){ + goToEvent(eventId: any) { this.router.navigate(['/home/events', eventId, 'events']); } - goToExpediente(SerialNumber:any) { - if(this.loggeduser.Profile == 'MDGPR'){ + goToExpediente(SerialNumber: any) { + if (this.loggeduser.Profile == 'MDGPR') { this.router.navigate(['/home/events/expediente', SerialNumber, 'events']); } - else if(this.loggeduser.Profile == 'PR'){ + else if (this.loggeduser.Profile == 'PR') { this.router.navigate(['/home/events/expedientes-pr', SerialNumber, 'events']); } } - viewExpedientListPage(){ - if(this.loggeduser.Profile == 'MDGPR'){ - if( window.innerWidth < 801){ + viewExpedientListPage() { + if (this.loggeduser.Profile == 'MDGPR') { + if (window.innerWidth < 801) { this.router.navigate(['/home/gabinete-digital/expediente']); } - else{ - let navigationExtras: NavigationExtras = { queryParams: {"expedientes": true,} }; + else { + let navigationExtras: NavigationExtras = { queryParams: { "expedientes": true, } }; this.router.navigate(['/home/gabinete-digital'], navigationExtras); } } - else if(this.loggeduser.Profile == 'PR'){ - if( window.innerWidth < 801){ + else if (this.loggeduser.Profile == 'PR') { + if (window.innerWidth < 801) { this.router.navigate(['/home/gabinete-digital/expedientes-pr']); } - else{ - let navigationExtras: NavigationExtras = { queryParams: {"expedientes-pr": true,} }; + else { + let navigationExtras: NavigationExtras = { queryParams: { "expedientes-pr": true, } }; this.router.navigate(['/home/gabinete-digital'], navigationExtras); } } } + } + + diff --git a/src/app/pages/gabinete-digital/expediente/expediente.page.html b/src/app/pages/gabinete-digital/expediente/expediente.page.html index e76fcb838..7c1e6b534 100644 --- a/src/app/pages/gabinete-digital/expediente/expediente.page.html +++ b/src/app/pages/gabinete-digital/expediente/expediente.page.html @@ -34,7 +34,7 @@
diff --git a/src/app/pages/gabinete-digital/expediente/expediente.page.ts b/src/app/pages/gabinete-digital/expediente/expediente.page.ts index 385f3b67a..75fc01b42 100644 --- a/src/app/pages/gabinete-digital/expediente/expediente.page.ts +++ b/src/app/pages/gabinete-digital/expediente/expediente.page.ts @@ -4,6 +4,9 @@ import { ProcessesService } from 'src/app/services/processes.service'; import { ToastService } from 'src/app/services/toast.service'; import { ExpedienteGdStore } from 'src/app/store/expedientegd-store.service'; import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe'; +import { SqliteService } from 'src/app/services/sqlite.service'; +import { Platform } from '@ionic/angular'; +import { synchro } from '../../../services/socket/synchro.service'; @Component({ selector: 'app-expediente', @@ -12,22 +15,25 @@ import { ExpedienteTaskPipe } from 'src/app/pipes/expediente-task.pipe'; }) export class ExpedientePage implements OnInit { - segment:string; + segment: string; skeletonLoader = true //profile:string; - showLoader:boolean; + showLoader: boolean; taskslist = []; - serialNumber:string; + serialNumber: string; expedienteGdStore = ExpedienteGdStore expedienteTaskPipe = new ExpedienteTaskPipe() - + listToPresent; + synch = synchro constructor( - private processes:ProcessesService, + private processes: ProcessesService, private router: Router, - private toastService: ToastService - ) {} + private toastService: ToastService, + public platform: Platform, + private sqliteservice: SqliteService, + ) { } ngOnInit() { @@ -35,17 +41,19 @@ export class ExpedientePage implements OnInit { const pathname = location.pathname + location.search this.LoadList() - + this.router.events.forEach((event) => { if (event instanceof NavigationStart && event.url.startsWith(pathname)) { - if(window.location.pathname.split('/').length >= 4 && window.location.pathname.startsWith('/home/gabinete-digital')) { + if (window.location.pathname.split('/').length >= 4 && window.location.pathname.startsWith('/home/gabinete-digital')) { this.refreshing() } else { this.LoadList() } } }); - + + this.getEventsFromLocalDb(); + } async LoadList() { @@ -54,16 +62,17 @@ export class ExpedientePage implements OnInit { try { const expediente: object[] = await this.processes.GetTaskListExpediente(false).toPromise() const result = expediente - + this.taskslist = new Array(); let res = result.reverse().filter((data: any) => data.workflowInstanceDataFields.Status == "Active"); res.forEach((element: any) => { - let task = this.expedienteTaskPipe.transform(element) + let task = this.expedienteTaskPipe.transform(element) this.taskslist.push(task); }); - + + this.SqliteAddExpediente(this.taskslist) this.expedienteGdStore.reset(this.taskslist); } catch (error) { @@ -92,9 +101,56 @@ export class ExpedientePage implements OnInit { this.router.navigate(['/home/gabinete-digital']); } - goToExpediente(serialNumber:any){ + goToExpediente(serialNumber: any) { //console.log('ABRE'); - this.router.navigate(['/home/gabinete-digital/expediente',serialNumber,'gabinete-digital']); + this.router.navigate(['/home/gabinete-digital/expediente', serialNumber, 'gabinete-digital']); + } + + SqliteAddExpediente(list) { + list.forEach((expediente) => { + let data = { + serialNumber: expediente.serialNumber, + workflowInstanceFolio: expediente.workflowInstanceFolio, + Documents: expediente.Documents, + actions: expediente.actions, + activityInstanceName: expediente.activityInstanceName, + formURL: expediente.formURL, + originator: expediente.originator, + taskStartDate: expediente.taskStartDate, + totalDocuments: expediente.totalDocuments, + workflowDisplayName: expediente.workflowDisplayName, + workflowID: expediente.workflowID, + workflowInstanceDataFields: expediente.workflowInstanceDataFields, + workflowInstanceID: expediente.workflowInstanceID, + workflowName: expediente.workflowName + } + + this.sqliteservice.addExpediente(data); + }) + + } + + getEventsFromLocalDb() { + + + + synchro.registerCallback('Online', () => { + this.listToPresent = this.expedienteGdStore.list; + console.log('Onlineee') + + }) + + + synchro.registerCallback('Offline', () => { + this.platform.ready().then(() => { + this.sqliteservice.getAllExpedientes().then((expediente) => { + this.listToPresent = expediente + console.log("All expedientes from local,", expediente) + }) + console.log('Offlineee') + }) + + }) } } diff --git a/src/app/pages/login/login.page.ts b/src/app/pages/login/login.page.ts index b453225dc..aaae9fe0e 100644 --- a/src/app/pages/login/login.page.ts +++ b/src/app/pages/login/login.page.ts @@ -7,6 +7,7 @@ import { environment } from 'src/environments/environment'; import { AlertController } from '@ionic/angular'; import { NotificationsService } from 'src/app/services/notifications.service'; import { SessionStore } from 'src/app/store/session.service'; +import { SqliteService } from '../../services/sqlite.service'; @Component({ selector: 'app-login', @@ -31,11 +32,14 @@ export class LoginPage implements OnInit { private router: Router, private authService: AuthService, private toastService: ToastService, - public alertController: AlertController + public alertController: AlertController, + private sqliteservice: SqliteService ) { } - ngOnInit() {} + ngOnInit() { + + } //Function to validade the login inputs validateUsername() { @@ -83,9 +87,9 @@ export class LoginPage implements OnInit { if (attempt.UserId == SessionStore.user.UserId) { await this.authService.SetSession(attempt, this.userattempt); - await this.authService.loginChat(this.userattempt); + //await this.authService.loginChat(this.userattempt); this.getToken(); - SessionStore.setInativity(true) + SessionStore.setInativity(true); this.goback() } else { diff --git a/src/app/services/notifications.service.ts b/src/app/services/notifications.service.ts index 69a023564..44d7c344d 100644 --- a/src/app/services/notifications.service.ts +++ b/src/app/services/notifications.service.ts @@ -14,7 +14,8 @@ import { ToastService } from '../services/toast.service'; import { Optional } from '@angular/core'; import { JsonStore } from './jsonStore.service'; import { synchro } from './socket/synchro.service'; -import { v4 as uuidv4 } from 'uuid' +import { v4 as uuidv4 } from 'uuid'; +import { EventTrigger } from '../services/eventTrigger.service'; @Injectable({ providedIn: 'root' }) @@ -41,7 +42,8 @@ export class NotificationsService { private toastService: ToastService, private zone: NgZone, private activeroute: ActivatedRoute, - private jsonstore: JsonStore) { + private jsonstore: JsonStore, + private eventtrigger: EventTrigger) { this.storageService.get("Notifications").then((value) => { @@ -168,6 +170,9 @@ export class NotificationsService { this.storageService.store("Notifications",this.DataArray) console.log(message); + this.eventtrigger.publishSomeData({ + notification: "recive" + }) var data = JSON.parse(message.payload); synchro.$send(data) diff --git a/src/app/services/socket/synchro.service.ts b/src/app/services/socket/synchro.service.ts index dd19ac1f2..649e34dfd 100644 --- a/src/app/services/socket/synchro.service.ts +++ b/src/app/services/socket/synchro.service.ts @@ -3,6 +3,7 @@ import { SessionStore } from 'src/app/store/session.service'; import { v4 as uuidv4 } from 'uuid' import { BackgroundService } from '../background.service'; import { environment } from 'src/environments/environment'; +import { EventTrigger } from '../eventTrigger.service' export interface wss{ @@ -28,6 +29,7 @@ class SynchroService { private url: string = '' callback = function(){} private _connected = false; + private eventtrigger: EventTrigger; private BackgroundService = new BackgroundService() callBacks: { type: 'Offline' | 'Online' | 'Onmessage' | 'Chat' | 'Notification' | 'Notifications' | '', @@ -81,7 +83,7 @@ class SynchroService { - if(!this.conected) { + //if(!this._connected) { this.BackgroundService.online() this.callBacks.forEach((e)=>{ @@ -90,9 +92,13 @@ class SynchroService { } }) - } + //} console.log('open ======================= welcome to socket server') + this.eventtrigger.publishSomeData({ + internet: "online" + }) + this._connected = true // send all saved data due to internet connection @@ -177,14 +183,15 @@ class SynchroService { - if(this._connected) { + // if(this._connected){ this.BackgroundService.offline(); this.callBacks.forEach((e)=>{ if(e.type == 'Offline') { e.funx() } }) - } + //} + // status this._connected = false diff --git a/src/app/services/sqlite.service.spec.ts b/src/app/services/sqlite.service.spec.ts new file mode 100644 index 000000000..033257edb --- /dev/null +++ b/src/app/services/sqlite.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { SqliteService } from './sqlite.service'; + +describe('SqliteService', () => { + let service: SqliteService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(SqliteService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/sqlite.service.ts b/src/app/services/sqlite.service.ts new file mode 100644 index 000000000..33df215da --- /dev/null +++ b/src/app/services/sqlite.service.ts @@ -0,0 +1,254 @@ +import { Injectable } from '@angular/core'; +import { Platform } from '@ionic/angular'; +import { SQLite, SQLiteObject } from '@ionic-native/sqlite/ngx'; + +@Injectable({ + providedIn: 'root' +}) +export class SqliteService { + + private dbInstance: SQLiteObject; + readonly db_name: string = "gabinetedigital.db"; + readonly events: string = "Events"; + readonly expedientes: string = "Expedientes"; + EVENTS: Array; + EXPEDIENTES: Array; + + constructor(private platform: Platform, + private sqlite: SQLite) { + this.databaseConn(); + } + + databaseConn() { + this.platform.ready().then(async () => { + await this.sqlite.create({ + name: this.db_name, + location: 'default' + }).then(async (sqLite: SQLiteObject) => { + this.dbInstance = sqLite; + await sqLite.executeSql(` + CREATE TABLE IF NOT EXISTS ${this.events} ( + EventId varchar(255) PRIMARY KEY, + Subject varchar(255), + HasAttachments BIT, + Location varchar(255), + CalendarId varchar(255), + CalendarName varchar(255), + StartDate varchar(255), + EndDate varchar(255), + EventType varchar(255), + Attendees Text, + IsMeeting BIT, + IsRecurring BIT, + IsAllDayEvent BIT, + AppointmentState INTERGER, + TimeZone varchar(255), + Organizer Text, + Category varchar(255), + EventRecurrence Text, + Attachments Text, + Body Text + )`, []) + .then((res) => { + console.log("Sucess Events Table created: ", res) + }) + .catch((error) => console.log(JSON.stringify(error))); + + await sqLite.executeSql(` + CREATE TABLE IF NOT EXISTS ${this.expedientes} ( + serialNumber varchar(255) PRIMARY KEY, + workflowInstanceFolio varchar(255), + Documents Text, + actions Text, + activityInstanceName varchar(255), + formURL varchar(255), + originator Text, + taskStartDate varchar(255), + totalDocuments INTERGER, + workflowDisplayName varchar(255), + workflowID INTERGER, + workflowInstanceDataFields Text, + workflowInstanceID INTERGER, + workflowName varchar(255) + )`, []) + .then((res) => { + console.log("Sucess Espedientes Table created: ", res) + }) + .catch((error) => console.log(JSON.stringify(error))); + }) + .catch((error) => console.log(JSON.stringify(error))); + }); + } + + //addEvent + public addEvent(data) { + this.dbInstance.executeSql(` + INSERT OR REPLACE INTO ${this.events} (EventId,Subject,HasAttachments,Location,CalendarId,CalendarName,StartDate,EndDate,EventType,Attendees,IsMeeting,IsRecurring,IsAllDayEvent,AppointmentState,TimeZone,Organizer,Category,EventRecurrence,Attachments,Body ) + VALUES ('${data.EventId}','${data.Subject}', '${data.HasAttachments}','${data.Location}','${data.CalendarId}','${data.CalendarName}','${data.StartDate}','${data.EndDate}','${data.EventType}','${data.Attendees}','${data.IsMeeting}','${data.IsRecurring}', + '${data.IsAllDayEvent}','${data.AppointmentState}','${data.TimeZone}','${data.Organizer}','${data.Category}','${data.EventRecurrence}','${data.Attachments}','${data.Body}')`, []) + .then(() => { + console.log("event add with Success"); + + }, (e) => { + console.log(JSON.stringify(e.err)); + }); + } + + //addExpediente + public addExpediente(data) { + this.dbInstance.executeSql(` + INSERT OR REPLACE INTO ${this.expedientes} (serialNumber,workflowInstanceFolio,Documents,actions,activityInstanceName,formURL,originator,taskStartDate,totalDocuments,workflowDisplayName,workflowID,workflowInstanceDataFields,workflowInstanceID,workflowName) + VALUES ('${data.serialNumber}','${data.workflowInstanceFolio}', '${data.Documents}','${data.actions}','${data.activityInstanceName}','${data.formURL}','${data.originator}','${data.taskStartDate}','${data.totalDocuments}','${data.workflowDisplayName}','${data.workflowID}', + '${data.workflowInstanceDataFields}','${data.workflowInstanceID}','${data.workflowName}')`, []) + .then(() => { + console.log("expediente add with Success"); + + }, (e) => { + console.log(JSON.stringify(e.err)); + }); + } + //getAllEvents + getAllEvents() { + var hashattachment = false; + var ismeeting = false; + var isrecurring = false; + var isallday = false; + return this.dbInstance.executeSql(`SELECT * FROM ${this.events}`, []).then((res) => { + this.EVENTS = []; + if (res.rows.length > 0) { + for (var i = 0; i < res.rows.length; i++) { + if (res.rows.item(i).HasAttachments === "true") { + hashattachment = true + } + if (res.rows.item(i).IsMeeting === "true") { + ismeeting = true + } + if (res.rows.item(i).IsRecurring === "true") { + isrecurring = true + } + if (res.rows.item(i).IsAllDayEvent === "true") { + isallday = true + } + let event = { + EventId: res.rows.item(i).EventId, + HasAttachments: hashattachment, + Subject: res.rows.item(i).Subject, + Location: res.rows.item(i).Location, + CalendarId: res.rows.item(i).CalendarId, + CalendarName: res.rows.item(i).CalendarName, + StartDate: res.rows.item(i).StartDate, + EndDate: res.rows.item(i).EndDate, + EventType: res.rows.item(i).EventType, + Attendees: res.rows.item(i).Attendees, + IsMeeting: ismeeting, + IsRecurring: isrecurring, + IsAllDayEvent: isallday, + AppointmentState: res.rows.item(i).AppointmentState, + TimeZone: res.rows.item(i).TimeZone, + Organizer: res.rows.item(i).Organizer, + Category: res.rows.item(i).Category, + EventRecurrence: res.rows.item(i).EventRecurrence, + Attachments: res.rows.item(i).Attachments + } + this.EVENTS.push(event); + } + + return this.EVENTS; + } + }, (e) => { + console.log(" Get all events error", JSON.stringify(e)); + }); + } + + getAllExpedientes() { + return this.dbInstance.executeSql(`SELECT * FROM ${this.expedientes}`, []).then((res) => { + this.EXPEDIENTES = []; + if (res.rows.length > 0) { + for (var i = 0; i < res.rows.length; i++) { + this.EXPEDIENTES.push(res.rows.item(i)); + } + return this.EXPEDIENTES; + } + }, (e) => { + console.log(" Get all expedientes error", JSON.stringify(e)); + }); + } + + //getEventBy id + getEventById(id) { + + var hashattachment = false; + var ismeeting = false; + var isrecurring = false; + var isallday = false; + var body; + var attendes; + var organizer; + var eventrecurrence; + var attachment; + + return this.dbInstance.executeSql(`SELECT * FROM ${this.events} WHERE EventId = ? `, [id]).then((res) => { + this.EVENTS = []; + if (res.rows.length > 0) { + for (var i = 0; i < res.rows.length; i++) { + if (res.rows.item(i).HasAttachments === "true") { + hashattachment = true + } + if (res.rows.item(i).IsMeeting === "true") { + ismeeting = true + } + if (res.rows.item(i).IsRecurring === "true") { + isrecurring = true + } + if (res.rows.item(i).IsAllDayEvent === "true") { + isallday = true + } + /* if (res.rows.item(i).Body != "") { + body = JSON.parse(res.rows.item(i).Body); + } + if (res.rows.item(i).Attendees !="") { + attendes = JSON.parse(res.rows.item(i).Attendees); + } + if(res.rows.item(i).Organizer !=""){ + organizer = JSON.parse(res.rows.item(i).Organizer); + } + if(res.row.item(i).EventRecurrence != ""){ + eventrecurrence = JSON.parse(res.row.item(i).EventRecurrence); + } + if(res.row.item(i).Attachments != ""){ + attachment = JSON.parse(res.row.item(i).Attachments); + } + */ + + let event = { + EventId: res.rows.item(i).EventId, + HasAttachments: hashattachment, + Subject: res.rows.item(i).Subject, + Location: res.rows.item(i).Location, + CalendarId: res.rows.item(i).CalendarId, + CalendarName: res.rows.item(i).CalendarName, + StartDate: res.rows.item(i).StartDate, + EndDate: res.rows.item(i).EndDate, + EventType: res.rows.item(i).EventType, + Attendees: res.rows.item(i).Attendees, + IsMeeting: ismeeting, + IsRecurring: isrecurring, + IsAllDayEvent: isallday, + Body: res.rows.item(i).Body, + AppointmentState: res.rows.item(i).AppointmentState, + TimeZone: res.rows.item(i).TimeZone, + Organizer: res.rows.item(i).Organizer, + Category: res.rows.item(i).Category, + EventRecurrence: res.rows.item(i).EventRecurrence, + Attachments: res.rows.item(i).Attachments + } + this.EVENTS.push(event); + } + + return this.EVENTS; + } + }, (e) => { + console.log(" Get events by id error", JSON.stringify(e)); + }); + } +}