Commit 98164579 authored by Hasitha Samarasekara's avatar Hasitha Samarasekara

Merge branch 'IT18063288' into 'master'

It18063288

See merge request !18
parents 48f1d587 76c2c708
......@@ -5,7 +5,7 @@ const Schema = mongoose.Schema;
const ClassStudentSchema = new Schema({
class_id:{type:mongoose.Schema.Types.ObjectId,ref: 'Classes'},
student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'student'},
tutor_id:{type:mongoose.Schema.Types.ObjectId,ref: 'tutor'},
},{
timestamps:true,
});
......
......@@ -7,12 +7,6 @@ const ALResultsSchema = new Schema({
year:{type:String,required:false},
stream: {type:String,required:true},
Subjects : {type:Object},
subject01:{type:String,required:true},
subject02:{type:String,required:true},
subject03:{type:String,required:true},
subject01Result:{type:String,required:true},
subject02Result:{type:String,required:true},
subject03Result:{type:String,required:true},
generalEnglish:{type:String},
commonGeneralTest:{type:String},
image:{type:String},
......
......@@ -19,6 +19,7 @@ const userSchema = new Schema({
tutor_main_city:[{type:String}],
tutor_medium:{type:String},
tutor_qualification:{type:String},
tutor_student_count:{type:Number},
tutor_instituteIDList:[{type:mongoose.Schema.Types.ObjectId,ref: 'institute'}],
}, {
timestamps:true,
......
This diff is collapsed.
......@@ -10,12 +10,21 @@
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.24.0",
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"mongoose": "^5.12.15"
"mongoose": "^5.12.15",
"morgan": "^1.10.0"
},
"devDependencies": {
"bluebird": "^3.7.2",
"cookie-parser": "^1.4.6",
"http-errors": "^1.8.1",
"method-override": "^3.0.0",
"multer": "^1.4.3",
"multer-gridfs-storage": "^5.0.2",
"nodemailer": "^6.6.2"
}
}
......@@ -104,6 +104,7 @@ router.route('/studentList/update').post((req, res) => {
const class_id = req.body._id;
const student_nic = req.body.student_nic;
const tutor_id = req.body.tutor_id;
console.log("classID: " + class_id);
console.log("student_nic: " + student_nic);
......@@ -126,7 +127,7 @@ router.route('/studentList/update').post((req, res) => {
const newClassStudent = new studentList({
class_id,
student_id,
tutor_id
});
newClassStudent.save().then(result =>{
......
const router = require('express').Router();
let tutor = require('../models/tutor.user.model');
let tutorRating = require('../models/TutorRatingAndReviews.model');
let tutorClasses = require('../models/createClass.model');
let ALResults = require('../models/studentALResult.model');
let classStudentList = require('../models/ClassStudentList.model');
const axios = require('axios');
const request = require('request');
//const request = require('request');
router.route('/getFilteredList').post((req, res) => {
......@@ -26,9 +29,34 @@ router.route('/getFilteredList').post((req, res) => {
tutors.reduce(async (promise, tutor, idx) => {
await promise;
await tutorRating.find({"tutor_id": tutor._id}).then((reviews) => {
let classCount = 0;
let studentCount = 0;
await tutorRating.find({"tutor_id": tutor._id}).then(async (reviews) => {
//console.log("i : " + JSON.stringify(reviews));
await tutorClasses.find({"tutor_id": tutor._id}).then(async (tutorOneClass) =>{
classCount = tutorOneClass.length;
console.log("Class Count : " + classCount);
// let oneClassCount = 0
//
// if(tutorOneClass.length > 0){
// tutorOneClass.reduce(async (promise, tutorOneCl, idx2) =>{
// await promise;
// await classStudentList.find({"class_id": tutorOneCl._id}).then( async (stdCount)=>{
// oneClassCount = oneClassCount + stdCount.length;
//
// if(idx2 === stdCount.length - 1){
// studentCount = oneClassCount;
// }
//
// })
// }, Promise.resolve())
// }
})
console.log("idx : " + idx);
// console.log("tutor : " + tutors);
const teacherReview = {
......@@ -48,7 +76,10 @@ router.route('/getFilteredList').post((req, res) => {
"tutor_main_district": tutor.tutor_main_district,
"tutor_main_city": tutor.tutor_main_city,
"tutor_medium": tutor.tutor_medium,
"tutor_registered_date": tutor.createdAt,
"tutor_class_count": classCount,
"tutor_qualification": tutor.tutor_qualification,
"tutor_student_count": tutor.tutor_student_count,
"review": reviews.map(review => review.review),
"ratings": reviews.map(review => review.rating)
}
......@@ -98,6 +129,9 @@ router.route('/getFilteredList').post((req, res) => {
"tutor_main_city": teacherReview.tutor_main_city,
"tutor_medium": teacherReview.tutor_medium,
"tutor_qualification": teacherReview.tutor_qualification,
"tutor_registered_date": teacherReview.tutor_registered_date,
"tutor_class_count": teacherReview.tutor_class_count,
"tutor_student_count": teacherReview.tutor_student_count,
"tutor_reviewValue": response.data.result,
"tutor_avg_rating" : Number(TotalRating/teacherReview.ratings.length),
"tutor_review_count" : teacherReview.review.length
......@@ -129,6 +163,9 @@ router.route('/getFilteredList').post((req, res) => {
"tutor_class_type": teacherReview.tutor_class_type,
"tutor_main_district": teacherReview.tutor_main_district,
"tutor_main_city": teacherReview.tutor_main_city,
"tutor_registered_date": teacherReview.tutor_registered_date,
"tutor_class_count": teacherReview.tutor_class_count,
"tutor_student_count": teacherReview.tutor_student_count,
"tutor_medium": teacherReview.tutor_medium,
"tutor_qualification": teacherReview.tutor_qualification,
"tutor_reviewValue": 0,
......@@ -161,4 +198,5 @@ router.route('/getFilteredList').post((req, res) => {
});
module.exports = router;
\ No newline at end of file
......@@ -14,12 +14,12 @@ router.route('/add').post(async(req,res) =>{
const year = req.body.year;
const stream = req.body.stream;
const Subjects = req.body.Subjects;
const subject01 = req.body.subject01;
const subject02 = req.body.subject02;
const subject03 = req.body.subject03;
const subject01Result = req.body.subject01Result;
const subject02Result = req.body.subject02Result;
const subject03Result = req.body.subject03Result;
// const subject01 = req.body.subject01;
// const subject02 = req.body.subject02;
// const subject03 = req.body.subject03;
// const subject01Result = req.body.subject01Result;
// const subject02Result = req.body.subject02Result;
// const subject03Result = req.body.subject03Result;
const generalEnglish = req.body.generalEnglish;
const commonGeneralTest = req.body.commonGeneralTest;
const image = req.body.image;
......@@ -29,12 +29,12 @@ router.route('/add').post(async(req,res) =>{
year,
stream,
Subjects,
subject01,
subject02,
subject03,
subject01Result,
subject02Result,
subject03Result,
// subject01,
// subject02,
// subject03,
// subject01Result,
// subject02Result,
// subject03Result,
generalEnglish,
commonGeneralTest,
image,
......@@ -56,12 +56,12 @@ router.route('/add').post(async(req,res) =>{
else {
details.year = year;
details.stream = stream;
details.subject01 = subject01;
details.subject02 = subject02;
details.subject03 = subject03;
details.subject01Result = subject01Result;
details.subject02Result = subject02Result;
details.subject03Result = subject03Result;
// details.subject01 = subject01;
// details.subject02 = subject02;
// details.subject03 = subject03;
// details.subject01Result = subject01Result;
// details.subject02Result = subject02Result;
// details.subject03Result = subject03Result;
details.generalEnglish = generalEnglish;
details.commonGeneralTest = commonGeneralTest;
details.image = image;
......
......@@ -75,6 +75,7 @@ router.route('/add').post(async(req,res) =>{
const tutor_main_city = req.body.tutor_main_city;
const tutor_medium = req.body.tutor_medium;
const tutor_qualification = req.body.tutor_qualification;
const tutor_student_count = 0;
let instituteObjectIDList = [];
......@@ -107,7 +108,8 @@ router.route('/add').post(async(req,res) =>{
tutor_main_city,
tutor_medium,
tutor_instituteIDList,
tutor_qualification
tutor_qualification,
tutor_student_count
});
newTutor.save()
.then(tutor => {
......
......@@ -28,20 +28,21 @@ router.route('/getCredentials').post((req, res) => {
const email = req.body.user_email;
const password = req.body.user_password;
console.log(email);
userAccount.find({user_email:email}, function (err, User) {
}).then(User => {
let payload = {
user_id: User[0].user_id,
user_email:User[0].user_email,
user_name:'',
user_type:User[0].user_type
}
console.log(User);
if(User.length > 0){
let payload = {
user_id: User[0].user_id,
user_email:User[0].user_email,
user_name:'',
user_type:User[0].user_type
}
console.log(password);
console.log(User[0].user_password);
if(User[0].user_password === password){
......@@ -90,7 +91,10 @@ router.route('/getCredentials').post((req, res) => {
})
.catch(err => res.status(400).json('Error: ' + err));
.catch(err => {
console.log(err);
res.status(400).json('Error: ' + err)
});
});
......
......@@ -13,7 +13,7 @@ const bodyParser = require('body-parser');
const mongoose =require('mongoose');
require('dotenv').config();
const app = express();
const port = process.env.PORT || 5000;
const port = process.env.PORT || 5001;
app.use(bodyParser.urlencoded({ extended: true }));
......@@ -86,6 +86,9 @@ const filteredList = require('./routes/filteredListNew.route');
const createClassRoute = require('./routes/createClass.route');
const studPerRoute = require('./routes/studper.route');
const imageRouter = require('./routes/pdf.route');
const answerManage = require('./routes/answer_route');
app.use('/studentSingUp',studentRouter);
app.use('/tutorSingUp',tutorRouter);
app.use('/instituteSingUp',instituteRouter);
......@@ -98,7 +101,8 @@ app.use('/tutorRatings', tutorRating);
app.use('/filteredList', filteredList);
app.use('/createClass', createClassRoute);
app.use('/admin/studper',studPerRoute);
app.use('/', imageRouter(upload));
app.listen(port, () => {
console.log(`Server is running on Port: ${port}`);
});
\ No newline at end of file
});
......@@ -7,12 +7,13 @@
"@testing-library/react": "^11.2.6",
"@testing-library/user-event": "^12.8.3",
"bootstrap": "^4.6.0",
"chart.js": "^3.5.1",
"bootstrap-icons": "^1.5.0",
"chart.js": "^3.5.1",
"moment": "^2.29.1",
"react": "^17.0.2",
"react-chartjs-2": "^3.0.5",
"react-bootstrap": "^2.0.2",
"react-bootstrap-icons": "^1.5.0",
"react-chartjs-2": "^3.0.5",
"react-dom": "^17.0.2",
"react-dropdown": "^1.9.2",
"react-icons": "^4.2.0",
......@@ -22,7 +23,7 @@
"react-star-rating-component": "^1.4.1",
"react.pure.component": "^1.2.0",
"sweetalert": "^2.1.2",
"typescript": "^4.4.3",
"typescript": "^4.5.2",
"web-vitals": "^1.1.1"
},
"scripts": {
......
......@@ -117,7 +117,9 @@ export default class Dashboard extends Component {
<div className="dropdown-content1 dropdown-menu-right">
<button type="button" className="dropdown-item">User Account</button>
<button type="button" className="dropdown-item" style={{color:"red"}} onClick={()=>{window.location.replace("/UserLogin");}}>Sign Out</button>
<button type="button" className="dropdown-item" style={{color:"red"}} onClick={()=>{
localStorage.clear();
window.location.replace("/UserLogin");}}>Sign Out</button>
</div>
</div>
</div>
......
......@@ -10,7 +10,7 @@ export default class StudentRequestForClass extends Component{
super(props);
this.state = {
tutorID:'6127b1d7ed4ff23bb0344538',
tutorID:'',
instituteList: [],
ClassMethods : [],
subjectList : [],
......@@ -130,7 +130,8 @@ export default class StudentRequestForClass extends Component{
if(this.state.labelClassID !== ""){
const payload = {
_id : this.state.labelClassID,
student_nic : this.state.typedNIC
student_nic : this.state.typedNIC,
tutor_id : this.state.tutorID
}
axios.post(configs.BASE_URL + '/createClass/studentList/update', payload)
......
......@@ -6,6 +6,7 @@ import axios from "axios";
import * as configs from "../../Config/config";
import * as Icon from "react-bootstrap-icons";
import moment from "moment";
import swal from "sweetalert";
export default class TutorProfileView extends Component{
......@@ -53,10 +54,29 @@ export default class TutorProfileView extends Component{
this.onSID = this.onSID.bind(this);
this.onTutorID = this.onTutorID.bind(this);
this.submitRating = this.submitRating.bind(this);
this.getTutorRatingAndReviews = this.getTutorRatingAndReviews.bind(this);
}
componentDidMount() {
const user_email = localStorage.getItem("email");
const user_id = localStorage.getItem("userID");
const user_name = localStorage.getItem("userName");
const user_type = localStorage.getItem("userType");
if(user_id !== " "){
this.setState({
isLogged : true
})
}
this.setState({
user_email: user_email,
student_id : user_id,
user_name : user_name,
user_type : user_type
})
axios.get(configs.BASE_URL + '/tutorSingUp/' + this.state.tutor_id)
.then(response => {
console.log(response.data);
......@@ -105,53 +125,7 @@ export default class TutorProfileView extends Component{
}, () => {
axios.get(configs.BASE_URL + '/tutorRatings/' + this.state.tutor_id)
.then(response => {
console.log(response.data);
let TotalRating = 0;
let Rating5 = 0;
let Rating4 = 0;
let Rating3 = 0;
let Rating2 = 0;
let Rating1 = 0;
response.data.map((rate)=>{
TotalRating = TotalRating + Number(rate.rating);
if(Number(rate.rating) === 5){
Rating5++
}
else if(Number(rate.rating) === 4){
Rating4++
}
else if(Number(rate.rating) === 3){
Rating3++
}
else if(Number(rate.rating) === 2){
Rating2++
}
else if(Number(rate.rating) === 1){
Rating1++
}
})
console.log(TotalRating)
this.setState({
detailReviewList: response.data.sort((a,b) => b.rating - a.rating),
overRollRating : Number(TotalRating / response.data.length),
ratingCount : response.data.length,
ratingFive : Rating5,
ratingFour : Rating4,
ratingThree:Rating3,
ratingTwo: Rating2,
ratingOne: Rating1,
}, () => {
console.log(this.state.overRollRating)
})
})
this.getTutorRatingAndReviews();
})
......@@ -164,6 +138,56 @@ export default class TutorProfileView extends Component{
})
}
getTutorRatingAndReviews(){
axios.get(configs.BASE_URL + '/tutorRatings/' + this.state.tutor_id)
.then(response => {
console.log(response.data);
let TotalRating = 0;
let Rating5 = 0;
let Rating4 = 0;
let Rating3 = 0;
let Rating2 = 0;
let Rating1 = 0;
response.data.map((rate)=>{
TotalRating = TotalRating + Number(rate.rating);
if(Number(rate.rating) === 5){
Rating5++
}
else if(Number(rate.rating) === 4){
Rating4++
}
else if(Number(rate.rating) === 3){
Rating3++
}
else if(Number(rate.rating) === 2){
Rating2++
}
else if(Number(rate.rating) === 1){
Rating1++
}
})
console.log(TotalRating)
this.setState({
detailReviewList: response.data.sort((a,b) => b.rating - a.rating),
overRollRating : Number(TotalRating / response.data.length),
ratingCount : response.data.length,
ratingFive : Rating5,
ratingFour : Rating4,
ratingThree:Rating3,
ratingTwo: Rating2,
ratingOne: Rating1,
}, () => {
console.log(this.state.overRollRating)
})
})
}
onClickRatingValue(e) {
console.log(e.target.value);
this.setState({
......@@ -214,13 +238,33 @@ export default class TutorProfileView extends Component{
}
// console.log("payload");
console.log(payload);
axios.post(configs.BASE_URL + '/tutorRatings/add', payload)
.then(response => {
alert("One Review added!!!")
});
if(this.state.student_id !== null){
if(this.state.review !== ""){
if(this.state.rating !== 0){
console.log(payload);
axios.post(configs.BASE_URL + '/tutorRatings/add', payload)
.then(response => {
swal("Thank You", "Your Review Added Successfully", "success");
this.getTutorRatingAndReviews();
});
}
else {
swal("Sorry", "Please give a rating first", "warning");
}
}
else {
swal("Sorry", "Please add a review first", "warning");
}
}
else {
swal("Sorry", "You Need to Login to the system...", "warning");
}
// console.log("payload");
}
render() {
......@@ -406,7 +450,7 @@ export default class TutorProfileView extends Component{
<label>{tutorClass.class_conduct_day} - {tutorClass.class_conduct_time}</label>
</div>
<div className="col">
<button className="rounded" style={{background:'Orange', padding:'3px', width:'60px'}} value={""} onClick={e => this.onSelectOneClass(e)}>View</button>
<button className="rounded" style={{background:'Orange', padding:'3px', width:'60px'}} value={""} >View</button>
</div>
</div>
......@@ -549,7 +593,7 @@ export default class TutorProfileView extends Component{
<div className="col">
<div className="row" style={{padding: '15px'}}>
<h2 style={{marginLeft: '15px'}}><span style={{color: 'gray'}}><b
style={{fontSize: '40px', color: "black"}}>{this.state.overRollRating}</b>/5</span></h2>
style={{fontSize: '40px', color: "black"}}>{this.state.overRollRating.toFixed(1)}</b>/5</span></h2>
</div>
<div className="row">
{[...Array(5)].map((star, i) => {
......
......@@ -67,12 +67,13 @@ export default class NavBar extends Component {
color: '#EAE4E4',
marginRight: '50px'
}}><h5>{this.state.user_name !== null ? <span style={{cursor:'pointer'}} onClick={()=>{ window.location.replace("/studentDashboard");}}> {this.state.user_name}</span> : <label onClick={() => {
window.location.replace("UserLogin");
// window.location.replace("UserLogin");
window.location = '/UserLogin';
}}>Login</label>} </h5></label>
{this.state.user_name !== null && <img src={logout} onClick={() => {
localStorage.clear();
window.location.replace("/UserLogin");
}} style={{position: 'absolute', top: '10px', right: '30px', width:'40px', height:'40px',cursor:'pointer'}}/>}
window.location = '/UserLogin';
}} style={{position: 'absolute', top: '15px', right: '30px', width:'30px', height:'30px',cursor:'pointer'}}/>}
{/*{this.state.user_name !== null && <h5 onClick={() => {*/}
{/* localStorage.clear();*/}
......
......@@ -112,7 +112,9 @@ export default class StudentDashboard extends Component {
<div className="dropdown-content1 dropdown-menu-right">
<button type="button" className="dropdown-item" onClick={()=>{window.location.replace("/Home");}}>Back To Home</button>
<button type="button" className="dropdown-item" style={{color:"red"}} onClick={()=>{window.location.replace("/UserLogin");}}>Sign Out</button>
<button type="button" className="dropdown-item" style={{color:"red"}} onClick={()=>{
localStorage.clear();
window.location.replace("/UserLogin");}}>Sign Out</button>
</div>
</div>
</div>
......
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