From 3b6da3d2c785fea9e8e15de78f983f40d4763da3 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Fri, 21 Jun 2024 13:45:06 +0100 Subject: [PATCH] allow to alter agenda --- gabinete-digital-fo.code-workspace | 3 + package-lock.json | 560 +++++++++++++++++- package.json | 2 + src/app/app.module.ts | 4 +- src/app/interceptors/chatToken.interceptor.ts | 2 +- src/app/interceptors/metter.interceptor.ts | 60 ++ src/app/interceptors/token.interceptors.ts | 2 +- src/app/models/event.model.ts | 6 + .../agenda/edit-event/edit-event.page.html | 50 +- .../agenda/edit-event/edit-event.page.ts | 89 ++- .../pages/agenda/new-event/new-event.page.ts | 42 +- .../Agenda/agenda-data-repository.service.ts | 43 +- .../agenda-local-data-source.service.ts | 20 + .../monitoring/opentelemetry/matrix.ts | 67 +++ .../monitoring/opentelemetry/opentelemetry.ts | 2 +- .../edit-event-to-approve.page.ts | 55 +- .../agenda/edit-event/edit-event.page.html | 41 +- .../agenda/edit-event/edit-event.page.ts | 100 ++-- .../shared/agenda/new-event/new-event.page.ts | 72 +-- .../edit-event-to-approve/edit-event.page.ts | 74 ++- src/main.ts | 1 + 21 files changed, 1058 insertions(+), 237 deletions(-) create mode 100644 src/app/interceptors/metter.interceptor.ts create mode 100644 src/app/services/monitoring/opentelemetry/matrix.ts diff --git a/gabinete-digital-fo.code-workspace b/gabinete-digital-fo.code-workspace index c0656f038..9ea28d270 100644 --- a/gabinete-digital-fo.code-workspace +++ b/gabinete-digital-fo.code-workspace @@ -8,6 +8,9 @@ }, { "path": "../logs" + }, + { + "path": "../../../Downloads/opentelemetry-js-main/opentelemetry-js-main" } ], "settings": { diff --git a/package-lock.json b/package-lock.json index 3a237c9d4..f72bdf905 100644 --- a/package-lock.json +++ b/package-lock.json @@ -96,8 +96,10 @@ "@ng-bootstrap/ng-bootstrap": "^9.1.2", "@ngx-translate/core": "^13.0.0", "@ngxs/store": "^3.8.2", + "@opentelemetry/exporter-metrics-otlp-http": "^0.52.1", "@opentelemetry/exporter-zipkin": "^1.25.0", "@opentelemetry/resources": "^1.25.0", + "@opentelemetry/sdk-metrics": "^1.25.1", "@opentelemetry/sdk-trace-base": "^1.25.0", "@opentelemetry/sdk-trace-web": "^1.25.0", "@opentelemetry/semantic-conventions": "^1.25.0", @@ -7729,11 +7731,21 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "peer": true, "engines": { "node": ">=8.0.0" } }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/core": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.0.tgz", @@ -7748,6 +7760,61 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.52.1.tgz", + "integrity": "sha512-oAHPOy1sZi58bwqXaucd19F/v7+qE2EuVslQOEeLQT94CDuZJJ4tbWzx8DpYBTrOSzKqqrMtx9+PMxkrcbxOyQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-metrics": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/exporter-zipkin": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.0.tgz", @@ -7765,6 +7832,152 @@ "@opentelemetry/api": "^1.0.0" } }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@types/node": { + "version": "20.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.6.tgz", + "integrity": "sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/protobufjs": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", + "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/@opentelemetry/resources": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.0.tgz", @@ -7780,6 +7993,112 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "engines": { + "node": ">=14" + } + }, "node_modules/@opentelemetry/sdk-trace-base": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.0.tgz", @@ -26182,6 +26501,11 @@ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -41685,6 +42009,11 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -49595,8 +49924,15 @@ "@opentelemetry/api": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "peer": true + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==" + }, + "@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "requires": { + "@opentelemetry/api": "^1.0.0" + } }, "@opentelemetry/core": { "version": "1.25.0", @@ -49606,6 +49942,42 @@ "@opentelemetry/semantic-conventions": "1.25.0" } }, + "@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.52.1.tgz", + "integrity": "sha512-oAHPOy1sZi58bwqXaucd19F/v7+qE2EuVslQOEeLQT94CDuZJJ4tbWzx8DpYBTrOSzKqqrMtx9+PMxkrcbxOyQ==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-metrics": "1.25.1" + }, + "dependencies": { + "@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "requires": { + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==" + } + } + }, "@opentelemetry/exporter-zipkin": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.0.tgz", @@ -49617,6 +49989,110 @@ "@opentelemetry/semantic-conventions": "1.25.0" } }, + "@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "dependencies": { + "@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "requires": { + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==" + } + } + }, + "@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "requires": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "dependencies": { + "@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "requires": { + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==" + }, + "@types/node": { + "version": "20.14.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.6.tgz", + "integrity": "sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw==", + "requires": { + "undici-types": "~5.26.4" + } + }, + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "protobufjs": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", + "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + } + } + } + }, "@opentelemetry/resources": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.0.tgz", @@ -49626,6 +50102,74 @@ "@opentelemetry/semantic-conventions": "1.25.0" } }, + "@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "requires": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "dependencies": { + "@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "requires": { + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==" + } + } + }, + "@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "dependencies": { + "@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "requires": { + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "requires": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + } + }, + "@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==" + } + } + }, "@opentelemetry/sdk-trace-base": { "version": "1.25.0", "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.0.tgz", @@ -63956,6 +64500,11 @@ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -75897,6 +76446,11 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==" }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", diff --git a/package.json b/package.json index 81621ee3d..351b229b4 100644 --- a/package.json +++ b/package.json @@ -112,8 +112,10 @@ "@ng-bootstrap/ng-bootstrap": "^9.1.2", "@ngx-translate/core": "^13.0.0", "@ngxs/store": "^3.8.2", + "@opentelemetry/exporter-metrics-otlp-http": "^0.52.1", "@opentelemetry/exporter-zipkin": "^1.25.0", "@opentelemetry/resources": "^1.25.0", + "@opentelemetry/sdk-metrics": "^1.25.1", "@opentelemetry/sdk-trace-base": "^1.25.0", "@opentelemetry/sdk-trace-web": "^1.25.0", "@opentelemetry/semantic-conventions": "^1.25.0", diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 4699fdb51..a2cc256b9 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -95,6 +95,7 @@ import { VisibilityDirective } from './services/directives/visibility.directive' import { DeplomaOptionsPageModule } from './shared/popover/deploma-options/deploma-options.module'; import { DiplomaOptionsPage } from './shared/popover/deploma-options/deploma-options.page'; import { ImageCropperModule } from 'ngx-image-cropper'; +import { metricsInterceptor, MetricsInterceptor } from './interceptors/metter.interceptor'; // import { ServiceWorkerModule } from '@angular/service-worker'; // import { AngularFireModule } from '@angular/fire'; // import { AngularFireMessagingModule } from '@angular/fire/messaging'; @@ -223,7 +224,8 @@ import { FirebaseX } from '@ionic-native/firebase-x/ngx'; */ { provide: HTTP_INTERCEPTORS, useClass: LoggingInterceptorService, multi: true }, chatTokenInterceptor, tokenInterceptor, - + metricsInterceptor + ], bootstrap: [AppComponent], diff --git a/src/app/interceptors/chatToken.interceptor.ts b/src/app/interceptors/chatToken.interceptor.ts index 317806ac2..f440cb4a2 100644 --- a/src/app/interceptors/chatToken.interceptor.ts +++ b/src/app/interceptors/chatToken.interceptor.ts @@ -27,7 +27,7 @@ export class ChatTokenInterceptor implements HttpInterceptor { null ); - private excludedDomains = ['Login',environment.apiURL];// Add other domains as needed + private excludedDomains = ['Login',environment.apiURL, 'http://localhost:8019'];// Add other domains as needed constructor(private http: HttpClient, private router: Router, private p: PermissionService, private NetworkServiceService: NetworkServiceService, private RochetChatConnectorService: RochetChatConnectorService) { } diff --git a/src/app/interceptors/metter.interceptor.ts b/src/app/interceptors/metter.interceptor.ts new file mode 100644 index 000000000..69302c281 --- /dev/null +++ b/src/app/interceptors/metter.interceptor.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@angular/core'; +import { HTTP_INTERCEPTORS, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { tap } from 'rxjs/operators'; +import { metrics } from '@opentelemetry/api'; +import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'; +import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; + +// Initialize OpenTelemetry metrics +const meterProvider = new MeterProvider(); +metrics.setGlobalMeterProvider(meterProvider); + +const metricReader = new PeriodicExportingMetricReader({ + exporter: new OTLPMetricExporter({ + url: 'http://5-180-182-151.cloud-xip.com:4318/v1/metrics', + // headers: { + // 'Authorization': 'Basic ' + btoa('tabteste@006:tabteste@006'), + // } + }), + exportIntervalMillis: 1000, +}) + +meterProvider.addMetricReader(metricReader); + +const meter = meterProvider.getMeter('example-exporter-collector'); +const requestCounter = meter.createCounter('post_requests', { + description: 'Example of a Counter', +}); + + +@Injectable() +export class MetricsInterceptor implements HttpInterceptor { + intercept(req: HttpRequest, next: HttpHandler): Observable> { + + + return next.handle(req).pipe( + tap(event => { + if (event instanceof HttpResponse) { + // Capture the status code + if (req.method !== 'GET' && !req.urlWithParams.includes('metrics')) { + const path = req.urlWithParams; + const url = new URL(path); + let attributes = { path: url.pathname, method: req.method }; + const statusCode = event.status; + const extendedAttributes = { ...attributes, status: statusCode }; + requestCounter.add(1, extendedAttributes); + } + + } + }) + ); + } +} + + +export const metricsInterceptor = { + provide: HTTP_INTERCEPTORS, + useClass: MetricsInterceptor, + multi: true +}; diff --git a/src/app/interceptors/token.interceptors.ts b/src/app/interceptors/token.interceptors.ts index 7d000259e..0b43c7ce4 100644 --- a/src/app/interceptors/token.interceptors.ts +++ b/src/app/interceptors/token.interceptors.ts @@ -23,7 +23,7 @@ export class TokenInterceptor implements HttpInterceptor { null ); - private excludedDomains = [ 'Login', environment.apiChatUrl]; // Add the domains you want to exclude + private excludedDomains = [ 'Login', environment.apiChatUrl, 'http://localhost:8019']; // Add the domains you want to exclude constructor(private http: HttpClient, private router: Router,private httpErrorHandle: HttpErrorHandle,) { } diff --git a/src/app/models/event.model.ts b/src/app/models/event.model.ts index cc6ff05cd..459f06f4f 100644 --- a/src/app/models/event.model.ts +++ b/src/app/models/event.model.ts @@ -37,6 +37,12 @@ export class Event{ Attachments?: Attachment[]; HumanDate?: string; IsAllDayEvent?: boolean; + owner?: { + wxUserId: number, + wxFullName: string, + wxeMail: string, + userPhoto: string, + } } diff --git a/src/app/pages/agenda/edit-event/edit-event.page.html b/src/app/pages/agenda/edit-event/edit-event.page.html index 5fe61edb5..c16071455 100644 --- a/src/app/pages/agenda/edit-event/edit-event.page.html +++ b/src/app/pages/agenda/edit-event/edit-event.page.html @@ -8,7 +8,7 @@
- Editar Evento + Editar Evento[]
@@ -33,6 +33,42 @@ + +
+
+
+ +
+
+ + + +
+ Minha agenda +
+
+ PR +
+ + + + + +
PR
+
AGENDA DO MDGPR
+
Agenda do {{calendars.wxFullName}}
+
+ Minha agenda +
+ +
+ +
+
+
+
+
+
@@ -55,18 +91,6 @@
-
diff --git a/src/app/pages/agenda/edit-event/edit-event.page.ts b/src/app/pages/agenda/edit-event/edit-event.page.ts index c305ec5b3..db6d61cb5 100644 --- a/src/app/pages/agenda/edit-event/edit-event.page.ts +++ b/src/app/pages/agenda/edit-event/edit-event.page.ts @@ -21,6 +21,9 @@ import { ContactsService } from 'src/app/services/contacts.service'; import { DomSanitizerService } from 'src/app/services/DomSanitizer.service'; import { AgendaDataRepositoryService } from 'src/app/services/Repositorys/Agenda/agenda-data-repository.service'; import { Utils } from 'src/app/services/Repositorys/Agenda/utils'; +import { TableSharedCalendar } from 'src/app/services/Repositorys/Agenda/agenda-local-data-source.service'; +import { Observable } from 'rxjs'; +import { RoleIdService } from 'src/app/services/role-id.service' const CUSTOM_DATE_FORMATS: NgxMatDateFormats = { parse: { @@ -94,6 +97,11 @@ export class EditEventPage implements OnInit { deletedAttachmentsList = []; addedAttachmentsList = []; + sharedCalendar: Observable + hasChangeCalendar = false + selectedUserCalendar:any; + SessionStore = SessionStore + constructor( private modalController: ModalController, private navParams: NavParams, @@ -107,7 +115,8 @@ export class EditEventPage implements OnInit { private contactsService: ContactsService, private domSanitazerService: DomSanitizerService, private agendaDataRepository: AgendaDataRepositoryService, - private utils: Utils + private utils: Utils, + public RoleIdService: RoleIdService, ) { /* this.postEvent = new Event(); */ @@ -167,9 +176,26 @@ export class EditEventPage implements OnInit { this.CalendarNameOwnerName = this.eventsService.detectCalendarNameByCalendarId(this.postEvent.CalendarId) this.changeAgenda() + this.sharedCalendar = this.agendaDataRepository.getShareCalendarItemsLiveWithOrder() + } + + hasPrCalendar(data: TableSharedCalendar[]) { + for(const e of data) { + if(e.roleId == this.RoleIdService.PRES) { + return true + } + } + + return false + } + changeSegmentCalendar() { + this.hasChangeCalendar = true } ngOnInit() { + console.log('this.postEvent', this.postEvent) + this.selectedUserCalendar = this.postEvent.owner.wxUserId + if (!this.postEvent.IsRecurring) { this.postEvent.EventRecurrence.frequency = 'never' } else { @@ -423,42 +449,49 @@ export class EditEventPage implements OnInit { try { const events = [] + const calendar = await this.agendaDataRepository.getCalendarByUserId(this.selectedUserCalendar) - this.agendaDataRepository.updateEvent(this.postEvent.EventId, this.postEvent, editAllEvent).subscribe((value) => { - console.log(value) - this.goBack(); - this.httpErrorHandle.httpsSucessMessagge('Editar evento') - }, ((error) => { - console.log('edit event error: ', error) - })); + if(calendar.isOk()) { + this.agendaDataRepository.updateEvent(this.postEvent.EventId, this.postEvent, editAllEvent, calendar.value).subscribe((value) => { + console.log(value) + this.goBack(); + this.httpErrorHandle.httpsSucessMessagge('Editar evento') + }, ((error) => { + console.log('edit event error: ', error) + })); - this.agendaDataRepository.addEventAttendee(this.postEvent.EventId, this.postEvent.Attendees).subscribe((value) => { - console.log(value) - }, ((error) => { - console.log('add Attendee error: ', error) - })); - - - await this.saveDocument() - - if (this.addedAttachmentsList.length > 0) { - this.agendaDataRepository.addEventAttachment(this.postEvent.EventId, this.loadedEventAttachments).subscribe((value) => { + this.agendaDataRepository.addEventAttendee(this.postEvent.EventId, this.postEvent.Attendees).subscribe((value) => { console.log(value) }, ((error) => { - console.log('add attachment error: ', error) + console.log('add Attendee error: ', error) })); - } - if (this.deletedAttachmentsList.length > 0) { - this.agendaDataRepository.removeEventAttachment(this.postEvent.EventId, { attachments: this.deletedAttachmentsList }).subscribe((value) => { - console.log(value) - }, ((error) => { - console.log('remove attachment error: ', error) - })); + + await this.saveDocument() + + if (this.addedAttachmentsList.length > 0) { + this.agendaDataRepository.addEventAttachment(this.postEvent.EventId, this.loadedEventAttachments).subscribe((value) => { + console.log(value) + }, ((error) => { + console.log('add attachment error: ', error) + })); + } + + if (this.deletedAttachmentsList.length > 0) { + this.agendaDataRepository.removeEventAttachment(this.postEvent.EventId, { attachments: this.deletedAttachmentsList }).subscribe((value) => { + console.log(value) + }, ((error) => { + console.log('remove attachment error: ', error) + })); + } + + + this.isEventEdited = true; + } else { + console.log(calendar.error) } - this.isEventEdited = true; } catch (error) { this.httpErrorHandle.httpStatusHandle(error) diff --git a/src/app/pages/agenda/new-event/new-event.page.ts b/src/app/pages/agenda/new-event/new-event.page.ts index 9f86d4afb..366ad74bb 100644 --- a/src/app/pages/agenda/new-event/new-event.page.ts +++ b/src/app/pages/agenda/new-event/new-event.page.ts @@ -1,6 +1,5 @@ import { Component, OnInit } from '@angular/core'; import { ModalController, NavParams, Platform } from '@ionic/angular'; -import { EventAttachment, EventAttachment_v2 } from 'src/app/models/attachment.model'; import { EventBody } from 'src/app/models/eventbody.model'; import { EventPerson } from 'src/app/models/eventperson.model'; import { SearchList } from 'src/app/models/search-document'; @@ -23,11 +22,8 @@ import { ProcessesService } from 'src/app/services/processes.service'; import { TaskService } from 'src/app/services/task.service' import { ContactsService } from 'src/app/services/contacts.service'; import { DomSanitizerService } from 'src/app/services/DomSanitizer.service'; -import { momentG } from 'src/plugin/momentG'; import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, ThemePalette } from '@angular/material/core'; -import { MatDatepickerModule } from '@angular/material/datepicker'; import { MomentDateAdapter } from '@angular/material-moment-adapter'; -import { EventInputDTO } from '../../../services/Repositorys/Agenda/agendaDataModels'; import { AgendaDataRepositoryService } from 'src/app/services/Repositorys/Agenda/agenda-data-repository.service'; import { Observable } from 'rxjs'; import { TableSharedCalendar } from 'src/app/services/Repositorys/Agenda/agenda-local-data-source.service'; @@ -177,7 +173,7 @@ export class NewEventPage implements OnInit { this.setCalendarByDefault(true) } - + hasPrCalendar(data: TableSharedCalendar[]) { for(const e of data) { if(e.roleId == this.RoleIdService.PRES) { @@ -431,7 +427,7 @@ export class NewEventPage implements OnInit { } injectValidation() { - + this.Form = new FormGroup({ Subject: new FormControl(this.postEvent.Subject, [ Validators.required, @@ -483,7 +479,7 @@ export class NewEventPage implements OnInit { } - save_v2() { + async save_v2() { this.injectValidation() this.runValidation() @@ -498,20 +494,26 @@ export class NewEventPage implements OnInit { return false } - const loader = this.toastService.loading() - this.postEvent.Attendees = this.taskParticipants.concat(this.taskParticipantsCc); - this.postEvent.IsAllDayEvent = this.allDayCheck; - this.agendaDataRepository.createEvent(this.postEvent, this.selectedUserCalendar, this.documents).subscribe((value) => { - console.log(value) - loader.remove() - this.hhtpErrorHandle.httpsSucessMessagge('new event') - let data = Object.assign(this.postEvent) - this.modalController.dismiss(data); - }, ((error) => { - console.log('create event error: ', error) - loader.remove() - })); + + const calendar = await this.agendaDataRepository.getCalendarByUserId(this.selectedUserCalendar) + if(calendar.isOk()) { + const loader = this.toastService.loading() + this.postEvent.Attendees = this.taskParticipants.concat(this.taskParticipantsCc); + this.postEvent.IsAllDayEvent = this.allDayCheck; + this.agendaDataRepository.createEvent(this.postEvent, this.documents, calendar.value).subscribe((value) => { + console.log(value) + loader.remove() + this.hhtpErrorHandle.httpsSucessMessagge('new event') + let data = Object.assign(this.postEvent) + this.modalController.dismiss(data); + }, ((error) => { + console.log('create event error: ', error) + loader.remove() + })); + } + + } diff --git a/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts b/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts index db4c7ddd0..66a05eb4d 100644 --- a/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts +++ b/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts @@ -10,7 +10,7 @@ import { EventListToApproveMapper } from './mapper/eventToApproveListMapper'; import { err, ok } from 'neverthrow'; import { HttpErrorResponse } from '@angular/common/http'; import { EventToApproveDetailsMapper } from './mapper/EventToApproveDetailsMapper'; -import { AgendaLocalDataSourceService } from './agenda-local-data-source.service'; +import { AgendaLocalDataSourceService, TableSharedCalendar } from './agenda-local-data-source.service'; import { EEventFilterStatus } from './model/enums'; import { isHttpError } from '../../http.service'; import { TracingType } from '../../monitoring/opentelemetry/tracer'; @@ -156,12 +156,12 @@ export class AgendaDataRepositoryService { } } - createEvent(eventData: Event, CalendarName, documents) { + createEvent(eventData: Event, documents, calendar: TableSharedCalendar) { console.log('create repository 1',eventData) let eventInput = { - userId: CalendarName, - ownerType: this.utils.selectedCalendarOwner(CalendarName), + userId: calendar.wxUserId, + ownerType: this.utils.selectedCalendarOwner(calendar.role), subject: eventData.Subject, body: eventData.Body.Text, location: eventData.Location, @@ -184,11 +184,13 @@ export class AgendaDataRepositoryService { return this.agendaDataService.createEvent(eventInput) } - updateEvent(eventId, eventData, editAllEvent) { - console.log('Update event', eventData) + updateEvent(eventId, eventData, editAllEvent, calendar: TableSharedCalendar) { + let eventInput = { + userId: calendar.wxUserId, + ownerType: this.utils.selectedCalendarOwner(calendar.role), subject: eventData.Subject, - body: eventData.Body.Text || eventData.Body, + body: eventData?.Body?.Text, location: eventData.Location, startDate: this.utils.addOneHourToIsoString(eventData.StartDate), endDate: this.utils.addOneHourToIsoString(eventData.EndDate), @@ -201,7 +203,7 @@ export class AgendaDataRepositoryService { until: ((eventData.EventRecurrence.until === "") ? this.utils.addOneHourToIsoString(eventData.EndDate.toISOString()) : eventData.EventRecurrence.until), } } - console.log('Update event post', eventInput) + return this.agendaDataService.updateEvent(eventId, eventInput) } @@ -294,10 +296,30 @@ export class AgendaDataRepositoryService { return await this.agendaLocalDataSourceService.clearSharedCalendar() } + getShareCalendarItemsLive() { return this.agendaLocalDataSourceService.getShareCalendarItemsLive() } + getShareCalendarItemsLiveWithOrder() { + // Define the role priorities + const rolePriorities: { [key: number]: number } = { + 100000014: 1, // Presidente da República + 100000011: 2, // Vice Presidente (example role ID) + // Add other roles with their priorities here + }; + + return this.getShareCalendarItemsLive().pipe( + map(data => data.sort((a, b) => { + console.log('Raw data:', data); // Debug line + const priorityA = rolePriorities[a.roleId] || Infinity; + const priorityB = rolePriorities[b.roleId] || Infinity; + return priorityA - priorityB; + })) + ) + + } + async geCalendars() { return await this.agendaLocalDataSourceService.geCalendars() } @@ -305,4 +327,9 @@ export class AgendaDataRepositoryService { approveEvent(eventId) { return this.agendaDataService.approveEvent(eventId); } + + + async getCalendarByUserId(wxUserId: number) { + return await this.agendaLocalDataSourceService.getCalendarByUserId(wxUserId) + } } diff --git a/src/app/services/Repositorys/Agenda/agenda-local-data-source.service.ts b/src/app/services/Repositorys/Agenda/agenda-local-data-source.service.ts index dab92dda0..b3a4b56f6 100644 --- a/src/app/services/Repositorys/Agenda/agenda-local-data-source.service.ts +++ b/src/app/services/Repositorys/Agenda/agenda-local-data-source.service.ts @@ -84,4 +84,24 @@ export class AgendaLocalDataSourceService { return AgendaDataSource.shareCalendar.toArray() })) } + + // New method to get calendars by wxUserId + async getCalendarByUserId(wxUserId: number) { + try { + const result = await AgendaDataSource.shareCalendar.get(wxUserId) + if(!result) { + const list = await AgendaDataSource.shareCalendar.toArray() + const found = list.find(e => e.wxUserId == wxUserId) + if(found) { + return ok(found) + } else { + return err('404') + } + } else { + return ok(result) + } + } catch (e) { + return err(false); + } + } } diff --git a/src/app/services/monitoring/opentelemetry/matrix.ts b/src/app/services/monitoring/opentelemetry/matrix.ts new file mode 100644 index 000000000..ba9fb58d5 --- /dev/null +++ b/src/app/services/monitoring/opentelemetry/matrix.ts @@ -0,0 +1,67 @@ +const { DiagConsoleLogger, DiagLogLevel, diag, metrics } = require('@opentelemetry/api'); +const { OTLPMetricExporter } = require('@opentelemetry/exporter-metrics-otlp-http'); +const { MeterProvider, PeriodicExportingMetricReader } = require('@opentelemetry/sdk-metrics'); + +// Optional and only needed to see the internal diagnostic logging (during development) +// diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG); + +let interval; +let meter; + +// function stopMetrics() { +// console.log('STOPPING METRICS'); +// clearInterval(interval); +// metrics.getMeterProvider().shutdown() +// .then(() => metrics.disable()); +// } + +// function startMetrics() { +// console.log('STARTING METRICS'); + +// const meterProvider = new MeterProvider(); +// metrics.setGlobalMeterProvider(meterProvider); + +// meterProvider.addMetricReader(new PeriodicExportingMetricReader({ +// exporter: new OTLPMetricExporter({ +// //url: 'http://localhost:8019/collector/v1/metrics', +// // url: 'http://localhost:4318/v1/metrics', +// url: 'http://5-180-182-151.cloud-xip.com:4318/v1/metrics', // Custom port 85 +// //url: 'https://5-180-182-151.cloud-xip.com:85/collector/v1/metrics', // Custom port 85 +// // headers: { +// // 'Authorization': 'Basic ' + btoa('tabteste@006:tabteste@006'), +// // } +// }), +// exportIntervalMillis: 2000 +// })); + +// meter = meterProvider.getMeter('example-exporter-collector') + +// const requestCounter = meter.createCounter('requests', { +// description: 'Example of a Counter', +// }); + +// const upDownCounter = meter.createUpDownCounter('test_up_down_counter', { +// description: 'Example of a UpDownCounter', +// }); + +// const attributes = { environment: 'staging' }; + +// interval = setInterval(() => { +// requestCounter.add(1, attributes); +// requestCounter.add(1, {environment: 'testing'}); +// requestCounter.add(1, {environment: 'ok'}); +// upDownCounter.add(Math.random() > 0.5 ? 1 : -1, attributes); +// }, 1000); +// } + +// const addClickEvents = () => { +// // const startBtn = document.getElementById('startBtn'); + +// // const stopBtn = document.getElementById('stopBtn'); +// // startBtn.addEventListener('click', startMetrics); +// // stopBtn.addEventListener('click', stopMetrics); + +// // startMetrics() +// }; + +// // addClickEvents(); diff --git a/src/app/services/monitoring/opentelemetry/opentelemetry.ts b/src/app/services/monitoring/opentelemetry/opentelemetry.ts index c764a3a2a..d6d872536 100644 --- a/src/app/services/monitoring/opentelemetry/opentelemetry.ts +++ b/src/app/services/monitoring/opentelemetry/opentelemetry.ts @@ -11,7 +11,7 @@ function createProvider(serviceName) { }), }); - provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter())); + // provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter())); provider.addSpanProcessor(new SimpleSpanProcessor(new ZipkinExporter({ url: 'https://5-180-182-151.cloud-xip.com:85/zipkin-endpoint/api/v2/spans', serviceName: serviceName, diff --git a/src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts b/src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts index c6c1060cc..6fb54db37 100644 --- a/src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts +++ b/src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts @@ -372,39 +372,44 @@ export class EditEventToApprovePage implements OnInit { try { /* await this.eventsService.postEventToApproveEdit(event).toPromise() */ - this.agendaDataRepository.updateEvent(this.eventProcess.serialNumber, event, false).subscribe((value) => { - console.log(value) - this.close() + const calendar = await this.agendaDataRepository.getCalendarByUserId((this.eventProcess as any).owner.wxUserId) + if(calendar.isOk()) { - }, ((error) => { - console.log('edit event error: ', error) - })); + this.agendaDataRepository.updateEvent(this.eventProcess.serialNumber, event, false, calendar.value).subscribe((value) => { + console.log(value) + this.close() - this.agendaDataRepository.addEventAttendee(this.eventProcess.serialNumber, this.eventProcess.workflowInstanceDataFields.ParticipantsList).subscribe((value) => { - console.log(value) - }, ((error) => { - console.log('add Attendee error: ', error) - })); + }, ((error) => { + console.log('edit event error: ', error) + })); - if (this.addedAttachmentsList.length > 0) { - this.agendaDataRepository.addEventAttachment(this.eventProcess.serialNumber, this.loadedAttachments).subscribe((value) => { + this.agendaDataRepository.addEventAttendee(this.eventProcess.serialNumber, this.eventProcess.workflowInstanceDataFields.ParticipantsList).subscribe((value) => { console.log(value) }, ((error) => { - this.showLoader = false - console.log('add attachment error: ', error) + console.log('add Attendee error: ', error) })); - } - if (this.deletedAttachmentsList.length > 0) { - this.agendaDataRepository.removeEventAttachment(this.eventProcess.serialNumber, { attachments: this.deletedAttachmentsList }).subscribe((value) => { - console.log(value) - }, ((error) => { - this.showLoader = false - console.log('remove attachment error: ', error) - })); - } + if (this.addedAttachmentsList.length > 0) { + this.agendaDataRepository.addEventAttachment(this.eventProcess.serialNumber, this.loadedAttachments).subscribe((value) => { + console.log(value) + }, ((error) => { + this.showLoader = false + console.log('add attachment error: ', error) + })); + } - this.httpErrorHandler.httpsSucessMessagge('Editar evento'); + if (this.deletedAttachmentsList.length > 0) { + this.agendaDataRepository.removeEventAttachment(this.eventProcess.serialNumber, { attachments: this.deletedAttachmentsList }).subscribe((value) => { + console.log(value) + }, ((error) => { + this.showLoader = false + console.log('remove attachment error: ', error) + })); + } + + this.httpErrorHandler.httpsSucessMessagge('Editar evento'); + + } } catch (e) { this.httpErrorHandler.httpStatusHandle(e); diff --git a/src/app/shared/agenda/edit-event/edit-event.page.html b/src/app/shared/agenda/edit-event/edit-event.page.html index 9ce9c679a..47b518ce0 100644 --- a/src/app/shared/agenda/edit-event/edit-event.page.html +++ b/src/app/shared/agenda/edit-event/edit-event.page.html @@ -47,21 +47,40 @@
- +
diff --git a/src/app/shared/agenda/edit-event/edit-event.page.ts b/src/app/shared/agenda/edit-event/edit-event.page.ts index 8f81922e3..1486b1e71 100644 --- a/src/app/shared/agenda/edit-event/edit-event.page.ts +++ b/src/app/shared/agenda/edit-event/edit-event.page.ts @@ -7,18 +7,18 @@ import { Event } from 'src/app/models/event.model'; import { AlertController } from '@ionic/angular'; import { removeDuplicate } from 'src/plugin/removeDuplicate.js' import { SearchPage } from 'src/app/pages/search/search.page'; -import { AttachmentsService } from 'src/app/services/attachments.service'; import { FormControl, FormGroup, Validators } from '@angular/forms'; import { ParticipantsPipe } from 'src/app/pipes/participants.pipe'; import { ThemeService } from 'src/app/services/theme.service' import { SessionStore } from 'src/app/store/session.service'; import { HttpErrorHandle } from 'src/app/services/http-error-handle.service'; import { ContactsService } from 'src/app/services/contacts.service' -import { DomSanitizerService } from 'src/app/services/DomSanitizer.service'; import { AgendaDataRepositoryService } from 'src/app/services/Repositorys/Agenda/agenda-data-repository.service'; import { SearchList_v2 } from 'src/app/models/search-document'; import { Utils } from 'src/app/services/Repositorys/Agenda/utils'; - +import { Observable } from 'rxjs'; +import { TableSharedCalendar } from 'src/app/services/Repositorys/Agenda/agenda-local-data-source.service'; +import { RoleIdService } from 'src/app/services/role-id.service' @Component({ selector: 'app-edit-event', templateUrl: './edit-event.page.html', @@ -92,29 +92,47 @@ export class EditEventPage implements OnInit { public stepSeconds = [1, 5, 10, 15, 20, 25]; private participantsPipe = new ParticipantsPipe() - sesseionStora = SessionStore + SessionStore= SessionStore CalendarNameOwnerName = '' CalendarNamesOptions = [] allDayCheck: boolean = false; addedAttachmentsList = []; + sharedCalendar: Observable + hasChangeCalendar = false + selectedUserCalendar:any; + constructor( private modalController: ModalController, private eventsService: EventsService, public alertController: AlertController, - private attachmentsService: AttachmentsService, public ThemeService: ThemeService, private httpErrorHandle: HttpErrorHandle, private contactsService: ContactsService, - private domSanitizeService: DomSanitizerService, private agendaDataRepository: AgendaDataRepositoryService, - private utils: Utils + private utils: Utils, + public RoleIdService: RoleIdService, ) { + this.sharedCalendar = this.agendaDataRepository.getShareCalendarItemsLiveWithOrder() + } + hasPrCalendar(data: TableSharedCalendar[]) { + for(const e of data) { + if(e.roleId == this.RoleIdService.PRES) { + return true + } + } + + return false + } + changeSegmentCalendar() { + this.hasChangeCalendar = true } ngOnInit() { + console.log('this.postEvent', this.postEvent) + this.selectedUserCalendar = this.postEvent.owner.wxUserId this.loadedEventAttachments = this.postEvent.Attachments console.log(this.postEvent.Category) this._postEvent = this.postEvent @@ -404,47 +422,57 @@ export class EditEventPage implements OnInit { } this._postEvent.Attendees = this.taskParticipants.concat(this.taskParticipantsCc); - this.showLoader = true; + try { - this.agendaDataRepository.updateEvent(this._postEvent.EventId, this._postEvent, editAllEvent).subscribe((value) => { - console.log(value) + console.log('this.selectedUserCalendar', this.selectedUserCalendar) + const calendar = await this.agendaDataRepository.getCalendarByUserId(this.selectedUserCalendar) - this.httpErrorHandle.httpsSucessMessagge('Editar evento') - this.clearPostEvent.emit(); - this.deleteTemporaryData(); - this.showLoader = false; - this.close(); + if(calendar.isOk()) { + this.showLoader = true; + this.agendaDataRepository.updateEvent(this._postEvent.EventId, this._postEvent, editAllEvent, calendar.value).subscribe((value) => { + console.log(value) - }, ((error) => { - console.log('edit event error: ', error) - })); + this.httpErrorHandle.httpsSucessMessagge('Editar evento') + this.clearPostEvent.emit(); + this.deleteTemporaryData(); + this.showLoader = false; + this.close(); - this.agendaDataRepository.addEventAttendee(this._postEvent.EventId, this._postEvent.Attendees).subscribe((value) => { - console.log(value) - }, ((error) => { - console.log('add Attendee error: ', error) - })); + }, ((error) => { + console.log('edit event error: ', error) + })); - - if (this.addedAttachmentsList.length > 0) { - this.agendaDataRepository.addEventAttachment(this._postEvent.EventId, this.loadedEventAttachments).subscribe((value) => { + this.agendaDataRepository.addEventAttendee(this._postEvent.EventId, this._postEvent.Attendees).subscribe((value) => { console.log(value) }, ((error) => { - this.showLoader = false - console.log('add attachment error: ', error) + console.log('add Attendee error: ', error) })); + + + if (this.addedAttachmentsList.length > 0) { + this.agendaDataRepository.addEventAttachment(this._postEvent.EventId, this.loadedEventAttachments).subscribe((value) => { + console.log(value) + }, ((error) => { + this.showLoader = false + console.log('add attachment error: ', error) + })); + } + + if (this.deletedAttachmentsList.length > 0) { + this.agendaDataRepository.removeEventAttachment(this._postEvent.EventId, { attachments: this.deletedAttachmentsList }).subscribe((value) => { + console.log(value) + }, ((error) => { + this.showLoader = false + console.log('remove attachment error: ', error) + })); + } + } else { + console.log('this.selectedUserCalendar', this.selectedUserCalendar) + console.log(calendar.error) } - if (this.deletedAttachmentsList.length > 0) { - this.agendaDataRepository.removeEventAttachment(this._postEvent.EventId, { attachments: this.deletedAttachmentsList }).subscribe((value) => { - console.log(value) - }, ((error) => { - this.showLoader = false - console.log('remove attachment error: ', error) - })); - } } catch (error) { diff --git a/src/app/shared/agenda/new-event/new-event.page.ts b/src/app/shared/agenda/new-event/new-event.page.ts index a81370d25..e06f3dfda 100644 --- a/src/app/shared/agenda/new-event/new-event.page.ts +++ b/src/app/shared/agenda/new-event/new-event.page.ts @@ -2,46 +2,37 @@ import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; import { EventBody } from 'src/app/models/eventbody.model'; import { EventPerson } from 'src/app/models/eventperson.model'; import { EventsService } from 'src/app/services/events.service'; -import { AttachmentsService } from 'src/app/services/attachments.service'; import { Event } from 'src/app/models/event.model'; import { ModalController } from '@ionic/angular'; import { removeDuplicate } from 'src/plugin/removeDuplicate.js' import { SearchPage } from 'src/app/pages/search/search.page'; -import { SearchList, SearchList_v2 } from "src/app/models/search-document"; -import { EventAttachment, EventAttachment_v2 } from 'src/app/models/attachment.model'; - +import { SearchList_v2 } from "src/app/models/search-document"; import { ToastService } from 'src/app/services/toast.service'; import { LoginUserRespose } from 'src/app/models/user.model'; - import { DateAdapter } from '@angular/material/core'; import * as _moment from 'moment'; import * as _rollupMoment from 'moment'; import { FormControl } from '@angular/forms'; import { NgxMatDateFormats } from '@angular-material-components/datetime-picker'; import { ThemePalette } from '@angular/material/core'; - import { ViewChild } from '@angular/core'; import { FormGroup, Validators } from '@angular/forms'; import { NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker'; import { ThemeService } from 'src/app/services/theme.service' import { ChatMethodsService } from 'src/app/services/chat/chat-methods.service'; -import { ServerConnectionService } from 'src/app/services/server-connection.service'; import { SessionStore } from 'src/app/store/session.service'; import { HttpErrorHandle } from 'src/app/services/http-error-handle.service'; import { environment } from 'src/environments/environment'; import { EventToAprove } from 'src/app/models/eventToAprove.model'; import { ProcessesService } from 'src/app/services/processes.service'; -import { Observable, Subject } from 'rxjs'; - +import { Observable } from 'rxjs'; import { TaskService } from 'src/app/services/task.service' import { ContactsService } from 'src/app/services/contacts.service'; -import { DomSanitizerService } from 'src/app/services/DomSanitizer.service'; import { ChangeProfileService } from 'src/app/services/change-profile.service'; -import { EventInputDTO } from 'src/app/services/Repositorys/Agenda/agendaDataModels'; import { AgendaDataRepositoryService } from 'src/app/services/Repositorys/Agenda/agenda-data-repository.service'; import { RoleIdService } from 'src/app/services/role-id.service' import { TableSharedCalendar } from 'src/app/services/Repositorys/Agenda/agenda-local-data-source.service'; -import { map } from 'rxjs/operators'; + const CUSTOM_DATE_FORMATS: NgxMatDateFormats = { parse: { @@ -151,16 +142,13 @@ export class NewEventPage implements OnInit { constructor( private modalController: ModalController, public eventService: EventsService, - private attachmentsService: AttachmentsService, private toastService: ToastService, private dateAdapter: DateAdapter, public ThemeService: ThemeService, - private chatMethodService: ChatMethodsService, private hhtpErrorHandle: HttpErrorHandle, private processeService: ProcessesService, public TaskService: TaskService, private contactsService: ContactsService, - private domSanitazerService: DomSanitizerService, private changeProfileService: ChangeProfileService, private agendaDataRepository: AgendaDataRepositoryService, public RoleIdService: RoleIdService, @@ -169,28 +157,11 @@ export class NewEventPage implements OnInit { this.loggeduser = SessionStore.user; this.postEvent = new Event(); + this.sharedCalendar = this.agendaDataRepository.getShareCalendarItemsLiveWithOrder() - // Define the role priorities - const rolePriorities: { [key: number]: number } = { - 100000014: 1, // Presidente da República - 100000011: 2, // Vice Presidente (example role ID) - // Add other roles with their priorities here - }; - - this.sharedCalendar = this.agendaDataRepository.getShareCalendarItemsLive().pipe( - map(data => data.sort((a, b) => { - console.log('Raw data:', data); // Debug line - const priorityA = rolePriorities[a.roleId] || Infinity; - const priorityB = rolePriorities[b.roleId] || Infinity; - return priorityA - priorityB; - })) - ) - - - } - + hasPrCalendar(data: TableSharedCalendar[]) { for(const e of data) { if(e.roleId == this.RoleIdService.PRES) { @@ -218,7 +189,6 @@ export class NewEventPage implements OnInit { ngOnInit() { this.setCalendarByDefault(true) - console.log(' INTERVENIENTES', this.taskParticipants) this.changeProfileService.registerCallback(() => { this.initializeData() }) @@ -439,11 +409,11 @@ export class NewEventPage implements OnInit { } } - + changeSegmentCalendar() { this.hasChangeCalendar = true } - + changeAgenda() { this.CalendarNameShow = false @@ -583,7 +553,7 @@ export class NewEventPage implements OnInit { } - save_v2() { + async save_v2() { this.injectValidation() this.runValidation() @@ -599,21 +569,21 @@ export class NewEventPage implements OnInit { let loader = this.toastService.loading(); this.postEvent.Attendees = this.taskParticipants.concat(this.taskParticipantsCc); this.postEvent.IsAllDayEvent = this.allDayCheck; - console.log('evenr rec 1 ',this.eventRecurence) - console.log('eent rec 2 ',this.postEvent.EventRecurrence.frequency) - - this.agendaDataRepository.createEvent(this.postEvent, this.selectedUserCalendar, this.documents).subscribe((value) => { - console.log(value) - this.afterSave(); - this.hhtpErrorHandle.httpsSucessMessagge('new event') - loader.remove(); - }, ((error) => { - console.log('create event error: ', error) - loader.remove(); - this.hhtpErrorHandle.httpStatusHandle(error.status) - })); + const calendar = await this.agendaDataRepository.getCalendarByUserId(this.selectedUserCalendar) + if(calendar.isOk()) { + this.agendaDataRepository.createEvent(this.postEvent, this.documents, calendar.value).subscribe((value) => { + console.log(value) + this.afterSave(); + this.hhtpErrorHandle.httpsSucessMessagge('new event') + loader.remove(); + }, ((error) => { + console.log('create event error: ', error) + loader.remove(); + this.hhtpErrorHandle.httpStatusHandle(error.status) + })); + } } diff --git a/src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page.ts b/src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page.ts index d32d96475..c7f9c031f 100644 --- a/src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page.ts +++ b/src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page.ts @@ -270,7 +270,7 @@ export class EditEventToApproveComponent implements OnInit { this.modalController.dismiss(); } - save() { + async save() { // set dates to eventProcess object this.taskParticipantsCc.forEach(e => { @@ -316,48 +316,46 @@ export class EditEventToApproveComponent implements OnInit { Category: this.eventProcess.workflowInstanceDataFields.Category } + const calendar = await this.agendaDataRepository.getCalendarByUserId((this.eventProcess as any).owner.wxUserId) - /* this.eventsService.postEventToApproveEdit(event).subscribe(()=>{ - this.httpErroHalde.httpsSucessMessagge('Editar evento') - window['approve-event-getTask']() - }, error => { - this.httpErroHalde.httpStatusHandle(error) - }) */ + if(calendar.isOk()) { + this.agendaDataRepository.updateEvent(this.eventProcess.serialNumber, event,false, calendar.value).subscribe((value) => { + console.log(value) + this.httpErroHalde.httpsSucessMessagge('Editar evento') + window['approve-event-getTask']() + this.close(); + }, ((error) => { + this.httpErroHalde.httpStatusHandle(error) + console.log('edit event error: ', error) + })); - this.agendaDataRepository.updateEvent(this.eventProcess.serialNumber, event,false).subscribe((value) => { - console.log(value) - this.httpErroHalde.httpsSucessMessagge('Editar evento') - window['approve-event-getTask']() - this.close(); - }, ((error) => { - this.httpErroHalde.httpStatusHandle(error) - console.log('edit event error: ', error) - })); - - this.agendaDataRepository.addEventAttendee(this.eventProcess.serialNumber, this.eventProcess.workflowInstanceDataFields.ParticipantsList).subscribe((value) => { - console.log(value) - }, ((error) => { - console.log('add Attendee error: ', error) - })); + this.agendaDataRepository.addEventAttendee(this.eventProcess.serialNumber, this.eventProcess.workflowInstanceDataFields.ParticipantsList).subscribe((value) => { + console.log(value) + }, ((error) => { + console.log('add Attendee error: ', error) + })); - if (this.addedAttachmentsList.length > 0) { - this.agendaDataRepository.addEventAttachment(this.eventProcess.serialNumber, this.loadedAttachments).subscribe((value) => { - console.log(value) - }, ((error) => { - this.showLoader = false - console.log('add attachment error: ', error) - })); - } + if (this.addedAttachmentsList.length > 0) { + this.agendaDataRepository.addEventAttachment(this.eventProcess.serialNumber, this.loadedAttachments).subscribe((value) => { + console.log(value) + }, ((error) => { + this.showLoader = false + console.log('add attachment error: ', error) + })); + } + + if (this.deletedAttachmentsList.length > 0) { + this.agendaDataRepository.removeEventAttachment(this.eventProcess.serialNumber, { attachments: this.deletedAttachmentsList }).subscribe((value) => { + console.log(value) + }, ((error) => { + this.showLoader = false + console.log('remove attachment error: ', error) + })); + } + + } - if (this.deletedAttachmentsList.length > 0) { - this.agendaDataRepository.removeEventAttachment(this.eventProcess.serialNumber, { attachments: this.deletedAttachmentsList }).subscribe((value) => { - console.log(value) - }, ((error) => { - this.showLoader = false - console.log('remove attachment error: ', error) - })); - } diff --git a/src/main.ts b/src/main.ts index 0cbebee5f..6756849f7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,6 +10,7 @@ import "hammerjs"; // HAMMER TIME import { SendIntent } from "send-intent"; import { Filesystem } from '@capacitor/filesystem'; import 'src/app/services/shareIntent' +import 'src/app/services/monitoring/opentelemetry/matrix'; if (environment.production) { enableProdMode();