This commit is contained in:
DawitG96
2019-02-01 01:52:06 +01:00
parent 1c0176c72b
commit 64593ee4e4
20 changed files with 785 additions and 309 deletions

2
.gitignore vendored
View File

@@ -263,3 +263,5 @@ __pycache__/
SeniorAssistant/SeniorAssistant/wwwroot/* SeniorAssistant/SeniorAssistant/wwwroot/*
/SeniorAssistant/Controllers/TestController.cs /SeniorAssistant/Controllers/TestController.cs
/SeniorAssistant/Views/Test/* /SeniorAssistant/Views/Test/*
/SeniorAssistant/Views/Home/Calendar.cshtml
/SeniorAssistant/Views/Home/Calendar.cshtml.cs

View File

@@ -94,12 +94,12 @@ namespace IdentityDemo.Controllers
}; };
return await _login(user.Username, user.Password); return await _login(user.Username, user.Password);
} }
catch catch (Exception e)
{ {
return Json(new JsonResponse() return Json(new JsonResponse()
{ {
Success = false, Success = false,
Message = UsernameDupl Message = e.Message
}); });
} }
} }

View File

@@ -86,16 +86,22 @@ namespace SeniorAssistant.Controllers
[Route("Forgot")] [Route("Forgot")]
public IActionResult Forgot(string username = "") public IActionResult Forgot(string username = "")
{ {
if (IsLogged())
{
return RedirectToAction("Profile", "Home", GetUser(HttpContext.Session.GetString(Username)));
}
var forgot = Db.Forgot.Where(f => f.Username.Equals(username)).FirstOrDefault(); var forgot = Db.Forgot.Where(f => f.Username.Equals(username)).FirstOrDefault();
return CheckUnAuthorized("Forgot", forgot); if (forgot == null)
return View("Login", "Utente non esiste");
return View("Forgot", forgot);
} }
protected IActionResult CheckAuthorized(string view, object model = null) protected IActionResult CheckAuthorized(string view, object model = null)
{ {
if (!IsLogged()) if (!IsLogged())
{ {
view = "Login"; return RedirectToAction("Login", "Home", "/" + view);
model = "/" + view;
} }
return View(view, model); return View(view, model);
} }
@@ -104,8 +110,7 @@ namespace SeniorAssistant.Controllers
{ {
if (IsLogged()) if (IsLogged())
{ {
view = "Profile"; return RedirectToAction("Profile", "Home", GetUser(HttpContext.Session.GetString(Username)));
model = GetUser(HttpContext.Session.GetString(Username));
} }
return View(view, model); return View(view, model);
} }

View File

@@ -149,11 +149,11 @@ namespace SeniorAssistant
List<Doctor> docs = db.Doctors.ToListAsync().Result; List<Doctor> docs = db.Doctors.ToListAsync().Result;
if (docs.Count == 0) if (docs.Count == 0)
{ {
users.Add(new User { Name = "Alfredo", LastName = "Parise", Email = "alfred.pary@libero.it", Username = "alfredigno", Password = "alfy" }); users.Add(new User { Name = "Alfredo", LastName = "Parise", Email = "alfred.pary@libero.it", Username = "alfredigno", Password = "alfy", Avatar = "/uploads/default.jpg" });
users.Add(new User { Name = "Edoardo", LastName = "Marzio", Email = "edo.marzio@libero.it", Username = "marzietto", Password = "edo64" }); users.Add(new User { Name = "Edoardo", LastName = "Marzio", Email = "edo.marzio@libero.it", Username = "marzietto", Password = "edo64", Avatar = "/uploads/default.jpg" });
docs.Add(new Doctor { Username = "alfredigno", Location = "Brasile" }); docs.Add(new Doctor { Username = "alfredigno", Location = "Brasile", PhoneNumber = "+0 123456789" });
docs.Add(new Doctor { Username = "marzietto", Location = "Uganda" }); docs.Add(new Doctor { Username = "marzietto", Location = "Uganda", PhoneNumber = "+9 87654321" });
foreach (var doc in docs) foreach (var doc in docs)
db.InsertOrReplace(doc); db.InsertOrReplace(doc);
@@ -169,7 +169,7 @@ namespace SeniorAssistant
for (count=0; count<names.Length; count++) for (count=0; count<names.Length; count++)
{ {
var username = baseUsername + count; var username = baseUsername + count;
users.Add(new User { Name = names[count], LastName = lastnames[count], Username = username, Password = username, Email = username + "@email.st" }); users.Add(new User { Name = names[count], LastName = lastnames[count], Username = username, Password = username, Email = username + "@email.st", Avatar = "/uploads/default.jpg" });
patients.Add(new Patient { Username = username, Doctor = docs[rnd.Next(docs.Count)].Username }); patients.Add(new Patient { Username = username, Doctor = docs[rnd.Next(docs.Count)].Username });
} }

View File

@@ -1,11 +1,30 @@
@model Forgot @model Forgot
<p>Se indovini la risposta allora verrai loggato. Li poi potrai modificare la password.</p> <div class="col-md-4"></div>
<label>Domanda di sicurezza: </label><p>@Model.Question</p> <div class="col-md-4">
<label>Risposta: </label><input id="answer" type="text" placeholder="Risposta"/> <div class="box box-info">
<p id="error"></p> <div class="box-header with-border">
<button id="send-answ">Invia</button> <h3 class="box-title">Accesso tramite domanda di sicurezza</h3>
</div>
<div class="form-horizontal">
<div class="box-body">
<p>Se indovini la risposta allora verrai loggato. Li poi potrai modificare la password.</p>
<div>
<p class="">Domanda di sicurezza: <strong>@Model.Question</strong> </p>
<label>Risposta: </label>
<input id="answer" type="text" placeholder="Risposta" />
<input type="button" class="btn btn-default" id="send-answ" value="Invia" />
</div>
<p id="error" class="login-box-msg text-red"></p>
</div>
<div class="box-footer">
<button type="button" class="btn btn-info">@Html.ActionLink("Torna al login", "Login")</button>
</div>
</div>
</div>
</div>
<div class="col-md-4"></div>
<script> <script>
$("#send-answ").on("click", function () { $("#send-answ").on("click", function () {
var answer = $("#answer").val(); var answer = $("#answer").val();

View File

@@ -1,36 +1,76 @@
@model string @model string
<div class="content"> @if (Model != null)
@if (Model != null) {
var m = Model;
if (Model.StartsWith("/"))
{ {
<p class="text-red box-title">Per poter accedere alla pagina [@Model] e' necessario essere loggati</p> m = "Per poter accedere alla pagina[" + Model + "] e' necessario essere loggati";
} }
<ul style="list-style-type:none"> <div class="col-md-4"></div>
<li class="user-header"> <p class="text-red box-title">@m</p>
<input type="text" id="username" placeholder="username" /> }
<input type="password" id="password" placeholder="password" />
<div>
<button class="btn-default btn btn-flat" id="login-btn">Login</button>
</div>
<p id="msg" class="login-box-msg"></p>
</li>
</ul>
<button id="forgot">Dimanticato la passw?</button>
<form id="div-forgot" style="display:none" action="/Forgot" method="get">
<label>Username</label><input name="username" type="text" />
<input type="submit" id="ok-forgot" value="OK" />
</form>
@Html.ActionLink("Oppure registrati", "Register") <div class="col-md-4"></div>
<div class="col-md-4">
<!-- Login Form -->
<div class="box box-info">
<div class="box-header with-border">
<h3 class="box-title">Login</h3>
</div>
<!-- /.box-header -->
<!-- form start -->
<div class="form-horizontal">
<div class="box-body">
<div class="form-group">
<label class="col-sm-2 control-label">Username</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="username" placeholder="Username" />
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="password" placeholder="Password" />
</div>
</div>
</div>
<!-- /.box-body -->
<div class="box-footer">
<input type="reset" class="btn btn-default" value="Svuota" />
<input type="submit" class="btn btn-info pull-right" id="login-btn" value="Login" />
<p id="msg" class="login-box-msg"></p>
</div>
<!-- /.box-footer -->
</div>
<div class="box-footer">
<button type="button" id="forgot" class="btn btn-default">Passsword dimenticata</button>
<button type="button" class="btn btn-info pull-right">@Html.ActionLink("Registrati", "Register")</button>
<br />
<form id="div-forgot" style="display:none" action="/Forgot" method="get">
<div class="box-body">
<div class="form-group">
<label class="col-sm-2 control-label">Username</label>
<div class="col-sm-10">
<input type="text" class="form-control" name="username"><br />
<input class="btn btn-default" type="submit" id="ok-forgot" value="Recupera password" />
</div>
</div>
</div>
</form>
</div>
</div>
<!-- /.box -->
</div> </div>
<div class="col-md-4"></div>
<script> <script>
$("#forgot").on("click", function () { $("#forgot").on("click", function () {
$("#div-forgot").css("display", "block"); $("#div-forgot").toggle();
});
$("#ok-forgot").on("click", function () {
$("#div-forgot").css("display", "block");
}); });
$("#login-btn").on("click", function () { $("#login-btn").on("click", function () {

View File

@@ -5,7 +5,8 @@
@{ @{
ViewBag.Title = "Hello Razor"; ViewBag.Title = "Hello Razor";
string username = HttpContextAccessor.HttpContext.Session.GetString("username"); var session = HttpContextAccessor.HttpContext.Session;
var username = session.GetString("username");
var db = dbFactory.Create(); var db = dbFactory.Create();
var MaxMessages = 20; var MaxMessages = 20;
var messages = (from m in db.Messages var messages = (from m in db.Messages
@@ -16,45 +17,90 @@
} }
<div class="content"> <div class="content">
@if (messages.Count() == 0) <div class="row">
{ <div class="col-md-12">
<p class="text-red">Non hai messaggi</p> <div class="box box-primary direct-chat direct-chat-primary">
} <div class="box-header with-border">
else <h3 class="box-title">Messaggi con @Model.Name @Model.LastName</h3>
{ </div>
<h3 class="text-bold">Messaggi con @Model.Name @Model.LastName</h3> <div class="box-body">
<!-- Conversations are loaded here -->
foreach (var message in messages) <div class="direct-chat-messages">
{ @if (messages.Count() == 0)
if (message.Seen == default && message.Receiver.Equals(username)) {
{ <p class="text-red">Non hai messaggi</p>
message.Seen = DateTime.Now; }
db.Update(message); else
} {
<div> foreach (var message in messages)
@if (message.Receiver.Equals(username)) {
{ if (message.Seen == default && message.Receiver.Equals(username))
<div class="pull-left"></div> {
<div class="pull-right-container bg-light-blue"> message.Seen = DateTime.Now;
<span style="white-space: pre-line" class="">@message.Body</span> db.Update(message);
<p class="text-aqua">@message.Seen</p> }
<div>
@if (message.Receiver.Equals(username))
{
<!-- Message. Default to the left -->
<div class="row">
<div class="pull-left direct-chat-msg col-md-6">
<div class="direct-chat-info clearfix">
<span class="direct-chat-name pull-left">@Model.LastName</span>
<span class="direct-chat-timestamp pull-right">@message.Time</span>
</div>
<!-- /.direct-chat-info -->
<img class="direct-chat-img" src="@Model.Avatar" alt="User image">
<div class="direct-chat-text">
@message.Body
</div>
<!-- /.direct-chat-text -->
</div>
</div>
}
else
{
<!-- Message to the right -->
<div class="row">
<div class="pull-right direct-chat-msg right col-md-6">
<div class="direct-chat-info clearfix">
<span class="direct-chat-name pull-right">Tu</span>
<span class="direct-chat-timestamp pull-left">@message.Time</span>
</div>
<!-- /.direct-chat-info -->
<img class="direct-chat-img" src="@session.GetString("avatar")" alt="User image">
<div class="direct-chat-text">
@message.Body
</div>
<!-- /.direct-chat-text -->
</div>
</div>
}
</div>
}
}
</div> </div>
} </div>
else <!-- /.box-body -->
{ <div class="box-footer">
<div class="pull-right-container bg-green-gradient"> <form action="#" method="post">
<div style="white-space: pre-line" class="">@message.Body</div> <div class="input-group">
<p class="text-aqua">@message.Seen</p> <input type="text"id="res-message" name="message" placeholder="Scrivi un messaggio..." class="form-control">
</div> <span class="input-group-btn">
<div class="pull-right"></div> <button type="submit" id="btn-send-message" class="btn btn-primary btn-flat">Spedisci</button>
} </span>
</div>
<p id="message-error" class="text-red"></p>
</form>
</div>
<!-- /.box-footer-->
</div> </div>
} <!--/.direct-chat -->
} </div>
<div class="pull-right"> </div>
<textarea id="res-message" class="progress-text" placeholder="Scrivi qui per scrivere un messaggio"></textarea>
<button id="btn-send-message">Invia</button> <div class="pull-right col-md-4">
<p id="message-error" class="text-red"></p>
</div> </div>
<script> <script>
$("#btn-send-message").on("click", function () { $("#btn-send-message").on("click", function () {

View File

@@ -2,132 +2,321 @@
@inject IDataContextFactory<SeniorDataContext> dbFactory @inject IDataContextFactory<SeniorDataContext> dbFactory
@model User @model User
<div class="content"> <section class="content">
<div class="pull-left" , style="width: 50%"> <div class="row">
<h2 class="alert-success" style="text-align:center"> <div class="col-md-1"></div>
Welcome @Model.Name @Model.LastName <div class="col-md-4">
</h2> <div class="box box-info bg-gray-light" style="border-top-color: darkgray">
name: @Model.Name<br /> <div class="box-header with-border">
lastname: @Model.LastName<br /> <h3 class="box-title">Dati utente</h3>
email: @Model.Email<br /> </div>
</div> <!-- /.box-header -->
<!-- form start -->
<section class="form-horizontal">
<div class="box-body">
<div class="form-group">
<div class="col-sm-10">
<input class="mod-data hide" type="text" value="@Model.Name" id="mod-name" />
<input class="old-data" disabled type="text" value="@Model.Name" /><br />
</div>
</div>
<div class="box pull-right" , style="width: 45%"> <div class="form-group">
@if (Model.IsPatient()) // is patient and has doc, must show doc data <div class="col-sm-10">
{ <input class="mod-data hide" type="text" value="@Model.LastName" id="mod-last" />
var db = dbFactory.Create(); <input class="old-data" disabled type="text" value="@Model.LastName" /><br />
var doctor = (from u in db.Users </div>
join d in db.Doctors on u.Username equals d.Username </div>
where d.Username.Equals(Model.Pat.Doctor)
select new { u.Username, u.Name, u.LastName, d.Location }).ToArray().First();
<p class="text-bold">Dottore: @doctor.Name @doctor.LastName</p> <div class="form-group">
<p class="text-fuchsia">Dove mi puoi trovare? @doctor.Location</p> <div class="col-sm-10">
<textarea class="progress-text" placeholder="Nessuna nuova nota" readonly>@Model.Pat.Notes</textarea> <input class="mod-data hide" type="email" value="@Model.Email" id="mod-email" />
<input class="old-data" disabled type="email" value="@Model.Email" /><br />
<a class="" href="/Message/@doctor.Username">Invia un messaggio al tuo dottore</a> </div>
} </div>
else
{
var db = dbFactory.Create();
dynamic[] data;
Type type = null;
string title = null;
var docData = db.Doctors.Where(d => d.Username.Equals(Model.Username)).ToArray().FirstOrDefault();
if (docData != null) // is DOC @if (Model.IsDoctor())
{
<div class="form-group">
<div class="col-sm-10">
<input class="mod-data hide" type="text" value="@Model.Doc.PhoneNumber" id="mod-phone" />
<input class="old-data" disabled type="text" value="@Model.Doc.PhoneNumber" /><br />
</div>
</div>
<div class="form-group">
<div class="col-sm-10">
<input class="mod-data hide" type="text" value="@Model.Doc.Schedule" id="mod-schedule" />
<input class="old-data" disabled type="number" value="@Model.Doc.Schedule" /><br />
</div>
</div>
}
<div class="form-group">
<div class="col-sm-10">
<input type="text" value="@Model.Username" disabled /><br />
</div>
</div>
<div class="form-group">
<div class="col-sm-10">
<input class="mod-data hide" type="password" id="mod-pass1" placeholder="Nuova password" /><br />
</div>
</div>
<div class="form-group">
<div class="col-sm-10">
<input class="mod-data hide" type="password" id="mod-pass2" placeholder="Conferma password" /><br />
</div>
</div>
<div class="form-group">
<div class="col-sm-10">
<div id="image-uploader" style="display:none">
<form method="post" enctype="multipart/form-data">
<span>Cambia immagine profilo</span>
<input type="file" name="files" id="files" />
</form>
</div>
</div>
</div>
</div>
</section>
<div class="box-footer">
<p id="msg">Lasciare i campi vuoti per non modificare</p>
<input type="button" class="btn btn-default" value="Premere per modificare" id="btn-mod" />
<input class="btn btn-info pull-right" type="button" id="update-user" value="Aggiorna" style="display: none" />
</div>
</div>
</div>
<div class="col-md-6">
@if (Model.IsPatient()) // is patient and has doc, must show doc data
{ {
// see all the patient of the doc var db = dbFactory.Create();
title = "Lista dei pazienti"; var doctor = (from u in db.Users
var patients = (from u in db.Users join d in db.Doctors on u.Username equals d.Username
join p in db.Patients on u.Username equals p.Username where d.Username.Equals(Model.Pat.Doctor)
where p.Doctor.Equals(docData.Username) select new { u.Username, u.Name, u.LastName, d.Location }).ToArray().First();
select new { u.Username, u.Name, u.LastName, p.Notes, Profile = "<a href=\\\"/user/" + u.Username + "\\\">Profile</a>" }).ToArray();
data = patients; <div class="box box-warning">
type = patients.FirstOrDefault()?.GetType(); <div class="box-header with-border">
<h3 class="box-title">Contatti con il dottore: <strong>@doctor.Name @doctor.LastName</strong></h3>
</div>
<!-- /.box-header -->
<div class="box-body">
<div role="form">
<div class="form-group">
<h5 class="box-comment">Indirizzo dello studio: <strong>@doctor.Location</strong></h5>
</div>
<div class="form-group">
<h5>Recapito telefonico: <strong>+0 00000000 <!--doctor.PhoneNumber --></strong></h5>
</div>
<div class="form-group">
<div class="input-group-btn input-group-sm">
<a href="#" id="show-schedule" class="btn btn-default">Mostra orari visite</a>
</div>
</div>
<div class="form-group hide" id="tab-schedule">
<div class="business-hours">
<h2 class="title">Orari visite</h2>
<ul class="list-unstyled opening-hours">
<li>Sunday <span class="pull-right">Closed</span></li>
<li>Monday <span class="pull-right">9:00-22:00</span></li>
<li>Tuesday <span class="pull-right">9:00-22:00</span></li>
<li>Wednesday <span class="pull-right">9:00-22:00</span></li>
<li>Thursday <span class="pull-right">9:00-22:00</span></li>
<li>Friday <span class="pull-right">9:00-23:30</span></li>
<li>Saturday <span class="pull-right">14:00-23:30</span></li>
</ul>
</div>
</div>
<div class="form-group">
<label>Note da parte del dottore:</label>
<p class="form-control" placeholder="Nessuna nuova nota" style="height:50px">@Model.Pat.Notes</p>
<div class="input-group-btn input-group-sm">
<a href="/Message/@doctor.Username" class="btn btn-flat btn-info">Scrivi un messaggio</a>
</div>
</div>
</div>
</div>
<!-- /.box-body -->
</div>
} }
else // is a patient and need to choose a doctor else
{ {
// choose which doc you want var db = dbFactory.Create();
title = "Scegli un Doc"; dynamic[] data;
var docs = (from u in db.Users Type type = null;
join d in db.Doctors on u.Username equals d.Username string title = null;
select new { u.Username, u.Name, u.LastName, d.Location, Choose = "<a id=\\\"choose-" + u.Username + "\\\" href=#>Scegli</a>" }).ToArray(); var docData = db.Doctors.Where(d => d.Username.Equals(Model.Username)).ToArray().FirstOrDefault();
data = docs;
type = docs.FirstOrDefault().GetType();
}
if (type != null) if (docData != null) // is DOC
{
var fields = new List<string>();
foreach (var field in type.GetProperties())
{ {
fields.Add(field.Name); // see all the patient of the doc
title = "Lista dei pazienti";
var patients = (from u in db.Users
join p in db.Patients on u.Username equals p.Username
where p.Doctor.Equals(docData.Username)
select new { u.Username, u.Name, u.LastName, p.Notes, Profile = "<a href=\\\"/user/" + u.Username + "\\\">Visita profilo</a>" }).ToArray();
data = patients;
type = patients.FirstOrDefault()?.GetType();
}
else // is a patient and need to choose a doctor
{
// choose which doc you want
title = "Scegli un Doc";
var docs = (from u in db.Users
join d in db.Doctors on u.Username equals d.Username
select new { u.Username, u.Name, u.LastName, d.Location, Choose = "<a id=\\\"choose-" + u.Username + "\\\" href=#>Scegli</a>" }).ToArray();
data = docs;
type = docs.FirstOrDefault().GetType();
} }
<p>@title</p> if (type != null)
<div id="var-table"></div> {
<script>
var datas = [
@foreach (var el in data)
{
@:{
@foreach (var field in fields)
{
@field@:: "@Html.Raw(type.GetProperty(field).GetValue(el, null))",
}
@:},
}
];
$(document).ready(function () { var fields = new List<string>();
$("#var-table").kendoGrid({
dataSource: { foreach (var field in type.GetProperties())
data: datas, {
schema: { fields.Add(field.Name);
model: { }
fields: {
@foreach (var field in fields) <p>@title</p>
{ <div id="var-table"></div>
@field@: : { type: "@field.GetType().Name" }, <script>
var datas = [
@foreach (var el in data)
{
@:{
@foreach (var field in fields)
{
@field@:: "@Html.Raw(type.GetProperty(field).GetValue(el, null))",
}
@:},
}
];
$(document).ready(function () {
$("#var-table").kendoGrid({
dataSource: {
data: datas,
schema: {
model: {
fields: {
@foreach (var field in fields)
{
@field@: : { type: "@field.GetType().Name" },
}
} }
} }
} }
} },
}, scrollable: true,
scrollable: true, sortable: true,
sortable: true, filterable: true,
filterable: true, columns: [
columns: [ @foreach (var field in fields)
@foreach (var field in fields) {
{ @:{ field: "@field", title: "@field", template: "#=@field#" },
@:{ field: "@field", title: "@field", template: "#=@field#" },
}
]
});
@if(docData == null) // choose a doc
{
<text>
$('[id^="choose-"]').on("click", function () {
var id = this.id.replace("choose-", '');
$.ajax({
type: "POST",
url: "/Account/_addDoc",
data: { doctor: id },
success: function (data) {
if (data.success) {
window.location.reload();
}
} }
]
});
@if (docData == null) // choose a doc
{
<text>
$('[id^="choose-"]').on("click", function () {
var id = this.id.replace("choose-", '');
$.ajax({
type: "POST",
url: "/Account/_addDoc",
data: { doctor: id },
success: function (data) {
if (data.success) {
window.location.reload();
}
}
})
}) })
}) </text>
</text> }
} });
}); </script>
</script> }
} }
} </div>
</div> </div>
</div> </section>
<script>
$(document).ready(function () {
$(".opening-hours li").eq(new Date().getDay()).addClass("today");
});
$("#show-schedule").on("click", function () {
$("#tab-schedule").toggleClass("hide");
});
$("#files").kendoUpload({
async: {
saveUrl: "/Account/_save",
autoUpload: true
},
success: function (data) {
if (data.response.success)
window.location.reload();
else
console.log(data.response.message);
}
});
$("#btn-mod").on("click", function () {
$(".mod-data").toggleClass("hide");
$(".old-data").toggleClass("hide");
$("#image-uploader").toggle();
$("#update-user").toggle();
});
$("#update-user").on("click", function () {
var name = $("#mod-name").val();
var lastname = $("#mod-last").val();
var password = $("#mod-pass1").val();
var password2 = $("#mod-pass2").val();
var email = $("#mod-email").val();
var schedule = $("#mod-schedule").val();
var phone = $("#mod-phone").val();
if (password != password2) {
$("#msg-reg").html("[Le password non coincidono]").show();
return false;
}
$.ajax({
url: "/Account/_modify",
data: {
User: {
Username: "@Model.Username",
Name: name,
Lastname: lastname,
Password: password,
Email: email,
Schedule: schedule,
PhoneNumber: phone
}
},
dataType: "json",
type: "POST",
success: function (data) {
var msg = $("#msg-reg");
if (data.success) {
window.location.reload();
} else {
msg.html(data.message).show();
}
}
})
});
</script>

View File

@@ -1,21 +1,91 @@
<ul style="list-style: none"> <div class="col-md-4"></div>
<li class="user-header"> <div class="col-md-4">
<input type="text" id="regUsername" placeholder="Username" required /> <!-- Register Form -->
<input type="text" id="regName" placeholder="Name" /> <div class="box box-info">
<input type="text" id="regLastname" placeholder="Lastname" /> <div class="box-header with-border">
<input type="password" id="regPassword" placeholder="Password" required /> <h3 class="box-title">Registrazione</h3>
<input type="email" id="regEmail" placeholder="Email" required />
<input type="text" id="regDoctor" placeholder="Doctor only (543210)" />
<input type="text" id="passwQues" placeholder="Domanda di sicurezza" required />
<input type="text" id="passwAnsw" placeholder="Risposta di sicurezza" required />
<div>
<button class="btn-default btn btn-flat" id="register-btn">Register</button>
</div> </div>
<p id="msg-reg" class="login-box-msg"></p> <!-- /.box-header -->
</li> <!-- form start -->
</ul> <div class="form-horizontal">
<div class="box-body">
<div class="form-group">
<label class="col-sm-3 control-label">Username</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="regUsername" placeholder="Username" required />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Name</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="regName" placeholder="Name" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Last name</label>
<div class="col-sm-8">
<input class="form-control" type="text" id="regLastname" placeholder="Lastname" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Password</label>
<div class="col-sm-8">
<input class="form-control" type="password" id="regPassword" placeholder="Password" required />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Conferma password</label>
<div class="col-sm-8">
<input class="form-control" type="password" id="regPassword2" placeholder="Password" required />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">E-mail</label>
<div class="col-sm-8">
<input class="form-control" type="email" id="regEmail" placeholder="Email" required />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Code Doctor</label>
<div class="col-sm-8">
<input class="form-control" type="text" id="regDoctor" placeholder="(54328)" />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Domanda di sicurezza</label>
<div class="col-sm-8">
<input class="form-control" type="text" id="passwQues" placeholder="Domanda di sicurezza" required />
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">Risposta di sicurezza</label>
<div class="col-sm-8">
<input class="form-control" type="text" id="passwAnsw" placeholder="Risposta di sicurezza" required />
</div>
</div>
</div>
<!-- /.box-body -->
<div class="box-footer">
<input type="reset" class="btn btn-default" />
<button class="btn btn-info pull-right" id="register-btn">Register</button>
<p id="msg-reg" class="login-box-msg text-red"></p>
<button type="button" class="btn btn-info">@Html.ActionLink("Torna al login", "Login")</button>
</div>
<!-- /.box-footer -->
</div>
</div>
<!-- /.box -->
</div>
<div class="col-md-4"></div>
@Html.ActionLink("Oppure fai il login", "Login")
<script> <script>
$("#register-btn").on("click", function () { $("#register-btn").on("click", function () {
@@ -23,12 +93,18 @@
var name = $("#regName").val(); var name = $("#regName").val();
var lastname = $("#regLastname").val(); var lastname = $("#regLastname").val();
var password = $("#regPassword").val(); var password = $("#regPassword").val();
var password2 = $("#regPassword2").val();
var email = $("#regEmail").val(); var email = $("#regEmail").val();
var code = $("#regDoctor").val(); var code = $("#regDoctor").val();
var quest = $("#passwQues").val(); var quest = $("#passwQues").val();
var answ = $("#passwAnsw").val(); var answ = $("#passwAnsw").val();
if (password != password2) {
$("#msg-reg").html("[Le password non coincidono]").show();
return false;
}
$.ajax({ $.ajax({
url: "/Account/_register", url: "/Account/_register",
data: { data: {
@@ -54,9 +130,6 @@
} else { } else {
msg.html(data.message).show(); msg.html(data.message).show();
} }
},
error: function (xhr, status, error) {
alert(error)
} }
}) })
}); });

View File

@@ -20,75 +20,137 @@
else else
{ {
<div> <div>
<input id="hours-data" type="text" placeholder="hours" value="24" /> <div class="col-md-3">
<button id="refresh-hours" class="fc-button">Cambia ora</button> <div class="form-group">
<div class="input-group">
<input id="hours-data" type="text" placeholder="hours" value="24" class="form-control timepicker" />
<input id="date-from" type="date" value="@HttpContextAccessor.HttpContext.Request.Query["from"]" /> <div class="input-group-addon">
<input id="date-to" type="date" value="@HttpContextAccessor.HttpContext.Request.Query["to"]" /> <input type="button" value="Cambia ora" class="no-border" id="refresh-hours">
<button id="refresh-date" class="fc-button">Cambia data</button> </div>
</div>
<!-- /.input group -->
<label>Mostra dati sottoforma tabella</label>
<input type="checkbox" id="show-table" />
<div id="chart-data"></div> </div>
<div id="grid"></div> <!-- /.form group -->
</div>
<div class="col-md-1"></div>
<div class="col-md-6">
<!-- Date range -->
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">
<i class="fa fa-calendar"></i>
</div>
<input id="date-from" type="date" value="@HttpContextAccessor.HttpContext.Request.Query["from"]" />
<input id="date-to" type="date" value="@HttpContextAccessor.HttpContext.Request.Query["to"]" />
<input type="button" id="refresh-date" class="fc-button no-border" value="Cambia data" />
</div>
<!-- /.input group -->
</div>
<!-- /.form group -->
</div>
@if (isDoc)
{
<div class="form-group">
<form action="" method="get" onsubmit="return confirm('Sicuro di voler rimuovere il paziente?');">
<button type="submit" name="removePatient" class="btn btn-default" value="@Model.Username">Rimuovi paziente</button>
</form>
</div>
}
</div> </div>
@if (isDoc) <div class="row"></div>
{ <div class="row">
<form action="" method="get" onsubmit="return confirm('Sicuro di voler rimuovere il paziente?');"> <div class="col-md-12">
<button type="submit" name="removePatient" class="btn flat-btn" value="@Model.Username">Rimuovi paziente</button> @if (isDoc)
</form> {
<div> <div class="form-group col-md-3">
<textarea id="note-area" placeholder="Scrivi una nota..">@Model.Pat.Notes</textarea> <label>Scrivi una nota per il paziente</label>
<button id="send-note" class="btn">Salva</button> <textarea id="note-area" placeholder="Scrivi una nota.." class="form-control" rows="2">@Model.Pat.Notes</textarea>
<p id="note-error"></p> <button id="send-note" class="btn">Salva</button>
</div> <p id="note-error"></p>
<a class="" href="/Message/@Model.Pat.Username">Invia un messaggio al tuo paziente</a> </div>
<div> <div class="col-md-1"></div>
<p>Inserisci un minimo o massimo valore per il battito cardiaco</p>
<p>Se il valore del battito del paziente supera i valori che hai inserito verrai notificato</p>
<label>Max:</label>
<input id="maxHeart" placeholder="max" value="@Model.Pat.MaxHeart" />
<label>Min:</label>
<input id="minHeart" placeholder="min" value="@Model.Pat.MinHeart" />
</div>
<script>
$("#send-note").on("click", function () {
var text = $("#note-area").val().trim();
$.ajax({
url: "/Account/_addNote",
type: "PUT",
data: {
Patient: "@Model.Username", Text: text
},
success: function (data) {
$("#note-error").html(data.success ? "Nota salvata" : data.message);
}
});
});
$("#maxHeart, #minHeart").on("change keyup paste click", function () {
onlyNum($(this));
});
$("#maxHeart, #minHeart").on("blur", function () {
var value = parseInt($(this).val());
var id = $(this).attr("id");
$.ajax({
url: "/Account/_" + id + "ToPatient",
type: "PUT",
data: {
Patient: "@Model.Username",
Value: value
}
});
});
</script>
}
<div class="form-group col-md-5">
<label>Inserisci un minimo o massimo valore per il battito cardiaco</label>
<p>Se il valore del battito del paziente supera i valori che hai inserito verrai notificato</p>
<div class="form-group col-md-5">
<label>Max:</label>
<input id="maxHeart" placeholder="max" value="@Model.Pat.MaxHeart" class="form-control" />
</div>
<div class="form-group col-md-5">
<label>Min:</label>
<input id="minHeart" placeholder="min" value="@Model.Pat.MinHeart" class="form-control" />
</div>
</div>
<div class="col-md-1"></div>
<div class="form-group">
<div class="input-group-btn input-group-sm">
<a href="/Message/@Model.Pat.Username" class="btn btn-flat btn-info">Scrivi a @Model.Name </a>
</div>
</div>
<script>
$("#send-note").on("click", function () {
var text = $("#note-area").val().trim();
$.ajax({
url: "/Account/_addNote",
type: "PUT",
data: {
Patient: "@Model.Username", Text: text
},
success: function (data) {
$("#note-error").html(data.success ? "Nota salvata" : data.message);
}
});
});
$("#maxHeart, #minHeart").on("change keyup paste click", function () {
onlyNum($(this));
});
$("#maxHeart, #minHeart").on("blur", function () {
var value = parseInt($(this).val());
var id = $(this).attr("id");
$.ajax({
url: "/Account/_" + id + "ToPatient",
type: "PUT",
data: {
Patient: "@Model.Username",
Value: value
}
});
});
</script>
}
</div>
</div>
<div class="form-group">
<label>
<input type="checkbox" id="show-table">
Mostra dati sottoforma tabella
</label>
</div>
<div id="chart-data"></div>
<script> <script>
$(function () {
$('#reservation').daterangepicker();
$('#datepicker').datepicker({
autoclose: true
});
});
function onlyNum(object, numChar = 3) { function onlyNum(object, numChar = 3) {
object.val(object.val().replace(/[^0-9]/g, '').substring(0, numChar)); object.val(object.val().replace(/[^0-9]/g, '').substring(0, numChar));
} }
$("#show-table").on("click", function () {
$("#refresh-hours").click();
});
$("#hours-data").on("change keyup paste click", function () { $("#hours-data").on("change keyup paste click", function () {
onlyNum($(this), 2); onlyNum($(this), 2);
}); });
@@ -121,13 +183,15 @@ else
sleepArr.push({ "time": new Date(base_time + i), "value": 1 }); sleepArr.push({ "time": new Date(base_time + i), "value": 1 });
} }
}); });
if (Object.keys(heartbeat).length == 0 if (Object.keys(heartbeat).length == 0
&& Object.keys(steps).length == 0 && Object.keys(steps).length == 0
&& Object.keys(sleep).length == 0) && Object.keys(sleep).length == 0)
$("#chart-data").html("Nessun dato"); $("#chart-data").html("Nessun dato");
else { else {
$("#chart-data").html(""); $("#chart-data").html("");
if (sleepArr.length == 0)
sleepArr.push({ "time": heartbeat[0].time, "value": false });
var minDate = Math.min( var minDate = Math.min(
new Date(heartbeat[0].time).getTime(), new Date(heartbeat[0].time).getTime(),
@@ -140,7 +204,7 @@ else
new Date(steps[steps.length - 1].time).getTime(), new Date(steps[steps.length - 1].time).getTime(),
new Date(sleepArr[sleepArr.length -1].time).getTime() new Date(sleepArr[sleepArr.length -1].time).getTime()
); );
var allData = []; var allData = [];
for (var delta = 60 * 60 * 1000; minDate < maxDate; minDate += delta) { for (var delta = 60 * 60 * 1000; minDate < maxDate; minDate += delta) {

View File

@@ -4,7 +4,7 @@
} }
<div class="breadcrumb"> <div class="breadcrumb">
@Html.ActionLink("Home", "Index", "Home") @Html.ActionLink("Home", "Profile", "Home")
@if (controller != "Home") @if (controller != "Home")
{ {
@:> @Html.ActionLink(controller, "Index", controller) @:> @Html.ActionLink(controller, "Index", controller)

View File

@@ -15,18 +15,6 @@
<!-- The user image in the menu --> <!-- The user image in the menu -->
<li class="user-header"> <li class="user-header">
<img src="@session.GetString("avatar")" class="img-circle" alt="User Image" id="avatar"> <img src="@session.GetString("avatar")" class="img-circle" alt="User Image" id="avatar">
<div>
<input type="button" class="btn-flat" value="+" id="btn-plus" />
</div>
<!--<div id="image-uploader" style="display:none">
<input name="files" id="files" type="file" />
</div>-->
<div id="image-uploader" style="display:none">
<form method="post" enctype="multipart/form-data">
<input type="file" name="files" id="files" />
</form>
</div>
<p> <p>
@session.GetString("name") @session.GetString("lastname") - @session.GetString("role") @session.GetString("name") @session.GetString("lastname") - @session.GetString("role")
<small>@session.GetString("email")</small> <small>@session.GetString("email")</small>
@@ -44,25 +32,6 @@
</ul> </ul>
<script> <script>
$(document).ready(function () {
$("#files").kendoUpload({
async: {
saveUrl: "/Account/_save",
autoUpload: true
},
success: function (data) {
if (data.response.success)
window.location.reload();
else
console.log(data.response.message);
}
});
});
$("#btn-plus").on("click", function () {
$("#image-uploader").toggle();
});
$("#logout-btn").on("click", function () { $("#logout-btn").on("click", function () {
$.ajax({ $.ajax({
url: "/Account/_logout", url: "/Account/_logout",

View File

@@ -12,9 +12,14 @@
if (username != null) if (username != null)
{ {
var isDoc = session.GetString("role").Equals("doctor"); var isDoc = session.GetString("role").Equals("doctor");
var isPatient = session.GetString("role").Equals("patient");
var Menu = new List<IMenuItem>(); var Menu = new List<IMenuItem>();
Menu.Add(new MenuItem("Profilo", "/")); Menu.Add(new MenuItem("Profilo", "/"));
Menu.Add(new MenuItem("Dati personali", "/user/" + username));
if(isPatient)
{
Menu.Add(new MenuItem("Dati personali", "/user/" + username));
}
<aside class="main-sidebar"> <aside class="main-sidebar">
<!-- sidebar: style can be found in sidebar.less --> <!-- sidebar: style can be found in sidebar.less -->

View File

@@ -22,12 +22,24 @@ scratch. This page gets rid of all links and provides the needed markup only.
<title>SeniorAssistant @ViewBag.Title</title> <title>SeniorAssistant @ViewBag.Title</title>
<!-- Tell the browser to be responsive to screen width --> <!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"> <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/bootstrap/dist/css/bootstrap.min.css"> <link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/fullcalendar/dist/fullcalendar.min.css">
<link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/fullcalendar/dist/fullcalendar.print.min.css" media="print">
<!-- daterange picker -->
<link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/bootstrap-daterangepicker/daterangepicker.css">
<!-- bootstrap datepicker -->
<link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css">
<!-- iCheck for checkboxes and radio inputs -->
<link rel="stylesheet" href="~/AdminLTE-2.4.3/plugins/iCheck/all.css">
<link rel="stylesheet" href="~/AdminLTE-2.4.3/plugins/timepicker/bootstrap-timepicker.min.css">
<!-- Font Awesome --> <!-- Font Awesome -->
<link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/font-awesome/css/font-awesome.min.css"> <link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/font-awesome/css/font-awesome.min.css">
<!-- Ionicons --> <!-- Ionicons -->
<link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/Ionicons/css/ionicons.min.css"> <link rel="stylesheet" href="~/AdminLTE-2.4.3/bower_components/Ionicons/css/ionicons.min.css">
<!-- Theme style --> <!-- Theme style -->
<link rel="stylesheet" href="~/AdminLTE-2.4.3/plugins/business.css"/>
<link rel="stylesheet" href="~/AdminLTE-2.4.3/dist/css/AdminLTE.min.css"> <link rel="stylesheet" href="~/AdminLTE-2.4.3/dist/css/AdminLTE.min.css">
<!-- AdminLTE Skins. We have chosen the skin-blue for this starter <!-- AdminLTE Skins. We have chosen the skin-blue for this starter
page. However, you can choose any other skin. Make sure you page. However, you can choose any other skin. Make sure you
@@ -47,6 +59,16 @@ scratch. This page gets rid of all links and provides the needed markup only.
<script src="~/kendo/@(kendo.Version)/js/jquery.min.js"></script> <script src="~/kendo/@(kendo.Version)/js/jquery.min.js"></script>
<script src="~/kendo/@(kendo.Version)/js/kendo.all.min.js"></script> <script src="~/kendo/@(kendo.Version)/js/kendo.all.min.js"></script>
<script src="~/AdminLTE-2.4.3/bower_components/moment/moment.js"></script>
<script src="~/AdminLTE-2.4.3/bower_components/fullcalendar/dist/fullcalendar.min.js"></script>
<script src="~/AdminLTE-2.4.3/bower_components/bootstrap-daterangepicker/daterangepicker.js"></script>
<script src="~/AdminLTE-2.4.3/bower_components/bootstrap-datepicker/dist/js/bootstrap-datepicker.min.js"></script>
<script src="~/AdminLTE-2.4.3/bower_components/fastclick/lib/fastclick.js"></script>
<script src="~/AdminLTE-2.4.3/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
<script src="~/AdminLTE-2.4.3/plugins/timepicker/bootstrap-timepicker.min.js"></script>
<script src="~/AdminLTE-2.4.3/plugins/jQueryUI/jquery-ui.js"></script>
<script src="~/AdminLTE-2.4.3/plugins/jQueryUI/jquery-ui.min.js"></script>
<script src="~/AdminLTE-2.4.3/plugins/iCheck/icheck.min.js"></script>
</head> </head>
<body class="hold-transition @(theme.Skin.GetDescription()) @(!logged?theme.Layout.GetDescription():"")"> <body class="hold-transition @(theme.Skin.GetDescription()) @(!logged?theme.Layout.GetDescription():"")">
@@ -58,7 +80,9 @@ scratch. This page gets rid of all links and provides the needed markup only.
<!-- mini logo for sidebar mini 50x50 pixels --> <!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini">@ViewBag.LogoMini</span> <span class="logo-mini">@ViewBag.LogoMini</span>
<!-- logo for regular state and mobile devices --> <!-- logo for regular state and mobile devices -->
<span class="logo-lg">@ViewBag.Logo</span> <span class="logo-lg">
<img src="~/logo-lg.png" width="50" height="50" /> <b>S</b>enior<b>A</b>ssistant
</span>
</a> </a>
<!-- Header Navbar --> <!-- Header Navbar -->
<nav class="navbar navbar-static-top" role="navigation"> <nav class="navbar navbar-static-top" role="navigation">
@@ -66,9 +90,9 @@ scratch. This page gets rid of all links and provides the needed markup only.
@if (logged) @if (logged)
{ {
<text> <text>
<a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button"> <a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
<span class="sr-only">Toggle navigation</span> <span class="sr-only">Toggle navigation</span>
</a> </a>
</text> </text>
} }
<!-- Navbar Right Menu --> <!-- Navbar Right Menu -->
@@ -106,6 +130,7 @@ scratch. This page gets rid of all links and provides the needed markup only.
<!-- REQUIRED JS SCRIPTS --> <!-- REQUIRED JS SCRIPTS -->
<!-- jQuery 3 --> <!-- jQuery 3 -->
@*<script src="~/AdminLTE-2.4.3/bower_components/jquery/dist/jquery.min.js"></script>*@ @*<script src="~/AdminLTE-2.4.3/bower_components/jquery/dist/jquery.min.js"></script>*@
<!-- Bootstrap 3.3.7 --> <!-- Bootstrap 3.3.7 -->
<script src="~/AdminLTE-2.4.3/bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <script src="~/AdminLTE-2.4.3/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
<!-- AdminLTE App --> <!-- AdminLTE App -->
@@ -114,4 +139,4 @@ scratch. This page gets rid of all links and provides the needed markup only.
Both of these plugins are recommended to enhance the Both of these plugins are recommended to enhance the
user experience. --> user experience. -->
</body> </body>
</html> </html>

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,39 @@
.business-hours {
padding: 40px 14px;
margin-top: -15px;
position: relative;
}
.business-hours:before {
content: '';
width: 23px;
height: 23px;
background: #111;
position: absolute;
top: 5px;
left: -12px;
transform: rotate(-45deg);
z-index: -1;
}
.business-hours .title {
font-size: 20px;
color: #BBB;
text-transform: uppercase;
padding-left: 5px;
border-left: 4px solid #ffac0c;
}
.business-hours li {
color: #888;
line-height: 30px;
border-bottom: 1px solid #333;
}
.business-hours li:last-child {
border-bottom: none;
}
.business-hours .opening-hours li.today {
color: #ffac0c;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 408 KiB

After

Width:  |  Height:  |  Size: 53 KiB