public DataTable GetByIdSocioSinConvenioDT(int idSocio, int mostrarImpagas, int mostrarValoresActualizados)
        {
            try
            {
                int controlImpagas = 0;
                if (mostrarImpagas == 1)
                {
                    controlImpagas = 3;
                }
                DataTable FacturasDetalles = new DataTable();
                MySqlCommand _comando = new MySqlCommand(String.Format(
               " call facturas_GetByIdSocio('{0}', '{1}')", idSocio, controlImpagas), dbConectorMySql.ObtenerConexion());

                //MySqlDataAdapter _da = new MySqlDataAdapter(_comando);
                //_da.Fill(DTIntimaciones);

                MySqlDataReader _reader = _comando.ExecuteReader();

                FacturasDetalles.Load(_reader);

                using (cooperativaEntities bd = new cooperativaEntities())
                {
                //    var Listar = (from f in bd.facturas

                //                  join e in bd.cod_estados_pago on f.id_estadoPago equals e.id_estado_pago
                //                  join m in bd.socios_mediciones on f.id_medicion equals m.id_medicion
                //                  join pr in bd.periodos on f.id_periodo equals pr.id_periodo
                //                  #region
                //                  join detalle1 in
                //                      (from d in bd.facturas_detalles
                //                       where d.id_concepto == 23  //IVA
                //                       select new
                //                       {
                //                           d.id_factura,
                //                           d.importe,
                //                           importea = d != null ? (int?)d.importe : null
                //                       }) on f.id_factura equals detalle1.id_factura
                //                  into temp
                //                  from i in temp.DefaultIfEmpty()

                //                  join detalle2 in
                //                      (from d in bd.facturas_detalles
                //                       where d.id_concepto == 18  //Recargo
                //                       select new
                //                       {
                //                           d.id_factura,
                //                           d.importe
                //                       }) on f.id_factura equals detalle2.id_factura
                //                  into temp2
                //                  from r in temp2.DefaultIfEmpty()

                //                  join detalle3 in
                //                      (from d in bd.facturas_detalles
                //                       where d.id_concepto == 20  //IVARECARGO
                //                       select new
                //                       {
                //                           d.id_factura,
                //                           d.importe
                //                       }) on f.id_factura equals detalle3.id_factura
                //                  into temp3
                //                  from ir in temp3.DefaultIfEmpty()

                //                  join detalle4 in
                //                      (from d in bd.facturas_detalles
                //                       where d.id_concepto == 21  //DESCUENTO
                //                       select new
                //                       {
                //                           d.id_factura,
                //                           d.importe
                //                       }) on f.id_factura equals detalle4.id_factura
                //                  into temp4
                //                  from desc in temp4.DefaultIfEmpty()

                //                  join detalle5 in
                //                      (from d in bd.facturas_detalles
                //                       where d.id_concepto == 22   //IVADESCUENTO
                //                       select new
                //                       {
                //                           d.id_factura,
                //                           d.importe
                //                       }) on f.id_factura equals detalle5.id_factura
                //                  into temp5
                //                  from idesc in temp5.DefaultIfEmpty()

                //                  join yr in
                //                      (from fx in bd.facturas
                //                       join mx in bd.socios_mediciones on fx.id_medicion equals mx.id_medicion

                //                       where fx.id_socio == idSocio
                //                       orderby fx.id_factura descending
                //                       select new
                //                       {
                //                           fx.id_factura,
                //                           mx.lectura,
                //                           fx.id_socio
                //                       }) on idSocio equals yr.id_socio
                //                    into tempo
                //                  from df in tempo.Take(1).DefaultIfEmpty()

                //                  #endregion
                //                  where f.id_socio == idSocio && (f.id_estadoPago < controlImpagas | controlImpagas == 0)
                //                  && (f.id_convenio==0 | f.id_convenio ==null)
                //                  select new
                //                  {
                //                      Periodo = f.id_periodo,
                //                      Factura = f.id_factura,
                //                      FechaFact = f.fechaPago,
                //                      FechaVenc = pr.fecha_primer_venc,
                //                      idEstado = e.id_estado_pago,
                //                      Estado = e.estado_pago,
                //                      Total = f.importeTotal,
                //                      Neto = f.importeNeto,
                //                      IVA = (Decimal?)i.importe,

                //                      Recargo = (Decimal?)r.importe,

                //                      IVARecargo = (Decimal?)ir.importe,

                //                      Descuento = (Decimal?)desc.importe,

                //                      IVADescuento = (Decimal?)idesc.importe,

                //                      Cobrado = f.cobrado,
                //                      Consumo = m.consumo,
                //                      Lectura = m.lectura,

                //                      LecturaAnt = (Int32?)df.lectura,
                //                      DiasVenc = 0

                //                  }).ToList();

                //    Commons oCommons = new Commons();
                //    DataTable FacturasDetalles = oCommons.convertToTable(Listar);

                    foreach (DataRow rowFactDet in FacturasDetalles.Rows)
                    {
                        CalculosFactura oCalculosFactura = new CalculosFactura();
                        int idFactura = int.Parse(rowFactDet["Factura"].ToString());
                        if (int.Parse(rowFactDet["idEstado"].ToString()) == 3)
                        {
                            //paga muestro lo de la fact. como lo hice al principio

                        }
                        else
                        {
                            //calculo

                            // rowFactDet["IVA"] = oCalculosFactura.CalcularIVA(idFactura);
                            if (mostrarValoresActualizados == 1)
                            {
                                Decimal rec = oCalculosFactura.CalcularRecargo(idFactura);
                                rowFactDet["Recargo"] = rec;
                                rowFactDet["IVARecargo"] = oCalculosFactura.CalcularIVARecargoNuevo(rec, idSocio);
                                rowFactDet["Total"] = decimal.Parse(rowFactDet["Total"].ToString()) + decimal.Parse(rowFactDet["Recargo"].ToString()) + decimal.Parse(rowFactDet["IVARecargo"].ToString());
                            }
                            else
                            {
                                rowFactDet["Recargo"] = 0;
                                rowFactDet["IVARecargo"] = 0;
                            }

                            rowFactDet["Descuento"] = oCalculosFactura.CalcularDescuento(idFactura);
                            rowFactDet["IVADescuento"] = oCalculosFactura.CalcularIVADescuento(idFactura);

                        }

                        rowFactDet["LecturaAnt"] = oCalculosFactura.ObtenerLecturaAnterior(idFactura);

                        rowFactDet["FechaVenc"] = oCalculosFactura.ObtenerFechaVenc(idFactura);

                        rowFactDet["DiasVenc"] = oCalculosFactura.ObtenerDiasDeVencimiento(idFactura);
                    }
                    return FacturasDetalles;
                }

            }
            catch (Exception)
            {
                return null;
            }
        }
        public DataTable GetByIdFacturaDT(int idFactura)
        {
            try
            {
                int controlImpagas = 0;

                using (cooperativaEntities bd = new cooperativaEntities())
                {

                    var Listar = (from f in bd.facturas

                                  join e in bd.cod_estados_pago on f.id_estadoPago equals e.id_estado_pago
                                  join m in bd.socios_mediciones on f.id_medicion equals m.id_medicion
                                  join pr in bd.periodos on f.id_periodo equals pr.id_periodo
                                  #region
                                  join detalle1 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 23  //IVA
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe,
                                           importea = d != null ? (int?)d.importe : null
                                       }) on f.id_factura equals detalle1.id_factura
                                  into temp
                                  from i in temp.DefaultIfEmpty()

                                  join detalle2 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 18  //Recargo
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle2.id_factura
                                  into temp2
                                  from r in temp2.DefaultIfEmpty()

                                  join detalle3 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 20  //IVARECARGO
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle3.id_factura
                                  into temp3
                                  from ir in temp3.DefaultIfEmpty()

                                  join detalle4 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 21  //DESCUENTO
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle4.id_factura
                                  into temp4
                                  from desc in temp4.DefaultIfEmpty()

                                  join detalle5 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 22   //IVADESCUENTO
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle5.id_factura
                                  into temp5
                                  from idesc in temp5.DefaultIfEmpty()

                                  join detalle6 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 5   //CONVENIOS
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle6.id_factura
                                  into temp6
                                  from fconv in temp6.DefaultIfEmpty()

                                  join detalle7 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 4   //ACCIONES
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle7.id_factura
                                 into temp7
                                  from facc in temp7.DefaultIfEmpty()

                                  join yr in
                                      (from fx in bd.facturas
                                       join mx in bd.socios_mediciones on fx.id_medicion equals mx.id_medicion

                                       where fx.id_socio == idFactura
                                       orderby fx.id_factura descending
                                       select new
                                       {
                                           fx.id_factura,
                                           mx.lectura,
                                           fx.id_socio
                                       }) on idFactura equals yr.id_factura
                                    into tempo
                                  from df in tempo.Take(1).DefaultIfEmpty()

                                  #endregion
                                  where f.id_factura == idFactura
                                  select new
                                  {
                                      Periodo = f.id_periodo,
                                      Factura = f.id_factura,
                                      FechaFact = f.fechaPago,
                                      FechaVenc = pr.fecha_primer_venc,
                                      idEstado = e.id_estado_pago,
                                      Estado = e.estado_pago,
                                      Total = f.importeTotal,
                                      Neto = f.importeNeto,
                                      IVA = (Decimal?)i.importe,

                                      Recargo = (Decimal?)r.importe,

                                      IVARecargo = (Decimal?)ir.importe,

                                      Descuento = (Decimal?)desc.importe,

                                      IVADescuento = (Decimal?)idesc.importe,

                                      Cobrado = f.cobrado,
                                      Consumo = m.consumo,
                                      Lectura = m.lectura,

                                      LecturaAnt = (Int32?)df.lectura,
                                      DiasVenc = 0,

                                      // Status = aa == null ? (bool?)null : aa.Online;
                                      Convenio = (Decimal?)fconv.importe==null? 0 :(Decimal?)fconv.importe,
                                      Acciones = (Decimal?)facc.importe == null ? 0 : (Decimal?)facc.importe

                                  }).ToList();

                    Commons oCommons = new Commons();
                    DataTable FacturasDetalles = oCommons.convertToTable(Listar);

                    foreach (DataRow rowFactDet in FacturasDetalles.Rows)
                    {
                        CalculosFactura oCalculosFactura = new CalculosFactura();

                        if (int.Parse(rowFactDet["idEstado"].ToString()) == 3)
                        {
                            //paga muestro lo de la fact. como lo hice al principio

                        }
                        else
                        {
                            rowFactDet["Recargo"] = oCalculosFactura.CalcularRecargo(idFactura);
                            rowFactDet["IVARecargo"] = oCalculosFactura.CalcularIVARecargo(idFactura);
                            rowFactDet["Total"] = decimal.Parse(rowFactDet["Total"].ToString()) + decimal.Parse(rowFactDet["Recargo"].ToString()) + decimal.Parse(rowFactDet["IVARecargo"].ToString());

                            rowFactDet["Descuento"] = oCalculosFactura.CalcularDescuento(idFactura);
                            rowFactDet["IVADescuento"] = oCalculosFactura.CalcularIVADescuento(idFactura);
                        }

                        rowFactDet["LecturaAnt"] = oCalculosFactura.ObtenerLecturaAnterior(idFactura);

                        rowFactDet["FechaVenc"] = oCalculosFactura.ObtenerFechaVenc(idFactura);

                        rowFactDet["DiasVenc"] = oCalculosFactura.ObtenerDiasDeVencimiento(idFactura);
                    }
                    return FacturasDetalles;
                }

            }
            catch (Exception)
            {
                return null;
            }
        }
        public DataTable GetByIdSocioDT(int idSocio, int mostrarImpagas, int mostrarValoresActualizados)
        {
            try
            {
                int controlImpagas = 0;
                if (mostrarImpagas == 1)
                {
                    controlImpagas = 3;
                }

                DataTable FacturasDetalles = new DataTable();
                MySqlCommand _comando = new MySqlCommand(String.Format(
               " call facturas_GetByIdSocio('{0}', '{1}')", idSocio, controlImpagas), dbConectorMySql.ObtenerConexion());

                //MySqlDataAdapter _da = new MySqlDataAdapter(_comando);
                //_da.Fill(DTIntimaciones);

                MySqlDataReader _reader = _comando.ExecuteReader();

                FacturasDetalles.Load(_reader);

                using (cooperativaEntities bd = new cooperativaEntities())
                {

                    #region
                    //new DataTable("FacturasBySocio");

                    //DataColumn FacturasBySocioCol = FacturasBySocio.Columns.Add("Periodo");
                    //FacturasBySocio.Columns.Add("Factura");
                    //FacturasBySocio.Columns.Add("Estado");
                    //FacturasBySocio.Columns.Add("Total");
                    //FacturasBySocio.Columns.Add("Neto");
                    //FacturasBySocio.Columns.Add("IVA");
                    //FacturasBySocio.Columns.Add("Recargo");
                    //FacturasBySocio.Columns.Add("IVARecargo");
                    //FacturasBySocio.Columns.Add("Descuento");
                    //FacturasBySocio.Columns.Add("IVADescuento");
                    //FacturasBySocio.Columns.Add("Cobrado");
                    //FacturasBySocio.Columns.Add("Consumo");
                    //FacturasBySocio.Columns.Add("Lectura");
                    //FacturasBySocio.Columns.Add("LecturaAnt");

                    //var facturasConsulta = (from fac in bd.facturas
                    //                        where fac.id_socio == idSocio
                    //                        select fac).ToList();
                    //DataTable facturasDT = oCommons.convertToTable(facturasConsulta);

                    //var detallesConsulta = (from d in bd.facturas_detalles
                    //                        join fasd in bd.facturas on d.id_factura equals fasd.id_factura
                    //                        where fasd.id_socio == idSocio
                    //                        select d).ToList();
                    //DataTable detallesDT = oCommons.convertToTable(detallesConsulta);

                    //foreach (DataRow row in facturasDT.Rows)
                    //{
                    //    DataRow rowaux =  FacturasBySocio.NewRow();

                    //    rowaux["Periodo"] =row["id_periodo"];
                    //    rowaux["Factura"] =row["id_factura"];
                    //    EstadosPagoImplement oEstadosPagoImplement = new EstadosPagoImplement();

                    //    rowaux["Estado"] = oEstadosPagoImplement.Get(int.Parse(row["id_estadoPago"].ToString())).estado_pago;
                    //    rowaux["Total"] =row["importeTotal"];
                    //    rowaux["Neto"] =row["importeNeto"];

                    //    foreach (DataRow rowD in detallesDT.Rows)
                    //    {
                    //        if (int.Parse(rowD["id_concepto"].ToString()) == 2)
                    //        {
                    //            rowaux["IVA"] = decimal.Parse(rowD["importe"].ToString());
                    //        }
                    //        if (int.Parse(rowD["id_concepto"].ToString()) == 2)
                    //        {
                    //            rowaux["Recargo"] = decimal.Parse(rowD["importe"].ToString());
                    //        }
                    //        if (int.Parse(rowD["id_concepto"].ToString()) == 2)
                    //        {
                    //            rowaux["IVARecargo"] = decimal.Parse(rowD["importe"].ToString());
                    //        }
                    //        if (int.Parse(rowD["id_concepto"].ToString()) == 2)
                    //        {
                    //            rowaux["Descuento"] = decimal.Parse(rowD["importe"].ToString());
                    //        }
                    //        if (int.Parse(rowD["id_concepto"].ToString()) == 2)
                    //        {
                    //            rowaux["IVADescuento"] = decimal.Parse(rowD["importe"].ToString());
                    //        }
                    //    }

                    //    rowaux["Cobrado"] =row["cobrado"];

                    //    SocioMedicionImplement oSocioMedicionImplement = new SocioMedicionImplement();

                    //    rowaux["Consumo"] = oSocioMedicionImplement.Get(int.Parse(row["id_medicion"].ToString())).consumo;

                    //    rowaux["Lectura"] = oSocioMedicionImplement.Get(int.Parse(row["id_medicion"].ToString())).lectura;

                    //    DateTime? pepe = oSocioMedicionImplement.Get(int.Parse(row["id_medicion"].ToString())).fecha_lectura;
                    //    if (pepe != null)
                    //    {
                    //        rowaux["LecturaAnt"] = (from f2 in bd.facturas
                    //                                join sm2 in bd.socios_mediciones on f2.id_medicion equals sm2.id_medicion
                    //                                where f2.id_socio == idSocio & sm2.fecha_lectura < pepe
                    //                                orderby sm2.fecha_lectura descending
                    //                                select new
                    //                                {
                    //                                    sm2.lectura
                    //                                }).Single().lectura;
                    //    }
                    //    FacturasBySocio.Rows.Add(rowaux);
                    //}

                    //return FacturasBySocio;

                    #endregion
                    #region viejo EF
                    /*
                    var Listar = (from f in bd.facturas

                                  join e in bd.cod_estados_pago on f.id_estadoPago equals e.id_estado_pago
                                  join m in bd.socios_mediciones on f.id_medicion equals m.id_medicion
                                  join pr in bd.periodos on f.id_periodo equals pr.id_periodo
                                  #region
                                  join detalle1 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 23  //IVA
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe,
                                           importea = d != null ? (int?)d.importe : null
                                       }) on f.id_factura equals detalle1.id_factura
                                  into temp
                                  from i in temp.DefaultIfEmpty()

                                  join detalle2 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 18  //Recargo
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle2.id_factura
                                  into temp2
                                  from r in temp2.DefaultIfEmpty()

                                  join detalle3 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 20  //IVARECARGO
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle3.id_factura
                                  into temp3
                                  from ir in temp3.DefaultIfEmpty()

                                  join detalle4 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 21  //DESCUENTO
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle4.id_factura
                                  into temp4
                                  from desc in temp4.DefaultIfEmpty()

                                  join detalle5 in
                                      (from d in bd.facturas_detalles
                                       where d.id_concepto == 22   //IVADESCUENTO
                                       select new
                                       {
                                           d.id_factura,
                                           d.importe
                                       }) on f.id_factura equals detalle5.id_factura
                                  into temp5
                                  from idesc in temp5.DefaultIfEmpty()

                                  join yr in
                                      (from fx in bd.facturas
                                       join mx in bd.socios_mediciones on fx.id_medicion equals mx.id_medicion

                                       where fx.id_socio == idSocio
                                       orderby fx.id_factura descending
                                       select new
                                       {
                                           fx.id_factura,
                                           mx.lectura,
                                           fx.id_socio
                                       }) on idSocio equals yr.id_socio
                                    into tempo
                                  from df in tempo.Take(1).DefaultIfEmpty()

                                  #endregion
                                  where f.id_socio == idSocio && (f.id_estadoPago < controlImpagas | controlImpagas == 0)
                                  select new
                                  {
                                      Periodo = f.id_periodo,
                                      Factura = f.id_factura,
                                      FechaFact = f.fechaPago,
                                      FechaVenc = pr.fecha_primer_venc,
                                      idEstado = e.id_estado_pago,
                                      Estado = e.estado_pago,
                                      Total = f.importeTotal,
                                      Neto = f.importeNeto,
                                      IVA = (Decimal?)i.importe,

                                      Recargo = (Decimal?)r.importe,

                                      IVARecargo = (Decimal?)ir.importe,

                                      Descuento = (Decimal?)desc.importe,

                                      IVADescuento = (Decimal?)idesc.importe,

                                      Cobrado = f.cobrado,
                                      Consumo = m.consumo,
                                      Lectura = m.lectura,

                                      LecturaAnt = (Int32?)df.lectura,
                                      DiasVenc = 0

                                  }).ToList();

                    Commons oCommons = new Commons();
                    DataTable FacturasDetalles = oCommons.convertToTable(Listar);*/
                    #endregion

                    foreach (DataRow rowFactDet in FacturasDetalles.Rows)
                    {
                        CalculosFactura oCalculosFactura = new CalculosFactura();
                        int idFactura = int.Parse(rowFactDet["Factura"].ToString());
                        if (int.Parse(rowFactDet["idEstado"].ToString()) == 3)
                        {
                            //paga muestro lo de la fact. como lo hice al principio
                            /*Decimal rec= oCalculosFactura.CalcularRecargo(idFactura);
                            rowFactDet["Recargo"] = rec;
                            rowFactDet["IVARecargo"] = oCalculosFactura.CalcularIVARecargoNuevo(rec, idSocio);*/
                        }
                        else
                        {
                            //calculo

                           // rowFactDet["IVA"] = oCalculosFactura.CalcularIVA(idFactura);

                            if (mostrarValoresActualizados == 1)
                            {
                                Decimal rec = oCalculosFactura.CalcularRecargo(idFactura);
                                rowFactDet["Recargo"] = rec;
                                rowFactDet["IVARecargo"] = oCalculosFactura.CalcularIVARecargoNuevo(rec, idSocio);
                                rowFactDet["Total"] = decimal.Parse(rowFactDet["Total"].ToString()) + decimal.Parse(rowFactDet["Recargo"].ToString()) + decimal.Parse(rowFactDet["IVARecargo"].ToString());
                            }
                            else {
                                rowFactDet["Recargo"] =0;
                                rowFactDet["IVARecargo"] = 0;
                            }

                            rowFactDet["Descuento"] = oCalculosFactura.CalcularDescuento(idFactura);
                            rowFactDet["IVADescuento"] = oCalculosFactura.CalcularIVADescuento(idFactura);

                        }

                        rowFactDet["LecturaAnt"] = oCalculosFactura.ObtenerLecturaAnterior(idFactura);

                        //rowFactDet["FechaVenc"] = oCalculosFactura.ObtenerFechaVenc(idFactura);

                        //rowFactDet["DiasVenc"] = oCalculosFactura.ObtenerDiasDeVencimientoNuevo(DateTime.Parse(rowFactDet["FechaVenc"].ToString()));
                    }
                    return FacturasDetalles;
                }

            }
            catch (Exception)
            {
                return null;
            }
        }