diff --git a/.gitignore b/.gitignore
index 4cf0a4c62..d0e817ccb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,6 +30,7 @@ npm-debug.log*
/platforms
/plugins
/www
+/mobilefirst
# Custom
/android
diff --git a/config.xml b/config.xml
index b3e4a2084..fc70cef4e 100644
--- a/config.xml
+++ b/config.xml
@@ -101,14 +101,14 @@
1109370933
- 0
+ 4242109404
- 0
- 0
+ 246097737
+ 3914937917
@@ -134,9 +134,9 @@
0
- 8.0.0.00-20210214-154410
+ 8.0.0.00-20210308-063916
-
+
en
diff --git a/google-services.json b/google-services.json
new file mode 100644
index 000000000..0a455bcff
--- /dev/null
+++ b/google-services.json
@@ -0,0 +1,40 @@
+{
+ "project_info": {
+ "project_number": "800733765231",
+ "firebase_url": "https://gabinete-digital-2020.firebaseio.com",
+ "project_id": "gabinete-digital-2020",
+ "storage_bucket": "gabinete-digital-2020.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:800733765231:android:e7ffc0b310037d9f13779a",
+ "android_client_info": {
+ "package_name": "com.gpr.gabinetedigital"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "800733765231-92oa7ib62ob0pkouphb5i5sp01vkalid.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyD0pfW45DLoW6mqvZRklJdbfSTskW22Fok"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "800733765231-92oa7ib62ob0pkouphb5i5sp01vkalid.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 714e3288f..2f5db9be5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2039,6 +2039,21 @@
}
}
},
+ "@ionic-native/fcm": {
+ "version": "5.32.0",
+ "resolved": "https://registry.npmjs.org/@ionic-native/fcm/-/fcm-5.32.0.tgz",
+ "integrity": "sha512-6BU5cbxILHe3LmL82qwTl80BCaDzZvkd2svQm3CQgwBrBuzzccYd4iSqpdkHXyLkb49fIRa22r3apc7EJ72cFg==",
+ "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/file": {
"version": "5.31.1",
"resolved": "https://registry.npmjs.org/@ionic-native/file/-/file-5.31.1.tgz",
@@ -4388,6 +4403,15 @@
"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
"dev": true
},
+ "bplist-creator": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz",
+ "integrity": "sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==",
+ "dev": true,
+ "requires": {
+ "stream-buffers": "~2.2.0"
+ }
+ },
"bplist-parser": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
@@ -5628,6 +5652,97 @@
}
}
},
+ "cordova-ios": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-6.2.0.tgz",
+ "integrity": "sha512-sLjZg2QBI1SpQVwfe0MSn89YNVkBGLW9Q1vcFJBsqKBrhvoEOJ5Ytq0gwqdhgTOGzlwJUfxC6OHM3jcsRjtYrw==",
+ "dev": true,
+ "requires": {
+ "cordova-common": "^4.0.2",
+ "fs-extra": "^9.1.0",
+ "ios-sim": "^8.0.2",
+ "nopt": "^5.0.0",
+ "plist": "^3.0.1",
+ "semver": "^7.3.4",
+ "unorm": "^1.6.0",
+ "which": "^2.0.2",
+ "xcode": "^3.0.1",
+ "xml-escape": "^1.1.0"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "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"
+ }
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
+ "cordova-plugin-androidx": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-androidx/-/cordova-plugin-androidx-3.0.0.tgz",
+ "integrity": "sha512-niMnhcxKsu4/oKTUbL0jRAnh6/cdoIVxRxJqj3uEyv8CVOlAj1sWhX+9b1XiAo9+bejAM9BbA21YK0mChfbVTA==",
+ "dev": true
+ },
+ "cordova-plugin-androidx-adapter": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-androidx-adapter/-/cordova-plugin-androidx-adapter-1.1.3.tgz",
+ "integrity": "sha512-W1SImn0cCCvOSTSfWWp5TnanIQrSuh2Bch+dcZXIzEn0km3Qb7VryeAqHhgBQYwwzC5Ollk1DtUAk/AJSojuZA==",
+ "dev": true,
+ "requires": {
+ "q": "^1.5.1",
+ "recursive-readdir": "^2.2.2"
+ }
+ },
"cordova-plugin-camera": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-camera/-/cordova-plugin-camera-5.0.1.tgz",
@@ -5645,6 +5760,15 @@
"integrity": "sha512-Jb3V72btxf3XHpkPQsGdyc8N6tVBYn1vsxSFj43fIz9vonJDUThYPCJJHqk6PX6N4dJw6I4FjxkpfCR4LDYMlw==",
"dev": true
},
+ "cordova-plugin-fcm-with-dependecy-updated": {
+ "version": "7.8.0",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-fcm-with-dependecy-updated/-/cordova-plugin-fcm-with-dependecy-updated-7.8.0.tgz",
+ "integrity": "sha512-p2pbY1oqQ2UDbaWOWA2z84uMXmdDGYmK2O+mrufj1bZyoFodt7WqrtiB9oDnUuSSinMrdNFrupiWEDMSBSNVeQ==",
+ "dev": true,
+ "requires": {
+ "typescript": "^4.1.3"
+ }
+ },
"cordova-plugin-filepath": {
"version": "1.5.8",
"resolved": "https://registry.npmjs.org/cordova-plugin-filepath/-/cordova-plugin-filepath-1.5.8.tgz",
@@ -6479,11 +6603,6 @@
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
},
- "deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg=="
- },
"default-gateway": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
@@ -7024,7 +7143,8 @@
"entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "dev": true
},
"env-paths": {
"version": "2.2.0",
@@ -8252,11 +8372,6 @@
"minimalistic-assert": "^1.0.1"
}
},
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
- },
"hex-color-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
@@ -8325,63 +8440,6 @@
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
- "html-to-text": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-7.0.0.tgz",
- "integrity": "sha512-UR/WMSHRN8m+L7qQUhbSoxylwBovNPS+xURn/pHeJvbnemhyMiuPYBTBGqB6s8ajAARN5jzKfF0d3CY86VANpA==",
- "requires": {
- "deepmerge": "^4.2.2",
- "he": "^1.2.0",
- "htmlparser2": "^6.0.0",
- "minimist": "^1.2.5"
- },
- "dependencies": {
- "dom-serializer": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz",
- "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==",
- "requires": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.0.0",
- "entities": "^2.0.0"
- }
- },
- "domelementtype": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
- "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
- },
- "domhandler": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.1.0.tgz",
- "integrity": "sha512-/6/kmsGlMY4Tup/nGVutdrK9yQi4YjWVcVeoQmixpzjOUK1U7pQkvAPHBJeUxOgxF0J8f8lwCJSlCfD0V4CMGQ==",
- "requires": {
- "domelementtype": "^2.2.0"
- }
- },
- "domutils": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.1.tgz",
- "integrity": "sha512-hO1XwHMGAthA/1KL7c83oip/6UWo3FlUNIuWiWKltoiQ5oCOiqths8KknvY2jpOohUoUgnwa/+Rm7UpwpSbY/Q==",
- "requires": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.1.0"
- }
- },
- "htmlparser2": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz",
- "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==",
- "requires": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.0.0",
- "domutils": "^2.4.4",
- "entities": "^2.0.0"
- }
- }
- }
- },
"htmlparser2": {
"version": "3.10.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
@@ -8900,6 +8958,11 @@
"ipaddr.js": "^1.9.0"
}
},
+ "ionic-angular": {
+ "version": "3.9.10",
+ "resolved": "https://registry.npmjs.org/ionic-angular/-/ionic-angular-3.9.10.tgz",
+ "integrity": "sha512-4nmGrdpu4Zy3SZwF0AaS/3gDrbFGU1dV+zn1eqInFgFj9q20N1cIITgvyIcoxUI/IoqYiohsJX1rGY5vB/HrhQ=="
+ },
"ionic-selectable": {
"version": "4.7.1",
"resolved": "https://registry.npmjs.org/ionic-selectable/-/ionic-selectable-4.7.1.tgz",
@@ -8929,6 +8992,35 @@
"@stencil/core": "^2.4.0"
}
},
+ "ios-sim": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/ios-sim/-/ios-sim-8.0.2.tgz",
+ "integrity": "sha512-P7nEG771bfd+JoMRjnis1gpZOkjTUUxu+4Ek1Z+eoaEEoT9byllU9pxfQ8Df7hL3gSkIQxNwTSLhos2I8tWUQA==",
+ "dev": true,
+ "requires": {
+ "bplist-parser": "^0.0.6",
+ "nopt": "1.0.9",
+ "plist": "^3.0.1",
+ "simctl": "^2"
+ },
+ "dependencies": {
+ "bplist-parser": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.0.6.tgz",
+ "integrity": "sha1-ONo0cYF9+dRKs4kuJ3B7u9daEbk=",
+ "dev": true
+ },
+ "nopt": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.9.tgz",
+ "integrity": "sha1-O8DXy6e/sNWmdtvtfA6+SKT9RU4=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ }
+ }
+ },
"ip": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
@@ -13930,6 +14022,15 @@
"picomatch": "^2.2.1"
}
},
+ "recursive-readdir": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
+ "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
+ "dev": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
"reflect-metadata": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz",
@@ -14819,11 +14920,27 @@
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
+ "shelljs": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.2.6.tgz",
+ "integrity": "sha1-kEktcv/MgVmXa6umL7D2iE8MM3g=",
+ "dev": true
+ },
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
},
+ "simctl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/simctl/-/simctl-2.0.0.tgz",
+ "integrity": "sha512-5rB7rN4N3b0z0nFdy9eczVssXqrv2aAgdVRksPVqVoiDtvXmfzNvebp3EMdId2sAUzXIflarQlx4P0hjVQEzKQ==",
+ "dev": true,
+ "requires": {
+ "shelljs": "^0.2.6",
+ "tail": "^0.4.0"
+ }
+ },
"simple-concat": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
@@ -14854,6 +14971,17 @@
}
}
},
+ "simple-plist": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.1.1.tgz",
+ "integrity": "sha512-pKMCVKvZbZTsqYR6RKgLfBHkh2cV89GXcA/0CVPje3sOiNOnXA8+rp/ciAMZ7JRaUdLzlEM6JFfUn+fS6Nt3hg==",
+ "dev": true,
+ "requires": {
+ "bplist-creator": "0.0.8",
+ "bplist-parser": "0.2.0",
+ "plist": "^3.0.1"
+ }
+ },
"simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
@@ -15528,6 +15656,12 @@
"readable-stream": "^2.0.2"
}
},
+ "stream-buffers": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz",
+ "integrity": "sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ=",
+ "dev": true
+ },
"stream-each": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
@@ -15888,6 +16022,12 @@
"integrity": "sha512-6tDOXSHiVjuCaasQSWTmHUWn4PuG7qa3+1WT031yTc/swT7+rLiw3GOrFxaH1E3lLP09dH3bVuVDf2gK5rxG3Q==",
"dev": true
},
+ "tail": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/tail/-/tail-0.4.0.tgz",
+ "integrity": "sha1-0p3nJ1DMmdseBTr/E8NZ7PtxMAI=",
+ "dev": true
+ },
"tapable": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
@@ -16403,6 +16543,12 @@
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true
},
+ "unorm": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz",
+ "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==",
+ "dev": true
+ },
"unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@@ -16576,6 +16722,12 @@
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
"dev": true
},
+ "uuid": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz",
+ "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==",
+ "dev": true
+ },
"validate-npm-package-name": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz",
@@ -17776,6 +17928,22 @@
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz",
"integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA=="
},
+ "xcode": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz",
+ "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==",
+ "dev": true,
+ "requires": {
+ "simple-plist": "^1.1.0",
+ "uuid": "^7.0.3"
+ }
+ },
+ "xml-escape": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/xml-escape/-/xml-escape-1.1.0.tgz",
+ "integrity": "sha1-OQTBQ/qOs6ADDsZG0pAqLxtwbEQ=",
+ "dev": true
+ },
"xml2js": {
"version": "0.4.23",
"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
diff --git a/package.json b/package.json
index 637a324f2..cbe0e9b78 100644
--- a/package.json
+++ b/package.json
@@ -28,6 +28,7 @@
"@fullcalendar/interaction": "^5.3.0",
"@ionic-native/camera": "^5.31.1",
"@ionic-native/core": "^5.0.7",
+ "@ionic-native/fcm": "^5.32.0",
"@ionic-native/file": "^5.30.0",
"@ionic-native/file-path": "^5.30.0",
"@ionic-native/http": "^5.31.1",
@@ -50,7 +51,7 @@
"cordova-res": "^0.15.3",
"cordova-sqlite-storage": "^5.1.0",
"date-fns": "^2.17.0",
- "html-to-text": "^7.0.0",
+ "ionic-angular": "^3.9.10",
"ionic-selectable": "^4.7.1",
"ionic2-alpha-scroll": "^2.0.1",
"ionic2-calendar": "^0.6.6",
@@ -78,8 +79,12 @@
"codelyzer": "^6.0.0",
"cordova-android": "^9.0.0",
"cordova-browser": "^6.0.0",
+ "cordova-ios": "^6.2.0",
+ "cordova-plugin-androidx": "^3.0.0",
+ "cordova-plugin-androidx-adapter": "^1.1.3",
"cordova-plugin-compat": "^1.2.0",
"cordova-plugin-device": "^2.0.2",
+ "cordova-plugin-fcm-with-dependecy-updated": "^7.8.0",
"cordova-plugin-inappbrowser": "^4.0.0",
"cordova-plugin-ionic-keyboard": "^2.2.0",
"cordova-plugin-ionic-webview": "^4.2.1",
@@ -112,10 +117,21 @@
"cordova-plugin-camera": {},
"cordova-sqlite-storage": {},
"cordova-plugin-compat": {},
- "cordova-plugin-mfp": {}
+ "cordova-plugin-mfp": {},
+ "cordova-plugin-androidx": {},
+ "cordova-plugin-androidx-adapter": {},
+ "cordova-plugin-fcm-with-dependecy-updated": {
+ "ANDROID_DEFAULT_NOTIFICATION_ICON": "@mipmap/ic_launcher",
+ "ANDROID_FCM_VERSION": "21.0.0",
+ "ANDROID_FIREBASE_BOM_VERSION": "26.0.0",
+ "ANDROID_GOOGLE_SERVICES_VERSION": "4.3.4",
+ "ANDROID_GRADLE_TOOLS_VERSION": "4.1.0",
+ "IOS_FIREBASE_MESSAGING_VERSION": "~> 7.4.0"
+ }
},
"platforms": [
"browser",
+ "ios",
"android"
]
},
diff --git a/resources/android/xml/network_security_config.xml b/resources/android/xml/network_security_config.xml
index de61259aa..bb865c5d2 100644
--- a/resources/android/xml/network_security_config.xml
+++ b/resources/android/xml/network_security_config.xml
@@ -2,5 +2,7 @@
localhost
+ 192.168.0.244
+ gpr-dev-10.gabinetedigital.local
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index a1681cb40..3cc61ca02 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -29,6 +29,8 @@ import { adapterFactory } from 'angular-calendar/date-adapters/date-fns';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MessagesPage } from './pages/chat/messages/messages.page';
+import { FCM } from 'cordova-plugin-fcm-with-dependecy-updated/ionic/ngx'
+
@NgModule({
declarations: [AppComponent,MessagesPage,],
@@ -55,6 +57,7 @@ import { MessagesPage } from './pages/chat/messages/messages.page';
//File,
WebView,
FilePath,
+ FCM
],
bootstrap: [AppComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA]
diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts
index 7bbf2f8d8..d6a45060a 100644
--- a/src/app/home/home.page.ts
+++ b/src/app/home/home.page.ts
@@ -1,11 +1,20 @@
+///
import { Component, OnInit, NgZone } from '@angular/core';
import { EventsService } from '../services/events.service';
import { Event } from '../models/event.model';
import { ProcessesService } from '../services/processes.service';
-import { ModalController } from '@ionic/angular';
+import { ModalController, AlertController, AnimationController } from '@ionic/angular';
+//import { AlertController } from 'ionic-angular';
/* import { Plugins, PushNotification, PushNotificationToken, PushNotificationActionPerformed, Modals } from '@capacitor/core'; */
import { Router } from '@angular/router';
+import { FCM } from 'cordova-plugin-fcm-with-dependecy-updated/ionic/ngx';
+import { ViewEventPage } from '../pages/agenda/view-event/view-event.page';
+import { ApproveEventModalPage } from '../pages/agenda/approve-event-modal/approve-event-modal.page';
+import { ExpedienteDetailPage } from '../pages/gabinete-digital/expediente/expediente-detail/expediente-detail.page';
+import { PublicationDetailPage } from '../pages/publications/publication-detail/publication-detail.page';
+import { ViewPublicationsPage } from '../pages/publications/view-publications/view-publications.page';
+
/* const { PushNotifications, LocalNotifications, LocalNotificationAction } = Plugins; */
@Component({
@@ -22,133 +31,163 @@ export class HomePage implements OnInit {
totalExpediente = 0;
profile: string;
- constructor(private zone: NgZone,private eventService: EventsService, private processesbackend: ProcessesService, private router: Router, private modalController: ModalController) {
-
+ adding: "intervenient" | "CC" = "intervenient";
+ mobileComponent = {
+ showAddNewEvent: false,
+ showEditEvent: false,
+ showEventDetails: false,
+ showEventList: false,
+ transparentEventList: false,
+ transparentEventToApprove: false,
+ showEventToApprove: false,
+ showAttendees: false,
+ showAttendeeModal: false
+ }
+ eventToaprove: any = {
+ back: false,
+ serialNumber: "",
+ saveData: {}
+ }
+ selectedEvent: Event;
+ postEvent: any;
+ folderId: string;
+
+ constructor(private zone: NgZone, private eventService: EventsService, private processesbackend: ProcessesService, private router: Router, private modalController: ModalController, public modalCtrl: AlertController, private fcm: FCM, private animationController: AnimationController,) {
+
router.events.subscribe((val) => {
- document.querySelectorAll('ion-modal').forEach((e)=>e.remove())
+ document.querySelectorAll('ion-modal').forEach((e) => e.remove())
});
-
+
+ {
+ //this.folderId = this.navParams.get('folderId');
+ }
+
}
ngOnInit() {
- //Initialize profile as mdgpr
- 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";
-
- this.profile = "mdgpr";
- if (this.profile == "mdgpr") {
- this.eventService.getAllMdEvents(start, end).subscribe(res => {
- this.eventsList = res;
- this.totalEvent = this.eventsList.length;
- });
- }
- else {
- this.eventService.getAllPrEvents(start, end).subscribe(res => {
- this.eventsList = res;
- this.totalEvent = this.eventsList.length;
- });
-
- }
- this.processesbackend.GetTasksList("Expediente", true).subscribe(result => {
- this.totalExpediente = result;
- });
+ this.pushCordova()
+ /* //Initialize profile as mdgpr
-/*
- PushNotifications.addListener('registrationError', (error: any) => {
- alert('Error on registration: ' + JSON.stringify(error));
- });
-
- PushNotifications.addListener('pushNotificationReceived', notification => {
-
- //const isPushNotification = !!notification.title || !!notification.body;
-
- // if this is a push notification received when the app is in the foreground on Android
- //if (isAndroid && isPushNotification) {
-
- // We schedule a LocalNotification 1 second later since Capacitor for Android doesn't show anything in this case
- console.log('Recived: ', notification)
- //}
- });
-
-
- PushNotifications.addListener(
- 'pushNotificationActionPerformed',
- (notification: PushNotificationActionPerformed) => {
- let service = notification.notification.data.Service;
- let object = notification.notification.data.Object;
- let idObject = notification.notification.data.IdObject;
-
- console.log('Complete Object: ', notification.notification )
-
- console.log('Service: ', service);
- console.log('Object: ', object);
- console.log('idObject: ', idObject);
-
- if (service === "agenda") {
- //this.router.navigate(['/home/', service, idObject, 'home']);
- this.viewEventDetail(idObject)
- }
- else if (service === "gabinete-digital" && object === "expediente") {
- this.viewExpedientDetail(idObject)
- }
- else if (service === "gabinete-digital" && object === "event-list") {
- // this.ngZone.run(() => {this.router.navigate(['/home/gabinete-digital/event-list', idObject])})
- this.openApproveModal(idObject);
- }
- else if (service === "accoes" && object === "accao") {
- this.viewPublications(idObject)
- }
- else if (service === "accoes" && object === "publicacao") {
- this.viewPublicationDetail(idObject)
- }
-
- },
- ); */
+ 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";
+
+ this.profile = "mdgpr";
+ if (this.profile == "mdgpr") {
+ this.eventService.getAllMdEvents(start, end).subscribe(res => {
+ this.eventsList = res;
+ this.totalEvent = this.eventsList.length;
+ });
+ }
+ else {
+ this.eventService.getAllPrEvents(start, end).subscribe(res => {
+ this.eventsList = res;
+ this.totalEvent = this.eventsList.length;
+ });
+
+ }
+ this.processesbackend.GetTasksList("Expediente", true).subscribe(result => {
+ this.totalExpediente = result;
+ });
+
+ */
}
- /* mobileFirstTest() {
- this.zone.run(() => {
- alert("Hello MobileFirst");
- alert("Connecting to Server...");
+ pushCordova() {
+
+ this.fcm.onNotification().subscribe(data => {
+ this.viewEventDetail(data.idObject)
+ if (data.click_action) {
+ console.log("Received in background: ", data);
+
+ if (data.service === "agenda") {
+ //this.router.navigate(['/home/', service, idObject, 'home']);
+ this.viewEventDetail(data.idObject)
+ }
+ else if (data.service === "gabinete-digital" && data.object === "expediente") {
+ this.viewExpedientDetail(data.idObject)
+ }
+ else if (data.service === "gabinete-digital" && data.object === "event-list") {
+ // this.ngZone.run(() => {this.router.navigate(['/home/gabinete-digital/event-list', idObject])})
+ this.openApproveModal(data.idObject);
+ }
+ else if (data.service === "accoes" && data.object === "accao") {
+ //this.viewPublications(data.idObject)
+ alert(data.idObject)
+ }
+ else if (data.service === "accoes" && data.object === "publicacao") {
+ this.viewPublicationDetail(data.idObject)
+ }
+
+ } else {
+ console.log("Received in foreground: ", data);
+ if (data.service === "agenda") {
+ //this.router.navigate(['/home/', service, idObject, 'home']);
+ this.viewEventDetail(data.idObject)
+ }
+ else if (data.service === "gabinete-digital" && data.object === "expediente") {
+ this.viewExpedientDetail(data.idObject)
+ }
+ else if (data.service === "gabinete-digital" && data.object === "event-list") {
+ // this.ngZone.run(() => {this.router.navigate(['/home/gabinete-digital/event-list', idObject])})
+ this.openApproveModal(data.idObject);
+ }
+ else if (data.service === "accoes" && data.object === "accao") {
+ this.viewPublications(data.idObject)
+ }
+ else if (data.service === "accoes" && data.object === "publicacao") {
+ this.viewPublicationDetail(data.idObject)
+ }
+ };
});
- WLAuthorizationManager.obtainAccessToken("").then(
- (token) => {
- console.log('--> pingMFP(): Success ', token);
- this.zone.run(() => {
- alert("Yay!");
- alert("Connected to MobileFirst Server");
- });
- var resourceRequest = new WLResourceRequest("/adapters/javaAdapter/resource/greet/",
- WLResourceRequest.GET
- );
- resourceRequest.setQueryParameter("name", "world");
- resourceRequest.send().then(
- (response) => {
- // Will display "Hello world" in an alert dialog.
- alert("Success: " + response.responseText);
- },
- (error) => {
- alert("Failure: " + JSON.stringify(error));
- }
- );
- }, (error) => {
- console.log('--> pingMFP(): failure ', error.responseText);
- this.zone.run(() => {
- alert("Bummer...");
- alert("Failed to connect to MobileFirst Server");
- });
+ this.fcm.onTokenRefresh().subscribe(token => {
+ // Register your new token in your back-end if you want
+ // backend.registerToken(token);
+ });
+
+ this.ubscribeToTopic()
+ this.getToken()
+
+ }
+
+ ubscribeToTopic() {
+ this.fcm.subscribeToTopic('enappd');
+ }
+ getToken() {
+ this.fcm.getToken().then(token => {
+ console.log('token: ', token)
+ // Register your new token in your back-end if you want
+ // backend.registerToken(token);
+ });
+ }
+
+ async viewEventDetail(eventId: any) {
+ console.log(this.profile);
+
+ const modal = await this.modalController.create({
+ component: ViewEventPage,
+ componentProps: {
+ eventId: eventId,
+ adding: this.adding
+ },
+ cssClass: 'modal modal-desktop',
+ backdropDismiss: false
+ });
+ await modal.present();
+ modal.onDidDismiss().then((res) => {
+ if (res) {
+ //this.viewEventDetailDismiss(res);
}
- );
- } */
+ });
+ }
- /* async openApproveModal(eventSerialNumber){
+ async openApproveModal(eventSerialNumber) {
const modal = await this.modalController.create({
component: ApproveEventModalPage,
- componentProps:{
+ componentProps: {
serialNumber: eventSerialNumber,
},
cssClass: 'cal-modal',
@@ -157,46 +196,17 @@ export class HomePage implements OnInit {
await modal.present();
modal.onDidDismiss();
- } */
-
- /* async viewEventDetail(eventId:any) {
- console.log(this.profile);
-
- const modal = await this.modalController.create({
- component: ViewEventPage,
- componentProps:{
- eventId: eventId,
- },
- cssClass: 'modal',
- backdropDismiss: false
- });
- await modal.present();
- modal.onDidDismiss();
- } */
-
- /* async viewExpedientDetail(serialNumber:any) {
- console.log(this.profile);
-
- const modal = await this.modalController.create({
- component: ViewEventPage,
- componentProps: {
- eventId: eventId,
- },
- cssClass: 'modal',
- backdropDismiss: false
- });
- await modal.present();
- modal.onDidDismiss().then((res) => {
- if (res) {
- console.log(res);
- //this.loadRangeEvents(this.rangeStartDate, this.rangeEndDate);
- }
- });
}
async viewExpedientDetail(serialNumber: any) {
- console.log(this.profile);
- console.log("Expediente id: ", serialNumber);
+ let classs;
+ if (window.innerWidth <= 800) {
+ classs = 'modal'
+ } else {
+ classs = 'modal modal-desktop showAsideOptions'
+ }
+ /* console.log(this.profile);
+ console.log(serialNumber); */
const modal = await this.modalController.create({
component: ExpedienteDetailPage,
@@ -204,43 +214,75 @@ export class HomePage implements OnInit {
serialNumber: serialNumber,
profile: this.profile,
},
- cssClass: 'modal',
- backdropDismiss: false
+ cssClass: classs,
});
await modal.present();
- modal.onDidDismiss();
- } */
+ modal.onDidDismiss().then((res) => {
+ if (res) {
+ console.log(res);
+ }
+ });
+ }
-
-
- /* async viewPublicationDetail(folderId) {
+ async viewPublicationDetail(publicationId: string) {
const modal = await this.modalController.create({
component: PublicationDetailPage,
componentProps: {
- folderId: folderId,
+ publicationId: publicationId,
+ folderId: this.folderId,
},
cssClass: 'publication-detail',
backdropDismiss: false
});
await modal.present();
- modal.onDidDismiss();
- } */
+ modal.onDidDismiss().then(() => {
+ //this.getPublications();
+ });
+ }
+
+
+ async viewPublications(folderId) {
+
+ const enterAnimation = (baseEl: any) => {
+ const backdropAnimation = this.animationController.create()
+ .addElement(baseEl.querySelector('ion-backdrop')!)
+ .fromTo('opacity', '0.01', 'var(--backdrop-opacity)');
+
+ const wrapperAnimation = this.animationController.create()
+ .addElement(baseEl.querySelector('.modal-wrapper')!)
+ .keyframes([
+ { offset: 0, opacity: '0', transform: 'scale(0)' },
+ { offset: 1, opacity: '0.99', transform: 'scale(1)' }
+ ]);
+
+ return this.animationController.create()
+ .addElement(baseEl)
+ .easing('ease-out')
+ .duration(500)
+ .addAnimation([backdropAnimation, wrapperAnimation]);
+ }
+
+ const leaveAnimation = (baseEl: any) => {
+ return enterAnimation(baseEl).direction('reverse');
+ }
- /* async viewPublications(folderId) {
const modal = await this.modalController.create({
component: ViewPublicationsPage,
enterAnimation,
leaveAnimation,
componentProps: {
- item: folderId,
+ folderId: folderId,
},
cssClass: 'new-action',
backdropDismiss: false
});
await modal.present();
modal.onDidDismiss();
- } */
+ }
+
+
+
diff --git a/src/assets/js/index.js b/src/assets/js/index.js
new file mode 100644
index 000000000..a2b0dfc2d
--- /dev/null
+++ b/src/assets/js/index.js
@@ -0,0 +1,22 @@
+function wlCommonInit() {
+
+ WLAuthorizationManager.obtainAccessToken()
+
+ .then(
+
+ function (accessToken) {
+ alert('Index sucsse: ', accessToken)
+
+ },
+
+ function (error) {
+ alert('Index error: ', error)
+
+
+ }
+
+ );
+
+
+
+}
\ No newline at end of file
diff --git a/src/assets/js/wldirectudpate.js b/src/assets/js/wldirectudpate.js
new file mode 100644
index 000000000..9d0ae6fb0
--- /dev/null
+++ b/src/assets/js/wldirectudpate.js
@@ -0,0 +1,22 @@
+function wlCommonInit(){
+ // Override the default Direct Update interface.
+
+ //uncomment below function to get custom DU
+ wl_directUpdateChallengeHandler.handleDirectUpdate = function(directUpdateData, directUpdateContext) {
+ // Create a dialog.
+ navigator.notification.confirm(
+ 'Actualização Disponivel',
+ // Handle dialog buttons.
+ function(buttonIndex) {
+ if (buttonIndex == 1) {
+ directUpdateContext.start();
+ } else {
+ wl_directUpdateChallengeHandler.submitFailure();
+ }
+ },
+ 'ctualização Disponivel',
+ ['Actualizar']
+ );
+ };
+
+}
\ No newline at end of file
diff --git a/src/index.html b/src/index.html
index 624ff63ae..ae8d2c052 100644
--- a/src/index.html
+++ b/src/index.html
@@ -7,6 +7,9 @@
+
+
+