dashboard pie chart

This commit is contained in:
Surendiran 2023-06-06 11:38:22 +05:30
parent 0f96f84e0c
commit e4f27db995
14 changed files with 706 additions and 426 deletions

View File

@ -19,16 +19,6 @@
}
}
},
"@ampproject/remapping": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
"integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
},
"@angular-devkit/architect": {
"version": "0.1102.19",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1102.19.tgz",
@ -160,6 +150,35 @@
"source-map": "^0.5.0"
},
"dependencies": {
"@babel/helper-module-transforms": {
"version": "7.21.5",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz",
"integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==",
"dev": true,
"requires": {
"@babel/helper-environment-visitor": "^7.21.5",
"@babel/helper-module-imports": "^7.21.4",
"@babel/helper-simple-access": "^7.21.5",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/helper-validator-identifier": "^7.19.1",
"@babel/template": "^7.20.7",
"@babel/traverse": "^7.21.5",
"@babel/types": "^7.21.5"
},
"dependencies": {
"@babel/template": {
"version": "7.21.9",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz",
"integrity": "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.21.4",
"@babel/parser": "^7.21.9",
"@babel/types": "^7.21.5"
}
}
}
},
"semver": {
"version": "5.7.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@ -654,6 +673,18 @@
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.2",
"semver": "^6.3.0"
},
"dependencies": {
"@ampproject/remapping": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
"integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
}
}
}
},
"semver": {
@ -921,19 +952,74 @@
}
},
"@babel/helper-module-transforms": {
"version": "7.21.5",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.5.tgz",
"integrity": "sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==",
"version": "7.22.1",
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz",
"integrity": "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==",
"dev": true,
"requires": {
"@babel/helper-environment-visitor": "^7.21.5",
"@babel/helper-environment-visitor": "^7.22.1",
"@babel/helper-module-imports": "^7.21.4",
"@babel/helper-simple-access": "^7.21.5",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/helper-validator-identifier": "^7.19.1",
"@babel/template": "^7.20.7",
"@babel/traverse": "^7.21.5",
"@babel/types": "^7.21.5"
"@babel/template": "^7.21.9",
"@babel/traverse": "^7.22.1",
"@babel/types": "^7.22.0"
},
"dependencies": {
"@babel/generator": {
"version": "7.22.3",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.3.tgz",
"integrity": "sha512-C17MW4wlk//ES/CJDL51kPNwl+qiBQyN7b9SKyVp11BLGFeSPoVaHrv+MNt8jwQFhQWowW88z1eeBx3pFz9v8A==",
"dev": true,
"requires": {
"@babel/types": "^7.22.3",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
}
},
"@babel/helper-environment-visitor": {
"version": "7.22.1",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz",
"integrity": "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==",
"dev": true
},
"@babel/parser": {
"version": "7.22.4",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz",
"integrity": "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==",
"dev": true
},
"@babel/traverse": {
"version": "7.22.4",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz",
"integrity": "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.21.4",
"@babel/generator": "^7.22.3",
"@babel/helper-environment-visitor": "^7.22.1",
"@babel/helper-function-name": "^7.21.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/parser": "^7.22.4",
"@babel/types": "^7.22.4",
"debug": "^4.1.0",
"globals": "^11.1.0"
}
},
"@babel/types": {
"version": "7.22.4",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz",
"integrity": "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==",
"dev": true,
"requires": {
"@babel/helper-string-parser": "^7.21.5",
"@babel/helper-validator-identifier": "^7.19.1",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-optimise-call-expression": {
@ -2068,11 +2154,6 @@
"yargs": "^17.7.2"
}
},
"@types/node": {
"version": "20.2.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz",
"integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw=="
},
"cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
@ -2116,11 +2197,6 @@
"yargs": "^16.2.0"
},
"dependencies": {
"@types/node": {
"version": "20.2.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz",
"integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw=="
},
"protobufjs": {
"version": "6.11.3",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
@ -2938,8 +3014,7 @@
"@types/node": {
"version": "14.18.47",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.47.tgz",
"integrity": "sha512-OuJi8bIng4wYHHA3YpKauL58dZrPxro3d0tabPHyiNF8rKfGKuVfr83oFlPLmKri1cX+Z3cJP39GXmnqkP11Gw==",
"dev": true
"integrity": "sha512-OuJi8bIng4wYHHA3YpKauL58dZrPxro3d0tabPHyiNF8rKfGKuVfr83oFlPLmKri1cX+Z3cJP39GXmnqkP11Gw=="
},
"@types/nvd3": {
"version": "1.8.42",
@ -4794,15 +4869,6 @@
"integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==",
"dev": true
},
"content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dev": true,
"requires": {
"safe-buffer": "5.2.1"
}
},
"content-type": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
@ -5110,6 +5176,14 @@
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
"dependencies": {
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true
}
}
},
"supports-color": {
@ -5699,6 +5773,11 @@
"integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==",
"dev": true
},
"dayjs": {
"version": "1.11.7",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
"integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ=="
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@ -6245,9 +6324,9 @@
}
},
"engine.io-parser": {
"version": "5.0.6",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz",
"integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==",
"version": "5.0.7",
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.7.tgz",
"integrity": "sha512-P+jDFbvK6lE3n1OL+q9KuzdOFWkkZ/cMV9gol/SbVfpyqfvrfrFTOFJ6fQm2VC3PZHlU3QPhVwmbsCnauHF2MQ==",
"dev": true
},
"enhanced-resolve": {
@ -6376,12 +6455,6 @@
"integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"dev": true
},
"eventemitter3": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
@ -6723,17 +6796,17 @@
}
},
"finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"dev": true,
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
},
"dependencies": {
@ -6751,6 +6824,21 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
"dev": true,
"requires": {
"ee-first": "1.1.1"
}
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"dev": true
}
}
},
@ -8707,21 +8795,6 @@
"ms": "2.0.0"
}
},
"finalhandler": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
"integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
"dev": true,
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "~2.3.0",
"parseurl": "~1.3.3",
"statuses": "~1.5.0",
"unpipe": "~1.0.0"
}
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@ -8748,15 +8821,6 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
"integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
"dev": true,
"requires": {
"ee-first": "1.1.1"
}
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@ -8769,12 +8833,6 @@
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true
},
"statuses": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"dev": true
},
"tmp": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
@ -9350,12 +9408,6 @@
"trim-newlines": "^1.0.0"
}
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
"dev": true
},
"merge-source-map": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
@ -9843,6 +9895,15 @@
"tslib": "^2.0.0"
}
},
"ngx-daterangepicker-material": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ngx-daterangepicker-material/-/ngx-daterangepicker-material-5.0.1.tgz",
"integrity": "sha512-vbxsiRqyBgXExRBPxuCodLlOOsVEZJ20nTPZks/7z943gZcb2XKwRuQ9hi43MG0xl7RVzDKZdsNKU8bzB86g7g==",
"requires": {
"dayjs": "^1.10.4",
"tslib": "^2.0.0"
}
},
"ngx-perfect-scrollbar": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/ngx-perfect-scrollbar/-/ngx-perfect-scrollbar-10.1.0.tgz",
@ -11003,12 +11064,6 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
"dev": true
},
"path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
@ -11611,11 +11666,6 @@
"long": "^5.0.0"
},
"dependencies": {
"@types/node": {
"version": "20.2.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.2.3.tgz",
"integrity": "sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw=="
},
"long": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
@ -11928,6 +11978,14 @@
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^18.1.2"
},
"dependencies": {
"which-module": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"dev": true
}
}
},
"yargs-parser": {
@ -11942,16 +12000,6 @@
}
}
},
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"dev": true,
"requires": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
@ -12839,6 +12887,14 @@
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^13.1.2"
},
"dependencies": {
"which-module": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"dev": true
}
}
},
"yargs-parser": {
@ -13116,82 +13172,6 @@
}
}
},
"serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dev": true,
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
"ms": "2.0.0"
},
"dependencies": {
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
}
}
},
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"dev": true
},
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"dev": true
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true
},
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
"dev": true
},
"send": {
"version": "0.18.0",
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
"dev": true,
"requires": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
"on-finished": "2.4.1",
"range-parser": "~1.2.1",
"statuses": "2.0.1"
}
}
}
},
"set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
@ -13571,12 +13551,6 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="
},
"source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true
},
"source-map-loader": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-1.1.3.tgz",
@ -15927,6 +15901,15 @@
"vary": "~1.1.2"
},
"dependencies": {
"content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"dev": true,
"requires": {
"safe-buffer": "5.2.1"
}
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -15936,11 +15919,66 @@
"ms": "2.0.0"
}
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"dev": true
},
"finalhandler": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
"dev": true,
"requires": {
"debug": "2.6.9",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
}
},
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
"dev": true
},
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
"dev": true
},
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"dev": true,
"requires": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
}
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"dev": true
},
"serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
"dev": true,
"requires": {
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.18.0"
}
}
}
},
@ -16214,6 +16252,12 @@
}
}
},
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
"dev": true
},
"ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@ -16337,6 +16381,14 @@
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^13.1.2"
},
"dependencies": {
"which-module": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"dev": true
}
}
},
"yargs-parser": {
@ -16468,12 +16520,6 @@
"isexe": "^2.0.0"
}
},
"which-module": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"dev": true
},
"wide-align": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",

View File

@ -55,6 +55,7 @@
"ng2-file-upload": "^1.4.0",
"ngx-bootstrap": "^10.2.0",
"ngx-color-picker": "^11.0.0",
"ngx-daterangepicker-material": "^5.0.1",
"ngx-perfect-scrollbar": "10.1.0",
"ngx-scrollbar": "^7.5.6",
"ngx-sortablejs": "^3.1.4",

View File

@ -79,15 +79,18 @@
<mat-label>Time</mat-label>
<input matInput placeholder="Select Time" name="week" formControlName="appoinmentTime" readonly>
</mat-form-field>
<mat-form-field appearance="outline" class="mat-pane" *ngIf="form.controls.service.value">
<mat-label>Fees</mat-label>
<input matInput placeholder="Fess" name="week" formControlName="fees" readonly>
</mat-form-field>
<mat-card class="cardDesign" *ngIf="form.controls.service.value">
<div class="innerdivs navStyle" fxLayoutAlign="center center">
<button type="button" mat-raised-button (click)="goToSlotBooking2()" style="background-color: #7fffd400;box-shadow: none;color:#fff" ><mat-icon style="cursor: pointer;">keyboard_arrow_left</mat-icon></button><span style="width: 150px;text-align: center;">{{check(days) | date:'longDate'}}</span><button mat-raised-button type="button" (click)="goToSlotBooking()" *ngIf="clicks < advanced_slot_days" style="background-color: #7fffd400;box-shadow: none;color:#fff" ><mat-icon style="cursor: pointer;">keyboard_arrow_right</mat-icon></button>
</div>
<div class="innerdivs2" >
<div *ngIf="slots.length != 0" [ngStyle]="{ 'height.px': slotslength * 12 }">
<div *ngIf="slots.length != 0" >
<!-- <div *ngIf="slots.length != 0" [ngStyle]="{ 'height.px': slots.length * 12 }"> -->
<!-- <ng-scrollbar class="scrollHV2" *ngIf="slots.length != 0"> -->
<ng-scrollbar class="scrollHV2">
<span *ngFor="let slot1 of slots;let j=index">
<!-- <button *ngFor="let slot of slot1;let i=index" mat-raised-button mat-button-sm class="mr-1 mt-1 hoverButton" [ngClass]="{'primary':slotIndex != i && checkSlotDur(slot,i)==1,'clickedSlot':slotIndex == i && checkSlotDur(slot,i)==1 }" (click)="toggleActive($event,slot,i)" ><span *ngIf="checkSlotDur(slot,i)==1">{{slot | date:'shortTime'}}</span></button> -->
<a *ngFor="let slot of slot1;let i=index">
@ -95,7 +98,7 @@
</a>
</span>
<!-- <button type="button" *ngFor="let slot of slots;let i=index" mat-raised-button mat-button-sm class="mr-1 mt-1 hoverButton" [ngClass]="{'primary':slotIndex != i && checkSlotDur(slot,i)==1,'clickedSlot':slotIndex == i && checkSlotDur(slot,i)==1 }" (click)="toggleActive($event,slot,i)"><span *ngIf="checkSlotDur(slot,i)==1">{{slot | date:'shortTime'}}</span></button> -->
<!-- </ng-scrollbar> -->
</ng-scrollbar>
</div>
<div *ngIf="slots.length == 0">
<div fxLayout="row" class="flexCard">
@ -144,7 +147,7 @@
</mat-form-field>
<div style="margin-top: 5px;margin-bottom: 15px;">
<mat-radio-group aria-label="Select an option" formControlName="paymentStatus">
<mat-radio-group aria-label="Select an option" formControlName="paymentStatus" required>
<mat-radio-button value="1">Paid</mat-radio-button>
<mat-radio-button value="0" style="margin-left: 10px;">Not Paid</mat-radio-button>
</mat-radio-group>

View File

@ -113,6 +113,7 @@ export class DialogBoxComponent implements OnInit {
selectedRadioValue: any;
slotIndex_group:any=[];
slotslength:any=[];
fees: any = [];
constructor(private notifierService: NotifierService,private router: Router,private formBuilder: FormBuilder, public _cus:CustomersService,
public dialogRef: MatDialogRef<DialogBoxComponent>,public _api:ConsultantService, public _con:ConsultantService,
@Inject(MAT_DIALOG_DATA) public data: UsersData,public _app:AppointmentsService,public end_user:EndUserService) {
@ -217,8 +218,8 @@ export class DialogBoxComponent implements OnInit {
appoinmentTime: new FormControl('',null),
customer: new FormControl('', [Validators.required]),
// note: new FormControl('', [Validators.required]),
status: new FormControl('', null),
status: new FormControl('', null),
fees: new FormControl('',null),
appoinmentSlots: new FormControl(''),
});
console.log(this.local_data, this.selects)
@ -228,13 +229,16 @@ export class DialogBoxComponent implements OnInit {
if(this.local_data.action != 'Add'){
this.local_data.service = this.local_data['ServicesMapDetail.serviceId']
this.ServiceId = this.local_data.service
this.local_data.customer = this.local_data.customer[0].id
this.customerId = this.local_data.customer
this.slotsResult =this.local_data.appoinmentSlots
this.local_data.appoinmentTime = new DatePipe('en-US').transform(this.local_data['appoinmentSlots'][0], 'shortTime')
console.log(this.servicesList_array)
this.local_data.appoinmentTime = new DatePipe('en-US').transform(this.local_data['appoinmentSlots'][0], 'shortTime')
console.log(this.servicesList_array)
this.local_data.paymentStatus = ""+this.local_data.paymentStatus+""
}
}
@ -479,7 +483,8 @@ export class DialogBoxComponent implements OnInit {
"appoinmentSlots": JSON.stringify(this.slotsResult),
//"servicemap" :this.bookedAppointment_servicemap
"paymentStatus": this.form.value.paymentStatus,
"paymentMode": this.form.value.paymentMode
"paymentMode": this.form.value.paymentMode,
"fees": this.fees
}
if(this.local_data.hasOwnProperty('id')){
paramsData.id =this.local_data.id
@ -708,7 +713,8 @@ console.log(params)
});
// this.assignService = this.checkedArray
}
serviceData(data){
serviceData(data){
console.log(data)
this.ServiceId = data.serviceId
this.duration = data.duration
@ -716,10 +722,12 @@ console.log(params)
console.log(serviceDetails)
if(serviceDetails[0].duration.length>0 ){
this.duration = serviceDetails[0].duration[0].durationNew
this.fees = serviceDetails[0].duration[0].fees
} else{
this.duration = this.servicesList_array[0].duration
this.fees = this.servicesList_array[0].fees
}
this.form.controls['fees'].setValue(this.fees)
this.clicks = 0
this.getSlots()
this.slotIndex= null

View File

@ -1,6 +1,6 @@
<!-- <mat-card class="settings-panel" > -->
<h5 mat-dialog-title>
<strong>{{serviceName}} Service</strong>
<strong>{{serviceName}}</strong>
<button mat-icon-button type="button" matTooltip="Close" class="button" matTooltipPosition="above" (click)="closeDialog()">
<mat-icon>close</mat-icon>
</button>
@ -16,6 +16,9 @@
<mat-form-field appearance="outline" class="mat-pane">
<mat-label>Fees</mat-label>
<input placeholder="Fees" matInput appMobileNumberPattern formControlName="fees">
<div matSuffix>
<span><b>{{currencySymbol}}</b></span>
</div>
<mat-error *ngIf="myError('fees', 'required')">Fees is required</mat-error>
</mat-form-field>
</div>

View File

@ -11,13 +11,15 @@ export class AssignServiceComponent implements OnInit {
form: FormGroup;
local_data: any;
serviceName: any = [];
currencySymbol: any;
constructor(public dialogRef: MatDialogRef<AssignServiceComponent>,@Optional() @Inject(MAT_DIALOG_DATA) public data) {
console.log(data)
this.serviceName = data.servicesName
this.local_data = data
this.currencySymbol = localStorage.getItem('currency')
if(this.local_data.hasOwnProperty('durationNew')){
this.local_data.duration = this.local_data.durationNew
this.local_data.duration = this.local_data.durationNew
}

View File

@ -44,12 +44,12 @@
<div class="card-block text-center">
<div class="row">
<div>
<h2>{{count.monthly_earning_count}}</h2>
<h2>{{count.monthly_earning_count | currency:currency}}</h2>
<p class="text-muted">Monthly</p>
</div>
<hr>
<div>
<h2>{{count.today_earning_count}}</h2>
<h2>{{count.today_earning_count | currency:currency}}</h2>
<p class="text-muted">Today</p>
</div>
</div>
@ -163,37 +163,33 @@
</mat-card>
</div>
</div> -->
<div fxLayout="row wrap">
<div fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="m-gap p-gap">
<mat-form-field class="mat-pane">
<input class="fx-date-range" type="text" matInput
ngxDaterangepickerMd
[locale]="{applyLabel: 'okay', format: 'MM/DD/YY'}"
[drops]="'down'"
[opens]="'right'"
[ranges]="ranges"
[showCustomRangeLabel]="true"
[alwaysShowCalendars]="true"
[keepCalendarOpeningWithRange]="true"
[showCancel]="true"
autocomplete="off"
[(ngModel)]="selectedDateRange"
name="daterange" placeholder="Fliter Chart Date Wise" (change)="dateWiseFilter()"/>
</mat-form-field>
</div>
</div>
<div fxLayout="row wrap">
<div fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="m-gap p-gap">
<mat-card class="pie">
<mat-card-title fxLayout="row" fxLayoutAlign="start center">
Practitioner &nbsp;
<span fxFlex></span>
<button mat-icon-button mat-button-sm [mat-menu-trigger-for]="card1" aria-label="Open card menu">
<mat-icon class="filter_menu">more_vert</mat-icon>
</button>
</mat-card-title>
<mat-menu #card1="matMenu" x-position="before">
<button mat-menu-item>
<!-- <mat-icon>settings</mat-icon> -->
Monthly
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>more</mat-icon> -->
This Week
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>notifications_off</mat-icon> -->
Today
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>exit_to_app</mat-icon> -->
Last 7 Days
</button>
</mat-menu>
<span fxFlex></span>
</mat-card-title>
<hr>
<mat-card-content>
<canvas height="200" baseChart class="chart"
@ -210,32 +206,8 @@
<mat-card class="pie">
<mat-card-title fxLayout="row" fxLayoutAlign="start center">
Practitioner wise Revenue&nbsp;
<span fxFlex></span>
<button mat-icon-button mat-button-sm [mat-menu-trigger-for]="card2" aria-label="Open card menu">
<mat-icon class="filter_menu">more_vert</mat-icon>
</button>
</mat-card-title>
<mat-menu #card2="matMenu" x-position="before">
<button mat-menu-item>
<!-- <mat-icon>settings</mat-icon> -->
Monthly
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>more</mat-icon> -->
This Week
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>notifications_off</mat-icon> -->
Today
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>exit_to_app</mat-icon> -->
Last 7 Days
</button>
</mat-menu>
<span fxFlex></span>
</mat-card-title>
<hr>
<mat-card-content>
<canvas height="200" baseChart class="chart"
@ -253,32 +225,8 @@
<mat-card class="pie">
<mat-card-title fxLayout="row" fxLayoutAlign="start center">
Service Appointment &nbsp;
<span fxFlex></span>
<button mat-icon-button mat-button-sm [mat-menu-trigger-for]="card3" aria-label="Open card menu">
<mat-icon class="filter_menu">more_vert</mat-icon>
</button>
</mat-card-title>
<mat-menu #card3="matMenu" x-position="before">
<button mat-menu-item>
<!-- <mat-icon>settings</mat-icon> -->
Monthly
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>more</mat-icon> -->
This Week
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>notifications_off</mat-icon> -->
Today
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>exit_to_app</mat-icon> -->
Last 7 Days
</button>
</mat-menu>
<span fxFlex></span>
</mat-card-title>
<hr>
<mat-card-content>
<canvas height="200" baseChart class="chart"
@ -294,32 +242,8 @@
<mat-card class="pie">
<mat-card-title fxLayout="row" fxLayoutAlign="start center">
Service Wise Revenue &nbsp;
<span fxFlex></span>
<button mat-icon-button mat-button-sm [mat-menu-trigger-for]="card4" aria-label="Open card menu">
<mat-icon class="filter_menu">more_vert</mat-icon>
</button>
</mat-card-title>
<mat-menu #card4="matMenu" x-position="before">
<button mat-menu-item>
<!-- <mat-icon>settings</mat-icon> -->
Monthly
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>more</mat-icon> -->
This Week
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>notifications_off</mat-icon> -->
Today
</button>
<hr>
<button mat-menu-item>
<!-- <mat-icon>exit_to_app</mat-icon> -->
Last 7 Days
</button>
</mat-menu>
<span fxFlex></span>
</mat-card-title>
<hr>
<mat-card-content>
<canvas height="200" baseChart class="chart"
@ -332,24 +256,43 @@
</mat-card>
</div>
</div>
<div fxLayout="row wrap">
<div fxFlex.gt-sm="100" fxFlex.gt-xs="100" fxFlex="100" class="m-gap p-gap">
<div fxLayout="row wrap" *ngIf="user_role == 'BIZADMIN'">
<div fxFlex.gt-sm="100" fxFlex.gt-xs="100" fxFlex="100" class="m-gap p-gap">
<mat-card>
<mat-card-title fxLayout="row" fxLayoutAlign="start center">
Total Sales &nbsp;
<span fxFlex></span>
<!-- <button mat-icon-button mat-button-sm [mat-menu-trigger-for]="card2" aria-label="Open card menu">
<mat-icon>more_vert</mat-icon>
</button> -->
</mat-card-title>
<hr>
<mat-card-content>
<div class="w-100 h-300px">
<ngx-charts-area-chart [scheme]="colorScheme" [results]="multi" [gradient]="gradient" [xAxis]="showXAxis" [yAxis]="showYAxis" [legend]="showLegend" [showXAxisLabel]="showXAxisLabel" [showYAxisLabel]="showYAxisLabel" [xAxisLabel]="xAxisLabel" [yAxisLabel]="yAxisLabel" [autoScale]="autoScale" (select)="onSelect($event)">
</ngx-charts-area-chart>
</div>
</mat-card-content>
</mat-card>
<mat-card-title fxLayout="row">
<div fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="p-gap" fxLayoutAlign="start center">
Booking Trends &nbsp;
</div>
<div fxFlex.xs="100" fxFlex.sm="100" fxFlex.md="50" fxFlex.lg="50" fxFlex.xl="50" class="p-gap" fxLayoutAlign="end center">
Count of Appointment &nbsp;&nbsp; <mat-slide-toggle class="example-margin"
(change)="onToggleChange($event.checked)"></mat-slide-toggle>&nbsp;&nbsp; Revenue
</div>
<span fxFlex></span>
</mat-card-title>
<hr>
<mat-card-content *ngIf="countAndRevenue == false">
<canvas height="120" baseChart class="chart" [datasets]="ComboChartData" [labels]="comboChartLabels" [options]="ComboChartOptions" [colors]="chartColors" [legend]="comboChartLegend" [chartType]="barChartType"></canvas>
</mat-card-content>
<mat-card-content *ngIf="countAndRevenue == true">
<canvas height="120" baseChart class="chart" [datasets]="ComboChartData2" [labels]="comboChartLabels" [options]="ComboChartOptions" [colors]="chartColors" [legend]="comboChartLegend" [chartType]="chartColors2"></canvas>
</mat-card-content>
</mat-card>
</div>
</div>
<!-- <div fxLayout="row wrap" *ngIf="user_role == 'BIZADMIN'">
<div fxFlex.gt-sm="100" fxFlex.gt-xs="100" fxFlex="100" class="m-gap p-gap">
<mat-card>
<mat-card-title fxLayout="row" fxLayoutAlign="start center">
Booking Trends &nbsp;
<span fxFlex></span>
</mat-card-title>
<hr>
<mat-card-content>
<canvas height="120" baseChart class="chart" [datasets]="ComboChartData2" [labels]="comboChartLabels" [options]="ComboChartOptions" [colors]="chartColors" [legend]="comboChartLegend" [chartType]="barChartType"></canvas>
</mat-card-content>
</mat-card>
</div>
</div> -->
</ng-scrollbar>

View File

@ -565,4 +565,28 @@ mat-icon{
.filter_menu{
font-size: 20px !important;
}
}
.mat-pane{
width: 65% !important;
}
::ng-deep .md-drppicker .btn, .md-drppicker .btn:focus, .md-drppicker .btn:hover {
background-color: #4caf50 !important;
margin-left: 10px !important;
}
::ng-deep .md-drppicker .btn.btn-default{
color: #000 !important;
background-color: #dcdcdc !important;
}
::ng-deep .md-drppicker td.active{
background-color: #1f7f6f !important;
}
::ng-deep .md-drppicker .ranges ul li button.active {
background-color: #1f7f6f !important;
}
::ng-deep .md-drppicker.double {
width: 640px !important;
}

View File

@ -3,12 +3,17 @@ import { single, multi } from './charts.data';
import { DashboardService } from './dashboard.service';
import { MatIconRegistry } from '@angular/material/icon';
import { DomSanitizer } from '@angular/platform-browser';
import * as moment from 'moment';
import { CurrencyPipe, DatePipe } from '@angular/common';
@Component({
selector: 'app-dashboard',
templateUrl: './dashboard.component.html',
styleUrls: ['./dashboard.component.scss']
styleUrls: ['./dashboard.component.scss'],
providers:[CurrencyPipe],
})
export class DashboardComponent {
private currencyPipe1:CurrencyPipe
public single: any[];
public multi: any[];
public showXAxis = true;
@ -66,9 +71,9 @@ export class DashboardComponent {
}
}
}, this.globalChartOptions2);
pieChartData2: number[] = [300,200,100];
pieChartData2: number[] = [];
doughnutChartColors2: any[] = [{
backgroundColor: ['#f44336', '#009688 ', '#2196f3']
backgroundColor: []
}];
pieChartLabels2: string[] = [];
pieChartType2 = 'pie';
@ -90,11 +95,11 @@ export class DashboardComponent {
}
}
}, this.globalChartOptions3);
pieChartData3: number[] = [500,600,700];
pieChartData3: number[] = [];
doughnutChartColors3: any[] = [{
backgroundColor: ['#f44336', '#009688 ', '#2196f3']
backgroundColor: []
}];
pieChartLabels3: string[] = ['Customer', 'Services', 'Practitioner'];
pieChartLabels3: string[] = [];
pieChartType3 = 'pie';
@ -114,11 +119,11 @@ export class DashboardComponent {
}
}
}, this.globalChartOptions4);
pieChartData4: number[] = [100,200,500];
pieChartData4: number[] = [];
doughnutChartColors4: any[] = [{
backgroundColor: ['#f44336', '#009688 ', '#2196f3']
backgroundColor: []
}];
pieChartLabels4: string[] = ['Customer', 'Services', 'Practitioner'];
pieChartLabels4: string[] = [];
pieChartType4 = 'pie';
// Bar
@ -201,42 +206,69 @@ bubbleChartData: Array <any> = [{
bubbleChartType = 'bubble';
// combo chart
comboChartLabels: Array <any> = ['1', '2', '3', '4', '5', '6', '7'];
chartColors: Array <any> = [{ // red
backgroundColor: '#f44336',
borderColor: '#f44336',
pointBackgroundColor: '#f44336',
comboChartLabels: Array <any> = [];
chartColors2: Array <any> = [
{ // grey
backgroundColor: '#5fc983',
borderColor: '#5fc983',
pointBackgroundColor: '#5fc983',
pointBorderColor: '#fff',
pointHoverBackgroundColor: '#fff',
pointHoverBorderColor: '#5fc983'
}
];
chartColors: Array <any> = [
// { // red
// backgroundColor: '#f44336',
// borderColor: '#f44336',
// pointBackgroundColor: '#f44336',
// pointBorderColor: '#fff',
// pointHoverBackgroundColor: '#fff',
// pointHoverBorderColor: 'rgba(148,159,177,0.8)'
// },
// { // grey
// backgroundColor: '#5fc983',
// borderColor: '#5fc983',
// pointBackgroundColor: '#5fc983',
// pointBorderColor: '#fff',
// pointHoverBackgroundColor: '#fff',
// pointHoverBorderColor: '#5fc983'
// },
{ // blue
backgroundColor: '#76b0a6',
borderColor: '#1f7f6f',
pointBackgroundColor: '#1f7f6f',
pointBorderColor: '#fff',
pointHoverBackgroundColor: '#fff',
pointHoverBorderColor: 'rgba(148,159,177,0.8)'
}, { // blue
backgroundColor: '#7986cb',
borderColor: '#3f51b5',
pointBackgroundColor: '#3f51b5',
pointBorderColor: '#fff',
pointHoverBackgroundColor: '#fff',
pointHoverBorderColor: 'rgba(148,159,177,0.8)'
}, { // grey
backgroundColor: 'rgba(148,159,177,0.2)',
borderColor: 'rgba(148,159,177,1)',
pointBackgroundColor: 'rgba(148,159,177,1)',
pointBorderColor: '#fff',
pointHoverBackgroundColor: '#fff',
pointHoverBorderColor: 'rgba(148,159,177,0.8)'
}];
},
// { // grey
// backgroundColor: '#5fc983',
// borderColor: '#5fc983',
// pointBackgroundColor: '#5fc983',
// pointBorderColor: '#fff',
// pointHoverBackgroundColor: '#fff',
// pointHoverBorderColor: '#5fc983'
// }
];
comboChartLegend = true;
ComboChartData: Array <any> = [{
data: [6, 5, 8, 8, 5, 5, 4],
label: 'Series A',
data: [],
label: 'Count of Appointment',
borderWidth: 1,
type: 'line',
fill: false
}, {
data: [5, 4, 4, 2, 6, 2, 5],
label: 'Series B',
}
];
ComboChartData2: Array <any> = [{
data: [],
label: 'Revenue',
borderWidth: 1,
type: 'bar',
}];
type: 'line',
fill: false
}
];
ComboChartOptions: any = Object.assign({
animation: false,
scales: {
@ -277,15 +309,37 @@ messages: Object[] = [{
subject: 'Onsectetur adipisic',
}, ];
finalChartPie: any = [];
practitionerPieChart: any = [];
servicePieChart: any = [];
constructor(public _dash:DashboardService,private matIconRegistry: MatIconRegistry,private domSanitizer: DomSanitizer) {
ranges: any = {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [
moment().subtract(1, 'month').startOf('month'),
moment().subtract(1, 'month').endOf('month')
]
};
selectedDateRange: {startDate: moment.Moment, endDate: moment.Moment};
currentDate: Date;
lineChart: any = [];
user_role: any;
currency: any;
countAndRevenue: boolean = false;
constructor(private currencySymbol: CurrencyPipe,public _dash:DashboardService,private matIconRegistry: MatIconRegistry,private domSanitizer: DomSanitizer) {
// this.fetch((data) => { this.rows = data; });
Object.assign(this, {single, multi})
this.matIconRegistry.addSvgIcon(
'service',
this.domSanitizer.bypassSecurityTrustResourceUrl('assets/images/service_icon.svg')
);
this.user_role = localStorage.getItem('user_role')
this.currency = localStorage.getItem('currency')
console.log(this.currency)
}
ngOnInit() {
@ -298,69 +352,249 @@ messages: Object[] = [{
}
this.getCount(param)
//Start Line Chart
this.currentDate = new Date();
let startDate = new DatePipe('en-US').transform(this.currentDate, 'yyyy-MM-dd')
let EndDate = new DatePipe('en-US').transform(this.currentDate, 'yyyy-MM-dd')
console.log(startDate,EndDate);
let lineParams
if(user_role == 'BIZADMIN'){
lineParams = {'busId':localStorage.getItem('busId'),'fromDate':startDate,'toDate':EndDate}
this.getLineChartData(lineParams)
}
//End Line Chart
}
getCount(param){
console.log(param)
this._dash.getCountDetails(param).subscribe(res => {
if (res.status == 200) {
if (res.status == 200) {
console.log(res)
this.count = res['data']
this.finalChartPie = this.count.finalchart
console.log(this.finalChartPie)
let piePratitionerName = this.finalChartPie.map(val => val.doctor_name)
this.pieChartLabels = piePratitionerName
this.pieChartLabels2 = piePratitionerName
// Start Pie Chart 1
let appointmentSum = this.finalChartPie.map(val => val.service.map(v => v.appoinments_count))
appointmentSum.forEach(element => {
if(element.length==0){
element.push(0)
}
// element = element.reduce((a,b)=>a+b,0)
});
let appointmentSumValue=[];
appointmentSum.forEach(element => {
appointmentSumValue.push(element.reduce((a,b)=>a+b,0))
});
console.log(appointmentSumValue)
this.pieChartData = appointmentSumValue
// End Pie Chart 1
this.count = res['data']
// Start Pie Chart 2
let appointmentSum2 = this.finalChartPie.map(val => val.service.map(v => v.feesRevenue))
appointmentSum2.forEach(element => {
if(element.length==0){
element.push(0)
}
// element = element.reduce((a,b)=>a+b,0)
});
let appointmentSumValue2=[];
appointmentSum2.forEach(element => {
appointmentSumValue2.push(element.reduce((a,b)=>a+b,0))
});
console.log(appointmentSumValue2)
this.pieChartData2 = appointmentSumValue2
// End Pie Chart 2
this.random_bg_color()
this.currentDate = new Date();
let startDate = new DatePipe('en-US').transform(this.currentDate, 'yyyy-MM-dd')
let EndDate = new DatePipe('en-US').transform(this.currentDate, 'yyyy-MM-dd')
console.log(startDate,EndDate);
let user_role = localStorage.getItem('user_role')
let pieChartParams
if(user_role == 'PRACTITIONER'){
pieChartParams = {'user_id':localStorage.getItem('user_id'),'busId':localStorage.getItem('busId'),'fromDate':startDate,'toDate':EndDate}
}else{
pieChartParams = {'busId':localStorage.getItem('busId'),'fromDate':startDate,'toDate':EndDate}
}
console.log(pieChartParams)
this.getPieChartData(pieChartParams)
}
})
}
random_bg_color() {
for(let id of this.pieChartData){
var x = Math.floor(Math.random() * 256);
var y = Math.floor(Math.random() * 256);
var z = Math.floor(Math.random() * 256);
console.log(this.doughnutChartColors)
this.doughnutChartColors[0].backgroundColor.push("rgb(" + x + "," + y + "," + z + ")");
getPieChartData(param){
console.log(param)
this._dash.getPieChartDetails(param).subscribe(res => {
if (res.status == 200) {
console.log(res)
this.practitionerPieChart = res['data'].finalchart
console.log(this.practitionerPieChart)
let practitionerName = this.practitionerPieChart.map(val => val.doctor_name)
this.pieChartLabels = practitionerName
this.pieChartLabels2 = practitionerName
let practiAppointCount = this.practitionerPieChart.map(val => val.appoinments_count)
this.pieChartData = practiAppointCount
for(let id of practitionerName){
var x = Math.floor(Math.random() * 245);
var y = Math.floor(Math.random() * 245);
var z = Math.floor(Math.random() * 245);
console.log(this.doughnutChartColors)
this.doughnutChartColors[0].backgroundColor.push("rgb(" + x + "," + y + "," + z + ")");
}
let practiRevenue = this.practitionerPieChart.map(val => val.amount)
console.log(practiRevenue)
// practiRevenue.forEach(element => {
// console.log(element)
// let amount = this.currencySymbol.transform(element,this.currency, 'symbol');
// console.log(amount)
// element = amount
// console.log(element)
// this.pieChartData2.push(element)
// });
// console.log(this.pieChartData2)
this.pieChartData2 = practiRevenue
for(let id of practiRevenue){
var x = Math.floor(Math.random() * 256);
var y = Math.floor(Math.random() * 256);
var z = Math.floor(Math.random() * 256);
console.log(this.doughnutChartColors)
this.doughnutChartColors2[0].backgroundColor.push("rgb(" + x + "," + y + "," + z + ")");
}
// this.random_bg_color()
this.getPieChartServiceData(param)
}
})
}
}
getPieChartServiceData(param){
console.log(param)
this._dash.getPieChartServiceDetails(param).subscribe(res => {
if (res.status == 200) {
console.log(res)
this.servicePieChart = res['data'].finalchart
console.log(this.servicePieChart)
let serviceName = this.servicePieChart.map(val => val.service_name)
this.pieChartLabels3 = serviceName
this.pieChartLabels4 = serviceName
let serviceAppointCount = this.servicePieChart.map(val => val.appoinments_count)
this.pieChartData3 = serviceAppointCount
for(let id of serviceAppointCount){
var x = Math.floor(Math.random() * 266);
var y = Math.floor(Math.random() * 266);
var z = Math.floor(Math.random() * 266);
console.log(this.doughnutChartColors3)
this.doughnutChartColors3[0].backgroundColor.push("rgb(" + x + "," + y + "," + z + ")");
}
let serviceRevenue = this.servicePieChart.map(val => val.amount)
this.pieChartData4 = serviceRevenue
for(let id of serviceRevenue){
var x = Math.floor(Math.random() * 276);
var y = Math.floor(Math.random() * 276);
var z = Math.floor(Math.random() * 276);
console.log(this.doughnutChartColors4)
this.doughnutChartColors4[0].backgroundColor.push("rgb(" + x + "," + y + "," + z + ")");
}
}
})
}
getLineChartData(param){
console.log(param)
this._dash.getLineChart(param).subscribe(res => {
if (res.status == 200) {
console.log(res)
this.lineChart = res['data']
console.log(this.lineChart)
this.lineChart.sort((a, b) => {
const dateA:any = new Date(a.date);
const dateB:any = new Date(b.date);
return dateA - dateB;
});
let linecount = this.lineChart.map(val => val.count)
let lineMonth = this.lineChart.map(val => val.date)
let lineFees = this.lineChart.map(val => val.fees)
this.comboChartLabels = lineMonth
console.log(linecount,lineMonth,lineFees)
console.log(this.ComboChartData)
this.ComboChartData[0].data = linecount
this.ComboChartData2[0].data = lineFees
// this.ComboChartData.forEach(element => {
// console.log(element)
// if(element.type == 'line'){
// element.data = linecount
// }
// if(element.type == 'bar') {
// element.data = lineFees
// }
// });
console.log(this.ComboChartData)
}
})
}
// random_bg_color() {
// for(let id of this.practitionerPieChart){
// var x = Math.floor(Math.random() * 245);
// var y = Math.floor(Math.random() * 235);
// var z = Math.floor(Math.random() * 256);
// console.log(this.doughnutChartColors)
// this.doughnutChartColors[0].backgroundColor.push("rgb(" + x + "," + y + "," + z + ")");
// this.doughnutChartColors2[0].backgroundColor.push("rgb(" + x + "," + y + "," + z + ")");
// }
// }
onSelect(event) {
console.log(event);
}
// open(e) {
// console.log(e);
// // this.pickerDirective.open(e);
// }
// // Function to call when the input value changes.
// onChange = () => {
// }
// // Function to call when the input is touched.
// onTouched = () => {
// }
// // Allows Angular to update the model (rating).
// // Update the model and changes needed for the view here.
// writeValue(obj: any): void {
// console.log(obj);
// }
// // Allows Angular to register a function to call when the model (rating) changes.
// // Save the function as a property to call later here.
// registerOnChange(fn: any): void {
// console.log(fn);
// // this.onChange = fn;
// }
// // Allows Angular to register a function to call when the input has been touched.
// // Save the function as a property to call later here.
// registerOnTouched(fn: () => void): void {
// this.onTouched = fn;
// }
// // Allows Angular to disable the input.
// setDisabledState(isDisabled: boolean): void {
// // this.disabled = isDisabled;
// }
// onInputChange() {
// console.log('Input value changed:', this.selectedDateRange);
// // Perform your desired logic here
// }
dateWiseFilter() {
// if(this.selectedDateRange.startDate != null && this.selectedDateRange.endDate != null){
console.log('Input value changed:', this.selectedDateRange);
let startDate = new DatePipe('en-US').transform(this.selectedDateRange.startDate['$d'], 'yyyy-MM-dd')
let EndDate = new DatePipe('en-US').transform(this.selectedDateRange.endDate['$d'], 'yyyy-MM-dd')
console.log(startDate,EndDate);
let user_role = localStorage.getItem('user_role')
let param
if(user_role == 'PRACTITIONER'){
param = {'user_id':localStorage.getItem('user_id'),'busId':localStorage.getItem('busId'),'fromDate':startDate,'toDate':EndDate}
}else{
param = {'busId':localStorage.getItem('busId'),'fromDate':startDate,'toDate':EndDate}
}
console.log(param);
// Perform your desired logic here
this.getPieChartData(param)
//Start Line Chart
let lineParams
if(user_role == 'BIZADMIN'){
lineParams = {'busId':localStorage.getItem('busId'),'fromDate':startDate,'toDate':EndDate}
}
this.getLineChartData(lineParams)
//End Line Chart
}
// }
onToggleChange(event){
console.log(event)
this.countAndRevenue = event
}
}

View File

@ -1,6 +1,6 @@
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { CommonModule } from '@angular/common';
import { CommonModule, CurrencyPipe } from '@angular/common';
import { MatButtonModule } from '@angular/material/button';
import { MatCardModule } from '@angular/material/card';
import { MatIconModule } from '@angular/material/icon';
@ -17,6 +17,7 @@ import { DashboardComponent } from './dashboard.component';
import { DashboardRoutes } from './dashboard.routing';
import { NgScrollbarModule } from 'ngx-scrollbar';
import { DemoMaterialModule } from 'app/shared/demo.module';
import { NgxDaterangepickerMd } from 'ngx-daterangepicker-material';
@NgModule({
imports: [
@ -34,8 +35,10 @@ import { DemoMaterialModule } from 'app/shared/demo.module';
FlexLayoutModule,
NgScrollbarModule,
DemoMaterialModule,
NgxDaterangepickerMd.forRoot()
],
declarations: [ DashboardComponent ]
declarations: [ DashboardComponent ],
providers:[CurrencyPipe],
})
export class DashboardModule {}

View File

@ -20,4 +20,16 @@ export class DashboardService {
return this._http.post(this.apiUrl + 'getcount', param)
}
getPieChartDetails(param): Observable<any> {
return this._http.post(this.apiUrl + 'getAppointmentChart', param)
}
getPieChartServiceDetails(param): Observable<any> {
return this._http.post(this.apiUrl + 'getServiceChart', param)
}
getLineChart(param): Observable<any> {
return this._http.post(this.apiUrl + 'getChartListYear', param)
}
}

View File

@ -3,7 +3,8 @@ export const environment = {
environmentName: 'Production Environment',//Localhost Environment.
// apiEndpoint:'http://venbainfotech.com:5000/',
// apiEndpoint:'https://192.168.159.24:8080/api/',
apiEndpoint:'https://api.venbait.in/api/',
// apiEndpoint:'https://api.venbait.in/api/',
apiEndpoint:'https://dev.venbait.in/appointment/api/',
//EndUser URL
endUserUrl: window.location.origin+'/#/booking/',

View File

@ -6,9 +6,9 @@
export const environment = {
production: false,
environmentName: 'Testing Environment',//Localhost Environment.
// apiEndpoint:'http://venbainfotech.com:5000/api/',
apiEndpoint:'http://192.168.1.11:8080/api/',
// apiEndpoint:'https://api.venbait.in/api/',
// apiEndpoint:'http://venbainfotech.com:5000/api/',
apiEndpoint:'http://192.168.1.32:8080/api/',
// apiEndpoint:'https://dev.venbait.in/appointments/api/',
//EndUser URL
endUserUrl: window.location.origin+'/#/booking/',