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; }
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); }
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); }
public ActionResult Create(PatientViewModel viewModel) { return this.Edit(viewModel); }