public ActionResult Edit(ModelMedicalCertificateViewModel formModel) { if (this.ModelState.IsValid) { ModelMedicalCertificate certificateModel = null; if (formModel.Id != null) { certificateModel = this.db.ModelMedicalCertificates.First(m => m.Id == formModel.Id); } else { certificateModel = new ModelMedicalCertificate { PracticeId = this.DbUser.PracticeId, }; this.db.ModelMedicalCertificates.AddObject(certificateModel); } certificateModel.Name = formModel.Name; certificateModel.Text = formModel.Text; certificateModel.Doctor = this.Doctor; certificateModel.PracticeId = this.DbPractice.Id; var fieldsFoundInText = Regex.Matches(formModel.Text, @"\<%([^%]+?)%\>", RegexOptions.IgnoreCase) .Cast <Match>().Select(m => m.Groups[1].Value.Trim()).ToList(); // delete fields found in the DB that don't have a matching field in text var itemsToDelete = certificateModel.Fields .Where(dbField => fieldsFoundInText.All(f => f != dbField.Name)) .ToList(); foreach (var itemToDelete in itemsToDelete) { this.db.ModelMedicalCertificateFields.DeleteObject(itemToDelete); } // add new fields to the DB foreach (var field in fieldsFoundInText .Where(field => certificateModel.Fields.All(f => f.Name != field)) .Where(field => StringHelper.RemoveDiacritics(field).ToLower() != "paciente")) { certificateModel.Fields.Add( new ModelMedicalCertificateField { PracticeId = this.DbUser.PracticeId, Name = field }); } this.db.SaveChanges(); return(this.Redirect(this.Url.Action("Details", new { id = certificateModel.Id }))); } return(this.View("Edit", formModel)); }
/// <summary> /// Fills a new doctor with common useful data: default medical-certificates and a default health-insurance. /// </summary> /// <param name="doctor">The new doctor to receive some useful objects to work with.</param> public static void FillNewDoctorUtilityBelt(Doctor doctor) { { var medicalCertificate = new ModelMedicalCertificate { Name = "Comparecimento em consulta", Text = "O paciente <%Paciente%> compareceu a uma consulta no horário de <%HoraInicio%> até <%HoraFim%>.", PracticeId = doctor.PracticeId, }; medicalCertificate.Fields.Add(new ModelMedicalCertificateField { Name = "HoraInicio", PracticeId = doctor.PracticeId, }); medicalCertificate.Fields.Add(new ModelMedicalCertificateField { Name = "HoraFim", PracticeId = doctor.PracticeId, }); doctor.ModelMedicalCertificates.Add(medicalCertificate); } { var medicalCertificate = new ModelMedicalCertificate { Name = "Paciente necessita repouso", Text = "O paciente <%Paciente%> necessita de repouso do dia <%DiaInicio%> até o dia <%DiaFim%>.", PracticeId = doctor.PracticeId, }; medicalCertificate.Fields.Add(new ModelMedicalCertificateField { Name = "DiaInicio", PracticeId = doctor.PracticeId, }); medicalCertificate.Fields.Add(new ModelMedicalCertificateField { Name = "DiaFim", PracticeId = doctor.PracticeId, }); doctor.ModelMedicalCertificates.Add(medicalCertificate); } doctor.HealthInsurances.Add(new HealthInsurance { Name = "Particular", IsParticular = true, IsActive = true, PracticeId = doctor.PracticeId, ReturnTimeInterval = 30, }); }
public ActionResult Edit(MedicalCertificateViewModel[] medicalCertificates) { var formModel = medicalCertificates.Single(); ModelMedicalCertificate certificateModel = null; // validates the existence and the compliance of the certificate model if (formModel.ModelId.HasValue) { certificateModel = this.db.ModelMedicalCertificates.FirstOrDefault(mmc => mmc.Id == formModel.ModelId); if (certificateModel == null) { this.ModelState.AddModelError <MedicalCertificateViewModel>(m => m.ModelId, "O modelo de atestado informado não é válido"); } else { // for each field in the model, all must exist in the formModel if (certificateModel.Fields.Any(field => formModel.Fields.All(f => f.Name.ToLower() != field.Name.ToLower()))) { this.ModelState.AddModelError <MedicalCertificateViewModel>(m => m.Fields, "Dados inválidos. As informações recebidas não condizem com o modelo de atestado especificado"); } // #KNOWN ISSUE# The next statements shouldn't exist. The REQUIRED attribute should work :( // for all fields existing in the formModel, all must have a value for (var i = 0; i < formModel.Fields.Count; i++) { var field = formModel.Fields[i]; if (string.IsNullOrEmpty(field.Value)) { this.ModelState.AddModelError("Fields[" + i + "]", "O valor do campo é requerido"); } } } } if (!formModel.ModelId.HasValue && !formModel.Id.HasValue) { this.ModelState.AddModelError <MedicalCertificateViewModel>(m => m.ModelId, "É necessário informar o modelo do atestado"); } // validates the existence of the patient if (formModel.PatientId.HasValue && !this.db.Patients.Any(m => m.Id == formModel.PatientId)) { this.ModelState.AddModelError <MedicalCertificateViewModel>(m => m.ModelId, "O paciente informado não é válido"); } if (this.ModelState.IsValid) { MedicalCertificate certificate = null; if (formModel.Id == null) { certificate = new MedicalCertificate() { CreatedOn = this.GetUtcNow(), PatientId = formModel.PatientId.Value, PracticeId = this.DbUser.PracticeId, }; this.db.MedicalCertificates.AddObject(certificate); } else { certificate = this.db.MedicalCertificates.FirstOrDefault(r => r.Id == formModel.Id); if (certificate == null) { return(this.ObjectNotFound()); } } if (certificateModel != null) { certificate.ModelMedicalCertificateId = certificateModel.Id; certificate.Text = certificateModel.Text; } else { certificate.ModelMedicalCertificateId = null; } certificate.Patient.IsBackedUp = false; certificate.Fields.Update( formModel.Fields, (vm, m) => vm.Name == m.Name, (vm, m) => { m.Name = vm.Name; m.Value = vm.Value; m.PracticeId = this.DbUser.PracticeId; }, (m) => this.db.MedicalCertificateFields.DeleteObject(m)); certificate.IssuanceDate = this.ConvertToUtcDateTime(formModel.IssuanceDate.Value); this.db.SaveChanges(); // todo: use GetViewModel method: //var viewModel = GetViewModel(certificate); var viewModel = new MedicalCertificateViewModel { Id = certificate.Id, ModelId = certificate.ModelMedicalCertificateId, // the only situation in which ModelName will be null is when the model certificate has been removed ModelName = certificate.ModelMedicalCertificate != null ? certificate.ModelMedicalCertificate.Name : null, PatientId = certificate.PatientId, IssuanceDate = this.ConvertToLocalDateTime(certificate.IssuanceDate), Fields = (from f in certificate.Fields select new MedicalCertificateFieldViewModel() { Id = f.Id, Name = f.Name, Value = f.Value, }).ToList(), }; return(this.View("Details", viewModel)); } formModel.ModelOptions = this.db.ModelMedicalCertificates.ToList().Select(mmc => new SelectListItem() { Text = mmc.Name, Value = mmc.Id.ToString() }).ToList(); return(this.View("Edit", formModel)); }