Commit fa323d4c authored by Madhura Mihiranga H.N. IT19177410's avatar Madhura Mihiranga H.N. IT19177410

Merge branch 'master' into IT19177410

parents 0f9f4946 9e76e025
......@@ -138,22 +138,24 @@ const createUser = async (req, res) => {
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
console.log("error", error)
res.status(500).send(error);
} else {
console.log("Verification email is sent to your account")
console.log("Verification email is sent to your email address")
console.log(data);
res.status(200).send({ data: data, message: "Verification email is sent to your email address" });
}
})
console.log(data);
res.status(200).send(data);
} catch (err) {
console.log(err);
res.send(err);
res.status(500).send(err);
}
});
});
} else {
res.send({ message: "User Already Exist" });
res.status(500).send({ message: "User Already Exist" });
}
}
});
......@@ -194,7 +196,7 @@ const createGoogleUser = async (req, res) => {
});
});
} else {
res.send({ message: "User Already Exist" });
res.status(500).send({ message: "User Already Exist" });
}
}
});
......@@ -206,31 +208,31 @@ const validateUser = async (req, res) => {
console.log(req);
let user = await User.findOne({ email: req.body.email }, (err, user) => {
if (!user.isVerified) {
return res.status(400).send("Please Verify your E-mail Address");
}
if (err) {
console.log(err);
res.status(500).send(err);
} else {
if (user == null) return res.status(500).send("User Not Found");
if (user == null) return res.status(500).send({ message: "User Not Found" });
else {
if (!user.isVerified) {
bcrypt.compare(req.body.password, user.password, function (err, result) {
if (result) {
const token = jwt.sign({
email: user.email,
fullName: user.fullName,
}, process.env.JWT_SECRET)
res.status(200).send({ user: token });
} else {
console.log("Credentials Does Not Matched");
res.status(500).send("Credentials Does Not Matched");
}
});
return res.status(400).send({ message: "Please Verify your E-mail Address" });
} else {
bcrypt.compare(req.body.password, user.password, function (err, result) {
if (result) {
const token = jwt.sign({
email: user.email,
fullName: user.fullName,
}, process.env.JWT_SECRET)
res.status(200).send({ user: token });
} else {
console.log("Credentials Does Not Matched");
res.status(500).send({ message: "Credentials Does Not Matched" });
}
});
}
}
......@@ -294,7 +296,7 @@ const verifyEmail = async (req, res) => {
user.emailToken = null
user.isVerified = true
await user.save()
res.status(200).redirect('http://localhost:3000/signIn');
}
else {
......
......@@ -2992,6 +2992,12 @@
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
},
"@types/raf": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz",
"integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==",
"optional": true
},
"@types/range-parser": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
......@@ -3969,6 +3975,12 @@
}
}
},
"base64-arraybuffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
"integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==",
"optional": true
},
"batch": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
......@@ -4154,6 +4166,11 @@
"node-int64": "^0.4.0"
}
},
"btoa": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz",
"integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g=="
},
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
......@@ -4223,6 +4240,22 @@
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz",
"integrity": "sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w=="
},
"canvg": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz",
"integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==",
"optional": true,
"requires": {
"@babel/runtime": "^7.12.5",
"@types/raf": "^3.4.0",
"core-js": "^3.8.3",
"raf": "^3.4.1",
"regenerator-runtime": "^0.13.7",
"rgbcolor": "^1.0.1",
"stackblur-canvas": "^2.0.0",
"svg-pathdata": "^6.0.3"
}
},
"case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
......@@ -4638,6 +4671,15 @@
"postcss-selector-parser": "^6.0.9"
}
},
"css-line-break": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz",
"integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==",
"optional": true,
"requires": {
"utrie": "^1.0.2"
}
},
"css-loader": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz",
......@@ -5412,6 +5454,12 @@
"domelementtype": "^2.2.0"
}
},
"dompurify": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz",
"integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==",
"optional": true
},
"domutils": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
......@@ -6352,6 +6400,11 @@
"pend": "~1.2.0"
}
},
"fflate": {
"version": "0.4.8",
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz",
"integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="
},
"file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
......@@ -7085,6 +7138,16 @@
"tapable": "^2.0.0"
}
},
"html2canvas": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz",
"integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==",
"optional": true,
"requires": {
"css-line-break": "^2.1.0",
"text-segmentation": "^1.0.3"
}
},
"htmlparser2": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
......@@ -9142,6 +9205,21 @@
"resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz",
"integrity": "sha512-PNYZIdMjVIvVgDSYKTT63Y+KZ6IZvGRNNWcxwD+GNnUz1MKPfv30J8ueCjdwcN0nDx2SlshgyB7Oy0epAzVRRg=="
},
"jspdf": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz",
"integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==",
"requires": {
"@babel/runtime": "^7.14.0",
"atob": "^2.1.2",
"btoa": "^1.2.1",
"canvg": "^3.0.6",
"core-js": "^3.6.0",
"dompurify": "^2.2.0",
"fflate": "^0.4.8",
"html2canvas": "^1.0.0-rc.5"
}
},
"jsprim": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
......@@ -11644,6 +11722,12 @@
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
},
"rgbcolor": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz",
"integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==",
"optional": true
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
......@@ -12118,6 +12202,12 @@
}
}
},
"stackblur-canvas": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz",
"integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==",
"optional": true
},
"stackframe": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
......@@ -12327,6 +12417,12 @@
"resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
"integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ=="
},
"svg-pathdata": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz",
"integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==",
"optional": true
},
"svgo": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz",
......@@ -12558,6 +12654,15 @@
"minimatch": "^3.0.4"
}
},
"text-segmentation": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz",
"integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==",
"optional": true,
"requires": {
"utrie": "^1.0.2"
}
},
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
......@@ -13222,6 +13327,15 @@
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
"utrie": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz",
"integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==",
"optional": true,
"requires": {
"base64-arraybuffer": "^1.0.2"
}
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
......
......@@ -22,6 +22,7 @@
"chart.js": "^3.9.1",
"export-to-csv-file": "^0.2.2",
"gapi-script": "^1.2.0",
"jspdf": "^2.5.1",
"jwt-decode": "^3.1.2",
"mdb-react-ui-kit": "^4.2.0",
"react": "^18.1.0",
......
......@@ -30,6 +30,15 @@ import API from '../../api';
import jwt_decode from "jwt-decode";
import { useSelector, useDispatch } from 'react-redux';
import { login } from '../../features/user';
import Snackbar from '@mui/material/Snackbar';
import MuiAlert, { AlertProps } from '@mui/material/Alert';
const Alert = React.forwardRef(function Alert(
props,
ref,
) {
return <MuiAlert elevation={6} ref={ref} variant="filled" {...props} />;
});
const FacebookButton = styled(Button)(() => ({
transitionProperty: "box-shadow",
......@@ -135,6 +144,8 @@ export default function SignIn() {
const dispatch = useDispatch();
const userDetails = useSelector((state) => state.user)
const clientId = '380810221970-6p2h323ibdoknuaddgrb432skkdm157o.apps.googleusercontent.com'
const [error, setError] = React.useState(false);
const [errorMsg, setErrorMsg] = React.useState("Error");
useEffect(() => {
console.log("userDetails", userDetails);
......@@ -156,6 +167,16 @@ export default function SignIn() {
console.log("FB", response);
}
const handleError = () => {
setError(true);
};
const handleCloseError = (event, reason) => {
if (reason === 'clickaway') {
return;
}
setError(false);
}
const onSuccess = (res) => {
console.log("LOGIN SUCCESS!", res.profileObj)
......@@ -187,11 +208,15 @@ export default function SignIn() {
})
.catch(function (error) {
console.log(error);
setErrorMsg(error.response.data.message)
handleError()
});
})
.catch(function (error) {
console.log(error);
setErrorMsg(error.response.data.message)
handleError()
});
} else {
API.post('user/validate', body).then(function (result) {
......@@ -206,18 +231,24 @@ export default function SignIn() {
})
.catch(function (error) {
console.log(error);
setErrorMsg(error.response.data.message)
handleError()
});
}
})
.catch(function (error) {
console.log(error);
setErrorMsg(error.response.data.message)
handleError()
});
}
}
const onFailure = (res) => {
console.log("LOGIN FAILED!", res)
setErrorMsg("Google Login Failed")
handleError()
}
useEffect(() => {
......@@ -239,15 +270,25 @@ export default function SignIn() {
email: data.get('email'),
password: data.get('password')
}
const result = await API.post('user/validate', body)
console.log("result", result)
let decodedToken = jwt_decode(result.data.user)
console.log("decodedToken", decodedToken)
localStorage.setItem('token', result.data.user)
dispatch(login({ 'fullName': decodedToken.fullName, 'email': decodedToken.email }))
dispatch(addHeader({ 'header': true, 'footer': true }))
navigate('/')
try {
const result = await API.post('user/validate', body)
console.log("result", result)
let decodedToken = jwt_decode(result.data.user)
console.log("decodedToken", decodedToken)
localStorage.setItem('token', result.data.user)
dispatch(login({ 'fullName': decodedToken.fullName, 'email': decodedToken.email }))
dispatch(addHeader({ 'header': true, 'footer': true }))
navigate('/')
} catch (error) {
console.log("errrrr",error)
setErrorMsg(error.response.data.message)
handleError()
}
};
return (
......@@ -262,6 +303,9 @@ export default function SignIn() {
justifyContent: 'center',
alignItems: 'center'
}}>
<Snackbar open={error} autoHideDuration={6000} onClose={handleCloseError}>
<Alert onClose={handleCloseError} severity="error">{errorMsg}</Alert>
</Snackbar>
<ThemeProvider theme={theme}>
<div style={{
paddingTop: '50px',
......
import React, { useEffect, useState } from 'react';
import React, { useEffect, useState, useRef } from 'react';
import Avatar from '@mui/material/Avatar';
import Button from '@mui/material/Button';
import CssBaseline from '@mui/material/CssBaseline';
......@@ -22,6 +22,15 @@ import { makeStyles } from '@mui/styles';
import { useNavigate } from "react-router-dom";
import Logo from './../../images/logo.png'
import API from '../../api';
import Snackbar from '@mui/material/Snackbar';
import MuiAlert, { AlertProps } from '@mui/material/Alert';
const Alert = React.forwardRef(function Alert(
props,
ref,
) {
return <MuiAlert elevation={6} ref={ref} variant="filled" {...props} />;
});
function Copyright(props) {
return (
......@@ -58,11 +67,41 @@ const useStyles = makeStyles({
})
export default function SignUp() {
const [open, setOpen] = React.useState(false);
const [error, setError] = React.useState(false);
const [errorMsg, setErrorMsg] = React.useState("Error");
const [successMsg, setSuccessMsg] = React.useState("Successful");
let navigate = useNavigate();
const dispatch = useDispatch();
const headerVisibility = useSelector((state) => state.header)
const classes = useStyles();
const inputFNameRef = useRef()
const inputLNameRef = useRef()
const inputEmailRef = useRef()
const inputPasswordRef = useRef()
const handleClick = () => {
setOpen(true);
};
const handleClose = (event, reason) => {
if (reason === 'clickaway') {
return;
}
setOpen(false);
};
const handleError = () => {
setError(true);
};
const handleCloseError = (event, reason) => {
if (reason === 'clickaway') {
return;
}
setError(false);
}
useEffect(() => {
dispatch(addHeader({ 'header': false, 'footer': false }))
}, []);
......@@ -87,9 +126,30 @@ export default function SignUp() {
password: data.get('password'),
role: 'user'
}
const result = await API.post('user/create', body)
navigate('/signIn')
console.log("result", result)
try {
const result = await API.post('user/create', body)
console.log("hh", result)
setSuccessMsg(result.data.message)
handleClick()
// navigate('/signIn')
console.log("result", result)
if (inputFNameRef.current || inputLNameRef.current || inputEmailRef.current || inputPasswordRef.current) {
inputFNameRef.current.value = "";
inputLNameRef.current.value = "";
inputEmailRef.current.value = "";
inputPasswordRef.current.value = "";
}
} catch (error) {
setErrorMsg(error.response.data.message)
handleError()
console.log("error", error.response.data.message)
if (inputFNameRef.current || inputLNameRef.current || inputEmailRef.current || inputPasswordRef.current) {
inputFNameRef.current.value = "";
inputLNameRef.current.value = "";
inputEmailRef.current.value = "";
inputPasswordRef.current.value = "";
}
}
};
return (
......@@ -104,7 +164,14 @@ export default function SignUp() {
justifyContent: 'center',
alignItems: 'center'
}}>
<Snackbar open={open} autoHideDuration={10000} onClose={handleClose}>
<Alert onClose={handleClose} severity="success" sx={{ width: '100%' }}>
{successMsg}
</Alert>
</Snackbar>
<Snackbar open={error} autoHideDuration={6000} onClose={handleCloseError}>
<Alert onClose={handleCloseError} severity="error">{errorMsg}</Alert>
</Snackbar>
<img src={Logo} onClick={() => { navigate(`/`); dispatch(addHeader({ 'header': true, 'footer': true })) }} style={{ cursor: 'pointer', position: 'absolute', left: '0', top: '0', width: '180px' }} />
<ThemeProvider theme={theme}>
<div style={{
......@@ -160,6 +227,7 @@ export default function SignUp() {
id="firstName"
label="First Name"
autoFocus
inputRef={inputFNameRef}
/>
</Grid>
<Grid item xs={12} sm={6}>
......@@ -170,6 +238,7 @@ export default function SignUp() {
label="Last Name"
name="lastName"
autoComplete="family-name"
inputRef={inputLNameRef}
/>
</Grid>
<Grid item xs={12}>
......@@ -180,6 +249,7 @@ export default function SignUp() {
label="Email Address"
name="email"
autoComplete="email"
inputRef={inputEmailRef}
/>
</Grid>
<Grid item xs={12}>
......@@ -191,6 +261,7 @@ export default function SignUp() {
type="password"
id="password"
autoComplete="new-password"
inputRef={inputPasswordRef}
/>
</Grid>
<Grid item xs={12}>
......
This diff is collapsed.
......@@ -16,7 +16,7 @@ import { useNavigate } from "react-router-dom";
import Switch, { SwitchProps } from '@mui/material/Switch';
import { useDispatch } from "react-redux";
import { useSelector } from "react-redux";
import Logo from './../images/logo.png'
import Logo from './../images/logo-new.png'
import { darkMode, lightMode } from "../features/theme";
import { styled } from '@mui/material/styles';
import AccountMenu from './AccountMenu';
......@@ -76,7 +76,6 @@ const ResponsiveAppBar = () => {
setAnchorElUser(null);
};
const handleChange = (event) => {
if (event.target.checked) {
console.log("dark")
......@@ -99,7 +98,7 @@ const ResponsiveAppBar = () => {
<Container maxWidth="xl">
<Toolbar disableGutters>
<Box onClick={() => { navigate(`/`) }}
{/* <Box
sx={{
display: { xs: 'none', md: 'flex' },
mr: 1,
......@@ -112,7 +111,9 @@ const ResponsiveAppBar = () => {
cursor: 'pointer',
}} />
}} /> */}
<img onClick={() => { navigate(`/`) }} src={Logo}
style={{ width: '200px', cursor: 'pointer' }} alt="logo" />
......@@ -153,7 +154,7 @@ const ResponsiveAppBar = () => {
))}
</Menu>
</Box>
<Box onClick={() => { navigate(`/`) }}
{/* <Box onClick={() => { navigate(`/`) }}
sx={{
display: { xs: 'flex', md: 'none' },
height: '70px',
......@@ -164,7 +165,8 @@ const ResponsiveAppBar = () => {
backgroundPosition: 'center',
cursor: 'pointer',
}} />
}} /> */}
<Box sx={{ flexGrow: 1, display: { xs: 'none', md: 'flex' } }}>
{pages.map((page) => (
<Button
......
......@@ -43,6 +43,7 @@ import { compareBusiness } from '../features/business';
import { useNavigate } from "react-router-dom";
import BGImage from '../images/vadim-bogulov-Vq-Sqr7D_7k-unsplash.jpg';
import { jsPDF } from "jspdf";
ChartJS.register(
CategoryScale,
......@@ -284,6 +285,55 @@ const Results = () => {
}
const downloadReport = () => {
const doc = new jsPDF();
if (businessDetails.value[0].type == 'hotel') {
doc.setFontSize(22);
doc.setFont("courier", "bolditalic");
doc.text("Hotel Success Precentage Prediction", 105, 8, null, null, "center");
doc.setFont("helvetica", "normal");
doc.setFontSize(16);
doc.text(`Type : ${businessDetails.value[0].type}`, 20, 30);
doc.text(`Latitude : ${businessDetails.value[0].latitude}`, 20, 40);
doc.text(`Longitude : ${businessDetails.value[0].longitude}`, 20, 50);
doc.text(`AttractionPlaces Count : ${businessDetails.value[0].locationFeatures.attractionPlacesCount}`, 20, 60);
doc.text(`Transportation Modes Count : ${businessDetails.value[0].locationFeatures.transportationModesCount}`, 20, 70);
doc.text(`Nearby Hotel Review Count : ${businessDetails.value[0].locationFeatures.nearByHotelReviewCount}`, 20, 80);
doc.setFont("helvetica", "bold");
doc.text(`Final Prediction : ${businessDetails.value[0].ml_result}%`, 20, 90);
doc.save("Report.pdf");
} else if (businessDetails.value[0].type == 'restaurant'){
doc.setFontSize(22);
doc.setFont("courier", "bolditalic");
doc.text("Restaurant Success Percentage Prediction", 105, 8, null, null, "center");
doc.setFont("helvetica", "normal");
doc.setFontSize(16);
doc.text(`Type : ${businessDetails.value[0].type}`, 20, 30);
doc.setFont("helvetica", "normal");
doc.setFontSize(16);
doc.text(`Type : ${businessDetails.value[0].type}`, 20, 30);
doc.text(`Latitude : ${businessDetails.value[0].latitude}`, 20, 40);
doc.text(`Longitude : ${businessDetails.value[0].longitude}`, 20, 50);
doc.text(`Distance to city : ${businessDetails.value[0].locationFeatures.distanceToCity} km`, 20, 60);
doc.text(`Education Related Places Count : ${businessDetails.value[0].locationFeatures.educationRelatedPlacesCount}`, 20, 70);
doc.text(`Office Related Places Count : ${businessDetails.value[0].locationFeatures.workPlacesCount}`, 20, 80);
doc.text(`Shopping Malls Count : ${businessDetails.value[0].locationFeatures.shoppingMallsCount}`, 20, 90);
doc.text(`Competitors Count : ${businessDetails.value[0].locationFeatures.competitors}`, 20, 100);
doc.setFont("helvetica", "bold");
doc.text(`Final Prediction : ${businessDetails.value[0].ml_result}%`, 20, 110);
doc.save("Report.pdf");
}
}
return (
<Box sx={{
width: "100%",
......@@ -329,7 +379,7 @@ const Results = () => {
boxSizing: "border-box",
}}>
<div className={classes.subTitleTxt}>The predicted success percentage for a {businessDetails && businessDetails.value[0].type == 'hotel' ? `Hotel` : businessDetails.value[0].type == 'restaurant' ? `Restaurant` : businessDetails.value[0].type == 'pharmacy' ? `Pharmacy` : `Grocery`} </div>
<div className={classes.bodyTxt}>All the resuts are given based on the location you have given</div>
<div className={classes.bodyTxt}>All the results are given based on the location you have given</div>
{isLoaded &&
<GoogleMap
// onClick={e => setClickedLatLng(e.latLng.toJSON())}
......@@ -507,7 +557,7 @@ const Results = () => {
boxSizing: "border-box",
}}>
<CompareBtn onClick={() => compareLocation()}>Compare With Another Location <ArrowForwardIosIcon /></CompareBtn>
<DownloadBtn>Download Report <SystemUpdateAltRoundedIcon /></DownloadBtn>
<DownloadBtn onClick={() => downloadReport()}>Download Report <SystemUpdateAltRoundedIcon /></DownloadBtn>
</Box>
</Box>
......
......@@ -3,7 +3,34 @@ import { createSlice } from '@reduxjs/toolkit'
export const businessSlice = createSlice({
name: "business",
initialState: {
value: [
value: [{
"type": "hotel",
"latitude": 6.704581206797783,
"longitude": 81.27638881048588,
"serviceDetails": {
"pool": true,
"beach": true,
"wifi": true,
"ac": false,
"parking": false
},
"locationFeatures": {
"attractionPlacesCount": 1,
"transportationModesCount": 0,
"nearByHotelReviewCount": 0,
"competitors": 0
},
"businessCount": {
"atmCount": 0,
"restaurantCount": 0,
"hospitalCount": 0,
"pharmacyCount": 0,
"gasStationCount": 0,
"movieTheaterCount": 0,
"hotelCount": 0
},
"ml_result": 48.6782
}
]
},
reducers: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment