public DTO_DETALLE_FACTURA GetDetalleFacturaById(int ID_FACTURA)
        {
            try
            {
                using (LQCEEntities context = new LQCEEntities())
                {
                    RepositorioVISTA_REPORTE_FACTURA _RepositorioVISTA_REPORTE_FACTURA = new RepositorioVISTA_REPORTE_FACTURA(context);
                    RepositorioFACTURACION _RepositorioFACTURACION = new RepositorioFACTURACION(context);

                    var f = _RepositorioVISTA_REPORTE_FACTURA.GetById(ID_FACTURA);
                    if (f == null)
                        throw new Exception("No se encuentra información de la factura");
                    var pagos = _RepositorioFACTURACION.GetPagosByIdFacturaWithReferencesFull(ID_FACTURA);
                    var detalle_factura = _RepositorioFACTURACION.GetFacturaDetalleByIdFactura(ID_FACTURA);
                    var notas_cobro = _RepositorioFACTURACION.GetNotasCobrosByIdFacturaWithReferencesFull(ID_FACTURA);

                    DTO_DETALLE_FACTURA _DTO_FACTURA = new DTO_DETALLE_FACTURA();
                    _DTO_FACTURA.ID_FACTURA = f.ID;
                    _DTO_FACTURA.NUMERO_FACTURA = f.NUMERO_FACTURA;
                    _DTO_FACTURA.RUT_CLIENTE = f.RUT_CLIENTE;
                    _DTO_FACTURA.NOMBRE_CLIENTE = f.NOMBRE_CLIENTE;
                    _DTO_FACTURA.FECHA_EMISION = f.FECHA_FACTURACION;
                    _DTO_FACTURA.VALOR_TOTAL = f.TOTAL;
                    _DTO_FACTURA.VALOR_PAGADO = f.VALOR_PAGADO ?? 0;
                    _DTO_FACTURA.PAGOS_REGISTRADOS = f.PAGOS_REGISTRADOS ?? 0;
                    _DTO_FACTURA.SALDO_DEUDOR = f.SALDO_DEUDOR ?? 0;
                    _DTO_FACTURA.PAGADA = f.PAGADA;

                    _DTO_FACTURA.LISTA_PRESTACIONES = (from df in detalle_factura
                                                       where df.ACTIVO && df.PRESTACION.ACTIVO
                                                       select new DTO_DETALLE_FACTURA_PRESTACION
                                                       {
                                                           ID_CLIENTE = df.FACTURA.CLIENTE.ID,
                                                           ID_FACTURA_DETALLE = df.ID,
                                                           NUMERO_FICHA = df.PRESTACION.ID,
                                                           MONTO_TOTAL = df.MONTO_TOTAL,
                                                           MONTO_COBRADO = df.MONTO_COBRADO,
                                                           FECHA_RECEPCION = df.PRESTACION.FECHA_RECEPCION,
                                                           NOMBRE_PACIENTE = df.PRESTACION.PRESTACION_HUMANA != null ? df.PRESTACION.PRESTACION_HUMANA.NOMBRE : df.PRESTACION.PRESTACION_VETERINARIA.NOMBRE
                                                       }).ToList();

                    _DTO_FACTURA.LISTA_COBROS = (from c in notas_cobro
                                                 select new DTO_DETALLE_FACTURA_COBRO
                                                 {
                                                     ID_NOTA_COBRO = c.ID,
                                                     FECHA_COBRO = c.COBRO.FECHA_COBRO,
                                                     NOMBRE_TIPO_COBRO = c.COBRO.TIPO_COBRO.NOMBRE,
                                                     MONTO_PENDIENTE_TOTAL = c.NOTA_COBRO_DETALLE.Where(ncd => ncd.ACTIVO).Sum(ncd => ncd.MONTO_PENDIENTE),
                                                     MONTO_PENDIENTE_FACTURA = c.NOTA_COBRO_DETALLE.Where(ncd => ncd.ACTIVO && ncd.FACTURA.ID == ID_FACTURA).Sum(ncd => ncd.MONTO_PENDIENTE)
                                                 }).ToList();

                    _DTO_FACTURA.LISTA_PAGOS = (from p in pagos
                                                select new DTO_DETALLE_FACTURA_PAGO
                                                {
                                                    ID_PAGO = p.ID,
                                                    FECHA_PAGO = p.FECHA_PAGO,
                                                    MONTO_PAGO_TOTAL = p.MONTO_PAGO,
                                                    MONTO_PAGO_FACTURA = p.PAGO_DETALLE.Where(pd => pd.ACTIVO
                                                    && pd.FACTURA_DETALLE.ACTIVO
                                                    && pd.FACTURA_DETALLE.FACTURA.ID == ID_FACTURA).Sum(pd => pd.MONTO)
                                                }).ToList();

                    return _DTO_FACTURA;
                }
            }
            catch (Exception ex)
            {
                ISException.RegisterExcepcion(ex);
                Error = ex.Message;
                throw ex;
            }
        }
        protected List<DTO_REPORTE_DETALLEFACTURA_PRESTACION> GetReporteDetalleFacturaByID_FACTURA(int IdFactura)
        {
            Init();
            try
            {
                using (LQCEEntities context = new LQCEEntities())
                {
                    RepositorioFACTURACION _RepositorioFACTURACION = new RepositorioFACTURACION(context);

                    var q = _RepositorioFACTURACION.GetFacturaDetalleByIdFactura(IdFactura);

                    var lista = (from fd in q
                            select new DTO_REPORTE_DETALLEFACTURA_PRESTACION
                            {
                                ID_FACTURA = fd.FACTURA.ID,
                                ID_CLIENTE = fd.FACTURA.CLIENTE.ID,
                                NOMBRE_CLIENTE = fd.FACTURA.NOMBRE_CLIENTE,
                                RUT_CLIENTE = fd.FACTURA.RUT_CLIENTE,
                                DETALLE = fd.FACTURA.DETALLE,
                                ID_FACTURA_DETALLE = fd.ID,
                                NUMERO_FICHA = fd.PRESTACION.ID,
                                MONTO_TOTAL = fd.MONTO_TOTAL,
                                FECHA_RECEPCION = fd.PRESTACION.FECHA_RECEPCION,
                                NOMBRE = fd.PRESTACION.PRESTACION_HUMANA != null ? fd.PRESTACION.PRESTACION_HUMANA.NOMBRE : fd.PRESTACION.PRESTACION_VETERINARIA.NOMBRE,
                                MEDICO = fd.PRESTACION.MEDICO,
                                EXAMENES = ""
                            }).ToList();

                    foreach (var i in lista)
                    {
                        string examenes = "";
                        FACTURA_DETALLE _FACTURA_DETALLE = _RepositorioFACTURACION.GetFacturaDetalleByIdDetalleFactura(i.ID_FACTURA_DETALLE).FirstOrDefault();
                        if (_FACTURA_DETALLE != null)
                        {
                            if(_FACTURA_DETALLE.PRESTACION != null)
                            {
                                foreach (var e in _FACTURA_DETALLE.PRESTACION.PRESTACION_EXAMEN.Where(pe => pe.ACTIVO))
                                {
                                    if(e.EXAMEN != null)
                                    {
                                    if (!string.IsNullOrEmpty(examenes))
                                        examenes += ", ";
                                    examenes += e.EXAMEN.NOMBRE;
                                    }
                                }
                            }
                        }
                        i.EXAMENES = examenes;
                    }
                    return lista;
                }
            }
            catch (Exception ex)
            {
                ISException.RegisterExcepcion(ex);
                Error = ex.Message;
                throw ex;
            }
        }