示例#1
0
        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));
        }
示例#2
0
        /// <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,
            });
        }
示例#3
0
        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));
        }