public static bool CheckIfTokenIsValid(H2MDbContext db, AuthObject auth)
        {
            var yesterday = DateTime.Now.AddDays(-1);
            var _token    = db.Tokens.Where(token => token.UserId == auth.UserId && token.Token == auth.Token && token.ExpiryDate >= yesterday).FirstOrDefault();

            return(_token == null);
        }
 public List <HostpitalRequest> ApplyList(int hospitalID)
 {
     using (var db = new H2MDbContext())
     {
         return(db.HostpitalRequest.Where(a => a.HospitalId == hospitalID).ToList());
     }
 }
 public dynamic Application(int RequestId)
 {
     using (var db = new H2MDbContext())
     {
         return(db.HostpitalRequest.Where(a => a.Id == RequestId && a.Enabled).Select(a => new { a.Count, a.Htmlpost, HospitalName = a.Hospital.IdNavigation.Name, SpecialityName = a.Speciality.Name, email = a.Hospital.IdNavigation.Email, a.Hospital.IdNavigation.Latitude, a.Hospital.IdNavigation.Longitude }).FirstOrDefault());
     }
 }
 public List <Country> Countries()
 {
     using (var db = new H2MDbContext())
     {
         return(db.Country.ToList());
     }
 }
 public dynamic CancelDoctorRequest(int requestId)
 {
     using (var db = new H2MDbContext())
     {
         var employeeRequest = db.EmployeeRequest.Where(a => a.Id == requestId).FirstOrDefault();
         if (employeeRequest == null)
         {
             return(new Response()
             {
                 Code = (int)HttpStatusCode.NotFound,
                 Data = "Invalid Request"
             });
         }
         else
         {
             db.EmployeeRequest.Remove(employeeRequest);
             string msg = "Cancelled Successfully!";
             db.SaveChanges();
             return(new Response()
             {
                 Code = (int)HttpStatusCode.OK, Data = new { msg }
             });
         }
     }
 }
        public static AuthObject CreateToken(H2MDbContext db, User user, string roleName)
        {
            var    yesterday = DateTime.Now.AddDays(-1);
            var    _token    = db.Tokens.Where(token => token.UserId == user.Id && token.ExpiryDate >= yesterday).FirstOrDefault();
            Tokens new_token = null;

            if (_token == null)
            {
                var exp = DateTime.Now.AddDays(30);
                new_token = new Tokens()
                {
                    CreationDate = DateTime.Now,
                    ExpiryDate   = exp,
                    Token        = Guid.NewGuid().ToString(),
                    RoleId       = user.RoleId,
                    UserId       = user.Id
                };
                db.Tokens.Add(new_token);
                db.SaveChanges();
            }
            else
            {
                new_token = _token;
            }
            var authObj = new AuthObject()
            {
                Role   = roleName,
                Token  = new_token.Token,
                UserId = user.Id
            };

            return(authObj);
        }
 public object EmployeeRequests(int userId)
 {
     using (var db = new H2MDbContext())
     {
         return(db.EmployeeRequest.Include(a => a.Request).Include(a => a.Request.Hospital.IdNavigation).Where(a => a.UserId == userId).Select(a => new { a.Request, a.Request.Hospital.IdNavigation.Name }).ToList());
     }
 }
 public dynamic specialities()
 {
     using (var db = new H2MDbContext())
     {
         return(db.Speciality.Select(a => new { a.Name, a.Id }).ToList());
     }
 }
 public dynamic ApplicationHospital(int RequestId)
 {
     using (var db = new H2MDbContext())
     {
         return(db.EmployeeRequest.Where(a => a.RequestId == RequestId && a.Status != 0));
     }
 }
 public List <City> Cities()
 {
     using (var db = new H2MDbContext())
     {
         return(db.City.ToList());
     }
 }
 public Response Login([FromForm] string email, [FromForm] string password)
 {
     try
     {
         using (var db = new H2MDbContext())
         {
             email = email.Trim();
             var _user = db.User.Include(user => user.Role).Where(user => user.Email.Trim() == email && user.Password == password).FirstOrDefault();
             if (_user == null)
             {
                 return(new Response()
                 {
                     Code = (int)HttpStatusCode.Unauthorized,
                     Data = "Incorrect email or password!"
                 });
             }
             AuthHelper.AuthObject authObj = AuthHelper.CreateToken(db, _user, _user.Role.Name);
             return(new Response()
             {
                 Code = (int)HttpStatusCode.OK,
                 Data = authObj
             });
         }
     }
     catch (Exception ex)
     {
         return(InternalErrorObj);
     }
 }
        public async Task <Response> GetHospital(int ID)
        {
            try
            {
                using (var db = new H2MDbContext())
                {
                    var hospitalInfo = db.User.Where(h => h.Id == ID).Select(a => new { a.Email, a.Name, City = a.City.Name, Country = a.Country.Name, Initls = a.City.Initals }).FirstOrDefault();

                    var requests = db.HostpitalRequest.Where(r => r.HospitalId == ID).Select(a => new { a.Id, a.Speciality, a.Enabled, a.Count }).ToList();

                    bool isPeak = await getPeak(hospitalInfo.Initls);

                    List <int> ids     = new List <int>();
                    List <int> leftPos = new List <int>();
                    foreach (var r in requests)
                    {
                        var requestLeft = db.EmployeeRequest.Where(a => a.RequestId == r.Id && a.Status == 1).ToList().Count;
                        leftPos.Add(requestLeft);
                        ids.Add(r.Id);
                    }

                    /*
                     * 'id' => $request['id'],
                     * 'userName' => $request['user']['name'],
                     * 'status' => $request['status'],
                     * 'time' => $new_date,
                     * 'speciality' => $request['speciality']['name']
                     */
                    var newRequests = db.EmployeeRequest.Where(r => ids.Contains(r.RequestId)).Select(r => new { User = new { r.User.Name }, r.Status, r.Time, Speciality = new { r.Request.Speciality.Name }, r.Id, r.RequestId }).ToList();

                    newRequests.Reverse();
                    requests.Reverse();

                    //var newReuests = db.EmployeeRequest.Where(r => r.);

                    return(new Response()
                    {
                        Code = (int)HttpStatusCode.OK,
                        Data = new { hospitalInfo, requests, leftPos, newRequests, isPeak }
                    });
                }
            }
            catch (Exception ex)
            {
                return(new Response()
                {
                    Code = (int)HttpStatusCode.InternalServerError,
                    Data = ex.ToString()
                });
            }
        }
        public async Task <Response> GetRequestsSorted(double?lon, double?lat, int docID)
        {
            using (var db = new H2MDbContext()) {
                var        specIDs = db.DoctorSpeciality.Where(doc => doc.DoctorId == docID).ToList();
                List <int> specs   = new List <int>();

                foreach (DoctorSpeciality doc in specIDs)
                {
                    specs.Add(doc.SpecialityId);
                }
                //var spec = db.Doctor.Include(u => u.DoctorSpeciality).Where(d => d.DoctorId);
                var employeeRequested = db.EmployeeRequest.Where(a => a.UserId == docID).Select(a => a.RequestId).ToList();

                var _hospitals = db.HostpitalRequest.Include(h => h.Hospital).Include(a => a.Hospital.IdNavigation).Include(a => a.Hospital.IdNavigation.City).Include(a => a.Hospital.IdNavigation.Country).Include(h => h.Speciality).Where(a => a.Enabled).ToList();
                //added where to only show enabled requests
                List <RequestViewModel> result = new List <RequestViewModel>();

                User user = null;
                if (lon == null || lat == null)
                {
                    user = db.User.Where(a => a.Id == docID).FirstOrDefault();
                }
                foreach (HostpitalRequest h in _hospitals)
                {
                    double distance = 0;
                    if (lon != null && lat != null)
                    {
                        distance = GetDistance(h.Hospital.Latitude.Value, h.Hospital.Longitude.Value, (double)lat, (double)lon);
                    }
                    else
                    {
                        distance = user.CityId == h.Hospital.IdNavigation.CityId ? 11111 : 111111;
                    }
                    bool isPeak = await getPeak(h.Hospital.IdNavigation.City.Initals);

                    result.Add(new RequestViewModel
                    {
                        Request  = new { speciality = h.Speciality.Name, hospitalName = h.Hospital.IdNavigation.Name, count = h.Count, country = h.Hospital.IdNavigation.Country.Name, city = h.Hospital.IdNavigation.City.Name, hospitalAppId = h.Id, isApplied = employeeRequested.Contains(h.Id), isPeak },
                        Distance = distance
                    });
                }
                result.Sort((p, q) => p.Distance.CompareTo(q.Distance));

                return(new Response()
                {
                    Code = (int)HttpStatusCode.OK,
                    Data = result
                });
            }
        }
        public dynamic Profile(int userId)
        {
            using (var db = new H2MDbContext())
            {
                var userInfo = db.User.Where(a => a.Id == userId).Select(a => new { a.Name, a.City, a.Country, a.Email, a.Id }).FirstOrDefault();

                var specialtiesList = db.DoctorSpeciality.Where(a => a.DoctorId == userId).Select(a => a.Speciality.Name).ToList();

                var requests = db.EmployeeRequest.Where(a => a.UserId == userInfo.Id).Select(a => new { a.Status, a.Request.Hospital.IdNavigation.Name, a.Time, a.Id }).ToList();
                requests.Reverse();

                return(new {
                    userInfo, specialtiesList, requests
                });
            }
        }
        public async Task <Response> CheckPeak(int HospitalID)
        {
            try
            {
                bool isPeak = false;
                using (var db = new H2MDbContext())
                {
                    var hospital = db.User.Include(c => c.City).Where(h => h.Id == HospitalID).FirstOrDefault();
                    var init     = hospital.City.Initals;
                    //var result = await getData("MA");
                    var result = await getData(init);

                    var data = JsonConvert.DeserializeObject <List <Dictionary <String, dynamic> > >(result);
                    //double percent = 0;
                    double        sum  = 0;
                    List <double> nums = new List <double>();
                    nums.Add(0);
                    for (int i = data.Count - 1; i >= Math.Max(data.Count - 14, 0); i--)
                    {
                        sum += data[i]["positive"] - data[i - 1]["positive"];
                        nums.Add(data[i]["positive"] - data[i - 1]["positive"]);
                    }

                    sum /= Math.Min(data.Count, 14);
                    var lastDay = data[data.Count - 1]["positive"] - data[data.Count - 2]["positive"];
                    if (lastDay >= (sum - sum * 0.1))
                    {
                        isPeak = true;
                    }
                    sum = (sum - sum * 0.1);
                    return(new Response()
                    {
                        Code = (int)HttpStatusCode.OK,
                        Data = new { isPeak, sum, init, lastDay, nums }
                    });
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Server Error " + ex.ToString());
            }
        }
 public Response NewDemand([FromForm] int HospitalId, [FromForm] int count, [FromForm] string htmlPost, [FromForm] int SpecialityId)
 {
     using (var db = new H2MDbContext())
     {
         var request = new HostpitalRequest
         {
             Count        = count,
             Htmlpost     = htmlPost,
             HospitalId   = HospitalId,
             SpecialityId = SpecialityId,
             Enabled      = true
         };
         db.HostpitalRequest.Add(request);
         db.SaveChanges();
         return(new Response()
         {
             Code = (int)HttpStatusCode.OK,
             Data = "Demand added successfully!"
         });
     }
 }
 public Response Apply(int EmployeeId, int RequestId)
 {
     try
     {
         using (var db = new H2MDbContext())
         {
             var HasApplied = db.EmployeeRequest.Where(a => a.UserId == EmployeeId && a.RequestId == RequestId).FirstOrDefault() != null;
             if (HasApplied)
             {
                 return(new Response()
                 {
                     Code = (int)HttpStatusCode.AlreadyReported, Data = "You've applied before!"
                 });
             }
             else
             {
                 EmployeeRequest er = new EmployeeRequest()
                 {
                     UserId    = EmployeeId,
                     Time      = DateTime.Now,
                     RequestId = RequestId,
                     Status    = 0
                 };//0-> pending 1-> accepted -1-> rejected
                 db.EmployeeRequest.Add(er);
                 db.SaveChanges();
             }
         }
         return(new Response()
         {
             Code = (int)HttpStatusCode.OK, Data = "Applied Successfully"
         });
     }
     catch (Exception ex)
     {
         return(new Response()
         {
             Code = (int)HttpStatusCode.InternalServerError, Data = "Something wrong happend. Can you please try agian?"
         });
     }
 }
        public dynamic ApproveRejectApplications(int EmployeeRequestId, bool AcceptOrDecline)
        {
            using (var db = new H2MDbContext())
            {
                var employeeRequest = db.EmployeeRequest.Include(a => a.Request).Include(a => a.User).Where(a => a.Id == EmployeeRequestId).FirstOrDefault();
                if (employeeRequest == null)
                {
                    return(new Response()
                    {
                        Code = (int)HttpStatusCode.NotFound,
                        Data = "Invalid Request"
                    });
                }
                else
                {
                    var msg      = "";
                    var userInfo = db.User.Where(a => a.Id == employeeRequest.UserId).FirstOrDefault();

                    var request = db.HostpitalRequest.Where(a => a.Id == employeeRequest.RequestId).FirstOrDefault();

                    if (AcceptOrDecline)
                    {
                        employeeRequest.Status = 1;
                        msg = userInfo.Name + " accepted Successfully!";
                    }
                    else
                    {
                        employeeRequest.Status = -1;
                        msg = userInfo.Name + " has been rejected.";
                    }
                    db.SaveChanges();
                    return(new Response()
                    {
                        Code = (int)HttpStatusCode.OK, Data = new { userInfo.Name, userInfo.Email, msg }
                    });
                }
            }
        }
 public UsersController(H2MDbContext context)
 {
     _context = context;
 }
 public Response Signup([FromForm] string Email, [FromForm] string Password, [FromForm] string Gender, [FromForm] string Name, [FromForm] double?Longitude, [FromForm] double?Latitude, [FromForm] int?CountryId, [FromForm] int?CityId, [FromForm] int?RoleId, [FromForm] string SpecialitiesJson)
 {
     try
     {
         using (var db = new H2MDbContext())
         {
             var roleId  = (RoleId ?? 0);
             var newUser = new User()
             {
                 Email       = Email.Trim(),
                 Password    = Password,
                 RoleId      = roleId,
                 DateCreated = DateTime.Now,
                 Gender      = Gender,
                 Name        = Name.Trim(),
                 CountryId   = CountryId ?? -1,
                 CityId      = CityId ?? -1,
                 Longitude   = Longitude,
                 Latitude    = Latitude
             };
             db.SaveChanges();
             var authObject          = AuthHelper.CreateToken(db, newUser, newUser.Role.Name);
             List <Speciality> specs = null;
             if (!string.IsNullOrWhiteSpace(SpecialitiesJson))
             {
                 specs = JsonConvert.DeserializeObject <List <Speciality> >(SpecialitiesJson);
             }
             if (roleId == 1)
             {
                 var _hospital = new Hospital()
                 {
                     Id        = newUser.Id,
                     Latitude  = Latitude,
                     Longitude = Longitude
                 };
                 db.Hospital.Add(_hospital);
                 db.SaveChanges();
             }
             else if (roleId == 2)
             {
                 var _doctor = new Doctor()
                 {
                     DoctorId = newUser.Id.ToString()
                 };
                 specs.ForEach(s => _doctor.DoctorSpeciality.Add(new DoctorSpeciality()
                 {
                     Speciality = s,
                     DoctorId   = newUser.Id
                 }));
                 db.Doctor.Add(_doctor);
                 db.SaveChanges();
             }
             else if (roleId == 3)
             {
                 var _nurse = new Nurse()
                 {
                     NurseId = newUser.Id.ToString()
                 };
                 specs.ForEach(s => _nurse.NurseSpeciality.Add(new NurseSpeciality()
                 {
                     Speciality = s,
                     NurseId    = newUser.Id
                 }));
                 db.Nurse.Add(_nurse);
                 db.SaveChanges();
             }
             else
             {
                 InternalErrorObj.Data = "Invalid Job";
                 return(InternalErrorObj);
             }
             return(new Response()
             {
                 Code = (int)HttpStatusCode.OK,
                 Data = authObject
             });
         }
     }
     catch (Exception ex)
     {
         return(InternalErrorObj);
     }
 }