Exemplo n.º 1
0
        private static PatientViewModel GetViewModel(PracticeController controller, [NotNull] Patient patient, bool includeSessions, bool includeFutureAppointments, bool includeAddressData = true)
        {
            if (patient == null) throw new ArgumentNullException("patient");

            // Person, address, and patient basic properties.
            var viewModel = new PatientViewModel();

            FillPersonViewModel(controller.DbPractice, patient.Person, viewModel);

            viewModel.Id = patient.Id;
            viewModel.Code = patient.Code.HasValue ? patient.Code.Value.ToString("D6") : "000000";
            viewModel.PatientId = patient.Id;
            viewModel.PersonId = patient.Person.Id;
            viewModel.Observations = patient.Person.Observations;

            if (includeAddressData)
            {
                var address = patient.Person.Addresses.SingleOrDefault();
                viewModel.Address = address != null ? GetAddressViewModel(address) : new AddressViewModel();
            }

            // Other (more complex) properties.

            if (includeFutureAppointments)
            {
                // gets a textual date. The input date must be LOCAL
                Func<DateTime, string> getRelativeDate = s =>
                {
                    var result = s.ToShortDateString();
                    result += ", " + DateTimeHelper.GetFormattedTime(s);
                    result += ", " +
                              DateTimeHelper.ConvertToRelative(s, controller.GetPracticeLocalNow(),
                                                               DateTimeHelper.RelativeDateOptions.IncludeSuffixes |
                                                               DateTimeHelper.RelativeDateOptions.IncludePrefixes |
                                                               DateTimeHelper.RelativeDateOptions.ReplaceToday |
                                                               DateTimeHelper.RelativeDateOptions.ReplaceYesterdayAndTomorrow);

                    return result;
                };

                // get appointments scheduled for the future
                var utcNow = controller.GetUtcNow();

                var appointments = patient.Appointments
                    .Where(
                        a => a.DoctorId == patient.DoctorId
                             && a.Start > utcNow)
                    .ToList();

                viewModel.FutureAppointments = (from a in appointments
                                                select new AppointmentViewModel
                                                {
                                                    PatientId = a.PatientId,
                                                    PatientName = a.PatientId != default(int) ? a.Patient.Person.FullName : null,
                                                    LocalDateTime = ConvertToLocalDateTime(controller.DbPractice, a.Start),
                                                    LocalDateTimeSpelled = getRelativeDate(ConvertToLocalDateTime(controller.DbPractice, a.Start))
                                                }).ToList();
            }

            if (includeSessions)
            {
                var sessions = GetSessionViewModels(controller.DbPractice, patient, null);

                viewModel.Sessions = sessions;
            }

            return viewModel;
        }
Exemplo n.º 2
0
        public ActionResult Edit(int? id)
        {
            PatientViewModel viewModel = null;

            if (id.HasValue)
            {
                // editing an existing patient
                var patient = this.db.Patients.First(p => p.Id == id);
                viewModel = GetViewModel(this, patient, false, false);

                ViewBag.Title = "Alterando paciente: " + viewModel.FullName;
            }
            else
            {
                viewModel = new PatientViewModel();
                // the suggested next patient code for the practice. Patient code is not unique for each doctor, it's unique for each each practice
                var currentLastCode = this.db.Patients.Max(p => p.Code);
                if (!currentLastCode.HasValue)
                    currentLastCode = 0;
                viewModel.Code = (currentLastCode + 1).Value.ToString("D6");

                // if this account has a patient limit, then we should tell the user
                var patientLimit = this.DbPractice.AccountContract.PatientsLimit;

                if (patientLimit != null)
                {
                    var patientCount = this.db.Patients.Count(p => p.PracticeId == this.DbPractice.Id);
                    if (patientCount + 1 > patientLimit)
                    {
                        this.ModelState.Clear();
                        this.ModelState.AddModelError(
                            "PatientsLimit",
                            "Não é possível adicionar mais pacientes, pois já foi atingido o limite de {0} pacientes de sua conta.",
                            patientLimit);
                    }
                }

                // adding new patient
                this.ViewBag.Title = "Novo paciente";
            }

            return View("Edit", viewModel);
        }
Exemplo n.º 3
0
        public ActionResult Edit(PatientViewModel formModel)
        {
            // if this account has a patient limit, then we should tell the user if he/she blows up the limit
            var patientLimit = this.DbPractice.AccountContract.PatientsLimit;

            // verify patient limit
            if (patientLimit != null)
            {
                var patientCount = this.db.Patients.Count(p => p.PracticeId == this.DbPractice.Id);
                if (patientCount + 1 > patientLimit)
                {
                    this.ModelState.Clear();
                    this.ModelState.AddModelError(
                        "PatientsLimit",
                        "Não é possível adicionar mais pacientes, pois já foi atingido o limite de {0} pacientes de sua conta.",
                        patientLimit);
                }
            }

            // Verify if the patient code is valid
            if (formModel.Code != null)
            {
                var patientCodeAsInt = default(int);
                int.TryParse(formModel.Code, out patientCodeAsInt);
                if (patientCodeAsInt != default(int) && this.db.Patients.Any(p => p.Code == patientCodeAsInt))
                    this.ModelState.AddModelError<PatientViewModel>(
                        model => model.Code, "O código do paciente informado pertence a outro paciente");
            }

            if (ModelState.IsValid)
            {
                var isEditing = formModel.Id != null;

                Patient patient;
                if (isEditing)
                    patient = this.db.Patients.First(p => p.Id == formModel.Id);
                else
                {
                    patient = new Patient
                                  {
                                      Person = new Person { PracticeId = this.DbUser.PracticeId, },
                                      PracticeId = this.DbUser.PracticeId,
                                  };
                    this.db.Patients.AddObject(patient);
                }

                patient.Doctor = this.Doctor;

                patient.IsBackedUp = false;
                Debug.Assert(formModel.Code != null, "formModel.Code != null");
                patient.Code = int.Parse(formModel.Code);
                patient.Person.BirthPlace = formModel.BirthPlace;
                patient.Person.CPF = formModel.Cpf;
                patient.Person.RG = formModel.Rg;
                patient.Person.Ethnicity = (int?)formModel.Ethnicity;
                patient.Person.Schooling = (int?)formModel.Schooling;
                patient.Person.FatherName = formModel.FatherName;
                patient.Person.FatherProfession = formModel.FatherProfession;
                patient.Person.MotherName = formModel.MotherName;
                patient.Person.MotherProfession = formModel.MotherProfession;
                patient.Person.CreatedOn = this.GetUtcNow();
                Debug.Assert(formModel.DateOfBirth != null, "formModel.DateOfBirth != null");
                patient.Person.DateOfBirth = ConvertToUtcDateTime(this.DbPractice, formModel.DateOfBirth.Value);
                patient.Person.FullName = formModel.FullName;
                patient.Person.Gender = (short)formModel.Gender;
                patient.Person.MaritalStatus = formModel.MaritalStatus;
                patient.Person.Observations = formModel.Observations;
                patient.Person.Profession = formModel.Profissao;
                patient.Person.Email = !string.IsNullOrEmpty(formModel.Email) ? formModel.Email.ToLower() : null;
                patient.Person.EmailGravatarHash = GravatarHelper.GetGravatarHash(formModel.Email);
                patient.Person.PhoneLand = formModel.PhoneLand;
                patient.Person.PhoneCell = formModel.PhoneCell;

                // handle patient address
                if (!patient.Person.Addresses.Any())
                    patient.Person.Addresses.Add(new Address { PracticeId = this.DbUser.PracticeId });

                var patientAddress = patient.Person.Addresses.First();
                patientAddress.CEP = formModel.Address.CEP;
                patientAddress.City = formModel.Address.City;
                patientAddress.Complement = formModel.Address.Complement;
                patientAddress.Neighborhood = formModel.Address.Neighborhood;
                patientAddress.StateProvince = formModel.Address.StateProvince;
                patientAddress.Street = formModel.Address.Street;

                this.db.SaveChanges();
                return this.RedirectToAction("Details", new { id = patient.Id });
            }

            return this.View("Edit", formModel);
        }
Exemplo n.º 4
0
 public ActionResult Create(PatientViewModel viewModel)
 {
     return this.Edit(viewModel);
 }