Ejemplo n.º 1
0
        public async Task <IHttpActionResult> PostMedication(MedicationBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var medication = new Medication()
            {
                MedicationId = Guid.NewGuid(),
                GenericName  = model.GenericName,
                Code         = model.Code
            };

            try
            {
                if (MedicationExists(medication) == false)
                {
                    db.Medication.Add(medication);
                    await db.SaveChangesAsync();
                }
                else
                {
                    return(BadRequest("The medication name or code already exists in the databae."));
                }
            }
            catch (DbUpdateException)
            {
                throw;
            }

            return(Created("medications/" + medication.MedicationId, ToDto.MedicationToDto(medication)));
        }
Ejemplo n.º 2
0
        public async Task <IHttpActionResult> GetAssignedPatients(string providerId)

        {
            var user = await _userManager.FindByIdAsync(providerId);

            if (user == null)
            {
                return(NotFound());
            }

            List <ApplicationUser> patients = new List <ApplicationUser>();

            foreach (var careTeam in user.ProviderCareTeams)
            {
                if (careTeam.Active)
                {
                    patients.Add(careTeam.Patient);
                }
            }
            if (patients == null)
            {
                return(NotFound());
            }

            var usersDto = new List <UserDto>();

            foreach (var patient in patients)
            {
                usersDto.Add(ToDto.UserToDto(patient));
            }

            return(Ok(usersDto));
        }
Ejemplo n.º 3
0
        private async Task <IHttpActionResult> GetUsersByRoleIds(string email, List <string> roleIdStrList)
        {
            if (email == null)
            {
                return(BadRequest());
            }

            var proxyCreation = _db.Configuration.ProxyCreationEnabled;

            _db.Configuration.ProxyCreationEnabled = false;

            List <ApplicationUser> providers;

            providers = await _db.Users
                        .Where(u => u.Roles.Any(r => roleIdStrList.Any(rid => rid == r.RoleId)))
                        .Include(u => u.Roles)
                        .ToListAsync();

            _db.Configuration.ProxyCreationEnabled = proxyCreation;

            providers = providers.Distinct().ToList();

            foreach (var provider in providers)
            {
                if (email == provider.Email)
                {
                    return(Ok(ToDto.UserToDto(provider)));
                }
            }
            return(NotFound());
        }
Ejemplo n.º 4
0
        public async Task <IHttpActionResult> PostPrescription(PrescribeBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var patient = await userManager.FindByIdAsync(model.PatientId);

            if (patient == null)
            {
                return(NotFound());
            }

            var medication = await db.Medication.FindAsync(new Guid(model.MedicationId));

            if (medication == null)
            {
                return(NotFound());
            }

            var prescription = new Prescription()
            {
                PrescriptionId = Guid.NewGuid(),
                Medication     = medication,
                Dosage         = model.Dosage,
                Frequency      = model.Frequency,
                StartDate      = model.StartDate,
                EndDate        = model.EndDate,
                Notes          = model.Notes,
                Patient        = patient
            };

            db.Prescription.Add(prescription);

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (PrescriptionExists(prescription.PrescriptionId))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }
            return(Created("prescriptions/" + prescription.PrescriptionId, ToDto.PrescriptionToDto(prescription)));
        }
Ejemplo n.º 5
0
        public async Task <IHttpActionResult> GetCareTeam(Guid id)
        {
            CareTeam careTeam = await db.CareTeam.FindAsync(id);

            if (careTeam == null)
            {
                return(NotFound());
            }

            var roles = await db.Roles.ToDictionaryAsync(r => r.Id);

            return(Ok(ToDto.CareTeamToDto(careTeam, roles)));
        }
Ejemplo n.º 6
0
        public async Task <IHttpActionResult> GetUser(string id)
        {
            var user = await _db.Users.Where(u => u.Id.Equals(id, StringComparison.InvariantCultureIgnoreCase))
                       .Include(u => u.Roles)
                       .FirstOrDefaultAsync();

            if (user == null)
            {
                return(NotFound());
            }

            return(Ok(ToDto.UserToDto(user)));
        }
Ejemplo n.º 7
0
        public async Task <IHttpActionResult> PostUser(CreateUserBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var password = Randomizer.GetRandomString(10);

            var user = new ApplicationUser()
            {
                UserName    = model.FirstName + model.LastName + Randomizer.GetRandom(100000),
                Email       = model.Email,
                FirstName   = model.FirstName,
                LastName    = model.LastName,
                Gender      = model.Gender,
                DOB         = model.DOB,
                PhoneNumber = model.PhoneNumber,
                Specialty   = model.Specialty
            };

            var identityResult = await _userManager.CreateAsync(user, password);

            if (!identityResult.Succeeded)
            {
                return(BuildErrorResult(identityResult));
            }

            Crypteron.CipherDb.Session.Unseal(user, _db);
            identityResult = await _userManager.AddToRolesAsync(user.Id, model.Roles.ToArray());


            Crypteron.CipherDb.Session.Unseal(user, _db);

            if (!identityResult.Succeeded)
            {
                return(BuildErrorResult(identityResult));
            }

            // Send an invitation to login and change password
            MailSender sender   = new MailSender();
            string     mailBody = "Dear " + user.FirstName + " " + user.LastName + ", you have been added to CloudMedic by an administrator.\n\nPlease login with your assigned username and password:\n\nUsername: "******"\nPassword: "******"\n\n After logging in, change your password under the profile tab.";

            sender.SendInvite(mailBody, user.Email);

            return(Created("users/" + user.Id, ToDto.UserToDto(user)));
        }
Ejemplo n.º 8
0
        public async Task <IHttpActionResult> GetMedications()
        {
            List <Medication> medications;

            medications = await db.Medication
                          .Take(30)
                          .ToListAsync();

            var medicationsDto = new List <MedicationDto>();

            foreach (var medication in medications)
            {
                medicationsDto.Add(ToDto.MedicationToDto(medication));
            }

            return(Ok(medicationsDto));
        }
Ejemplo n.º 9
0
        public async Task <IHttpActionResult> GetPrescriptions(string id)
        {
            var user = await _userManager.FindByIdAsync(id);

            if (user == null)
            {
                return(NotFound());
            }

            var prescriptionsDto = new List <PrescriptionDto>();

            foreach (var prescription in user.Prescriptions)
            {
                prescriptionsDto.Add(ToDto.PrescriptionToDto(prescription));
            }

            return(Ok(prescriptionsDto));
        }
Ejemplo n.º 10
0
        public async Task <IHttpActionResult> GetPatientCareTeams(string id)
        {
            var user = await _userManager.FindByIdAsync(id);

            if (user == null)
            {
                return(NotFound());
            }

            var careTeamsDto = new List <CareTeamDto>();
            var roles        = await _db.Roles.ToDictionaryAsync(r => r.Id);

            foreach (var careTeam in user.PatientCareTeams)
            {
                careTeamsDto.Add(ToDto.CareTeamToDto(careTeam, roles));
            }

            return(Ok(careTeamsDto));
        }
Ejemplo n.º 11
0
        public async Task <IHttpActionResult> GetPrescriptions(string providerId)
        {
            var provider = await userManager.FindByIdAsync(providerId);

            if (provider == null)
            {
                return(NotFound());
            }

            List <PrescriptionDto> prescriptionsDto = new List <PrescriptionDto>();

            foreach (var careTeam in provider.ProviderCareTeams)
            {
                foreach (var prescription in careTeam.Patient.Prescriptions)
                {
                    prescriptionsDto.Add(ToDto.PrescriptionToDto(prescription));
                }
            }
            return(Ok(prescriptionsDto));
        }
Ejemplo n.º 12
0
        public async Task <IHttpActionResult> GetCareTeams()
        {
            List <CareTeam> careTeams;

            //TODO: Add pagination to support over 30 care teams
            careTeams = await db.CareTeam
                        .Take(30)
                        .ToListAsync();

            var careTeamsDto = new List <CareTeamDto>();

            var roles = await db.Roles.ToDictionaryAsync(r => r.Id);

            foreach (var careTeam in careTeams)
            {
                careTeamsDto.Add(ToDto.CareTeamToDto(careTeam, roles));
            }

            return(Ok(careTeamsDto));
        }
Ejemplo n.º 13
0
        public async Task <IHttpActionResult> PostCareTeam(CareTeamBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var patient = await userManager.FindByIdAsync(model.PatientId);

            if (patient == null)
            {
                return(NotFound());
            }

            List <ApplicationUser> providers = new List <ApplicationUser>();

            foreach (string ProviderId in model.ProviderIds)
            {
                var provider = await userManager.FindByIdAsync(ProviderId);

                if (provider == null)
                {
                    return(NotFound());
                }
                providers.Add(provider);
            }

            List <ApplicationUser> supporters = new List <ApplicationUser>();

            foreach (string SupporterId in model.SupporterIds)
            {
                var supporter = await userManager.FindByIdAsync(SupporterId);

                if (supporter == null)
                {
                    return(NotFound());
                }
                supporters.Add(supporter);
            }

            var careTeam = new CareTeam()
            {
                Id         = Guid.NewGuid(),
                Name       = model.Name,
                Active     = false,
                Providers  = providers,
                Supporters = supporters,
                Patient    = patient
            };

            db.CareTeam.Add(careTeam);
            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (CareTeamExists(careTeam.Id))
                {
                    return(Conflict());
                }
                else
                {
                    throw;
                }
            }

            return(Created("CareTeams/" + careTeam.Id, ToDto.CareTeamToDto(careTeam)));
        }
Ejemplo n.º 14
0
        public async Task <IHttpActionResult> GetUsers(int page = 1, string role = null)
        {
            List <ApplicationUser> users;

            // Variables initialized depending on whether role specified
            int totalUsers;
            int maxPage;
            int skipUsers;

            // If no role specified, just query the last 30 users
            if (string.IsNullOrWhiteSpace(role))
            {
                totalUsers = await _db.Users.CountAsync();

                // The maximum number of pages, rounded up
                maxPage   = ((totalUsers + pageSize + 1) / pageSize);
                page      = Math.Max(1, page);
                page      = Math.Min(maxPage, page);
                skipUsers = (page - 1) * pageSize;

                users = await _db.Users
                        .OrderBy(u => u.Id)
                        .Include(u => u.Roles)
                        .Skip(skipUsers)
                        .Take(pageSize)
                        .ToListAsync();
            }
            else
            {
                var roleId = RoleManager.GetRoleIdFromRoleName(role);

                totalUsers = await _db.Users
                             .Where(u => u.Roles.Any(r => r.RoleId == roleId))
                             .CountAsync();

                // The maximum number of pages, rounded up
                maxPage   = ((totalUsers + pageSize - 1) / pageSize);
                page      = Math.Max(1, page);
                page      = Math.Min(maxPage, page);
                skipUsers = (page - 1) * pageSize;

                users = await _db.Users
                        .Where(u => u.Roles.Any(r => r.RoleId == roleId))
                        .OrderBy(u => u.Id)
                        .Include(u => u.Roles)
                        .Skip(skipUsers)
                        .Take(pageSize)
                        .ToListAsync();
            }

            UsersPageDto result = new UsersPageDto()
            {
                Users        = new List <UserDto>(),
                HasNext      = (page < maxPage),
                HasPrev      = (page > 1),
                NumPages     = maxPage,
                CurrentCount = totalUsers
            };

            // Convert the user objects to a list of serializable data transfer objects
            foreach (var user in users)
            {
                result.Users.Add(ToDto.UserToDto(user));
            }

            return(Ok(result));
        }