Merge pull request 'Design changes' (#259) from OptimUpdate into main

Reviewed-on: Pozomind/pozo-retail-app#259
This commit is contained in:
karthikalakshmi 2026-03-06 18:34:26 +05:30
commit 02420dde37
11 changed files with 290 additions and 192 deletions

60
package-lock.json generated
View File

@ -35,6 +35,7 @@
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"devtools-detect": "^4.0.2", "devtools-detect": "^4.0.2",
"exceljs": "^4.3.0", "exceljs": "^4.3.0",
"file-saver": "^2.0.5",
"google-maps-react": "^2.0.6", "google-maps-react": "^2.0.6",
"highcharts": "^11.4.3", "highcharts": "^11.4.3",
"highcharts-react-official": "^3.2.1", "highcharts-react-official": "^3.2.1",
@ -547,7 +548,6 @@
"version": "16.14.0", "version": "16.14.0",
"resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
"integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
"peer": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0", "loose-envify": "^1.1.0",
"object-assign": "^4.1.1", "object-assign": "^4.1.1",
@ -596,7 +596,6 @@
"version": "7.28.6", "version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz",
"integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==",
"peer": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.28.6", "@babel/code-frame": "^7.28.6",
"@babel/generator": "^7.28.6", "@babel/generator": "^7.28.6",
@ -647,6 +646,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
"integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/types": "^7.27.3" "@babel/types": "^7.27.3"
}, },
@ -781,6 +781,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
"integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.28.6" "@babel/helper-plugin-utils": "^7.28.6"
}, },
@ -796,6 +797,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz",
"integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.27.1" "@babel/helper-plugin-utils": "^7.27.1"
}, },
@ -811,6 +813,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz",
"integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-annotate-as-pure": "^7.27.3",
"@babel/helper-module-imports": "^7.28.6", "@babel/helper-module-imports": "^7.28.6",
@ -830,6 +833,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz",
"integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/plugin-transform-react-jsx": "^7.27.1" "@babel/plugin-transform-react-jsx": "^7.27.1"
}, },
@ -875,6 +879,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz",
"integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-annotate-as-pure": "^7.27.1",
"@babel/helper-plugin-utils": "^7.27.1" "@babel/helper-plugin-utils": "^7.27.1"
@ -990,7 +995,6 @@
"resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.1.0.tgz", "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-8.1.0.tgz",
"integrity": "sha512-UfMBMWc1v7J+14AhH03QmeNwV3HZx3qnOWhpwnHfzALEwAwlV/itQOQqcasMQYhOHWL0tiymc5ByaLTn7KKQxw==", "integrity": "sha512-UfMBMWc1v7J+14AhH03QmeNwV3HZx3qnOWhpwnHfzALEwAwlV/itQOQqcasMQYhOHWL0tiymc5ByaLTn7KKQxw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"tslib": "^2.1.0" "tslib": "^2.1.0"
} }
@ -1010,7 +1014,6 @@
"version": "6.3.1", "version": "6.3.1",
"resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz",
"integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==",
"peer": true,
"dependencies": { "dependencies": {
"@dnd-kit/accessibility": "^3.1.1", "@dnd-kit/accessibility": "^3.1.1",
"@dnd-kit/utilities": "^3.2.2", "@dnd-kit/utilities": "^3.2.2",
@ -1141,7 +1144,6 @@
"version": "11.14.0", "version": "11.14.0",
"resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
"integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.13.5", "@emotion/babel-plugin": "^11.13.5",
@ -1187,7 +1189,6 @@
"version": "11.14.1", "version": "11.14.1",
"resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz",
"integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==",
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.18.3", "@babel/runtime": "^7.18.3",
"@emotion/babel-plugin": "^11.13.5", "@emotion/babel-plugin": "^11.13.5",
@ -2009,7 +2010,6 @@
"resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz", "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz",
"integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==", "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==",
"deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.",
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.4.4", "@babel/runtime": "^7.4.4",
"@material-ui/styles": "^4.11.5", "@material-ui/styles": "^4.11.5",
@ -2046,7 +2046,6 @@
"version": "4.11.3", "version": "4.11.3",
"resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz", "resolved": "https://registry.npmjs.org/@material-ui/icons/-/icons-4.11.3.tgz",
"integrity": "sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==", "integrity": "sha512-IKHlyx6LDh8n19vzwH5RtHIOHl9Tu90aAAxcbWME6kp4dmvODM3UvOHJeMIDzUbd4muuJKHmlNoBN+mDY4XkBA==",
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.4.4" "@babel/runtime": "^7.4.4"
}, },
@ -3017,7 +3016,6 @@
"version": "16.14.0", "version": "16.14.0",
"resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
"integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
"peer": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0", "loose-envify": "^1.1.0",
"object-assign": "^4.1.1", "object-assign": "^4.1.1",
@ -3087,7 +3085,6 @@
"version": "5.90.20", "version": "5.90.20",
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.20.tgz", "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.20.tgz",
"integrity": "sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==", "integrity": "sha512-vXBxa+qeyveVO7OA0jX1z+DeyCA4JKnThKv411jd5SORpBKgkcVnYKCiBgECvADvniBX7tobwBmg01qq9JmMJw==",
"peer": true,
"dependencies": { "dependencies": {
"@tanstack/query-core": "5.90.20" "@tanstack/query-core": "5.90.20"
}, },
@ -3356,7 +3353,6 @@
"version": "18.3.27", "version": "18.3.27",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.27.tgz",
"integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==", "integrity": "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==",
"peer": true,
"dependencies": { "dependencies": {
"@types/prop-types": "*", "@types/prop-types": "*",
"csstype": "^3.2.2" "csstype": "^3.2.2"
@ -3367,7 +3363,6 @@
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
"integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==", "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
"devOptional": true, "devOptional": true,
"peer": true,
"peerDependencies": { "peerDependencies": {
"@types/react": "^18.0.0" "@types/react": "^18.0.0"
} }
@ -3504,7 +3499,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true, "dev": true,
"peer": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
}, },
@ -3534,6 +3528,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
"integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==",
"license": "MIT", "license": "MIT",
"peer": true,
"dependencies": { "dependencies": {
"co": "^4.6.0", "co": "^4.6.0",
"fast-deep-equal": "^1.0.0", "fast-deep-equal": "^1.0.0",
@ -3584,7 +3579,8 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
"integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==",
"license": "MIT" "license": "MIT",
"peer": true
}, },
"node_modules/align-text": { "node_modules/align-text": {
"version": "0.1.4", "version": "0.1.4",
@ -3677,7 +3673,6 @@
"version": "5.29.3", "version": "5.29.3",
"resolved": "https://registry.npmjs.org/antd/-/antd-5.29.3.tgz", "resolved": "https://registry.npmjs.org/antd/-/antd-5.29.3.tgz",
"integrity": "sha512-3DdbGCa9tWAJGcCJ6rzR8EJFsv2CtyEbkVabZE14pfgUHfCicWCj0/QzQVLDYg8CPfQk9BH7fHCoTXHTy7MP/A==", "integrity": "sha512-3DdbGCa9tWAJGcCJ6rzR8EJFsv2CtyEbkVabZE14pfgUHfCicWCj0/QzQVLDYg8CPfQk9BH7fHCoTXHTy7MP/A==",
"peer": true,
"dependencies": { "dependencies": {
"@ant-design/colors": "^7.2.1", "@ant-design/colors": "^7.2.1",
"@ant-design/cssinjs": "^1.23.0", "@ant-design/cssinjs": "^1.23.0",
@ -4055,7 +4050,6 @@
"version": "1.13.3", "version": "1.13.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.3.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.3.tgz",
"integrity": "sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g==", "integrity": "sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g==",
"peer": true,
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.6", "follow-redirects": "^1.15.6",
"form-data": "^4.0.4", "form-data": "^4.0.4",
@ -4344,7 +4338,6 @@
"url": "https://github.com/sponsors/ai" "url": "https://github.com/sponsors/ai"
} }
], ],
"peer": true,
"dependencies": { "dependencies": {
"baseline-browser-mapping": "^2.9.0", "baseline-browser-mapping": "^2.9.0",
"caniuse-lite": "^1.0.30001759", "caniuse-lite": "^1.0.30001759",
@ -4725,6 +4718,7 @@
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"license": "MIT", "license": "MIT",
"peer": true,
"engines": { "engines": {
"iojs": ">= 1.0.0", "iojs": ">= 1.0.0",
"node": ">= 0.12.0" "node": ">= 0.12.0"
@ -5248,7 +5242,6 @@
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
"integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
"peer": true,
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/kossnocorp" "url": "https://github.com/sponsors/kossnocorp"
@ -5257,8 +5250,7 @@
"node_modules/dayjs": { "node_modules/dayjs": {
"version": "1.11.19", "version": "1.11.19",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz",
"integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw=="
"peer": true
}, },
"node_modules/debounce-fn": { "node_modules/debounce-fn": {
"version": "6.0.0", "version": "6.0.0",
@ -5901,7 +5893,6 @@
"integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1", "@eslint-community/regexpp": "^4.6.1",
@ -6612,6 +6603,12 @@
"node": "^10.12.0 || >=12.0.0" "node": "^10.12.0 || >=12.0.0"
} }
}, },
"node_modules/file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==",
"license": "MIT"
},
"node_modules/find-root": { "node_modules/find-root": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
@ -7200,8 +7197,7 @@
"node_modules/highcharts": { "node_modules/highcharts": {
"version": "11.4.8", "version": "11.4.8",
"resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.4.8.tgz", "resolved": "https://registry.npmjs.org/highcharts/-/highcharts-11.4.8.tgz",
"integrity": "sha512-5Tke9LuzZszC4osaFisxLIcw7xgNGz4Sy3Jc9pRMV+ydm6sYqsPYdU8ELOgpzGNrbrRNDRBtveoR5xS3SzneEA==", "integrity": "sha512-5Tke9LuzZszC4osaFisxLIcw7xgNGz4Sy3Jc9pRMV+ydm6sYqsPYdU8ELOgpzGNrbrRNDRBtveoR5xS3SzneEA=="
"peer": true
}, },
"node_modules/highcharts-react-official": { "node_modules/highcharts-react-official": {
"version": "3.2.3", "version": "3.2.3",
@ -8026,7 +8022,6 @@
"resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.2.2.tgz", "resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.2.2.tgz",
"integrity": "sha512-+7oXAUnFCA6vS0omIGHcWpSr67dUBIF7FKGYSXyzxShSLqM6LBgdugWKFl0XrYtGWyJMGfQR5F4LL85iCefkRA==", "integrity": "sha512-+7oXAUnFCA6vS0omIGHcWpSr67dUBIF7FKGYSXyzxShSLqM6LBgdugWKFl0XrYtGWyJMGfQR5F4LL85iCefkRA==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"@javascript-obfuscator/escodegen": "2.3.1", "@javascript-obfuscator/escodegen": "2.3.1",
"@javascript-obfuscator/estraverse": "5.4.0", "@javascript-obfuscator/estraverse": "5.4.0",
@ -8327,7 +8322,8 @@
"version": "0.3.1", "version": "0.3.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
"integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==",
"license": "MIT" "license": "MIT",
"peer": true
}, },
"node_modules/json-schema-typed": { "node_modules/json-schema-typed": {
"version": "8.0.2", "version": "8.0.2",
@ -9007,7 +9003,6 @@
"version": "2.30.1", "version": "2.30.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
"peer": true,
"engines": { "engines": {
"node": "*" "node": "*"
} }
@ -9722,7 +9717,6 @@
"version": "15.8.1", "version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
"peer": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.4.0", "loose-envify": "^1.4.0",
"object-assign": "^4.1.1", "object-assign": "^4.1.1",
@ -10495,7 +10489,6 @@
"version": "18.3.1", "version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"peer": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0" "loose-envify": "^1.1.0"
}, },
@ -10656,7 +10649,6 @@
"version": "18.3.1", "version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"peer": true,
"dependencies": { "dependencies": {
"loose-envify": "^1.1.0", "loose-envify": "^1.1.0",
"scheduler": "^0.23.2" "scheduler": "^0.23.2"
@ -10726,8 +10718,7 @@
"node_modules/react-is": { "node_modules/react-is": {
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
"peer": true
}, },
"node_modules/react-qr-code": { "node_modules/react-qr-code": {
"version": "2.0.18", "version": "2.0.18",
@ -10745,7 +10736,6 @@
"version": "8.1.3", "version": "8.1.3",
"resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz", "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.1.3.tgz",
"integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==", "integrity": "sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==",
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.12.1", "@babel/runtime": "^7.12.1",
"@types/hoist-non-react-statics": "^3.3.1", "@types/hoist-non-react-statics": "^3.3.1",
@ -11026,7 +11016,6 @@
"version": "4.2.1", "version": "4.2.1",
"resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz", "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
"integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==", "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
"peer": true,
"dependencies": { "dependencies": {
"@babel/runtime": "^7.9.2" "@babel/runtime": "^7.9.2"
} }
@ -11043,8 +11032,7 @@
"version": "0.2.2", "version": "0.2.2",
"resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
"integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
"dev": true, "dev": true
"peer": true
}, },
"node_modules/reflect.getprototypeof": { "node_modules/reflect.getprototypeof": {
"version": "1.0.10", "version": "1.0.10",
@ -11408,7 +11396,6 @@
"resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz", "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.3.tgz",
"integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==", "integrity": "sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"chokidar": "^4.0.0", "chokidar": "^4.0.0",
"immutable": "^5.0.2", "immutable": "^5.0.2",
@ -12849,7 +12836,6 @@
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz",
"integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==", "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==",
"dev": true, "dev": true,
"peer": true,
"dependencies": { "dependencies": {
"esbuild": "^0.18.10", "esbuild": "^0.18.10",
"postcss": "^8.4.27", "postcss": "^8.4.27",

View File

@ -1,46 +1,55 @@
import React from 'react'; import React, { useState, useEffect } from 'react';
import './BillingTableSkeleton.scss'; import './BillingTableSkeleton.scss';
const BillingTableSkeleton = () => { const BillingTableSkeleton = () => {
const [rowCount, setRowCount] = useState(window.innerWidth < 768 ? 1 : 6);
useEffect(() => {
const handleResize = () => {
setRowCount(window.innerWidth < 768 ? 2 : 6);
};
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
const rows = Array(rowCount).fill(0);
const Row = () => (
<div className="billing-row">
<div className="skeleton"></div>
<div className="skeleton" style={{ height: '25px' }}></div>
<div className="skeleton"></div>
<div className="skeleton"></div>
<div className="skeleton"></div>
</div>
);
return ( return (
<div className="billing-skeleton"> <div className="billing-skeleton">
<div className="billing-header"> <div className="billing-header">
<div className="skeleton"></div> {Array(5)
<div className="skeleton"></div> .fill(0)
<div className="skeleton"></div> .map((_, i) => (
<div className="skeleton"></div> <div
<div className="skeleton"></div> key={i}
className="skeletonHeader"
style={{ height: '25px' }}
></div>
))}
</div> </div>
<div className="billing-row"> {rows.map((_, i) => (
<div className="skeleton"></div> <Row key={i} />
<div className="skeleton" style={{ height: '30px' }}></div> ))}
<div className="skeleton"></div>
<div className="skeleton"></div>
<div className="skeleton"></div>
</div>
<div className="billing-row">
<div className="skeleton"></div>
<div className="skeleton" style={{ height: '30px' }}></div>
<div className="skeleton"></div>
<div className="skeleton"></div>
<div className="skeleton"></div>
</div>
<div className="billing-row">
<div className="skeleton"></div>
<div className="skeleton" style={{ height: '30px' }}></div>
<div className="skeleton"></div>
<div className="skeleton"></div>
<div className="skeleton"></div>
</div>
<div className="billing-bottom"> <div className="billing-bottom">
<div className="billing-left"> <div className="billing-left">
<div className="skeleton billing-box"></div> {[1, 2].map((i) => (
<div className="skeleton billing-box"></div> <div key={i} className="skeleton billing-box"></div>
))}
</div> </div>
<div className="billing-right"> <div className="billing-right">
<div className="skeleton billing-box"></div> <div className="skeleton billing-box"></div>
<div className="skeleton billing-total"></div> <div className="skeleton billing-total"></div>

View File

@ -13,12 +13,28 @@
animation: shimmer 1.4s infinite; animation: shimmer 1.4s infinite;
border-radius: 4px; border-radius: 4px;
} }
.skeletonHeader {
background: linear-gradient(90deg, #f3f3f3 25%, #f3f3f3 37%, #f3f3f3 63%);
background-size: 1000px 100%;
animation: shimmer 1.4s infinite;
border-radius: 4px;
}
.billing-skeleton { .billing-skeleton {
background: #fff; background: #fff;
max-width: 420px; max-width: 420px;
border-radius: 8px; border-radius: 8px;
overflow: hidden; overflow: hidden;
width: 340px;
height: 80vh;
position: relative;
margin-top: 1rem;
@media (max-width: 768px) {
max-width: 100%;
width: 95vw;
height: 150px;
margin-top: 0;
}
} }
.billing-header { .billing-header {
@ -26,14 +42,20 @@
grid-template-columns: 40px 1fr 50px 60px 30px; grid-template-columns: 40px 1fr 50px 60px 30px;
gap: 8px; gap: 8px;
padding: 10px; padding: 10px;
background: #dde3e6; background: #e6e9eb;
@media (max-width: 768px) {
display: none;
}
} }
.billing-row { .billing-row {
display: grid; display: grid;
grid-template-columns: 40px 1fr 50px 60px 30px; grid-template-columns: 40px 1fr 50px 60px 30px;
gap: 8px; gap: 8px;
padding: 10px; padding: 7px 10px;
@media (max-width: 768px) {
display: none;
}
} }
.billing-bottom { .billing-bottom {
@ -41,6 +63,9 @@
gap: 10px; gap: 10px;
padding: 10px; padding: 10px;
border-top: 1px solid #ddd; border-top: 1px solid #ddd;
position: absolute;
bottom: 0;
width: 100%;
} }
.billing-left, .billing-left,
@ -54,5 +79,5 @@
} }
.billing-total { .billing-total {
height: 48px; height: 38px;
} }

View File

@ -1,17 +1,19 @@
import React from 'react'; import React from 'react';
import './CardSkeleton.scss'; import './CardSkeleton.scss';
import NavbarSkeleton from './NavbarSkeleton'; import NavbarSkeleton from './NavbarSkeleton';
import BillingTableSkeleton from './BillingTableSkeleton';
const CardSkeleton = ({ count = 15 }) => { const CardSkeleton = ({ count = 15 }) => {
return ( return (
<> <>
<div <div
style={{ style={{
marginTop: '1rem', padding: '10px',
}} }}
> >
<NavbarSkeleton /> <NavbarSkeleton />
</div> </div>
<div className="salesSkelton">
<div className="card-skeleton-grid"> <div className="card-skeleton-grid">
{Array.from({ length: count }).map((_, index) => ( {Array.from({ length: count }).map((_, index) => (
<div key={index} className="card-skeleton"> <div key={index} className="card-skeleton">
@ -23,6 +25,11 @@ const CardSkeleton = ({ count = 15 }) => {
</div> </div>
))} ))}
</div> </div>
<div>
<BillingTableSkeleton />
</div>
</div>
</> </>
); );
}; };

View File

@ -19,7 +19,14 @@
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 14px; gap: 14px;
margin-top: 1rem; margin-top: 1rem;
width: 80%;
overflow: hidden;
height: 40vh;
@media (max-width: 768px) {
width: 100%; width: 100%;
margin-top: 0;
height: 70vh;
}
} }
.card-skeleton { .card-skeleton {
@ -47,3 +54,16 @@
height: 14px; height: 14px;
width: 90%; width: 90%;
} }
.salesSkelton {
display: flex;
align-items: flex-start;
width: 100%;
gap: 1rem;
height: 100%;
padding: 10px;
@media (max-width: 768px) {
flex-direction: column;
height: 80vh;
justify-content: space-between;
}
}

View File

@ -1,15 +1,14 @@
@keyframes shimmer { @keyframes shimmer {
0% { background-position: -500px 0; } 0% {
100% { background-position: 500px 0; } background-position: -500px 0;
}
100% {
background-position: 500px 0;
}
} }
.skeleton { .skeleton {
background: linear-gradient( background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 37%, #e0e0e0 63%);
90deg,
#e0e0e0 25%,
#f0f0f0 37%,
#e0e0e0 63%
);
background-size: 1000px 100%; background-size: 1000px 100%;
animation: shimmer 1.4s infinite; animation: shimmer 1.4s infinite;
border-radius: 6px; border-radius: 6px;
@ -23,6 +22,7 @@
padding: 10px 16px; padding: 10px 16px;
background: #fff; background: #fff;
border-bottom: 1px solid #ddd; border-bottom: 1px solid #ddd;
border-radius: 6px;
} }
/* LEFT */ /* LEFT */
@ -83,3 +83,10 @@
height: 36px; height: 36px;
border-radius: 8px; border-radius: 8px;
} }
@media (max-width: 768px) {
.skeleton .navbar-search,
.nav-icons {
display: none;
}
}

View File

@ -401,7 +401,7 @@ const SalesPrintSize = ({ onSettingsChange, closeModel }) => {
<div style={{ textAlign: 'center' }}> <div style={{ textAlign: 'center' }}>
<p> Print : {selectedTemplate?.StyleName}</p> <p> Print : {selectedTemplate?.StyleName}</p>
</div> </div>
<div style={{ display: 'flex', gap: '1rem' }}> <div style={{ display: 'flex', gap: '1rem', flexWrap:"wrap" }}>
<div> <div>
{ {
<div <div

View File

@ -150,7 +150,7 @@ const SelectPrintMode = ({ closeModel }) => {
Select Print Mode Select Print Mode
</p> </p>
<div style={{ display: 'flex', gap: '1rem', padding: '10px' }}> <div style={{ display: 'flex', gap: '1rem', padding: '10px', flexWrap:"wrap"}}>
<label> <label>
<input <input
type="checkbox" type="checkbox"

View File

@ -6,7 +6,10 @@ import moment from 'moment';
import { DropDowns } from '../../../Components/Forms/DropDown.jsx'; import { DropDowns } from '../../../Components/Forms/DropDown.jsx';
import { Tables } from '../../../Components/Tables/Table'; import { Tables } from '../../../Components/Tables/Table';
import { BiSolidPrinter } from 'react-icons/bi'; import { BiSolidPrinter } from 'react-icons/bi';
import { getAllCustomerWithoutActive, PreferenceData } from '../../../Features/BookingScreen/BookingData/BookingData'; import {
getAllCustomerWithoutActive,
PreferenceData,
} from '../../../Features/BookingScreen/BookingData/BookingData';
import { import {
getSession, getSession,
extractLastNumber, extractLastNumber,
@ -58,7 +61,11 @@ const LedgerReport = () => {
const AppId = getSession('AppId'); const AppId = getSession('AppId');
const SettingDataSelector = useSelector(PreferenceData); const SettingDataSelector = useSelector(PreferenceData);
const subDirectory = import.meta.env.BASE_URL; const subDirectory = import.meta.env.BASE_URL;
const MobileA4Print = SettingDataSelector?.[0]?.SettingDtlDetails?.find((setting) => setting?.SettingIdName?.toLowerCase() === "mobilea4" && setting?.SettingValue === 'Y'); const MobileA4Print = SettingDataSelector?.[0]?.SettingDtlDetails?.find(
(setting) =>
setting?.SettingIdName?.toLowerCase() === 'mobilea4' &&
setting?.SettingValue === 'Y'
);
const items = [ const items = [
{ {
name: 'Home', name: 'Home',
@ -400,8 +407,7 @@ const LedgerReport = () => {
printStyle: style, printStyle: style,
}); });
} }
} } else {
else {
await printDiv('RePrint', style); await printDiv('RePrint', style);
} }
}; };
@ -410,62 +416,62 @@ const LedgerReport = () => {
if (!LedgerData || LedgerData.length === 0) return; if (!LedgerData || LedgerData.length === 0) return;
const workbook = new ExcelJS.Workbook(); const workbook = new ExcelJS.Workbook();
const worksheet = workbook.addWorksheet("Ledger Report"); const worksheet = workbook.addWorksheet('Ledger Report');
worksheet.views = [ worksheet.views = [
{ {
state: "frozen", state: 'frozen',
ySplit: 2 ySplit: 2,
} },
]; ];
// HEADER ROW 1 // HEADER ROW 1
worksheet.addRow([ worksheet.addRow([
"SI No", 'SI No',
"Type", 'Type',
"Cus-Id", 'Cus-Id',
"Cus-Name", 'Cus-Name',
"RC.NO", 'RC.NO',
"Mob.No", 'Mob.No',
"Address", 'Address',
"Payment Mode", 'Payment Mode',
"Date", 'Date',
"Debit", 'Debit',
"Credit", 'Credit',
"Balance in", 'Balance in',
"" '',
]); ]);
// HEADER ROW 2 // HEADER ROW 2
worksheet.addRow([ worksheet.addRow([
"", '',
"", '',
"", '',
"", '',
"", '',
"", '',
"", '',
"", '',
"", '',
"", '',
"", '',
"Credit", 'Credit',
"Debit" 'Debit',
]); ]);
// MERGE CELLS // MERGE CELLS
worksheet.mergeCells("A1:A2"); worksheet.mergeCells('A1:A2');
worksheet.mergeCells("B1:B2"); worksheet.mergeCells('B1:B2');
worksheet.mergeCells("C1:C2"); worksheet.mergeCells('C1:C2');
worksheet.mergeCells("D1:D2"); worksheet.mergeCells('D1:D2');
worksheet.mergeCells("E1:E2"); worksheet.mergeCells('E1:E2');
worksheet.mergeCells("F1:F2"); worksheet.mergeCells('F1:F2');
worksheet.mergeCells("G1:G2"); worksheet.mergeCells('G1:G2');
worksheet.mergeCells("H1:H2"); worksheet.mergeCells('H1:H2');
worksheet.mergeCells("I1:I2"); worksheet.mergeCells('I1:I2');
worksheet.mergeCells("J1:J2"); worksheet.mergeCells('J1:J2');
worksheet.mergeCells("K1:K2"); worksheet.mergeCells('K1:K2');
worksheet.mergeCells("L1:M1"); worksheet.mergeCells('L1:M1');
// worksheet.eachRow((row) => { // worksheet.eachRow((row) => {
// row.eachCell((cell) => { // row.eachCell((cell) => {
@ -492,31 +498,34 @@ const LedgerReport = () => {
row.eachCell((cell) => { row.eachCell((cell) => {
cell.font = { cell.font = {
bold: true, bold: true,
color: { argb: "FFFFFFFF" } // white text color: { argb: 'FFFFFFFF' }, // white text
}; };
cell.alignment = { cell.alignment = {
vertical: "middle", vertical: 'middle',
horizontal: "center" horizontal: 'center',
}; };
cell.fill = { cell.fill = {
type: "pattern", type: 'pattern',
pattern: "solid", pattern: 'solid',
fgColor: { argb: "FF2E7D32" } // green header fgColor: { argb: 'FF2E7D32' }, // green header
}; };
cell.border = { cell.border = {
top: { style: "thin" }, top: { style: 'thin' },
left: { style: "thin" }, left: { style: 'thin' },
bottom: { style: "thin" }, bottom: { style: 'thin' },
right: { style: "thin" } right: { style: 'thin' },
}; };
}); });
}); });
// specifically ensure Balance in header center // specifically ensure Balance in header center
worksheet.getCell("L1").alignment = { horizontal: "center", vertical: "middle" }; worksheet.getCell('L1').alignment = {
horizontal: 'center',
vertical: 'middle',
};
// COLUMN WIDTH // COLUMN WIDTH
worksheet.columns = [ worksheet.columns = [
@ -532,25 +541,25 @@ const LedgerReport = () => {
{ width: 12 }, { width: 12 },
{ width: 12 }, { width: 12 },
{ width: 12 }, { width: 12 },
{ width: 12 } { width: 12 },
]; ];
// DATA ROWS // DATA ROWS
LedgerData.forEach((row, index) => { LedgerData.forEach((row, index) => {
const r = worksheet.addRow([ const r = worksheet.addRow([
index + 1, index + 1,
row.TypeName === "OB" ? "OB" : row.TypeName, row.TypeName === 'OB' ? 'OB' : row.TypeName,
row.CustId ? extractLastNumber(row.CustId) : "GEN", row.CustId ? extractLastNumber(row.CustId) : 'GEN',
row.CustName || "", row.CustName || '',
row.ReceiptNo || "", row.ReceiptNo || '',
row.MobileNo || "", row.MobileNo || '',
row.Address1 || "", row.Address1 || '',
row.PaymentTypeName || "", row.PaymentTypeName || '',
ExtractDateFormate(row.Date) || "", ExtractDateFormate(row.Date) || '',
row.Debit > 0 ? row.Debit : "", row.Debit > 0 ? row.Debit : '',
row.Credit > 0 ? row.Credit : "", row.Credit > 0 ? row.Credit : '',
row.BalCredit > 0 ? row.BalCredit : "", row.BalCredit > 0 ? row.BalCredit : '',
row.BalDebit > 0 ? row.BalDebit : "" row.BalDebit > 0 ? row.BalDebit : '',
]); ]);
// 🔓 Unlock every cell in this row // 🔓 Unlock every cell in this row
@ -560,12 +569,12 @@ const LedgerReport = () => {
// Credit red // Credit red
if (row.BalCredit > 0) { if (row.BalCredit > 0) {
r.getCell(12).font = { color: { argb: "FFFF0000" } }; r.getCell(12).font = { color: { argb: 'FFFF0000' } };
} }
// Debit green // Debit green
if (row.BalDebit > 0) { if (row.BalDebit > 0) {
r.getCell(13).font = { color: { argb: "FF008000" } }; r.getCell(13).font = { color: { argb: 'FF008000' } };
} }
}); });
@ -578,7 +587,7 @@ const LedgerReport = () => {
} }
}); });
await worksheet.protect("ledger123", { await worksheet.protect('ledger123', {
selectLockedCells: true, selectLockedCells: true,
selectUnlockedCells: true, selectUnlockedCells: true,
formatColumns: true, // allow column resize formatColumns: true, // allow column resize
@ -586,29 +595,29 @@ const LedgerReport = () => {
insertColumns: false, insertColumns: false,
insertRows: false, insertRows: false,
deleteColumns: false, deleteColumns: false,
deleteRows: false deleteRows: false,
}); });
const buffer = await workbook.xlsx.writeBuffer(); const buffer = await workbook.xlsx.writeBuffer();
const blob = new Blob([buffer], { const blob = new Blob([buffer], {
type: "application/vnd.openxmlformats-of ficedocument.spreadsheetml.sheet" type: 'application/vnd.openxmlformats-of ficedocument.spreadsheetml.sheet',
}); });
const now = new Date(); const now = new Date();
const day = String(now.getDate()).padStart(2, "0"); const day = String(now.getDate()).padStart(2, '0');
const month = String(now.getMonth() + 1).padStart(2, "0"); const month = String(now.getMonth() + 1).padStart(2, '0');
const year = now.getFullYear(); const year = now.getFullYear();
let hours = now.getHours(); let hours = now.getHours();
const minutes = String(now.getMinutes()).padStart(2, "0"); const minutes = String(now.getMinutes()).padStart(2, '0');
const ampm = hours >= 12 ? "PM" : "AM"; const ampm = hours >= 12 ? 'PM' : 'AM';
hours = hours % 12; hours = hours % 12;
hours = hours ? hours : 12; hours = hours ? hours : 12;
hours = String(hours).padStart(2, "0"); hours = String(hours).padStart(2, '0');
const fileName = `Ledger Report_${day}-${month}-${year}_${hours}-${minutes}-${ampm}.xlsx`; const fileName = `Ledger Report_${day}-${month}-${year}_${hours}-${minutes}-${ampm}.xlsx`;
@ -833,21 +842,43 @@ const LedgerReport = () => {
</div> </div>
<div className="ledger-PrintIcon"> <div className="ledger-PrintIcon">
<BiSolidPrinter <BiSolidPrinter
onClick={LedgerData?.length > 0 ? () => Print() : (() => { })} onClick={LedgerData?.length > 0 ? () => Print() : () => {}}
className={ className={
LedgerData?.length > 0 LedgerData?.length > 0
? 'ItemWiseReport-printerIcon' ? 'ItemWiseReport-printerIcon'
: 'ItemWiseReport-printerIcon-disabled' : 'ItemWiseReport-printerIcon-disabled'
} }
/> />
<Tooltip title={LedgerData?.length > 0 ? "Export as Excel" : "No data to Export"} placement="top"> <Tooltip
<div style={{ width: '35px', height: '35px', display: 'flex', justifyContent: 'center', alignItems: 'center', cursor: LedgerData?.length > 0 ? 'pointer' : 'not-allowed', opacity: LedgerData?.length > 0 ? 1 : 0.5 }}> title={
LedgerData?.length > 0
? 'Export as Excel'
: 'No data to Export'
}
placement="top"
>
<div
style={{
width: '35px',
height: '35px',
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
cursor:
LedgerData?.length > 0 ? 'pointer' : 'not-allowed',
opacity: LedgerData?.length > 0 ? 1 : 0.5,
}}
>
<img <img
width={'95%'} width={'95%'}
height={'95%'} height={'95%'}
src={excelExport} src={excelExport}
alt="Excel Export" alt="Excel Export"
onClick={LedgerData?.length > 0 ? () => exportToExcel() : (() => { })} onClick={
LedgerData?.length > 0
? () => exportToExcel()
: () => {}
}
/> />
</div> </div>
</Tooltip> </Tooltip>

View File

@ -13,6 +13,18 @@
width: 32px !important; width: 32px !important;
height: 32px !important; height: 32px !important;
} }
.ant-form-item {
margin-bottom: 0 !important;
}
.Combosearch .ant-select.ant-select-in-form-item {
width: unset !important;
}
.Combosearch {
height: unset !important;
}
@media (max-width: 500px) {
padding: 0rem 10px;
}
} }
.BSBillingNav2div2 { .BSBillingNav2div2 {

View File

@ -9,7 +9,7 @@
button { button {
padding: 6px 14px; padding: 6px 14px;
font-family: 'Poppins'; font-family: "Poppins";
border: none; border: none;
outline: none; outline: none;
border-radius: 5px; border-radius: 5px;
@ -35,7 +35,7 @@
width: 100%; width: 100%;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
font-family: 'Poppins'; font-family: "Poppins";
h3 { h3 {
font-weight: 500; font-weight: 500;
@ -76,6 +76,7 @@
left: 0; left: 0;
top: 9rem; top: 9rem;
width: 100vw !important; width: 100vw !important;
right: 0;
padding: 1rem 1rem !important; padding: 1rem 1rem !important;
} }
@ -84,7 +85,7 @@
} }
.AddFavItemListCont { .AddFavItemListCont {
height: 50vh; height: 34vh;
padding-bottom: 4rem; padding-bottom: 4rem;
} }
} }