public void Delete(int Id)
        {
            Init();
            try
            {
                 using (LQCEEntities context = new LQCEEntities())
                {
                    RepositorioPRESTACION_HUMANA repositorio = new RepositorioPRESTACION_HUMANA(context);
                    PRESTACION_HUMANA _PRESTACION_HUMANA = repositorio.GetById(Id);

                    if(Equals(_PRESTACION_HUMANA ,null))
                    {
                        throw new Exception(String.Concat("No se ha encontrado PRESTACION_HUMANA con Id =",Id.ToString()));
                    }

                    _PRESTACION_HUMANA.ACTIVO = false;

                    context.SaveChanges();
                }
            }
            catch(Exception ex)
            {
                 ISException.RegisterExcepcion(ex);
                Error = ex.Message;
                 throw ex;
            }
        }
        private List<string> ValidarPrestacionHumana(LQCEEntities context, CARGA_PRESTACIONES_HUMANAS_DETALLE objDetalle)
        {
            RepositorioPRESTACION_HUMANA _RepositorioPRESTACION_HUMANA = new RepositorioPRESTACION_HUMANA(context);
            RepositorioCLIENTE _RepositorioCLIENTE = new RepositorioCLIENTE(context);
            RepositorioCLIENTE_SINONIMO _RepositorioCLIENTE_SINONIMO = new RepositorioCLIENTE_SINONIMO(context);
            RepositorioPREVISION _RepositorioPREVISION = new RepositorioPREVISION(context);
            RepositorioGARANTIA _RepositorioGARANTIA = new RepositorioGARANTIA(context);
            RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO _RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO = new RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO(context);
            RepositorioEXAMEN _RepositorioEXAMEN = new RepositorioEXAMEN(context);
            RepositorioEXAMEN_SINONIMO _RepositorioEXAMEN_SINONIMO = new RepositorioEXAMEN_SINONIMO(context);

            var EstadoConError = _RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO.GetById((int)ENUM_CARGA_PRESTACIONES_DETALLE_ESTADO.ConError);
            if(EstadoConError == null)
                throw new Exception("No se encuentra registro de error en la tabla Estado de Detalle Carga Prestaciones");

            var EstadoValidado = _RepositorioCARGA_PRESTACIONES_DETALLE_ESTADO.GetById((int)ENUM_CARGA_PRESTACIONES_DETALLE_ESTADO.Validado);
            if (EstadoValidado == null)
                throw new Exception("No se encuentra registro de error en la tabla Estado de Detalle Carga Prestaciones");

            List<string> ListaValidaciones = new List<string>();

            // Nombre
            if (string.IsNullOrEmpty(objDetalle.NOMBRE))
            {
                ListaValidaciones.Add("No se ha señalado nombre del paciente");
            }

            // Ficha
            if (string.IsNullOrEmpty(objDetalle.FICHA))
            {
                ListaValidaciones.Add("No se ha señalado numero de ficha");
            }
            else
            {
                int? _ficha = ISConvert.ToNullableInteger(objDetalle.FICHA);
                if (!_ficha.HasValue)
                {
                    ListaValidaciones.Add("FICHA debe ser numérico");
                }
                else
                {
                    objDetalle.VALOR_FICHA = _ficha.Value;

                    var objPrestacionHumana = _RepositorioPRESTACION_HUMANA.GetById(_ficha.Value);
                    if (objPrestacionHumana != null)
                        ListaValidaciones.Add("Ya existe una prestación en el sistema con el mismo número de ficha");
                }
            }

            // Fecha de Recepcion
            if (string.IsNullOrEmpty(objDetalle.FECHA_RECEPCION))
            {
                ListaValidaciones.Add("No se ha señalado FECHA DE RECEPCIÓN en la ficha");
            }
            else
            {
                DateTime? pasoFR = ISConvert.ToNullableDateTime(objDetalle.FECHA_RECEPCION);
                if (!pasoFR.HasValue)
                {
                    ListaValidaciones.Add("FECHA DE RECEPCIÓN no tiene el formato correcto");
                }
                else
                {
                    objDetalle.VALOR_FECHA_RECEPCION = pasoFR.Value;
                }
            }

            // Cliente
            if (string.IsNullOrEmpty(objDetalle.PROCEDENCIA))
            {
                ListaValidaciones.Add("No se ha señalado PROCEDENCIA en la ficha");
            }
            else
            {
                var objCliente = _RepositorioCLIENTE.GetByFilter(null, null, null, null, "", objDetalle.PROCEDENCIA).FirstOrDefault();
                if (objCliente != null)
                {
                    objDetalle.CLIENTE = objCliente;
                }
                else
                {
                    var objClienteSinonimo = _RepositorioCLIENTE_SINONIMO.GetByFilterWithReferences(null, objDetalle.PROCEDENCIA).FirstOrDefault();
                    if (objClienteSinonimo != null)
                    {
                        objDetalle.CLIENTE = objClienteSinonimo.CLIENTE;
                    }
                    else
                    {
                        ListaValidaciones.Add("No se ha podido identificar PROCEDENCIA de la prestación");
                    }
                }
            }

            // Prevision
            if (string.IsNullOrEmpty(objDetalle.PREVISION))
            {
                //ListaValidaciones.Add("No se ha señalado PREVISION en la ficha");
            }
            else
            {
                var objPrevision = _RepositorioPREVISION.GetByFilter(objDetalle.PREVISION).FirstOrDefault();
                if (objPrevision != null)
                {
                    objDetalle.PREVISION1 = objPrevision;
                }
                else
                {
                    ListaValidaciones.Add("No se ha podido identificar la PREVISION en la ficha");
                }
            }

            // Garantia
            if (string.IsNullOrEmpty(objDetalle.GARANTIA))
            {
                //ListaValidaciones.Add("No se ha señalado GARANTIA en la ficha");
            }
            else
            {
                var objGarantia = _RepositorioGARANTIA.GetByFilter(objDetalle.GARANTIA).FirstOrDefault();
                if (objGarantia != null)
                {
                    objDetalle.GARANTIA1 = objGarantia;
                }
                else
                {
                    ListaValidaciones.Add("No se ha podido identificar la GARANTIA en la ficha");
                }
            }

               // Total
            if (string.IsNullOrEmpty(objDetalle.TOTAL))
            {
                ListaValidaciones.Add("No se ha señalado TOTAL en la ficha");
            }
            else
            {
                int? _total = ISConvert.ToNullableInteger(objDetalle.TOTAL);
                if (!_total.HasValue)
                {
                    ListaValidaciones.Add("Total no tiene el formato correcto");
                }
                else
                {
                    objDetalle.VALOR_TOTAL = _total.Value;
                }
            }

            // Examenes
            int contadorExamen = 1;
            int contadorExamenesRegistrados = 0;
            int contadorValorExamen = 0;
            foreach (var item in objDetalle.CARGA_PRESTACIONES_HUMANAS_EXAMEN.Where(pe => pe.ACTIVO))
            {
                if (!string.IsNullOrEmpty(item.VALOR_EXAMEN) || !string.IsNullOrEmpty(item.NOMBRE_EXAMEN))
                {
                    contadorExamenesRegistrados++;
                    if (string.IsNullOrEmpty(item.NOMBRE_EXAMEN))
                    {
                        ListaValidaciones.Add("No ha señalado nombre de examen [" + contadorExamen.ToString() + "]");
                    }
                    else
                    {
                        bool ExamenExiste = false;
                        var objExamen = _RepositorioEXAMEN.GetByFilter((int)ENUM_TIPO_PRESTACION.Humanas, "", item.NOMBRE_EXAMEN).FirstOrDefault();
                        if (objExamen != null)
                        {
                            ExamenExiste = true;
                            item.EXAMEN = objExamen;
                        }
                        else
                        {
                            var objExamenSinonimo = _RepositorioEXAMEN_SINONIMO.GetByFilterWithReferences(null, item.NOMBRE_EXAMEN).FirstOrDefault();
                            if (objExamenSinonimo != null)
                            {
                                ExamenExiste = true;
                                item.EXAMEN = objExamenSinonimo.EXAMEN;
                            }
                            else
                            {
                                ListaValidaciones.Add("No se ha encontrado información del examen [" + contadorExamen.ToString() + "; " + item.NOMBRE_EXAMEN  + "]");
                            }
                        }
                        if (ExamenExiste && string.IsNullOrEmpty(item.VALOR_EXAMEN))
                        {
                            ListaValidaciones.Add("No se ha señalado valor del examen [" + contadorExamen.ToString() + "; " + item.NOMBRE_EXAMEN + "]");
                        }
                    }
                    if (string.IsNullOrEmpty(item.VALOR_EXAMEN))
                    {
                        //ListaValidaciones.Add("No se ha señalado valor de examen [" + contadorExamen.ToString() + "]");
                    }
                    else
                    {
                        int? _valorExamen = ISConvert.ToNullableInteger(item.VALOR_EXAMEN);
                        if (!_valorExamen.HasValue)
                        {
                            ListaValidaciones.Add("Valor de examen no tiene el formato correcto [" + contadorExamen.ToString() + "]");
                        }
                        //else if (_valorExamen == 0)
                        //{
                        //    //ListaValidaciones.Add("Valor de examen no tiene el formato correcto [" + contadorExamen.ToString() + "]");
                        //}
                        else
                        {
                            contadorValorExamen++;
                            item.VALOR_VALOR_EXAMEN = _valorExamen;
                        }
                    }
                     //PENDIENTE: Validar que el valor del examen sea igual al convenio

                    //context.ApplyPropertyChanges("CARGA_PRESTACIONES_HUMANAS_EXAMEN", item);
                }
                else if (contadorExamen == 1)
                {
                    ListaValidaciones.Add("No ha señalado nombre y valor de examen [" + contadorExamen.ToString() + "]");
                }
                contadorExamen++;
            }

            if (contadorExamenesRegistrados == 0)
                ListaValidaciones.Add("La ficha debe registrar al menos 1 examen. ");
            if (contadorValorExamen == 0)
                ListaValidaciones.Add("La ficha debe registrar al menos 1 examen con valor. ");

            if (ListaValidaciones.Any())
            {
                objDetalle.CARGA_PRESTACIONES_DETALLE_ESTADO = EstadoConError;
                string errores = "";
                foreach (var item in ListaValidaciones)
                    errores += item + Environment.NewLine;
                objDetalle.MENSAJE_ERROR = errores;
            }
            else
            {
                objDetalle.CARGA_PRESTACIONES_DETALLE_ESTADO = EstadoValidado;
                objDetalle.MENSAJE_ERROR = "";
            }
            //context.ApplyPropertyChanges("CARGA_PRESTACIONES_HUMANAS_DETALLE", objDetalle);

            return ListaValidaciones;
        }
        public void Update(int Id, string NOMBRE, string RUT = "", string EDAD = "", string TELEFONO = "", string PAGADO = "")
        {
            Init();
            try
            {
                 using (LQCEEntities context = new LQCEEntities())
                {
                    RepositorioPRESTACION_HUMANA repositorio = new RepositorioPRESTACION_HUMANA(context);
                    PRESTACION_HUMANA _PRESTACION_HUMANA = repositorio.GetById(Id);
                    if(Equals(_PRESTACION_HUMANA,null))
                    {
                        throw new Exception(String.Concat("No se ha encontrado PRESTACION_HUMANA con Id =",Id.ToString()));
                    }

                    //properties

                    if (!string.IsNullOrEmpty(NOMBRE))
                    {
                        _PRESTACION_HUMANA.NOMBRE = NOMBRE;
                    }
                    if (!string.IsNullOrEmpty(RUT))
                    {
                        _PRESTACION_HUMANA.RUT = RUT;
                    }
                    if (!string.IsNullOrEmpty(EDAD))
                    {
                        _PRESTACION_HUMANA.EDAD = EDAD;
                    }
                    if (!string.IsNullOrEmpty(TELEFONO))
                    {
                        _PRESTACION_HUMANA.TELEFONO = TELEFONO;
                    }
                    if (!string.IsNullOrEmpty(PAGADO))
                    {
                        _PRESTACION_HUMANA.PAGADO = PAGADO;
                    }

                    //parents

                    context.SaveChanges();
                }
            }
            catch(Exception ex)
            {
                 ISException.RegisterExcepcion(ex);
                Error = ex.Message;
                 throw ex;
            }
        }
 public PRESTACION_HUMANA GetByIdWithReferences(int ID)
 {
     Init();
     try
     {
         using (LQCEEntities context = new LQCEEntities())
         {
             RepositorioPRESTACION_HUMANA repositorio = new RepositorioPRESTACION_HUMANA(context);
             return repositorio.GetByIdWithReferences(ID);
         }
     }
     catch (Exception ex)
     {
          ISException.RegisterExcepcion(ex);
         Error = ex.Message;
         throw ex;
     }
 }
 public List<PRESTACION_HUMANA> GetByFilterWithReferences(string NOMBRE = "", string RUT = "", string EDAD = "", string TELEFONO = "", string PAGADO = "")
 {
     Init();
     try
     {
          using (LQCEEntities context = new LQCEEntities())
         {
             RepositorioPRESTACION_HUMANA repositorio = new RepositorioPRESTACION_HUMANA(context);
             return repositorio.GetByFilterWithReferences(NOMBRE, RUT, EDAD, TELEFONO, PAGADO).OrderBy(i => i.ID).ToList();
         }
     }
     catch (Exception ex)
     {
          ISException.RegisterExcepcion(ex);
         Error = ex.Message;
         throw ex;
     }
 }
 public List<PRESTACION_HUMANA> GetAllWithReferences()
 {
     Init();
     try
     {
         using (LQCEEntities context = new LQCEEntities())
         {
             RepositorioPRESTACION_HUMANA repositorio = new RepositorioPRESTACION_HUMANA(context);
                                 return repositorio.GetAllWithReferences().OrderBy(i => i.NOMBRE).ToList();
                             }
     }
     catch (Exception ex)
        {
          ISException.RegisterExcepcion(ex);
         Error = ex.Message;
         throw ex;
     }
 }