Commit a3a0d659 authored by Gihan76's avatar Gihan76

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	WebFrontEnd/smartcoach-frontend/package-lock.json
#	WebFrontEnd/smartcoach-frontend/package.json
#	WebFrontEnd/smartcoach-frontend/src/Components/Admin/Dashboard.js
parents b7415a9d 13565272
const mongoose = require('mongoose');
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'},
},{
timestamps:true,
});
const ClassStudentList = mongoose.model('ClassStudentList',ClassStudentSchema);
module.exports = ClassStudentList;
\ No newline at end of file
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const TutorRatingSchema = new Schema({
tutor_id:{type:mongoose.Schema.Types.ObjectId,ref: 'tutor'},
student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'student'},
rating: {type:String},
review:{type:String},
version:{type:String},
}, {
timestamps:true,
});
const TutorRatings = mongoose.model('TutorRatings',TutorRatingSchema);
module.exports = TutorRatings;
\ No newline at end of file
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CreateClassSchema = new Schema({
tutor_id:{type:mongoose.Schema.Types.ObjectId,ref: 'tutor'},
class_method:{type:String},
class_type: {type:String},
institute_id:{type:mongoose.Schema.Types.ObjectId,ref: 'institute'},
batch_no : {type:String},
class_startingDate:{type:Date},
subject:{type:String},
class_fee:{type:String},
student_list:[{type:mongoose.Schema.Types.ObjectId,ref: 'student'}],
class_fee_option : {type:String},
class_conduct_day : {type:String},
class_conduct_time : {type:String},
AdmissionFee : {type:String},
batchYear : {type:String},
isActiveClass: {
type: Boolean,
default: true
},
isActiveForStudent: {
type: Boolean,
default: true
}
},{
timestamps:true,
});
const Classes = mongoose.model('Classes',CreateClassSchema);
module.exports = Classes;
\ No newline at end of file
......@@ -3,9 +3,10 @@ const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ALResultsSchema = new Schema({
student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'Post'},
student_id:{type:mongoose.Schema.Types.ObjectId,ref: 'students'},
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},
......
......@@ -19,7 +19,7 @@ const userSchema = new Schema({
tutor_main_city:[{type:String}],
tutor_medium:{type:String},
tutor_qualification:{type:String},
tutor_instituteIDList:[{type:mongoose.Schema.Types.ObjectId,ref: 'Post'}],
tutor_instituteIDList:[{type:mongoose.Schema.Types.ObjectId,ref: 'institute'}],
}, {
timestamps:true,
});
......
This diff is collapsed.
......@@ -10,12 +10,14 @@
"author": "",
"license": "ISC",
"dependencies": {
"axios": "^0.21.4",
"cors": "^2.8.5",
"dotenv": "^10.0.0",
"express": "^4.17.1",
"mongoose": "^5.12.15"
},
"devDependencies": {
"nodemailer": "^6.6.2"
"nodemailer": "^6.6.2",
"request": "^2.88.2"
}
}
const router = require('express').Router();
let classes = require('../models/createClass.model');
let student = require('../models/student.user.model');
let studentList = require('../models/ClassStudentList.model');
const mongoose = require("mongoose");
router.route('/add').post(async(req,res) =>{
console.log("Inside Create Class")
if(req.body.institute_id !== ""){
const tutor_id = mongoose.Types.ObjectId(req.body.tutor_id);
const class_method = req.body.class_method;
const class_type = req.body.class_type;
const institute_id = mongoose.Types.ObjectId(req.body.institute_id);
const batch_no = req.body.batch_no;
const class_startingDate = req.body.class_startingDate;
const subject = req.body.subject;
const class_fee = req.body.class_fee;
const class_fee_option = req.body.class_fee_option;
const isActiveClass = req.body.isActiveClass;
const isActiveForStudent = req.body.isActiveForStudent;
const class_conduct_day = req.body.class_conduct_day;
const class_conduct_time = req.body.class_conduct_time;
const AdmissionFee = req.body.AdmissionFee;
const batchYear = req.body.batchYear;
const newClass = new classes({
tutor_id,
class_method,
class_type,
batch_no,
class_startingDate,
subject,
class_fee,
isActiveClass,
isActiveForStudent,
institute_id,
class_fee_option,
class_conduct_day,
class_conduct_time,
AdmissionFee,
batchYear
});
console.log(newClass)
newClass.save().then(()=>{
res.json('Class Created!');
}).catch(err =>res.status(400).json('Error: '+err));
}
else {
const tutor_id = mongoose.Types.ObjectId(req.body.tutor_id);
const class_method = req.body.class_method;
const class_type = req.body.class_type;
const batch_no = req.body.batch_no;
const class_startingDate = req.body.class_startingDate;
const subject = req.body.subject;
const class_fee = req.body.class_fee;
const class_fee_option = req.body.class_fee_option;
const isActiveClass = req.body.isActiveClass;
const isActiveForStudent = req.body.isActiveForStudent;
const class_conduct_day = req.body.class_conduct_day;
const class_conduct_time = req.body.class_conduct_time;
const AdmissionFee = req.body.AdmissionFee;
const batchYear = req.body.batchYear;
const newClass = new classes({
tutor_id,
class_method,
class_type,
batch_no,
class_startingDate,
subject,
class_fee,
isActiveClass,
isActiveForStudent,
class_fee_option,
class_conduct_day,
class_conduct_time,
AdmissionFee,
batchYear
});
console.log(newClass)
newClass.save().then(()=>{
res.json('Class Created!');
}).catch(err =>res.status(400).json('Error: '+err));
}
});
router.route('/tutorClass/:id').get(function (req, res) {
let id = req.params.id;
//console.log("TutorId : " + id)
classes.find({"tutor_id": id}).populate('institute_id').then(tutorsClasses => {
///console.log(tutor);
res.json(tutorsClasses);
}).catch(err => res.status(400).json('Eroor: '+ err));
});
router.route('/studentList/update').post((req, res) => {
const class_id = req.body._id;
const student_nic = req.body.student_nic;
console.log("classID: " + class_id);
console.log("student_nic: " + student_nic);
classes.findById(class_id,function(err, tutorsClass){
if(!tutorsClass)
req.status(404).send("Sorry Class Could not Found.");
else {
student.find({"student_nic": student_nic}).then(student => {
console.log(student)
console.log(student[0]._id)
if(student[0].student_nic === ""){
req.status(500).send("Sorry, This Student Not Registered");
}else{
const student_id = student[0]._id;
const newClassStudent = new studentList({
class_id,
student_id,
});
newClassStudent.save().then(result =>{
res.json('Student added to the Class!');
})
.catch(err =>{
res.status(500).send("Update not possible");
});
}
}).catch(err => res.status(500).json('Eroor: '+ err));
}
});
});
router.route('/studentList/:id').get(function (req, res) {
let id = req.params.id;
console.log("Class ID : " + id)
studentList.find({"class_id": id}).populate('student_id').then(StudentList => {
console.log(StudentList);
res.json(StudentList);
}).catch(err => {
console.log(err);
res.status(400).json('Error: ' + err)
});
});
module.exports = router;
\ No newline at end of file
const router = require('express').Router();
let tutor = require('../models/tutor.user.model');
let tutorRating = require('../models/TutorRatingAndReviews.model');
const mongoose = require("mongoose");
const express = require('express')
const request = require('request');
router.route('/getFilteredList').post((req,res) =>{
tutor.find({
"tutor_Stream" : {'$regex': req.body.selectedStream, '$options': 'i'},
"tutor_subjects" : {'$regex': req.body.selectedSubject, '$options': 'i'},
"tutor_main_district" : {'$regex': req.body.selectedDistrict, '$options': 'i'},
"tutor_main_city" : {'$regex': req.body.selectedCity, '$options': 'i'},
"tutor_medium" : {'$regex': req.body.selectedLanguage, '$options': 'i'},
"tutor_class_type" : {'$regex': req.body.selectedClassType, '$options': 'i'},
})
.then( async tutors => {
let tutorReviewResultsFinal
let tutorReviewResults = [];
async function processData(callback) {
async function forLoopRun(callback6) {
let payload
let options
const promises = tutors.map(async (tutor) => {
await tutorRating.find({"tutor_id": tutor._id}).populate('tutor_id').then(async reviews01 => {
//console.log("Review Count " + reviews01.length);
if (reviews01.length > 0) {
let reviewsList01 = [];
const reviewPromises = reviews01.map(async function (oneReview) {
reviewsList01.push(oneReview.review);
return oneReview.review
})
const reviewsForTutor = await Promise.all(reviewPromises);
await console.log(reviewsForTutor);
async function getPrevMatches(cb) {
options = {
uri: 'http://localhost:5000/review_prediction_for_tutor',
body: JSON.stringify(reviewsList01),
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}
request(options, async function (error, response) {
// console.log(error, response.body);
//tutor.tutor_main_district = "Test";
//tutorReviewResults.tutor_reviewValue = response.body;
payload = {
"tutor_id": tutor._id,
"tutor_name": tutor.tutor_name,
"tutor_nic": tutor.tutor_nic,
"tutor_email": tutor.tutor_email,
"tutor_phone": tutor.tutor_phone,
"tutor_address": tutor.tutor_address,
"tutor_password": tutor.tutor_password,
"tutor_gender": tutor.tutor_gender,
"tutor_status": tutor.tutor_status,
"tutor_image": tutor.tutor_image,
"tutor_Stream": tutor.tutor_Stream,
"tutor_subjects": tutor.tutor_subjects,
"tutor_class_type": tutor.tutor_class_type,
"tutor_main_district": tutor.tutor_main_district,
"tutor_main_city": tutor.tutor_main_city,
"tutor_medium": tutor.tutor_medium,
"tutor_qualification": tutor.tutor_qualification,
"tutor_reviewValue": JSON.parse(response.body).result,
};
await tutorReviewResults.push(payload);
//console.log(payload)
if (response.statusCode === 200){
cb(payload);
}
});
}
await getPrevMatches( function (message777) {
console.log(message777);
// callback("Done : ProcessData");
});
// module.exports = {
// getPrevMatches: getPrevMatches
// }
//console.log(getPrevMatches);
}
})
return payload;
})
tutorReviewResultsFinal = await Promise.all(promises);
callback6("Get Return :" +tutorReviewResultsFinal);
}
await forLoopRun(async function (message2) {
console.log(message2);
callback("Done : ProcessData");
});
}
console.log("Last " +tutorReviewResults.length)
await processData( async function (message) {
console.log(message);
//console.log("Inside return Fuction");
}).then(async r =>{
console.log("Inside return Function");
//await res.json(tutorReviewResults)
}) ;
console.log("End " +tutorReviewResults.length)
res.json(tutorReviewResults)
})
.catch(err => res.status(400).json('Error: '+ err));
});
module.exports = router;
const router = require('express').Router();
let tutor = require('../models/tutor.user.model');
let tutorRating = require('../models/TutorRatingAndReviews.model');
const axios = require('axios');
const request = require('request');
router.route('/getFilteredList').post((req, res) => {
let teacherReviewList = [];
let reviewListWithScore = [];
tutor.find({
"tutor_Stream": {'$regex': req.body.selectedStream, '$options': 'i'},
"tutor_subjects": {'$regex': req.body.selectedSubject, '$options': 'i'},
"tutor_main_district": {'$regex': req.body.selectedDistrict, '$options': 'i'},
"tutor_main_city": {'$regex': req.body.selectedCity, '$options': 'i'},
"tutor_medium": {'$regex': req.body.selectedLanguage, '$options': 'i'},
"tutor_class_type": {'$regex': req.body.selectedClassType, '$options': 'i'},
})
.then(tutors => {
//console.log(tutors);
tutors.reduce(async (promise, tutor, idx) => {
await promise;
await tutorRating.find({"tutor_id": tutor._id}).then((reviews) => {
//console.log("i : " + JSON.stringify(reviews));
console.log("idx : " + idx);
// console.log("tutor : " + tutors);
const teacherReview = {
"teacher": tutor._id,
"tutor_name": tutor.tutor_name,
"tutor_nic": tutor.tutor_nic,
"tutor_email": tutor.tutor_email,
"tutor_phone": tutor.tutor_phone,
"tutor_address": tutor.tutor_address,
"tutor_password": tutor.tutor_password,
"tutor_gender": tutor.tutor_gender,
"tutor_status": tutor.tutor_status,
"tutor_image": tutor.tutor_image,
"tutor_Stream": tutor.tutor_Stream,
"tutor_subjects": tutor.tutor_subjects,
"tutor_class_type": tutor.tutor_class_type,
"tutor_main_district": tutor.tutor_main_district,
"tutor_main_city": tutor.tutor_main_city,
"tutor_medium": tutor.tutor_medium,
"tutor_qualification": tutor.tutor_qualification,
"review": reviews.map(review => review.review),
"ratings": reviews.map(review => review.rating)
}
//teacherReviewList.indexOf(teacherReview) === -1 ? teacherReviewList.push(teacherReview) : null;
let index = teacherReviewList.findIndex(x => x.teacher === tutor._id);
if (index === -1) {
teacherReviewList.push(teacherReview);
}
if (idx === tutors.length - 1) {
//console.log(teacherReviewList);
teacherReviewList.reduce(async (promise, teacherReview, idx, teacherReviewList) => {
await promise;
console.log("length" + teacherReview.review.length);
if (teacherReview.review.length > 0) {
let options = {
uri: 'http://localhost:5000/review_prediction_for_tutor',
body: JSON.stringify(teacherReview.review),
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}
let response = await axios.post(options.uri, options.body);
let TotalRating = 0;
teacherReview.ratings.map(rate =>{
TotalRating = TotalRating + Number(rate)
})
const temp = {
"teacher": teacherReview.teacher,
"tutor_name": teacherReview.tutor_name,
"tutor_nic": teacherReview.tutor_nic,
"tutor_email": teacherReview.tutor_email,
"tutor_phone": teacherReview.tutor_phone,
"tutor_address": teacherReview.tutor_address,
"tutor_password": teacherReview.tutor_password,
"tutor_gender": teacherReview.tutor_gender,
"tutor_status": teacherReview.tutor_status,
"tutor_image": teacherReview.tutor_image,
"tutor_Stream": teacherReview.tutor_Stream,
"tutor_subjects": teacherReview.tutor_subjects,
"tutor_class_type": teacherReview.tutor_class_type,
"tutor_main_district": teacherReview.tutor_main_district,
"tutor_main_city": teacherReview.tutor_main_city,
"tutor_medium": teacherReview.tutor_medium,
"tutor_qualification": teacherReview.tutor_qualification,
"tutor_reviewValue": response.data.result,
"tutor_avg_rating" : Number(TotalRating/teacherReview.ratings.length),
"tutor_review_count" : teacherReview.review.length
}
let index = await reviewListWithScore.findIndex(x => x.teacher === teacherReview.teacher);
if (index === -1) {
reviewListWithScore.push(temp);
}
console.log(response.data.result);
} else {
const temp = {
"teacher": teacherReview.teacher,
"tutor_name": teacherReview.tutor_name,
"tutor_nic": teacherReview.tutor_nic,
"tutor_email": teacherReview.tutor_email,
"tutor_phone": teacherReview.tutor_phone,
"tutor_address": teacherReview.tutor_address,
"tutor_password": teacherReview.tutor_password,
"tutor_gender": teacherReview.tutor_gender,
"tutor_status": teacherReview.tutor_status,
"tutor_image": teacherReview.tutor_image,
"tutor_Stream": teacherReview.tutor_Stream,
"tutor_subjects": teacherReview.tutor_subjects,
"tutor_class_type": teacherReview.tutor_class_type,
"tutor_main_district": teacherReview.tutor_main_district,
"tutor_main_city": teacherReview.tutor_main_city,
"tutor_medium": teacherReview.tutor_medium,
"tutor_qualification": teacherReview.tutor_qualification,
"tutor_reviewValue": 0,
"tutor_avg_rating" : 0
}
//reviewListWithScore.push(temp);
//reviewListWithScore.indexOf(temp) === -1 ? reviewListWithScore.push(temp) : null;
let index = reviewListWithScore.findIndex(x => x.teacher === teacherReview.teacher);
if (index === -1) {
reviewListWithScore.push(temp);
}
}
if (idx === teacherReviewList.length - 1) {
res.json(reviewListWithScore)
// console.log(reviewListWithScore);
}
}, Promise.resolve())
}
});
}, Promise.resolve())
//console.log("Return from here");
})
.catch(err => res.status(400).json('Error: ' + err));
});
module.exports = router;
\ No newline at end of file
......@@ -89,68 +89,68 @@ router.route('/add').post( async(req,res) =>{
.then(newUser =>{
////////////////////////////////////////////////////////////////////////////////////
// const content = `
// Hi ${student_name},\n
// You are Create a Student Account on SmartCoach.\n
// You can verify your email address click on 'http://localhost:3000/AccountVerified/${newUser.id}'
//
// Used your email address as the username : ${user_email}
// Used given password as the password
// Thank You,
// Team SmartCoach
// `;
//
// var mail = {
// from: student_name,
// to: user_email,
// subject: 'Email Verification - Student',
// text: content
// }
//
// transporter.sendMail(mail, (err, data) => {
// if (err) {
// res.json({
// msg: 'fail'
// })
// } else {
// res.json({
// msg: 'success'
// })
// }
// })
// ;
//
//
// const content_guardian = `
// Hi ${guardian_name},\n
// Your student ${student_name} is Create a Student Account on SmartCoach.\n
//
// You can know student progress through the email.
// We will send Student attendance, Quiz marks, Assignment Marks and other details through this email.
//
// Thank You,
// Team SmartCoach
// `;
//
// var mail_guardian = {
// from: guardian_name,
// to: guardian_email,
// subject: 'Student Information on SmartCoach',
// text: content_guardian
// }
//
// transporter.sendMail(mail_guardian, (err, data) => {
// if (err) {
// res.json({
// msg: 'fail'
// })
// } else {
// res.json({
// msg: 'success'
// })
// }
// })
// ;
const content = `
Hi ${student_name},\n
You are Create a Student Account on SmartCoach.\n
You can verify your email address click on 'http://localhost:3000/AccountVerified/${newUser.id}'
Used your email address as the username : ${user_email}
Used given password as the password
Thank You,
Team SmartCoach
`;
var mail = {
from: student_name,
to: user_email,
subject: 'Email Verification - Student',
text: content
}
transporter.sendMail(mail, (err, data) => {
if (err) {
res.json({
msg: 'fail'
})
} else {
res.json({
msg: 'success'
})
}
})
;
const content_guardian = `
Hi ${guardian_name},\n
Your student ${student_name} is Create a Student Account on SmartCoach.\n
You can know student progress through the email.
We will send Student attendance, Quiz marks, Assignment Marks and other details through this email.
Thank You,
Team SmartCoach
`;
var mail_guardian = {
from: guardian_name,
to: guardian_email,
subject: 'Student Information on SmartCoach',
text: content_guardian
}
transporter.sendMail(mail_guardian, (err, data) => {
if (err) {
res.json({
msg: 'fail'
})
} else {
res.json({
msg: 'success'
})
}
})
;
/////////////////////////////////////////////////////////////////////////////////////
})
......
......@@ -13,6 +13,7 @@ router.route('/add').post(async(req,res) =>{
const student_id = mongoose.Types.ObjectId(req.body.student_id);
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;
......@@ -27,6 +28,7 @@ router.route('/add').post(async(req,res) =>{
student_id,
year,
stream,
Subjects,
subject01,
subject02,
subject03,
......@@ -49,7 +51,7 @@ router.route('/add').post(async(req,res) =>{
else {
ALevelResults.findById(req.body.student_id, function(err, details){
if(!details){
req.status(404).send("data is not found");
res.status(404).send("data is not found");
}
else {
details.year = year;
......
......@@ -30,31 +30,32 @@ transporter.verify((error, success) => {
router.route('/').get((req,res) =>{
tutor.find()
.then(tutors => res.json(tutors))
.catch(err => res.status(400).json('Eroor: '+ err));
});
router.route('/getFilteredList').post((req,res) =>{
console.log(req.body);
tutor.find({
"tutor_Stream" : {'$regex': req.body.selectedStream, '$options': 'i'},
"tutor_subjects" : {'$regex': req.body.selectedSubject, '$options': 'i'},
"tutor_main_district" : {'$regex': req.body.selectedDistrict, '$options': 'i'},
"tutor_main_city" : {'$regex': req.body.selectedCity, '$options': 'i'},
"tutor_medium" : {'$regex': req.body.selectedLanguage, '$options': 'i'},
"tutor_class_type" : {'$regex': req.body.selectedClassType, '$options': 'i'},
})
.then(tutors => {
//console.log(tutors);
console.log(tutors);
res.json(tutors)
})
.catch(err => res.status(400).json('Eroor: '+ err));
});
router.route('/:id').get(function (req, res) {
let id = req.params.id;
//console.log("TutorId : " + id)
tutor.findById(id).populate(['tutor_instituteIDList']).then(tutor => {
///console.log(tutor);
res.json(tutor);
}).catch(err => res.status(400).json('Eroor: '+ err));
});
// router.route('/:id').get(function (req, res) {
// let id = req.params.id;
// console.log("TutorId : " + id)
// tutor.findById(id).populate("tutor_instituteIDList").then(tutor => {
// console.log(tutor);
// res.json(tutor);
// }).catch(err => res.status(400).json('Eroor: '+ err));
// });
router.route('/add').post(async(req,res) =>{
console.log("Tutor Registration began")
......
const router = require('express').Router();
let tutorRatingsRoute = require('../models/TutorRatingAndReviews.model');
const mongoose = require("mongoose");
router.route('/add').post(async(req,res) =>{
const tutor_id = mongoose.Types.ObjectId(req.body.tutor_id);
const student_id = mongoose.Types.ObjectId(req.body.student_id);
const rating = req.body.rating;
const review = req.body.review;
const version = req.body.version;
const newTutorRating = new tutorRatingsRoute({
tutor_id,
student_id,
rating,
review,
version,
});
newTutorRating.save()
.then( () => {
res.json('New Review Added');
})
.catch(err =>res.status(400).json('Error: '+err));
});
module.exports = router;
......@@ -4,7 +4,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 }));
......@@ -29,6 +29,9 @@ const userAccount = require('./routes/userAccount.route');
const questionManage = require('./routes/question.route');
const financeRouter = require('./routes/finance.route');
const studentResult = require('./routes/studentALResult.route');
const tutorRating = require('./routes/tutorRatings.route');
const filteredList = require('./routes/filteredListNew.route');
const createClassRoute = require('./routes/createClass.route');
app.use('/studentSingUp',studentRouter);
app.use('/tutorSingUp',tutorRouter);
......@@ -37,6 +40,9 @@ app.use('/userAccount',userAccount);
app.use('/questions', questionManage);
app.use('/admin/finance', financeRouter);
app.use('/studentResults', studentResult);
app.use('/tutorRatings', tutorRating);
app.use('/filteredList', filteredList);
app.use('/createClass', createClassRoute);
app.listen(port, () => {
console.log(`Server is running on Port: ${port}`);
......
......@@ -3660,6 +3660,11 @@
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.0.tgz",
"integrity": "sha512-Io55IuQY3kydzHtbGvQya3H+KorS/M9rSNyfCGCg9WZ4pyT/lCxIlpJgG1GXW/PswzC84Tr2fBYi+7+jFVQQBw=="
},
"bootstrap-icons": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.5.0.tgz",
"integrity": "sha512-44feMc7DE1Ccpsas/1wioN8ewFJNquvi5FewA06wLnqct7CwMdGDVy41ieHaacogzDqLfG8nADIvMNp9e4bfbA=="
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
......@@ -10181,6 +10186,11 @@
"minimist": "^1.2.5"
}
},
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
},
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
......@@ -12357,6 +12367,14 @@
"lodash": "^4.17.19"
}
},
"react-bootstrap-icons": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/react-bootstrap-icons/-/react-bootstrap-icons-1.5.0.tgz",
"integrity": "sha512-QC5q4meHQG0cO9RJzeDLSqZ1gbVa9jxFCpONCE3GYl2FkbAKSyJAEsONlzTApbZ8/oG87gPWq0xAyn5SZ/Jafw==",
"requires": {
"prop-types": "^15.7.2"
}
},
"react-dev-utils": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz",
......@@ -12486,6 +12504,11 @@
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz",
"integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew=="
},
"react-icons": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz",
"integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ=="
},
"react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
......
......@@ -8,10 +8,14 @@
"@testing-library/user-event": "^12.8.3",
"bootstrap": "^4.6.0",
"chart.js": "^3.5.1",
"bootstrap-icons": "^1.5.0",
"moment": "^2.29.1",
"react": "^17.0.2",
"react-chartjs-2": "^3.0.5",
"react-bootstrap-icons": "^1.5.0",
"react-dom": "^17.0.2",
"react-dropdown": "^1.9.2",
"react-icons": "^4.2.0",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"react-select-search": "^3.0.8",
......
......@@ -16,6 +16,7 @@ import QuestionDetails from "./Components/IT18050240/question_details"
import QuestionLayout from "./Components/IT18050240/question_layout"
//import AdminQuestionManagement from "./Components/IT18050240/admin_question_management.js"
import QuestionBank from "./Components/IT18050240/question_bank"
import TutorProfileView from "./Components/HomePage/TutorProfileView";
function App() {
return (
......@@ -27,6 +28,7 @@ function App() {
<Route path="/SignUp" exact component={SignUp}/>
<Route path="/beforeConfirm" exact component={beforeConfirmation}/>
<Route path="/AccountVerified/:id" exact component={VerifiedAccount}/>
<Route path="/Home/ViewProfile/:id" exact component={TutorProfileView}/>
{/*<Route path="/studentDashboard" exact component={StudentDashboard}/>*/}
......
......@@ -7,6 +7,7 @@ import ViewFinance from './view_financial_details';
import EditFinance from './edit_financial_details';
import AddClass from './add_class_details';
import Analytics from "./analytics";
import studentRequest from './StudentRequestForClass';
export default class Dashboard extends Component {
render() {
......@@ -26,7 +27,7 @@ export default class Dashboard extends Component {
<div className="logo-src"/>
<div className="header__pane ml-auto">
<div>
<button type="button" className="hamburger close-sidebar-btn hamburger--elastic"data-class="closed-sidebar">
<button type="button" className="hamburger close-sidebar-btn hamburger--elastic" data-class="closed-sidebar">
<span className="hamburger-box">
<span className="hamburger-inner"/>
</span>
......@@ -344,6 +345,7 @@ export default class Dashboard extends Component {
{/*</Link>*/}
</li>
<li>
<a href="#">
<i className="metismenu-icon fa fa-calendar"></i>
......@@ -358,10 +360,10 @@ export default class Dashboard extends Component {
</NavLink>
</li>
<li>
<a href="#">
<NavLink to={"/admin/classes/studentRequests/"}>
<i className="metismenu-icon"></i>
Schedule
</a>
Student Requests
</NavLink>
</li>
<li>
<a href="#">
......@@ -453,6 +455,7 @@ export default class Dashboard extends Component {
<Route path="/admin/finance/add" exact component={AddFinance} />
<Route path={"/admin/finance/edit/:id"} exact component={EditFinance}/>
<Route path="/admin/classes/add" exact component={AddClass}/>
<Route path="/admin/classes/studentRequests" exact component={studentRequest}/>
</div>
{/* Footer */}
......
......@@ -23,7 +23,7 @@ export default class TutorCard extends Component{
<img src={TestTeacher} style={{width:'90px', height:'80px'}}/>
<div className="row" style={{width:'80%',background:'#216E9B',
marginLeft:'10px',marginTop:'5px',justifyContent:'center'}}>
<h5 style={{color:'white',float:'center',marginBottom:'10px',marginTop:'5px'}}>98.5%</h5>
<h5 style={{color:'white',float:'center',marginBottom:'10px',marginTop:'5px'}}><span>{this.props.data.tutor_finalScore.toFixed(2)} %</span></h5>
</div>
</div>
<div className="col-6" style={{margin:'0px'}}>
......@@ -64,7 +64,7 @@ export default class TutorCard extends Component{
<img src={Star} style={{width:'20px', height:'20px'}}/>
</div>
<div className="col" >
<h5 style={{float:"left"}}>5</h5>
<h5 style={{float:"left"}}>{this.props.data.tutor_avg_rating.toFixed(1)}</h5>
</div>
</div>
<div className="row">
......@@ -72,7 +72,7 @@ export default class TutorCard extends Component{
<img src={ReviewImg} style={{width:'20px', height:'20px'}}/>
</div>
<div className="col">
<h5 style={{float:"left"}}>23 reviews</h5>
<h5 style={{float:"left"}}>{this.props.data.tutor_review_count} reviews</h5>
</div>
</div>
<div className="row">
......@@ -84,7 +84,8 @@ export default class TutorCard extends Component{
</div>
</div>
<div className="row">
<button className="form-control" style={{background:"#216E9B", color:"white", marginLeft:'15px', marginRight:'15px'}}><b>View Profile</b></button>
<button className="form-control" value={this.props.data._id}
style={{background:"#216E9B", color:"white", marginLeft:'15px', marginRight:'15px'}}><b>View Profile</b></button>
</div>
</div>
......@@ -97,8 +98,7 @@ export default class TutorCard extends Component{
<img src={RecommendIcon} style={{width:'100px', height:'90px', float:'left', margin:'10px'}}/>
</div>
</div>
{/*{console.log("In Tutor Card")}*/}
{/*{console.log(this.props)}*/}
</div>
)
}
......
......@@ -113,11 +113,17 @@ export default class ALResults extends Component{
onSubmitResults(e){
//let student_id = '60fc1aaf718c264214061846';
let Subject = {
[this.state.sub01] : this.state.sub01Result,
[this.state.sub02] : this.state.sub02Result,
[this.state.sub03] : this.state.sub03Result,
}
const newResult = {
student_id:this.state.studentID,
year:this.state.year,
stream:this.state.stream,
Subjects:Subject,
subject01:this.state.sub01,
subject02:this.state.sub02,
subject03:this.state.sub03,
......
const configs = {
BASE_URL: 'http://localhost:5000',
BASE_URL: 'http://localhost:5001',
};
module.exports = configs;
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