From ac30e4f8bb783cc47ac9897c522a4a9b05e8ada2 Mon Sep 17 00:00:00 2001 From: nkokkiligadda87 Date: Fri, 12 Apr 2024 11:54:45 +0530 Subject: [PATCH 001/134] CSS changes --- angular.json | 4 +- package-lock.json | 157 +++------ package.json | 28 +- .../view-details/view-details.component.css | 4 +- .../core/header/header.component.css | 6 + .../core/header/header.component.html | 8 +- .../user-login/login/login.component.css | 99 +++--- .../user-login/login/login.component.html | 20 +- src/app/app.component.css | 322 ++++++++++++++++++ src/app/app.module.ts | 33 +- src/styles.css | 46 ++- 11 files changed, 528 insertions(+), 199 deletions(-) diff --git a/angular.json b/angular.json index ff7574f..fe0fa1f 100644 --- a/angular.json +++ b/angular.json @@ -23,7 +23,7 @@ "src/assets" ], "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", + "@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css", "./node_modules/bootstrap/dist/css/bootstrap.min.css" ], @@ -116,7 +116,7 @@ "src/assets" ], "styles": [ - "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", + "@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" ], "scripts": [] diff --git a/package-lock.json b/package-lock.json index e33c236..d7280c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,15 +8,15 @@ "name": "ecd-ui", "version": "0.0.0", "dependencies": { - "@angular/animations": "^16.2.12", - "@angular/cdk": "^16.2.14", - "@angular/common": "^16.2.12", - "@angular/compiler": "^16.2.12", - "@angular/core": "^16.2.12", - "@angular/forms": "^16.2.12", - "@angular/material": "^16.2.14", - "@angular/platform-browser": "^16.2.12", - "@angular/platform-browser-dynamic": "^16.2.12", + "@angular/animations": "^16.2.0", + "@angular/cdk": "^16.2.12", + "@angular/common": "^16.2.0", + "@angular/compiler": "^16.2.0", + "@angular/core": "^16.2.0", + "@angular/forms": "^16.2.0", + "@angular/material": "^16.2.12", + "@angular/platform-browser": "^16.2.0", + "@angular/platform-browser-dynamic": "^16.2.0", "@angular/router": "^16.2.12", "angular-disable-browser-back-button": "^2.0.0", "bootstrap": "^5.2.3", @@ -32,14 +32,14 @@ "zone.js": "~0.13.3" }, "devDependencies": { - "@angular-devkit/build-angular": "^16.2.12", + "@angular-devkit/build-angular": "^16.2.10", "@angular-eslint/builder": "16.3.1", "@angular-eslint/eslint-plugin": "16.3.1", "@angular-eslint/eslint-plugin-template": "16.3.1", "@angular-eslint/schematics": "16.3.1", "@angular-eslint/template-parser": "16.3.1", - "@angular/cli": "~16.2.12", - "@angular/compiler-cli": "^16.2.12", + "@angular/cli": "~16.2.10", + "@angular/compiler-cli": "^16.2.10", "@types/crypto-js": "^4.1.1", "@types/file-saver": "^2.0.5", "@types/jasmine": "~4.0.0", @@ -60,7 +60,7 @@ "lint-staged": "^15.2.2", "prettier": "^3.2.5", "prettier-eslint": "^16.3.0", - "typescript": "~4.9.5" + "typescript": "5.1.3" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -592,9 +592,9 @@ } }, "node_modules/@angular/cdk": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.14.tgz", - "integrity": "sha512-n6PrGdiVeSTEmM/HEiwIyg6YQUUymZrb5afaNLGFRM5YL0Y8OBqd+XhCjb0OfD/AfgCUtedVEPwNqrfW8KzgGw==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.12.tgz", + "integrity": "sha512-wT8/265zm2WKY0BDaRoYbrAT4kadrmejTRLjuimQIEUKnw4vBsJMWCwQkpFo3s6zr6eznGqYVAFb8KKPVLKGBg==", "dependencies": { "tslib": "^2.3.0" }, @@ -769,9 +769,9 @@ } }, "node_modules/@angular/material": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.14.tgz", - "integrity": "sha512-zQIxUb23elPfiIvddqkIDYqQhAHa9ZwMblfbv+ug8bxr4D0Dw360jIarxCgMjAcLj7Ccl3GBqZMUnVeM6cjthw==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.12.tgz", + "integrity": "sha512-k1DGRfP1mMmhg/nLJjZBOPzX3SyAjgbRBY2KauKOV8OFCXJGoMn/oLgMBh+qB1WugzIna/31dBV8ruHD3Uvp2w==", "dependencies": { "@material/animation": "15.0.0-canary.bc9ae6c9c.0", "@material/auto-init": "15.0.0-canary.bc9ae6c9c.0", @@ -824,7 +824,7 @@ }, "peerDependencies": { "@angular/animations": "^16.0.0 || ^17.0.0", - "@angular/cdk": "16.2.14", + "@angular/cdk": "16.2.12", "@angular/common": "^16.0.0 || ^17.0.0", "@angular/core": "^16.0.0 || ^17.0.0", "@angular/forms": "^16.0.0 || ^17.0.0", @@ -4757,16 +4757,6 @@ "url": "https://opencollective.com/unts" } }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, "node_modules/@schematics/angular": { "version": "16.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.12.tgz", @@ -5124,12 +5114,6 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "node_modules/@types/luxon": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-1.11.1.tgz", - "integrity": "sha512-XBHQ7rzpOHyJudEQcMyoT67Np61FTb6S2jWqWQER/U7H2NAS+dpC8wv5T+6ygV5g/yJQdaojQbsJQiweool0Aw==", - "peer": true - }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -11655,15 +11639,6 @@ "yallist": "^3.0.2" } }, - "node_modules/luxon": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", - "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", - "peer": true, - "engines": { - "node": ">=12" - } - }, "node_modules/magic-string": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", @@ -16272,16 +16247,16 @@ "dev": true }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/ua-parser-js": { @@ -17615,9 +17590,9 @@ } }, "@angular/cdk": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.14.tgz", - "integrity": "sha512-n6PrGdiVeSTEmM/HEiwIyg6YQUUymZrb5afaNLGFRM5YL0Y8OBqd+XhCjb0OfD/AfgCUtedVEPwNqrfW8KzgGw==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.12.tgz", + "integrity": "sha512-wT8/265zm2WKY0BDaRoYbrAT4kadrmejTRLjuimQIEUKnw4vBsJMWCwQkpFo3s6zr6eznGqYVAFb8KKPVLKGBg==", "requires": { "parse5": "^7.1.2", "tslib": "^2.3.0" @@ -17724,9 +17699,9 @@ } }, "@angular/material": { - "version": "16.2.14", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.14.tgz", - "integrity": "sha512-zQIxUb23elPfiIvddqkIDYqQhAHa9ZwMblfbv+ug8bxr4D0Dw360jIarxCgMjAcLj7Ccl3GBqZMUnVeM6cjthw==", + "version": "16.2.12", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.12.tgz", + "integrity": "sha512-k1DGRfP1mMmhg/nLJjZBOPzX3SyAjgbRBY2KauKOV8OFCXJGoMn/oLgMBh+qB1WugzIna/31dBV8ruHD3Uvp2w==", "requires": { "@material/animation": "15.0.0-canary.bc9ae6c9c.0", "@material/auto-init": "15.0.0-canary.bc9ae6c9c.0", @@ -18245,8 +18220,7 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "requires": {} + "dev": true }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", @@ -20344,8 +20318,7 @@ "version": "16.2.13", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.13.tgz", "integrity": "sha512-P5OiVp9MeMwVxihtC9NB4mx1Zlbup2DLMAWYAl8/kcFdRrRW+1YDQn93tlFToQDHGpPxkqW7cnFUPnA+QwQMYA==", - "dev": true, - "requires": {} + "dev": true }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -20642,12 +20615,6 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, - "@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "peer": true - }, "@schematics/angular": { "version": "16.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.12.tgz", @@ -20959,12 +20926,6 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, - "@types/luxon": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-1.11.1.tgz", - "integrity": "sha512-XBHQ7rzpOHyJudEQcMyoT67Np61FTb6S2jWqWQER/U7H2NAS+dpC8wv5T+6ygV5g/yJQdaojQbsJQiweool0Aw==", - "peer": true - }, "@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -21195,8 +21156,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", - "dev": true, - "requires": {} + "dev": true }, "@webassemblyjs/ast": { "version": "1.12.1", @@ -21502,15 +21462,13 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "requires": {} + "dev": true }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { "version": "7.2.0", @@ -21952,8 +21910,7 @@ "bootstrap": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", - "requires": {} + "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==" }, "brace-expansion": { "version": "2.0.1", @@ -23393,8 +23350,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-prettier": { "version": "5.1.3", @@ -24348,8 +24304,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} + "dev": true }, "ieee754": { "version": "1.2.1", @@ -24982,8 +24937,7 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -25213,8 +25167,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", - "dev": true, - "requires": {} + "dev": true }, "karma-source-map-support": { "version": "1.4.0", @@ -25816,12 +25769,6 @@ "yallist": "^3.0.2" } }, - "luxon": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", - "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", - "peer": true - }, "magic-string": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", @@ -27408,8 +27355,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.4", @@ -28931,8 +28877,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "json-schema-traverse": { "version": "0.4.1", @@ -29098,8 +29043,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "requires": {} + "dev": true }, "tsconfig-paths": { "version": "4.2.0", @@ -29245,9 +29189,9 @@ "dev": true }, "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", + "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", "dev": true }, "ua-parser-js": { @@ -29543,8 +29487,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "json-schema-traverse": { "version": "0.4.1", @@ -29633,8 +29576,7 @@ "version": "8.16.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -29814,8 +29756,7 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true, - "requires": {} + "dev": true }, "xml-name-validator": { "version": "3.0.0", diff --git a/package.json b/package.json index 7ca9a31..c9ce8dc 100644 --- a/package.json +++ b/package.json @@ -19,15 +19,15 @@ }, "private": true, "dependencies": { - "@angular/animations": "^16.2.12", - "@angular/cdk": "^16.2.14", - "@angular/common": "^16.2.12", - "@angular/compiler": "^16.2.12", - "@angular/core": "^16.2.12", - "@angular/forms": "^16.2.12", - "@angular/material": "^16.2.14", - "@angular/platform-browser": "^16.2.12", - "@angular/platform-browser-dynamic": "^16.2.12", + "@angular/animations": "^16.2.0", + "@angular/cdk": "^16.2.12", + "@angular/common": "^16.2.0", + "@angular/compiler": "^16.2.0", + "@angular/core": "^16.2.0", + "@angular/forms": "^16.2.0", + "@angular/material": "^16.2.12", + "@angular/platform-browser": "^16.2.0", + "@angular/platform-browser-dynamic": "^16.2.0", "@angular/router": "^16.2.12", "angular-disable-browser-back-button": "^2.0.0", "bootstrap": "^5.2.3", @@ -43,14 +43,14 @@ "zone.js": "~0.13.3" }, "devDependencies": { - "@angular-devkit/build-angular": "^16.2.12", + "@angular-devkit/build-angular": "^16.2.10", "@angular-eslint/builder": "16.3.1", "@angular-eslint/eslint-plugin": "16.3.1", "@angular-eslint/eslint-plugin-template": "16.3.1", "@angular-eslint/schematics": "16.3.1", "@angular-eslint/template-parser": "16.3.1", - "@angular/cli": "~16.2.12", - "@angular/compiler-cli": "^16.2.12", + "@angular/cli": "~16.2.10", + "@angular/compiler-cli": "^16.2.10", "@types/crypto-js": "^4.1.1", "@types/file-saver": "^2.0.5", "@types/jasmine": "~4.0.0", @@ -71,6 +71,6 @@ "lint-staged": "^15.2.2", "prettier": "^3.2.5", "prettier-eslint": "^16.3.0", - "typescript": "~4.9.5" + "typescript": "5.1.3" } -} +} \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/view-details/view-details.component.css b/src/app/app-modules/associate-anm-mo/view-details/view-details.component.css index 8f547c2..bc80ce9 100644 --- a/src/app/app-modules/associate-anm-mo/view-details/view-details.component.css +++ b/src/app/app-modules/associate-anm-mo/view-details/view-details.component.css @@ -31,8 +31,8 @@ background: #E14646; color: #ffffff; position: absolute; - margin-left: 79%; - margin-top: -100px; + margin-left: 77%; + margin-top: -80px; } .fieldStyleDisabled { diff --git a/src/app/app-modules/core/header/header.component.css b/src/app/app-modules/core/header/header.component.css index 4d39d6a..14961f7 100644 --- a/src/app/app-modules/core/header/header.component.css +++ b/src/app/app-modules/core/header/header.component.css @@ -97,3 +97,9 @@ img { padding-top: 12px; } } + +.logout >>>.mat-icon-button { + width: 0px !important; + height: 0px !important; + +} diff --git a/src/app/app-modules/core/header/header.component.html b/src/app/app-modules/core/header/header.component.html index 38dd403..d6cf915 100644 --- a/src/app/app-modules/core/header/header.component.html +++ b/src/app/app-modules/core/header/header.component.html @@ -67,19 +67,19 @@ aria-label="menu" class="logoutButton" > - account_circle + account_circle {{ userName }} - - - diff --git a/src/app/app-modules/user-login/login/login.component.css b/src/app/app-modules/user-login/login/login.component.css index 486fc4b..7ae059b 100644 --- a/src/app/app-modules/user-login/login/login.component.css +++ b/src/app/app-modules/user-login/login/login.component.css @@ -5,84 +5,95 @@ mat-card { text-align: center; margin-top: 100px; border-radius: 15px !important; + background-color: #fff; + } mat-form-field { - display: block; +display: block; } mat-card-content { - margin-top: 20px; +margin-top: 20px; } .full-width { - width: 100%; - margin-top: 10px; - margin-bottom: 10px; +width: 100%; +margin-top: 10px; +margin-bottom: 10px; } .timeDisplay { - color: #00071e; - font-size: 15px; +color: #00071e; +font-size: 15px; } .textColor { - color: #00071e; - font-size: 13px; +color: #00071e; +font-size: 13px; } .imgECD { - height: 375px; - width: 700px; - border-radius: 15px !important; +height: 375px; +width: 700px; +border-radius: 15px !important; } .mainContainer { - height: auto; - overflow: hidden; - /* overflow-x: hidden; */ - /* overflow-y: hidden !important; */ - /* overflow-y: auto; */ - background: linear-gradient( - 90deg, - #96d1eb 61.98%, - rgba(255, 255, 255, 0) 100% - ); - display: flex; - justify-content: center; - /* align-items: center; */ - /* min-height: 100vh; */ +height: auto; +overflow: hidden; +/* overflow-x: hidden; */ +/* overflow-y: hidden !important; */ +/* overflow-y: auto; */ +background: linear-gradient( + 90deg, + #96d1eb 61.98%, + rgba(255, 255, 255, 0) 100% +); +display: flex; +justify-content: center; +/* align-items: center; */ +/* min-height: 100vh; */ } .fontStyle { - font-family: "Lato", sans-serif; - font-weight: 600; - font-size: 14px; +font-family: "Lato", sans-serif; +font-weight: 600; +font-size: 14px; } .loginButton { - background-color: #4fa2d0; - color: #ffffff; - border-radius: 10px !important; - box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); +background-color: #4fa2d0; +color: #ffffff; +border-radius: 10px !important; +box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); } .labelStyle { - font-family: "Lato", sans-serif; - font-weight: 600; - color: #00071e; +font-family: "Lato", sans-serif; +font-weight: 600; +color: #00071e; } .forgotStyle { - font-family: "Lato", sans-serif; - font-weight: 600; - color: #00071e; - font-size: 14px; +font-family: "Lato", sans-serif; +font-weight: 600; +color: #00071e; +font-size: 14px; } .loginStyle { - font-family: "Lato", sans-serif; - font-weight: 700; - color: #ffffff; - font-size: 18px; +font-family: "Lato", sans-serif; +font-weight: 700; +color: #ffffff; +font-size: 18px; } +/* .mat-form-field-appearance-outline .mat-form-field-flex { +margin-top: -0.25em; +position: relative; +padding: 5px !important; +} */ + + + + diff --git a/src/app/app-modules/user-login/login/login.component.html b/src/app/app-modules/user-login/login/login.component.html index 899e154..7e00710 100644 --- a/src/app/app-modules/user-login/login/login.component.html +++ b/src/app/app-modules/user-login/login/login.component.html @@ -26,40 +26,44 @@ [formGroup]="loginForm" (ngSubmit)="loginForm.valid && onSubmit()" > - + {{ currentLanguageSet?.enterUserName }} + - + {{ currentLanguageSet?.enterPassword }} - +
diff --git a/src/app/app.component.css b/src/app/app.component.css index e69de29..c5313e0 100644 --- a/src/app/app.component.css +++ b/src/app/app.component.css @@ -0,0 +1,322 @@ +/* You can add global styles to this file, and also import other style files */ +@import "~bootstrap/dist/css/bootstrap.css"; +@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;0,900;1,300;1,400;1,700;1,900&display=swap'); +@import url('https://fonts.googleapis.com/icon?family=Material+Icons'); + +body { + height: 100%; + margin: 0; + +} + +/* body { + --text-color: #2d3436; + --bkg-color: linear-gradient(89.81deg, #96d1eb 0.17%, #4fa2d0 99.84%); */ +/* --card-color: white; */ +/* } */ +/* body.dark-theme { + --text-color: #dfe6e9; + --bkg-color: #2d3436; */ +/* --card-color: #2d2d2d; + --input-color: white; */ +/* } */ + +body { + margin: 0; + /* font-family: Roboto, "Helvetica Neue", sans-serif; */ + /* font-family: "Lato", sans-serif; */ + font-family: "Lato", sans-serif !important; + font-weight: 400; + /* background: var(--bkg-color); + color: var(--text-color); */ +} + +/* h1, +p { + color: var(--text-color); +} */ + +.mainContainer { + /* overflow: hidden; */ + height:100%; + /* overflow-x: hidden; */ + /* overflow-y: hidden !important; */ + /* overflow-y: hidden; */ + background: linear-gradient(89.81deg, #96d1eb 0.17%, #4fa2d0 99.84%); +} + +.pull-right { + display: flex; + justify-content: right; +} + +.pull-left { + display: flex; + justify-content: left; +} + +.pull-center { + display: flex; + justify-content: center; +} + +/* .cardDark { + background: var(--card-color); + color: var(--text-color); +} + +.mat-form-field-appearance-outline .mat-form-field-outline { + color: var(--input-color); +} + + +input.mat-input-element { + color: var(--input-color); +} + +.labelColor { + color: var(--input-color); +} */ +.mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick { + color: #00071e; +} + +.mat-form-field-appearance-outline .mat-form-field-outline { + color: #00071e; +} + +.mat-form-field-appearance-outline.mat-focused.blueInput + .mat-form-field-outline-thick { + color: #4fa2d0; +} + +.mat-form-field-appearance-outline.blueInput .mat-form-field-outline { + color: #4fa2d0; +} + +/* .searchInput { + width: 280px; +} */ +/* .mat-form-field-appearance-outline.searchInput .mat-form-field-outline { + border-radius: 8px; + font-family: "Lato", sans-serif; + font-weight: 700; + font-size: 18px; + background-color: #ffffff; + width: 100%; + max-width: 505px; +} */ + +.mat-focused .mat-form-field-label { + color: #00071e !important; + font-weight: 500; +} + +.buttonColor { + font-family: "Lato", sans-serif; + background-color: #4fa2d0; + color: #ffffff; + border-radius: 10px !important; +} + +.buttonColorRedish { + font-family: 'Lato', sans-serif; + background-color: #E14646 !important; + color: #ffffff; + border-radius: 10px !important; +} + +.buttonColorRed { + font-family: 'Lato', sans-serif; + background-color: #E14646 !important; + color: #ffffff; + border-radius: 10px !important; +} + +.buttonColorGreen { + font-family: 'Lato', sans-serif; + background-color: #239438 !important; + color: #ffffff; + border-radius: 10px !important; +} + +.buttonColorGreen:disabled { + opacity: 0.7; + cursor: not-allowed +} + +.buttonColorRedish:disabled { + opacity: 0.7; + cursor: not-allowed +} + +.buttonColorRed:disabled { + opacity: 0.7; + cursor: not-allowed +} + +.buttonColor:disabled { + opacity: 0.7; + cursor: not-allowed +} + +.cursorPointer { + cursor: pointer; +} + +.spinner-color circle { + stroke: #4fa2d0 !important; +} + +/* Change the white to any color */ +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus, +input:-webkit-autofill:active { + -webkit-box-shadow: 0 0 0 30px #ffffff inset !important; +} + +.box { + height: 60px; +} + +.buttonWidth { + /* max-width: 150px; */ + width: 150px; +} + +.mat-checkbox-checked.mat-accent .mat-checkbox-background { + background-color: #4fa2d0 !important; +} + +.mat-tab-group.mat-primary .mat-ink-bar, +.mat-tab-nav-bar.mat-primary .mat-ink-bar { + background-color: #4fa2d0 !important; +} + +.mat-tab-nav-bar, +.mat-tab-header { + border-bottom: 2px solid #00071e; +} + +.mat-tab-label .mat-tab-label-content { + font-family: "Lato", sans-serif; + font-weight: 400; + font-size: 20px; +} + +/* .mat-form-field-appearance-outline .mat-form-field-outline { + background-color: #ffffff; + border-radius: 8px; + width: 100%; + max-width: 280px; +} */ + +.mat-form-field-appearance-outline.backgroundWhite .mat-form-field-outline { + background-color: #ffffff !important; + border-radius: 8px; + width: 100%; + /* max-width: 420px; */ +} + +.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle { + border-color: #4fa2d0; +} + +.mat-radio-button.mat-accent .mat-radio-inner-circle, .mat-radio-button.mat-accent .mat-radio-ripple .mat-ripple-element:not(.mat-radio-persistent-ripple), .mat-radio-button.mat-accent.mat-radio-checked .mat-radio-persistent-ripple, .mat-radio-button.mat-accent:active .mat-radio-persistent-ripple { + background-color: #4fa2d0; +} + +.mat-form-field-appearance-outline.searchInput .mat-form-field-outline { + border-radius: 8px; + font-family: "Lato", sans-serif; + font-weight: 700; + font-size: 16px; + background-color: #ffffff; + width: 100%; + max-width: 505px; +} + +.mat-form-field-appearance-outline.dropdownAlign .mat-form-field-outline { + border-radius: 8px; + font-family: "Lato", sans-serif; + font-weight: 700; + font-size: 16px; + background-color: #ffffff; + width: 100%; + max-width: 400px; +} + +.test{ + background: linear-gradient(90deg, #96D1EB 61.98%, rgba(255, 255, 255, 0) 100%)!important; +} + +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; + background: linear-gradient(89.81deg, #96D1EB 0.17%, #4FA2D0 99.84%); } + +body .mat-select-arrow { + background-image: url('../assets/images/CaretDown.png') !important; + background-repeat: no-repeat; + background-size: contain; + background-position: right center; + width: 28px; + height: 28px; + color: transparent; + border: 0; + margin-top: 8px; +} + +.dropdownAlignment > div { + padding-bottom: 0; +} + +::ng-deep.mat-step-label { + font-family: "Lato", sans-serif; + font-weight: 600; + font-size: 20px; + color: #000000; + line-height: 24px; + font-style: normal; +} + +::ng-deep.mat-step-header .mat-step-icon-selected, .mat-step-header .mat-step-icon-state-done, .mat-step-header .mat-step-icon-state-edit { + background-color: #4fa2d0 !important +} + +.mat-stepper-horizontal, .mat-stepper-vertical { + background-color: transparent; +} + +/* ::ng-deep.mat-step-header { + overflow: hidden; + outline: none; + cursor: pointer; + position: relative; + box-sizing: content-box; + -webkit-tap-highlight-color: rgba(0,0,0,0); + display: grid !important; +} */ +.changeOpacity span.mat-button-focus-overlay { + opacity: 0 !important; +} + +.mat-form-field-appearance-outline .mat-form-field-flex { + padding: 1em .75em 0.7em 0.75em !important; + margin-top: -2.25em !important; + position: relative; +} +.mat-dialog-container { + + background-color: #ffffff !important; +} + +.mat-select-panel { + background-color: #ffffff !important; +} + +.mat-icon-button { + width: 0px !important; + height: 0px !important; + +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 65bf267..cec1474 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -36,26 +36,27 @@ import { HTTP_INTERCEPTORS, } from '@angular/common/http'; import { ConfirmationService } from './app-modules/services/confirmation/confirmation.service'; -import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog'; import { UserLoginModule } from './app-modules/user-login/user-login.module'; -import { MatLegacyCardModule as MatCardModule } from '@angular/material/legacy-card'; -import { MatLegacyFormFieldModule as MatFormFieldModule } from '@angular/material/legacy-form-field'; -import { MatLegacyInputModule as MatInputModule } from '@angular/material/legacy-input'; -import { MatLegacySelectModule as MatSelectModule } from '@angular/material/legacy-select'; -import { MatIconModule } from '@angular/material/icon'; -import { MatLegacyButtonModule as MatButtonModule } from '@angular/material/legacy-button'; -import { MatDatepickerModule } from '@angular/material/datepicker'; -import { MatNativeDateModule } from '@angular/material/core'; -import { MatLegacyTooltipModule as MatTooltipModule } from '@angular/material/legacy-tooltip'; -import { BrowserModule } from '@angular/platform-browser'; -import { MatExpansionModule } from '@angular/material/expansion'; -import { MatLegacyPaginatorModule as MatPaginatorModule } from '@angular/material/legacy-paginator'; -import {MatLegacySlideToggleModule as MatSlideToggleModule} from '@angular/material/legacy-slide-toggle'; import { DatePipe } from '@angular/common'; import { TitleCasePipe } from '@angular/common'; import { SharedModule } from './app-modules/shared/shared.module'; import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'; import { BackButtonDisableModule } from 'angular-disable-browser-back-button'; +import { MatButtonModule } from '@angular/material/button'; +import { MatNativeDateModule } from '@angular/material/core'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatDialogModule } from '@angular/material/dialog'; +import { MatExpansionModule } from '@angular/material/expansion'; +import { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormFieldModule } from '@angular/material/form-field'; +import { MatIconModule } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatSelectModule } from '@angular/material/select'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { BrowserModule } from '@angular/platform-browser'; +import { MatCardModule } from '@angular/material/card'; + @@ -73,7 +74,6 @@ import { BackButtonDisableModule } from 'angular-disable-browser-back-button'; CoreModule, UserLoginModule, HttpClientModule, - MatCardModule, MatFormFieldModule, MatInputModule, MatSelectModule, @@ -87,6 +87,7 @@ import { BackButtonDisableModule } from 'angular-disable-browser-back-button'; MatPaginatorModule, MatSlideToggleModule, SharedModule, + MatCardModule, BackButtonDisableModule.forRoot({ preserveScroll: true }), @@ -100,6 +101,7 @@ import { BackButtonDisableModule } from 'angular-disable-browser-back-button'; useClass: HttpInterceptorService, multi: true, }, + {provide: MAT_FORM_FIELD_DEFAULT_OPTIONS, useValue: {appearance: 'outline'}}, // HttpClient, // { // provide: HTTP_INTERCEPTORS, @@ -113,3 +115,4 @@ import { BackButtonDisableModule } from 'angular-disable-browser-back-button'; exports:[SharedModule] }) export class AppModule {} +MatCardModule \ No newline at end of file diff --git a/src/styles.css b/src/styles.css index 51fc635..a632c26 100644 --- a/src/styles.css +++ b/src/styles.css @@ -264,7 +264,7 @@ body .mat-select-arrow { height: 28px; color: transparent; border: 0; - margin: 0; + margin-top: 8px; } .dropdownAlignment > div { @@ -299,4 +299,46 @@ body .mat-select-arrow { } */ .changeOpacity span.mat-button-focus-overlay { opacity: 0 !important; -} \ No newline at end of file +} + +/* .mat-form-field-appearance-outline .mat-form-field-flex { + padding: 1em .75em 0.7em 0.75em !important; + margin-top: -2.25em !important; + position: relative; +} */ +.mat-dialog-container { + + background-color: #ffffff !important; +} + +.mat-select-panel { + background-color: #ffffff !important; +} + +/* .mat-icon-button { + width: 0px !important; + height: 0px !important; + +} */ +.mat-form-field { + font-size: inherit; + font-weight: 400; + line-height: 1.125; + letter-spacing: normal; +} + +.mat-form-field-appearance-outline .mat-form-field-infix { + padding: 1em 0; +} +.mat-form-field-label-wrapper { + top: -.84375em; + padding-top: .84375em; +} +.mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label, .mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label { + transform: translateY(-1.59375em) scale(.75); + width: 133.3333333333%; +} +.mat-form-field-appearance-outline .mat-form-field-label { + top: 2.4em; + margin-top: -.25em; +} From 1e15939b1b7966516b494abbe49936844fd68599 Mon Sep 17 00:00:00 2001 From: nkokkiligadda87 Date: Fri, 12 Apr 2024 12:19:09 +0530 Subject: [PATCH 002/134] CSS changes --- src/app/app-modules/core/header/header.component.css | 1 - src/app/app-modules/core/header/header.component.html | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/app/app-modules/core/header/header.component.css b/src/app/app-modules/core/header/header.component.css index 14961f7..b816504 100644 --- a/src/app/app-modules/core/header/header.component.css +++ b/src/app/app-modules/core/header/header.component.css @@ -6,7 +6,6 @@ height: 70px; color: #ffffff; overflow: hidden; - padding-top: 12px; padding-left: 12px; padding-right: 12px; } diff --git a/src/app/app-modules/core/header/header.component.html b/src/app/app-modules/core/header/header.component.html index d6cf915..fbb89e4 100644 --- a/src/app/app-modules/core/header/header.component.html +++ b/src/app/app-modules/core/header/header.component.html @@ -9,13 +9,13 @@
{{ currentLanguageSet?.roleMenu }} : -
+
- language + language
-
+
- -
diff --git a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts index f317755..c6de106 100644 --- a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts +++ b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts @@ -626,7 +626,8 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { const step = this.filteredQuesData[stepIndex]; for (const question of step.questionnaires) { if (question && question.questionType === 'Question') { - if (question.enabledQues !== false && (question.answer === null || question.answer === '' || question.answer === undefined)) { + // if (question.enabledQues !== false && (question.answer === null || question.answer === '' || question.answer === undefined)) { + if (question.enabledQues.length > 0 && (question.answer === null || question.answer === '' || question.answer === undefined)) { return false; } } diff --git a/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.html b/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.html index 9c9c299..640cb8e 100644 --- a/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.html +++ b/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.html @@ -83,7 +83,8 @@
- - - - diff --git a/src/app/app-modules/material/material.module.ts b/src/app/app-modules/material/material.module.ts index 6cb4a6f..d60d621 100644 --- a/src/app/app-modules/material/material.module.ts +++ b/src/app/app-modules/material/material.module.ts @@ -60,11 +60,11 @@ import { MatRippleModule } from '@angular/material/core'; import { MatBottomSheetModule } from '@angular/material/bottom-sheet'; import { MatLegacyDialogModule as MatDialogModule } from '@angular/material/legacy-dialog'; import { MatLegacySnackBarModule as MatSnackBarModule } from '@angular/material/legacy-snack-bar'; -import { MatLegacyTooltipModule as MatTooltipModule } from '@angular/material/legacy-tooltip'; // Material Data tables import { MatLegacyPaginatorModule as MatPaginatorModule } from '@angular/material/legacy-paginator'; import { MatSortModule } from '@angular/material/sort'; import { MatLegacyTableModule as MatTableModule } from '@angular/material/legacy-table'; +import { MatTooltipModule } from '@angular/material/tooltip'; @NgModule({ declarations: [], diff --git a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.css b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.css index 007086f..03e1691 100644 --- a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.css +++ b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.css @@ -111,3 +111,5 @@ .form-group { margin-bottom: 15px; } + + diff --git a/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.css b/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.css index 625432c..07807a8 100644 --- a/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.css +++ b/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.css @@ -23,8 +23,12 @@ .mat-raised-button { background-color: #4FA2D0; + color: #FFFFFF; border-radius: 30px; - margin-right: 10px; +} +.mat-raised-button:disabled { + background-color: #0000001f; + color: #00000042; } .alexcolor { @@ -77,7 +81,7 @@ float: right; /* top: 220px; */ - background: #4FA2D0; + /* background: #4FA2D0; */ box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); border-radius: 10px; } diff --git a/src/app/app-modules/user-login/role-selection/role-selection.component.css b/src/app/app-modules/user-login/role-selection/role-selection.component.css index 9d1f1bd..b6c891a 100644 --- a/src/app/app-modules/user-login/role-selection/role-selection.component.css +++ b/src/app/app-modules/user-login/role-selection/role-selection.component.css @@ -18,6 +18,7 @@ mat-card { color: #00071E; text-align: left; padding: 0; + background-color: #ffffff; } /* .selected { diff --git a/src/styles.css b/src/styles.css index a632c26..f00dd48 100644 --- a/src/styles.css +++ b/src/styles.css @@ -132,6 +132,12 @@ input.mat-input-element { color: #ffffff; border-radius: 10px !important; } +.buttonColorRed:disabled { + font-family: 'Lato', sans-serif; + background-color: #0000001f !important; + color: #00000042 !important; + border-radius: 10px !important; +} .buttonColorGreen { font-family: 'Lato', sans-serif; @@ -142,7 +148,9 @@ input.mat-input-element { .buttonColorGreen:disabled { opacity: 0.7; - cursor: not-allowed + cursor: not-allowed; + background-color: #0000001f !important; +color: #00000042 !important; } .buttonColorRedish:disabled { @@ -157,7 +165,9 @@ input.mat-input-element { .buttonColor:disabled { opacity: 0.7; - cursor: not-allowed + cursor: not-allowed; + background-color: #0000001f !important; +color: #00000042 !important; } .cursorPointer { @@ -328,11 +338,11 @@ body .mat-select-arrow { } .mat-form-field-appearance-outline .mat-form-field-infix { - padding: 1em 0; + padding: 1.55em 0; } .mat-form-field-label-wrapper { - top: -.84375em; - padding-top: .84375em; + top: -.74375em; + padding-top: .84379em; } .mat-form-field-appearance-outline.mat-form-field-can-float.mat-form-field-should-float .mat-form-field-label, .mat-form-field-appearance-outline.mat-form-field-can-float .mat-input-server:focus+.mat-form-field-label-wrapper .mat-form-field-label { transform: translateY(-1.59375em) scale(.75); @@ -342,3 +352,18 @@ body .mat-select-arrow { top: 2.4em; margin-top: -.25em; } +.mat-menu-item { + background-color: #ffff; +} +.mat-menu-content:not(:empty) { + padding-top: unset !important; + padding-bottom: unset !important; +} + +mat-card{ + + background-color: #ffff !important; +} + + + From 62a77caff57e6151f1a7cc78d03c04f65e8ad718 Mon Sep 17 00:00:00 2001 From: nkokkiligadda87 Date: Fri, 19 Apr 2024 14:20:02 +0530 Subject: [PATCH 007/134] change url for forgot password --- src/environments/environment.prod.ts | 8 ++++---- src/environments/environment.test.ts | 8 ++++---- src/environments/environment.ts | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 9d0ce4a..69ed12e 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -39,10 +39,10 @@ export const environment = { getSecurityQuestionURL: `${COMMON_API}user/getsecurityquetions`, getLoginURL: `${COMMON_API}user/userAuthenticate`, userLogoutPreviousSessionUrl: `${COMMON_API}user/logOutUserFromConcurrentSession`, - setForgotPasswordURL: `${COMMON_API}/user/setForgetPassword`, - saveUserQuestionAns: `${COMMON_API}/user/saveUserSecurityQuesAns`, - validateSecQuesAnsURL: `${COMMON_API}/user/validateSecurityQuestionAndAnswer`, - forgotPasswordURL: `${COMMON_API}/user/forgetPassword`, + setForgotPasswordURL: `${COMMON_API}user/setForgetPassword`, + saveUserQuestionAns: `${COMMON_API}user/saveUserSecurityQuesAns`, + validateSecQuesAnsURL: `${COMMON_API}user/validateSecurityQuestionAndAnswer`, + forgotPasswordURL: `${COMMON_API}user/forgetPassword`, getSessionExistsURL: `${COMMON_API}user/getLoginResponse`, logoutUrl: `${COMMON_API}user/userLogout`, getLanguageList: `${COMMON_API}beneficiary/getLanguageList`, diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index 064a309..dcea47d 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -39,10 +39,10 @@ export const environment = { getSecurityQuestionURL: `${COMMON_API}user/getsecurityquetions`, getLoginURL: `${COMMON_API}user/userAuthenticate`, userLogoutPreviousSessionUrl: `${COMMON_API}user/logOutUserFromConcurrentSession`, - setForgotPasswordURL: `${COMMON_API}/user/setForgetPassword`, - saveUserQuestionAns: `${COMMON_API}/user/saveUserSecurityQuesAns`, - validateSecQuesAnsURL: `${COMMON_API}/user/validateSecurityQuestionAndAnswer`, - forgotPasswordURL: `${COMMON_API}/user/forgetPassword`, + setForgotPasswordURL: `${COMMON_API}user/setForgetPassword`, + saveUserQuestionAns: `${COMMON_API}user/saveUserSecurityQuesAns`, + validateSecQuesAnsURL: `${COMMON_API}user/validateSecurityQuestionAndAnswer`, + forgotPasswordURL: `${COMMON_API}user/forgetPassword`, getSessionExistsURL: `${COMMON_API}user/getLoginResponse`, logoutUrl: `${COMMON_API}user/userLogout`, getLanguageList: `${COMMON_API}beneficiary/getLanguageList`, diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 8c2e6d7..a108fa2 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -42,10 +42,10 @@ export const environment = { getSecurityQuestionURL: `${COMMON_API}user/getsecurityquetions`, getLoginURL: `${COMMON_API}user/userAuthenticate`, userLogoutPreviousSessionUrl: `${COMMON_API}user/logOutUserFromConcurrentSession`, - setForgotPasswordURL: `${COMMON_API}/user/setForgetPassword`, - saveUserQuestionAns: `${COMMON_API}/user/saveUserSecurityQuesAns`, - validateSecQuesAnsURL: `${COMMON_API}/user/validateSecurityQuestionAndAnswer`, - forgotPasswordURL: `${COMMON_API}/user/forgetPassword`, + setForgotPasswordURL: `${COMMON_API}user/setForgetPassword`, + saveUserQuestionAns: `${COMMON_API}user/saveUserSecurityQuesAns`, + validateSecQuesAnsURL: `${COMMON_API}user/validateSecurityQuestionAndAnswer`, + forgotPasswordURL: `${COMMON_API}user/forgetPassword`, getSessionExistsURL: `${COMMON_API}user/getLoginResponse`, logoutUrl: `${COMMON_API}user/userLogout`, getLanguageList: `${COMMON_API}beneficiary/getLanguageList`, From 34aaa8364f2a5c18f96c1dfcc565cf97100e5f78 Mon Sep 17 00:00:00 2001 From: nkokkiligadda87 Date: Fri, 19 Apr 2024 14:51:17 +0530 Subject: [PATCH 008/134] disabled please wait button --- .../activities/uploadexcel/uploadexcel.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.html b/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.html index 640cb8e..52a2b91 100644 --- a/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.html +++ b/src/app/app-modules/supervisor/activities/uploadexcel/uploadexcel.component.html @@ -84,14 +84,14 @@
-
- - Year - - {{year}} - - - - - Month - - {{month.month}} - - - - - {{ currentLanguageSet?.Cycles }} - - - {{ cycle.name }} - - - + + Year + + {{year}} + + - - {{ currentLanguageSet?.role }} - - - {{role.roleName}} - - - + + Month + + {{month.month}} + + - - {{ currentLanguageSet?.agentName }} - - - {{ agent?.firstName | titlecase }} {{ agent?.lastName | titlecase }} {{ (agent?.agentId !== null && agent?.agentId !== undefined) ? ',' : '' }} {{ agent?.agentId }} - - - + + {{ currentLanguageSet?.Cycles }} + + + {{ cycle.name }} + + + - - {{ currentLanguageSet?.language }} - - - {{ language.languageName }} - - - + + {{ currentLanguageSet?.role }} + + + {{role.roleName}} + + + + + + {{ currentLanguageSet?.agentName }} + + + {{ agent?.firstName | titlecase }} {{ agent?.lastName | titlecase }} {{ (agent?.agentId !== null && + agent?.agentId !== undefined) ? ',' : '' }} {{ agent?.agentId }} + + + - - {{ currentLanguageSet?.validCall }} - {{ currentLanguageSet?.inValidCall }} - + + {{ currentLanguageSet?.language }} + + + {{ language.languageName }} + + + + + + {{ + currentLanguageSet?.validCall }} + {{ + currentLanguageSet?.inValidCall }} + + + - -
- + {{ currentLanguageSet?.enterDateRange }} - + + - + matEndDate formControlName="end" placeholder="{{ currentLanguageSet?.endDate }}" /> MM/DD/YYYY – MM/DD/YYYY - + - {{ currentLanguageSet?.invalidStartDate }} + {{ + currentLanguageSet?.invalidStartDate }} {{ currentLanguageSet?.invalidEndDate - }} + }} - - {{ currentLanguageSet?.role }} - - - {{role.roleName}} - - + + {{ currentLanguageSet?.role }} + + + {{role.roleName}} + + - + {{ currentLanguageSet?.agentName }} - - - {{ agent?.firstName | titlecase }} {{ agent?.lastName | titlecase }} {{ (agent?.agentId !== null && agent?.agentId !== undefined) ? ',' : '' }} {{ agent?.agentId }} - + + + {{ agent?.firstName | titlecase }} {{ agent?.lastName | titlecase }} {{ (agent?.agentId !== null && + agent?.agentId !== undefined) ? ',' : '' }} {{ agent?.agentId }} + - - - {{ currentLanguageSet?.phoneNumber}} - - + + + {{ currentLanguageSet?.phoneNumber}} + + - - {{ currentLanguageSet?.language }} - - - {{ language.languageName }} - - + + {{ currentLanguageSet?.language }} + + + {{ language.languageName }} + + - - {{ currentLanguageSet?.validCall }} - {{ currentLanguageSet?.inValidCall }} + + {{ + currentLanguageSet?.validCall }} + {{ + currentLanguageSet?.inValidCall }} - + - - +
-
- +
+ {{ currentLanguageSet?.inTableSearch - }} - + }} + search
-
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {{ currentLanguageSet?.noRecordsFound }} -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{ currentLanguageSet?.noRecordsFound }} +
S.No. {{ callAuditData.data.indexOf(element) + 1 }} {{currentLanguageSet?.beneficiaryId}} {{element.beneficiaryid}} {{currentLanguageSet?.beneficiaryName}} {{element.beneficiaryname}} {{currentLanguageSet?.phoneNumber}} {{element.phoneNo}} {{currentLanguageSet?.agentName}} {{element.agetname}} {{currentLanguageSet?.callType}} {{element.outboundCallType}} {{ currentLanguageSet?.casesheet }} - - - - -
S.No. {{ callAuditData.data.indexOf(element) + 1 }} {{currentLanguageSet?.beneficiaryId}} {{element.beneficiaryid}} {{currentLanguageSet?.beneficiaryName}} {{element.beneficiaryname}} {{currentLanguageSet?.phoneNumber}} {{element.phoneNo}} {{currentLanguageSet?.agentName}} {{element.agetname}} {{currentLanguageSet?.callType}} {{element.outboundCallType}} {{ + currentLanguageSet?.casesheet }} + + + + +
-
- {{ currentLanguageSet?.noRecordsFound }} +
+ {{ currentLanguageSet?.noRecordsFound }} +
-
-
- +
+
- - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + -
- {{ currentLanguageSet?.noRecordsFound }} +
+ {{ currentLanguageSet?.noRecordsFound }}
-
S.No. {{ callAuditData.data.indexOf(element) + 1 }}S.No. {{ callAuditData.data.indexOf(element) + 1 }} {{currentLanguageSet?.beneficiaryId}} {{element.beneficiaryid}} {{currentLanguageSet?.beneficiaryId}} {{element.beneficiaryid}} {{currentLanguageSet?.beneficiaryName}} {{element.beneficiaryname}} {{currentLanguageSet?.beneficiaryName}} {{element.beneficiaryname}} {{currentLanguageSet?.phoneNumber}} {{element.phoneNo}} {{currentLanguageSet?.phoneNumber}} {{element.phoneNo}} {{currentLanguageSet?.agentName}} {{element.agetname}} {{currentLanguageSet?.agentName}} {{element.agetname}} {{currentLanguageSet?.callType}} {{element.outboundCallType}} {{currentLanguageSet?.callType}} {{element.outboundCallType}} {{ currentLanguageSet?.casesheet }}{{ + currentLanguageSet?.casesheet }} - + - - + + -
-
- {{ currentLanguageSet?.noRecordsFound }} -
-
- - + +
+ {{ currentLanguageSet?.noRecordsFound }} +
+
+ +
\ No newline at end of file diff --git a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.css b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.css index 1f4f35a..e2352d0 100644 --- a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.css +++ b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.css @@ -9,7 +9,7 @@ margin-left: 5px; margin-right: 5px; width: 100%; - background-color: #f2f2f2; + background-color: #f2f2f2 !important; border: 1px solid #4fa2d0; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.25); border-radius: 10px !important; diff --git a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css index e1b8f0d..d6aec7a 100644 --- a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css +++ b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css @@ -20,7 +20,7 @@ margin-left: 5px; margin-right: 5px; width: 99%; - background-color: #f2f2f2; + background-color: #f2f2f2 !important; border: 1px solid #4fa2d0; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.25); border-radius: 10px !important; diff --git a/src/app/app-modules/quality-supervisor/activites/Grade-config/create-grade-config/create-grade-config.component.css b/src/app/app-modules/quality-supervisor/activites/Grade-config/create-grade-config/create-grade-config.component.css index 0871989..b8b111d 100644 --- a/src/app/app-modules/quality-supervisor/activites/Grade-config/create-grade-config/create-grade-config.component.css +++ b/src/app/app-modules/quality-supervisor/activites/Grade-config/create-grade-config/create-grade-config.component.css @@ -20,7 +20,7 @@ margin-left: 5px; margin-right: 5px; width: 99%; - background-color: #f2f2f2; + background-color: #f2f2f2 !important; border: 1px solid #4fa2d0; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.25); border-radius: 10px !important; diff --git a/src/app/app-modules/quality-supervisor/activites/Grade-config/edit-grade-config/edit-grade-config.component.css b/src/app/app-modules/quality-supervisor/activites/Grade-config/edit-grade-config/edit-grade-config.component.css index 37dee49..289cccb 100644 --- a/src/app/app-modules/quality-supervisor/activites/Grade-config/edit-grade-config/edit-grade-config.component.css +++ b/src/app/app-modules/quality-supervisor/activites/Grade-config/edit-grade-config/edit-grade-config.component.css @@ -20,7 +20,7 @@ margin-left: 5px; margin-right: 5px; width: 99%; - background-color: #f2f2f2; + background-color: #f2f2f2 !important; border: 1px solid #4fa2d0; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.25); border-radius: 10px !important; @@ -53,9 +53,9 @@ max-height: fit-content; } - mat-form-field { + /* mat-form-field { color: #ffffff; - } + } */ .full-width { height: 40px; font-family: "Lato", sans-serif; diff --git a/src/app/app-modules/quality-supervisor/activites/Grade-config/grade-configuration/grade-configuration.component.css b/src/app/app-modules/quality-supervisor/activites/Grade-config/grade-configuration/grade-configuration.component.css index 4293e8e..242c6d3 100644 --- a/src/app/app-modules/quality-supervisor/activites/Grade-config/grade-configuration/grade-configuration.component.css +++ b/src/app/app-modules/quality-supervisor/activites/Grade-config/grade-configuration/grade-configuration.component.css @@ -17,7 +17,7 @@ margin-right: 5px; margin-bottom: 40px; width: 99%; - background-color: #f2f2f2; + background-color: #f2f2f2 !important; border: 1px solid #4fa2d0; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.25); border-radius: 10px !important; diff --git a/src/app/app-modules/quality-supervisor/activites/agent-mapping-configuration/agent-mapping-configuration.component.css b/src/app/app-modules/quality-supervisor/activites/agent-mapping-configuration/agent-mapping-configuration.component.css index 128379b..b14eb6a 100644 --- a/src/app/app-modules/quality-supervisor/activites/agent-mapping-configuration/agent-mapping-configuration.component.css +++ b/src/app/app-modules/quality-supervisor/activites/agent-mapping-configuration/agent-mapping-configuration.component.css @@ -12,7 +12,7 @@ margin-right: 5px; margin-bottom: 40px; width: 99%; - background-color: #f2f2f2; + background-color: #f2f2f2 !important; border: 1px solid #4fa2d0; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.25); border-radius: 10px !important; diff --git a/src/app/app-modules/quality-supervisor/activites/create-agent/create-agent.component.css b/src/app/app-modules/quality-supervisor/activites/create-agent/create-agent.component.css index db8ef07..6707f60 100644 --- a/src/app/app-modules/quality-supervisor/activites/create-agent/create-agent.component.css +++ b/src/app/app-modules/quality-supervisor/activites/create-agent/create-agent.component.css @@ -20,7 +20,7 @@ margin-left: 5px; margin-right: 5px; width: 99%; - background-color: #f2f2f2; + background-color: #f2f2f2 !important; border: 1px solid #4fa2d0; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.25); border-radius: 10px !important; @@ -52,10 +52,10 @@ margin-left: 15px; max-height: fit-content; } - +/* mat-form-field { color: #ffffff; -} +} */ .full-width { height: 40px; font-family: "Lato", sans-serif; diff --git a/src/app/app-modules/quality-supervisor/activites/create-agent/create-agent.component.html b/src/app/app-modules/quality-supervisor/activites/create-agent/create-agent.component.html index 7c383ba..a718ac4 100644 --- a/src/app/app-modules/quality-supervisor/activites/create-agent/create-agent.component.html +++ b/src/app/app-modules/quality-supervisor/activites/create-agent/create-agent.component.html @@ -83,7 +83,7 @@

{{ currentLanguageSet?.createAgentQualityAuditorMapping *ngFor="let agent of agentNameList" [value]="agent.userId" > - {{ agent?.firstName | titlecase }} {{ agent?.lastName | titlecase }} {{ (agent?.agentId !== null && agent?.agentId !== undefined) ? '-' : '' }} {{ agent?.agentId }} + {{ agent?.firstName | titlecase }} {{ agent?.lastName | titlecase }} {{ (agent?.agentId != null && agent?.agentId != undefined) ? '-' : '' }} {{ agent?.agentId }} {{ currentLanguageSet?.createQualityAuditQuestionConfig appearance="outline" id="fieldBackground" [style.width]="'70%'" + style="margin-bottom: 20px;" class="fontStyle" > {{ currentLanguageSet?.questionnaire }} @@ -59,7 +60,8 @@

{{ currentLanguageSet?.createQualityAuditQuestionConfig
{{ currentLanguageSet?.rank}} {{ currentLanguageSet?.createQualityAuditQuestionConfig {{ currentLanguageSet?.answerType }} {{ currentLanguageSet?.createQualityAuditQuestionConfig {{ currentLanguageSet?.sectionName}} {{ currentLanguageSet?.createQualityAuditQuestionConfig
-
-
- - {{ currentLanguageSet?.options }} - +
+
+
+ + {{ currentLanguageSet?.options }} + + + Please enter valid data - Please enter valid data - - - +
+
+ {{ currentLanguageSet?.score }} {{ currentLanguageSet?.createQualityAuditQuestionConfig [disabled]="!isOptionFilled" /> +
+ +
+ + +
diff --git a/src/app/app-modules/quality-supervisor/activites/quality-audit-question-config/edit-qa-question-config/edit-qa-config/edit-qa-config.component.css b/src/app/app-modules/quality-supervisor/activites/quality-audit-question-config/edit-qa-question-config/edit-qa-config/edit-qa-config.component.css index 9b27504..76aaacc 100644 --- a/src/app/app-modules/quality-supervisor/activites/quality-audit-question-config/edit-qa-question-config/edit-qa-config/edit-qa-config.component.css +++ b/src/app/app-modules/quality-supervisor/activites/quality-audit-question-config/edit-qa-question-config/edit-qa-config/edit-qa-config.component.css @@ -16,7 +16,7 @@ margin-left: 5px; margin-right: 5px; width: 99%; - background-color: #f2f2f2; + background-color: #f2f2f2 !important; border: 1px solid #4fa2d0; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.25); border-radius: 10px !important; diff --git a/src/app/app-modules/quality-supervisor/activites/quality-audit-question-config/edit-qa-question-config/edit-qa-config/edit-qa-config.component.html b/src/app/app-modules/quality-supervisor/activites/quality-audit-question-config/edit-qa-question-config/edit-qa-config/edit-qa-config.component.html index 7e93a8a..8f6445f 100644 --- a/src/app/app-modules/quality-supervisor/activites/quality-audit-question-config/edit-qa-question-config/edit-qa-config/edit-qa-config.component.html +++ b/src/app/app-modules/quality-supervisor/activites/quality-audit-question-config/edit-qa-question-config/edit-qa-config/edit-qa-config.component.html @@ -18,6 +18,7 @@

{{ currentLanguageSet?.editQualityAuditQuestionConfig }} id="fieldBackground" [style.width]="'70%'" class="fontStyle" + style="margin-bottom: 20px;" > {{ currentLanguageSet?.questionnaire }} - {{ questionnaireTypeTitle }} {{ currentLanguageSet?.isRequired }} - currentLanguageSet?.pleaseProvideMinimumTenCharacter }} - diff --git a/src/app/app-modules/supervisor/configurations/call-configurations/create-call-configuration/create-call-configuration.component.css b/src/app/app-modules/supervisor/configurations/call-configurations/create-call-configuration/create-call-configuration.component.css index 66ef384..1700600 100644 --- a/src/app/app-modules/supervisor/configurations/call-configurations/create-call-configuration/create-call-configuration.component.css +++ b/src/app/app-modules/supervisor/configurations/call-configurations/create-call-configuration/create-call-configuration.component.css @@ -68,7 +68,7 @@ th.mat-header-cell, td.mat-cell, td.mat-footer-cell{ font-family: "Lato", sans-serif; font-weight: 700; color: #ffffff; - margin-top: 15px; + margin-top: 40px; width: 100%; max-width: 150px; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); diff --git a/src/app/app-modules/supervisor/configurations/section-questionnaire-map/create-section-questionnaire-mapping/create-section-questionnaire-mapping.component.css b/src/app/app-modules/supervisor/configurations/section-questionnaire-map/create-section-questionnaire-mapping/create-section-questionnaire-mapping.component.css index 985aa2c..f5a621f 100644 --- a/src/app/app-modules/supervisor/configurations/section-questionnaire-map/create-section-questionnaire-mapping/create-section-questionnaire-mapping.component.css +++ b/src/app/app-modules/supervisor/configurations/section-questionnaire-map/create-section-questionnaire-mapping/create-section-questionnaire-mapping.component.css @@ -144,3 +144,8 @@ label { } } +.Arrow-select >>> .mat-select-arrow { + + margin-top: -5px !important; +} + diff --git a/src/app/app-modules/supervisor/configurations/section-questionnaire-map/create-section-questionnaire-mapping/create-section-questionnaire-mapping.component.html b/src/app/app-modules/supervisor/configurations/section-questionnaire-map/create-section-questionnaire-mapping/create-section-questionnaire-mapping.component.html index b3a0250..bc5cd63 100644 --- a/src/app/app-modules/supervisor/configurations/section-questionnaire-map/create-section-questionnaire-mapping/create-section-questionnaire-mapping.component.html +++ b/src/app/app-modules/supervisor/configurations/section-questionnaire-map/create-section-questionnaire-mapping/create-section-questionnaire-mapping.component.html @@ -155,6 +155,7 @@

Date: Fri, 2 Aug 2024 02:00:32 +0530 Subject: [PATCH 031/134] CSS Changes --- .../call-closure/call-closure.component.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.html b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.html index b42ef6e..ec82301 100644 --- a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.html +++ b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.html @@ -10,7 +10,7 @@

-
+
{{currentLanguageSet?.noFurtherCallRequired}}
-
- {{currentLanguageSet?.callVerified}} +
+ {{currentLanguageSet?.callVerified}} {{currentLanguageSet?.no}}
-
+
{{currentLanguageSet?.isWrongNumber}} Date: Fri, 2 Aug 2024 16:08:18 +0530 Subject: [PATCH 032/134] CSS Changes --- pom.xml | 10 +++++----- src/environments/environment.prod.ts | 6 +++--- src/environments/environment.test.ts | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 2ad918e..0e68882 100644 --- a/pom.xml +++ b/pom.xml @@ -3,10 +3,10 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.iemr.ecd-ui-next - ecd-ui-next + com.iemr.ecd-ui + ecd-ui 1.0 - ecd-ui-next + ecd-ui war @@ -63,7 +63,7 @@ UTF-8 - ecd-ui-next-v1.0 + ecd-ui-v3.0.0 10.208.122.38 9990 localhost @@ -79,7 +79,7 @@ - ecd-ui-next-v1.0 + ecd-ui-v3.0.0 maven-clean-plugin diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 77007a9..a54a5d9 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -21,9 +21,9 @@ */ -const ecdIP = 'http://183.82.107.186:8080/'; -const commonIP = 'http://183.82.107.186:8080/'; -const adminIP = 'http://183.82.107.186:8080/'; +const ecdIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const commonIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const adminIP = 'http://amritwprdev.piramalswasthya.org:8080/'; const COMMON_API = `${commonIP}commonapi-ecd/`; const ADMIN_API = `${adminIP}adminapi-v1.0/`; const ECD_API = `${ecdIP}ecdapi-v1.0/`; diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index a872660..c4b5a15 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -21,9 +21,9 @@ */ -const ecdIP = 'http://183.82.107.186:8080/'; -const commonIP = 'http://183.82.107.186:8080/'; -const adminIP = 'http://183.82.107.186:8080/'; +const ecdIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const commonIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const adminIP = 'http://amritwprdev.piramalswasthya.org:8080/'; const COMMON_API = `${commonIP}commonapi-ecd/`; const ADMIN_API = `${adminIP}adminapi-v1.0/`; const ECD_API = `${ecdIP}ecdapi-v1.0/`; From a3fe3168e842f3c200fa3be5474d1c1cdd7ac739 Mon Sep 17 00:00:00 2001 From: nkokkiligadda87 Date: Fri, 2 Aug 2024 16:14:53 +0530 Subject: [PATCH 033/134] CSS Changes --- src/environments/environment.prod.ts | 6 +++--- src/environments/environment.test.ts | 6 +++--- src/environments/environment.ts | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index a54a5d9..e991fa5 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -21,9 +21,9 @@ */ -const ecdIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const commonIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const adminIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const ecdIP = 'https://amritwprdev.piramalswasthya.org/'; +const commonIP = 'https://amritwprdev.piramalswasthya.org/'; +const adminIP = 'https://amritwprdev.piramalswasthya.org/'; const COMMON_API = `${commonIP}commonapi-ecd/`; const ADMIN_API = `${adminIP}adminapi-v1.0/`; const ECD_API = `${ecdIP}ecdapi-v1.0/`; diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index c4b5a15..3d0e34b 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -21,9 +21,9 @@ */ -const ecdIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const commonIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const adminIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const ecdIP = 'https://amritwprdev.piramalswasthya.org/'; +const commonIP = 'https://amritwprdev.piramalswasthya.org/'; +const adminIP = 'https://amritwprdev.piramalswasthya.org/'; const COMMON_API = `${commonIP}commonapi-ecd/`; const ADMIN_API = `${adminIP}adminapi-v1.0/`; const ECD_API = `${ecdIP}ecdapi-v1.0/`; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index df847c6..787ab09 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -24,9 +24,9 @@ // This file can be replaced during build by using the `fileReplacements` array. // `ng build` replaces `environment.ts` with `environment.prod.ts`. // The list of file replacements can be found in `angular.json`. -const ecdIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const commonIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const adminIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const ecdIP = 'https://amritwprdev.piramalswasthya.org/'; +const commonIP = 'https://amritwprdev.piramalswasthya.org/'; +const adminIP = 'https://amritwprdev.piramalswasthya.org/'; const COMMON_API = `${commonIP}commonapi-ecd/`; const ADMIN_API = `${adminIP}adminapi-v1.0/`; const ECD_API = `${ecdIP}ecdapi-v1.0/`; From 63efc1f7a0e52e735f266d491655408e879bacb6 Mon Sep 17 00:00:00 2001 From: devikasuresh20 Date: Fri, 9 Aug 2024 16:11:58 +0530 Subject: [PATCH 034/134] AMM347 - Changes for extracting stick agent records in call reallocation and unallocate screen --- .../call-reallocation.component.html | 24 ++++++++++++------- .../call-reallocation.component.ts | 20 ++++++++++++---- src/assets/English.json | 3 ++- src/assets/Hindi.json | 3 ++- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html index 40faf22..483abb6 100644 --- a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html +++ b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html @@ -138,16 +138,22 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

}} +
+ {{currentLanguageSet?.stickyAgentRecords}} +
+
+ mat-raised-button + class="buttonColor full-width buttonWidth" + type="submit" + style="float: right; margin: 20px;" + [disabled]="isSubmitDisabled || !callReallocationForm.valid" + (click)="onSubmit()" + > + {{ currentLanguageSet?.submit }} + +
+
diff --git a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts index 73bd65f..52639f9 100644 --- a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts +++ b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts @@ -68,6 +68,7 @@ export class CallReallocationComponent implements OnInit, DoCheck { agentRoles:any; maxDate = new Date(); + recordData = [ { id: 1, @@ -141,6 +142,7 @@ export class CallReallocationComponent implements OnInit, DoCheck { agentName: new FormControl('', [Validators.required]), recordType: new FormControl('', [Validators.required]), phoneNoType: new FormControl('', [Validators.required]), + isStickyAgent: new FormControl(false) }); callReallocateForm = new FormGroup({ @@ -218,7 +220,11 @@ export class CallReallocationComponent implements OnInit, DoCheck { } setAgentRoleName(roleName:any) { -this.selectedRoleName = roleName; + this.selectedRoleName = roleName; + + if(this.selectedRoleName !== undefined && this.selectedRoleName !== null && this.selectedRoleName.toLowerCase() === 'associate') { + this.callReallocationForm.patchValue({isStickyAgent : false}); + } } onSubmit() { @@ -244,7 +250,8 @@ this.selectedRoleName = roleName; "psmId": sessionStorage.getItem('providerServiceMapID'), "createdBy": sessionStorage.getItem("userName"), "tdate": toDate, - "fdate": fromDate + "fdate": fromDate, + "isStickyAgent" : this.callReallocationForm.controls.isStickyAgent.value }; this.supervisorService.getAllocatedCounts(reqObj).subscribe((res: any) => { @@ -319,7 +326,8 @@ this.selectedRoleName = roleName; "psmId": sessionStorage.getItem('providerServiceMapID'), "createdBy": sessionStorage.getItem("userName"), "tdate": toDate, - "fdate": fromDate + "fdate": fromDate, + "isStickyAgent" : this.callReallocationForm.controls.isStickyAgent.value }; this.supervisorService.updateReallocateCalls(reqObj).subscribe((res: any) => { @@ -372,7 +380,8 @@ this.selectedRoleName = roleName; "createdBy": sessionStorage.getItem("userName"), "isIntroductory": this.selectedRoleName.toLowerCase() === 'associate' ? true : false, "tdate": toDate, - "fdate": fromDate + "fdate": fromDate, + "isStickyAgent" : this.callReallocationForm.controls.isStickyAgent.value }; this.supervisorService.deleteReallocatedCalls(reqObj).subscribe((res: any) => { @@ -401,9 +410,12 @@ this.selectedRoleName = roleName; this.reallocateEnabled = false; this.unallocateEnabled = false; this.enableAgentAllocation = false; + this.selectedRoleName = null; this.callReallocationForm.reset(); this.callReallocateForm.reset(); this.range.reset(); + + this.callReallocationForm.patchValue({isStickyAgent : false}); } enableUnallocateReallocateButton() { if(this.callReallocateForm.controls.numericValue.value !== null && parseInt(this.callReallocateForm.controls.numericValue.value) > 0 && parseInt(this.callReallocateForm.controls.numericValue.value) <= this.currentMaxAllocatedRecords) { diff --git a/src/assets/English.json b/src/assets/English.json index 83f9763..7a6b56d 100644 --- a/src/assets/English.json +++ b/src/assets/English.json @@ -460,5 +460,6 @@ "reasonForNoFurtherCalls":"Reason For No FurtherCalls", "nextAttemptDate":"Next Attempt Date", "childID":"Child ID", - "isFatalQues": "Fatal Questionnaire" + "isFatalQues": "Fatal Questionnaire", + "stickyAgentRecords" : "Sticky Agent Records" } diff --git a/src/assets/Hindi.json b/src/assets/Hindi.json index 384abfa..e1b33ef 100644 --- a/src/assets/Hindi.json +++ b/src/assets/Hindi.json @@ -457,5 +457,6 @@ "reasonForNoFurtherCalls":"Reason For No FurtherCalls", "nextAttemptDate":"Next Attempt Date", "childID":"Child ID", - "isFatalQues": "Fatal Questionnaire" + "isFatalQues": "Fatal Questionnaire", + "stickyAgentRecords" : "Sticky Agent Records" } \ No newline at end of file From 6a055dc06f24887fede31a29489ed622dd0e11b2 Mon Sep 17 00:00:00 2001 From: devikasuresh20 <57424483+devikasuresh20@users.noreply.github.com> Date: Fri, 9 Aug 2024 17:27:47 +0530 Subject: [PATCH 035/134] AMM347 - Changes for extracting stick agent records in call reallocation and unallocate screen (#4) --- .../call-reallocation.component.html | 24 ++++++++++++------- .../call-reallocation.component.ts | 20 ++++++++++++---- src/assets/English.json | 3 ++- src/assets/Hindi.json | 3 ++- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html index 40faf22..483abb6 100644 --- a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html +++ b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html @@ -138,16 +138,22 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

}} +
+ {{currentLanguageSet?.stickyAgentRecords}} +
+
+ mat-raised-button + class="buttonColor full-width buttonWidth" + type="submit" + style="float: right; margin: 20px;" + [disabled]="isSubmitDisabled || !callReallocationForm.valid" + (click)="onSubmit()" + > + {{ currentLanguageSet?.submit }} + +
+
diff --git a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts index 73bd65f..52639f9 100644 --- a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts +++ b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts @@ -68,6 +68,7 @@ export class CallReallocationComponent implements OnInit, DoCheck { agentRoles:any; maxDate = new Date(); + recordData = [ { id: 1, @@ -141,6 +142,7 @@ export class CallReallocationComponent implements OnInit, DoCheck { agentName: new FormControl('', [Validators.required]), recordType: new FormControl('', [Validators.required]), phoneNoType: new FormControl('', [Validators.required]), + isStickyAgent: new FormControl(false) }); callReallocateForm = new FormGroup({ @@ -218,7 +220,11 @@ export class CallReallocationComponent implements OnInit, DoCheck { } setAgentRoleName(roleName:any) { -this.selectedRoleName = roleName; + this.selectedRoleName = roleName; + + if(this.selectedRoleName !== undefined && this.selectedRoleName !== null && this.selectedRoleName.toLowerCase() === 'associate') { + this.callReallocationForm.patchValue({isStickyAgent : false}); + } } onSubmit() { @@ -244,7 +250,8 @@ this.selectedRoleName = roleName; "psmId": sessionStorage.getItem('providerServiceMapID'), "createdBy": sessionStorage.getItem("userName"), "tdate": toDate, - "fdate": fromDate + "fdate": fromDate, + "isStickyAgent" : this.callReallocationForm.controls.isStickyAgent.value }; this.supervisorService.getAllocatedCounts(reqObj).subscribe((res: any) => { @@ -319,7 +326,8 @@ this.selectedRoleName = roleName; "psmId": sessionStorage.getItem('providerServiceMapID'), "createdBy": sessionStorage.getItem("userName"), "tdate": toDate, - "fdate": fromDate + "fdate": fromDate, + "isStickyAgent" : this.callReallocationForm.controls.isStickyAgent.value }; this.supervisorService.updateReallocateCalls(reqObj).subscribe((res: any) => { @@ -372,7 +380,8 @@ this.selectedRoleName = roleName; "createdBy": sessionStorage.getItem("userName"), "isIntroductory": this.selectedRoleName.toLowerCase() === 'associate' ? true : false, "tdate": toDate, - "fdate": fromDate + "fdate": fromDate, + "isStickyAgent" : this.callReallocationForm.controls.isStickyAgent.value }; this.supervisorService.deleteReallocatedCalls(reqObj).subscribe((res: any) => { @@ -401,9 +410,12 @@ this.selectedRoleName = roleName; this.reallocateEnabled = false; this.unallocateEnabled = false; this.enableAgentAllocation = false; + this.selectedRoleName = null; this.callReallocationForm.reset(); this.callReallocateForm.reset(); this.range.reset(); + + this.callReallocationForm.patchValue({isStickyAgent : false}); } enableUnallocateReallocateButton() { if(this.callReallocateForm.controls.numericValue.value !== null && parseInt(this.callReallocateForm.controls.numericValue.value) > 0 && parseInt(this.callReallocateForm.controls.numericValue.value) <= this.currentMaxAllocatedRecords) { diff --git a/src/assets/English.json b/src/assets/English.json index 83f9763..7a6b56d 100644 --- a/src/assets/English.json +++ b/src/assets/English.json @@ -460,5 +460,6 @@ "reasonForNoFurtherCalls":"Reason For No FurtherCalls", "nextAttemptDate":"Next Attempt Date", "childID":"Child ID", - "isFatalQues": "Fatal Questionnaire" + "isFatalQues": "Fatal Questionnaire", + "stickyAgentRecords" : "Sticky Agent Records" } diff --git a/src/assets/Hindi.json b/src/assets/Hindi.json index 384abfa..e1b33ef 100644 --- a/src/assets/Hindi.json +++ b/src/assets/Hindi.json @@ -457,5 +457,6 @@ "reasonForNoFurtherCalls":"Reason For No FurtherCalls", "nextAttemptDate":"Next Attempt Date", "childID":"Child ID", - "isFatalQues": "Fatal Questionnaire" + "isFatalQues": "Fatal Questionnaire", + "stickyAgentRecords" : "Sticky Agent Records" } \ No newline at end of file From 01c1f3e4244de8a503509743b28235b542657dc4 Mon Sep 17 00:00:00 2001 From: Shakyan Kushwaha <32445019+anandamideShakyan@users.noreply.github.com> Date: Fri, 16 Aug 2024 16:24:10 +0530 Subject: [PATCH 036/134] [33] - Updated outputPath in angular.json Updated outputPath in angular.json to fix the Forbidden error during wildfly deployment. --- angular.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/angular.json b/angular.json index c26ae60..00118d8 100644 --- a/angular.json +++ b/angular.json @@ -13,7 +13,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "dist/ecd-ui", + "outputPath": "dist/", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", From d87278ac5f47508f65f95eb84a165017e6a38f55 Mon Sep 17 00:00:00 2001 From: devikasuresh20 Date: Fri, 16 Aug 2024 17:24:41 +0530 Subject: [PATCH 037/134] Changes done for opening casesheet as PDF in a new tab in quality audit screen --- package-lock.json | 408 +++++++++++++++++- package.json | 2 + .../call-audit/call-audit.component.html | 4 +- .../call-audit/call-audit.component.ts | 23 +- .../call-rating/call-rating.component.html | 4 + .../call-rating/call-rating.component.ts | 21 +- .../view-casesheet.component.css | 42 +- .../view-casesheet.component.html | 52 +-- .../view-casesheet.component.ts | 55 ++- src/assets/English.json | 6 +- src/assets/Hindi.json | 6 +- 11 files changed, 549 insertions(+), 74 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6426b85..9ac92d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,8 @@ "date-fns": "^2.29.3", "echarts": "^5.4.1", "file-saver": "^2.0.5", + "html2canvas": "^1.4.1", + "jspdf": "^2.5.1", "moment": "^2.29.4", "ngx-material-timepicker": "^13.1.1", "rxjs": "^7.5.7", @@ -2677,7 +2679,6 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -4757,6 +4758,16 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@schematics/angular": { "version": "16.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.12.tgz", @@ -5114,6 +5125,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/luxon": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", + "peer": true + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -5141,6 +5158,12 @@ "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "optional": true + }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", @@ -6074,6 +6097,17 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -6260,6 +6294,14 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -6456,6 +6498,17 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -6596,6 +6649,25 @@ } ] }, + "node_modules/canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -7067,6 +7139,17 @@ "node": ">=10.13.0" } }, + "node_modules/core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "hasInstallScript": true, + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-js-compat": { "version": "3.36.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", @@ -7262,6 +7345,14 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/css-loader": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", @@ -7627,6 +7718,12 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", + "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", + "optional": true + }, "node_modules/domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", @@ -8714,6 +8811,11 @@ "node": ">=0.8.0" } }, + "node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -9422,6 +9524,18 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", @@ -10548,6 +10662,23 @@ "node >= 0.2.0" ] }, + "node_modules/jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.4.8" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "html2canvas": "^1.0.0-rc.5" + } + }, "node_modules/karma": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", @@ -11639,6 +11770,15 @@ "yallist": "^3.0.2" } }, + "node_modules/luxon": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/magic-string": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", @@ -13571,6 +13711,12 @@ "node": ">=8" } }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "optional": true + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -14241,6 +14387,15 @@ } ] }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -14379,8 +14534,7 @@ "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.2", @@ -14568,6 +14722,15 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -15498,6 +15661,15 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -15664,6 +15836,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -15948,6 +16129,14 @@ "node": "*" } }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -16424,6 +16613,14 @@ "node": ">= 0.4.0" } }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -18220,7 +18417,8 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true + "dev": true, + "requires": {} }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", @@ -19032,7 +19230,6 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, "requires": { "regenerator-runtime": "^0.13.11" } @@ -20318,7 +20515,8 @@ "version": "16.2.14", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.14.tgz", "integrity": "sha512-3+zPP3Wir46qrZ3FEiTz5/emSoVHYUCH+WgBmJ57mZCx1qBOYh2VgllnPr/Yusl1sc/jUZjdwq/es/9ZNw+zDQ==", - "dev": true + "dev": true, + "requires": {} }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -20615,6 +20813,12 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true + }, "@schematics/angular": { "version": "16.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.12.tgz", @@ -20926,6 +21130,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/luxon": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", + "peer": true + }, "@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -20953,6 +21163,12 @@ "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, + "@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "optional": true + }, "@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", @@ -21156,7 +21372,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", - "dev": true + "dev": true, + "requires": {} }, "@webassemblyjs/ast": { "version": "1.12.1", @@ -21462,13 +21679,15 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -21669,6 +21888,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, "autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -21813,6 +22037,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -21910,7 +22139,8 @@ "bootstrap": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==" + "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", + "requires": {} }, "brace-expansion": { "version": "2.0.1", @@ -21948,6 +22178,11 @@ "update-browserslist-db": "^1.0.13" } }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -22041,6 +22276,22 @@ "integrity": "sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==", "dev": true }, + "canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "optional": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -22406,6 +22657,12 @@ } } }, + "core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "optional": true + }, "core-js-compat": { "version": "3.36.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", @@ -22553,6 +22810,14 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, + "css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "requires": { + "utrie": "^1.0.2" + } + }, "css-loader": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", @@ -22820,6 +23085,12 @@ "domelementtype": "^2.3.0" } }, + "dompurify": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", + "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", + "optional": true + }, "domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", @@ -23350,7 +23621,8 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-prettier": { "version": "5.1.3", @@ -23643,6 +23915,11 @@ "websocket-driver": ">=0.5.1" } }, + "fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -24174,6 +24451,15 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, "htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", @@ -24304,7 +24590,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.2.1", @@ -24937,7 +25224,8 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -24998,6 +25286,21 @@ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, + "jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "requires": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "fflate": "^0.4.8", + "html2canvas": "^1.0.0-rc.5" + } + }, "karma": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", @@ -25167,7 +25470,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", - "dev": true + "dev": true, + "requires": {} }, "karma-source-map-support": { "version": "1.4.0", @@ -25769,6 +26073,12 @@ "yallist": "^3.0.2" } }, + "luxon": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "peer": true + }, "magic-string": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", @@ -27238,6 +27548,12 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "optional": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -27355,7 +27671,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.4", @@ -27658,6 +27975,15 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "requires": { + "performance-now": "^2.1.0" + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -27773,8 +28099,7 @@ "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { "version": "0.15.2", @@ -27923,6 +28248,12 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, + "rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "optional": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -28629,6 +28960,12 @@ } } }, + "stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "optional": true + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -28745,6 +29082,12 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true + }, "symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -28877,7 +29220,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -28956,6 +29300,14 @@ } } }, + "text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "requires": { + "utrie": "^1.0.2" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -29043,7 +29395,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true + "dev": true, + "requires": {} }, "tsconfig-paths": { "version": "4.2.0", @@ -29299,6 +29652,14 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, + "utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "requires": { + "base64-arraybuffer": "^1.0.2" + } + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -29487,7 +29848,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -29576,7 +29938,8 @@ "version": "8.17.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -29756,7 +30119,8 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "3.0.0", diff --git a/package.json b/package.json index c5f90c1..2b3b741 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,8 @@ "date-fns": "^2.29.3", "echarts": "^5.4.1", "file-saver": "^2.0.5", + "html2canvas": "^1.4.1", + "jspdf": "^2.5.1", "moment": "^2.29.4", "ngx-material-timepicker": "^13.1.1", "rxjs": "^7.5.7", diff --git a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.html b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.html index 5ddbdc0..c341065 100644 --- a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.html +++ b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.html @@ -133,7 +133,7 @@

- + {{ currentLanguageSet?.validCall }} @@ -202,7 +202,7 @@

{{ currentLanguageSet?.casesheet }} - diff --git a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts index 13cf258..78e3f34 100644 --- a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts +++ b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts @@ -36,6 +36,7 @@ import { ViewCasesheetComponent } from '../../view-casesheet/view-casesheet.comp import * as moment from 'moment'; import { tr } from 'date-fns/locale'; import { MatPaginator } from '@angular/material/paginator'; +import {MatLegacyDialog as MatDialog, MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, MatLegacyDialogRef as MatDialogRef} from '@angular/material/legacy-dialog'; @Component({ selector: 'app-call-audit', @@ -97,6 +98,7 @@ export class CallAuditComponent implements OnInit { private masterService: MasterService, private confirmationService: ConfirmationService, private changeDetectorRefs: ChangeDetectorRef, + public dialog: MatDialog ) { } callAuditForm = this.fb.group({ @@ -468,16 +470,17 @@ export class CallAuditComponent implements OnInit { } viewCasheet(element:any){ - const reqObj={ - benCallId:element.benCallID, - beneficiaryId:element.beneficiaryid, - paginator: this.paginator, - sort: this.sort, - } - this.qualityAuditorService.loadComponent( - ViewCasesheetComponent, - reqObj - ); + + + this.dialog.open(ViewCasesheetComponent,{ + width: "900px", + disableClose: true , + data: { + + benCallId : element.benCallID, + beneficiaryId : element.beneficiaryid + } + }); } invalidTimeFlag = false; validateTime(start_date: any, end_date: any, start_time: any, end_time: any) { diff --git a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.html b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.html index e561753..2e85af7 100644 --- a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.html +++ b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.html @@ -25,6 +25,10 @@

+
+ +
+

diff --git a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.ts b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.ts index 22fd758..8fe4085 100644 --- a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.ts +++ b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.ts @@ -32,6 +32,9 @@ import { QualityAuditorService } from '../../services/quality-auditor/quality-au import { SetLanguageService } from '../../services/set-language/set-language.service'; import { CallAuditComponent } from '../call-audit/call-audit/call-audit.component'; import { MatPaginator } from '@angular/material/paginator'; +import { ViewCasesheetComponent } from '../view-casesheet/view-casesheet.component'; +import {MatLegacyDialog as MatDialog, MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, MatLegacyDialogRef as MatDialogRef} from '@angular/material/legacy-dialog'; + @Component({ selector: 'app-call-rating', @@ -59,6 +62,7 @@ export class CallRatingComponent implements OnInit{ grades: any; finalGrade: any; benCallId: any; + beneficiaryId: any; auditType: any; filteredRatingQuestions: any = []; audioResponse: any = " "; @@ -75,7 +79,8 @@ export class CallRatingComponent implements OnInit{ private setLanguageService: SetLanguageService, private fb: FormBuilder, private qualityAuditorService: QualityAuditorService, - private confirmationService: ConfirmationService + private confirmationService: ConfirmationService, + public dialog: MatDialog ) { } ngOnInit(): void { @@ -84,6 +89,7 @@ export class CallRatingComponent implements OnInit{ if(this.data !== undefined && this.data !== null){ this.routedData = this.data.data; this.benCallId = this.routedData.benCallID; + this.beneficiaryId = this.routedData.beneficiaryid; this.auditType = this.data.type; } this.getSectionQuestions(); @@ -483,4 +489,17 @@ export class CallRatingComponent implements OnInit{ this.qualityAuditorService.loadComponent(CallAuditComponent, {data:data}); this.qualityAuditorService.showForm = this.showCallAuditForm; } + + + viewCasheet(){ + + this.dialog.open(ViewCasesheetComponent,{ + width: "900px", + disableClose: true , + data: { + benCallId : this.benCallId, + beneficiaryId : this.beneficiaryId + } + }); + } } diff --git a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css index d6aec7a..5810a3d 100644 --- a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css +++ b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css @@ -1,6 +1,5 @@ .mainHeadingDiv { margin-top: 15px; - /* margin-left: 30px; */ } .mainHeading { @@ -52,9 +51,7 @@ .table-no-border tr, th, .table-no-border tr td, .table-no-border thead tr th, .table-no-border tbody tr th, .table-no-border tbody tr td { border: none; } -/* .caseSheet-TableStyling{ -margin: 20px; -} */ + th{ font-family: "Lato", sans-serif; font-weight: 600; @@ -66,3 +63,40 @@ td{ font-size: 16px; } .table-bordered th, .table-bordered td { border: 1px solid #4fa2d0 !important } + +::ng-deep .mat-dialog-container{ + overflow: hidden; + padding: 0px !important; +} +::ng-deep .mat-dialog-title{ + background-color:#ffb800; + padding: 24px; +} + +::ng-deep .mat-dialog-content { + margin: 0px; + overflow: hidden; + padding-top: 25px; + padding-bottom: 50px; + +} + + +.inline { + display: inline-block; +} +.fontStyleDialog{ + font-family: "Lato", sans-serif; + font-weight: 600; + font-size: 24px; + position: relative; +} + +.closeButton { + float: right; + background: #E14646; + color: #ffffff; + border: none; + cursor: pointer; +} + diff --git a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.html b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.html index aa8cd35..b224661 100644 --- a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.html +++ b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.html @@ -1,11 +1,16 @@ -
-
-

- {{ currentLanguageSet?.casesheet }} - -

-
-
+

{{ currentLanguageSet?.casesheet }} + + +

+ + +
+ +
+
+
@@ -108,7 +113,7 @@

{{ currentLanguageSet?.questionnaireDetails }}

- +
@@ -122,7 +127,7 @@

Question
-
+
No Data Found
@@ -134,26 +139,24 @@

{{ currentLanguageSet?.isFurtherCallRequired }} - {{ currentLanguageSet?.yes }} - {{ currentLanguageSet?.no }} + {{ beneficiaryCaseSheetData?.isFurtherCallRequired === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isFurtherCallRequired === false ? currentLanguageSet?.no : '')}} {{ currentLanguageSet?.reasonForNoFurtherCalls }} {{beneficiaryCaseSheetData?.reasonForNoFurtherCalls}} {{ currentLanguageSet?.isCallAnswered }} - {{ currentLanguageSet?.yes }} - {{ currentLanguageSet?.no }} + {{ beneficiaryCaseSheetData?.isCallAnswered === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isCallAnswered === false ? currentLanguageSet?.no : '') }} {{ currentLanguageSet?.reasonForCallNotAnswered }} {{beneficiaryCaseSheetData?.reasonForCallNotAnswered}} + {{ currentLanguageSet?.isCallVerified }} - {{ currentLanguageSet?.yes }} - {{ currentLanguageSet?.no }} + {{beneficiaryCaseSheetData?.isCallVerified === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isCallVerified === false ? currentLanguageSet?.no : '') }} {{ currentLanguageSet?.isCallDisconnected }} - {{ currentLanguageSet?.yes }} - {{ currentLanguageSet?.no }} + {{beneficiaryCaseSheetData?.isCallDisconnected === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isCallDisconnected === false ? currentLanguageSet?.no : '') }} + {{ currentLanguageSet?.typeOfComplaint }} {{beneficiaryCaseSheetData?.typeOfComplaint}} @@ -169,13 +172,10 @@

{{ currentLanguageSet?.sendAdvice }} {{beneficiaryCaseSheetData?.sendAdvice}} - {{ currentLanguageSet?.isWrongNumber }} - {{beneficiaryCaseSheetData?.isWrongNumber}} + {{ currentLanguageSet?.isCallWrongNumber }} + {{beneficiaryCaseSheetData?.isWrongNumber === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isWrongNumber === false ? currentLanguageSet?.no : '') }} - + @@ -183,4 +183,6 @@

- \ No newline at end of file + +

+ \ No newline at end of file diff --git a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.ts b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.ts index e98d078..2c8d9d3 100644 --- a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.ts +++ b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.ts @@ -1,8 +1,19 @@ -import { Component, DoCheck, Input, OnInit } from '@angular/core'; +import { Component, DoCheck, Input, OnInit, ElementRef, ViewChild } from '@angular/core'; import { SetLanguageService } from 'src/app/app-modules/services/set-language/set-language.service'; import { QualityAuditorService } from '../../services/quality-auditor/quality-auditor.service'; import { ConfirmationService } from '../../services/confirmation/confirmation.service'; import { CallAuditComponent } from '../call-audit/call-audit/call-audit.component'; +import jsPDF from 'jspdf'; +import html2canvas from 'html2canvas'; +import { Inject } from '@angular/core'; +import { + MatLegacyDialog as MatDialog, + MatLegacyDialogRef as MatDialogRef, + MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, +} from '@angular/material/legacy-dialog'; + +import { SpinnerService } from '../../services/spinnerService/spinner.service'; + @Component({ selector: 'app-view-casesheet', @@ -10,15 +21,20 @@ import { CallAuditComponent } from '../call-audit/call-audit/call-audit.componen styleUrls: ['./view-casesheet.component.css'] }) export class ViewCasesheetComponent implements OnInit, DoCheck { - @Input() data:any currentLanguageSet: any; beneficiaryCaseSheetData:any; questionnaireCaseSheetData:any; beneficiaryID:any; + + @ViewChild('content', { static: false }) content!: ElementRef; + constructor( + @Inject(MAT_DIALOG_DATA) public data: any, + public dialogRef: MatDialogRef, private setLanguageService: SetLanguageService, private qualityAuditorService: QualityAuditorService, private confirmationService: ConfirmationService, + private spinnerService: SpinnerService ) { } getCaseSheetData(benCallID:any){ @@ -60,12 +76,35 @@ export class ViewCasesheetComponent implements OnInit, DoCheck { ) this.currentLanguageSet = this.setLanguageService.languageData; } - backToQualityAudit(){ - const data:any = {}; - data.paginator = this.data.paginator; - data.sort = this.data.sort; - this.qualityAuditorService.loadComponent(CallAuditComponent, {data:data}); - this.qualityAuditorService.showForm = false; + + + generatePDF() { + this.spinnerService.setLoading(true); + const data = this.content.nativeElement; + html2canvas(data, { scale: 1.5 }).then(canvas => { + const imgWidth = 212; + const pageHeight = 297; + const imgHeight = canvas.height * imgWidth / canvas.width; + let heightLeft = imgHeight; + const pdf = new jsPDF('p', 'mm', 'a4'); + let position = 0; + pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, position, imgWidth, imgHeight); + heightLeft -= pageHeight; + while (heightLeft >= 0) { + position = heightLeft - imgHeight; + pdf.addPage(); + pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, position, imgWidth, imgHeight); + heightLeft -= pageHeight; + } + const pdfOutput = pdf.output('blob'); + const blobUrl = URL.createObjectURL(pdfOutput); + this.spinnerService.setLoading(false); + const newWindow = window.open(blobUrl); + if (newWindow) { + newWindow.focus(); + } + }); } + } diff --git a/src/assets/English.json b/src/assets/English.json index 7a6b56d..e7a191b 100644 --- a/src/assets/English.json +++ b/src/assets/English.json @@ -461,5 +461,9 @@ "nextAttemptDate":"Next Attempt Date", "childID":"Child ID", "isFatalQues": "Fatal Questionnaire", - "stickyAgentRecords" : "Sticky Agent Records" + "stickyAgentRecords" : "Sticky Agent Records", + "close" : "close", + "openAsPdf" : "Open As PDF", + "viewCasesheet" : "View Case Sheet", + "isCallWrongNumber": "Is Wrong Number" } diff --git a/src/assets/Hindi.json b/src/assets/Hindi.json index e1b33ef..6f2afb9 100644 --- a/src/assets/Hindi.json +++ b/src/assets/Hindi.json @@ -458,5 +458,9 @@ "nextAttemptDate":"Next Attempt Date", "childID":"Child ID", "isFatalQues": "Fatal Questionnaire", - "stickyAgentRecords" : "Sticky Agent Records" + "stickyAgentRecords" : "Sticky Agent Records", + "close" : "close", + "openAsPdf" : "Open As PDF", + "viewCasesheet" : "View Case Sheet", + "isCallWrongNumber": "Is Wrong Number" } \ No newline at end of file From d678352efbc5124777b4afe72e26cea0bcef1c1f Mon Sep 17 00:00:00 2001 From: devikasuresh20 <57424483+devikasuresh20@users.noreply.github.com> Date: Fri, 16 Aug 2024 20:53:29 +0530 Subject: [PATCH 038/134] AMM-631 Changes for opening cases sheet as PDF in a new tab in quality audit screen (#6) * AMM347 - Changes for extracting stick agent records in call reallocation and unallocate screen * Changes done for opening casesheet as PDF in a new tab in quality audit screen --- package-lock.json | 408 +++++++++++++++++- package.json | 2 + .../call-audit/call-audit.component.html | 4 +- .../call-audit/call-audit.component.ts | 23 +- .../call-rating/call-rating.component.html | 4 + .../call-rating/call-rating.component.ts | 21 +- .../view-casesheet.component.css | 42 +- .../view-casesheet.component.html | 52 +-- .../view-casesheet.component.ts | 55 ++- src/assets/English.json | 6 +- src/assets/Hindi.json | 6 +- 11 files changed, 549 insertions(+), 74 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6426b85..9ac92d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,8 @@ "date-fns": "^2.29.3", "echarts": "^5.4.1", "file-saver": "^2.0.5", + "html2canvas": "^1.4.1", + "jspdf": "^2.5.1", "moment": "^2.29.4", "ngx-material-timepicker": "^13.1.1", "rxjs": "^7.5.7", @@ -2677,7 +2679,6 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -4757,6 +4758,16 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@schematics/angular": { "version": "16.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.12.tgz", @@ -5114,6 +5125,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/luxon": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", + "peer": true + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -5141,6 +5158,12 @@ "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "optional": true + }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", @@ -6074,6 +6097,17 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -6260,6 +6294,14 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -6456,6 +6498,17 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -6596,6 +6649,25 @@ } ] }, + "node_modules/canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -7067,6 +7139,17 @@ "node": ">=10.13.0" } }, + "node_modules/core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "hasInstallScript": true, + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-js-compat": { "version": "3.36.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", @@ -7262,6 +7345,14 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/css-loader": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", @@ -7627,6 +7718,12 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", + "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", + "optional": true + }, "node_modules/domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", @@ -8714,6 +8811,11 @@ "node": ">=0.8.0" } }, + "node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -9422,6 +9524,18 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", @@ -10548,6 +10662,23 @@ "node >= 0.2.0" ] }, + "node_modules/jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.4.8" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "html2canvas": "^1.0.0-rc.5" + } + }, "node_modules/karma": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", @@ -11639,6 +11770,15 @@ "yallist": "^3.0.2" } }, + "node_modules/luxon": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/magic-string": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", @@ -13571,6 +13711,12 @@ "node": ">=8" } }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "optional": true + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -14241,6 +14387,15 @@ } ] }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -14379,8 +14534,7 @@ "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.2", @@ -14568,6 +14722,15 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -15498,6 +15661,15 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, "node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -15664,6 +15836,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -15948,6 +16129,14 @@ "node": "*" } }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "dependencies": { + "utrie": "^1.0.2" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -16424,6 +16613,14 @@ "node": ">= 0.4.0" } }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -18220,7 +18417,8 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true + "dev": true, + "requires": {} }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", @@ -19032,7 +19230,6 @@ "version": "7.22.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", - "dev": true, "requires": { "regenerator-runtime": "^0.13.11" } @@ -20318,7 +20515,8 @@ "version": "16.2.14", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.14.tgz", "integrity": "sha512-3+zPP3Wir46qrZ3FEiTz5/emSoVHYUCH+WgBmJ57mZCx1qBOYh2VgllnPr/Yusl1sc/jUZjdwq/es/9ZNw+zDQ==", - "dev": true + "dev": true, + "requires": {} }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -20615,6 +20813,12 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true + }, "@schematics/angular": { "version": "16.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.12.tgz", @@ -20926,6 +21130,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/luxon": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.4.2.tgz", + "integrity": "sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==", + "peer": true + }, "@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -20953,6 +21163,12 @@ "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", "dev": true }, + "@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "optional": true + }, "@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", @@ -21156,7 +21372,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", - "dev": true + "dev": true, + "requires": {} }, "@webassemblyjs/ast": { "version": "1.12.1", @@ -21462,13 +21679,15 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -21669,6 +21888,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, "autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -21813,6 +22037,11 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -21910,7 +22139,8 @@ "bootstrap": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==" + "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", + "requires": {} }, "brace-expansion": { "version": "2.0.1", @@ -21948,6 +22178,11 @@ "update-browserslist-db": "^1.0.13" } }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, "buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -22041,6 +22276,22 @@ "integrity": "sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==", "dev": true }, + "canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "optional": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -22406,6 +22657,12 @@ } } }, + "core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "optional": true + }, "core-js-compat": { "version": "3.36.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", @@ -22553,6 +22810,14 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" }, + "css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "requires": { + "utrie": "^1.0.2" + } + }, "css-loader": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", @@ -22820,6 +23085,12 @@ "domelementtype": "^2.3.0" } }, + "dompurify": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.6.tgz", + "integrity": "sha512-zUTaUBO8pY4+iJMPE1B9XlO2tXVYIcEA4SNGtvDELzTSCQO7RzH+j7S180BmhmJId78lqGU2z19vgVx2Sxs/PQ==", + "optional": true + }, "domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", @@ -23350,7 +23621,8 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-prettier": { "version": "5.1.3", @@ -23643,6 +23915,11 @@ "websocket-driver": ">=0.5.1" } }, + "fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -24174,6 +24451,15 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, "htmlparser2": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", @@ -24304,7 +24590,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.2.1", @@ -24937,7 +25224,8 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -24998,6 +25286,21 @@ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, + "jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "requires": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "fflate": "^0.4.8", + "html2canvas": "^1.0.0-rc.5" + } + }, "karma": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", @@ -25167,7 +25470,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", - "dev": true + "dev": true, + "requires": {} }, "karma-source-map-support": { "version": "1.4.0", @@ -25769,6 +26073,12 @@ "yallist": "^3.0.2" } }, + "luxon": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz", + "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==", + "peer": true + }, "magic-string": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", @@ -27238,6 +27548,12 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "optional": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -27355,7 +27671,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.4", @@ -27658,6 +27975,15 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "requires": { + "performance-now": "^2.1.0" + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -27773,8 +28099,7 @@ "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { "version": "0.15.2", @@ -27923,6 +28248,12 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, + "rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "optional": true + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -28629,6 +28960,12 @@ } } }, + "stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "optional": true + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -28745,6 +29082,12 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true + }, "symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -28877,7 +29220,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -28956,6 +29300,14 @@ } } }, + "text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "requires": { + "utrie": "^1.0.2" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -29043,7 +29395,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true + "dev": true, + "requires": {} }, "tsconfig-paths": { "version": "4.2.0", @@ -29299,6 +29652,14 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, + "utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "requires": { + "base64-arraybuffer": "^1.0.2" + } + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -29487,7 +29848,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -29576,7 +29938,8 @@ "version": "8.17.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -29756,7 +30119,8 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "3.0.0", diff --git a/package.json b/package.json index c5f90c1..2b3b741 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,8 @@ "date-fns": "^2.29.3", "echarts": "^5.4.1", "file-saver": "^2.0.5", + "html2canvas": "^1.4.1", + "jspdf": "^2.5.1", "moment": "^2.29.4", "ngx-material-timepicker": "^13.1.1", "rxjs": "^7.5.7", diff --git a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.html b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.html index 5ddbdc0..c341065 100644 --- a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.html +++ b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.html @@ -133,7 +133,7 @@

- + {{ currentLanguageSet?.validCall }} @@ -202,7 +202,7 @@

{{ currentLanguageSet?.casesheet }} - diff --git a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts index 13cf258..78e3f34 100644 --- a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts +++ b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts @@ -36,6 +36,7 @@ import { ViewCasesheetComponent } from '../../view-casesheet/view-casesheet.comp import * as moment from 'moment'; import { tr } from 'date-fns/locale'; import { MatPaginator } from '@angular/material/paginator'; +import {MatLegacyDialog as MatDialog, MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, MatLegacyDialogRef as MatDialogRef} from '@angular/material/legacy-dialog'; @Component({ selector: 'app-call-audit', @@ -97,6 +98,7 @@ export class CallAuditComponent implements OnInit { private masterService: MasterService, private confirmationService: ConfirmationService, private changeDetectorRefs: ChangeDetectorRef, + public dialog: MatDialog ) { } callAuditForm = this.fb.group({ @@ -468,16 +470,17 @@ export class CallAuditComponent implements OnInit { } viewCasheet(element:any){ - const reqObj={ - benCallId:element.benCallID, - beneficiaryId:element.beneficiaryid, - paginator: this.paginator, - sort: this.sort, - } - this.qualityAuditorService.loadComponent( - ViewCasesheetComponent, - reqObj - ); + + + this.dialog.open(ViewCasesheetComponent,{ + width: "900px", + disableClose: true , + data: { + + benCallId : element.benCallID, + beneficiaryId : element.beneficiaryid + } + }); } invalidTimeFlag = false; validateTime(start_date: any, end_date: any, start_time: any, end_time: any) { diff --git a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.html b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.html index e561753..2e85af7 100644 --- a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.html +++ b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.html @@ -25,6 +25,10 @@

+
+ +
+

diff --git a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.ts b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.ts index 22fd758..8fe4085 100644 --- a/src/app/app-modules/quality-auditor/call-rating/call-rating.component.ts +++ b/src/app/app-modules/quality-auditor/call-rating/call-rating.component.ts @@ -32,6 +32,9 @@ import { QualityAuditorService } from '../../services/quality-auditor/quality-au import { SetLanguageService } from '../../services/set-language/set-language.service'; import { CallAuditComponent } from '../call-audit/call-audit/call-audit.component'; import { MatPaginator } from '@angular/material/paginator'; +import { ViewCasesheetComponent } from '../view-casesheet/view-casesheet.component'; +import {MatLegacyDialog as MatDialog, MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, MatLegacyDialogRef as MatDialogRef} from '@angular/material/legacy-dialog'; + @Component({ selector: 'app-call-rating', @@ -59,6 +62,7 @@ export class CallRatingComponent implements OnInit{ grades: any; finalGrade: any; benCallId: any; + beneficiaryId: any; auditType: any; filteredRatingQuestions: any = []; audioResponse: any = " "; @@ -75,7 +79,8 @@ export class CallRatingComponent implements OnInit{ private setLanguageService: SetLanguageService, private fb: FormBuilder, private qualityAuditorService: QualityAuditorService, - private confirmationService: ConfirmationService + private confirmationService: ConfirmationService, + public dialog: MatDialog ) { } ngOnInit(): void { @@ -84,6 +89,7 @@ export class CallRatingComponent implements OnInit{ if(this.data !== undefined && this.data !== null){ this.routedData = this.data.data; this.benCallId = this.routedData.benCallID; + this.beneficiaryId = this.routedData.beneficiaryid; this.auditType = this.data.type; } this.getSectionQuestions(); @@ -483,4 +489,17 @@ export class CallRatingComponent implements OnInit{ this.qualityAuditorService.loadComponent(CallAuditComponent, {data:data}); this.qualityAuditorService.showForm = this.showCallAuditForm; } + + + viewCasheet(){ + + this.dialog.open(ViewCasesheetComponent,{ + width: "900px", + disableClose: true , + data: { + benCallId : this.benCallId, + beneficiaryId : this.beneficiaryId + } + }); + } } diff --git a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css index d6aec7a..5810a3d 100644 --- a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css +++ b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.css @@ -1,6 +1,5 @@ .mainHeadingDiv { margin-top: 15px; - /* margin-left: 30px; */ } .mainHeading { @@ -52,9 +51,7 @@ .table-no-border tr, th, .table-no-border tr td, .table-no-border thead tr th, .table-no-border tbody tr th, .table-no-border tbody tr td { border: none; } -/* .caseSheet-TableStyling{ -margin: 20px; -} */ + th{ font-family: "Lato", sans-serif; font-weight: 600; @@ -66,3 +63,40 @@ td{ font-size: 16px; } .table-bordered th, .table-bordered td { border: 1px solid #4fa2d0 !important } + +::ng-deep .mat-dialog-container{ + overflow: hidden; + padding: 0px !important; +} +::ng-deep .mat-dialog-title{ + background-color:#ffb800; + padding: 24px; +} + +::ng-deep .mat-dialog-content { + margin: 0px; + overflow: hidden; + padding-top: 25px; + padding-bottom: 50px; + +} + + +.inline { + display: inline-block; +} +.fontStyleDialog{ + font-family: "Lato", sans-serif; + font-weight: 600; + font-size: 24px; + position: relative; +} + +.closeButton { + float: right; + background: #E14646; + color: #ffffff; + border: none; + cursor: pointer; +} + diff --git a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.html b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.html index aa8cd35..b224661 100644 --- a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.html +++ b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.html @@ -1,11 +1,16 @@ -
-
-

- {{ currentLanguageSet?.casesheet }} - -

-
-
+

{{ currentLanguageSet?.casesheet }} + + +

+ + +
+ +
+
+
@@ -108,7 +113,7 @@

{{ currentLanguageSet?.questionnaireDetails }}

- +
@@ -122,7 +127,7 @@

Question
-
+
No Data Found
@@ -134,26 +139,24 @@

{{ currentLanguageSet?.isFurtherCallRequired }} - {{ currentLanguageSet?.yes }} - {{ currentLanguageSet?.no }} + {{ beneficiaryCaseSheetData?.isFurtherCallRequired === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isFurtherCallRequired === false ? currentLanguageSet?.no : '')}} {{ currentLanguageSet?.reasonForNoFurtherCalls }} {{beneficiaryCaseSheetData?.reasonForNoFurtherCalls}} {{ currentLanguageSet?.isCallAnswered }} - {{ currentLanguageSet?.yes }} - {{ currentLanguageSet?.no }} + {{ beneficiaryCaseSheetData?.isCallAnswered === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isCallAnswered === false ? currentLanguageSet?.no : '') }} {{ currentLanguageSet?.reasonForCallNotAnswered }} {{beneficiaryCaseSheetData?.reasonForCallNotAnswered}} + {{ currentLanguageSet?.isCallVerified }} - {{ currentLanguageSet?.yes }} - {{ currentLanguageSet?.no }} + {{beneficiaryCaseSheetData?.isCallVerified === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isCallVerified === false ? currentLanguageSet?.no : '') }} {{ currentLanguageSet?.isCallDisconnected }} - {{ currentLanguageSet?.yes }} - {{ currentLanguageSet?.no }} + {{beneficiaryCaseSheetData?.isCallDisconnected === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isCallDisconnected === false ? currentLanguageSet?.no : '') }} + {{ currentLanguageSet?.typeOfComplaint }} {{beneficiaryCaseSheetData?.typeOfComplaint}} @@ -169,13 +172,10 @@

{{ currentLanguageSet?.sendAdvice }} {{beneficiaryCaseSheetData?.sendAdvice}} - {{ currentLanguageSet?.isWrongNumber }} - {{beneficiaryCaseSheetData?.isWrongNumber}} + {{ currentLanguageSet?.isCallWrongNumber }} + {{beneficiaryCaseSheetData?.isWrongNumber === true ? currentLanguageSet?.yes : (beneficiaryCaseSheetData?.isWrongNumber === false ? currentLanguageSet?.no : '') }} - + @@ -183,4 +183,6 @@

- \ No newline at end of file + +

+ \ No newline at end of file diff --git a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.ts b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.ts index e98d078..2c8d9d3 100644 --- a/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.ts +++ b/src/app/app-modules/quality-auditor/view-casesheet/view-casesheet.component.ts @@ -1,8 +1,19 @@ -import { Component, DoCheck, Input, OnInit } from '@angular/core'; +import { Component, DoCheck, Input, OnInit, ElementRef, ViewChild } from '@angular/core'; import { SetLanguageService } from 'src/app/app-modules/services/set-language/set-language.service'; import { QualityAuditorService } from '../../services/quality-auditor/quality-auditor.service'; import { ConfirmationService } from '../../services/confirmation/confirmation.service'; import { CallAuditComponent } from '../call-audit/call-audit/call-audit.component'; +import jsPDF from 'jspdf'; +import html2canvas from 'html2canvas'; +import { Inject } from '@angular/core'; +import { + MatLegacyDialog as MatDialog, + MatLegacyDialogRef as MatDialogRef, + MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, +} from '@angular/material/legacy-dialog'; + +import { SpinnerService } from '../../services/spinnerService/spinner.service'; + @Component({ selector: 'app-view-casesheet', @@ -10,15 +21,20 @@ import { CallAuditComponent } from '../call-audit/call-audit/call-audit.componen styleUrls: ['./view-casesheet.component.css'] }) export class ViewCasesheetComponent implements OnInit, DoCheck { - @Input() data:any currentLanguageSet: any; beneficiaryCaseSheetData:any; questionnaireCaseSheetData:any; beneficiaryID:any; + + @ViewChild('content', { static: false }) content!: ElementRef; + constructor( + @Inject(MAT_DIALOG_DATA) public data: any, + public dialogRef: MatDialogRef, private setLanguageService: SetLanguageService, private qualityAuditorService: QualityAuditorService, private confirmationService: ConfirmationService, + private spinnerService: SpinnerService ) { } getCaseSheetData(benCallID:any){ @@ -60,12 +76,35 @@ export class ViewCasesheetComponent implements OnInit, DoCheck { ) this.currentLanguageSet = this.setLanguageService.languageData; } - backToQualityAudit(){ - const data:any = {}; - data.paginator = this.data.paginator; - data.sort = this.data.sort; - this.qualityAuditorService.loadComponent(CallAuditComponent, {data:data}); - this.qualityAuditorService.showForm = false; + + + generatePDF() { + this.spinnerService.setLoading(true); + const data = this.content.nativeElement; + html2canvas(data, { scale: 1.5 }).then(canvas => { + const imgWidth = 212; + const pageHeight = 297; + const imgHeight = canvas.height * imgWidth / canvas.width; + let heightLeft = imgHeight; + const pdf = new jsPDF('p', 'mm', 'a4'); + let position = 0; + pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, position, imgWidth, imgHeight); + heightLeft -= pageHeight; + while (heightLeft >= 0) { + position = heightLeft - imgHeight; + pdf.addPage(); + pdf.addImage(canvas.toDataURL('image/png'), 'PNG', 0, position, imgWidth, imgHeight); + heightLeft -= pageHeight; + } + const pdfOutput = pdf.output('blob'); + const blobUrl = URL.createObjectURL(pdfOutput); + this.spinnerService.setLoading(false); + const newWindow = window.open(blobUrl); + if (newWindow) { + newWindow.focus(); + } + }); } + } diff --git a/src/assets/English.json b/src/assets/English.json index 7a6b56d..e7a191b 100644 --- a/src/assets/English.json +++ b/src/assets/English.json @@ -461,5 +461,9 @@ "nextAttemptDate":"Next Attempt Date", "childID":"Child ID", "isFatalQues": "Fatal Questionnaire", - "stickyAgentRecords" : "Sticky Agent Records" + "stickyAgentRecords" : "Sticky Agent Records", + "close" : "close", + "openAsPdf" : "Open As PDF", + "viewCasesheet" : "View Case Sheet", + "isCallWrongNumber": "Is Wrong Number" } diff --git a/src/assets/Hindi.json b/src/assets/Hindi.json index e1b33ef..6f2afb9 100644 --- a/src/assets/Hindi.json +++ b/src/assets/Hindi.json @@ -458,5 +458,9 @@ "nextAttemptDate":"Next Attempt Date", "childID":"Child ID", "isFatalQues": "Fatal Questionnaire", - "stickyAgentRecords" : "Sticky Agent Records" + "stickyAgentRecords" : "Sticky Agent Records", + "close" : "close", + "openAsPdf" : "Open As PDF", + "viewCasesheet" : "View Case Sheet", + "isCallWrongNumber": "Is Wrong Number" } \ No newline at end of file From 04b6fdc912d85092ee6e7b995306275d49832b19 Mon Sep 17 00:00:00 2001 From: nkokkiligadda87 Date: Thu, 29 Aug 2024 15:08:56 +0530 Subject: [PATCH 039/134] readme file and add nvmrc file changes --- .nvmrc | 2 +- README.md | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.nvmrc b/.nvmrc index 6f7f377..3f430af 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16 +v18 diff --git a/README.md b/README.md index 9447d3a..0088ad1 100644 --- a/README.md +++ b/README.md @@ -31,11 +31,10 @@ The Early Childhood Development (ECD) Initiative by the Ministry of Health and F This microservice is built using Java and the Spring Boot framework, with MySQL as the underlying database. Before building the ECD module, ensure you have the following prerequisites: -- JDK 1.8 -- Maven -- NPM / YARN -- Spring Boot V2 -- MySQL +* JDK 17 +* Maven +* Nodejs v18.10.0 +* MySQL ### Installation From e43cf31126ba2a1b99fcf8edd3aac76a5a30cc4f Mon Sep 17 00:00:00 2001 From: devikasuresh20 Date: Wed, 18 Sep 2024 16:43:17 +0530 Subject: [PATCH 040/134] URL changes using jboss context-root --- .github/workflows/package-prod.yml | 2 +- .github/workflows/package.yml | 4 ++-- WEB-INF/jboss-web.xml | 3 +++ angular.json | 7 ++++++- pom.xml | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 WEB-INF/jboss-web.xml diff --git a/.github/workflows/package-prod.yml b/.github/workflows/package-prod.yml index 4ff7e10..39c9471 100644 --- a/.github/workflows/package-prod.yml +++ b/.github/workflows/package-prod.yml @@ -45,4 +45,4 @@ jobs: uses: actions/upload-artifact@v2 with: name: ECD-UI - path: dist/ecd-ui-next/ecd-ui-next.war + path: dist/ecd-ui/ecd-ui.war diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 95a98a9..25d7d2a 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -40,10 +40,10 @@ jobs: npm run build - name: Create WAR file - run: jar -cvf ecd-ui-next.war -C dist . + run: jar -cvf ecd-ui.war -C dist . - name: Upload WAR file as artifact uses: actions/upload-artifact@v2 with: name: ECD-UI - path: ecd-ui-next.war + path: ecd-ui.war diff --git a/WEB-INF/jboss-web.xml b/WEB-INF/jboss-web.xml new file mode 100644 index 0000000..a283e65 --- /dev/null +++ b/WEB-INF/jboss-web.xml @@ -0,0 +1,3 @@ + +/ecd + \ No newline at end of file diff --git a/angular.json b/angular.json index 00118d8..23853f8 100644 --- a/angular.json +++ b/angular.json @@ -20,7 +20,12 @@ "tsConfig": "tsconfig.app.json", "assets": [ "src/favicon.ico", - "src/assets" + "src/assets", + { + "glob": "**/*", + "input": "WEB-INF", + "output": "/WEB-INF" + } ], "styles": [ "@angular/material/prebuilt-themes/indigo-pink.css", diff --git a/pom.xml b/pom.xml index c4a231a..0e68882 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iemr.ecd-ui ecd-ui 1.0 - ecd-ui-next + ecd-ui war From 03e73b08cf124a6c95718b5eef77a70eae61b01a Mon Sep 17 00:00:00 2001 From: devikasuresh20 Date: Thu, 19 Sep 2024 11:26:49 +0530 Subject: [PATCH 041/134] Minor changes in jboss-web.xml and angular.json --- WEB-INF/jboss-web.xml | 2 +- angular.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/WEB-INF/jboss-web.xml b/WEB-INF/jboss-web.xml index a283e65..3a9c00d 100644 --- a/WEB-INF/jboss-web.xml +++ b/WEB-INF/jboss-web.xml @@ -1,3 +1,3 @@ -/ecd + /ecd \ No newline at end of file diff --git a/angular.json b/angular.json index 23853f8..0f8ba75 100644 --- a/angular.json +++ b/angular.json @@ -24,7 +24,7 @@ { "glob": "**/*", "input": "WEB-INF", - "output": "/WEB-INF" + "output": "WEB-INF" } ], "styles": [ From afba58b95449fc8e5cd319f85b46ff4ef11f02d8 Mon Sep 17 00:00:00 2001 From: devikasuresh20 Date: Fri, 8 Nov 2024 14:17:08 +0530 Subject: [PATCH 042/134] ECD language allocation changes --- .../agents-innerpage.component.ts | 3 +- .../call-closure/call-closure.component.html | 123 ++++++++----- .../call-closure/call-closure.component.ts | 169 +++++++++++++++++- .../services/masterService/master.service.ts | 4 + .../services/supervisor/supervisor.service.ts | 4 + .../call-allocation.component.css | 4 + .../call-allocation.component.html | 15 +- .../call-allocation.component.ts | 79 ++++++-- .../call-reallocation.component.html | 21 ++- .../call-reallocation.component.ts | 87 +++++++-- src/assets/English.json | 4 +- src/assets/Hindi.json | 4 +- src/environments/environment.ci.ts.template | 2 + src/environments/environment.prod.ts | 8 +- src/environments/environment.test.ts | 8 +- src/environments/environment.ts | 8 +- 16 files changed, 443 insertions(+), 100 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/agents-innerpage/agents-innerpage.component.ts b/src/app/app-modules/associate-anm-mo/agents-innerpage/agents-innerpage.component.ts index 30ff3df..3a59a40 100644 --- a/src/app/app-modules/associate-anm-mo/agents-innerpage/agents-innerpage.component.ts +++ b/src/app/app-modules/associate-anm-mo/agents-innerpage/agents-innerpage.component.ts @@ -514,7 +514,8 @@ export class AgentsInnerpageComponent implements OnInit, DoCheck, OnDestroy { createdBy: sessionStorage.getItem("userName"), modifiedBy: sessionStorage.getItem("userName"), complaintId: null, - isWrongNumber: false + isWrongNumber: false, + preferredLanguage: null }; const commonReqobj = { benCallID: this.associateAnmMoService.callDetailId, diff --git a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.html b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.html index ec82301..762bb12 100644 --- a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.html +++ b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.html @@ -10,40 +10,12 @@

-
- {{currentLanguageSet?.noFurtherCallRequired}} - - {{currentLanguageSet?.yes}} - {{currentLanguageSet?.no}} - -
-
- - {{currentLanguageSet?.reasonForNoCall}} - - - {{ option.name }} - - - {{ - currentLanguageSet.fieldIsRequired }} - -
-
-
-
+
{{currentLanguageSet?.callAnswered}} + aria-label="isCallAnswered" + (change)="selectNoCallAnswered(callClosureForm.controls['isCallAnswered'].value)"> {{currentLanguageSet?.yes}} {{currentLanguageSet?.no}} @@ -64,45 +36,101 @@

-
- {{currentLanguageSet?.iVRFeedbackRequired}} -
+
-
+
{{currentLanguageSet?.callVerified}} - {{currentLanguageSet?.yes}} {{currentLanguageSet?.no}}
-
+
{{currentLanguageSet?.callDisconnected}} - {{currentLanguageSet?.yes}} {{currentLanguageSet?.no}}
-
+
{{currentLanguageSet?.isWrongNumber}} - + + {{currentLanguageSet?.yes}} + {{currentLanguageSet?.no}} + +
+
+ + {{currentLanguageSet?.enterCorrectPhoneNumber}} + + +
+ +
+ +
+
+ {{currentLanguageSet?.noFurtherCallRequired}} + {{currentLanguageSet?.yes}} {{currentLanguageSet?.no}}
-
- {{currentLanguageSet?.stickyAgent}} +
+ + {{currentLanguageSet?.reasonForNoCall}} + + + {{ option.name }} + + + {{ + currentLanguageSet.fieldIsRequired }} +
+ + +
+ + + {{currentLanguageSet?.preferredLanguage}} + + + {{ language.languageName }} + + + {{ + currentLanguageSet.fieldIsRequired }} + + +
+ + +
+
+
+ {{currentLanguageSet?.iVRFeedbackRequired}} +
+ +
+ {{currentLanguageSet?.stickyAgent}} +
@@ -162,6 +190,7 @@

+
@@ -181,7 +210,7 @@

{{currentLanguageSet?.alternateNumber}} + allowText="number" type="tel" maxlength="10" minlength="10" defaultNull />

diff --git a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts index b67d181..c9378d0 100644 --- a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts +++ b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts @@ -81,6 +81,7 @@ export class CallClosureComponent implements OnInit, DoCheck, AfterContentChecke isCallVerified: [''], isCallDisconnected: [''], isWrongNumber: [''], + phoneNumber: [null], isStickyAgentRequired: false, complaintId: [''], typeOfComplaint: [''], @@ -88,6 +89,7 @@ export class CallClosureComponent implements OnInit, DoCheck, AfterContentChecke // nextAttemptTime: [''], complaintRemarks: [''], callRemarks: [''], + preferredLanguage: [null], sendAdvice: [null], altPhoneNo: [null, [Validators.pattern("^((\\+91-?)|0)?[0-9]{10}$")]], iVRFeedbackRequired: false @@ -95,6 +97,11 @@ export class CallClosureComponent implements OnInit, DoCheck, AfterContentChecke ); isCallVerifiedStatus: any; isWrongNumberStatus : any; + languages: any = []; + enableCallDisconnectAndFurtherCall= false; + enableWrongNumber = false; + enablePreferredLanguage = false; + enablePhoneNumber = false; constructor( private setLanguageService: SetLanguageService, private fb: FormBuilder, @@ -136,6 +143,7 @@ private sms_service: SmsTemplateService, this.getComplaints(); this.getCallTypes(); this.isStickyAgentValid(); + this.getLanguageMaster(); this.associateAnmMoService.openCompFlag$.subscribe((responseComp) => { if (responseComp !== null && responseComp === "Call Closed") { @@ -152,7 +160,14 @@ private sms_service: SmsTemplateService, this.disableIVRFeedback = true this.barMinimized = true; this.isCorrectDateAndTime = true; - this.callClosureForm.reset(); + this.enableCallDisconnectAndFurtherCall = false; + this.enableWrongNumber = false; + this.enablePhoneNumber = false; + this.clearPhoneNoValidator(); + this.clearPreferredLanguageValidator(); + this.clearIsFurtherCallValidator(); + this.enablePreferredLanguage = false; + this.callClosureForm.reset(); } }); @@ -327,6 +342,7 @@ private sms_service: SmsTemplateService, reasonForCallNotAnswered: formData.reasonForCallNotAnswered, isCallDisconnected: (formData.isCallDisconnected==="Yes")?true:false, isWrongNumber: this.isWrongNumberStatus, + correctPhoneNumber: formData.phoneNumber, typeOfComplaint: (formData.typeOfComplaint !== null && formData.typeOfComplaint !== undefined && formData.typeOfComplaint !== "") ? formData.typeOfComplaint : null, complaintRemarks: (formData.complaintRemarks !== null && formData.complaintRemarks !== undefined && formData.complaintRemarks !== "") ? formData.complaintRemarks : null, nextAttemptDate: (formData.nextAttemptDate !== null && formData.nextAttemptDate !== undefined && formData.nextAttemptDate !== "") ? formData.nextAttemptDate : null, @@ -340,6 +356,7 @@ private sms_service: SmsTemplateService, createdBy: sessionStorage.getItem("userName"), modifiedBy: sessionStorage.getItem("userName"), complaintId: (formData.complaintId !== null && formData.complaintId !== undefined && formData.complaintId !== "") ? formData.complaintId : null, + preferredLanguage: formData.preferredLanguage }; const commonReqobj = { benCallID: this.associateAnmMoService.callDetailId, @@ -378,6 +395,13 @@ private sms_service: SmsTemplateService, this.showCallAnswerNoDropdown=false; this.showVerifiedFields = false; this.showDetails = false; + this.enableCallDisconnectAndFurtherCall = false; + this.enableWrongNumber = false; + this.enablePhoneNumber = false; + this.clearPhoneNoValidator(); + this.clearPreferredLanguageValidator(); + this.clearIsFurtherCallValidator(); + this.enablePreferredLanguage = false; this.disableIVRFeedback = true; this.resetSessions(); this.resetForm(); @@ -448,28 +472,45 @@ private sms_service: SmsTemplateService, this.callClosureForm.reset(); } selectedReasonOfNoFutherCall(value: any) { + const isDisconnect = this.callClosureForm.controls["isCallDisconnected"].value; if (value === 'No') { this.showDetails = true - - + this.clearPreferredLanguageValidator(); + this.callClosureForm.controls['preferredLanguage'].reset(); + this.enablePreferredLanguage = false; this.callClosureForm.controls['reasonForNoFurtherCallsId'].reset(); this.callClosureForm.controls['reasonForNoFurtherCalls'].reset(); + const reasonForNoFurtherCallsIdControl = this.callClosureForm.get('reasonForNoFurtherCallsId'); + reasonForNoFurtherCallsIdControl?.setValidators([Validators.required]); + reasonForNoFurtherCallsIdControl?.updateValueAndValidity(); this.callClosureForm.controls['nextAttemptDate'].reset(); this.callClosureForm.controls['nextAttemptDate'].disable(); // this.callClosureForm.addControl('reasonForNoFurtherCallsId', this.fb.control('', Validators.required)); // this.callClosureForm.addControl('reasonForNoFurtherCalls', this.fb.control('', Validators.required)); } else { - this.showDetails = false - this.callClosureForm.controls['nextAttemptDate'].enable(); + // this.callClosureForm.removeControl('reasonForNoFurtherCallsId'); // this.callClosureForm.removeControl('reasonForNoFurtherCalls'); + this.showDetails = false + if(this.selectedRole !== undefined && this.selectedRole !== null && this.selectedRole.toLowerCase() === "associate") { + const preferredLanguageControl = this.callClosureForm.get('preferredLanguage'); + preferredLanguageControl?.setValidators([Validators.required]); + preferredLanguageControl?.updateValueAndValidity(); + } + this.enablePreferredLanguage = true; this.callClosureForm.controls['reasonForNoFurtherCallsId'].reset(); this.callClosureForm.controls['reasonForNoFurtherCalls'].reset(); this.callClosureForm.controls['reasonForNoFurtherCallsId'].setValue(0); this.callClosureForm.controls['reasonForNoFurtherCalls'].setValue(''); + + this.clearIsFurtherCallValidator(); + + if(isDisconnect === 'Yes') { + this.callClosureForm.controls['nextAttemptDate'].enable(); + } } } @@ -478,6 +519,14 @@ private sms_service: SmsTemplateService, this.showCallAnswerNoDropdown = true; this.showVerifiedFields = false; this.disableIVRFeedback = true; + this.enableCallDisconnectAndFurtherCall = false; + this.enableWrongNumber = false; + this.showDetails = false; + this.enablePhoneNumber = false; + this.clearPreferredLanguageValidator(); + this.clearPhoneNoValidator(); + this.clearIsFurtherCallValidator(); + this.enablePreferredLanguage = false; for(let i=0; i { + if(response && response.length > 0){ + this.languages = response; + agentLanguages = response; + }else { + this.confirmationService.openDialog(this.currentLanguageSet.noLanguagesFound, 'error'); + } + }, + (err: any) => { + this.confirmationService.openDialog(err.error, 'error'); + } + ); + } + if(this.selectedRole !== undefined && this.selectedRole !== null && this.selectedRole.toLowerCase() === "anm") { + this.masterService.getLanguageMaster().subscribe((response: any) => { + if(response && response.length > 0){ + this.languages = []; + this.languages = response.filter( + (lang: any) => !agentLanguages.some(agentLang => agentLang.languageName?.toLowerCase() === lang.languageName?.toLowerCase()) + ); + }else { + this.confirmationService.openDialog(this.currentLanguageSet.noLanguagesFound, 'error'); + } + }, + (err: any) => { + this.confirmationService.openDialog(err.error, 'error'); + } + ); + } + } + + clearPhoneNoValidator() { + const phoneNumberontrol = this.callClosureForm.get('phoneNumber'); + phoneNumberontrol?.clearValidators(); + phoneNumberontrol?.updateValueAndValidity(); + } + + clearPreferredLanguageValidator() { + const preferredLanguageControl = this.callClosureForm.get('preferredLanguage'); + preferredLanguageControl?.clearValidators(); + preferredLanguageControl?.updateValueAndValidity(); + } + + clearIsFurtherCallValidator() { + const reasonForNoFurtherCallsIdControl = this.callClosureForm.get('reasonForNoFurtherCallsId'); + reasonForNoFurtherCallsIdControl?.clearValidators(); + reasonForNoFurtherCallsIdControl?.updateValueAndValidity(); } } export interface gradeMapping { diff --git a/src/app/app-modules/services/masterService/master.service.ts b/src/app/app-modules/services/masterService/master.service.ts index 563484d..d28a822 100644 --- a/src/app/app-modules/services/masterService/master.service.ts +++ b/src/app/app-modules/services/masterService/master.service.ts @@ -140,4 +140,8 @@ export class MasterService { return this.http.get(environment.getGenderMasterUrl); } + getAgentMasterByRoleIdAndLanguage(roleId : any,language : any){ + return this.http.get(environment.getAgentMasterByRoleIdAndLanguageUrl + "/" + roleId + "/" + language); + } + } diff --git a/src/app/app-modules/services/supervisor/supervisor.service.ts b/src/app/app-modules/services/supervisor/supervisor.service.ts index 34d6300..9866315 100644 --- a/src/app/app-modules/services/supervisor/supervisor.service.ts +++ b/src/app/app-modules/services/supervisor/supervisor.service.ts @@ -440,4 +440,8 @@ export class SupervisorService { updateParentChildMapping(reqData:any){ return this.http.post(environment.updateParentChildMappingURL,reqData) } + + getLowRiskRecordsByLanguage(psmId: any, phoneNoType: any, recordType: any, fDate: any, tDate: any, language: any) { + return this.http.get(environment.getLowRiskRecordsByLanguageUrl + '/' + psmId + '/' + phoneNoType + '/' + recordType + '/' + fDate + '/' + tDate + '/' + language); + } } diff --git a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.css b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.css index 692162b..813046d 100644 --- a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.css +++ b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.css @@ -163,3 +163,7 @@ margin-left: 20px !important; } +.buttonWidthForAllocate { + width: 200px; +} + diff --git a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.html b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.html index b7f8313..161c193 100644 --- a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.html +++ b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.html @@ -225,6 +225,15 @@

{{ currentLanguageSet?.allocateCallRecords }}

+ + {{ currentLanguageSet?.preferredLanguage }} + + + {{ language.languageName }} + + + + {{ currentLanguageSet?.allocateTo }} {{ currentLanguageSet?.allocateCallRecords }}

required /> - +
+

{{ currentLanguageSet?.allocate }}

+

diff --git a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts index 98c66b5..7e092ae 100644 --- a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts +++ b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts @@ -56,6 +56,8 @@ export class CallAllocationComponent implements OnInit, DoCheck { currentLanguageSet: any; languageData: any; rolesArr:any[] = []; + languages: any = []; + enableLanguage = false; recordData = [ { @@ -107,6 +109,7 @@ export class CallAllocationComponent implements OnInit, DoCheck { this.checkSubmitDisabledButton(); }); this.getMasterData(); + this.getLanguageMaster(); } ngDoCheck(){ @@ -133,6 +136,7 @@ export class CallAllocationComponent implements OnInit, DoCheck { recordType: new FormControl('', [Validators.required]), phoneNoType: new FormControl('', [Validators.required]), agentType: new FormControl('', [Validators.required]), + preferredLanguage: new FormControl(null, [Validators.required]), allocateTo: new FormControl('', [Validators.required]), numericValue: new FormControl('', [Validators.required]), }); @@ -153,17 +157,39 @@ export class CallAllocationComponent implements OnInit, DoCheck { onClickOfAgentType() { const agentTypeValue = this.callAllocationForm.controls["agentType"].value; + const selectedLanguage = this.callAllocationForm.controls["preferredLanguage"].value; this.checkAllocateDisabledButton(); - + this.allocatesTo = []; + this.callAllocationForm.controls.allocateTo.patchValue(null); + if(this.enableLanguage) { + + const recordType= this.callAllocationForm.controls.recordType.value; + const phoneNoType= this.callAllocationForm.controls.phoneNoType.value; + const psmId= sessionStorage.getItem('providerServiceMapID'); + const fromDate = moment(this.range.controls.start.value).format('YYYY-MM-DDThh:mm:ssZ'); + const toDate = moment(this.range.controls.end.value).format('YYYY-MM-DDThh:mm:ssZ'); + + this.supervisorService.getLowRiskRecordsByLanguage(psmId, phoneNoType, recordType, fromDate, toDate, selectedLanguage).subscribe((resp:any)=>{ + if(resp){ + this.callAllocationForm.controls.numericValue.patchValue(resp.totalLowRiskRecord); + this.allocateNoOfRecords = resp.totalLowRiskRecord; + + this.masterService.getAgentMasterByRoleIdAndLanguage(agentTypeValue,selectedLanguage).subscribe((response:any)=>{ + if(response){ + this.allocatesTo = response; + } + }); + } + }); - -this.allocatesTo = []; -this.callAllocationForm.controls.allocateTo.patchValue(null); - this.masterService.getAgentMasterByRoleId(agentTypeValue).subscribe((response:any)=>{ - if(response){ - this.allocatesTo = response; - } - }) + } else { + + this.masterService.getAgentMasterByRoleId(agentTypeValue).subscribe((response:any)=>{ + if(response){ + this.allocatesTo = response; + } + }) + } } @@ -210,13 +236,16 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); numValue = false; } - - if (this.callAllocationForm.controls.agentType.value !== null && this.callAllocationForm.controls.allocateTo.value !== null && numValue) { + + if ((!this.enableLanguage || (this.enableLanguage && this.callAllocationForm.controls.preferredLanguage.value !== null )) && this.callAllocationForm.controls.agentType.value !== null && this.callAllocationForm.controls.allocateTo.value !== null && this.callAllocationForm.controls.allocateTo.value.length > 0 && numValue) { this.isAllocateDisabled = false; - } else { + } + else { this.isAllocateDisabled = true; } + + } getMasterData() { @@ -270,6 +299,8 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); this.currentMaxAllocatedRecords = noOfRecords; this.enableAgentAllocation = true; this.isSubmitDisabled = false; + this.callAllocationForm.controls["preferredLanguage"].patchValue(null); + this.enableLanguage = false; this.resetInnerAllocateForm(); if(value === 'introductory') { @@ -290,10 +321,10 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); if (values.roleName.toLowerCase() === "anm") { this.rolesArr.push(values); this.callAllocationForm.controls["agentType"].patchValue(values.roleId); - this.onClickOfAgentType(); this.setSelectedRoleName(values.roleName); } }); + this.enableLanguage = true; } else { this.roles.filter((values:any) => { @@ -344,7 +375,8 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); "createdBy": sessionStorage.getItem("userName"), "isIntroductory": this.isIntroductory, "tdate": toDate, - "fdate": fromDate + "fdate": fromDate, + "preferredLanguage": this.callAllocationForm.controls.preferredLanguage.value }; @@ -358,9 +390,10 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); this.callAllocationForm.reset(); this.range.reset(); this.enableAgentAllocation = false; - this.isSubmitDisabled = false; + this.isSubmitDisabled = true; this.selectedRoleName = null; this.recordsData = []; + this.enableLanguage = false; } else { @@ -375,4 +408,20 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); }); } + + + getLanguageMaster(){ + + this.masterService.getLanguageMaster().subscribe((response: any) => { + if(response && response.length > 0){ + this.languages = response; + }else { + this.confirmationService.openDialog(this.currentLanguageSet.noLanguagesFound, 'error'); + } + }, + (err: any) => { + this.confirmationService.openDialog(err.error, 'error'); + } + ); + } } diff --git a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html index 483abb6..00fcf13 100644 --- a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html +++ b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html @@ -29,7 +29,7 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

currentLanguageSet?.role }} @@ -43,6 +43,15 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

+ + {{ currentLanguageSet?.preferredLanguage }} + + + {{ language.languageName }} + + + + {{ currentLanguageSet?.reallocateCallsToAgents }} currentLanguageSet?.agentName }} @@ -71,7 +80,7 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

currentLanguageSet?.recordType }} @@ -92,7 +101,7 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

currentLanguageSet?.phoneNumberType }} @@ -115,11 +124,13 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

matStartDate formControlName="start" placeholder="{{ currentLanguageSet?.startDate }}" + (dateChange)="resetReallocateForm()" /> MM/DD/YYYY – MM/DD/YYYY @@ -139,7 +150,7 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

- {{currentLanguageSet?.stickyAgentRecords}} + {{currentLanguageSet?.stickyAgentRecords}}
+
diff --git a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts index 98c66b5..7e092ae 100644 --- a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts +++ b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts @@ -56,6 +56,8 @@ export class CallAllocationComponent implements OnInit, DoCheck { currentLanguageSet: any; languageData: any; rolesArr:any[] = []; + languages: any = []; + enableLanguage = false; recordData = [ { @@ -107,6 +109,7 @@ export class CallAllocationComponent implements OnInit, DoCheck { this.checkSubmitDisabledButton(); }); this.getMasterData(); + this.getLanguageMaster(); } ngDoCheck(){ @@ -133,6 +136,7 @@ export class CallAllocationComponent implements OnInit, DoCheck { recordType: new FormControl('', [Validators.required]), phoneNoType: new FormControl('', [Validators.required]), agentType: new FormControl('', [Validators.required]), + preferredLanguage: new FormControl(null, [Validators.required]), allocateTo: new FormControl('', [Validators.required]), numericValue: new FormControl('', [Validators.required]), }); @@ -153,17 +157,39 @@ export class CallAllocationComponent implements OnInit, DoCheck { onClickOfAgentType() { const agentTypeValue = this.callAllocationForm.controls["agentType"].value; + const selectedLanguage = this.callAllocationForm.controls["preferredLanguage"].value; this.checkAllocateDisabledButton(); - + this.allocatesTo = []; + this.callAllocationForm.controls.allocateTo.patchValue(null); + if(this.enableLanguage) { + + const recordType= this.callAllocationForm.controls.recordType.value; + const phoneNoType= this.callAllocationForm.controls.phoneNoType.value; + const psmId= sessionStorage.getItem('providerServiceMapID'); + const fromDate = moment(this.range.controls.start.value).format('YYYY-MM-DDThh:mm:ssZ'); + const toDate = moment(this.range.controls.end.value).format('YYYY-MM-DDThh:mm:ssZ'); + + this.supervisorService.getLowRiskRecordsByLanguage(psmId, phoneNoType, recordType, fromDate, toDate, selectedLanguage).subscribe((resp:any)=>{ + if(resp){ + this.callAllocationForm.controls.numericValue.patchValue(resp.totalLowRiskRecord); + this.allocateNoOfRecords = resp.totalLowRiskRecord; + + this.masterService.getAgentMasterByRoleIdAndLanguage(agentTypeValue,selectedLanguage).subscribe((response:any)=>{ + if(response){ + this.allocatesTo = response; + } + }); + } + }); - -this.allocatesTo = []; -this.callAllocationForm.controls.allocateTo.patchValue(null); - this.masterService.getAgentMasterByRoleId(agentTypeValue).subscribe((response:any)=>{ - if(response){ - this.allocatesTo = response; - } - }) + } else { + + this.masterService.getAgentMasterByRoleId(agentTypeValue).subscribe((response:any)=>{ + if(response){ + this.allocatesTo = response; + } + }) + } } @@ -210,13 +236,16 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); numValue = false; } - - if (this.callAllocationForm.controls.agentType.value !== null && this.callAllocationForm.controls.allocateTo.value !== null && numValue) { + + if ((!this.enableLanguage || (this.enableLanguage && this.callAllocationForm.controls.preferredLanguage.value !== null )) && this.callAllocationForm.controls.agentType.value !== null && this.callAllocationForm.controls.allocateTo.value !== null && this.callAllocationForm.controls.allocateTo.value.length > 0 && numValue) { this.isAllocateDisabled = false; - } else { + } + else { this.isAllocateDisabled = true; } + + } getMasterData() { @@ -270,6 +299,8 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); this.currentMaxAllocatedRecords = noOfRecords; this.enableAgentAllocation = true; this.isSubmitDisabled = false; + this.callAllocationForm.controls["preferredLanguage"].patchValue(null); + this.enableLanguage = false; this.resetInnerAllocateForm(); if(value === 'introductory') { @@ -290,10 +321,10 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); if (values.roleName.toLowerCase() === "anm") { this.rolesArr.push(values); this.callAllocationForm.controls["agentType"].patchValue(values.roleId); - this.onClickOfAgentType(); this.setSelectedRoleName(values.roleName); } }); + this.enableLanguage = true; } else { this.roles.filter((values:any) => { @@ -344,7 +375,8 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); "createdBy": sessionStorage.getItem("userName"), "isIntroductory": this.isIntroductory, "tdate": toDate, - "fdate": fromDate + "fdate": fromDate, + "preferredLanguage": this.callAllocationForm.controls.preferredLanguage.value }; @@ -358,9 +390,10 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); this.callAllocationForm.reset(); this.range.reset(); this.enableAgentAllocation = false; - this.isSubmitDisabled = false; + this.isSubmitDisabled = true; this.selectedRoleName = null; this.recordsData = []; + this.enableLanguage = false; } else { @@ -375,4 +408,20 @@ this.callAllocationForm.controls.allocateTo.patchValue(null); }); } + + + getLanguageMaster(){ + + this.masterService.getLanguageMaster().subscribe((response: any) => { + if(response && response.length > 0){ + this.languages = response; + }else { + this.confirmationService.openDialog(this.currentLanguageSet.noLanguagesFound, 'error'); + } + }, + (err: any) => { + this.confirmationService.openDialog(err.error, 'error'); + } + ); + } } diff --git a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html index 483abb6..00fcf13 100644 --- a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html +++ b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.html @@ -29,7 +29,7 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

currentLanguageSet?.role }} @@ -43,6 +43,15 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

+ + {{ currentLanguageSet?.preferredLanguage }} + + + {{ language.languageName }} + + + + {{ currentLanguageSet?.reallocateCallsToAgents }} currentLanguageSet?.agentName }} @@ -71,7 +80,7 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

currentLanguageSet?.recordType }} @@ -92,7 +101,7 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

currentLanguageSet?.phoneNumberType }} @@ -115,11 +124,13 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

matStartDate formControlName="start" placeholder="{{ currentLanguageSet?.startDate }}" + (dateChange)="resetReallocateForm()" /> MM/DD/YYYY – MM/DD/YYYY @@ -139,7 +150,7 @@

{{ currentLanguageSet?.reallocateCallsToAgents }}

- {{currentLanguageSet?.stickyAgentRecords}} + {{currentLanguageSet?.stickyAgentRecords}}
+ +
+
+ diff --git a/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.ts b/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.ts index 4e1871a..9867387 100644 --- a/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.ts +++ b/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.ts @@ -39,7 +39,7 @@ import { CtiService } from '../../services/cti/cti.service'; import { map, Subscription, timer } from 'rxjs'; import { MatPaginator } from '@angular/material/paginator'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; - +import { VideoConsultationComponent } from '../video-consultation/video-consultation.component'; @Component({ selector: 'app-outbound-worklist', @@ -64,6 +64,9 @@ export class OutboundWorklistComponent implements OnInit, DoCheck, AfterViewInit agentStatus:any; autoPreviewTimeSub: Subscription = new Subscription; autoCallStarted:any=false + showPrompt = false; + + constructor( private setLanguageService: SetLanguageService, public dialog: MatDialog, @@ -73,7 +76,7 @@ export class OutboundWorklistComponent implements OnInit, DoCheck, AfterViewInit private associateAnmMoService: AssociateAnmMoService, private loginService: LoginserviceService, readonly sessionstorage:SessionStorageService, - private ctiService: CtiService + private ctiService: CtiService, ) { } ngDoCheck() { @@ -604,6 +607,22 @@ openCallClosure(){ // this.associateAnmMoService.loadComponent(BeneficiaryCallHistoryComponent,null) } + performAction() { + this.showPrompt = true; + } - + handleConsent(agreed: boolean) { + if (agreed === true) { + this.showPrompt = false; + this.videoConsulationPromptDialog(); + } else + this.showPrompt = false; + } + + videoConsulationPromptDialog() { + this.dialog.open(VideoConsultationComponent, { + width: '400px', + data: {consent: true} + }); + } } diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css new file mode 100644 index 0000000..c882757 --- /dev/null +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css @@ -0,0 +1,167 @@ +/* General Modal Styling */ + +.modal-content { + background: #ffffff; + padding: 20px; + border-radius: 12px; + box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.2); + max-width: 500px; /* Increased width */ + width: 90%; /* Responsive width */ + margin: auto; + text-align: center; + display: flexbox; +} + +/* Title */ +.title { + font-size: 24px; + font-weight: bold; + margin-bottom: 20px; + color: #010102; +} + +/* Buttons */ +.btn { + width: 100%; + padding: 10px; + font-size: 16px; + border-radius: 8px; + margin-top: 10px; +} + +.btn-primary { + background: #007bff; + border: none; + color: white; +} + +.btn-primary:hover { + background: #09407a; +} + +.btn-warning { + background: #ffc107; + border: none; + color: #000; +} + +.btn-warning:hover { + background: #e0a800; +} + +.btn-success { + background: #28a745; + border: none; + color: white; +} + +.btn-danger { + background-color: #dc3545; + color: white; + border: none; + +} + +.btn-danger:hover { + background: #cc2031; +} + +.btn-success:hover { + background: #15b435; +} + +/* Disabled Button */ +button[disabled] { + opacity: 0.6; + cursor: not-allowed; +} + +/* Link Status Styling */ +.link-status { + margin-top: 10px; +} + +.sent { + color: green; + font-weight: bold; +} + +/* Red color for 'Not Sent' */ +.not-sent { + color: red; + font-weight: bold; +} + +.not-initiated { + color: gray; +} + +.ongoing { + color: orange; + font-weight: bold; +} + +.completed { + color: green; + font-weight: bold; +} + +/* Align text and dropdown side by side */ +.receipt-container { + display: flex; + align-items: center; + gap: 15px; /* Space between text and dropdown */ +} + +/* Ensure dropdown is properly sized */ +.receipt-container .form-control { + width: 200px; /* Adjust width as needed */ + font-size: 16px; +} + + +.form-control { + width: 100%; + padding: 10px; + border: 1px solid #ced4da; + border-radius: 8px; + font-size: 16px; + margin-top: 5px; +} + +.troubleshooting { + background: #f8d7da; + padding: 10px; + border-radius: 8px; + margin-bottom: 15px; +} + +.troubleshoot-message { + font-weight: bold; + color: #721c24; +} + +.alternative-message { + background: #f4f4f4; + padding: 15px; + border-radius: 8px; + margin-top: 15px; +} + +.status { + font-size: 18px; + margin-bottom: 15px; +} + + + +/* Responsive Design */ +@media (max-width: 576px) { + .modal-content { + width: 90%; + } + + .btn { + font-size: 14px; + } +} diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html new file mode 100644 index 0000000..4b68a64 --- /dev/null +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html @@ -0,0 +1,69 @@ +
+ +
\ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts new file mode 100644 index 0000000..d54c67a --- /dev/null +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts @@ -0,0 +1,63 @@ +import { Component, Inject} from '@angular/core'; +import { VideoConsultationService } from './video-consultation.service'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; + + +@Component({ + selector: 'app-video-consultation', + templateUrl: './video-consultation.component.html', + styleUrls: ['./video-consultation.component.css'] +}) +export class VideoConsultationComponent { + // consent: boolean | null = null; + linkSent: boolean = false; + linkStatus: string = ''; + receiptConfirmation: string = ''; + callStatus: string = 'Not Initiated'; + linkResend: string = 'Sent' + videoConsultationAvailable: boolean = true; + + + constructor(private videoService: VideoConsultationService, + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: { consent: boolean } + + ) {} + + // setConsent(value: boolean) { + // data.consent = value; + // } + + sendLink() { + this.videoService.sendLink().subscribe(() => { + this.linkSent = true; + this.linkStatus = 'Sent Successfully'; + }); + } + + resendLink() { + this.videoService.resendLink().subscribe(() => { + this.linkStatus = 'Sent Successfully'; + }); + } + + startConsultation() { + this.callStatus = 'Ongoing'; + setTimeout(() => { this.callStatus = 'Completed'; }, 5000); // Simulate a video call ending + } + + endConsultation() { + this.callStatus = 'Completed'; + this.linkStatus = ''; + this.linkSent = false; + this.receiptConfirmation = ''; + + } + + updateReceiptConfirmation(event: Event) { + const target = event.target as HTMLSelectElement; + this.receiptConfirmation = target.value; + if(target.value === 'Not Received') this.linkStatus = 'Not Sent'; + } + +} diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.model.ts b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.model.ts new file mode 100644 index 0000000..1d18465 --- /dev/null +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.model.ts @@ -0,0 +1,27 @@ +// src/app/models/video-consultation.model.ts +export enum ConsentStatus { + PENDING = 'PENDING', + AGREED = 'AGREED', + DECLINED = 'DECLINED' + } + + export enum LinkStatus { + NOT_SENT = 'NOT_SENT', + SENT = 'SENT', + FAILED = 'FAILED' + } + + export enum ConsultationStatus { + NOT_INITIATED = 'NOT_INITIATED', + ONGOING = 'ONGOING', + COMPLETED = 'COMPLETED' + } + + export interface VideoConsultation { + beneficiaryId: string; + consentStatus: ConsentStatus; + linkStatus: LinkStatus; + linkReceiptConfirmed: boolean; + consultationStatus: ConsultationStatus; + videoLink?: string; + } \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.service.ts b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.service.ts new file mode 100644 index 0000000..1c97c6c --- /dev/null +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.service.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class VideoConsultationService { + sendLink(): Observable { + return of('Sent'); + } + + resendLink(): Observable { + return of('Sent Successfully'); + } +} From 3a061da43fd3e96aa91c28271b0106b30bd7cd31 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Wed, 2 Apr 2025 14:00:34 +0530 Subject: [PATCH 066/134] Integration of Video calling API --- .../associate-anm-mo.module.ts | 4 +- .../outbound-worklist.component.html | 33 +++++++++-- .../outbound-worklist.component.ts | 22 ++++---- .../video-consultation.component.css | 55 +++++++++++++++++++ .../video-consultation.component.html | 27 ++++++++- .../video-consultation.component.ts | 30 ++++++++-- .../video-consultation.service.ts | 18 ++++-- 7 files changed, 161 insertions(+), 28 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/associate-anm-mo.module.ts b/src/app/app-modules/associate-anm-mo/associate-anm-mo.module.ts index 58fa519..94ecb01 100644 --- a/src/app/app-modules/associate-anm-mo/associate-anm-mo.module.ts +++ b/src/app/app-modules/associate-anm-mo/associate-anm-mo.module.ts @@ -44,6 +44,7 @@ import { BenRegistrationComponent } from './beneficiary-registration/ben-registr import { BeneficiaryCallHistoryComponent } from './beneficiary-call-history/beneficiary-call-history.component'; import { HighRiskReasonsComponent } from './high-risk-reasons/high-risk-reasons.component'; import { SharedModule } from '../shared/shared.module'; +import { VideoConsultationComponent } from './video-consultation/video-consultation.component'; @NgModule({ @@ -56,7 +57,8 @@ import { SharedModule } from '../shared/shared.module'; EcdQuestionnaireComponent, BenRegistrationComponent, BeneficiaryCallHistoryComponent, - HighRiskReasonsComponent + HighRiskReasonsComponent, + VideoConsultationComponent ], imports: [ diff --git a/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.html b/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.html index 3c26a31..cb89005 100644 --- a/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.html +++ b/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.html @@ -67,7 +67,7 @@

- - - + + + +
+ + + + + + + + + + + + + +
Sl NoActionColumn
1 + + Sample Value
+ + +
- \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts index 4bfb22c..d91372f 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts @@ -1,4 +1,4 @@ -import { Component, Inject } from '@angular/core'; +import { Component, Inject, Input, Optional, Output } from '@angular/core'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; import { MatSnackBar } from '@angular/material/snack-bar'; import { @@ -11,6 +11,8 @@ import { SmsTemplateService } from '../../services/smsTemplate/sms-template.serv import { LoginserviceService } from '../../services/loginservice/loginservice.service'; import { map, switchMap } from 'rxjs/operators'; +declare var JitsiMeetExternalAPI: any; + interface VideoConsultationDialogData { videoCallPrompt: boolean; callerPhoneNumber: string; @@ -31,7 +33,7 @@ interface VideoCallRequest { } interface VideocallStatusUpdate { - meetingID: string, + meetingLink: string, callStatus: string, callDuration: string, modifiedBy: string @@ -42,6 +44,8 @@ interface VideocallStatusUpdate { styleUrls: ['./video-consultation.component.css'] }) + + export class VideoConsultationComponent { // consent: boolean | null = null; linkSent = false; @@ -56,7 +60,6 @@ export class VideoConsultationComponent { callStartTime: Date | null = null; callEndTime: Date | null = null; - constructor( private associateAnmMoService: AssociateAnmMoService, private sms_service: SmsTemplateService, @@ -65,8 +68,7 @@ export class VideoConsultationComponent { private snackBar: MatSnackBar, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: VideoConsultationDialogData, - - ) { } + ){} sendOrResendLink(): void { @@ -74,8 +76,9 @@ export class VideoConsultationComponent { next: (response: any) => { this.linkSent = true; this.meetLink = response.meetingLink; + this.linkStatus = 'Sent Successfully'; - this.send_sms(this.meetLink, this.data.callerPhoneNumber); + this.send_sms(this.meetLink, "8754969836"); }, error: () => { this.linkStatus = 'Failed to send'; @@ -93,7 +96,34 @@ export class VideoConsultationComponent { verticalPosition: 'top', panelClass: ['snackbar-success'] }); - // alert('Call has started') + + setTimeout(() => { + const domain = 'meet.jit.si'; + const options = { + roomName: this.meetLink.split('/').pop(), // gets the last part of the link + parentNode: document.querySelector('#jitsi-container'), + userInfo: { + displayName: this.sessionstorage.getItem('userName') || 'Agent' + }, + configOverwrite: { + startWithAudioMuted: false, + startWithVideoMuted: false + }, + interfaceConfigOverwrite: { + SHOW_JITSI_WATERMARK: false, + SHOW_BRAND_WATERMARK: false, + disableDeepLinking: true + } + }; + const api = new JitsiMeetExternalAPI(domain, options); + + api.addListener('readyToClose', () => { + console.log("User disconnected / call ended"); + this.endConsultation(); // Your custom logic + }); + }, 0); + this.saveVideoCallRequest(this.meetLink, "Initiated"); + } endConsultation(): void { @@ -103,7 +133,7 @@ export class VideoConsultationComponent { const callDuration = this.calculateCallDuration(); const smsRequest: VideocallStatusUpdate = { - "meetingID": "string", + "meetingLink": this.meetLink, "callStatus": "COMPLETED", "callDuration": callDuration, "modifiedBy": this.sessionstorage.getItem('userName') @@ -119,7 +149,7 @@ export class VideoConsultationComponent { }); this.data.videoCallPrompt = false; - this.dialogRef.close(); + this.dialogRef?.close(); this.resetLinkState(); } @@ -146,7 +176,7 @@ export class VideoConsultationComponent { if (agreed === true) { this.videoConsultationAvailable = true; } else { - this.dialogRef.close(); + this.dialogRef?.close(); } } @@ -156,13 +186,13 @@ export class VideoConsultationComponent { this.sms_service.getSMStypes(currentServiceID).pipe( map((response: any) => { const adviceType = response?.data?.find((type: any) => - type.smsType.toLowerCase() === "advice sms" + type.smsType === "Video Consultation" ); return adviceType?.smsTypeID || null; }), switchMap((smsTypeID: string | null) => { - if (!smsTypeID) throw new Error("Advice SMS type not found"); - return this.sms_service.getSMStemplates(currentServiceID, smsTypeID).pipe( + if (!smsTypeID) throw new Error("Video Consultation type not found"); + return this.sms_service.getSMStemplates(1714, smsTypeID).pipe( map((res: any) => { const template = res?.data?.find((tpl: any) => !tpl.deleted); return { @@ -190,13 +220,11 @@ export class VideoConsultationComponent { ).subscribe({ next: (response) => { console.log("SMS Sent", response); - this.linkStatus = 'Sent Successfully'; this.snackBar.open('SMS sent successfully', 'Close', { duration: 3000, verticalPosition: 'top', panelClass: ['snackbar-success'] }); - // alert("Sms sent successfully"); this.saveVideoCallRequest(this.meetLink, "Initiated"); }, error: (err) => { From 9d68d41bdb95249d516cc4275587e114023ff414 Mon Sep 17 00:00:00 2001 From: devikasuresh20 Date: Thu, 17 Apr 2025 16:23:11 +0530 Subject: [PATCH 089/134] LMP & EDD date format changes --- .../ben-registration.component.ts | 47 ++++++++++--------- .../ecd-questionnaire.component.ts | 13 ++++- .../call-allocation.component.ts | 2 +- src/environments/environment.ci.ts.template | 2 +- src/environments/environment.local.ts | 2 +- src/environments/environment.prod.ts | 8 ++-- src/environments/environment.test.ts | 8 ++-- 7 files changed, 48 insertions(+), 34 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index 3cc8fb0..874c056 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -289,14 +289,10 @@ else{ this.benRegistrationForm.controls.motherName.setValue(viewDetails.name); this.benRegistrationForm.controls.phoneNo.setValue(viewDetails.whomPhoneNo); this.benRegistrationForm.controls.phoneNoOf.setValue(viewDetails.phoneNoOfWhom); - let lDate = new Date(viewDetails.lmpDate); - lDate = new Date(lDate.getTime() + lDate.getTimezoneOffset() * 60000) + const lDate = new Date(viewDetails.lmpDate).toLocaleDateString('en-CA'); this.benRegistrationForm.controls.lmpDate.setValue(lDate); - - // let eDate = new Date(viewDetails.edd); - // eDate = new Date(eDate.getTime() + eDate.getTimezoneOffset() * 60000) - // this.benRegistrationForm.controls.edd.setValue(eDate); + // Calculate EDD based on LMP Date const eddDate = new Date(lDate); @@ -307,9 +303,7 @@ else{ console.log("EDD PATCHING VALUE", eddDate); } else { - let dobDate = new Date(viewDetails.dob); - dobDate = new Date(dobDate.getTime() + dobDate.getTimezoneOffset() * 60000) - + const dobDate = new Date(viewDetails.dob).toLocaleDateString('en-CA'); this.benRegistrationForm.controls.dob.setValue(dobDate); if(this.benRegistrationForm.controls.dob.value){ this.benRegistrationForm.controls.dob.setErrors(null) @@ -456,11 +450,12 @@ else{ let eddDateValue=null; let dobDateValue=null; if(this.enableMotherRecord) { - lmpDateValue = moment(this.benRegistrationForm.controls.lmpDate.value).format('YYYY-MM-DDThh:mm:ssZ'); - eddDateValue = moment(this.benRegistrationForm.controls.edd.value).format('YYYY-MM-DDThh:mm:ssZ'); + + lmpDateValue = this.formatDateValue(this.benRegistrationForm.controls.lmpDate.value); + eddDateValue = this.formatDateValue(this.benRegistrationForm.controls.edd.value); } else { - dobDateValue = moment(this.benRegistrationForm.controls.dob.value).format('YYYY-MM-DDThh:mm:ssZ'); + dobDateValue = this.formatDateValue(this.benRegistrationForm.controls.dob.value); } const demographicReq = { // "stateID" :this.benRegistrationForm.controls.stateID.value, @@ -545,9 +540,10 @@ else{ this.associateAnmMoService.selectedBenDetails.phcName = this.benRegistrationForm.controls.phcName.value, this.associateAnmMoService.selectedBenDetails.blockName = this.benRegistrationForm.controls.healthBlock.value, this.associateAnmMoService.selectedBenDetails.address = this.benRegistrationForm.controls.address.value, - this.associateAnmMoService.selectedBenDetails.dob =moment(this.benRegistrationForm.controls.dob.value).format('YYYY-MM-DDThh:mm:ssZ'), - this.associateAnmMoService.selectedBenDetails.lmpDate =moment(this.benRegistrationForm.controls.lmpDate.value).format('YYYY-MM-DDThh:mm:ssZ'), - this.associateAnmMoService.selectedBenDetails.edd =moment(this.benRegistrationForm.controls.edd.value).format('YYYY-MM-DDThh:mm:ssZ'), + this.associateAnmMoService.selectedBenDetails.dob = this.formatDateValue(this.benRegistrationForm.controls.dob.value), + this.associateAnmMoService.selectedBenDetails.lmpDate = this.formatDateValue(this.benRegistrationForm.controls.lmpDate.value), + this.associateAnmMoService.selectedBenDetails.edd = this.formatDateValue(this.benRegistrationForm.controls.edd.value), + this.associateAnmMoService.selectedBenDetails.age = this.benRegistrationForm.controls.age.value, this.confirmationService.openDialog(this.currentLanguageSet.beneficiaryRegisteredSuccessfully + " " + benId, `success`); @@ -599,11 +595,11 @@ else{ let eddDateValue=null; let dobDateValue=null; if(this.enableMotherRecord) { - lmpDateValue = moment(this.benRegistrationForm.controls.lmpDate.value).format('YYYY-MM-DDThh:mm:ssZ'); - eddDateValue = moment(this.benRegistrationForm.controls.edd.value).format('YYYY-MM-DDThh:mm:ssZ'); + lmpDateValue = this.formatDateValue(this.benRegistrationForm.controls.lmpDate.value); + eddDateValue = this.formatDateValue(this.benRegistrationForm.controls.edd.value); } else { - dobDateValue = moment(this.benRegistrationForm.controls.dob.value).format('YYYY-MM-DDThh:mm:ssZ'); + dobDateValue = this.formatDateValue(this.benRegistrationForm.controls.dob.value); } let benRegId = null; @@ -708,10 +704,10 @@ console.log(reqObj); this.associateAnmMoService.selectedBenDetails.phcName = this.benRegistrationForm.controls.phcName.value, this.associateAnmMoService.selectedBenDetails.blockName = this.benRegistrationForm.controls.healthBlock.value, this.associateAnmMoService.selectedBenDetails.address = this.benRegistrationForm.controls.address.value, - this.associateAnmMoService.selectedBenDetails.lmpDate =moment(this.benRegistrationForm.controls.lmpDate.value).format('YYYY-MM-DDThh:mm:ssZ'), - this.associateAnmMoService.selectedBenDetails.dob =moment(this.benRegistrationForm.controls.dob.value).format('YYYY-MM-DDThh:mm:ssZ'), this.associateAnmMoService.selectedBenDetails.age = this.benRegistrationForm.controls.age.value, - this.associateAnmMoService.selectedBenDetails.edd =moment(this.benRegistrationForm.controls.edd.value).format('YYYY-MM-DDThh:mm:ssZ'), + this.associateAnmMoService.selectedBenDetails.lmpDate = this.formatDateValue(this.benRegistrationForm.controls.lmpDate.value), + this.associateAnmMoService.selectedBenDetails.dob = this.formatDateValue(this.benRegistrationForm.controls.dob.value), + this.associateAnmMoService.selectedBenDetails.edd = this.formatDateValue(this.benRegistrationForm.controls.edd.value), this.confirmationService.openDialog(response.response, `success`); this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); @@ -777,5 +773,14 @@ console.log(reqObj); } } + + + + formatDateValue(value: any) { + + const dateObj = new Date(value); + const finalDate = `${dateObj.getFullYear()}-${String(dateObj.getMonth() + 1).padStart(2, "0")}-${String(dateObj.getDate()).padStart(2, "0")}T00:00:00+05:30`; + return finalDate; + } } diff --git a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts index 642621c..bdcd085 100644 --- a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts +++ b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts @@ -79,6 +79,8 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { benData: any; disableFields: any = true; formattedDOB = ''; + formattedLMP = ''; + formattedEDD = ''; constructor( @@ -150,8 +152,7 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { this.childId = this.benData.mctsidNoChildId; this.beneficiaryChildDataForm.patchValue(this.benData); - const dobDate = new Date(this.benData.dob); - this.formattedDOB = dobDate.toISOString().split('T')[0]; + this.formattedDOB = new Date(this.benData.dob).toLocaleDateString('en-CA'); this.beneficiaryChildDataForm.patchValue({ childId: this.benData.mctsidNoChildId, dob: this.formattedDOB @@ -164,6 +165,14 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { motherName: (this.benData.motherName !== null && this.benData.motherName !== undefined && this.benData.motherName !== "") ? this.benData.motherName : this.benData.name, motherId: this.benData.mctsidNo }); + this.formattedLMP = new Date(this.benData.lmpDate).toLocaleDateString('en-CA'); + this.beneficiaryMotherDataForm.patchValue({ + lmpDate: this.formattedLMP + }); + this.formattedEDD = new Date(this.benData.edd).toLocaleDateString('en-CA'); + this.beneficiaryMotherDataForm.patchValue({ + edd: this.formattedEDD + }); this.enableChildForm = false; } } diff --git a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts index 5c3e9ee..c291635 100644 --- a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts +++ b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts @@ -167,7 +167,7 @@ export class CallAllocationComponent implements OnInit, DoCheck { const recordType= this.callAllocationForm.controls.recordType.value; const phoneNoType= this.callAllocationForm.controls.phoneNoType.value; - const psmId= sessionStorage.getItem('providerServiceMapID'); + const psmId= this.sessionstorage.getItem('providerServiceMapID'); const fromDate = moment(this.range.controls.start.value).format('YYYY-MM-DDThh:mm:ssZ'); const toDate = moment(this.range.controls.end.value).format('YYYY-MM-DDThh:mm:ssZ'); diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index 6cd71e6..482d3dd 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -183,7 +183,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `http://192.168.45.55/`, + ctiUrl: `https://uatcz.piramalswasthya.org/`, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts index 83d1fd9..ff9b0df 100644 --- a/src/environments/environment.local.ts +++ b/src/environments/environment.local.ts @@ -190,7 +190,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `http://192.168.45.55/`, + ctiUrl: `https://uatcz.piramalswasthya.org/`, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index eeb6d5a..5110563 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -21,9 +21,9 @@ */ -const ecdIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const commonIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const adminIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const ecdIP = 'https://amritwprdev.piramalswasthya.org/'; +const commonIP = 'https://amritwprdev.piramalswasthya.org/'; +const adminIP = 'https://amritwprdev.piramalswasthya.org/'; const COMMON_API = `${commonIP}commonapi-ecd/`; const ADMIN_API = `${adminIP}adminapi-v1.0/`; const ECD_API = `${ecdIP}ecdapi-v1.0/`; @@ -187,7 +187,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `http://192.168.45.55/`, + ctiUrl: `https://uatcz.piramalswasthya.org/`, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index 0ff0ed1..9ee6542 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -21,9 +21,9 @@ */ -const ecdIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const commonIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const adminIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const ecdIP = 'https://amritwprdev.piramalswasthya.org/'; +const commonIP = 'https://amritwprdev.piramalswasthya.org/'; +const adminIP = 'https://amritwprdev.piramalswasthya.org/'; const COMMON_API = `${commonIP}commonapi-ecd/`; const ADMIN_API = `${adminIP}adminapi-v1.0/`; const ECD_API = `${ecdIP}ecdapi-v1.0/`; @@ -187,7 +187,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `http://192.168.45.55/`, + ctiUrl: `https://uatcz.piramalswasthya.org/`, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, From 49ebd9bed4111c7b002ae676984e0f3b1348098d Mon Sep 17 00:00:00 2001 From: srinuatpiramal Date: Fri, 18 Apr 2025 13:41:06 +0530 Subject: [PATCH 090/134] Update environment.test.ts --- src/environments/environment.test.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index 0ff0ed1..c0a69d0 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -30,6 +30,9 @@ const ECD_API = `${ecdIP}ecdapi-v1.0/`; const biologicalScreeningDeviceAPI = `${ADMIN_API}diagnostics/biologicalScreeningDevice`; const sessionStorageEncKey = ''; +const fhirIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const FHIR_API = `${fhirIP}:8085/`; + export const environment = { production: true, encKey: sessionStorageEncKey, @@ -215,6 +218,10 @@ export const environment = { getSMSValuesURL: `${ECD_API}master/getSMSValues`, getListOfMapQuestionaireConfigurationUrl:`${ECD_API}questionnaireConfiguration/getByPSMId`, + // Customization APIs + getAllRegistrationData: `${COMMON_API}customization/fetchAllData`, + getBenIdForhealthID: `${FHIR_API}healthID/getBenIdForhealthID`, + /**Demographic Masters */ getStatesMasterUrl: `${COMMON_API}location/states`, @@ -252,4 +259,4 @@ downloadBabyDeathReportURL:`${ECD_API}ecdReportController/getECDBabyDeathReport` downloadNotConnectedReportURL:`${ECD_API}ecdReportController/getECDNotConnectedPhonelistDiffformatReport`, downloadJsyReportURL: `${ECD_API}ecdReportController/getECDJSYRelatedComplaintsReport`, downloadMiscarriageReportURL:`${ECD_API}ecdReportController/getECDMiscarriageReport`, -}; \ No newline at end of file +}; From 707b72edc22879958c24e0aae2233535b147d5e3 Mon Sep 17 00:00:00 2001 From: Devika S <57424483+devikasuresh20@users.noreply.github.com> Date: Mon, 21 Apr 2025 10:42:06 +0530 Subject: [PATCH 091/134] LMP & EDD date format changes (#19) --- .../ben-registration.component.ts | 47 ++++++++++--------- .../ecd-questionnaire.component.ts | 13 ++++- .../call-allocation.component.ts | 2 +- src/environments/environment.ci.ts.template | 2 +- src/environments/environment.local.ts | 2 +- src/environments/environment.prod.ts | 8 ++-- src/environments/environment.test.ts | 8 ++-- 7 files changed, 48 insertions(+), 34 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index 3cc8fb0..874c056 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -289,14 +289,10 @@ else{ this.benRegistrationForm.controls.motherName.setValue(viewDetails.name); this.benRegistrationForm.controls.phoneNo.setValue(viewDetails.whomPhoneNo); this.benRegistrationForm.controls.phoneNoOf.setValue(viewDetails.phoneNoOfWhom); - let lDate = new Date(viewDetails.lmpDate); - lDate = new Date(lDate.getTime() + lDate.getTimezoneOffset() * 60000) + const lDate = new Date(viewDetails.lmpDate).toLocaleDateString('en-CA'); this.benRegistrationForm.controls.lmpDate.setValue(lDate); - - // let eDate = new Date(viewDetails.edd); - // eDate = new Date(eDate.getTime() + eDate.getTimezoneOffset() * 60000) - // this.benRegistrationForm.controls.edd.setValue(eDate); + // Calculate EDD based on LMP Date const eddDate = new Date(lDate); @@ -307,9 +303,7 @@ else{ console.log("EDD PATCHING VALUE", eddDate); } else { - let dobDate = new Date(viewDetails.dob); - dobDate = new Date(dobDate.getTime() + dobDate.getTimezoneOffset() * 60000) - + const dobDate = new Date(viewDetails.dob).toLocaleDateString('en-CA'); this.benRegistrationForm.controls.dob.setValue(dobDate); if(this.benRegistrationForm.controls.dob.value){ this.benRegistrationForm.controls.dob.setErrors(null) @@ -456,11 +450,12 @@ else{ let eddDateValue=null; let dobDateValue=null; if(this.enableMotherRecord) { - lmpDateValue = moment(this.benRegistrationForm.controls.lmpDate.value).format('YYYY-MM-DDThh:mm:ssZ'); - eddDateValue = moment(this.benRegistrationForm.controls.edd.value).format('YYYY-MM-DDThh:mm:ssZ'); + + lmpDateValue = this.formatDateValue(this.benRegistrationForm.controls.lmpDate.value); + eddDateValue = this.formatDateValue(this.benRegistrationForm.controls.edd.value); } else { - dobDateValue = moment(this.benRegistrationForm.controls.dob.value).format('YYYY-MM-DDThh:mm:ssZ'); + dobDateValue = this.formatDateValue(this.benRegistrationForm.controls.dob.value); } const demographicReq = { // "stateID" :this.benRegistrationForm.controls.stateID.value, @@ -545,9 +540,10 @@ else{ this.associateAnmMoService.selectedBenDetails.phcName = this.benRegistrationForm.controls.phcName.value, this.associateAnmMoService.selectedBenDetails.blockName = this.benRegistrationForm.controls.healthBlock.value, this.associateAnmMoService.selectedBenDetails.address = this.benRegistrationForm.controls.address.value, - this.associateAnmMoService.selectedBenDetails.dob =moment(this.benRegistrationForm.controls.dob.value).format('YYYY-MM-DDThh:mm:ssZ'), - this.associateAnmMoService.selectedBenDetails.lmpDate =moment(this.benRegistrationForm.controls.lmpDate.value).format('YYYY-MM-DDThh:mm:ssZ'), - this.associateAnmMoService.selectedBenDetails.edd =moment(this.benRegistrationForm.controls.edd.value).format('YYYY-MM-DDThh:mm:ssZ'), + this.associateAnmMoService.selectedBenDetails.dob = this.formatDateValue(this.benRegistrationForm.controls.dob.value), + this.associateAnmMoService.selectedBenDetails.lmpDate = this.formatDateValue(this.benRegistrationForm.controls.lmpDate.value), + this.associateAnmMoService.selectedBenDetails.edd = this.formatDateValue(this.benRegistrationForm.controls.edd.value), + this.associateAnmMoService.selectedBenDetails.age = this.benRegistrationForm.controls.age.value, this.confirmationService.openDialog(this.currentLanguageSet.beneficiaryRegisteredSuccessfully + " " + benId, `success`); @@ -599,11 +595,11 @@ else{ let eddDateValue=null; let dobDateValue=null; if(this.enableMotherRecord) { - lmpDateValue = moment(this.benRegistrationForm.controls.lmpDate.value).format('YYYY-MM-DDThh:mm:ssZ'); - eddDateValue = moment(this.benRegistrationForm.controls.edd.value).format('YYYY-MM-DDThh:mm:ssZ'); + lmpDateValue = this.formatDateValue(this.benRegistrationForm.controls.lmpDate.value); + eddDateValue = this.formatDateValue(this.benRegistrationForm.controls.edd.value); } else { - dobDateValue = moment(this.benRegistrationForm.controls.dob.value).format('YYYY-MM-DDThh:mm:ssZ'); + dobDateValue = this.formatDateValue(this.benRegistrationForm.controls.dob.value); } let benRegId = null; @@ -708,10 +704,10 @@ console.log(reqObj); this.associateAnmMoService.selectedBenDetails.phcName = this.benRegistrationForm.controls.phcName.value, this.associateAnmMoService.selectedBenDetails.blockName = this.benRegistrationForm.controls.healthBlock.value, this.associateAnmMoService.selectedBenDetails.address = this.benRegistrationForm.controls.address.value, - this.associateAnmMoService.selectedBenDetails.lmpDate =moment(this.benRegistrationForm.controls.lmpDate.value).format('YYYY-MM-DDThh:mm:ssZ'), - this.associateAnmMoService.selectedBenDetails.dob =moment(this.benRegistrationForm.controls.dob.value).format('YYYY-MM-DDThh:mm:ssZ'), this.associateAnmMoService.selectedBenDetails.age = this.benRegistrationForm.controls.age.value, - this.associateAnmMoService.selectedBenDetails.edd =moment(this.benRegistrationForm.controls.edd.value).format('YYYY-MM-DDThh:mm:ssZ'), + this.associateAnmMoService.selectedBenDetails.lmpDate = this.formatDateValue(this.benRegistrationForm.controls.lmpDate.value), + this.associateAnmMoService.selectedBenDetails.dob = this.formatDateValue(this.benRegistrationForm.controls.dob.value), + this.associateAnmMoService.selectedBenDetails.edd = this.formatDateValue(this.benRegistrationForm.controls.edd.value), this.confirmationService.openDialog(response.response, `success`); this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); @@ -777,5 +773,14 @@ console.log(reqObj); } } + + + + formatDateValue(value: any) { + + const dateObj = new Date(value); + const finalDate = `${dateObj.getFullYear()}-${String(dateObj.getMonth() + 1).padStart(2, "0")}-${String(dateObj.getDate()).padStart(2, "0")}T00:00:00+05:30`; + return finalDate; + } } diff --git a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts index 642621c..bdcd085 100644 --- a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts +++ b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts @@ -79,6 +79,8 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { benData: any; disableFields: any = true; formattedDOB = ''; + formattedLMP = ''; + formattedEDD = ''; constructor( @@ -150,8 +152,7 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { this.childId = this.benData.mctsidNoChildId; this.beneficiaryChildDataForm.patchValue(this.benData); - const dobDate = new Date(this.benData.dob); - this.formattedDOB = dobDate.toISOString().split('T')[0]; + this.formattedDOB = new Date(this.benData.dob).toLocaleDateString('en-CA'); this.beneficiaryChildDataForm.patchValue({ childId: this.benData.mctsidNoChildId, dob: this.formattedDOB @@ -164,6 +165,14 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { motherName: (this.benData.motherName !== null && this.benData.motherName !== undefined && this.benData.motherName !== "") ? this.benData.motherName : this.benData.name, motherId: this.benData.mctsidNo }); + this.formattedLMP = new Date(this.benData.lmpDate).toLocaleDateString('en-CA'); + this.beneficiaryMotherDataForm.patchValue({ + lmpDate: this.formattedLMP + }); + this.formattedEDD = new Date(this.benData.edd).toLocaleDateString('en-CA'); + this.beneficiaryMotherDataForm.patchValue({ + edd: this.formattedEDD + }); this.enableChildForm = false; } } diff --git a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts index 5c3e9ee..c291635 100644 --- a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts +++ b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts @@ -167,7 +167,7 @@ export class CallAllocationComponent implements OnInit, DoCheck { const recordType= this.callAllocationForm.controls.recordType.value; const phoneNoType= this.callAllocationForm.controls.phoneNoType.value; - const psmId= sessionStorage.getItem('providerServiceMapID'); + const psmId= this.sessionstorage.getItem('providerServiceMapID'); const fromDate = moment(this.range.controls.start.value).format('YYYY-MM-DDThh:mm:ssZ'); const toDate = moment(this.range.controls.end.value).format('YYYY-MM-DDThh:mm:ssZ'); diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index 6cd71e6..482d3dd 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -183,7 +183,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `http://192.168.45.55/`, + ctiUrl: `https://uatcz.piramalswasthya.org/`, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts index 83d1fd9..ff9b0df 100644 --- a/src/environments/environment.local.ts +++ b/src/environments/environment.local.ts @@ -190,7 +190,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `http://192.168.45.55/`, + ctiUrl: `https://uatcz.piramalswasthya.org/`, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index eeb6d5a..5110563 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -21,9 +21,9 @@ */ -const ecdIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const commonIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const adminIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const ecdIP = 'https://amritwprdev.piramalswasthya.org/'; +const commonIP = 'https://amritwprdev.piramalswasthya.org/'; +const adminIP = 'https://amritwprdev.piramalswasthya.org/'; const COMMON_API = `${commonIP}commonapi-ecd/`; const ADMIN_API = `${adminIP}adminapi-v1.0/`; const ECD_API = `${ecdIP}ecdapi-v1.0/`; @@ -187,7 +187,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `http://192.168.45.55/`, + ctiUrl: `https://uatcz.piramalswasthya.org/`, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, diff --git a/src/environments/environment.test.ts b/src/environments/environment.test.ts index c0a69d0..fd59345 100644 --- a/src/environments/environment.test.ts +++ b/src/environments/environment.test.ts @@ -21,9 +21,9 @@ */ -const ecdIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const commonIP = 'http://amritwprdev.piramalswasthya.org:8080/'; -const adminIP = 'http://amritwprdev.piramalswasthya.org:8080/'; +const ecdIP = 'https://amritwprdev.piramalswasthya.org/'; +const commonIP = 'https://amritwprdev.piramalswasthya.org/'; +const adminIP = 'https://amritwprdev.piramalswasthya.org/'; const COMMON_API = `${commonIP}commonapi-ecd/`; const ADMIN_API = `${adminIP}adminapi-v1.0/`; const ECD_API = `${ecdIP}ecdapi-v1.0/`; @@ -190,7 +190,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `http://192.168.45.55/`, + ctiUrl: `https://uatcz.piramalswasthya.org/`, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, From ed64d5e5c10bebfae2893cd84924dd6b31b112d8 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Mon, 21 Apr 2025 12:01:18 +0530 Subject: [PATCH 092/134] Added vdeocall component in both component. --- .../associate-anm-mo.module.ts | 5 +- .../ben-registration.component.html | 378 ++++- .../ben-registration.component.ts | 62 +- .../ecd-questionnaire.component.html | 1335 +++++++++-------- .../ecd-questionnaire.component.ts | 18 +- 5 files changed, 1139 insertions(+), 659 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/associate-anm-mo.module.ts b/src/app/app-modules/associate-anm-mo/associate-anm-mo.module.ts index 3c67ae8..32adf51 100644 --- a/src/app/app-modules/associate-anm-mo/associate-anm-mo.module.ts +++ b/src/app/app-modules/associate-anm-mo/associate-anm-mo.module.ts @@ -48,6 +48,7 @@ import { MatDialogModule } from '@angular/material/dialog'; import { VideoConsultationComponent } from './video-consultation/video-consultation.component'; import { SafeUrlPipe } from './safe-url.pipe'; import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { FloatingVideoComponent } from './floating-videocall/floating-video.component'; @@ -63,7 +64,9 @@ import { MatSnackBarModule } from '@angular/material/snack-bar'; BeneficiaryCallHistoryComponent, HighRiskReasonsComponent, VideoConsultationComponent, - SafeUrlPipe + SafeUrlPipe, + FloatingVideoComponent + // VideoComponent, ], imports: [ diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html index 7de06c3..421ccad 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html @@ -10,7 +10,8 @@

{{currentLanguageSet?.beneficiaryRegistration

-
+
+
@@ -344,7 +345,7 @@

{{currentLanguageSet?.beneficiaryRegistration @@ -372,4 +373,375 @@

{{currentLanguageSet?.beneficiaryRegistration
-

\ No newline at end of file +
+
+ +
+
+ + + + + + +
+
+ + {{ currentLanguageSet?.motherID}} + + +
+ +
+ + {{ currentLanguageSet?.childId}} + + +
+ + +
+ + {{ currentLanguageSet?.childName}} + + +
+ +
+ + {{ currentLanguageSet?.motherName}} + + +
+ +
+ + {{ enableMotherRecord ? currentLanguageSet?.husbandName : + currentLanguageSet?.fatherName }} + + +
+ + + +
+ + {{currentLanguageSet?.gender}} + + + {{ genders.genderName }} + + + +
+ +
+ + {{ currentLanguageSet?.age}} + + +
+
+ + {{ currentLanguageSet?.age}} + + +
+
+ + {{ currentLanguageSet?.state}} + + +
+ + +
+ + {{ currentLanguageSet?.district}} + + +
+ +
+ + {{ currentLanguageSet?.block}} + + +
+ + +
+ + {{ currentLanguageSet?.village}} + + +
+ + + + + + + + + + + + + + + + +
+ + {{ currentLanguageSet?.healthBlock}} + + +
+ +
+ + {{ currentLanguageSet?.phcName}} + + +
+ +
+ + {{ + currentLanguageSet?.subFacilitySubCentres}} + + +
+ + + + + +
+ + {{ currentLanguageSet?.phoneNumber}} + + +
+ +
+ + {{ currentLanguageSet?.phoneNumOfWhom}} + + + {{ number.name }} + + + +
+ +
+ + {{ currentLanguageSet?.alternatePhoneNum}} + + +
+ +
+ + {{ currentLanguageSet?.ashaName}} + + +
+ +
+ + {{ currentLanguageSet?.ashaPhoneNum}} + + +
+ +
+ + {{ currentLanguageSet?.anmName}} + + +
+ +
+ + {{ currentLanguageSet?.anmPhoneNum}} + + +
+ +
+ + {{ currentLanguageSet?.lmp}} + + MM/DD/YYYY + + + +
+
+ + {{ currentLanguageSet?.lmp}} + + MM/DD/YYYY + + + +
+ +
+ + {{ currentLanguageSet?.edd}} + + MM/DD/YYYY + + + +
+
+ + {{ currentLanguageSet?.dob}} + + MM/DD/YYYY + + + +
+ + + +
+ + {{ currentLanguageSet?.ecdCallType}} + + +
+ +
+
+ + {{ currentLanguageSet?.address}} + + +
+
+ +
+ + + + + + + + +
+ + +
+
+
+
\ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index c242bd3..98444fd 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -16,7 +16,7 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * -* You should have received a copy of the GNU General Public License +* You should have received a copy of the GNU General Public License * along with this program. If not, see https://www.gnu.org/licenses/. */ @@ -31,9 +31,8 @@ import { MasterService } from 'src/app/app-modules/services/masterService/master import { LoginserviceService } from 'src/app/app-modules/services/loginservice/loginservice.service'; import * as moment from 'moment'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; -import { VideoConsultationComponent } from '../../video-consultation/video-consultation.component'; import { MatLegacyDialog as MatDialog, MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, MatLegacyDialogRef as MatDialogRef } from '@angular/material/legacy-dialog'; - +import { VideoConsultationService } from '../../video-consultation/videoService'; @Component({ selector: 'app-ben-registration', @@ -83,24 +82,32 @@ import { MatLegacyDialog as MatDialog, MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA // ]; enableUpdateButton = false; minimumDate: any; - showPrompt = false; + // showPrompt = false; + isVideoCallActive = false; + callerPhoneNumber: any; + agentID: any; + agentName: any; + constructor( private fb: FormBuilder, private datePipe: DatePipe, private confirmationService: ConfirmationService, - private associateAnmMoService: AssociateAnmMoService, + public associateAnmMoService: AssociateAnmMoService, private setLanguageService: SetLanguageService, private masterService: MasterService, private loginService: LoginserviceService, readonly sessionstorage: SessionStorageService, public dialog: MatDialog, - + public videoService: VideoConsultationService, ) { } ngOnInit(): void { + this.videoService.videoCallPrompt = true; + // this.isVideoCallActive = this.associateAnmMoService.getIsVideoCallActive(); + this.associateAnmMoService.isBenRegistartionData$.subscribe((responseComp) => { if (responseComp !== null && responseComp === true) { if (this.associateAnmMoService.selectedBenDetails.beneficiaryRegId !== null && @@ -746,6 +753,13 @@ import { MatLegacyDialog as MatDialog, MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA .afterClosed() .subscribe((response) => { if (response) { + this.videoService.setVideoCallData( + true, // or your dynamic video call status + '8147115862', + 'https://meet.jit.si/myroom', + '2002', + 'AnikaECD' + ); this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); } @@ -784,34 +798,14 @@ import { MatLegacyDialog as MatDialog, MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } - performAction() { - this.showPrompt = true; - this.videoConsultationPromptDialog(); + performAction(event :Event) { + + this.videoService.videoCallPrompt = true; + this.videoService.setVideoCallData(true, '8147115862', '', '2002', 'AnikaECD'); + // this.isVideoCallActive = this.associateAnmMoService.getIsVideoCallActive(); + this.callerPhoneNumber = "8147115862"; + this.agentID = "2002"; + this.agentName = sessionStorage.getItem('userName') || 'Default Name'; } - - videoConsultationPromptDialog() { - if (this.loginService.agentId === undefined) { - this.confirmationService.openDialog(this.currentLanguageSet.agentIdNotAvailable, 'error') - } else { - const dialogRef = this.dialog.open(VideoConsultationComponent, { - width: '50%', - height: '90%', - data: { - videoCallPrompt: true, - // callerPhoneNumber: '8147115862', - // agentID: this.loginService.agentId, - // agentName: 'Kundanecd' - callerPhoneNumber: this.benRegistrationForm.controls.phoneNo.value, - agentID: this.loginService.agentId || '', - agentName: this.sessionstorage.getItem('userName') || '' - } - }); - - dialogRef.afterClosed().subscribe(result => { - this.showPrompt = false; - }); - } - - } } \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.html b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.html index 6b0e21f..2f7e75c 100644 --- a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.html +++ b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.html @@ -3,10 +3,12 @@

{{ currentLanguageSet?.ecdQuestionnaire }}

- +
-
+
+
@@ -14,739 +16,403 @@

Beneficiary Details
- - -
+ + +

-
+
Mother Id - +
Mother Name - +
- + Husband's Name - +
Age - +
District Name - +
Health Block - +
PHC Name - +
Sub Facility / Sub Center - +
Village Name - +
Address - +
Phone Number - +
Phone Number of Whom - +
- + Alternate Phone Number - +
Asha Name - +
Asha PhoneNo - +
ANM Name - +
- + ANM PhoneNO - +
LMP Date - +
Expected Deivery Date - +
-
-
- - Child Id - - -
-
- - Child Name - - -
-
- - Mother Id - - -
-
- - Mother Name - - -
-
- - Father Name - - -
-
- - Gender - - -
-
- - District Name - - -
-
- - Health Block - - -
-
- - PHC Name - - -
-
- - Sub Facility / Sub Center - - -
-
- - Village Name - - -
-
- - Address - - -
-
- - Phone Number - - -
-
- - Phone Number of Whom - - -
-
- - Alternate Phone Number - - -
+ +
+ + Child Id + + +
+
+ + Child Name + + +
+
+ + Mother Id + + +
+
+ + Mother Name + + +
+
+ + Father Name + + +
+
+ + Gender + + +
+
+ + District Name + + +
+
+ + Health Block + + +
+
+ + PHC Name + + +
+
+ + Sub Facility / Sub Center + + +
+
+ + Village Name + + +
+
+ + Address + + +
+
+ + Phone Number + + +
+
+ + Phone Number of Whom + + +
+
+ + Alternate Phone Number + + +
-
- - Asha Name - - -
+
+ + Asha Name + + +
-
- - Asha PhoneNo - - -
+
+ + Asha PhoneNo + + +
-
- - ANM Name - - -
+
+ + ANM Name + + +
-
- - ANM PhoneNO - - -
+
+ + ANM PhoneNO + + +
-
- - Date of birth - - -
-
+
+ + Date of birth + + +
+
- +
- -
- - {{section.sectionName}} - - -
-
  • {{ques.question}}
  • -
    - -
    -
  • {{ques.question}} - - -
    -
    - - - - Please enter mandatory field - - - - - Please enter mandatory field - - - - - Please enter mandatory field - - - - - {{ option.options }} - - - - Please enter mandatory field - - - - - Please enter mandatory field - - - - - - {{option.options}} - - Please enter mandatory field - - - - - - - - {{ option.options }} - - - - Please enter mandatory field - - - - - - - - - - + +
    + + {{section.sectionName}} + + +
    +
  • {{ques.question}}
  • +
    + +
    +
  • {{ques.question}} + + +
    +
    + + + + Please + enter mandatory field + + + + + Please + enter mandatory field + + + + + Please + enter mandatory field + + + + + {{ option.options }} + + + + Please + enter mandatory field + + + + + Please + enter mandatory field + + + + + + {{option.options}} + + Please + enter mandatory field + + + + + + + + {{ option.options }} + + + + Please + enter mandatory field + + + + +
    +
    +
  • - +
    +
    + +
    - -
    - - -
    -
    -
    -
    + + +
    -
    @@ -759,13 +425,448 @@

    - - + +
    +
    +
    +
    + + + + + +
    + +
    + + + + Beneficiary Details +
    + + +
    +
    +
    + +
    +
    + + Mother Id + + +
    +
    + + Mother Name + + +
    +
    + + Husband's Name + + +
    +
    + + Age + + +
    +
    + + District Name + + +
    +
    + + Health Block + + +
    +
    + + PHC Name + + +
    +
    + + Sub Facility / Sub Center + + +
    +
    + + Village Name + + +
    +
    + + Address + + +
    +
    + + Phone Number + + +
    +
    + + Phone Number of Whom + + +
    +
    + + Alternate Phone Number + + +
    + +
    + + Asha Name + + +
    + +
    + + Asha PhoneNo + + +
    + +
    + + ANM Name + + +
    + +
    + + ANM PhoneNO + + +
    + +
    + + LMP Date + + +
    + +
    + + Expected Deivery Date + + +
    +
    +
    +
    + + Child Id + + +
    +
    + + Child Name + + +
    +
    + + Mother Id + + +
    +
    + + Mother Name + + +
    +
    + + Father Name + + +
    +
    + + Gender + + +
    +
    + + District Name + + +
    +
    + + Health Block + + +
    +
    + + PHC Name + + +
    +
    + + Sub Facility / Sub Center + + +
    +
    + + Village Name + + +
    +
    + + Address + + +
    +
    + + Phone Number + + +
    +
    + + Phone Number of Whom + + +
    +
    + + Alternate Phone Number + + +
    + +
    + + Asha Name + + +
    + +
    + + Asha PhoneNo + + +
    + +
    + + ANM Name + + +
    + +
    + + ANM PhoneNO + + +
    + +
    + + Date of birth + + +
    +
    +
    +
    +
    +
    +
    + +
    + +
    + +
    + + {{section.sectionName}} + + +
    +
  • {{ques.question}}
  • +
    + +
    +
  • {{ques.question}} + + +
    +
    + + + + Please + enter mandatory field + + + + + Please + enter mandatory field + + + + + Please + enter mandatory field + + + + + {{ option.options }} + + + + Please + enter mandatory field + + + + + Please + enter mandatory field + + + + + + {{option.options}} + + Please + enter mandatory field + + + + + + + + {{ option.options }} + + + + Please + enter mandatory field + + + + +
    +
    +
  • +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + +
    + + Questionnaires not mapped against the call type + +
    + +
    + + +
    + +
    +
    +
    +
    \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts index 642621c..5be9a17 100644 --- a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts +++ b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts @@ -35,6 +35,8 @@ import { BeneficiaryCallHistoryComponent } from '../beneficiary-call-history/ben import { CallClosureComponent } from '../call-closure/call-closure.component'; import { HighRiskReasonsComponent } from '../high-risk-reasons/high-risk-reasons.component'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; +import { VideoConsultationService } from '../video-consultation/videoService'; +import { VideoConsultationServices } from '../../services/associate-anm-mo/video-consultation'; @Component({ @@ -79,19 +81,18 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { benData: any; disableFields: any = true; formattedDOB = ''; - constructor( private setLanguageService: SetLanguageService, private fb: FormBuilder, private elementRef: ElementRef, - private associateAnmMoService: AssociateAnmMoService, + public associateAnmMoService: AssociateAnmMoService, private confirmationService: ConfirmationService, public dialog: MatDialog, private masterService: MasterService, private changeDetectorRefs: ChangeDetectorRef, readonly sessionstorage:SessionStorageService, - + public videoService: VideoConsultationService, ) { } beneficiaryMotherDataForm = this.fb.group({ @@ -142,7 +143,15 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { ngOnInit(): void { this.getSelectedLanguage(); this.role = this.sessionstorage.getItem('role') + + this.videoService.isMeetAvailable = true; + + if (this.videoService.callStatus === 'Ongoing' && this.videoService.meetLink) { + this.videoService.isMeetAvailable = true; + } + this.associateAnmMoService.loadEcdQuestionnaireData$.subscribe(res => { + if(res === true){ if(this.associateAnmMoService.selectedBenDetails){ this.benData = this.associateAnmMoService.selectedBenDetails; @@ -174,6 +183,7 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { // this.getHrniMaster(); // this.getCongentialAnomaliesMaster(); this.associateAnmMoService.openCompFlag$.subscribe((responseComp) => { + if (responseComp !== null && responseComp === "Call Closed") { this.filteredQuesData = []; this.enableHrpReasons = false; @@ -195,7 +205,7 @@ export class EcdQuestionnaireComponent implements OnInit, AfterViewInit { this.step = 0; this.page = 0; this.myStepper.selectedIndex = 0; - } + } }); } From e0feee6246b90a15cc9fd134e3c0944104c6a36b Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Mon, 21 Apr 2025 12:06:09 +0530 Subject: [PATCH 093/134] added floating video component and jitsi wrapper. --- package-lock.json | 178 +++++++++++--- package.json | 1 + .../floating-video.component.css | 29 +++ .../floating-video.component.html | 5 + .../floating-video.component.ts | 68 ++++++ .../video-consultation.component.css | 20 +- .../video-consultation.component.html | 76 +++--- .../video-consultation.component.ts | 229 +++++++----------- .../video-consultation.model.ts | 27 --- .../video-consultation/videoService.ts | 76 ++++++ src/index.html | 2 + 11 files changed, 460 insertions(+), 251 deletions(-) create mode 100644 src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css create mode 100644 src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.html create mode 100644 src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts delete mode 100644 src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.model.ts create mode 100644 src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts diff --git a/package-lock.json b/package-lock.json index 6670486..0a60a29 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@angular/platform-browser": "^16.2.0", "@angular/platform-browser-dynamic": "^16.2.0", "@angular/router": "^16.2.12", + "@types/jitsi-meet": "^2.0.5", "angular-disable-browser-back-button": "^2.0.0", "bootstrap": "^5.2.3", "crypto-js": "^4.2.0", @@ -4761,6 +4762,17 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@schematics/angular": { "version": "16.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.12.tgz", @@ -5103,6 +5115,12 @@ "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", "dev": true }, + "node_modules/@types/jitsi-meet": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/jitsi-meet/-/jitsi-meet-2.0.5.tgz", + "integrity": "sha512-rlYDoTolCfuvgU/Zg936+jIJHvMSXIH2l9bHkBVH3J3WzSECwsVu9LbhUc5FTXtFy1uENXwTxVVtQqCs7WiDkA==", + "license": "MIT" + }, "node_modules/@types/jquery": { "version": "3.5.16", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz", @@ -5118,6 +5136,13 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/luxon": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz", + "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==", + "license": "MIT", + "peer": true + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -11761,6 +11786,16 @@ "yallist": "^3.0.2" } }, + "node_modules/luxon": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", + "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/magic-string": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", @@ -18424,7 +18459,8 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true + "dev": true, + "requires": {} }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", @@ -20521,7 +20557,8 @@ "version": "16.2.14", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.14.tgz", "integrity": "sha512-3+zPP3Wir46qrZ3FEiTz5/emSoVHYUCH+WgBmJ57mZCx1qBOYh2VgllnPr/Yusl1sc/jUZjdwq/es/9ZNw+zDQ==", - "dev": true + "dev": true, + "requires": {} }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -20818,6 +20855,12 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true + }, "@schematics/angular": { "version": "16.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.12.tgz", @@ -21114,6 +21157,11 @@ "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", "dev": true }, + "@types/jitsi-meet": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/jitsi-meet/-/jitsi-meet-2.0.5.tgz", + "integrity": "sha512-rlYDoTolCfuvgU/Zg936+jIJHvMSXIH2l9bHkBVH3J3WzSECwsVu9LbhUc5FTXtFy1uENXwTxVVtQqCs7WiDkA==" + }, "@types/jquery": { "version": "3.5.16", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz", @@ -21129,6 +21177,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/luxon": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz", + "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==", + "peer": true + }, "@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -21365,7 +21419,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", - "dev": true + "dev": true, + "requires": {} }, "@webassemblyjs/ast": { "version": "1.12.1", @@ -21671,13 +21726,15 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -22129,7 +22186,8 @@ "bootstrap": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==" + "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", + "requires": {} }, "brace-expansion": { "version": "2.0.1", @@ -23133,6 +23191,7 @@ "@types/crypto-js": "^4.1.1", "@types/file-saver": "^2.0.5", "@types/jasmine": "~4.0.0", + "@types/jitsi-meet": "^2.0.5", "@types/jquery": "^3.5.16", "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", @@ -24156,7 +24215,8 @@ "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true + "dev": true, + "requires": {} }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.18.6", @@ -26253,7 +26313,8 @@ "version": "16.2.14", "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.14.tgz", "integrity": "sha512-3+zPP3Wir46qrZ3FEiTz5/emSoVHYUCH+WgBmJ57mZCx1qBOYh2VgllnPr/Yusl1sc/jUZjdwq/es/9ZNw+zDQ==", - "dev": true + "dev": true, + "requires": {} }, "@nodelib/fs.scandir": { "version": "2.1.5", @@ -26550,6 +26611,12 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true + }, "@schematics/angular": { "version": "16.2.12", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.12.tgz", @@ -26846,6 +26913,11 @@ "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", "dev": true }, + "@types/jitsi-meet": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/jitsi-meet/-/jitsi-meet-2.0.5.tgz", + "integrity": "sha512-rlYDoTolCfuvgU/Zg936+jIJHvMSXIH2l9bHkBVH3J3WzSECwsVu9LbhUc5FTXtFy1uENXwTxVVtQqCs7WiDkA==" + }, "@types/jquery": { "version": "3.5.16", "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz", @@ -26861,6 +26933,12 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/luxon": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz", + "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==", + "peer": true + }, "@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -27097,7 +27175,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", - "dev": true + "dev": true, + "requires": {} }, "@webassemblyjs/ast": { "version": "1.12.1", @@ -27403,13 +27482,15 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true + "dev": true, + "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "requires": {} }, "acorn-walk": { "version": "7.2.0", @@ -27861,7 +27942,8 @@ "bootstrap": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==" + "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", + "requires": {} }, "brace-expansion": { "version": "2.0.1", @@ -29342,7 +29424,8 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-prettier": { "version": "5.1.3", @@ -30310,7 +30393,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.2.1", @@ -30943,7 +31027,8 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -31188,7 +31273,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", - "dev": true + "dev": true, + "requires": {} }, "karma-source-map-support": { "version": "1.4.0", @@ -31790,6 +31876,12 @@ "yallist": "^3.0.2" } }, + "luxon": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", + "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", + "peer": true + }, "magic-string": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", @@ -33399,7 +33491,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.4", @@ -34947,7 +35040,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -35121,7 +35215,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true + "dev": true, + "requires": {} }, "tsconfig-paths": { "version": "4.2.0", @@ -35573,7 +35668,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -35662,7 +35758,8 @@ "version": "8.17.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -35842,7 +35939,8 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "3.0.0", @@ -36440,7 +36538,8 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-prettier": { "version": "5.1.3", @@ -37408,7 +37507,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "requires": {} }, "ieee754": { "version": "1.2.1", @@ -38041,7 +38141,8 @@ "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -38286,7 +38387,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", - "dev": true + "dev": true, + "requires": {} }, "karma-source-map-support": { "version": "1.4.0", @@ -38888,6 +38990,12 @@ "yallist": "^3.0.2" } }, + "luxon": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", + "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", + "peer": true + }, "magic-string": { "version": "0.30.1", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", @@ -40497,7 +40605,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.4", @@ -42045,7 +42154,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -42219,7 +42329,8 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true + "dev": true, + "requires": {} }, "tsconfig-paths": { "version": "4.2.0", @@ -42671,7 +42782,8 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "json-schema-traverse": { "version": "0.4.1", @@ -42760,7 +42872,8 @@ "version": "8.17.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.0.tgz", "integrity": "sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==", - "dev": true + "dev": true, + "requires": {} } } }, @@ -42940,7 +43053,8 @@ "version": "8.11.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "dev": true + "dev": true, + "requires": {} }, "xml-name-validator": { "version": "3.0.0", diff --git a/package.json b/package.json index 95bc287..921e383 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@angular/platform-browser": "^16.2.0", "@angular/platform-browser-dynamic": "^16.2.0", "@angular/router": "^16.2.12", + "@types/jitsi-meet": "^2.0.5", "angular-disable-browser-back-button": "^2.0.0", "bootstrap": "^5.2.3", "crypto-js": "^4.2.0", diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css new file mode 100644 index 0000000..00b4c5f --- /dev/null +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css @@ -0,0 +1,29 @@ +.floating-video { + position: fixed; + bottom: 20px; + right: 20px; + width: 500px; + height: 500px; + background: white; + z-index: 9999; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); + border-radius: 8px; + overflow: hidden; + } + + #jitsi-container { + width: 100%; + height: 100%; + } + + .close-btn { + position: absolute; + top: 4px; + right: 6px; + background: transparent; + border: none; + font-size: 20px; + z-index: 1000; + cursor: pointer; + } + \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.html b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.html new file mode 100644 index 0000000..c7b87e6 --- /dev/null +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.html @@ -0,0 +1,5 @@ +
    + +
    +
    + \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts new file mode 100644 index 0000000..90542b4 --- /dev/null +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts @@ -0,0 +1,68 @@ +import { + Component, + AfterViewInit, + ElementRef, + ViewChild + } from '@angular/core'; +import { VideoConsultationService } from '../video-consultation/videoService'; + + declare var JitsiMeetExternalAPI: any; + + @Component({ + selector: 'app-floating-video', + templateUrl: './floating-video.component.html', + styleUrls: ['./floating-video.component.css'] + }) + export class FloatingVideoComponent implements AfterViewInit { + @ViewChild('jitsiContainer', { static: true }) jitsiContainerRef!: ElementRef; + + constructor(public videoService: VideoConsultationService) {} + + ngAfterViewInit(): void { + const container = this.jitsiContainerRef?.nativeElement; + + if (!this.videoService.apiInitialized || container?.childElementCount === 0 && this.videoService.meetLink) { + this.initializeJitsi(); + } + } + + initializeJitsi(): void { + console.error('Initializing Jitsi in:', this.jitsiContainerRef?.nativeElement); + + if (!this.jitsiContainerRef?.nativeElement) { + console.error('Jitsi container not available'); + return; + } + + this.videoService.apiInitialized = true; // Add this flag to prevent double init + + const domain = 'meet.jit.si'; + const options = { + roomName: this.videoService.meetLink.split('/').pop(), + parentNode: this.jitsiContainerRef.nativeElement, + // parentNode: document.querySelector('#jitsi-container'), + userInfo: { + displayName: 'Agent' + }, + configOverwrite: { + startWithAudioMuted: false, + startWithVideoMuted: false, + prejoinPageEnabled: false, + disableModeratorIndicator: true + }, + interfaceConfigOverwrite: { + SHOW_JITSI_WATERMARK: false, + SHOW_BRAND_WATERMARK: false, + disableDeepLinking: true + } + }; + + const api = new JitsiMeetExternalAPI(domain, options); + api.addListener('readyToClose', () => this.close()); + } + + close(): void { + this.videoService.reset(); + } + } + \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css index f1a3b9a..50e4f97 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css @@ -184,15 +184,6 @@ button[disabled] { margin-bottom: 20px; } -.btn { - padding: 10px 20px; - margin: 0 10px; - border: none; - border-radius: 5px; - cursor: pointer; - transition: background-color 0.3s ease; -} - .btn-success { background-color: #28a745; color: white; @@ -229,11 +220,20 @@ button[disabled] { } #jitsi-container { + height: 600px; + width: 100%; + background: #eee; /* Optional for debug */ +} +/* #jitsi-container { width: 100%; height: 500px; border: none; -} +} */ +:host ::ng-deep .jitsi-iframe { + width: 100% !important; + height: 100% !important; +} /* Ensure the button appears below the video nicely */ .end-call-button { display: block; diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html index 82030b7..2db6971 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html @@ -1,11 +1,9 @@ -
    - - - - @@ -25,79 +23,81 @@

    Video Consultation Consent

    -
    -

    Note: We are continuing the video consultation on agreeing by Beneficiary.

    +
    +

    Note: We are continuing the video consultation on agreeing by Beneficiary.

    Video Consultation

    - - diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts index d91372f..cb42aa2 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts @@ -1,27 +1,20 @@ -import { Component, Inject, Input, Optional, Output } from '@angular/core'; +import { + Component, ElementRef, EventEmitter, Input, Output, + ViewChild +} from '@angular/core'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; import { MatSnackBar } from '@angular/material/snack-bar'; -import { - MatLegacyDialog as MatDialog, - MatLegacyDialogRef as MatDialogRef, - MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, -} from '@angular/material/legacy-dialog'; import { AssociateAnmMoService } from '../../services/associate-anm-mo/associate-anm-mo.service'; import { SmsTemplateService } from '../../services/smsTemplate/sms-template.service'; import { LoginserviceService } from '../../services/loginservice/loginservice.service'; import { map, switchMap } from 'rxjs/operators'; +import { VideoConsultationService } from './videoService'; +import { VideoConsultationServices } from '../../services/associate-anm-mo/video-consultation'; declare var JitsiMeetExternalAPI: any; -interface VideoConsultationDialogData { - videoCallPrompt: boolean; - callerPhoneNumber: string; - agentID: string; - agentName: string; -} - interface VideoCallRequest { - dateOfCall: string; // ISO 8601 string recommended + dateOfCall: string; callerPhoneNumber: string; agentID: string; agentName: string; @@ -33,32 +26,31 @@ interface VideoCallRequest { } interface VideocallStatusUpdate { - meetingLink: string, - callStatus: string, - callDuration: string, - modifiedBy: string + meetingLink: string; + callStatus: string; + callDuration: string; + modifiedBy: string; } + @Component({ selector: 'app-video-consultation', templateUrl: './video-consultation.component.html', styleUrls: ['./video-consultation.component.css'] }) +export class VideoConsultationComponent { + @ViewChild('jitsiContainer', { static: false }) jitsiContainerRef!: ElementRef; + @Input() callerPhoneNumber!: string; + @Input() agentID!: string; + @Input() agentName!: string; + @Input() videoCallPrompt: boolean = false; + @Output() close = new EventEmitter(); -export class VideoConsultationComponent { - // consent: boolean | null = null; - linkSent = false; - linkStatus = ''; - receiptConfirmation = ''; - callStatus: 'Not Initiated' | 'Ongoing' | 'Completed' = 'Not Initiated'; - linkResend = 'Sent'; - videoConsultationAvailable = false; - meetLink = ''; - isMeetAvailable = false; - SMSStatus = ''; + // meetLink = ''; callStartTime: Date | null = null; callEndTime: Date | null = null; + SMSStatus = ''; constructor( private associateAnmMoService: AssociateAnmMoService, @@ -66,187 +58,139 @@ export class VideoConsultationComponent { private loginService: LoginserviceService, readonly sessionstorage: SessionStorageService, private snackBar: MatSnackBar, - public dialogRef: MatDialogRef, - @Inject(MAT_DIALOG_DATA) public data: VideoConsultationDialogData, - ){} + public videoService: VideoConsultationService, + ) { } - sendOrResendLink(): void { + sendOrResendLink(): void { this.associateAnmMoService.generateLink().subscribe({ next: (response: any) => { - this.linkSent = true; - this.meetLink = response.meetingLink; - this.linkStatus = 'Sent Successfully'; + this.videoService.linkSent = true; + this.videoService.meetLink = response.meetingLink; + this.videoService.linkStatus = 'Sent Successfully'; - this.send_sms(this.meetLink, "8754969836"); + this.send_sms(this.videoService.meetLink, this.callerPhoneNumber); }, error: () => { - this.linkStatus = 'Failed to send'; + // this.videoService.linkStatus = 'Failed to send'; + this.videoService.linkStatus = 'Sent Successfully'; + } }); } - startConsultation() { + startConsultation(): void { this.callStartTime = new Date(); + this.videoService.callStatus = 'Ongoing'; + this.videoService.isMeetAvailable = true; + + //test + const meetLink = 'https://meet.jit.si/oIYoMJbO'; // or generate dynamically + this.videoService.startFloatingCall(meetLink); + this.videoService.showFloatingVideo = true; - this.callStatus = 'Ongoing'; - this.isMeetAvailable = true; this.snackBar.open('Call has started', 'Close', { duration: 3000, verticalPosition: 'top', panelClass: ['snackbar-success'] }); - - setTimeout(() => { - const domain = 'meet.jit.si'; - const options = { - roomName: this.meetLink.split('/').pop(), // gets the last part of the link - parentNode: document.querySelector('#jitsi-container'), - userInfo: { - displayName: this.sessionstorage.getItem('userName') || 'Agent' - }, - configOverwrite: { - startWithAudioMuted: false, - startWithVideoMuted: false - }, - interfaceConfigOverwrite: { - SHOW_JITSI_WATERMARK: false, - SHOW_BRAND_WATERMARK: false, - disableDeepLinking: true - } - }; - const api = new JitsiMeetExternalAPI(domain, options); - - api.addListener('readyToClose', () => { - console.log("User disconnected / call ended"); - this.endConsultation(); // Your custom logic - }); - }, 0); - this.saveVideoCallRequest(this.meetLink, "Initiated"); + this.saveVideoCallRequest(this.videoService.meetLink, 'Initiated'); } endConsultation(): void { - this.callStatus = 'Completed'; this.callEndTime = new Date(); - + this.videoService.callStatus = 'Completed'; + this.videoService.setVideoCallData( + false, '', '', '', '') const callDuration = this.calculateCallDuration(); - - const smsRequest: VideocallStatusUpdate = { - "meetingLink": this.meetLink, - "callStatus": "COMPLETED", - "callDuration": callDuration, - "modifiedBy": this.sessionstorage.getItem('userName') + const updateRequest: VideocallStatusUpdate = { + meetingLink: this.videoService.meetLink, + callStatus: 'COMPLETED', + callDuration, + modifiedBy: this.sessionstorage.getItem('userName') }; - this.associateAnmMoService.updateCallStatus(smsRequest).subscribe({ + this.associateAnmMoService.updateCallStatus(updateRequest).subscribe({ next: () => { - this.SMSStatus = 'Call record updated successfully'; + this.videoService.SMSStatus = 'Call record updated successfully'; }, error: () => { - this.SMSStatus = 'Failed to update call record'; + this.videoService.SMSStatus = 'Failed to update call record'; } }); - this.data.videoCallPrompt = false; - this.dialogRef?.close(); - - this.resetLinkState(); - } - - private resetLinkState(): void { - this.linkSent = false; - this.linkStatus = ''; - this.receiptConfirmation = ''; - this.isMeetAvailable = false; - this.meetLink = ''; + this.videoService.reset(); + this.close.emit(); } updateReceiptConfirmation(event: Event): void { - const target = event.target as HTMLSelectElement; - this.receiptConfirmation = target.value; + const value = (event.target as HTMLSelectElement).value; + this.videoService.receiptConfirmation = value; - if (target.value === 'Not Received') { - this.linkStatus = 'Not Sent'; + if (value === 'Not Received') { + this.videoService.linkStatus = 'Not Sent'; } } - - handleConsent(agreed: boolean) { - if (agreed === true) { - this.videoConsultationAvailable = true; - } else { - this.dialogRef?.close(); - } + handleConsent(agreed: boolean): void { + this.videoService.videoConsultationAvailable = agreed; } - send_sms(smsAdvice: string, phoneNo: string): void { + send_sms(link: string, phoneNo: string): void { const currentServiceID = this.loginService.currentServiceId; this.sms_service.getSMStypes(currentServiceID).pipe( - map((response: any) => { - const adviceType = response?.data?.find((type: any) => - type.smsType === "Video Consultation" - ); - return adviceType?.smsTypeID || null; - }), + map((res: any) => res?.data?.find((t: any) => t.smsType === 'Video Consultation')?.smsTypeID), switchMap((smsTypeID: string | null) => { - if (!smsTypeID) throw new Error("Video Consultation type not found"); + if (!smsTypeID) throw new Error('Video Consultation type not found'); return this.sms_service.getSMStemplates(1714, smsTypeID).pipe( - map((res: any) => { - const template = res?.data?.find((tpl: any) => !tpl.deleted); - return { - smsTemplateID: template?.smsTemplateID || null, - smsTemplateTypeID: smsTypeID - }; - }) + map((res: any) => ({ + smsTemplateID: res?.data?.find((tpl: any) => !tpl.deleted)?.smsTemplateID, + smsTemplateTypeID: smsTypeID + })) ); }), switchMap(({ smsTemplateID, smsTemplateTypeID }) => { - if (!smsTemplateID) throw new Error("Valid SMS template not found"); - + if (!smsTemplateID) throw new Error('Valid SMS template not found'); const reqObj = { - sms_Advice: smsAdvice, - phoneNo: phoneNo, + sms_Advice: link, + phoneNo, createdBy: this.sessionstorage.getItem('userName'), is1097: false, providerServiceMapID: this.sessionstorage.getItem('providerServiceMapID'), smsTemplateID, smsTemplateTypeID }; - return this.sms_service.sendSMS([reqObj]); }) ).subscribe({ - next: (response) => { - console.log("SMS Sent", response); + next: () => { this.snackBar.open('SMS sent successfully', 'Close', { duration: 3000, verticalPosition: 'top', panelClass: ['snackbar-success'] }); - this.saveVideoCallRequest(this.meetLink, "Initiated"); + this.saveVideoCallRequest(link, 'Initiated'); }, error: (err) => { - console.log("Error sending SMS:", err.message || err); + console.error('Error sending SMS:', err); this.snackBar.open('SMS not sent', 'Close', { - duration: 3000, // milliseconds - verticalPosition: 'top', // or 'bottom' - panelClass: ['snackbar-error'] // optional: for custom styling + duration: 3000, + verticalPosition: 'top', + panelClass: ['snackbar-error'] }); - // alert("SMS not sent"); } }); } - - saveVideoCallRequest(meetLink: string, status: string) { + saveVideoCallRequest(link: string, status: string): void { const request: VideoCallRequest = { dateOfCall: new Date().toISOString(), - callerPhoneNumber: this.data.callerPhoneNumber, - agentID: this.data.agentID, - agentName: this.data.agentName, - meetingLink: meetLink, + callerPhoneNumber: this.callerPhoneNumber, + agentID: this.agentID, + agentName: this.agentName, + meetingLink: link, callStatus: status, callDuration: '0', providerServiceMapID: this.sessionstorage.getItem('providerServiceMapID'), @@ -254,20 +198,17 @@ export class VideoConsultationComponent { }; this.associateAnmMoService.sendLink(request).subscribe({ - next: () => this.SMSStatus = 'SMS Sent Successfully', - error: () => this.SMSStatus = 'Failed to send SMS' + next: () => this.videoService.SMSStatus = 'SMS Sent Successfully', + error: () => this.videoService.SMSStatus = 'Failed to send SMS' }); } - calculateCallDuration() { + calculateCallDuration(): string { if (!this.callStartTime || !this.callEndTime) return '0'; - - const diffInMs = this.callEndTime.getTime() - this.callStartTime.getTime(); - const totalSeconds = Math.floor(diffInMs / 1000); - + const totalSeconds = Math.floor((this.callEndTime.getTime() - this.callStartTime.getTime()) / 1000); const minutes = Math.floor(totalSeconds / 60); const seconds = totalSeconds % 60; - return `${minutes}m ${seconds}s`; } + } diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.model.ts b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.model.ts deleted file mode 100644 index 1d18465..0000000 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.model.ts +++ /dev/null @@ -1,27 +0,0 @@ -// src/app/models/video-consultation.model.ts -export enum ConsentStatus { - PENDING = 'PENDING', - AGREED = 'AGREED', - DECLINED = 'DECLINED' - } - - export enum LinkStatus { - NOT_SENT = 'NOT_SENT', - SENT = 'SENT', - FAILED = 'FAILED' - } - - export enum ConsultationStatus { - NOT_INITIATED = 'NOT_INITIATED', - ONGOING = 'ONGOING', - COMPLETED = 'COMPLETED' - } - - export interface VideoConsultation { - beneficiaryId: string; - consentStatus: ConsentStatus; - linkStatus: LinkStatus; - linkReceiptConfirmed: boolean; - consultationStatus: ConsultationStatus; - videoLink?: string; - } \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts b/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts new file mode 100644 index 0000000..771eab0 --- /dev/null +++ b/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts @@ -0,0 +1,76 @@ +import { Injectable } from "@angular/core"; + +@Injectable({ providedIn: 'root' }) +export class VideoConsultationService { + videoCallPrompt = false; + videoConsultationAvailable = false; + linkSent = false; + linkStatus = 'Sent Successfully'; + receiptConfirmation: string = ''; + callStatus: 'Not Initiated' | 'Ongoing' | 'Completed' = 'Not Initiated'; + isMeetAvailable = false; + meetLink = "https://meet.jit.si/oIYoMJbO"; + SMSStatus = ''; + apiInitialized = false; + showFloatingVideo = false; + isVideoCallActive = false; + callerPhoneNumber= ''; + agentID= ''; + agentName= ''; + + // Add methods if needed to update status or reset + reset() { + console.error("Resetting video consultation service"); + this.videoCallPrompt = false; + this.videoConsultationAvailable = false; + this.linkSent = false; + this.linkStatus = 'NOT Sent'; + this.receiptConfirmation = ''; + this.callStatus = 'Not Initiated'; + this.isMeetAvailable = false; + this.meetLink = ''; + this.SMSStatus = ''; + this.showFloatingVideo = false; + this.apiInitialized = false; + this.isVideoCallActive = false; + + } + + reinitializeJitsi() { + this.apiInitialized = false; + this.isMeetAvailable = true; + } + + startFloatingCall(link: string) { + this.meetLink = link; + this.showFloatingVideo = true; + this.apiInitialized = false; + } + + setVideoCallData(isVideoCallActive: boolean, phoneNumber:any, meetLink: any, agentID: any, name: any) { + this.isVideoCallActive = isVideoCallActive; + this.callerPhoneNumber = phoneNumber; + this.meetLink = meetLink; + this.agentID = agentID; + this.agentName = name; + } + + // Getters + getIsVideoCallActive() { + return this.isVideoCallActive; + } + getMeetLink() { + return this.meetLink; + } + getAgentId() { + return this.agentID; + } + getAgentName() { + return this.agentName; + } + getCallerPhoneNumber() { + return this.callerPhoneNumber; + } + +} + diff --git a/src/index.html b/src/index.html index 05a947d..85166cf 100644 --- a/src/index.html +++ b/src/index.html @@ -35,6 +35,8 @@ rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.css" /> --> + + Loading... From d83533ad494c526b0956aa9b3992f035e0529510 Mon Sep 17 00:00:00 2001 From: Brijeshthummar02 Date: Mon, 21 Apr 2025 16:35:45 +0530 Subject: [PATCH 094/134] fix(docs): improve formatting and clarity in markdown files and updated developer guide link --- CODE_OF_CONDUCT.md | 4 ++-- CONTRIBUTING.md | 13 +++++++++---- README.md | 9 +++++---- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 06f0dc7..9a5f17e 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -118,11 +118,11 @@ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0]. -Community Impact Guidelines were inspired by +Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. For answers to common questions about this code of conduct, see the FAQ at -[https://www.contributor-covenant.org/faq][FAQ]. Translations are available +[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dc34fb9..42e12a0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,21 +3,25 @@ AMRIT is released under the GPLv3 license. If you would like to contribute something, or want to hack on the code this document should help you get started. # Code of Conduct + This project adheres to the [Contributor Covenant](CODE_OF_CONDUCT.md). -By participating, you are expected to uphold this code. Please report unacceptable behavior to amrit@piramalswasthya.org. +By participating, you are expected to uphold this code. Please report unacceptable behavior to . # Using GitHub Issues + We use GitHub issues to track bugs and enhancements reported by the community. -If you have a general usage question please ask on amrit@piramalswasthya.org. +If you have a general usage question please ask on . If you are reporting a bug, please help to speed up problem diagnosis by providing as much information as possible. Ideally, that would include a small sample project that reproduces the problem. # Reporting Security Vulnerabilities + If you think you have found a security vulnerability in AMRIT please *DO NOT* disclose it publicly until we've had a chance to fix it. -Please don't report security vulnerabilities using GitHub issues, instead drop an email to amrit@piramalswasthya.org by providing as much as information as possible. +Please don't report security vulnerabilities using GitHub issues, instead drop an email to by providing as much as information as possible. # Code Conventions and Housekeeping + None of these are essential for a pull request, but they will all help. They can also be added after the original pull request but before a merge. * Make sure all new `.java` files have a Javadoc class comment with at least an `@author` tag identifying you, and preferably at least a paragraph on what the class is for. @@ -29,4 +33,5 @@ None of these are essential for a pull request, but they will all help. They ca * When writing a commit message please follow [these conventions](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html). # Working with the Code -For information on editing, building, and testing the code, see the [developer guide](https://psmri.github.io/PSMRI) page on the project wiki. + +For information on editing, building, and testing the code, see the [developer guide](https://github.com/PSMRI/PSMRI) page on the project wiki. diff --git a/README.md b/README.md index c6a9449..099bc19 100644 --- a/README.md +++ b/README.md @@ -31,10 +31,10 @@ The Early Childhood Development (ECD) Initiative by the Ministry of Health and F This microservice is built using Java and the Spring Boot framework, with MySQL as the underlying database. Before building the ECD module, ensure you have the following prerequisites: -* JDK 17 -* Maven -* Nodejs v18.10.0 -* MySQL +- JDK 17 +- Maven +- Nodejs v18.10.0 +- MySQL ### Installation @@ -51,6 +51,7 @@ To install the ECD module, please follow these steps: ## Building war files To build deployable war files + ```bash mvn -B package --file pom.xml -P ``` From 63ebddb057b2d87b5a29be7285460ac02067af50 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Tue, 22 Apr 2025 10:51:12 +0530 Subject: [PATCH 095/134] removed unused imports --- .../ecd-questionnaire/ecd-questionnaire.component.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts index 5be9a17..2037df4 100644 --- a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts +++ b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.ts @@ -36,7 +36,6 @@ import { CallClosureComponent } from '../call-closure/call-closure.component'; import { HighRiskReasonsComponent } from '../high-risk-reasons/high-risk-reasons.component'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; import { VideoConsultationService } from '../video-consultation/videoService'; -import { VideoConsultationServices } from '../../services/associate-anm-mo/video-consultation'; @Component({ From e5ff5d90b1f54175a3f3233d103720dc5ded7ee7 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Tue, 22 Apr 2025 10:51:43 +0530 Subject: [PATCH 096/134] fixed the floatinf window issue --- .../floating-video.component.css | 45 +++++++++++----- .../floating-video.component.html | 9 +++- .../floating-video.component.ts | 54 +++++++++++++++++-- 3 files changed, 89 insertions(+), 19 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css index 00b4c5f..bb82906 100644 --- a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css @@ -1,29 +1,48 @@ -.floating-video { + .floating-video { position: fixed; - bottom: 20px; - right: 20px; - width: 500px; + width: 400px; height: 500px; background: white; - z-index: 9999; - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2); - border-radius: 8px; + border: 1px solid #ccc; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); + z-index: 10000; + bottom: 20px; + right: 20px; + display: flex; + flex-direction: column; overflow: hidden; + border-radius: 8px; + } + + .drag-header { + height: 40px; + background: #f0f0f0; + cursor: move; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 12px; + font-weight: bold; + user-select: none; + flex-shrink: 0; } #jitsi-container { + flex-grow: 1; width: 100%; height: 100%; } .close-btn { - position: absolute; - top: 4px; - right: 6px; - background: transparent; + background-color: red; + color: white; border: none; - font-size: 20px; - z-index: 1000; + border-radius: 4px; + font-size: 16px; + width: 25px; + height: 25px; cursor: pointer; + line-height: 1; + text-align: center; } \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.html b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.html index c7b87e6..3f0c945 100644 --- a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.html +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.html @@ -1,5 +1,10 @@ -
    - + +
    +
    + Video Call + +
    +
    \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts index 90542b4..82b00b0 100644 --- a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts @@ -2,7 +2,9 @@ import { Component, AfterViewInit, ElementRef, - ViewChild + ViewChild, + HostListener, + ChangeDetectionStrategy } from '@angular/core'; import { VideoConsultationService } from '../video-consultation/videoService'; @@ -11,11 +13,19 @@ import { VideoConsultationService } from '../video-consultation/videoService'; @Component({ selector: 'app-floating-video', templateUrl: './floating-video.component.html', - styleUrls: ['./floating-video.component.css'] + styleUrls: ['./floating-video.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush }) export class FloatingVideoComponent implements AfterViewInit { @ViewChild('jitsiContainer', { static: true }) jitsiContainerRef!: ElementRef; - + @ViewChild('floatingWindow', { static: true }) floatingWindowRef!: ElementRef; + + private isDragging = false; + private offsetX = 0; + private offsetY = 0; + private lastMove = 0; + + constructor(public videoService: VideoConsultationService) {} ngAfterViewInit(): void { @@ -62,7 +72,43 @@ import { VideoConsultationService } from '../video-consultation/videoService'; } close(): void { - this.videoService.reset(); + this.videoService.resetVideoCall(); + } + + startDrag(event: MouseEvent): void { + event.preventDefault(); + this.isDragging = true; + + const rect = this.floatingWindowRef.nativeElement.getBoundingClientRect(); + this.offsetX = event.clientX - rect.left; + this.offsetY = event.clientY - rect.top; + + document.addEventListener('mousemove', this.onDrag); + document.addEventListener('mouseup', this.endDrag); } + + onDrag = (event: MouseEvent) => { + const now = Date.now(); + if (now - this.lastMove < 16) return; // Throttle to ~60fps + this.lastMove = now; + + if (!this.isDragging) return; + + const left = event.clientX - this.offsetX; + const top = event.clientY - this.offsetY; + + const windowElement = this.floatingWindowRef.nativeElement; + windowElement.style.left = `${left}px`; + windowElement.style.top = `${top}px`; + windowElement.style.bottom = 'auto'; + windowElement.style.right = 'auto'; + }; + + + endDrag = () => { + this.isDragging = false; + document.removeEventListener('mousemove', this.onDrag); + document.removeEventListener('mouseup', this.endDrag); + }; } \ No newline at end of file From 05780d1484047aa0fe260f2ed3de6ee58acb0350 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Tue, 22 Apr 2025 10:54:14 +0530 Subject: [PATCH 097/134] code clean up --- .../video-consultation.component.ts | 33 +++++++++---------- .../video-consultation/videoService.ts | 10 ++++-- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts index cb42aa2..6d3bffa 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts @@ -9,9 +9,6 @@ import { SmsTemplateService } from '../../services/smsTemplate/sms-template.serv import { LoginserviceService } from '../../services/loginservice/loginservice.service'; import { map, switchMap } from 'rxjs/operators'; import { VideoConsultationService } from './videoService'; -import { VideoConsultationServices } from '../../services/associate-anm-mo/video-consultation'; - -declare var JitsiMeetExternalAPI: any; interface VideoCallRequest { dateOfCall: string; @@ -47,10 +44,6 @@ export class VideoConsultationComponent { @Output() close = new EventEmitter(); - // meetLink = ''; - callStartTime: Date | null = null; - callEndTime: Date | null = null; - SMSStatus = ''; constructor( private associateAnmMoService: AssociateAnmMoService, @@ -62,7 +55,7 @@ export class VideoConsultationComponent { ) { } - sendOrResendLink(): void { + sendOrResendLink(): void { this.associateAnmMoService.generateLink().subscribe({ next: (response: any) => { this.videoService.linkSent = true; @@ -72,21 +65,23 @@ export class VideoConsultationComponent { this.send_sms(this.videoService.meetLink, this.callerPhoneNumber); }, error: () => { - // this.videoService.linkStatus = 'Failed to send'; - this.videoService.linkStatus = 'Sent Successfully'; + this.videoService.linkStatus = 'Failed to send'; + // this.videoService.linkStatus = 'Sent Successfully'; + // this.send_sms('https://meet.jit.si/oIYoMJbO', '8147115862'); } }); } startConsultation(): void { - this.callStartTime = new Date(); + this.videoService.callStartTime = new Date(); this.videoService.callStatus = 'Ongoing'; this.videoService.isMeetAvailable = true; //test - const meetLink = 'https://meet.jit.si/oIYoMJbO'; // or generate dynamically - this.videoService.startFloatingCall(meetLink); + // const meetLink = 'https://meet.jit.si/oIYoMJbO'; // or generate dynamically + // this.videoService.startFloatingCall(meetLink); + this.videoService.startFloatingCall(this.videoService.meetLink); this.videoService.showFloatingVideo = true; this.snackBar.open('Call has started', 'Close', { @@ -99,11 +94,12 @@ export class VideoConsultationComponent { } endConsultation(): void { - this.callEndTime = new Date(); + this.videoService.callEndTime = new Date(); this.videoService.callStatus = 'Completed'; this.videoService.setVideoCallData( false, '', '', '', '') const callDuration = this.calculateCallDuration(); + const updateRequest: VideocallStatusUpdate = { meetingLink: this.videoService.meetLink, callStatus: 'COMPLETED', @@ -141,7 +137,8 @@ export class VideoConsultationComponent { const currentServiceID = this.loginService.currentServiceId; this.sms_service.getSMStypes(currentServiceID).pipe( - map((res: any) => res?.data?.find((t: any) => t.smsType === 'Video Consultation')?.smsTypeID), + map((res: any) => res?.data?.find((t: any) => t.smsType === 'Call Closure')?.smsTypeID), + // map((res: any) => res?.data?.find((t: any) => t.smsType === 'Video Consultation')?.smsTypeID), switchMap((smsTypeID: string | null) => { if (!smsTypeID) throw new Error('Video Consultation type not found'); return this.sms_service.getSMStemplates(1714, smsTypeID).pipe( @@ -197,15 +194,15 @@ export class VideoConsultationComponent { closureRemark: '' }; - this.associateAnmMoService.sendLink(request).subscribe({ + this.associateAnmMoService.saveVideoCall(request).subscribe({ next: () => this.videoService.SMSStatus = 'SMS Sent Successfully', error: () => this.videoService.SMSStatus = 'Failed to send SMS' }); } calculateCallDuration(): string { - if (!this.callStartTime || !this.callEndTime) return '0'; - const totalSeconds = Math.floor((this.callEndTime.getTime() - this.callStartTime.getTime()) / 1000); + if (!this.videoService.callStartTime || !this.videoService.callEndTime) return '0'; + const totalSeconds = Math.floor((this.videoService.callEndTime.getTime() - this.videoService.callStartTime.getTime()) / 1000); const minutes = Math.floor(totalSeconds / 60); const seconds = totalSeconds % 60; return `${minutes}m ${seconds}s`; diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts b/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts index 771eab0..54e4df0 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts +++ b/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts @@ -1,7 +1,9 @@ import { Injectable } from "@angular/core"; @Injectable({ providedIn: 'root' }) + export class VideoConsultationService { + videoCallPrompt = false; videoConsultationAvailable = false; linkSent = false; @@ -17,6 +19,8 @@ export class VideoConsultationService { callerPhoneNumber= ''; agentID= ''; agentName= ''; + callStartTime: Date | null = null; + callEndTime: Date | null = null; // Add methods if needed to update status or reset reset() { @@ -30,10 +34,12 @@ export class VideoConsultationService { this.isMeetAvailable = false; this.meetLink = ''; this.SMSStatus = ''; - this.showFloatingVideo = false; - this.apiInitialized = false; this.isVideoCallActive = false; + } + resetVideoCall() { + this.showFloatingVideo = false; + this.apiInitialized = false; } reinitializeJitsi() { From 2ae3dfe9724efcbd8e063ab7984c1821e3acf913 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Tue, 22 Apr 2025 11:09:31 +0530 Subject: [PATCH 098/134] removed hardcoded values --- .../ben-registration.component.ts | 21 ++++++++++--------- .../outbound-worklist.component.ts | 6 ++---- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index 98444fd..ca13c2f 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -755,11 +755,11 @@ import { VideoConsultationService } from '../../video-consultation/videoService' if (response) { this.videoService.setVideoCallData( true, // or your dynamic video call status - '8147115862', - 'https://meet.jit.si/myroom', - '2002', - 'AnikaECD' - ); + this.benRegistrationForm.controls.phoneNo.value, + this.videoService.meetLink, + this.loginService.agentId, + sessionStorage.getItem('userName')) + this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); } @@ -801,11 +801,12 @@ import { VideoConsultationService } from '../../video-consultation/videoService' performAction(event :Event) { this.videoService.videoCallPrompt = true; - this.videoService.setVideoCallData(true, '8147115862', '', '2002', 'AnikaECD'); - // this.isVideoCallActive = this.associateAnmMoService.getIsVideoCallActive(); - this.callerPhoneNumber = "8147115862"; - this.agentID = "2002"; - this.agentName = sessionStorage.getItem('userName') || 'Default Name'; + this.videoService.setVideoCallData( + true, // or your dynamic video call status + this.benRegistrationForm.controls.phoneNo.value, + this.videoService.meetLink, + this.loginService.agentId, + sessionStorage.getItem('userName')) } } \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.ts b/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.ts index 91ffc2d..ce1e675 100644 --- a/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.ts +++ b/src/app/app-modules/associate-anm-mo/outbound-worklist/outbound-worklist.component.ts @@ -364,8 +364,7 @@ export class OutboundWorklistComponent implements OnInit, DoCheck, AfterViewInit this.sessionstorage.setItem('agentIp', response.data.agent_ip); this.ctiService - // .callBeneficiaryManual(this.loginService.agentId, phNo) - .callBeneficiaryManual(this.loginService.agentId, 8147115862) + .callBeneficiaryManual(this.loginService.agentId, phNo) .subscribe( (response: any) => { @@ -393,8 +392,7 @@ export class OutboundWorklistComponent implements OnInit, DoCheck, AfterViewInit } else { this.ctiService - // .callBeneficiaryManual(this.loginService.agentId, phNo) - .callBeneficiaryManual(this.loginService.agentId, 8147115862) + .callBeneficiaryManual(this.loginService.agentId, phNo) .subscribe( (response: any) => { From b69b4376c0fb5561f4af2af28cffec43aa12de1d Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Tue, 22 Apr 2025 11:09:57 +0530 Subject: [PATCH 099/134] updated the fuction name --- .../services/associate-anm-mo/associate-anm-mo.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app-modules/services/associate-anm-mo/associate-anm-mo.service.ts b/src/app/app-modules/services/associate-anm-mo/associate-anm-mo.service.ts index a511131..ed2aa90 100644 --- a/src/app/app-modules/services/associate-anm-mo/associate-anm-mo.service.ts +++ b/src/app/app-modules/services/associate-anm-mo/associate-anm-mo.service.ts @@ -260,7 +260,7 @@ export class AssociateAnmMoService { return this.http.post(environment.generateVideoLinkURL, {}); } - sendLink(reqObj: any) { + saveVideoCall(reqObj: any) { return this.http.post(environment.sendSMSAPI, reqObj); } From 9b0711cf13e7815c1189841280538eb704ebb59e Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Tue, 22 Apr 2025 15:17:11 +0530 Subject: [PATCH 100/134] changes suggested by coderabit. --- .../ben-registration.component.html | 906 ++++-------- .../ben-registration.component.ts | 1 - .../ecd-questionnaire.component.html | 1268 ++++++----------- .../floating-video.component.ts | 19 +- .../video-consultation.component.ts | 19 +- .../video-consultation/videoService.ts | 38 +- 6 files changed, 752 insertions(+), 1499 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html index 421ccad..10f0800 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html @@ -10,120 +10,121 @@

    {{currentLanguageSet?.beneficiaryRegistration

    -
    -
    - -
    -
    - - {{ currentLanguageSet?.motherID}} - - -
    - -
    - - {{ currentLanguageSet?.childId}} - - -
    - - -
    - - {{ currentLanguageSet?.childName}} - - -
    - -
    - - {{ currentLanguageSet?.motherName}} - - -
    - -
    - - {{ enableMotherRecord ? currentLanguageSet?.husbandName : - currentLanguageSet?.fatherName }} - - -
    - - - -
    - - {{currentLanguageSet?.gender}} - - - {{ genders.genderName }} - - - -
    - -
    - - {{ currentLanguageSet?.age}} - - -
    -
    - - {{ currentLanguageSet?.age}} - - -
    -
    - - {{ currentLanguageSet?.state}} - - -
    - - -
    - - {{ currentLanguageSet?.district}} - - -
    - -
    - - {{ currentLanguageSet?.block}} - - -
    - - -
    - - {{ currentLanguageSet?.village}} - - -
    - - - - - - - - - -
    - - {{ currentLanguageSet?.motherID}} - - -
    - -
    - - {{ currentLanguageSet?.childId}} - - -
    - - -
    - - {{ currentLanguageSet?.childName}} - - -
    - -
    - - {{ currentLanguageSet?.motherName}} - - -
    - -
    - - {{ enableMotherRecord ? currentLanguageSet?.husbandName : - currentLanguageSet?.fatherName }} - - -
    - - - -
    - - {{currentLanguageSet?.gender}} - - - {{ genders.genderName }} - - - -
    - -
    - - {{ currentLanguageSet?.age}} - - -
    -
    - - {{ currentLanguageSet?.age}} - - -
    -
    - - {{ currentLanguageSet?.state}} - - -
    - - -
    - - {{ currentLanguageSet?.district}} - - -
    - -
    - - {{ currentLanguageSet?.block}} - - -
    - - -
    - - {{ currentLanguageSet?.village}} - - -
    - - - - +
    - +
    - +
    - +
    + +
    + + {{ currentLanguageSet?.anmName}} + + +
    +
    + + {{ currentLanguageSet?.anmPhoneNum}} + + +
    +
    + + {{ currentLanguageSet?.lmp}} + + MM/DD/YYYY + + + +
    +
    + + {{ currentLanguageSet?.lmp}} + + MM/DD/YYYY + + + +
    +
    + + {{ currentLanguageSet?.edd}} + + MM/DD/YYYY + + + +
    +
    + + {{ currentLanguageSet?.dob}} + + MM/DD/YYYY + + + +
    -
    - - {{ currentLanguageSet?.healthBlock}} - - -
    - -
    - - {{ currentLanguageSet?.phcName}} - - -
    - -
    - - {{ - currentLanguageSet?.subFacilitySubCentres}} - - -
    - - - - - -
    - - {{ currentLanguageSet?.phoneNumber}} - - -
    - -
    - - {{ currentLanguageSet?.phoneNumOfWhom}} - - - {{ number.name }} - - - -
    - -
    - - {{ currentLanguageSet?.alternatePhoneNum}} - - -
    - -
    - - {{ currentLanguageSet?.ashaName}} - - -
    - -
    - - {{ currentLanguageSet?.ashaPhoneNum}} - - -
    - -
    - - {{ currentLanguageSet?.anmName}} - - -
    - -
    - - {{ currentLanguageSet?.anmPhoneNum}} - - -
    - -
    - - {{ currentLanguageSet?.lmp}} - - MM/DD/YYYY - - - -
    -
    - - {{ currentLanguageSet?.lmp}} - - MM/DD/YYYY - - - -
    - -
    - - {{ currentLanguageSet?.edd}} - - MM/DD/YYYY - - - -
    -
    - - {{ currentLanguageSet?.dob}} - - MM/DD/YYYY - - - -
    - - - -
    - - {{ currentLanguageSet?.ecdCallType}} - - -
    - -
    -
    - - {{ currentLanguageSet?.address}} - +
    + + {{ currentLanguageSet?.ecdCallType}} +
    -
    -
    +
    +
    + + {{ currentLanguageSet?.address}} + + +
    +
    + +
    + + - + - + + + +
    - {{ currentLanguageSet?.submit}} - - -
    + +
    + +
    +
    + +
    +
    - -
    - - \ No newline at end of file + \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index ca13c2f..bc99b44 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -82,7 +82,6 @@ import { VideoConsultationService } from '../../video-consultation/videoService' // ]; enableUpdateButton = false; minimumDate: any; - // showPrompt = false; isVideoCallActive = false; callerPhoneNumber: any; agentID: any; diff --git a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.html b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.html index 2f7e75c..e09f42d 100644 --- a/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.html +++ b/src/app/app-modules/associate-anm-mo/ecd-questionnaire/ecd-questionnaire.component.html @@ -7,866 +7,448 @@

    (click)="openBenHistory()">Beneficiary Call History -
    -
    - -
    - - - - Beneficiary Details -
    - - -
    -
    -
    - -
    -
    - - Mother Id - - -
    -
    - - Mother Name - - -
    -
    - - Husband's Name - - -
    -
    - - Age - - -
    -
    - - District Name - - -
    -
    - - Health Block - - -
    -
    - - PHC Name - - -
    -
    - - Sub Facility / Sub Center - - -
    -
    - - Village Name - - -
    -
    - - Address - - -
    -
    - - Phone Number - - -
    -
    - - Phone Number of Whom - - -
    -
    - - Alternate Phone Number - - -
    - -
    - - Asha Name - - -
    - -
    - - Asha PhoneNo - - -
    - -
    - - ANM Name - - -
    - -
    - - ANM PhoneNO - - -
    - -
    - - LMP Date - - -
    - -
    - - Expected Deivery Date - - -
    -
    -
    -
    - - Child Id - - -
    -
    - - Child Name - - -
    -
    - - Mother Id - - -
    -
    - - Mother Name - - -
    -
    - - Father Name - - -
    -
    - - Gender - - -
    -
    - - District Name - - -
    -
    - - Health Block - - -
    -
    - - PHC Name - - -
    -
    - - Sub Facility / Sub Center - - -
    -
    - - Village Name - - -
    -
    - - Address - - -
    -
    - - Phone Number - - -
    -
    - - Phone Number of Whom - - -
    -
    - - Alternate Phone Number - - -
    - -
    - - Asha Name - - -
    - -
    - - Asha PhoneNo - - -
    - -
    - - ANM Name - - -
    - -
    - - ANM PhoneNO - - -
    - -
    - - Date of birth - - -
    -
    -
    -
    -
    -
    -
    - +
    +
    + + +
    + + + + Beneficiary Details +
    + + +
    +
    +
    + +
    +
    + + Mother Id + + +
    +
    + + Mother Name + + +
    +
    + + Husband's Name + + +
    +
    + + Age + + +
    +
    + + District Name + + +
    +
    + + Health Block + + +
    +
    + + PHC Name + + +
    +
    + + Sub Facility / Sub Center + + +
    +
    + + Village Name + + +
    +
    + + Address + + +
    +
    + + Phone Number + + +
    +
    + + Phone Number of Whom + + +
    +
    + + Alternate Phone Number + + +
    + +
    + + Asha Name + + +
    + +
    + + Asha PhoneNo + + +
    + +
    + + ANM Name + + +
    + +
    + + ANM PhoneNO + + +
    + +
    + + LMP Date + + +
    + +
    + + Expected Deivery Date + + +
    +
    +
    +
    + + Child Id + + +
    +
    + + Child Name + + +
    +
    + + Mother Id + + +
    +
    + + Mother Name + + +
    +
    + + Father Name + + +
    +
    + + Gender + + +
    +
    + + District Name + + +
    +
    + + Health Block + + +
    +
    + + PHC Name + + +
    +
    + + Sub Facility / Sub Center + + +
    +
    + + Village Name + + +
    +
    + + Address + + +
    +
    + + Phone Number + + +
    +
    + + Phone Number of Whom + + +
    +
    + + Alternate Phone Number + + +
    + +
    + + Asha Name + + +
    + +
    + + Asha PhoneNo + + +
    + +
    + + ANM Name + + +
    + +
    + + ANM PhoneNO + + +
    + +
    + + Date of birth + + +
    +
    +
    +
    +
    +
    + +
    + +
    + +
    + + {{section.sectionName}} + + +
    +
  • {{ques.question}}
  • +
    + +
    +
  • {{ques.question}} + + +
    +
    + + + + Please + enter mandatory field -
    - -
    - - {{section.sectionName}} - - -
    -
  • {{ques.question}}
  • -
    - -
    -
  • {{ques.question}} - - -
    -
    - - - - Please - enter mandatory field - - - - - Please - enter mandatory field - - - - - Please - enter mandatory field - - - - - {{ option.options }} - - - - Please - enter mandatory field - - - - - Please - enter mandatory field + + + + Please + enter mandatory field - + + + + Please + enter mandatory field - - - {{option.options}} - - Please + + + + {{ option.options }} + + + + Please enter mandatory field - - + + + + Please + enter mandatory field - - - - {{ option.options }} - - - - Please - enter mandatory field + + + + + {{option.options}} + + Please + enter mandatory field + + + + + + + + {{ option.options }} + + + + Please + enter mandatory field - + - + +
    -
  • - + +
    + +
    + +
    - -
    - - -
    - - -
    - -
    - -
    - -
    -
    - -
    - - Questionnaires not mapped against the call type - -
    - -
    - - -
    - -
    - -
    -
    - -
    -
    - - - - - -
    - -
    - - - - Beneficiary Details -
    - - -
    -
    -
    - -
    -
    - - Mother Id - - -
    -
    - - Mother Name - - -
    -
    - - Husband's Name - - -
    -
    - - Age - - -
    -
    - - District Name - - -
    -
    - - Health Block - - -
    -
    - - PHC Name - - -
    -
    - - Sub Facility / Sub Center - - -
    -
    - - Village Name - - -
    -
    - - Address - - -
    -
    - - Phone Number - - -
    -
    - - Phone Number of Whom - - -
    -
    - - Alternate Phone Number - - -
    - -
    - - Asha Name - - -
    - -
    - - Asha PhoneNo - - -
    - -
    - - ANM Name - - -
    - -
    - - ANM PhoneNO - - -
    - -
    - - LMP Date - - -
    - -
    - - Expected Deivery Date - - -
    -
    -
    -
    - - Child Id - - -
    -
    - - Child Name - - -
    -
    - - Mother Id - - -
    -
    - - Mother Name - - -
    -
    - - Father Name - - -
    -
    - - Gender - - -
    -
    - - District Name - - -
    -
    - - Health Block - - -
    -
    - - PHC Name - - -
    -
    - - Sub Facility / Sub Center - - -
    -
    - - Village Name - - -
    -
    - - Address - - -
    -
    - - Phone Number - - -
    -
    - - Phone Number of Whom - - -
    -
    - - Alternate Phone Number - - -
    - -
    - - Asha Name - - + +
    + +
    -
    - - Asha PhoneNo - - -
    - -
    - - ANM Name - - -
    - -
    - - ANM PhoneNO - - -
    - -
    - - Date of birth - - -
    - - - -
    -
    -
    - +
    + +
    -
    - -
    - - {{section.sectionName}} - - -
    -
  • {{ques.question}}
  • -
    - -
    -
  • {{ques.question}} - - -
    -
    - - - - Please - enter mandatory field - - - - - Please - enter mandatory field - - - - - Please - enter mandatory field - - - - - {{ option.options }} - - - - Please - enter mandatory field - - - - - Please - enter mandatory field - - - - - - {{option.options}} - - Please - enter mandatory field - - - - - - - - {{ option.options }} - - - - Please - enter mandatory field - - - - -
    -
    -
  • -
    -
    -
    - - -
    -
    -
    -
    -
    +
    + + Questionnaires not mapped against the call type +
    -
    - +
    + +
    -
    - -
    - - Questionnaires not mapped against the call type - -
    -
    - - -
    - -
    - +
    + +
    +
    + +
    -
    \ No newline at end of file + + \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts index 82b00b0..d78140d 100644 --- a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts @@ -37,8 +37,7 @@ import { VideoConsultationService } from '../video-consultation/videoService'; } initializeJitsi(): void { - console.error('Initializing Jitsi in:', this.jitsiContainerRef?.nativeElement); - + if (!this.jitsiContainerRef?.nativeElement) { console.error('Jitsi container not available'); return; @@ -47,6 +46,7 @@ import { VideoConsultationService } from '../video-consultation/videoService'; this.videoService.apiInitialized = true; // Add this flag to prevent double init const domain = 'meet.jit.si'; + try { const options = { roomName: this.videoService.meetLink.split('/').pop(), parentNode: this.jitsiContainerRef.nativeElement, @@ -69,6 +69,10 @@ import { VideoConsultationService } from '../video-consultation/videoService'; const api = new JitsiMeetExternalAPI(domain, options); api.addListener('readyToClose', () => this.close()); + } catch (error) { + console.error('Failed to initialize Jitsi:', error); + this.videoService.apiInitialized = false; + } } close(): void { @@ -110,5 +114,16 @@ import { VideoConsultationService } from '../video-consultation/videoService'; document.removeEventListener('mousemove', this.onDrag); document.removeEventListener('mouseup', this.endDrag); }; + + ngOnDestroy(): void { + // Clean up any remaining event listeners + document.removeEventListener('mousemove', this.onDrag); + document.removeEventListener('mouseup', this.endDrag); + + // Reset the video service if needed + if (this.videoService.showFloatingVideo) { + this.videoService.resetVideoCall(); + } + } } \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts index 6d3bffa..f6b22d0 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts @@ -37,12 +37,7 @@ interface VideocallStatusUpdate { export class VideoConsultationComponent { @ViewChild('jitsiContainer', { static: false }) jitsiContainerRef!: ElementRef; - @Input() callerPhoneNumber!: string; - @Input() agentID!: string; - @Input() agentName!: string; - @Input() videoCallPrompt: boolean = false; - - @Output() close = new EventEmitter(); + @Output() consultationClosed = new EventEmitter(); constructor( @@ -62,7 +57,7 @@ export class VideoConsultationComponent { this.videoService.meetLink = response.meetingLink; this.videoService.linkStatus = 'Sent Successfully'; - this.send_sms(this.videoService.meetLink, this.callerPhoneNumber); + this.send_sms(this.videoService.meetLink, this.videoService.callerPhoneNumber); }, error: () => { this.videoService.linkStatus = 'Failed to send'; @@ -117,7 +112,7 @@ export class VideoConsultationComponent { }); this.videoService.reset(); - this.close.emit(); + this.consultationClosed.emit(); } updateReceiptConfirmation(event: Event): void { @@ -141,7 +136,7 @@ export class VideoConsultationComponent { // map((res: any) => res?.data?.find((t: any) => t.smsType === 'Video Consultation')?.smsTypeID), switchMap((smsTypeID: string | null) => { if (!smsTypeID) throw new Error('Video Consultation type not found'); - return this.sms_service.getSMStemplates(1714, smsTypeID).pipe( + return this.sms_service.getSMStemplates(currentServiceID, smsTypeID).pipe( map((res: any) => ({ smsTemplateID: res?.data?.find((tpl: any) => !tpl.deleted)?.smsTemplateID, smsTemplateTypeID: smsTypeID @@ -184,9 +179,9 @@ export class VideoConsultationComponent { saveVideoCallRequest(link: string, status: string): void { const request: VideoCallRequest = { dateOfCall: new Date().toISOString(), - callerPhoneNumber: this.callerPhoneNumber, - agentID: this.agentID, - agentName: this.agentName, + callerPhoneNumber: this.videoService.callerPhoneNumber, + agentID: this.videoService.agentID, + agentName: this.videoService.agentName, meetingLink: link, callStatus: status, callDuration: '0', diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts b/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts index 54e4df0..c4aad2f 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts +++ b/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts @@ -1,17 +1,22 @@ import { Injectable } from "@angular/core"; +import { BehaviorSubject } from "rxjs"; + @Injectable({ providedIn: 'root' }) export class VideoConsultationService { +private videoStateChange = new BehaviorSubject<{[key: string]: any}>({}); +videoStateChange$ = this.videoStateChange.asObservable(); + videoCallPrompt = false; videoConsultationAvailable = false; linkSent = false; linkStatus = 'Sent Successfully'; - receiptConfirmation: string = ''; + receiptConfirmation = ''; callStatus: 'Not Initiated' | 'Ongoing' | 'Completed' = 'Not Initiated'; isMeetAvailable = false; - meetLink = "https://meet.jit.si/oIYoMJbO"; + meetLink = ""; SMSStatus = ''; apiInitialized = false; showFloatingVideo = false; @@ -24,7 +29,6 @@ export class VideoConsultationService { // Add methods if needed to update status or reset reset() { - console.error("Resetting video consultation service"); this.videoCallPrompt = false; this.videoConsultationAvailable = false; this.linkSent = false; @@ -35,9 +39,18 @@ export class VideoConsultationService { this.meetLink = ''; this.SMSStatus = ''; this.isVideoCallActive = false; - } + // Notify subscribers of the reset + + this.videoStateChange.next({ + action: 'reset', + isVideoCallActive: false + }); +} - resetVideoCall() { + + + +resetVideoCall() { this.showFloatingVideo = false; this.apiInitialized = false; } @@ -53,12 +66,25 @@ export class VideoConsultationService { this.apiInitialized = false; } - setVideoCallData(isVideoCallActive: boolean, phoneNumber:any, meetLink: any, agentID: any, name: any) { + setVideoCallData(isVideoCallActive: boolean, phoneNumber: any, meetLink: any, agentID: any, name: any) { + if (phoneNumber === undefined || phoneNumber === null || phoneNumber === '') { + console.warn('Invalid phone number provided to setVideoCallData'); + return; + } + if (meetLink === undefined || meetLink === null || meetLink === '') { + console.warn('Invalid meetLink provided to setVideoCallData'); + return; + } this.isVideoCallActive = isVideoCallActive; this.callerPhoneNumber = phoneNumber; this.meetLink = meetLink; this.agentID = agentID; this.agentName = name; + + this.videoStateChange.next({ + action: 'setVideoCallData', + isVideoCallActive + }); } // Getters From b4df8dd639a42d804433d2c4d979d2fd5191115b Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Mon, 28 Apr 2025 17:03:58 +0530 Subject: [PATCH 101/134] feat: fixing redirect issue on clicking videocall button --- .../ben-registration.component.html | 2 +- .../ben-registration.component.ts | 32 +++++++++---------- .../video-consultation.component.ts | 26 +++++++-------- .../video-consultation/videoService.ts | 9 +----- 4 files changed, 30 insertions(+), 39 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html index 10f0800..5769323 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html @@ -345,7 +345,7 @@

    {{currentLanguageSet?.beneficiaryRegistration
    diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index abc608c..6fc4993 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -22,7 +22,7 @@ import { DatePipe } from '@angular/common'; -import { Component, DoCheck, OnInit } from '@angular/core'; +import { Component, DoCheck, OnInit, ChangeDetectorRef,ChangeDetectionStrategy} from '@angular/core'; import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { AssociateAnmMoService } from 'src/app/app-modules/services/associate-anm-mo/associate-anm-mo.service'; import { ConfirmationService } from 'src/app/app-modules/services/confirmation/confirmation.service'; @@ -37,7 +37,9 @@ import { VideoConsultationService } from '../../video-consultation/videoService' @Component({ selector: 'app-ben-registration', templateUrl: './ben-registration.component.html', - styleUrls: ['./ben-registration.component.css'] + styleUrls: ['./ben-registration.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush + }) export class BenRegistrationComponent implements OnInit, DoCheck { // viewDetails:any=this.data.selectedDetails; @@ -99,13 +101,13 @@ import { VideoConsultationService } from '../../video-consultation/videoService' readonly sessionstorage: SessionStorageService, public dialog: MatDialog, public videoService: VideoConsultationService, + // private cdr: ChangeDetectorRef, ) { } ngOnInit(): void { this.videoService.videoCallPrompt = true; - // this.isVideoCallActive = this.associateAnmMoService.getIsVideoCallActive(); this.associateAnmMoService.isBenRegistartionData$.subscribe((responseComp) => { if (responseComp !== null && responseComp === true) { @@ -124,16 +126,7 @@ import { VideoConsultationService } from '../../video-consultation/videoService' // this.stateMaster(); this.genderMaster(); this.minDate.setMonth(this.maxDate.getMonth() - 10); - // this.associateAnmMoService.isMotherRecordData$.subscribe(res => { - // if(res == true){ - // this.enableMotherRecord = true; - // } else { - // this.enableMotherRecord = false; - // } - // }) - - - + this.associateAnmMoService.openCompFlag$.subscribe((responseComp) => { if (responseComp !== null && responseComp === "Call Closed") { this.benRegistrationForm.reset(); @@ -544,6 +537,7 @@ import { VideoConsultationService } from '../../video-consultation/videoService' if (response !== null && response.response && response.response.BenRegId !== undefined && response.response.BenRegId !== null) { const benRegId = response.response.BenRegId; const benId = response.response.BeneficiaryId; + this.videoService.benRegId = response.response.BenRegId this.sessionstorage.setItem('beneficiaryRegId', benRegId); this.associateAnmMoService.selectedBenDetails.childName = this.benRegistrationForm.controls.childName.value, this.associateAnmMoService.selectedBenDetails.motherName = this.benRegistrationForm.controls.motherName.value, @@ -564,9 +558,10 @@ import { VideoConsultationService } from '../../video-consultation/videoService' this.associateAnmMoService.selectedBenDetails.edd = this.formatDateValue(this.benRegistrationForm.controls.edd.value), this.associateAnmMoService.selectedBenDetails.age = this.benRegistrationForm.controls.age.value, - this.confirmationService.openDialog(this.currentLanguageSet.beneficiaryRegisteredSuccessfully + " " + benId, `success`); + this.confirmationService.openDialog(this.currentLanguageSet.beneficiaryRegisteredSuccessfully + " " + benRegId, `success`); this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); + this.performAction(); } else { @@ -623,6 +618,8 @@ import { VideoConsultationService } from '../../video-consultation/videoService' let benRegId = null; if (this.associateAnmMoService.selectedBenDetails !== null) { benRegId = this.associateAnmMoService.selectedBenDetails.beneficiaryRegId; + this.videoService.benRegId = benRegId + } const demographicReq = { @@ -729,6 +726,8 @@ import { VideoConsultationService } from '../../video-consultation/videoService' this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); + this.performAction(); + } else { this.confirmationService.openDialog(response.errorMessage, 'error'); @@ -798,9 +797,10 @@ import { VideoConsultationService } from '../../video-consultation/videoService' } - performAction(event :Event) { - + performAction() { + // this.isVideoCallActive = true this.videoService.videoCallPrompt = true; + // this.cdr.detectChanges(); this.videoService.setVideoCallData( true, // or your dynamic video call status this.benRegistrationForm.controls.phoneNo.value, diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts index f6b22d0..c4e3a65 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.ts @@ -20,6 +20,7 @@ interface VideoCallRequest { callDuration: string; providerServiceMapID: number; closureRemark: string; + beneficiaryRegID:string; } interface VideocallStatusUpdate { @@ -55,15 +56,13 @@ export class VideoConsultationComponent { next: (response: any) => { this.videoService.linkSent = true; this.videoService.meetLink = response.meetingLink; - this.videoService.linkStatus = 'Sent Successfully'; - + + + this.saveVideoCallRequest(response.meetingLink, 'Initiated'); this.send_sms(this.videoService.meetLink, this.videoService.callerPhoneNumber); }, error: () => { - this.videoService.linkStatus = 'Failed to send'; - // this.videoService.linkStatus = 'Sent Successfully'; - // this.send_sms('https://meet.jit.si/oIYoMJbO', '8147115862'); - + this.videoService.linkStatus = 'Failed to send' } }); } @@ -73,9 +72,6 @@ export class VideoConsultationComponent { this.videoService.callStatus = 'Ongoing'; this.videoService.isMeetAvailable = true; - //test - // const meetLink = 'https://meet.jit.si/oIYoMJbO'; // or generate dynamically - // this.videoService.startFloatingCall(meetLink); this.videoService.startFloatingCall(this.videoService.meetLink); this.videoService.showFloatingVideo = true; @@ -132,8 +128,7 @@ export class VideoConsultationComponent { const currentServiceID = this.loginService.currentServiceId; this.sms_service.getSMStypes(currentServiceID).pipe( - map((res: any) => res?.data?.find((t: any) => t.smsType === 'Call Closure')?.smsTypeID), - // map((res: any) => res?.data?.find((t: any) => t.smsType === 'Video Consultation')?.smsTypeID), + map((res: any) => res?.data?.find((t: any) => t.smsType === 'Video Consultation')?.smsTypeID), switchMap((smsTypeID: string | null) => { if (!smsTypeID) throw new Error('Video Consultation type not found'); return this.sms_service.getSMStemplates(currentServiceID, smsTypeID).pipe( @@ -152,7 +147,8 @@ export class VideoConsultationComponent { is1097: false, providerServiceMapID: this.sessionstorage.getItem('providerServiceMapID'), smsTemplateID, - smsTemplateTypeID + smsTemplateTypeID, + beneficiaryRegID: this.videoService.benRegId, }; return this.sms_service.sendSMS([reqObj]); }) @@ -163,7 +159,8 @@ export class VideoConsultationComponent { verticalPosition: 'top', panelClass: ['snackbar-success'] }); - this.saveVideoCallRequest(link, 'Initiated'); + // this.saveVideoCallRequest(link, 'Initiated'); + this.videoService.linkStatus = 'Sent Successfully'; }, error: (err) => { console.error('Error sending SMS:', err); @@ -186,7 +183,8 @@ export class VideoConsultationComponent { callStatus: status, callDuration: '0', providerServiceMapID: this.sessionstorage.getItem('providerServiceMapID'), - closureRemark: '' + closureRemark: '', + beneficiaryRegID: this.videoService.benRegId, }; this.associateAnmMoService.saveVideoCall(request).subscribe({ diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts b/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts index c4aad2f..7e70d59 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts +++ b/src/app/app-modules/associate-anm-mo/video-consultation/videoService.ts @@ -26,6 +26,7 @@ videoStateChange$ = this.videoStateChange.asObservable(); agentName= ''; callStartTime: Date | null = null; callEndTime: Date | null = null; + benRegId = '' // Add methods if needed to update status or reset reset() { @@ -67,14 +68,6 @@ resetVideoCall() { } setVideoCallData(isVideoCallActive: boolean, phoneNumber: any, meetLink: any, agentID: any, name: any) { - if (phoneNumber === undefined || phoneNumber === null || phoneNumber === '') { - console.warn('Invalid phone number provided to setVideoCallData'); - return; - } - if (meetLink === undefined || meetLink === null || meetLink === '') { - console.warn('Invalid meetLink provided to setVideoCallData'); - return; - } this.isVideoCallActive = isVideoCallActive; this.callerPhoneNumber = phoneNumber; this.meetLink = meetLink; From a4d5c95637eacb919627607e26fdae59b5c47f04 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Mon, 28 Apr 2025 17:45:26 +0530 Subject: [PATCH 102/134] feat: removed unused variables, added the validation --- .../ben-registration.component.ts | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index 6fc4993..9e86a87 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -22,7 +22,7 @@ import { DatePipe } from '@angular/common'; -import { Component, DoCheck, OnInit, ChangeDetectorRef,ChangeDetectionStrategy} from '@angular/core'; +import { Component, DoCheck, OnInit} from '@angular/core'; import { FormBuilder, FormControl, FormGroup } from '@angular/forms'; import { AssociateAnmMoService } from 'src/app/app-modules/services/associate-anm-mo/associate-anm-mo.service'; import { ConfirmationService } from 'src/app/app-modules/services/confirmation/confirmation.service'; @@ -38,8 +38,6 @@ import { VideoConsultationService } from '../../video-consultation/videoService' selector: 'app-ben-registration', templateUrl: './ben-registration.component.html', styleUrls: ['./ben-registration.component.css'], - changeDetection: ChangeDetectionStrategy.OnPush - }) export class BenRegistrationComponent implements OnInit, DoCheck { // viewDetails:any=this.data.selectedDetails; @@ -752,13 +750,9 @@ import { VideoConsultationService } from '../../video-consultation/videoService' .afterClosed() .subscribe((response) => { if (response) { - this.videoService.setVideoCallData( - true, // or your dynamic video call status - this.benRegistrationForm.controls.phoneNo.value, - this.videoService.meetLink, - this.loginService.agentId, - sessionStorage.getItem('userName')) - + + this.performAction(); + this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); } @@ -798,7 +792,13 @@ import { VideoConsultationService } from '../../video-consultation/videoService' } performAction() { - // this.isVideoCallActive = true + if (!this.benRegistrationForm.controls.phoneNo.value) { + this.confirmationService.openDialog( + this.currentLanguageSet?.phoneNumberRequired || 'Phone number is required for video call', + 'error' + ); + return; + } this.videoService.videoCallPrompt = true; // this.cdr.detectChanges(); this.videoService.setVideoCallData( From 2465dd380ac29437ee5d51d959b6ecebf50e2475 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Mon, 28 Apr 2025 17:58:52 +0530 Subject: [PATCH 103/134] feat: eslint fix --- .../floating-videocall/floating-video.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts index d78140d..6df6bf3 100644 --- a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts @@ -8,7 +8,7 @@ import { } from '@angular/core'; import { VideoConsultationService } from '../video-consultation/videoService'; - declare var JitsiMeetExternalAPI: any; + declare let JitsiMeetExternalAPI: any; @Component({ selector: 'app-floating-video', From 725c8fab41ebc6ba8910d4d47ad0d7bd23369c76 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Mon, 28 Apr 2025 18:11:07 +0530 Subject: [PATCH 104/134] feat: removed local urls --- src/environments/environment.local.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts index 2fc202b..4c36a20 100644 --- a/src/environments/environment.local.ts +++ b/src/environments/environment.local.ts @@ -24,12 +24,14 @@ // This file can be replaced during build by using the `fileReplacements` array. // `ng build` replaces `environment.ts` with `environment.prod.ts`. // The list of file replacements can be found in `angular.json`. -const ecdIP = 'http://localhost/'; -const commonIP = 'http://localhost'; -const adminIP = 'http://localhost'; -const COMMON_API = `https://commonurl.loca.lt/`; -const ADMIN_API = `https://adminurl.loca.lt/`; -const ECD_API = `https://ecdurl.loca.lt/`; + +const ecdIP = 'https://amritwprdev.piramalswasthya.org/'; +const commonIP = 'https://amritwprdev.piramalswasthya.org/'; +const adminIP = 'https://amritwprdev.piramalswasthya.org/'; +const COMMON_API = `${commonIP}commonapi-ecd/`; +const COMMON_API1 = `https://commonurl.loca.lt/`; +const ADMIN_API = `${adminIP}adminapi-v1.0/`; +const ECD_API = `${ecdIP}ecdapi-v1.0/`; const biologicalScreeningDeviceAPI = `${ADMIN_API}diagnostics/biologicalScreeningDevice`; const sessionStorageEncKey = ''; @@ -190,7 +192,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `https://uatcz.piramalswasthya.org/`, + ctiUrl: `http://192.168.45.55/`, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, @@ -257,9 +259,9 @@ downloadJsyReportURL: `${ECD_API}ecdReportController/getECDJSYRelatedComplaintsR downloadMiscarriageReportURL:`${ECD_API}ecdReportController/getECDMiscarriageReport`, //video call -generateVideoLinkURL :`${COMMON_API}video-consultation/generate-link`, -sendSMSAPI: `${COMMON_API}video-consultation/send-link`, -updateCallStatusAPI: `${COMMON_API}video-consultation/update-call-status`, +generateVideoLinkURL :`${COMMON_API1}video-consultation/generate-link`, +sendSMSAPI: `${COMMON_API1}video-consultation/send-link`, +updateCallStatusAPI: `${COMMON_API1}video-consultation/update-call-status`, }; From 2bff6a96f8202007dc780b56d82c21ac69bb83e5 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Mon, 28 Apr 2025 18:37:03 +0530 Subject: [PATCH 105/134] feat: added environment template --- src/environments/environment.ci.ts.template | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index 482d3dd..f94d8e4 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -248,4 +248,7 @@ downloadBabyDeathReportURL:`${ECD_API}ecdReportController/getECDBabyDeathReport` downloadNotConnectedReportURL:`${ECD_API}ecdReportController/getECDNotConnectedPhonelistDiffformatReport`, downloadJsyReportURL: `${ECD_API}ecdReportController/getECDJSYRelatedComplaintsReport`, downloadMiscarriageReportURL:`${ECD_API}ecdReportController/getECDMiscarriageReport`, +generateVideoLinkURL :`${COMMON_API}video-consultation/generate-link`, +sendSMSAPI: `${COMMON_API}video-consultation/send-link`, +updateCallStatusAPI: `${COMMON_API}video-consultation/update-call-status`, }; \ No newline at end of file From 15a5c26de59ec1898039fa13b1ded3e5181972d4 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Tue, 29 Apr 2025 15:12:03 +0530 Subject: [PATCH 106/134] feat: removed unused data and clean up the code --- .../ben-registration.component.html | 78 +------------------ .../ben-registration.component.ts | 1 - 2 files changed, 2 insertions(+), 77 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html index 5769323..8a2d3a8 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html @@ -1,6 +1,5 @@
    - +

    {{currentLanguageSet?.beneficiaryRegistration}}

    -
    +
    @@ -124,75 +123,6 @@

    {{currentLanguageSet?.beneficiaryRegistration - - - - - - - - - - - - -
    {{ currentLanguageSet?.healthBlock}} @@ -216,10 +146,6 @@

    {{currentLanguageSet?.beneficiaryRegistration

    - - - -
    {{ currentLanguageSet?.phoneNumber}} diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index 9e86a87..7044a5e 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -82,7 +82,6 @@ import { VideoConsultationService } from '../../video-consultation/videoService' // ]; enableUpdateButton = false; minimumDate: any; - isVideoCallActive = false; callerPhoneNumber: any; agentID: any; agentName: any; From def053a9b84b2ab8bb1de69719fbec53e77956f9 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Tue, 29 Apr 2025 15:27:41 +0530 Subject: [PATCH 107/134] feat: fixed ui issues --- .../video-consultation.component.css | 56 +++---------------- .../video-consultation.component.html | 2 +- .../video-consultation.component.ts | 2 +- .../video-consultation/videoService.ts | 4 +- 4 files changed, 11 insertions(+), 53 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css index 50e4f97..2ed4b54 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css @@ -1,5 +1,3 @@ -/* General Modal Styling */ - .modal-content { background: #ffffff; padding: 5px; @@ -40,47 +38,6 @@ margin-top: 10px; } -.btn-primary { - background: #007bff; - border: none; - color: white; -} - -.btn-primary:hover { - background: #09407a; -} - -.btn-warning { - background: #ffc107; - border: none; - color: #000; -} - -.btn-warning:hover { - background: #e0a800; -} - -.btn-success { - background: #28a745; - border: none; - color: white; -} - -.btn-danger { - background-color: #dc3545; - color: white; - border: none; - -} - -.btn-danger:hover { - background: #cc2031; -} - -.btn-success:hover { - background: #15b435; -} - /* Disabled Button */ button[disabled] { opacity: 0.6; @@ -222,13 +179,8 @@ button[disabled] { #jitsi-container { height: 600px; width: 100%; - background: #eee; /* Optional for debug */ + background: #eee; } -/* #jitsi-container { - width: 100%; - height: 500px; - border: none; -} */ :host ::ng-deep .jitsi-iframe { width: 100% !important; @@ -249,6 +201,12 @@ button[disabled] { z-index: 1000; } +:host { + all: initial; + font-family: inherit; + font-size: 16px; +} + /* Responsive Design */ @media (max-width: 576px) { .modal-content { diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html index 2db6971..e944592 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html @@ -45,7 +45,7 @@

    Video Consultation

    -
    - - -
    -
    -
    - {{currentLanguageSet?.callAnswered}} - - - {{currentLanguageSet?.yes}} - {{currentLanguageSet?.no}} - -
    - -
    - - {{currentLanguageSet?.reasonOfNotAnswered}} - - - {{ option.name }} - - - {{ - currentLanguageSet.fieldIsRequired }} - - -
    - -
    -
    -
    - {{currentLanguageSet?.callVerified}} - - - {{currentLanguageSet?.yes}} - {{currentLanguageSet?.no}} - - -
    -
    - {{currentLanguageSet?.callDisconnected}} - - - {{currentLanguageSet?.yes}} - {{currentLanguageSet?.no}} - -
    -
    - {{currentLanguageSet?.isWrongNumber}} - - - {{currentLanguageSet?.yes}} - {{currentLanguageSet?.no}} - -
    -
    - - {{currentLanguageSet?.enterCorrectPhoneNumber}} - - -
    - -
    - -
    -
    - {{currentLanguageSet?.noFurtherCallRequired}} - - {{currentLanguageSet?.yes}} - {{currentLanguageSet?.no}} - -
    -
    - - {{currentLanguageSet?.reasonForNoCall}} - - - {{ option.name }} - - - {{ - currentLanguageSet.fieldIsRequired }} - -
    - - -
    - - - {{currentLanguageSet?.preferredLanguage}} - - - {{ language.languageName }} - - - {{ - currentLanguageSet.fieldIsRequired }} - - -
    - - -
    -
    -
    - {{currentLanguageSet?.iVRFeedbackRequired}} -
    - -
    - {{currentLanguageSet?.stickyAgent}} -
    -
    -
    -
    - - {{currentLanguageSet?.typeOfComplaint}} - - - {{ option.name }} - - - - - -
    -
    - - {{currentLanguageSet?.nextAttempt}} - - - -
    - -
    -
    -
    - - {{currentLanguageSet?.complaintRemarksCall}} - - - -
    -
    - - {{currentLanguageSet?.callClosureRemarks}} - - - -
    -
    - - -
    -
    - - {{currentLanguageSet?.sendAdvice}} - - - -
    -
    - - {{currentLanguageSet?.alternateNumber}} - - - -
    -
    - -
    -
    -
    - - -
    - -
    -
    -
    -
    -
    - \ No newline at end of file + +

    +
    + + {{currentLanguageSet?.alternateNumber}} + + + +
    +
    + +
    +
    +
    + + +
    + + + +
    + +
    +
    + +
    +
    + + \ No newline at end of file diff --git a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts index 5fa449d..4ab7606 100644 --- a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts +++ b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts @@ -38,6 +38,7 @@ import { AgentsInnerpageComponent } from '../agents-innerpage/agents-innerpage.c import { SpinnerService } from '../../services/spinnerService/spinner.service'; import { Subscription, map, timer } from 'rxjs'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; +import { VideoConsultationService } from '../video-consultation/videoService'; @Component({ selector: 'app-call-closure', @@ -116,7 +117,9 @@ private sms_service: SmsTemplateService, private router: Router, private masterService:MasterService, readonly sessionstorage:SessionStorageService, - private spinnerService: SpinnerService + private spinnerService: SpinnerService, + public videoService: VideoConsultationService, + ) { } From d41061eab24e0f1fcf7f009907a54b448f7f78e9 Mon Sep 17 00:00:00 2001 From: Mithun James <1007084+drtechie@users.noreply.github.com> Date: Thu, 15 May 2025 16:24:31 +0530 Subject: [PATCH 109/134] feat: ensure url doesn't have version. upgrade version --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0e68882..6bb393f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.iemr.ecd-ui ecd-ui - 1.0 + 3.1.0 ecd-ui war @@ -79,7 +79,7 @@ - ecd-ui-v3.0.0 + ${artifactId}-${version} maven-clean-plugin From 1270e7cc98576ecdc7c33785c512b43b128361ab Mon Sep 17 00:00:00 2001 From: Mithun James <1007084+drtechie@users.noreply.github.com> Date: Mon, 19 May 2025 10:49:39 +0530 Subject: [PATCH 110/134] fix: update names of the services in pom.xml files --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6bb393f..afedcb4 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.iemr.ecd-ui ecd-ui 3.1.0 - ecd-ui + ECD-UI war From 518e19de16d6157d23533d1599b7363e5c406f4c Mon Sep 17 00:00:00 2001 From: Helen Grace Karyamsetty <133211481+helenKaryamsetty@users.noreply.github.com> Date: Mon, 19 May 2025 11:21:47 +0530 Subject: [PATCH 111/134] Preffered Language addition in associate (#28) * feat(story): preffered languaged changes in associate * feat(story): removed commented code --------- Co-authored-by: Karyamsetty Helen Grace --- Common-UI | 2 +- .../call-closure/call-closure.component.ts | 23 ++----------------- .../call-allocation.component.ts | 10 ++++++-- .../call-reallocation.component.ts | 8 ++----- 4 files changed, 13 insertions(+), 30 deletions(-) diff --git a/Common-UI b/Common-UI index 881c233..b3edb8c 160000 --- a/Common-UI +++ b/Common-UI @@ -1 +1 @@ -Subproject commit 881c2339634ed4a292d271d52c4365af496405fd +Subproject commit b3edb8c34cf6898aa56ef0b08d4b9ccc20ab58ed diff --git a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts index 5fa449d..0c00753 100644 --- a/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts +++ b/src/app/app-modules/associate-anm-mo/call-closure/call-closure.component.ts @@ -818,29 +818,10 @@ private sms_service: SmsTemplateService, } getLanguageMaster(){ - let agentLanguages: any[] = []; - if(this.selectedRole !== undefined && this.selectedRole !== null && (this.selectedRole.toLowerCase() === "associate" || this.selectedRole.toLowerCase() === "anm")) { - const userId = this.sessionstorage.getItem('userID'); - this.masterService.getLanguageMasterByUserId(userId).subscribe((response: any) => { - if(response && response.length > 0){ - this.languages = response; - agentLanguages = response; - }else { - this.confirmationService.openDialog(this.currentLanguageSet.noLanguagesFound, 'error'); - } - }, - (err: any) => { - this.confirmationService.openDialog(err.error, 'error'); - } - ); - } - if(this.selectedRole !== undefined && this.selectedRole !== null && this.selectedRole.toLowerCase() === "anm") { + if(this.selectedRole !== undefined && this.selectedRole !== null && (this.selectedRole.toLowerCase() === "associate" || this.selectedRole.toLowerCase() === "anm") ) { this.masterService.getLanguageMaster().subscribe((response: any) => { if(response && response.length > 0){ - this.languages = []; - this.languages = response.filter( - (lang: any) => !agentLanguages.some(agentLang => agentLang.languageName?.toLowerCase() === lang.languageName?.toLowerCase()) - ); + this.languages = response; }else { this.confirmationService.openDialog(this.currentLanguageSet.noLanguagesFound, 'error'); } diff --git a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts index c291635..a2afcdd 100644 --- a/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts +++ b/src/app/app-modules/supervisor/activities/call-allocation/call-allocation/call-allocation.component.ts @@ -138,7 +138,7 @@ export class CallAllocationComponent implements OnInit, DoCheck { recordType: new FormControl('', [Validators.required]), phoneNoType: new FormControl('', [Validators.required]), agentType: new FormControl('', [Validators.required]), - preferredLanguage: new FormControl(null, [Validators.required]), + preferredLanguage: new FormControl(null), allocateTo: new FormControl('', [Validators.required]), numericValue: new FormControl('', [Validators.required]), }); @@ -239,7 +239,9 @@ export class CallAllocationComponent implements OnInit, DoCheck { } - if ((!this.enableLanguage || (this.enableLanguage && this.callAllocationForm.controls.preferredLanguage.value !== null )) && this.callAllocationForm.controls.agentType.value !== null && this.callAllocationForm.controls.allocateTo.value !== null && this.callAllocationForm.controls.allocateTo.value.length > 0 && numValue) { + if ((!this.enableLanguage || + (this.enableLanguage && this.selectedRoleName.toLowerCase() === "associate") || + (this.enableLanguage && this.selectedRoleName.toLowerCase() === "anm" && this.callAllocationForm.controls.preferredLanguage.value !== null )) && this.callAllocationForm.controls.agentType.value !== null && this.callAllocationForm.controls.allocateTo.value !== null && this.callAllocationForm.controls.allocateTo.value.length > 0 && numValue) { this.isAllocateDisabled = false; } else { @@ -301,6 +303,7 @@ export class CallAllocationComponent implements OnInit, DoCheck { this.currentMaxAllocatedRecords = noOfRecords; this.enableAgentAllocation = true; this.isSubmitDisabled = false; + this.callAllocationForm.controls['preferredLanguage'].clearValidators(); this.callAllocationForm.controls["preferredLanguage"].patchValue(null); this.enableLanguage = false; this.resetInnerAllocateForm(); @@ -316,6 +319,8 @@ export class CallAllocationComponent implements OnInit, DoCheck { this.setSelectedRoleName(values.roleName); } }); + this.enableLanguage = true; + this.callAllocationForm.controls['preferredLanguage'].clearValidators(); } else { this.rolesArr = []; if(value === "low risk") { @@ -327,6 +332,7 @@ export class CallAllocationComponent implements OnInit, DoCheck { } }); this.enableLanguage = true; + this.callAllocationForm.controls['preferredLanguage'].setValidators([Validators.required]); } else { this.roles.filter((values:any) => { diff --git a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts index 123c56e..5b58135 100644 --- a/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts +++ b/src/app/app-modules/supervisor/activities/call-reallocation/call-reallocation/call-reallocation.component.ts @@ -235,10 +235,12 @@ export class CallReallocationComponent implements OnInit, DoCheck { setAgentRoleName(roleName:any) { this.enableLanguage = false; + this.callReallocationForm.controls["preferredLanguage"].clearValidators(); this.selectedRoleName = roleName; if(this.selectedRoleName !== undefined && this.selectedRoleName !== null && this.selectedRoleName.toLowerCase() === 'associate') { this.callReallocationForm.patchValue({isStickyAgent : false}); + this.enableLanguage = true; } if(this.selectedRoleName !== undefined && this.selectedRoleName !== null && this.selectedRoleName.toLowerCase() === 'anm') { @@ -383,12 +385,6 @@ export class CallReallocationComponent implements OnInit, DoCheck { const fromDate = moment(this.range.controls.start.value).format('YYYY-MM-DDThh:mm:ssZ'); const toDate = moment(this.range.controls.end.value).format('YYYY-MM-DDThh:mm:ssZ'); - - - - - - const reqObj = { "fromUserIds": [ 0 From 8e6804a19b428cd0c70c32c37566ae89b9769695 Mon Sep 17 00:00:00 2001 From: devikasuresh20 Date: Thu, 22 May 2025 12:37:30 +0530 Subject: [PATCH 112/134] fix(bug):Dial preferences changes --- .../dial-preference/dial-preference.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts b/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts index 0bbfc5f..3f68dbd 100644 --- a/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts +++ b/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts @@ -322,7 +322,7 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { item.value.previewWindowTime <= 60){ item.get('selected')?.enable(); } - if (item.value.previewWindowTime <= 0 || item.value.previewWindowTime > 60) { + else { item.value.previewWindowTime = null; item.get('selected').disable(); let newIndexes: any; From f482c73dc16e12ea0d6d8d57d09df4b7425308e8 Mon Sep 17 00:00:00 2001 From: Devika S <57424483+devikasuresh20@users.noreply.github.com> Date: Thu, 22 May 2025 12:46:33 +0530 Subject: [PATCH 113/134] AMM- 1489 Dial preference changes (#30) * LMP & EDD date format changes * fix(bug):Dial preferences changes --- .../dial-preference/dial-preference.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts b/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts index 0bbfc5f..3f68dbd 100644 --- a/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts +++ b/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts @@ -322,7 +322,7 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { item.value.previewWindowTime <= 60){ item.get('selected')?.enable(); } - if (item.value.previewWindowTime <= 0 || item.value.previewWindowTime > 60) { + else { item.value.previewWindowTime = null; item.get('selected').disable(); let newIndexes: any; From c713d1917e99ee26c2f7be1ba0032ddaaa9e449d Mon Sep 17 00:00:00 2001 From: devikasuresh20 Date: Thu, 22 May 2025 13:04:32 +0530 Subject: [PATCH 114/134] fix: Added validations for preview window time --- Common-UI | 2 +- .../dial-preference/dial-preference.component.ts | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Common-UI b/Common-UI index b3edb8c..6412a48 160000 --- a/Common-UI +++ b/Common-UI @@ -1 +1 @@ -Subproject commit b3edb8c34cf6898aa56ef0b08d4b9ccc20ab58ed +Subproject commit 6412a482513a89ab2793422fb1cbbbe95d330324 diff --git a/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts b/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts index 3f68dbd..5730db2 100644 --- a/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts +++ b/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts @@ -323,7 +323,6 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { item.get('selected')?.enable(); } else { - item.value.previewWindowTime = null; item.get('selected').disable(); let newIndexes: any; this.preferenceList.controls.forEach((sourceValue: any, index) => { @@ -335,7 +334,6 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { ) newIndexes = index; }); - this.preferenceList.controls[newIndexes].patchValue({ previewWindowTime: null }); item.value.selected = false; this.preferenceList.controls[newIndexes].patchValue({ selected: null, @@ -350,7 +348,6 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { ) newIndexes = index; }); - this.preferDupList.controls[newIndexes].patchValue({ previewWindowTime: null }); item.value.selected = false; this.preferDupList.controls[newIndexes].patchValue({ selected: null, @@ -358,7 +355,9 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { if ( item.value.previewWindowTime === null || item.value.previewWindowTime === undefined || - item.value.previewWindowTime === '' + item.value.previewWindowTime === '' || + item.value.previewWindowTime < 15 || + item.value.previewWindowTime > 60 ) { let newIndex: any; this.preferenceList.controls.forEach((sourceValue: any, index) => { From 4cf39fef91d12753015d46d9b8307a6fbe3a099c Mon Sep 17 00:00:00 2001 From: Devika S <57424483+devikasuresh20@users.noreply.github.com> Date: Thu, 22 May 2025 13:42:02 +0530 Subject: [PATCH 115/134] AMM-1489 (#31) * LMP & EDD date format changes * fix(bug):Dial preferences changes * fix: Added validations for preview window time --- Common-UI | 2 +- .../dial-preference/dial-preference.component.ts | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Common-UI b/Common-UI index b3edb8c..6412a48 160000 --- a/Common-UI +++ b/Common-UI @@ -1 +1 @@ -Subproject commit b3edb8c34cf6898aa56ef0b08d4b9ccc20ab58ed +Subproject commit 6412a482513a89ab2793422fb1cbbbe95d330324 diff --git a/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts b/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts index 3f68dbd..5730db2 100644 --- a/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts +++ b/src/app/app-modules/supervisor/configurations/dial-preference/dial-preference/dial-preference.component.ts @@ -323,7 +323,6 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { item.get('selected')?.enable(); } else { - item.value.previewWindowTime = null; item.get('selected').disable(); let newIndexes: any; this.preferenceList.controls.forEach((sourceValue: any, index) => { @@ -335,7 +334,6 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { ) newIndexes = index; }); - this.preferenceList.controls[newIndexes].patchValue({ previewWindowTime: null }); item.value.selected = false; this.preferenceList.controls[newIndexes].patchValue({ selected: null, @@ -350,7 +348,6 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { ) newIndexes = index; }); - this.preferDupList.controls[newIndexes].patchValue({ previewWindowTime: null }); item.value.selected = false; this.preferDupList.controls[newIndexes].patchValue({ selected: null, @@ -358,7 +355,9 @@ export class DialPreferenceComponent implements OnInit, AfterViewInit, DoCheck { if ( item.value.previewWindowTime === null || item.value.previewWindowTime === undefined || - item.value.previewWindowTime === '' + item.value.previewWindowTime === '' || + item.value.previewWindowTime < 15 || + item.value.previewWindowTime > 60 ) { let newIndex: any; this.preferenceList.controls.forEach((sourceValue: any, index) => { From e7ca784ba5a4c8ba21804cc2c9d6425838beb1c1 Mon Sep 17 00:00:00 2001 From: devikasuresh20 Date: Thu, 22 May 2025 15:24:06 +0530 Subject: [PATCH 116/134] fix(bug): In table search changes for quality audit --- .../call-audit/call-audit/call-audit.component.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts index a8c1b83..8ea7112 100644 --- a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts +++ b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts @@ -333,23 +333,23 @@ export class CallAuditComponent implements OnInit { console.log("route required", data) } - filterSearchTerm(searchTerm: any) { - if (!searchTerm && !this.data) { + filterSearchTerm(searchTerm?: string) { + if (!searchTerm) { this.callAuditData.data = this.callData; this.callAuditData.paginator = this.paginator; this.callAuditData.sort = this.sort; - }else if (!searchTerm && this.data) { - this.callAuditData.data = this.callData; - this.callAuditData.paginator = this.data.data.paginator; - this.callAuditData.sort = this.data.data.sort; } else { + this.callAuditData.data = []; + this.callAuditData.paginator = this.paginator; + this.callAuditData.sort = this.sort; this.callData.forEach((item: any) => { for (const key in item) { if ( key === 'beneficiaryid' || key === 'beneficiaryname' || key === 'phoneNo' || - key === 'agetname' + key === 'agetname' || + key === 'outboundCallType' ) { const value: string = '' + item[key]; if (value.toLowerCase().indexOf(searchTerm.toLowerCase()) >= 0) { @@ -363,6 +363,7 @@ export class CallAuditComponent implements OnInit { }); } } + onSearchClicked(){ this.paginator.firstPage(); this.lastLength = null; From 0fa8f1fc29e6d54d46f8a494b98c834348d1a77d Mon Sep 17 00:00:00 2001 From: Devika S <57424483+devikasuresh20@users.noreply.github.com> Date: Thu, 22 May 2025 16:06:41 +0530 Subject: [PATCH 117/134] AMM-1453 Quality auditor in table search changes (#32) * LMP & EDD date format changes * fix(bug):Dial preferences changes * fix: Added validations for preview window time * fix(bug): In table search changes for quality audit --- .../call-audit/call-audit/call-audit.component.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts index a8c1b83..8ea7112 100644 --- a/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts +++ b/src/app/app-modules/quality-auditor/call-audit/call-audit/call-audit.component.ts @@ -333,23 +333,23 @@ export class CallAuditComponent implements OnInit { console.log("route required", data) } - filterSearchTerm(searchTerm: any) { - if (!searchTerm && !this.data) { + filterSearchTerm(searchTerm?: string) { + if (!searchTerm) { this.callAuditData.data = this.callData; this.callAuditData.paginator = this.paginator; this.callAuditData.sort = this.sort; - }else if (!searchTerm && this.data) { - this.callAuditData.data = this.callData; - this.callAuditData.paginator = this.data.data.paginator; - this.callAuditData.sort = this.data.data.sort; } else { + this.callAuditData.data = []; + this.callAuditData.paginator = this.paginator; + this.callAuditData.sort = this.sort; this.callData.forEach((item: any) => { for (const key in item) { if ( key === 'beneficiaryid' || key === 'beneficiaryname' || key === 'phoneNo' || - key === 'agetname' + key === 'agetname' || + key === 'outboundCallType' ) { const value: string = '' + item[key]; if (value.toLowerCase().indexOf(searchTerm.toLowerCase()) >= 0) { @@ -363,6 +363,7 @@ export class CallAuditComponent implements OnInit { }); } } + onSearchClicked(){ this.paginator.firstPage(); this.lastLength = null; From 71c2ccc0e5bfbc8bd2505d934b86e57e430e611d Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Mon, 26 May 2025 12:10:36 +0530 Subject: [PATCH 118/134] fix: disabled the videocall button --- .../ben-registration/ben-registration.component.html | 2 +- .../ben-registration/ben-registration.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html index 8a2d3a8..ccdf9f5 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.html @@ -270,7 +270,7 @@

    {{currentLanguageSet?.beneficiaryRegistration
    -
    +
    diff --git a/src/app/app-modules/user-login/login/login.component.ts b/src/app/app-modules/user-login/login/login.component.ts index 8d2e80e..c3f073b 100644 --- a/src/app/app-modules/user-login/login/login.component.ts +++ b/src/app/app-modules/user-login/login/login.component.ts @@ -154,8 +154,8 @@ export class LoginComponent implements OnInit, OnDestroy { loginForm = this.fb.group({ - userName: [''], - password: [''], + userName: ['', Validators.required], + password: ['', Validators.required], }); /** @@ -394,9 +394,7 @@ export class LoginComponent implements OnInit, OnDestroy { } updateLoginDisabled(): void { - const user = this.loginForm.controls.userName.value; - const pass = this.loginForm.controls.password.value; - this.isLoginDisabled = !(user && pass && this.captchaToken); + this.isLoginDisabled = !(this.loginForm.valid && this.captchaToken); } onCaptchaResolved(token: string) { diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index f94d8e4..487dae3 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -25,6 +25,8 @@ const ADMIN_API = '<%= ADMIN_API_BASE %>'; const ECD_API = '<%= ECD_API_BASE %>'; const biologicalScreeningDeviceAPI = `${ADMIN_API}diagnostics/biologicalScreeningDevice`; const sessionStorageEncKey = '<%= SESSION_STORAGE_ENC_KEY %>'; +const siteKey = '<%= SITE_KEY %>'; +const captchaChallengeURL = '<%= CAPTCHA_CHALLENGE_URL %>'; export const environment = { production: true, @@ -251,4 +253,6 @@ downloadMiscarriageReportURL:`${ECD_API}ecdReportController/getECDMiscarriageRep generateVideoLinkURL :`${COMMON_API}video-consultation/generate-link`, sendSMSAPI: `${COMMON_API}video-consultation/send-link`, updateCallStatusAPI: `${COMMON_API}video-consultation/update-call-status`, +siteKey: siteKey, +captchaChallengeURL: captchaChallengeURL, }; \ No newline at end of file From ad291c2986a246e289f398315e0cbf752e72fc06 Mon Sep 17 00:00:00 2001 From: 5Amogh Date: Tue, 3 Jun 2025 15:37:07 +0530 Subject: [PATCH 123/134] fix: reducing code duplicity --- src/app/app-modules/user-login/login/login.component.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/app/app-modules/user-login/login/login.component.ts b/src/app/app-modules/user-login/login/login.component.ts index c3f073b..c7d76d7 100644 --- a/src/app/app-modules/user-login/login/login.component.ts +++ b/src/app/app-modules/user-login/login/login.component.ts @@ -187,10 +187,8 @@ export class LoginComponent implements OnInit, OnDestroy { this.userLogOutPreviousSession(res); } else { sessionStorage.clear(); - this.captchaToken = '' this.router.navigate(['/login']); this.confirmationService.openDialog(res.errorMessage, 'error'); - this.captchaToken = '' } } else { this.confirmationService.openDialog(res.errorMessage, 'error'); @@ -202,6 +200,7 @@ export class LoginComponent implements OnInit, OnDestroy { else this.confirmationService.openDialog(err.title + err.detail, 'error') }); + this.captchaToken = '' } /** @@ -239,14 +238,12 @@ export class LoginComponent implements OnInit, OnDestroy { this.loginService.userLoginData = userLoggedIn.data; this.getServiceAuthenticationDetails(userLoggedIn.data); } else { - this.captchaToken = '' this.confirmationService.openDialog( this.currentLanguageSet.seemsYouAreLoggedIn, 'error' ); } } else { - this.captchaToken = '' this.confirmationService.openDialog( userLoggedIn.errorMessage, 'error' @@ -254,7 +251,6 @@ export class LoginComponent implements OnInit, OnDestroy { } }); } else { - this.captchaToken = '' this.confirmationService.openDialog( logOutFromPreviousSession.errorMessage, 'error' From 45ce4d1c76750c4c496ee12ca3220629eb8535f8 Mon Sep 17 00:00:00 2001 From: 5Amogh Date: Wed, 4 Jun 2025 13:30:36 +0530 Subject: [PATCH 124/134] fix: reset captch during login failure --- .../user-login/captcha/captcha.component.html | 2 +- .../user-login/captcha/captcha.component.ts | 27 ++++++++++++------- .../user-login/login/login.component.html | 2 +- .../user-login/login/login.component.ts | 15 ++++++++--- 4 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/app/app-modules/user-login/captcha/captcha.component.html b/src/app/app-modules/user-login/captcha/captcha.component.html index f34eeb8..bb19a91 100644 --- a/src/app/app-modules/user-login/captcha/captcha.component.html +++ b/src/app/app-modules/user-login/captcha/captcha.component.html @@ -1 +1 @@ -
    +
    \ No newline at end of file diff --git a/src/app/app-modules/user-login/captcha/captcha.component.ts b/src/app/app-modules/user-login/captcha/captcha.component.ts index 78cec48..4c05445 100644 --- a/src/app/app-modules/user-login/captcha/captcha.component.ts +++ b/src/app/app-modules/user-login/captcha/captcha.component.ts @@ -6,6 +6,7 @@ import { EventEmitter, Inject, OnDestroy, + ViewChild, } from '@angular/core'; import { CaptchaService } from '../../services/captcha-service/captcha.service'; import { environment } from 'src/environments/environment'; @@ -18,37 +19,45 @@ declare const turnstile: any; }) export class CaptchaComponent implements AfterViewInit, OnDestroy { @Output() tokenResolved = new EventEmitter(); + @ViewChild('captchaContainer') captchaRef!: ElementRef; private widgetId: string | null = null; constructor( private el: ElementRef, - @Inject(CaptchaService) private captchaService: CaptchaService, + private captchaService: CaptchaService ) {} async ngAfterViewInit() { try { await this.captchaService.loadScript(); - const captchaElement = - this.el.nativeElement.querySelector('#cf-turnstile'); + const captchaElement = this.captchaRef?.nativeElement; if (!captchaElement) { console.error('CAPTCHA container element not found'); return; } - this.widgetId = turnstile.render(captchaElement, { - sitekey: environment.siteKey, - theme: 'light', - callback: (token: string) => this.tokenResolved.emit(token), - }); + if (!this.widgetId) { + this.widgetId = turnstile.render(captchaElement, { + sitekey: environment.siteKey, + theme: 'light', + callback: (token: string) => this.tokenResolved.emit(token), + }); + } } catch (error) { console.error('Failed to initialize CAPTCHA:', error); } } + public reset() { + if (this.widgetId && typeof turnstile !== 'undefined') { + turnstile.reset(this.widgetId); + } + } + ngOnDestroy() { if (this.widgetId && typeof turnstile !== 'undefined' && turnstile.remove) { turnstile.remove(this.widgetId); } } -} +} \ No newline at end of file diff --git a/src/app/app-modules/user-login/login/login.component.html b/src/app/app-modules/user-login/login/login.component.html index 03e295d..1a2296b 100644 --- a/src/app/app-modules/user-login/login/login.component.html +++ b/src/app/app-modules/user-login/login/login.component.html @@ -79,7 +79,7 @@
    - +

    -
    +
    diff --git a/src/app/app-modules/user-login/login/login.component.ts b/src/app/app-modules/user-login/login/login.component.ts index 7019d7b..5187684 100644 --- a/src/app/app-modules/user-login/login/login.component.ts +++ b/src/app/app-modules/user-login/login/login.component.ts @@ -33,6 +33,7 @@ import { DOCUMENT } from '@angular/common'; import * as moment from 'moment'; import * as CryptoJS from 'crypto-js'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; +import { CaptchaComponent } from '../captcha/captcha.component'; /** * DE40034072 - 12-01-2022 */ @@ -42,7 +43,7 @@ import { SessionStorageService } from 'Common-UI/src/registrar/services/session- styleUrls: ['./login.component.css'], }) export class LoginComponent implements OnInit, OnDestroy { - @ViewChild('captchaCmp') captchaCmp: any; + @ViewChild('captchaCmp') captchaCmp: CaptchaComponent | undefined; username: any; password: any; hide = true; @@ -61,7 +62,7 @@ export class LoginComponent implements OnInit, OnDestroy { _iterationCount: any; captchaToken!:string; isLoginDisabled = true; - + enableCaptcha = environment.enableCaptcha; constructor( private fb: FormBuilder, @@ -169,7 +170,7 @@ export class LoginComponent implements OnInit, OnDestroy { password: encryptedPwd, doLogout: false, withCredentials: true, - captchaToken:this.captchaToken + ...( this.enableCaptcha ? {captchaToken:this.captchaToken} : {}) }; this.loginService.validateLogin(reqObj).subscribe( (res: any) => { @@ -225,7 +226,7 @@ export class LoginComponent implements OnInit, OnDestroy { password: encryptedPwd, doLogout: true, withCredentials: true, - captchaToken:this.captchaToken + ...(this.enableCaptcha ? {captchaToken:this.captchaToken} : {}), }; this.loginService .validateLogin(loginReqObj).subscribe((userLoggedIn: any) => { @@ -391,7 +392,10 @@ export class LoginComponent implements OnInit, OnDestroy { } updateLoginDisabled(): void { - this.isLoginDisabled = !(this.loginForm.valid && this.captchaToken); + // Disable login button if the form is invalid or captcha is required but not resolved + const isFormValid = this.loginForm.valid; + const isCaptchaValid = !this.enableCaptcha || !!this.captchaToken; + this.isLoginDisabled = !(isFormValid && isCaptchaValid); } onCaptchaResolved(token: string) { @@ -400,7 +404,7 @@ export class LoginComponent implements OnInit, OnDestroy { } resetCaptcha() { - if (this.captchaCmp && typeof this.captchaCmp.reset === 'function') { + if (this.enableCaptcha && this.captchaCmp && typeof this.captchaCmp.reset === 'function') { this.captchaCmp.reset(); this.captchaToken = ''; this.updateLoginDisabled(); diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index 487dae3..6cc824c 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -27,6 +27,7 @@ const biologicalScreeningDeviceAPI = `${ADMIN_API}diagnostics/biologicalScreenin const sessionStorageEncKey = '<%= SESSION_STORAGE_ENC_KEY %>'; const siteKey = '<%= SITE_KEY %>'; const captchaChallengeURL = '<%= CAPTCHA_CHALLENGE_URL %>'; +const enableCaptcha = '<%= ENABLE_CAPTCHA %>'; export const environment = { production: true, @@ -255,4 +256,5 @@ sendSMSAPI: `${COMMON_API}video-consultation/send-link`, updateCallStatusAPI: `${COMMON_API}video-consultation/update-call-status`, siteKey: siteKey, captchaChallengeURL: captchaChallengeURL, +enableCaptcha: enableCaptcha }; \ No newline at end of file diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts index d6af57c..e2b60bb 100644 --- a/src/environments/environment.local.ts +++ b/src/environments/environment.local.ts @@ -36,7 +36,7 @@ const biologicalScreeningDeviceAPI = `${ADMIN_API}diagnostics/biologicalScreenin const sessionStorageEncKey = ''; const siteKey = ''; const captchaChallengeURL = ''; - +const enableCaptcha = false; export const environment = { production: false, @@ -266,8 +266,9 @@ generateVideoLinkURL :`${COMMON_API1}video-consultation/generate-link`, sendSMSAPI: `${COMMON_API1}video-consultation/send-link`, updateCallStatusAPI: `${COMMON_API1}video-consultation/update-call-status`, -siteKey:siteKey, -captchaChallengeURL:captchaChallengeURL +siteKey: siteKey, +captchaChallengeURL: captchaChallengeURL, +enableCaptcha: enableCaptcha }; diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index af34ec1..95df140 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -31,7 +31,7 @@ const biologicalScreeningDeviceAPI = `${ADMIN_API}diagnostics/biologicalScreenin const sessionStorageEncKey = ''; const siteKey = ''; const captchaChallengeURL = ''; - +const enableCaptcha = false; export const environment = { production: true, @@ -261,6 +261,7 @@ generateVideoLinkURL :`${COMMON_API}video-consultation/generate-link`, sendSMSAPI: `${COMMON_API}video-consultation/send-link`, updateCallStatusAPI: `${COMMON_API}video-consultation/update-call-status`, -siteKey:siteKey, -captchaChallengeURL:captchaChallengeURL +siteKey: siteKey, +captchaChallengeURL: captchaChallengeURL, +enableCaptcha: enableCaptcha }; \ No newline at end of file From 9fe468644674bee7fe586585637994f81c7ce881 Mon Sep 17 00:00:00 2001 From: 5Amogh Date: Fri, 6 Jun 2025 15:22:07 +0530 Subject: [PATCH 126/134] fix: force logout & login edge case for captcha --- src/app/app-modules/user-login/login/login.component.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app/app-modules/user-login/login/login.component.ts b/src/app/app-modules/user-login/login/login.component.ts index 5187684..ad819dd 100644 --- a/src/app/app-modules/user-login/login/login.component.ts +++ b/src/app/app-modules/user-login/login/login.component.ts @@ -189,20 +189,22 @@ export class LoginComponent implements OnInit, OnDestroy { this.userLogOutPreviousSession(res); } else { sessionStorage.clear(); + this.resetCaptcha(); this.router.navigate(['/login']); this.confirmationService.openDialog(res.errorMessage, 'error'); } } else { + this.resetCaptcha(); this.confirmationService.openDialog(res.errorMessage, 'error'); } }, (err: any) => { + this.resetCaptcha(); if(err && err.error) this.confirmationService.openDialog(err.error, 'error'); else this.confirmationService.openDialog(err.title + err.detail, 'error') }); - this.resetCaptcha(); } /** @@ -240,12 +242,14 @@ export class LoginComponent implements OnInit, OnDestroy { this.loginService.userLoginData = userLoggedIn.data; this.getServiceAuthenticationDetails(userLoggedIn.data); } else { + this.resetCaptcha(); this.confirmationService.openDialog( this.currentLanguageSet.seemsYouAreLoggedIn, 'error' ); } } else { + this.resetCaptcha(); this.confirmationService.openDialog( userLoggedIn.errorMessage, 'error' @@ -253,6 +257,7 @@ export class LoginComponent implements OnInit, OnDestroy { } }); } else { + this.resetCaptcha(); this.confirmationService.openDialog( logOutFromPreviousSession.errorMessage, 'error' From 55dc16a34c25b8d78aa1904f1662357d2f1a216f Mon Sep 17 00:00:00 2001 From: Mithun James <1007084+drtechie@users.noreply.github.com> Date: Sat, 7 Jun 2025 08:51:38 +0530 Subject: [PATCH 127/134] Fix telephony server URL --- scripts/ci-prebuild.js | 3 ++- src/environments/environment.ci.ts.template | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/ci-prebuild.js b/scripts/ci-prebuild.js index 96af4e4..6338d5a 100644 --- a/scripts/ci-prebuild.js +++ b/scripts/ci-prebuild.js @@ -41,7 +41,8 @@ const defaultEnvValues = { COMMON_API_BASE: '', ADMIN_API_BASE: '', ECD_API_BASE: '', - SESSION_STORAGE_ENC_KEY: '' + SESSION_STORAGE_ENC_KEY: '', + TELEPHONY_SERVER: '', }; // Generate output data diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index f94d8e4..4491bad 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -25,6 +25,7 @@ const ADMIN_API = '<%= ADMIN_API_BASE %>'; const ECD_API = '<%= ECD_API_BASE %>'; const biologicalScreeningDeviceAPI = `${ADMIN_API}diagnostics/biologicalScreeningDevice`; const sessionStorageEncKey = '<%= SESSION_STORAGE_ENC_KEY %>'; +const TELEPHONY_SERVER = '<%= TELEPHONY_SERVER %>'; export const environment = { production: true, @@ -183,7 +184,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `https://uatcz.piramalswasthya.org/`, + ctiUrl: TELEPHONY_SERVER, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, From 73402fb7fa05e1622806ea5b3219aa8fcde845e4 Mon Sep 17 00:00:00 2001 From: 5Amogh Date: Tue, 10 Jun 2025 18:04:25 +0530 Subject: [PATCH 128/134] Merge branch 'develop' of https://github.com/PSMRI/ECD-UI into develop-amogh --- scripts/ci-prebuild.js | 1 + src/environments/environment.ci.ts.template | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/ci-prebuild.js b/scripts/ci-prebuild.js index 0bbbdef..6b74b5a 100755 --- a/scripts/ci-prebuild.js +++ b/scripts/ci-prebuild.js @@ -45,6 +45,7 @@ const defaultEnvValues = { SITE_KEY:'', CAPTCHA_CHALLENGE_URL:'', ENABLE_CAPTCHA: false, + TELEPHONY_SERVER: '', }; // Generate output data diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index 6cc824c..f037637 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -28,6 +28,7 @@ const sessionStorageEncKey = '<%= SESSION_STORAGE_ENC_KEY %>'; const siteKey = '<%= SITE_KEY %>'; const captchaChallengeURL = '<%= CAPTCHA_CHALLENGE_URL %>'; const enableCaptcha = '<%= ENABLE_CAPTCHA %>'; +const TELEPHONY_SERVER = '<%= TELEPHONY_SERVER %>'; export const environment = { production: true, @@ -186,7 +187,7 @@ export const environment = { getBeneficiaryCallHistoryUrl:`${ECD_API}callHistory/getBeneficiaryCallHistory`, getCallHistoryDetailsUrl:`${ECD_API}callHistory/getBeneficiaryCallDetails`, /**CTI Urls */ - ctiUrl: `https://uatcz.piramalswasthya.org/`, + ctiUrl: TELEPHONY_SERVER, ctiEventUrl: `bar/cti_handler.php?e=`, getLoginKeyUrl:`${COMMON_API}cti/getLoginKey`, getAgentsDataUrl: `${ECD_API}master/getAgentsByRoleId`, From 248ed8c9da63d037055017c9e6e7fc774ade519f Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Thu, 12 Jun 2025 10:51:53 +0530 Subject: [PATCH 129/134] fix: amm-1613 ecd_assam_prod_newly created call centre id not working --- .../user-login/login/login.component.ts | 2 +- .../set-password/set-password.component.ts | 4 +- .../set-security-questions.component.css | 3 + .../set-security-questions.component.html | 150 ++++++++++-------- .../set-security-questions.component.ts | 8 +- 5 files changed, 96 insertions(+), 71 deletions(-) diff --git a/src/app/app-modules/user-login/login/login.component.ts b/src/app/app-modules/user-login/login/login.component.ts index ad819dd..a6fc4c0 100644 --- a/src/app/app-modules/user-login/login/login.component.ts +++ b/src/app/app-modules/user-login/login/login.component.ts @@ -353,7 +353,7 @@ export class LoginComponent implements OnInit, OnDestroy { loginDataResponse.isAuthenticated ); this.sessionstorage.setItem('userName', loginDataResponse.userName); - sessionStorage.setItem('userId', loginDataResponse.userID); + sessionStorage.setItem('userID', loginDataResponse.userID); this.sessionstorage.setItem('onCall', 'false'); this.sessionstorage.setItem( 'providerServiceMapID', diff --git a/src/app/app-modules/user-login/set-password/set-password.component.ts b/src/app/app-modules/user-login/set-password/set-password.component.ts index dfec6d4..e5e04ca 100644 --- a/src/app/app-modules/user-login/set-password/set-password.component.ts +++ b/src/app/app-modules/user-login/set-password/set-password.component.ts @@ -27,6 +27,7 @@ import { Router } from '@angular/router'; import { ConfirmationService } from '../../services/confirmation/confirmation.service'; import { LoginserviceService } from '../../services/loginservice/loginservice.service'; import * as CryptoJS from 'crypto-js'; +import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; /** * KA40094929 @@ -62,6 +63,7 @@ export class SetPasswordComponent implements OnInit { private confirmationService: ConfirmationService, private router: Router, private loginService: LoginserviceService, + private sessionstorage: SessionStorageService ) { this._keySize = 256; this._ivSize = 128; @@ -69,7 +71,7 @@ export class SetPasswordComponent implements OnInit { } ngOnInit(): void { - this.uname = this.loginService.userName; + this.uname = this.sessionstorage.getItem('userName'); } setpasswordform = this.fb.group({ diff --git a/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.css b/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.css index 9dafca2..dd187cd 100644 --- a/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.css +++ b/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.css @@ -63,3 +63,6 @@ input::-ms-clear { border-radius: 10px !important; box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); } +.m-b-10 { + margin-bottom: 10px; +} diff --git a/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.html b/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.html index d993035..f155d10 100644 --- a/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.html +++ b/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.html @@ -1,81 +1,101 @@ - -
    - Logo -
    -
    -

    Account Support

    -
    - Follow the steps to change/reset the password -
    -
    -
    -
    -
    - - Question1 - - - {{ question.Question }} - - - -
    + +
    + Logo +
    +
    +

    Account Support

    +
    + Follow the steps to change/reset the password +
    +
    + +
    +
    -
    - - Answer1 - + + Question 1 + + + {{ question.Question }} + + + +
    +
    + + Answer 1 +
    +
    -
    - - Question2 - - - {{ question.Question }} - - - -
    +
    +
    -
    - - Answer2 - + + Question 2 + + + {{ question.Question }} + + + +
    +
    + + Answer 2 +
    +
    -
    - - Question3 - - - {{ question.Question }} - - - +
    +
    + + Question 3 + + + {{ question.Question }} + + +
    - -
    - - Answer3 - +
    + + Answer 3 +
    -
    - +
    + +
    +
    +
    - -
    +
    + - + \ No newline at end of file diff --git a/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.ts b/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.ts index 5c8b7a8..f2b897d 100644 --- a/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.ts +++ b/src/app/app-modules/user-login/set-security-questions/set-security-questions.component.ts @@ -110,21 +110,21 @@ questionForm = this.fb.group({ setSecurityQuestions(){ this.dataArray = [ { - 'userID': this.sessionstorage.getItem('userID'), + 'userID': sessionStorage.getItem('userID'), 'questionID': this.questionForm.controls.question1.value, 'answers': ((this.questionForm.controls.answer1.value !== null && this.questionForm.controls.answer1.value !== undefined) ? this.questionForm.controls.answer1.value.trim() : ''), 'mobileNumber': '1234567890', 'createdBy': this.uname }, { - 'userID': this.sessionstorage.getItem('userID'), + 'userID': sessionStorage.getItem('userID'), 'questionID': this.questionForm.controls.question2.value, 'answers': ((this.questionForm.controls.answer2.value !== null && this.questionForm.controls.answer2.value !== undefined) ? this.questionForm.controls.answer2.value.trim() : ''), 'mobileNumber': '1234567890', 'createdBy': this.uname }, { - 'userID': this.sessionstorage.getItem('userID'), + 'userID': sessionStorage.getItem('userID'), 'questionID': this.questionForm.controls.question3.value, 'answers': ((this.questionForm.controls.answer3.value !== null && this.questionForm.controls.answer3.value !== undefined) ? this.questionForm.controls.answer3.value.trim() : ''), 'mobileNumber': '1234567890', @@ -136,7 +136,7 @@ setSecurityQuestions(){ updatePassword(){ this.loginService.saveSecurityQuesAns(this.dataArray).subscribe((res:any)=>{ - if(res.statuscode === 200){ + if(res.statusCode === 200){ if(res.data !== undefined && res.data !== null){ this.loginService.transactionId = res.data.transactionId; this.router.navigate(['/set-password']); From 0b446af4439bcf65f67ad8d6fedc1b2518014193 Mon Sep 17 00:00:00 2001 From: SnehaRH Date: Fri, 13 Jun 2025 12:07:29 +0530 Subject: [PATCH 130/134] feat: disabled the videocall feature --- .../ben-registration/ben-registration.component.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index 85655b9..58c3b5a 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -558,7 +558,7 @@ import { VideoConsultationService } from '../../video-consultation/videoService' this.confirmationService.openDialog(this.currentLanguageSet.beneficiaryRegisteredSuccessfully + " " + benRegId, `success`); this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); - this.performAction(); + // this.performAction(); } else { @@ -723,7 +723,7 @@ import { VideoConsultationService } from '../../video-consultation/videoService' this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); - this.performAction(); + // this.performAction(); } else { @@ -750,7 +750,7 @@ import { VideoConsultationService } from '../../video-consultation/videoService' .subscribe((response) => { if (response) { - this.performAction(); + // this.performAction(); this.associateAnmMoService.setOpenComp("ECD Questionnaire"); this.associateAnmMoService.onClickOfEcdQuestionnaire(true); From 9b946a8c1250fcd778674b0dac64557dc391b44b Mon Sep 17 00:00:00 2001 From: Amoghavarsh <93114621+5Amogh@users.noreply.github.com> Date: Tue, 17 Jun 2025 15:09:30 +0530 Subject: [PATCH 131/134] fix: type fix for the enable captcha variable (#41) --- src/environments/environment.ci.ts.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/environments/environment.ci.ts.template b/src/environments/environment.ci.ts.template index 2997336..2748ad6 100644 --- a/src/environments/environment.ci.ts.template +++ b/src/environments/environment.ci.ts.template @@ -28,7 +28,7 @@ const sessionStorageEncKey = '<%= SESSION_STORAGE_ENC_KEY %>'; const TELEPHONY_SERVER = '<%= TELEPHONY_SERVER %>'; const siteKey = '<%= SITE_KEY %>'; const captchaChallengeURL = '<%= CAPTCHA_CHALLENGE_URL %>'; -const enableCaptcha = '<%= ENABLE_CAPTCHA %>'; +const enableCaptcha = <%= ENABLE_CAPTCHA %>; export const environment = { production: true, From df40d63299479577988e2fd89799f6f3926c0371 Mon Sep 17 00:00:00 2001 From: SnehaRH <77656297+snehar-nd@users.noreply.github.com> Date: Thu, 19 Jun 2025 13:15:45 +0530 Subject: [PATCH 132/134] Enabling VC (#42) * feat: enabling the vc feat * feat: adding jitsi self server URL * fix: made changes suggested by code rabbit --- .../ben-registration.component.ts | 120 +----------------- .../floating-video.component.ts | 18 ++- src/index.html | 2 +- 3 files changed, 17 insertions(+), 123 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts index 58c3b5a..2b351e5 100644 --- a/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts +++ b/src/app/app-modules/associate-anm-mo/beneficiary-registration/ben-registration/ben-registration.component.ts @@ -29,7 +29,6 @@ import { ConfirmationService } from 'src/app/app-modules/services/confirmation/c import { SetLanguageService } from 'src/app/app-modules/services/set-language/set-language.service'; import { MasterService } from 'src/app/app-modules/services/masterService/master.service'; import { LoginserviceService } from 'src/app/app-modules/services/loginservice/loginservice.service'; -import * as moment from 'moment'; import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; import { MatLegacyDialog as MatDialog, MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA, MatLegacyDialogRef as MatDialogRef } from '@angular/material/legacy-dialog'; import { VideoConsultationService } from '../../video-consultation/videoService'; @@ -66,26 +65,16 @@ import { VideoConsultationService } from '../../video-consultation/videoService' districtMasterList: any; blockMasterList: any; villageMasterList: any; - // genderMasterList:any; genderMasterList: any; ageLimit = 120; valueEntered: any; - // = [ - // { - // "genderID" : 1, - // "genderName" : "Male" - // }, - // { - // "genderID" : 2, - // "genderName" : "Female" - // } - // ]; + enableUpdateButton = false; minimumDate: any; callerPhoneNumber: any; agentID: any; agentName: any; - hideVideoCall = false; + hideVideoCall = true; constructor( private fb: FormBuilder, @@ -98,7 +87,6 @@ import { VideoConsultationService } from '../../video-consultation/videoService' readonly sessionstorage: SessionStorageService, public dialog: MatDialog, public videoService: VideoConsultationService, - // private cdr: ChangeDetectorRef, ) { } @@ -343,111 +331,7 @@ import { VideoConsultationService } from '../../video-consultation/videoService' } } - // patchDemographicMasters(viewDetails:any) { - - // this.stateMasterList.filter((values:any) => { - // if (viewDetails.stateName !== undefined && viewDetails.stateName !== null && (values.stateName.toLowerCase() === viewDetails.stateName.toLowerCase())) { - // this.benRegistrationForm.controls.stateID.setValue(values.stateID); - // } - // }); - - // if(this.benRegistrationForm.controls.stateID.value !== undefined && this.benRegistrationForm.controls.stateID.value !== null && this.benRegistrationForm.controls.stateID.value !== ""){ - // this.getDistrictMaster(this.benRegistrationForm.controls.stateID.value,viewDetails); - // } - // } - - // getDistrictMaster(stateID:any,viewDetails:any) { - - // this.masterService.getDistrictMaster(stateID).subscribe( - // (response: any) => { - // if (response && response.data !== null) { - // this.districtMasterList = response.data; - // this.blockMasterList = []; - // this.villageMasterList = []; - - // this.districtMasterList.filter((values:any) => { - // if (viewDetails.districtName !== undefined && viewDetails.districtName !== null && (values.districtName.toLowerCase() === viewDetails.districtName.toLowerCase())) { - // this.benRegistrationForm.controls.districtID.setValue(values.districtID); - // } - // }); - - // if(this.benRegistrationForm.controls.districtID.value !== undefined && this.benRegistrationForm.controls.districtID.value !== null && this.benRegistrationForm.controls.districtID.value !== ""){ - // this.getBlockMaster(this.benRegistrationForm.controls.districtID.value,viewDetails); - // } - - // } else { - // this.confirmationService.openDialog(response.errorMessage, 'error'); - // } - // }, - // (err: any) => { - // if(err && err.error) - // this.confirmationService.openDialog(err.error, 'error'); - // else - // this.confirmationService.openDialog(err.title + err.detail, 'error') - // } - // ); - - - - // } - - - // getBlockMaster(dictrictID:any,viewDetails:any) { - // this.masterService.getBlockMaster(dictrictID).subscribe( - // (response: any) => { - // if (response && response.data !== null) { - // this.blockMasterList = response.data; - // this.villageMasterList = []; - - // this.blockMasterList.filter((values:any) => { - // if (viewDetails.blockName !== undefined && viewDetails.blockName !== null && (values.blockName.toLowerCase() === viewDetails.blockName.toLowerCase())) { - // this.benRegistrationForm.controls.blockID.setValue(values.blockID); - // } - // }); - - // if(this.benRegistrationForm.controls.blockID.value !== undefined && this.benRegistrationForm.controls.blockID.value !== null && this.benRegistrationForm.controls.blockID.value !== ""){ - // this.getVillageMaster(this.benRegistrationForm.controls.blockID.value,viewDetails); - // } - // } else { - // this.confirmationService.openDialog(response.errorMessage, 'error'); - // } - // }, - // (err: any) => { - // if(err && err.error) - // this.confirmationService.openDialog(err.error, 'error'); - // else - // this.confirmationService.openDialog(err.title + err.detail, 'error') - // } - // ); - // } - - // getVillageMaster(blockID:any,viewDetails:any) { - // this.masterService.getVillageMaster(blockID).subscribe( - // (response: any) => { - // if (response && response.data !== null) { - // this.villageMasterList = response.data; - - // this.villageMasterList.filter((values:any) => { - // if (viewDetails.villageName !== undefined && viewDetails.villageName !== null && (values.villageName.toLowerCase() === viewDetails.villageName.toLowerCase())) { - // this.benRegistrationForm.controls.districtBranchID.setValue(values.districtBranchID); - // } - // }); - - - - // } else { - // this.confirmationService.openDialog(response.errorMessage, 'error'); - // } - // }, - // (err: any) => { - // if(err && err.error) - // this.confirmationService.openDialog(err.error, 'error'); - // else - // this.confirmationService.openDialog(err.title + err.detail, 'error') - // } - // ); - // } setGenderName(genderValue: any) { this.benRegistrationForm.controls.genderName.setValue(genderValue); diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts index 6df6bf3..ce5b150 100644 --- a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts @@ -45,12 +45,11 @@ import { VideoConsultationService } from '../video-consultation/videoService'; this.videoService.apiInitialized = true; // Add this flag to prevent double init - const domain = 'meet.jit.si'; + const domain = 'vc.piramalswasthya.org'; try { const options = { roomName: this.videoService.meetLink.split('/').pop(), parentNode: this.jitsiContainerRef.nativeElement, - // parentNode: document.querySelector('#jitsi-container'), userInfo: { displayName: 'Agent' }, @@ -58,12 +57,23 @@ import { VideoConsultationService } from '../video-consultation/videoService'; startWithAudioMuted: false, startWithVideoMuted: false, prejoinPageEnabled: false, - disableModeratorIndicator: true + disableModeratorIndicator: true, + serviceUrl: 'wss://vc.piramalswasthya.org/xmpp-websocket', + enableNoAudioDetection: true, + enableNoisyMicDetection: true + }, interfaceConfigOverwrite: { SHOW_JITSI_WATERMARK: false, SHOW_BRAND_WATERMARK: false, - disableDeepLinking: true + disableDeepLinking: true, + SHOW_POWERED_BY: false, + TOOLBAR_BUTTONS: [ + 'microphone', 'recording', 'camera', 'fullscreen', + 'hangup', + 'chat', 'settings', 'raisehand', + 'videoquality' + ], } }; diff --git a/src/index.html b/src/index.html index 85166cf..c99a76c 100644 --- a/src/index.html +++ b/src/index.html @@ -35,7 +35,7 @@ rel="stylesheet" href="../node_modules/bootstrap/dist/css/bootstrap.css" /> --> - + From a1fe94faa97e1797963494703e647da5d7b1a106 Mon Sep 17 00:00:00 2001 From: SnehaRH <77656297+snehar-nd@users.noreply.github.com> Date: Thu, 26 Jun 2025 15:08:40 +0530 Subject: [PATCH 133/134] Nd/sneha/video (#43) * feat: enabling the vc feat * feat: adding jitsi self server URL * fix: made changes suggested by code rabbit * feat: vc module changes --- .../agents-innerpage.component.ts | 6 +- .../floating-video.component.css | 100 ++++++++++-------- .../floating-video.component.ts | 46 ++++---- .../video-consultation.component.css | 18 +++- .../video-consultation.component.html | 25 ++--- .../video-consultation.component.ts | 15 ++- 6 files changed, 118 insertions(+), 92 deletions(-) diff --git a/src/app/app-modules/associate-anm-mo/agents-innerpage/agents-innerpage.component.ts b/src/app/app-modules/associate-anm-mo/agents-innerpage/agents-innerpage.component.ts index 9fd219e..0ecb4d0 100644 --- a/src/app/app-modules/associate-anm-mo/agents-innerpage/agents-innerpage.component.ts +++ b/src/app/app-modules/associate-anm-mo/agents-innerpage/agents-innerpage.component.ts @@ -351,12 +351,8 @@ export class AgentsInnerpageComponent implements OnInit, DoCheck, OnDestroy { this.benPhoneNo = this.sessionstorage.getItem("benPhoneNo"); this.callId = this.sessionstorage.getItem("callId"); this.associateAnmMoService.setOpenComp("Call Closed"); - // this.associateAnmMoService.loadComponent( - // OutboundWorklistComponent, - // null - // ); + } - this.getAgentState(); } viewBenRegScreen() { diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css index bb82906..97825f6 100644 --- a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.css @@ -1,48 +1,54 @@ - .floating-video { - position: fixed; - width: 400px; - height: 500px; - background: white; - border: 1px solid #ccc; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); - z-index: 10000; - bottom: 20px; - right: 20px; - display: flex; - flex-direction: column; - overflow: hidden; - border-radius: 8px; - } - .drag-header { - height: 40px; - background: #f0f0f0; - cursor: move; - display: flex; - align-items: center; - justify-content: space-between; - padding: 0 12px; - font-weight: bold; - user-select: none; - flex-shrink: 0; - } - - #jitsi-container { - flex-grow: 1; - width: 100%; - height: 100%; - } - - .close-btn { - background-color: red; - color: white; - border: none; - border-radius: 4px; - font-size: 16px; - width: 25px; - height: 25px; - cursor: pointer; - line-height: 1; - text-align: center; - } - \ No newline at end of file + .floating-video { + position: fixed; + width: 500px; + height: 700px; + background: white; + border: 1px solid #ccc; + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); + z-index: 10000; + top: 100px; + left: 100px; + display: flex; + flex-direction: column; + overflow: hidden; + border-radius: 8px; + transition: transform 0.2s ease; /* Optional for smooth drag */ +} + +.drag-header { + height: 40px; + background: #f0f0f0; + cursor: move; + display: flex; + align-items: center; + justify-content: space-between; + padding: 0 12px; + font-weight: bold; + user-select: none; + flex-shrink: 0; + border-bottom: 1px solid #ddd; +} + +#jitsi-container { + flex-grow: 1; + width: 100% !important; + height: 100% !important; + position: relative; +} + +.close-btn { + background-color: red; + color: white; + border: none; + border-radius: 4px; + font-size: 16px; + width: 25px; + height: 25px; + cursor: pointer; + line-height: 1; + text-align: center; + display: flex; + align-items: center; + justify-content: center; +} diff --git a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts index ce5b150..4a4af1a 100644 --- a/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts +++ b/src/app/app-modules/associate-anm-mo/floating-videocall/floating-video.component.ts @@ -3,11 +3,11 @@ import { AfterViewInit, ElementRef, ViewChild, - HostListener, ChangeDetectionStrategy } from '@angular/core'; -import { VideoConsultationService } from '../video-consultation/videoService'; - +import { VideoConsultationService } from '../video-consultation/videoService'; +import { SessionStorageService } from 'Common-UI/src/registrar/services/session-storage.service'; + declare let JitsiMeetExternalAPI: any; @Component({ @@ -26,12 +26,16 @@ import { VideoConsultationService } from '../video-consultation/videoService'; private lastMove = 0; - constructor(public videoService: VideoConsultationService) {} + constructor( + public videoService: VideoConsultationService, + readonly sessionstorage: SessionStorageService, + + ) {} ngAfterViewInit(): void { const container = this.jitsiContainerRef?.nativeElement; - if (!this.videoService.apiInitialized || container?.childElementCount === 0 && this.videoService.meetLink) { + if ((!this.videoService.apiInitialized || container?.childElementCount === 0) && this.videoService.meetLink) { this.initializeJitsi(); } } @@ -48,10 +52,10 @@ import { VideoConsultationService } from '../video-consultation/videoService'; const domain = 'vc.piramalswasthya.org'; try { const options = { - roomName: this.videoService.meetLink.split('/').pop(), + roomName: this.videoService.meetLink?.split('/').pop(), parentNode: this.jitsiContainerRef.nativeElement, userInfo: { - displayName: 'Agent' + displayName: this.sessionstorage.getItem('userName'), }, configOverwrite: { startWithAudioMuted: false, @@ -101,23 +105,29 @@ import { VideoConsultationService } from '../video-consultation/videoService'; document.addEventListener('mouseup', this.endDrag); } - onDrag = (event: MouseEvent) => { + + + onDrag = (event: MouseEvent): void => { + if (!this.isDragging) return; + const now = Date.now(); if (now - this.lastMove < 16) return; // Throttle to ~60fps this.lastMove = now; - - if (!this.isDragging) return; - + const left = event.clientX - this.offsetX; const top = event.clientY - this.offsetY; - - const windowElement = this.floatingWindowRef.nativeElement; - windowElement.style.left = `${left}px`; - windowElement.style.top = `${top}px`; - windowElement.style.bottom = 'auto'; - windowElement.style.right = 'auto'; + + const floatingEl = this.floatingWindowRef.nativeElement; + + // Apply constraints to keep window within the viewport (optional but helpful) + const maxLeft = window.innerWidth - floatingEl.offsetWidth; + const maxTop = window.innerHeight - floatingEl.offsetHeight; + + floatingEl.style.left = `${Math.max(0, Math.min(left, maxLeft))}px`; + floatingEl.style.top = `${Math.max(0, Math.min(top, maxTop))}px`; + floatingEl.style.right = 'auto'; + floatingEl.style.bottom = 'auto'; }; - endDrag = () => { this.isDragging = false; diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css index 2ed4b54..e3ebe08 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.css @@ -23,7 +23,7 @@ } /* Title */ .title { - font-size: 24px; + font-size: 20px; font-weight: bold; margin-bottom: 20px; color: #010102; @@ -32,10 +32,11 @@ /* Buttons */ .btn { width: 100%; - padding: 10px; + padding: 5px; font-size: 16px; - border-radius: 8px; + border-radius: 8px !important; margin-top: 10px; + font-family: 'Lato', sans-serif; } /* Disabled Button */ @@ -201,6 +202,17 @@ button[disabled] { z-index: 1000; } +.full-width { + height: 40px; + font-family: "Lato", sans-serif; + font-weight: 700; + color: #ffffff; + margin-top: 5px; + width: 100%; + max-width: 150px; + box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25); +} + :host { all: initial; font-family: inherit; diff --git a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html index e944592..a4ba180 100644 --- a/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html +++ b/src/app/app-modules/associate-anm-mo/video-consultation/video-consultation.component.html @@ -8,17 +8,17 @@ close -

    Video Consultation Consent

    +

    Video Consultation Consent

    - By agreeing, you consent to a secure video consultation, + By agreeing, your consent to a secure video consultation, understanding that your data will be handled confidentially.

    @@ -27,7 +27,7 @@

    Video Consultation Consent

    Note: We are continuing the video consultation on agreeing by Beneficiary.

    Video Consultation

    - @@ -38,12 +38,12 @@

    Video Consultation

  • Verify the beneficiary’s phone number and email.
  • Resend the link if needed.
  • -
    -

    Link Sent Status: @@ -52,7 +52,7 @@
    - +

    Beneficiary Link Receipt Confirmation: