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 Decimal? GetTotalIVARecargoBySocio(int idSocio, int mostrarImpagas)
        {
            decimal totalIVARecargo = 0;
            Commons oCommons = new Commons();
            int controlImpagas = 0;
            if (mostrarImpagas == 1)
            {
                controlImpagas = 3;
            }
            using (cooperativaEntities bd = new cooperativaEntities())
            {
                var detallesByFact = (from fac in bd.facturas

                                      where fac.id_socio == idSocio && (fac.id_estadoPago < controlImpagas | controlImpagas == 0)
                                      select new
                                      {
                                          fac.id_factura
                                      }).ToList();

                DataTable detallesCalc = oCommons.convertToTable(detallesByFact);
                CalculosFactura oCalculosFactura = new CalculosFactura();
                foreach (DataRow rowDet in detallesCalc.Rows)
                {
                    totalIVARecargo = totalIVARecargo + oCalculosFactura.CalcularIVARecargo(int.Parse(rowDet["id_factura"].ToString()));
                }

                return totalIVARecargo;

            }
        }
        private void CargarDatos()
        {
            if (txtNroFactura.Text.Length > 0) {

                facturas oFacturas = new facturas();
                socios oSocio = new socios();
                SocioImplement oSocioImplement = new SocioImplement();
                FacturasImplement oFacturasImplement = new FacturasImplement();
                PeriodosImplement oPeriodosImplement = new PeriodosImplement();
                FacturasDetallesImplement oFacturasDetallesImplement = new FacturasDetallesImplement();
                _idFactura = int.Parse(txtNroFactura.Text);
                if (oFacturasImplement.ExisteFactura(_idFactura))
                {
                    oFacturas = oFacturasImplement.Get(int.Parse(txtNroFactura.Text));
                    oSocio = oSocioImplement.Get((int)oFacturas.id_socio);
                    _idSocio = oSocio.id_socio;
                    txtCodigoSubCodSocio.Text = oSocio.codigo_socio + "/" + oSocio.subcodigo_socio;
                    txtNombreSocio.Text = oSocio.nombre;
                    txtVencimiento.Text = ((DateTime)oPeriodosImplement.Get(oFacturas.id_periodo).fecha_primer_venc).ToShortDateString();
                    //facturado = neto + iva
                    DataTable detallesFacturaDT = oFacturasImplement.GetByIdFacturaDT(oFacturas.id_factura);
                    decimal _totalFacturado = 0;
                    decimal _importeTotal = 0;
                    decimal _convenio = 0;
                    decimal _acciones = 0;
                    foreach (DataRow dr in detallesFacturaDT.Rows)
                    {
                        //IVA = decimal.Parse(dr["IVA"].ToString());
                        _totalFacturado = _totalFacturado + decimal.Parse(dr["Neto"].ToString()) + decimal.Parse(dr["IVA"].ToString());
                        _importeTotal = _importeTotal + decimal.Parse(dr["Total"].ToString());
                        _convenio = _convenio + decimal.Parse(dr["Convenio"].ToString());
                        _acciones = _acciones + decimal.Parse(dr["Acciones"].ToString());
                    }

                    txtFacturado.Text = _totalFacturado.ToString();
                    txtCobrado.Text = oFacturas.cobrado.ToString();
                    txtResto.Text = (_totalFacturado - (decimal.Parse(oFacturas.cobrado.ToString()))).ToString();
                    txtDescuento.Text = "0";
                    CalculosFactura oCalculosFacturas = new CalculosFactura();
                    txtRecargo.Text = (oCalculosFacturas.CalcularRecargo(oFacturas.id_factura) + oCalculosFacturas.CalcularIVARecargo(oFacturas.id_factura)).ToString();
                    txtTotal.Text = (_importeTotal - (decimal)oFacturas.cobrado - decimal.Parse(txtDescuento.Text)).ToString();
                    txtConvenio.Text = _convenio.ToString();
                    txtAcciones.Text = _acciones.ToString();

                    CobranzasImplement oCobranzasImplement = new CobranzasImplement();

                    txtFactIngresadas.Text = oCobranzasImplement.GetFacturas(dtpFechaCaja.Value).ToString();

                    txtTotalCobrado.Text = _importeTotal.ToString();
                    txtTotalFactura.Text = _importeTotal.ToString(); ;
                    txtDiferencia.Text = (decimal.Parse(txtTotalFactura.Text) - decimal.Parse(txtTotalCobrado.Text)).ToString();
                }
                else {
                    //si esta con cobranza entonces seria para cambiar la caja
                    if (oFacturasImplement.ExisteCobranza(_idFactura))
                    {
                        _existeCobranza = true;
                    }
                    else
                    {
                        _existeCobranza = false;
                    }
                }
            }
        }