private void Refacturar1()
        {
            decimal NetoConIVA = 0;
            decimal NetoSinIVA = 0;
            decimal SubTotal = 0;
            SocioConexionImplement oSocioConexionImplement = new SocioConexionImplement();
            DataTable DTMedidores = oSocioConexionImplement.GetEstadosMedidores();
            IList listaConceptos = new ConceptoImplement().GetActivosAll();
            DataTable DTUsuariosAFacturar = oSocioConexionImplement.GetSociosAFacturar(_periodo, _idSocio);
            _oFactura = new facturas();
            _oFactura.id_socio = _idSocio;
            //oFactura.id_medicion Ver como soluciono el idMedicion
            _oFactura.id_estadoPago = 1;//Impaga
            _oFactura.id_tarifa = 0;//aun no se carga
            _oFactura.id_convenio = 0;//Aun no se carga
            _oFactura.fechaPago = null;
            _oFactura.cobrado = 0;
            _oFactura.neto1 = 0;
            _oFactura.neto2 = 0;
            _oFactura.importeNeto = 0;
            _oFactura.importeTotal = 0;
            _oFactura.id_medicion = 0;
            if (DTUsuariosAFacturar.Rows[0]["medidor"].ToString() != "")
            {
                //preguntar como hago con la medicion?
                //socios_mediciones oSocioMedicionActual = new socios_mediciones();
                //SocioMedicionImplement oSocioMedicionImplement = new SocioMedicionImplement();
                //oSocioMedicionActual = oSocioMedicionImplement.ultimaMedicion(_idSocio);
                //socios_mediciones oSocioMedicionNew = new socios_mediciones();
                //oSocioMedicionNew.fecha_lectura = null;
                //oSocioMedicionNew.id_socio =_idSocio;
                NetoConIVA = 0;
                NetoSinIVA = 0;
                foreach (cod_conceptos oConcepto in listaConceptos)
                {
                    bool CorrespondeFacturar = false;
                    if (DTUsuariosAFacturar.Rows[0]["medidor"].ToString() != "")
                    {
                        //SocioMedicionImplement oSosioMedicionImpl = new SocioMedicionImplement();
                        //socios_mediciones oSocioMedicion = new socios_mediciones();
                        //oSocioMedicion = oSosioMedicionImpl.Get(oFactura.id_medicion.Value);
                    }
                    acciones oAccion = new acciones();
                    conceptos_particulares oConceptoParticular = new conceptos_particulares();
                    conceptosParticularesImplement oConceptoParticularImplement = new conceptosParticularesImplement();
                    AccionImplement oAccionesImplement = new AccionImplement();

                    if (oConcepto.aplicacion == 2)
                    { // si concepto Particular
                        oConceptoParticular = oConceptoParticularImplement.GetByFilter(_idSocio, oConcepto.id_concepto, _periodo);
                        if (oConceptoParticular != null)
                        {
                            CorrespondeFacturar = true;
                        }
                        else
                        {
                            // No encontrado entonces no corresponde facturar
                            CorrespondeFacturar = false;
                        }
                    }
                    else
                    {
                        //Concepto Activo y no particular entonces corresponde facturar
                        CorrespondeFacturar = true;
                    }

                    if (CorrespondeFacturar)
                    {
                        facturas_detalles oDetalle = new facturas_detalles();
                        FacturasDetallesImplement oFacturasDetallesImplement = new FacturasDetallesImplement();
                        //ConvenioImplement oConvenioImplement = new ConvenioImplement();
                        CalculosFacturacionFormulas oCalculosFacturacionFormulas = new CalculosFacturacionFormulas();
                        oDetalle = oCalculosFacturacionFormulas.getDetalle(_idSocio, decimal.Parse(DTUsuariosAFacturar.Rows[0]["cargo_fijo"].ToString()), decimal.Parse(DTUsuariosAFacturar.Rows[0]["abono"].ToString()), decimal.Parse(DTUsuariosAFacturar.Rows[0]["valor_m3"].ToString()), oConcepto, _oFactura, oConceptoParticular);
                        if (oDetalle.importe != 0)

                            AgregarDetalle(oDetalle);

                        // Calcula los subtotales separados para los conceptos con y sin IVA
                        if (oConcepto.aplicar_iva.Value)
                            NetoConIVA = NetoConIVA + oDetalle.importe;
                        else NetoSinIVA = NetoSinIVA + oDetalle.importe;
                        // Calcula los campos Neto1 y Neto2 utilizados en los
                        // cálculos de intereses
                        if (oConcepto.aplicar_recargo.Value)
                            _oFactura.neto1 = _oFactura.neto1.Value + Convert.ToSingle(oDetalle.importe);
                        else
                            _oFactura.neto2 = _oFactura.neto2.Value + Convert.ToSingle(oDetalle.importe);

                    }
                }

                // Obtiene el subtotal general como suma de los
                // subtotales parciales con y sin IVA
                SubTotal = NetoConIVA + NetoSinIVA;
                // Redondea el subtotal a dos dígitos
                SubTotal = decimal.Round(SubTotal, 2);
                // Registra el subtotal general
                _oFactura.importeNeto = Convert.ToSingle(SubTotal);
                // Calcula IVA (sólo para los conceptos que corresponde)
                facturas_detalles oFacDetalle = new facturas_detalles();
                FacturasDetallesImplement oFacDetalleImplement = new FacturasDetallesImplement();

                cod_conceptos oConceptoIVA = new cod_conceptos();
                ConceptoImplement oConceptoImplement = new ConceptoImplement();

                oConceptoIVA = oConceptoImplement.Get(23);//concepto IVA es el 23
                oFacDetalle.id_concepto = oConceptoIVA.id_concepto;
                oFacDetalle.id_factura = 0;
                oFacDetalle.idOrden = oConceptoIVA.orden_concepto;
                oFacDetalle.idTipo = 0;
                oFacDetalle.importe = decimal.Round(NetoConIVA * decimal.Parse(DTUsuariosAFacturar.Rows[0]["iva"].ToString()) / 100, 2);
                AgregarDetalle(oFacDetalle);

                // Calcula Total
                _oFactura.importeTotal = _oFactura.importeNeto.Value + Convert.ToSingle(oFacDetalle.importe); //este ahi que ver el tipo de dato

                //// Generar entradas en la base de CuentasCorrientes
                //CuentaCorrienteImplement oCuentaCorrienteImplement = new CuentaCorrienteImplement();
                //cuentas_corrientes oCuentaCorriente = new cuentas_corrientes();

                //oCuentaCorriente.fecha = DateTime.Now;
                //oCuentaCorriente.id_factura = _idFactura;
                //oCuentaCorriente.id_movimiento = 1;
                //oCuentaCorriente.id_socio = _idSocio;
                //oCuentaCorriente.importe_credito = 0;
                //oCuentaCorriente.importe_saldo = 0;
                //oCuentaCorriente.importe_debito = Convert.ToDecimal(oFactura.importeTotal);
                //oCuentaCorriente.id_cobranza = 0;
                //oCuentaCorrienteImplement.Save(oCuentaCorriente);

            }
        }
        private void CargarFacturaFutura(string periodo, int idSocio)
        {
            decimal NetoConIVA = 0;
            decimal NetoSinIVA = 0;
            int idMedidor = 0;
            facturas oFactura = new facturas();
            FacturasImplement oFacturaImplement = new FacturasImplement();
            oFactura = oFacturaImplement.Get(_idFactura);
            _oFactura = new facturas();
            _oFactura.id_socio = _idSocio;
            //oFactura.id_medicion Ver como soluciono el idMedicion
            _oFactura.id_estadoPago = 1;//Impaga
            _oFactura.id_tarifa = 0;//aun no se carga
            _oFactura.id_convenio = 0;//Aun no se carga
            _oFactura.fechaPago = null;
            _oFactura.cobrado = 0;
            _oFactura.neto1 = 0;
            _oFactura.neto2 = 0;
            _oFactura.importeNeto = 0;
            _oFactura.importeTotal = 0;
            _oFactura.id_medicion = 0;

            // obtengo solo los conceptos activos
            IList listaConceptos = new ConceptoImplement().GetActivosAll();
            SocioConexionImplement oSocioConexionImpl = new SocioConexionImplement();
            DataTable DTUsuariosAFacturar = oSocioConexionImpl.GetSociosAFacturar(periodo, idSocio);
            if (DTUsuariosAFacturar.Rows[0]["medidor"].ToString() != "")
            {
                socios_mediciones oSocioMedicionActual = new socios_mediciones();
                SocioMedicionImplement oSocioMedicionImplement = new SocioMedicionImplement();
                oSocioMedicionActual = oSocioMedicionImplement.ultimaMedicion(int.Parse(DTUsuariosAFacturar.Rows[0]["id_socio"].ToString()));
                socios_mediciones oSocioMedicionNew = new socios_mediciones();
                oSocioMedicionNew.fecha_lectura = null;
                oSocioMedicionNew.id_socio = _idSocio;
                decimal consumo = 0;
                if (oSocioMedicionActual != null)
                {
                    consumo = (decimal)decimal.Parse((oSocioMedicionActual.consumo * 0.75).ToString());
                    oSocioMedicionNew.consumo = (int)Math.Truncate(consumo);
                    oSocioMedicionNew.lectura = oSocioMedicionActual.lectura + oSocioMedicionNew.consumo;
                }
                else
                {
                    oSocioMedicionNew.consumo = 0;
                    oSocioMedicionNew.lectura = 0;
                }
                idMedidor = oSocioMedicionImplement.Save(oSocioMedicionNew);
            }

            _oFactura.id_medicion = idMedidor;//Cargo 0 si no tiene medidor
            // recorre toda la base de conceptos

            foreach (cod_conceptos oConcepto in listaConceptos)
            {
                bool CorrespondeFacturar = false;

                if (_oFactura.id_medicion.Value != 0)
                {
                    //SocioMedicionImplement oSosioMedicionImpl = new SocioMedicionImplement();
                    //socios_mediciones oSocioMedicion = new socios_mediciones();
                    //oSocioMedicion = oSosioMedicionImpl.Get(oFactura.id_medicion.Value);
                }
                acciones oAccion = new acciones();
                conceptos_particulares oConceptoParticular = new conceptos_particulares();
                conceptosParticularesImplement oConceptoParticularImplement = new conceptosParticularesImplement();
                AccionImplement oAccionesImplement = new AccionImplement();

                if (oConcepto.aplicacion == 2)
                { // si concepto Particular

                    oConceptoParticular = oConceptoParticularImplement.GetByFilter(idSocio, oConcepto.id_concepto, _oFactura.id_periodo);
                    if (oConceptoParticular != null)
                    {
                        CorrespondeFacturar = true;
                    }
                    else
                    {
                        // No encontrado entonces no corresponde facturar
                        CorrespondeFacturar = false;
                    }
                }
                else
                {
                    //Concepto Activo y no particular entonces corresponde facturar
                    CorrespondeFacturar = true;
                }

                if (CorrespondeFacturar)
                {

                    facturas_detalles oDetalle = new facturas_detalles();
                    FacturasDetallesImplement oFacturasDetallesImplement = new FacturasDetallesImplement();
                    //ConvenioImplement oConvenioImplement = new ConvenioImplement();
                    CalculosFacturacionFormulas oCalculosFacturacionFormulas = new CalculosFacturacionFormulas();
                    oDetalle = oCalculosFacturacionFormulas.getDetalle(idSocio, decimal.Parse(DTUsuariosAFacturar.Rows[0]["cargo_fijo"].ToString()), decimal.Parse(DTUsuariosAFacturar.Rows[0]["abono"].ToString()), decimal.Parse(DTUsuariosAFacturar.Rows[0]["valor_m3"].ToString()), oConcepto, _oFactura, oConceptoParticular);
                    if (oDetalle.importe != 0)
                        AgregarDetalle(oDetalle);
                    // Calcula los subtotales separados para los conceptos con y sin IVA
                    if (oConcepto.aplicar_iva.Value)
                        NetoConIVA = NetoConIVA + oDetalle.importe;
                    else NetoSinIVA = NetoSinIVA + oDetalle.importe;
                    // Calcula los campos Neto1 y Neto2 utilizados en los
                    // cálculos de intereses
                    if (oConcepto.aplicar_recargo.Value)
                        oFactura.neto1 = oFactura.neto1.Value + Convert.ToSingle(oDetalle.importe);
                    else
                        oFactura.neto2 = oFactura.neto2.Value + Convert.ToSingle(oDetalle.importe);
                }
            }
            cod_conceptos oConceptoIVA = new cod_conceptos();
            ConceptoImplement oConceptoImplement = new ConceptoImplement();
            facturas_detalles oDetalleFac = new facturas_detalles();
            oConceptoIVA = oConceptoImplement.Get(23);//concepto IVA es el 23
            oDetalleFac.id_concepto = oConceptoIVA.id_concepto;
            oDetalleFac.id_factura = 0;
            oDetalleFac.idOrden = oConceptoIVA.orden_concepto;
            oDetalleFac.idTipo = 0;
            oDetalleFac.importe = decimal.Round(NetoConIVA * decimal.Parse(DTUsuariosAFacturar.Rows[0]["iva"].ToString()) / 100, 2);
            AgregarDetalle(oDetalleFac);
        }
        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;
                    }
                }
            }
        }
        private void GuardarCobranza()
        {
            facturas oFacturas = new facturas();
            socios oSocio = new socios();
            SocioImplement oSocioImplement = new SocioImplement();
            FacturasImplement oFacturasImplement = new FacturasImplement();
            PeriodosImplement oPeriodosImplement = new PeriodosImplement();
            FacturasDetallesImplement oFacturasDetallesImplement = new FacturasDetallesImplement();

            oFacturas = oFacturasImplement.Get(int.Parse(txtNroFactura.Text));
            oFacturas.id_estadoPago = 3;
            oFacturasImplement.Update(oFacturas);

            cobranzas oCobranza = new cobranzas();
            oCobranza.id_caja = int.Parse(cmbCaja.SelectedValue.ToString());
            oCobranza.id_factura = _idFactura;
            oCobranza.id_recibo = 0;
            oCobranza.id_socio = _idSocio;
            oCobranza.importe = decimal.Parse(txtTotalCobrado.Text);
            oCobranza.descuento_convenio = 0;
            oCobranza.iva_descuento_convenio = 0;
            oCobranza.fecha_cobro = dtpFechaCaja.Value;
            oCobranza.id_terminal = 0;//VER
            oCobranza.fecha_registro = DateTime.Now;
            CobranzasImplement oCobranzasImplement = new CobranzasImplement();
            oCobranzasImplement.Save(oCobranza);
        }
        private void CargarDatosMoratoria()
        {
            FacturasImplement oFacturasImplement = new FacturasImplement();
            CalculosConvenio oCalculosConvenio = new CalculosConvenio();

            _ConveniosNoCancelados = oCalculosConvenio.ObtenerImporteConvenioAdeudado(_idSocio);

            DataTable dtFacturas = oFacturasImplement.GetByIdSocioSinConvenioDT(_idSocio, 1, 1);
            txtFactAdeudadasMora.Text = dtFacturas.Rows.Count.ToString();
            Decimal valorTotalSinInteres = 0;
            Decimal valorInteresesMora = 0;
            foreach (DataRow dr in dtFacturas.Rows)
            {
                #region <Control Valores Vacios>
                decimal Neto = 0;
                decimal IVA = 0;
                decimal Cobrado = 0;
                decimal Recargo=0;
                decimal IVARecargo = 0;

                if (dr["Neto"] == null | dr["Neto"].ToString() == "")
                    Neto = 0;
                else
                    Neto = decimal.Parse(dr["Neto"].ToString());
                if (dr["IVA"] == null | dr["IVA"].ToString() == "")
                    IVA = 0;
                else
                    IVA = decimal.Parse(dr["IVA"].ToString());
                if (dr["Cobrado"] == null | dr["Cobrado"].ToString() == "")
                    Cobrado = 0;
                else
                    Cobrado = decimal.Parse(dr["Cobrado"].ToString());

                if (dr["Recargo"] == null | dr["Recargo"].ToString() == "")
                    Recargo = 0;
                else
                    Recargo = decimal.Parse(dr["Recargo"].ToString());
                if (dr["IVARecargo"] == null | dr["IVARecargo"].ToString() == "")
                    IVARecargo = 0;
                else
                    IVARecargo = decimal.Parse(dr["IVARecargo"].ToString());

                #endregion

                valorTotalSinInteres = valorTotalSinInteres + (Neto + IVA - Cobrado);
                valorInteresesMora = valorInteresesMora + (Recargo + IVARecargo);
            }

            Decimal ImporteTotalSinInteresMora =valorTotalSinInteres + _ConveniosNoCancelados;
            txtTotalSinInteresMora.Text =ImporteTotalSinInteresMora.ToString();
            Decimal ImporteInteresesMora = valorInteresesMora;
            txtImporteInteresesMora.Text = ImporteInteresesMora.ToString();
            txtTotalMoratoria.Text = (ImporteTotalSinInteresMora + ImporteInteresesMora).ToString();
            txtCuotasAbonadasMora.Text = "1";
            txtDescPagoContadoMora.Text = "5%";
            txtCantMaxCuotasMora.Text = "-";

            facturas oFacturas = new facturas();
            oFacturas = oFacturasImplement.GetUltimaFactura(_idSocio);
            DataTable oFacturasDetallesDT = new DataTable();
            FacturasDetallesImplement oFacturasDetallesImplements = new FacturasDetallesImplement();
            oFacturasDetallesDT = oFacturasDetallesImplements.GetAllByIdFacturaDT(oFacturas.id_factura);
            decimal valorUltimaFactura =0;
            foreach(DataRow dr in oFacturasDetallesDT.Rows)
            {
                int _idConcepto = int.Parse(dr["id_concepto"].ToString());
                if(_idConcepto==1 | _idConcepto==2 | _idConcepto==3 |_idConcepto==8)
                {
                    valorUltimaFactura = valorUltimaFactura + decimal.Parse(dr["importe"].ToString());
                }
            }

            decimal valorMinimoCuota = Math.Round((valorUltimaFactura / 2), 2);
            txtValorMinimoCuotaMora.Text=valorMinimoCuota.ToString();

            int maxCantCuotas = (int)((ImporteTotalSinInteresMora + ImporteInteresesMora) / valorMinimoCuota);
            //Pregunto por si la moratoria tiene limitacion, si no la tiene cambio la cant max de cuotas por minimo monto
            //por la max cant de cuotas por moratoria directamente

            MoratoriasImplement oMoratoriasImplement = new MoratoriasImplement();
            DataTable cuotasDT = new DataTable();
            DateTime fechaConv = dtpFechaConvenio.Value;

            cuotasDT = oMoratoriasImplement.GetTablaCuotasConvenioMoratoria(maxCantCuotas, fechaConv, ImporteTotalSinInteresMora, ImporteInteresesMora);
            txtCantMaxCuotasMora.Text = cuotasDT.Rows.Count.ToString();//esta tabla trae la cantidad de cuotas previendo limitacion con valor minimo

            dgvCuotasMora.DataSource = cuotasDT;
        }
 private void cargarGrillaConceptos()
 {
     FacturasDetallesImplement oFacturasDetallesImplement = new FacturasDetallesImplement();
     this.dgvConceptos.DataSource = oFacturasDetallesImplement.GetByIdFacturaDT(_idFactura);
     this.dgvConceptos.Enabled = true;
 }