Leave review for appointment
This commit is contained in:
parent
7da2697088
commit
46c50901e8
|
@ -568,5 +568,70 @@ namespace FIT5032_Assignment.Controllers {
|
||||||
ViewBag.image = image;
|
ViewBag.image = image;
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ActionResult Review(string id) {
|
||||||
|
// Check login
|
||||||
|
if (Request.Cookies["psg_auth_token"] == null) {
|
||||||
|
// Redirect to home page
|
||||||
|
return RedirectToAction("Index");
|
||||||
|
}
|
||||||
|
var user = psgCredentialVerify(Request.Cookies["psg_auth_token"].Value);
|
||||||
|
if (user == null) {
|
||||||
|
// Redirect to home page
|
||||||
|
Response.Cookies["psg_auth_token"].Expires = DateTime.Now.AddDays(-1);
|
||||||
|
return RedirectToAction("Index");
|
||||||
|
}
|
||||||
|
var userProfile = loginInfo(user);
|
||||||
|
if (userProfile == null) {
|
||||||
|
// Redirect to home page, and remove cookies
|
||||||
|
Response.Cookies["psg_auth_token"].Expires = DateTime.Now.AddDays(-1);
|
||||||
|
return RedirectToAction("Index");
|
||||||
|
}
|
||||||
|
// Detect user role
|
||||||
|
ViewBag.role = db.Users.Find(userProfile.uuid).role;
|
||||||
|
|
||||||
|
// Only patient can review appointment, but doctor can view
|
||||||
|
/*if (userProfile.role != 1) {
|
||||||
|
TempData["tip"] = "This operation is not allowed.";
|
||||||
|
return Redirect("/Appointments/Index");
|
||||||
|
} */
|
||||||
|
|
||||||
|
// Check if the appointment is belong to the doctor or patient
|
||||||
|
var appointment = db.Appointments.Find(id);
|
||||||
|
if (appointment == null) {
|
||||||
|
TempData["tip"] = "The appointment does not exist.";
|
||||||
|
return Redirect("/Appointments/Index");
|
||||||
|
}
|
||||||
|
if (appointment.patient != userProfile.uuid && appointment.responsibleBy != userProfile.uuid) {
|
||||||
|
TempData["tip"] = "The appointment does not exist.";
|
||||||
|
return Redirect("/Appointments/Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check status == 2
|
||||||
|
if (appointment.status != 2) {
|
||||||
|
TempData["tip"] = "Operation invalid";
|
||||||
|
return Redirect("/Appointments/Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewBag.appointment = appointment;
|
||||||
|
|
||||||
|
// Fetch doctor profile
|
||||||
|
ViewBag.doctor = db.Doctors.Where(d => d.user == appointment.responsibleBy);
|
||||||
|
ViewBag.doctorUser = db.Users.Find(appointment.responsibleBy);
|
||||||
|
|
||||||
|
// Fetch patient profile
|
||||||
|
ViewBag.patient = db.Users.Find(appointment.patient);
|
||||||
|
|
||||||
|
// Fetch review if exist
|
||||||
|
var review = db.Reviews.Where(r => r.appointment == id);
|
||||||
|
if (review.Count() != 0) {
|
||||||
|
ViewBag.review = review.First();
|
||||||
|
ViewBag.reviewAvailable = true;
|
||||||
|
} else {
|
||||||
|
ViewBag.reviewAvailable = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return View();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,7 @@ namespace FIT5032_Assignment.Controllers {
|
||||||
public DbSet<Doctors> Doctors { get; set; }
|
public DbSet<Doctors> Doctors { get; set; }
|
||||||
public DbSet<Appointments> Appointments { get; set; }
|
public DbSet<Appointments> Appointments { get; set; }
|
||||||
public DbSet<Images> Images { get; set; }
|
public DbSet<Images> Images { get; set; }
|
||||||
|
public DbSet<Reviews> Reviews { get; set; }
|
||||||
}
|
}
|
||||||
public class HomeController : Controller {
|
public class HomeController : Controller {
|
||||||
public static string GetMd5Hash(string input) {
|
public static string GetMd5Hash(string input) {
|
||||||
|
|
|
@ -325,6 +325,7 @@
|
||||||
<Content Include="Views\Appointments\Create.cshtml" />
|
<Content Include="Views\Appointments\Create.cshtml" />
|
||||||
<Content Include="Views\Appointments\UploadImage.cshtml" />
|
<Content Include="Views\Appointments\UploadImage.cshtml" />
|
||||||
<Content Include="Views\Appointments\Detail.cshtml" />
|
<Content Include="Views\Appointments\Detail.cshtml" />
|
||||||
|
<Content Include="Views\Appointments\Review.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="App_Data\upload_images\" />
|
<Folder Include="App_Data\upload_images\" />
|
||||||
|
|
66
FIT5032-Assignment/Views/Appointments/Review.cshtml
Normal file
66
FIT5032-Assignment/Views/Appointments/Review.cshtml
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
|
||||||
|
@{
|
||||||
|
ViewBag.Title = "Review";
|
||||||
|
Layout = "~/Views/Shared/_Layout.cshtml";
|
||||||
|
}
|
||||||
|
|
||||||
|
<h2>Rate the experience</h2>
|
||||||
|
|
||||||
|
@if (ViewBag.role == 1) {
|
||||||
|
<p>You are about to review the Doctor <b>@ViewBag.doctorUser.displayName</b></p>
|
||||||
|
<form method="post">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="score">How about your experience?</label>
|
||||||
|
<input type="hidden" id="score" name="score" required />
|
||||||
|
<button class="btn btn-light" id="btn-good" onClick="rate(1)" type="button">
|
||||||
|
<span class="material-symbols-outlined">
|
||||||
|
thumb_up
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
<button class="btn btn-light" id="btn-bad" onClick="rate(0)" type="button">
|
||||||
|
<span class="material-symbols-outlined">
|
||||||
|
thumb_down
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="comment">Leave your comment</label>
|
||||||
|
<div class='input-group'>
|
||||||
|
<textarea id="comment" class="form-control" name="comment" ></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button class="btn btn-primary" type="submit">Submit</button>
|
||||||
|
</form>
|
||||||
|
}
|
||||||
|
|
||||||
|
@section Scripts {
|
||||||
|
@Styles.Render("https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200")
|
||||||
|
<style>
|
||||||
|
.material-symbols-outlined {
|
||||||
|
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24
|
||||||
|
}
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
function rate(score) {
|
||||||
|
$("#score").val(score)
|
||||||
|
if (score == 1) {
|
||||||
|
$("#btn-good").removeClass("btn-light")
|
||||||
|
$("#btn-good").addClass("btn-success")
|
||||||
|
$("#btn-bad").removeClass("btn-danger")
|
||||||
|
$("#btn-bad").addClass("btn-light")
|
||||||
|
} else {
|
||||||
|
$("#btn-good").removeClass("btn-success")
|
||||||
|
$("#btn-good").addClass("btn-light")
|
||||||
|
$("#btn-bad").removeClass("btn-light")
|
||||||
|
$("#btn-bad").addClass("btn-danger")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (@ViewBag.reviewAvailable === "True") {
|
||||||
|
alert("Review available")
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user