예제 #1
0
        public cod_conceptos Get(int id)
        {
            cod_conceptos oConcepto = new cod_conceptos();

            try
            {
                using (cooperativaEntities bd = new cooperativaEntities())
                {
                    var regis = (from p in bd.cod_conceptos
                                 where p.id_concepto == id
                                 select p).Single();
                    oConcepto.id_concepto         = regis.id_concepto;
                    oConcepto.concepto            = regis.concepto;
                    oConcepto.orden_concepto      = regis.orden_concepto;
                    oConcepto.activo              = regis.activo;
                    oConcepto.id_formula          = regis.id_formula;
                    oConcepto.variable            = regis.variable;
                    oConcepto.tipo_signo          = regis.tipo_signo;
                    oConcepto.aplicacion          = regis.aplicacion;
                    oConcepto.concepto_particular = regis.concepto_particular;
                    oConcepto.aplicar_iva         = regis.aplicar_iva;
                    oConcepto.aplicar_recargo     = regis.aplicar_recargo;
                    oConcepto.aplicar_descuento   = regis.aplicar_descuento;

                    return(oConcepto);
                }
            }
            catch (Exception ex)
            {
                return(oConcepto);
            }
        }
예제 #2
0
        public void Save(cod_conceptos oConcepto)
        {
            cooperativaEntities bd = new cooperativaEntities();

            bd.cod_conceptos.AddObject(oConcepto);
            bd.SaveChanges();
        }
예제 #3
0
        private void CargarSeleccion()
        {
            if (!_elimino)
            {
                cod_conceptos oConceptos = new cod_conceptos();

                DataGridViewRow row = this.dgvConceptos.CurrentRow;
                int             id  = Convert.ToInt32(row.Cells[0].Value);
                oConceptos = oConceptoImplement.Get(id);

                //ver los atributos y cargarlos
                this.lblCodigo.Text         = oConceptos.id_concepto.ToString();
                this.txtDescripcion.Text    = oConceptos.concepto;
                this.txtDescripcion.Enabled = false;

                //this.txtDuracion.Text= oConceptos.?
                this.txtVariable.Text = oConceptos.variable.ToString();
                //this.txtVigenciaDesde.Text = oConceptos.?
                this.chkAplicaCargo.Checked     = (bool)oConceptos.aplicar_recargo;
                this.chkAplicaIva.Checked       = (bool)oConceptos.aplicar_iva;
                this.chkAplicaDescuento.Checked = (bool)oConceptos.aplicar_descuento;

                //this.cmbAplicacion.SelectedValue = oConceptos.¿?
                //this.cmbEstado.SelectedValue = oConceptos.?
                this.cmbFormula.SelectedValue = oConceptos.id_formula;
                this.cmbSigno.SelectedValue   = oConceptos.tipo_signo;

                DeshabilitarBotones();
            }
        }
예제 #4
0
        private void ModificarConcepto()
        {
            HabilitarBotones();
            this.gbDatos.Enabled = true;
            cod_conceptos     oConceptos         = new cod_conceptos();
            ConceptoImplement oConceptoImplement = new ConceptoImplement();
            DataGridViewRow   row = this.dgvConceptos.CurrentRow;

            int id = Convert.ToInt32(row.Cells[0].Value);

            oConceptos = oConceptoImplement.Get(id);

            this.lblCodigo.Text = oConceptos.id_concepto.ToString();

            //this.txtDescripcion.Text = oConceptos.concepto.ToString();
            //this.txtDescripcion.Enabled = false;

            //this.cmbFormula.SelectedIndex = -1;
            //this.txtVariable.Text = oConceptos.variable.ToString();
            //this.cmbAplicacion.SelectedIndex = -1;
            //this.txtVigenciaDesde.Text = string.Empty;
            //this.cmbEstado.SelectedIndex = -1;
            //this.cmbSigno.SelectedIndex = -1;
            //this.txtDuracion.Text = string.Empty;

            //this.chkAplicaIva.Checked = (bool) oConceptos.aplicar_iva;
            //this.chkAplicaCargo.Checked = (bool)oConceptos.aplicar_recargo;
            //this.chkAplicaDescuento.Checked = (bool)oConceptos.aplicar_descuento;

            //this.dgvConceptos.Enabled = false;
        }
예제 #5
0
        private void AgregarConceptoComoParticular()
        {
            cod_conceptos     oCod_Conceptos     = new cod_conceptos();
            ConceptoImplement oConceptoImplement = new ConceptoImplement();

            conceptos_particulares         oConceptosParticulares          = new conceptos_particulares();
            conceptosParticularesImplement oConceptosParticularesimplement = new conceptosParticularesImplement();
            PeriodosImplement oPeriodosImplement = new PeriodosImplement();

            string nuevoPeriodo = oPeriodosImplement.GetUltimoPeriodo();

            if (nuevoPeriodo != "")
            {
                DataGridViewRow rowconcepto = this.dgvConceptos.CurrentRow;
                int             idConcepto  = Convert.ToInt32(rowconcepto.Cells[0].Value);
                oCod_Conceptos = oConceptoImplement.Get(idConcepto);

                oConceptosParticulares.id_concepto = idConcepto;
                oConceptosParticulares.id_socio    = _idSocio;
                //oConceptosParticulares.id_factura = oCod_Conceptos.;
                oConceptosParticulares.id_periodo = nuevoPeriodo;
                oConceptosParticulares.importe    = decimal.Parse(oCod_Conceptos.variable.ToString());
                oConceptosParticulares.detalles   = oCod_Conceptos.concepto;
                oConceptosParticulares.facturado  = false;

                oConceptosParticularesimplement.Save(oConceptosParticulares);
                this.txtImporte.Text          = oConceptosParticulares.importe.ToString();
                this.cmbPeriodo.SelectedValue = oConceptosParticulares.id_periodo;
            }
            CargarGrillaConceptosParticulares();
            btnActualizar.Visible = false;
        }
예제 #6
0
        public void CargarCombo(ComboBox combo, string InsertaFila)
        {
            IList         ListarConceptos = GetAll();
            cod_conceptos oConcepto       = new cod_conceptos();

            oConcepto.id_concepto = 0;
            oConcepto.concepto    = InsertaFila;
            ListarConceptos.Insert(0, oConcepto);
            combo.DisplayMember = "concepto";
            combo.ValueMember   = "id_concepto";
            combo.DataSource    = ListarConceptos;
        }
예제 #7
0
        public void AgregarDetalle(facturas_detalles oFacturaDetalle)
        {
            cod_conceptos     oConcepto     = new cod_conceptos();
            ConceptoImplement oConceptoImpl = new ConceptoImplement();

            oConcepto = oConceptoImpl.Get(oFacturaDetalle.id_concepto.Value);
            DataRow registro = _TablaGrilla.NewRow();

            registro["id_detalle"]  = oFacturaDetalle.id_detalle;
            registro["id_concepto"] = oFacturaDetalle.id_concepto;
            registro["id_factura"]  = oFacturaDetalle.id_factura;
            registro["id_orden"]    = oFacturaDetalle.idOrden;
            registro["id_Tipo"]     = oFacturaDetalle.idTipo;
            registro["concepto"]    = oConcepto.concepto;
            registro["importe"]     = Math.Round(oFacturaDetalle.importe, 2);
            _TablaGrilla.Rows.Add(registro);
            this.dgDetalleFut.DataSource = _TablaGrilla;
        }
예제 #8
0
        public void Update(cod_conceptos oConcepto)
        {
            using (cooperativaEntities bd = new cooperativaEntities())
            {
                //var editar = (from p in bd.cod_conceptos
                //              where p.id_concepto == oConcepto.id_concepto
                //              select p).Single();

                //editar.id_formula = oConcepto.id_formula;
                //editar.concepto = oConcepto.concepto;
                //editar.orden_concepto = oConcepto.orden_concepto;
                //editar.activo = oConcepto.activo;
                //editar.id_formula = oConcepto.id_formula;
                //editar.variable = oConcepto.variable;
                //editar.tipo_signo = oConcepto.tipo_signo;
                //editar.concepto_particular = oConcepto.concepto_particular;
                //editar.aplicar_iva = oConcepto.aplicar_iva;
                //editar.aplicar_recargo = oConcepto.aplicar_recargo;
                //editar.aplicar_descuento = oConcepto.aplicar_descuento;
                //bd.SaveChanges();
            }
        }
예제 #9
0
        private void Guardar()
        {
            cod_conceptos     oConceptos         = new cod_conceptos();
            ConceptoImplement oConceptoImplement = new ConceptoImplement();

            if (this.lblCodigo.Text == "")
            {
                oConceptos.concepto = this.txtDescripcion.Text;

                oConceptos.id_formula = this.cmbFormula.SelectedIndex;
                oConceptos.variable   = Decimal.Parse(this.txtVariable.Text);
                //oConceptos. = this.cmbAplicacion.SelectedIndex;
                //oConceptos. = this.txtVigenciaDesde.Text;
                //oConceptos. = this.cmbEstado.SelectedIndex;
                oConceptos.tipo_signo = this.cmbSigno.SelectedIndex;
                //oConceptos. = this.txtDuracion.Text;

                oConceptos.aplicar_iva       = this.chkAplicaIva.Checked;
                oConceptos.aplicar_recargo   = this.chkAplicaCargo.Checked;
                oConceptos.aplicar_descuento = this.chkAplicaDescuento.Checked;

                oConceptoImplement.Save(oConceptos);
            }
            else
            {
                DataGridViewRow row = this.dgvConceptos.CurrentRow;
                int             id  = Convert.ToInt32(row.Cells[0].Value);
                oConceptos = oConceptoImplement.Get(id);
                //    oCalle.calle = this.txtNombre.Text;
                //    oCalle.normalizado = this.txtNormalizado.Text;

                oConceptoImplement.Update(oConceptos);
            }
            DeshabilitarBotones();
            Limpiar();
            CargarGrid();
        }
예제 #10
0
        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);
            }
        }
예제 #11
0
        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);
        }
예제 #12
0
        private void Iniciar()
        {
            sys_configuracion  oSysConfig          = new sys_configuracion();
            SysConfigImplement oSysConfigImplement = new SysConfigImplement();

            oSysConfig = oSysConfigImplement.GetByNombre("CantVencimientos");
            int     CantUsuarios = 0;
            decimal NetoConIVA   = 0;
            decimal NetoSinIVA   = 0;
            decimal SubTotal     = 0;

            switch (int.Parse(oSysConfig.valor))
            {
            case 1:
                //No hace nada porque el primer se establece por defecto
                break;

            case 2:
                for (int i = 1; i <= (int.Parse(this.nudCantidad.Value.ToString()) - 1); i++)
                {
                    DateTimePicker fecha1 = (DateTimePicker)tcPeriodos.Controls.Find("dtpPrimerVencimiento" + i, true)[0];
                    DateTimePicker fecha2 = (DateTimePicker)tcPeriodos.Controls.Find("dtpSegundoVencimiento" + i, true)[0];
                    if (fecha2.Value <= fecha1.Value)
                    {
                        string msg = "Debe establecer las fechas para los 2 vencimientos y éstas " +
                                     "no pueden ser iguales, controlar fechas indicadas en  el periodo " + (i - 1).ToString();
                        MessageBox.Show(msg);
                    }
                }

                break;

            case 3:
                for (int i = 1; i <= (int.Parse(this.nudCantidad.Value.ToString()) + 1); i++)
                {
                    DateTimePicker fecha1 = (DateTimePicker)tcPeriodos.Controls.Find("dtpPrimerVencimiento" + i, true)[0];
                    DateTimePicker fecha2 = (DateTimePicker)tcPeriodos.Controls.Find("dtpSegundoVencimiento" + i, true)[0];
                    if (fecha2.Value <= fecha1.Value)
                    {
                        string msg = "Debe establecer las fechas para los 2 vencimientos y éstas " +
                                     "no pueden ser iguales, controlar fechas indicadas en  el periodo " + (i - 1).ToString();
                        MessageBox.Show(msg);
                    }
                }

                break;
            }


            // Verificar que se hayan cargado los estados de los medidores

            SocioConexionImplement oSocioConexionImplement = new SocioConexionImplement();
            DataTable DTMedidores = oSocioConexionImplement.GetEstadosMedidores();

            if (DTMedidores.Rows.Count > 0)
            {
                string msg2 = "No se puede efectuar el proceso de facturación porque existen " +
                              "socios de servicio medido que no tienen informado el estado del " +
                              "medidor. \n El estado del medidor debe ser " +
                              "informado siempre, si por algún motivo no se efectuó la lectura, " +
                              "coloque un valor estimado en el campo 'Lectura' pero no informe " +
                              "la fecha de lectura en el campo 'Fecha Lectura', en la factura " +
                              "se informará al socio que el valor de M3 consumidos fué estimado /n" +
                              "El proceso de facturación no puede continuar.";
                MessageBox.Show(msg2);
            }

            // Pide confirmar el proceso de facturación
            string msj2 = "";

            if (int.Parse(this.nudCantidad.Value.ToString()) > 1)
            {
                msj2 = "Está Ud. realmente seguro de querer comenzar el proceso de " +
                       "facturación ?. \nEste proceso no puede ser " +
                       "cancelado y al facturarse más de un período sólo puede " +
                       "anularse la facturación del último período pero no de los " +
                       "períodos anteriores";
            }
            else
            {
                msj2 = "Está Ud. realmente seguro de querer comenzar el proceso de " +
                       "facturación ?. \nEste proceso no puede ser " +
                       "cancelado, aunque sí es reversible, es decir que una vez " +
                       "finalizado el proceso se puede anular \n toda la facturación " +
                       "y volver a efectuarla";
            }
            DialogResult dialogResult = MessageBox.Show(msj2, "Confirmar facturación", MessageBoxButtons.YesNo);

            if (dialogResult == DialogResult.Yes)
            {
                // Hay que inhabilitar los forms porque el proceso no puede detenerse
                DeshabilitarControles();
                // Guarda la cantidad de usuarios para utilizar la misma cantidad en
                // todos los períodos a facturar


                // obtengo solo los conceptos activos
                IList listaConceptos = new ConceptoImplement().GetActivosAll();
                for (int i = 0; i < (int.Parse(this.nudCantidad.Value.ToString())); i++)
                {
                    TextBox   textPeriodo         = (TextBox)this.Controls.Find("txtPeriodo" + i, true)[0];
                    string    idPeriodo           = textPeriodo.Text.Substring(3, 4) + textPeriodo.Text.Substring(0, 2);
                    DataTable DTUsuariosAFacturar = oSocioConexionImplement.GetSociosAFacturar(idPeriodo);
                    //Repetir el proceso de facturación para todas las solapas (periodos) seleccionados
                    CantUsuarios = DTUsuariosAFacturar.Rows.Count;
                    this.txtUsuariosAFacturar.Text  = CantUsuarios.ToString();
                    this.txtUsuariosFacturados.Text = "0";
                    this.txtUsuariosFaltantes.Text  = CantUsuarios.ToString();
                    this.pbEstado.Value             = 0;
                    // Cartel indicativo del proceso que se está efectuando
                    this.tcPeriodos.TabIndex = i;

                    // Guarda el número 'ProxFactura' del proceso anterior por si se desea
                    // anular la facturación en curso (obviamente luego que termine)

                    //sys_configuracion oSysProxFacturaAnterior = new sys_configuracion();
                    //oSysProxFacturaAnterior = oSysConfigImplement.GetByNombre("ProxFacturaAnt");
                    //sys_configuracion oSysProxFactura = new sys_configuracion();
                    //oSysProxFactura = oSysConfigImplement.GetByNombre("ProxFactura");
                    //oSysProxFacturaAnterior.valor = oSysProxFactura.valor;
                    //oSysConfigImplement.Update(oSysProxFacturaAnterior);



                    // Guardo las fechas de vencimiento en la tabla periodos
                    periodos          oPeriodo           = new periodos();
                    PeriodosImplement oPeriodosImplement = new PeriodosImplement();
                    oPeriodo                = oPeriodosImplement.Get(idPeriodo);
                    this.txtProceso.Text    = "Se esta procesando el periodo " + idPeriodo;
                    this.txtProceso.Visible = true;
                    Application.DoEvents();
                    oPeriodo.fecha_facturacion = this.dtpFecha.Value;
                    DateTimePicker dtpPrimerVenc = (DateTimePicker)this.Controls.Find("dtpPrimerVencimiento" + i, true)[0];
                    oPeriodo.fecha_primer_venc = dtpPrimerVenc.Value;
                    DateTimePicker dtpSegundoVenc = (DateTimePicker)this.Controls.Find("dtpSegundoVencimiento" + i, true)[0];
                    if (dtpSegundoVenc.Value.ToString() != "")
                    {
                        oPeriodo.fecha_segundo_venc = dtpSegundoVenc.Value;
                    }
                    oPeriodo.fecha_tercer_venc = null;
                    oPeriodo.facturado         = true;
                    FacturasImplement oFacturasImplement = new FacturasImplement();
                    int cantUsuario = DTUsuariosAFacturar.Rows.Count;
                    this.pbEstado.Maximum = cantUsuario;
                    for (int j = 0; j < cantUsuario; j++)
                    {
                        this.pbEstado.Value = j;

                        facturas          oFactura          = new facturas();
                        FacturasImplement oFacturaImplement = new FacturasImplement();
                        oFactura.id_periodo = idPeriodo;
                        oFactura.id_socio   = int.Parse(DTUsuariosAFacturar.Rows[j]["id_socio"].ToString());
                        //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;
                        int idFactura = 0;
                        idFactura = oFacturasImplement.Save(oFactura);

                        /* Si corresponde calcula los consumos estimados, además transfiere
                         * los valores de los campos de datos actuales a los campos de
                         * los datos anteriores*/
                        int idMedidor = 0;
                        if (DTUsuariosAFacturar.Rows[j]["medidor"].ToString() != "")
                        {
                            socios_mediciones      oSocioMedicionActual    = new socios_mediciones();
                            SocioMedicionImplement oSocioMedicionImplement = new SocioMedicionImplement();
                            oSocioMedicionActual = oSocioMedicionImplement.ultimaMedicion(int.Parse(DTUsuariosAFacturar.Rows[j]["id_socio"].ToString()));
                            socios_mediciones oSocioMedicionNew = new socios_mediciones();
                            oSocioMedicionNew.fecha_lectura = null;
                            oSocioMedicionNew.id_socio      = int.Parse(DTUsuariosAFacturar.Rows[j]["id_socio"].ToString());

                            if (i <= (int.Parse(this.nudCantidad.Value.ToString()) - 1))
                            {
                                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;
                                }
                            }
                            else
                            {
                                oSocioMedicionNew.consumo = 0;
                                oSocioMedicionNew.lectura = 0;
                            }
                            idMedidor = oSocioMedicionImplement.Save(oSocioMedicionNew);
                        }
                        oFactura.id_medicion = idMedidor;    //Cargo 0 si no tiene medidor

                        // Limpia las variables de subtotales con y sin IVA
                        NetoConIVA = 0;
                        NetoSinIVA = 0;

                        //Para cada socio, 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(int.Parse(DTUsuariosAFacturar.Rows[j]["id_socio"].ToString()), 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(int.Parse(DTUsuariosAFacturar.Rows[j]["id_socio"].ToString()), decimal.Parse(DTUsuariosAFacturar.Rows[j]["cargo_fijo"].ToString()), decimal.Parse(DTUsuariosAFacturar.Rows[j]["abono"].ToString()), decimal.Parse(DTUsuariosAFacturar.Rows[j]["valor_m3"].ToString()), oConcepto, oFactura, oConceptoParticular);
                                if (oDetalle.importe != 0)
                                {
                                    oFacturasDetallesImplement.Save(oDetalle);
                                }

                                this.txtUsuariosFacturados.Text = j.ToString();
                                this.txtUsuariosFaltantes.Text  = (int.Parse(this.txtUsuariosAFacturar.Text) - j).ToString();
                                Application.DoEvents();
                                // 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  = oFactura.id_factura;
                        oFacDetalle.idOrden     = oConceptoIVA.orden_concepto;
                        oFacDetalle.idTipo      = 0;
                        oFacDetalle.importe     = decimal.Round(NetoConIVA * decimal.Parse(DTUsuariosAFacturar.Rows[j]["iva"].ToString()) / 100, 2);
                        oFacDetalleImplement.Save(oFacDetalle);
                        // Calcula Total
                        oFactura.importeTotal = oFactura.importeNeto.Value + Convert.ToSingle(oFacDetalle.importe);      //este ahi que ver el tipo de dato
                        oFactura.id_factura   = idFactura;
                        oFacturaImplement.Update(oFactura);
                        // 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        = int.Parse(DTUsuariosAFacturar.Rows[j]["id_socio"].ToString());
                        oCuentaCorriente.importe_credito = 0;
                        oCuentaCorriente.importe_saldo   = 0;
                        oCuentaCorriente.importe_debito  = Convert.ToDecimal(oFactura.importeTotal);
                        oCuentaCorriente.id_cobranza     = 0;
                        oCuentaCorrienteImplement.Save(oCuentaCorriente);

                        // }
                    }
                }
            }
        }
        public facturas_detalles getDetalle(int idSocio, decimal cargoFijo, decimal abono, decimal valorM3, cod_conceptos oConcepto, facturas oFactura, conceptos_particulares oConceptoParticular)
        {
            SocioMedicionImplement oSocioMedicionImpl = new SocioMedicionImplement();
                                    socios_mediciones oSocioMedicion = new socios_mediciones();
                                    if (oFactura.id_medicion.Value!=0)
                                        oSocioMedicion = oSocioMedicionImpl.Get(oFactura.id_medicion.Value);
                                    acciones oAccion = new acciones();
                                    AccionImplement oAccionesImplement = new AccionImplement();

                                    facturas_detalles oDetalle = new facturas_detalles();
                                    oDetalle.idOrden = oConcepto.orden_concepto;
                                    oDetalle.id_concepto = oConcepto.id_concepto;
                                    oDetalle.idTipo = 0;
                                    oDetalle.id_factura = oFactura.id_factura;

                                    ConvenioImplement oConvenioImplement = new ConvenioImplement();
                                    switch (oConcepto.id_formula)
                                    {
                                        case 0:

                                            oDetalle.importe = cargoFijo;

                                            break;
                                        case 1:

                                            if (cargoFijo> 0)
                                            {
                                                oDetalle.importe = cargoFijo * oConcepto.variable.Value;
                                            }
                                            else
                                            {
                                                if (oFactura.id_medicion.Value != 0)
                                                {//revisar
                                                    if ((oSocioMedicion.consumo - abono) <= 0)
                                                    {
                                                        // Si no hubo consumo excedente ...
                                                        oDetalle.importe = abono * valorM3 * oConcepto.variable.Value;
                                                    }
                                                    else
                                                    {
                                                        //  Si hubo consumo excedente ...
                                                        decimal uno = (abono * valorM3);
                                                        decimal dos = ((oSocioMedicion.consumo.Value - abono) * valorM3);
                                                        oDetalle.importe = (uno + dos) * oConcepto.variable.Value;
                                                    }
                                                }
                                                else
                                                {
                                                    //Por que no tiene medidor usa el abono
                                                    oDetalle.importe = abono * valorM3 * oConcepto.variable.Value;
                                                }
                                            }
                                            break;
                                        case 2:
                                            // Consumo excedente por ValorM3
                                            // (Facturas.Consumo - Socios.Tarifa->Abono) *
                                            // Socios.Tarifa->ValorM3

                                              if (oFactura.id_medicion.Value != 0)
                                                {
                                                    oSocioMedicion = oSocioMedicionImpl.Get(oFactura.id_medicion.Value);
                                                if ((oSocioMedicion.consumo.Value - abono) > 0)
                                                {
                                                    //        ' Calcula sólo sobre el consumo excedente
                                                    oDetalle.importe = (oSocioMedicion.consumo.Value - abono) * valorM3;

                                                }
                                                else
                                                {
                                                    //  No hubo consumo excedente
                                                    oDetalle.importe = 0;
                                                }
                                                }else
                                                  oDetalle.importe = 0;

                                            break;
                                        case 3:
                                            //  ' Abono por ValorM3
                                            //' Socios.Tarifa->Abono * Socios.Tarifa->ValorM3
                                            oDetalle.importe = abono * valorM3;
                                            break;
                                        case 4:

                                            //' Consumo por ValorM3 por Variable
                                            //' Facturas.Consumo * Socios.Tarifa->ValorM3 * Conceptos.Variable
                                            if (oFactura.id_medicion.Value != 0)
                                            oDetalle.importe = oSocioMedicion.consumo.Value * valorM3 * oConcepto.variable.Value;
                                            else
                                                oDetalle.importe = 0;
                                            break;

                                        case 5:

                                            oAccion = oAccionesImplement.GetByIdSocio(idSocio);
                                            if (oAccion != null)
                                            {
                                                if (oAccion.cuotas > oAccion.facturadas)
                                                {
                                                    oAccion.facturadas = oAccion.facturadas + 1;
                                                    oAccionesImplement.Update(oAccion);
                                                    oDetalle.importe = oAccion.valor_cuota;
                                                }
                                                else { oDetalle.importe = 0; }
                                            }
                                            else { oDetalle.importe = 0; }

                                            break;
                                        case 6:
                                            // Variable por Cuota Acciones
                                            // Acciones.ValorCuota * Conceptos.Variable
                                            // Buscar Acciones
                                            oAccion = oAccionesImplement.GetByIdSocio(idSocio);
                                            // Si encuentra un registro
                                            if (oAccion != null)
                                            {
                                                // Pregunta si no está finalizado
                                                if (oAccion.cuotas > oAccion.facturadas)
                                                {
                                                    //Si no ha finalizado se factura una cuota más
                                                    oAccion.facturadas = oAccion.facturadas + 1;
                                                    oAccionesImplement.Update(oAccion);
                                                    oDetalle.importe = oAccion.valor_cuota * oConcepto.variable.Value;
                                                }
                                                else { oDetalle.importe = 0; }
                                            }
                                            else { oDetalle.importe = 0; }
                                            break;
                                        case 7:

                                            // Cuota Convenio de pago
                                            // Convenios.ValorCuota
                                            decimal ImporteConvenios = 0;
                                            // Inicializa el campo en cero
                                            oDetalle.importe = 0;
                                            // Buscar Convenio
                                            IList ListConvenios = oConvenioImplement.GetAllBySocio(idSocio);
                                            foreach (convenios oConvenio in ListConvenios)
                                            {
                                                //  Verifica que no se trate de un convenio judicial
                                                if (!oConvenio.convenio_judicial.Value)
                                                {
                                                    //Pregunta si no está finalizado
                                                    if (oConvenio.cuotas > oConvenio.facturadas)
                                                    {
                                                        //Si no ha finalizado se factura una cuota más
                                                        oConvenio.facturadas = oConvenio.facturadas + 1;
                                                        if (oConvenio.cuotas == oConvenio.facturadas) { oConvenio.finalizado = true; }
                                                        oConvenioImplement.Update(oConvenio);
                                                        ImporteConvenios = ImporteConvenios + oConvenio.valor_cuota;
                                                    }
                                                }
                                            }
                                            oDetalle.importe = ImporteConvenios;
                                            break;
                                        case 8:
                                            // Variable por Cuota Convenio
                                            // Convenios.ValorCuota * Conceptos.Variable
                                            // Buscar Convenio
                                            IList ListaConvenios = oConvenioImplement.GetAllBySocio(idSocio);
                                            //Si encuentra un registro
                                            oDetalle.importe = 0;
                                            foreach (convenios oConvenio in ListaConvenios)
                                            {
                                                //  Verifica que no se trate de un convenio judicial
                                                if (!oConvenio.convenio_judicial.Value)
                                                {
                                                    //Pregunta si no está finalizado
                                                    if (oConvenio.cuotas > oConvenio.facturadas)
                                                    {
                                                        oConvenio.facturadas = oConvenio.facturadas + 1;
                                                        oConvenioImplement.Update(oConvenio);
                                                        oDetalle.importe = oConvenio.valor_cuota * oConcepto.variable.Value;
                                                    }
                                                    else
                                                    {
                                                        oDetalle.importe = 0;
                                                    }
                                                }
                                                else { oDetalle.importe = 0; }
                                            }

                                            break;
                                        case 9:
                                            //Importe fijo según concepto
                                            // Conceptos.Variable
                                            oDetalle.importe = oConcepto.variable.Value;
                                            break;
                                        case 10:
                                            // Importe variable que se calcula en el momento
                                            // (NO IMPLEMENTADO)
                                            break;
                                        case 11:
                                            // Importe fijo según Conceptos Particulares
                                            // ConceptosPartic.Importe
                                            oDetalle.importe = oConceptoParticular.importe;
                                            break;
                                    }

                                    return oDetalle;
        }
예제 #14
0
        public decimal CalcularRecargo(int idFactura)
        {
            using (cooperativaEntities bd = new cooperativaEntities())
            {
                Commons oCommons = new Commons();


                MySqlCommand _comando = new MySqlCommand(String.Format(
                                                             "call GetTotalRecargoByFactura('{0}')", idFactura), dbConectorMySql.ObtenerConexion());

                MySqlDataReader _reader      = _comando.ExecuteReader();
                DataTable       detallesCalc = new DataTable();
                detallesCalc.Load(_reader);
                decimal Recargo = 0;
                Recargo = decimal.Parse(detallesCalc.Rows[0][0].ToString());

                /*var detallesByFact = (from d in bd.facturas_detalles
                 *                    join c in bd.cod_conceptos on d.id_concepto equals c.id_concepto
                 *                    where d.id_factura == idFactura
                 *                    select new
                 *                    {
                 *                        d.id_factura,
                 *                        d.id_detalle,
                 *                        d.id_concepto,
                 *                        d.idOrden,
                 *                        d.idTipo,
                 *                        d.importe,
                 *                        c.id_formula,
                 *                        c.orden_concepto,
                 *                        c.tipo_signo,
                 *                        c.variable,
                 *                        c.activo,
                 *                        c.aplicar_descuento,
                 *                        c.aplicar_iva,
                 *                        c.aplicar_recargo,
                 *                        c.concepto
                 *                    }).ToList();
                 * DataTable detallesCalc = oCommons.convertToTable(detallesByFact);
                 *
                 * foreach (DataRow rowDet in detallesCalc.Rows)
                 * {
                 *  if (bool.Parse(rowDet["aplicar_recargo"].ToString()))
                 *      Recargo = Recargo + decimal.Parse(rowDet["importe"].ToString());
                 * }*/
                /* periodos oPeriodo = new periodos();
                 * PeriodosImplement oPeriososImplement = new PeriodosImplement();
                 *
                 *
                 * FacturasImplement oFacturasImplement = new FacturasImplement();
                 * oPeriodo = oPeriososImplement.Get(oFacturasImplement.Get(idFactura).id_periodo.ToString());*/
                TimeSpan diferencia;
                DateTime fecha_primer_venc = new DateTime();
                fecha_primer_venc = DateTime.Parse(detallesCalc.Rows[0][1].ToString());
                if (fecha_primer_venc < DateTime.Today)
                {
                    diferencia = DateTime.Today - DateTime.Parse(fecha_primer_venc.ToString());
                }
                else
                {
                    diferencia = DateTime.Today - DateTime.Today;
                }
                cod_conceptos     oCod_conceptos     = new cod_conceptos();
                ConceptoImplement oConceptoImplement = new ConceptoImplement();
                oCod_conceptos = oConceptoImplement.Get(18);

                decimal?days      = diferencia.Days * oCod_conceptos.variable;
                decimal resultado = 0;
                if (days >= 0)
                {
                    resultado = (decimal)days;
                }

                int idSocio = 0;
                idSocio = int.Parse(detallesCalc.Rows[0][2].ToString());
                socios         oSocio          = new socios();
                SocioImplement oSocioImplement = new SocioImplement();
                oSocio = oSocioImplement.Get(idSocio);

                tarifas         oTarifa          = new tarifas();
                TarifaImplement oTarifaImplement = new TarifaImplement();
                oTarifa = oTarifaImplement.Get(oSocio.id_socio);

                Recargo = Recargo * resultado;
                DateTime fecha_segundo_venc = new DateTime();
                fecha_segundo_venc = DateTime.Parse(detallesCalc.Rows[0][3].ToString());
                if (fecha_segundo_venc > DateTime.Today)
                {
                    if (oTarifa.cargo_fijo > Recargo) //esto lo hago segun la marca en recargo en tabla tarifas?
                    {
                        Recargo = (decimal)oTarifa.cargo_fijo;
                    }
                }
                return(Recargo);
            }
        }
        public facturas_detalles getDetalle(int idSocio, decimal cargoFijo, decimal abono, decimal valorM3, cod_conceptos oConcepto, facturas oFactura, conceptos_particulares oConceptoParticular)
        {
            SocioMedicionImplement oSocioMedicionImpl = new SocioMedicionImplement();
            socios_mediciones      oSocioMedicion     = new socios_mediciones();

            if (oFactura.id_medicion.Value != 0)
            {
                oSocioMedicion = oSocioMedicionImpl.Get(oFactura.id_medicion.Value);
            }
            acciones        oAccion            = new acciones();
            AccionImplement oAccionesImplement = new AccionImplement();

            facturas_detalles oDetalle = new facturas_detalles();

            oDetalle.idOrden     = oConcepto.orden_concepto;
            oDetalle.id_concepto = oConcepto.id_concepto;
            oDetalle.idTipo      = 0;
            oDetalle.id_factura  = oFactura.id_factura;


            ConvenioImplement oConvenioImplement = new ConvenioImplement();

            switch (oConcepto.id_formula)
            {
            case 0:

                oDetalle.importe = cargoFijo;

                break;

            case 1:

                if (cargoFijo > 0)
                {
                    oDetalle.importe = cargoFijo * oConcepto.variable.Value;
                }
                else
                {
                    if (oFactura.id_medicion.Value != 0)
                    {                            //revisar
                        if ((oSocioMedicion.consumo - abono) <= 0)
                        {
                            // Si no hubo consumo excedente ...
                            oDetalle.importe = abono * valorM3 * oConcepto.variable.Value;
                        }
                        else
                        {
                            //  Si hubo consumo excedente ...
                            decimal uno = (abono * valorM3);
                            decimal dos = ((oSocioMedicion.consumo.Value - abono) * valorM3);
                            oDetalle.importe = (uno + dos) * oConcepto.variable.Value;
                        }
                    }
                    else
                    {
                        //Por que no tiene medidor usa el abono
                        oDetalle.importe = abono * valorM3 * oConcepto.variable.Value;
                    }
                }
                break;

            case 2:
                // Consumo excedente por ValorM3
                // (Facturas.Consumo - Socios.Tarifa->Abono) *
                // Socios.Tarifa->ValorM3


                if (oFactura.id_medicion.Value != 0)
                {
                    oSocioMedicion = oSocioMedicionImpl.Get(oFactura.id_medicion.Value);
                    if ((oSocioMedicion.consumo.Value - abono) > 0)
                    {
                        //        ' Calcula sólo sobre el consumo excedente
                        oDetalle.importe = (oSocioMedicion.consumo.Value - abono) * valorM3;
                    }
                    else
                    {
                        //  No hubo consumo excedente
                        oDetalle.importe = 0;
                    }
                }
                else
                {
                    oDetalle.importe = 0;
                }

                break;

            case 3:
                //  ' Abono por ValorM3
                //' Socios.Tarifa->Abono * Socios.Tarifa->ValorM3
                oDetalle.importe = abono * valorM3;
                break;

            case 4:

                //' Consumo por ValorM3 por Variable
                //' Facturas.Consumo * Socios.Tarifa->ValorM3 * Conceptos.Variable
                if (oFactura.id_medicion.Value != 0)
                {
                    oDetalle.importe = oSocioMedicion.consumo.Value * valorM3 * oConcepto.variable.Value;
                }
                else
                {
                    oDetalle.importe = 0;
                }
                break;

            case 5:

                oAccion = oAccionesImplement.GetByIdSocio(idSocio);
                if (oAccion != null)
                {
                    if (oAccion.cuotas > oAccion.facturadas)
                    {
                        oAccion.facturadas = oAccion.facturadas + 1;
                        oAccionesImplement.Update(oAccion);
                        oDetalle.importe = oAccion.valor_cuota;
                    }
                    else
                    {
                        oDetalle.importe = 0;
                    }
                }
                else
                {
                    oDetalle.importe = 0;
                }

                break;

            case 6:
                // Variable por Cuota Acciones
                // Acciones.ValorCuota * Conceptos.Variable
                // Buscar Acciones
                oAccion = oAccionesImplement.GetByIdSocio(idSocio);
                // Si encuentra un registro
                if (oAccion != null)
                {
                    // Pregunta si no está finalizado
                    if (oAccion.cuotas > oAccion.facturadas)
                    {
                        //Si no ha finalizado se factura una cuota más
                        oAccion.facturadas = oAccion.facturadas + 1;
                        oAccionesImplement.Update(oAccion);
                        oDetalle.importe = oAccion.valor_cuota * oConcepto.variable.Value;
                    }
                    else
                    {
                        oDetalle.importe = 0;
                    }
                }
                else
                {
                    oDetalle.importe = 0;
                }
                break;

            case 7:

                // Cuota Convenio de pago
                // Convenios.ValorCuota
                decimal ImporteConvenios = 0;
                // Inicializa el campo en cero
                oDetalle.importe = 0;
                // Buscar Convenio
                IList ListConvenios = oConvenioImplement.GetAllBySocio(idSocio);
                foreach (convenios oConvenio in ListConvenios)
                {
                    //  Verifica que no se trate de un convenio judicial
                    if (!oConvenio.convenio_judicial.Value)
                    {
                        //Pregunta si no está finalizado
                        if (oConvenio.cuotas > oConvenio.facturadas)
                        {
                            //Si no ha finalizado se factura una cuota más
                            oConvenio.facturadas = oConvenio.facturadas + 1;
                            if (oConvenio.cuotas == oConvenio.facturadas)
                            {
                                oConvenio.finalizado = true;
                            }
                            oConvenioImplement.Update(oConvenio);
                            ImporteConvenios = ImporteConvenios + oConvenio.valor_cuota;
                        }
                    }
                }
                oDetalle.importe = ImporteConvenios;
                break;

            case 8:
                // Variable por Cuota Convenio
                // Convenios.ValorCuota * Conceptos.Variable
                // Buscar Convenio
                IList ListaConvenios = oConvenioImplement.GetAllBySocio(idSocio);
                //Si encuentra un registro
                oDetalle.importe = 0;
                foreach (convenios oConvenio in ListaConvenios)
                {
                    //  Verifica que no se trate de un convenio judicial
                    if (!oConvenio.convenio_judicial.Value)
                    {
                        //Pregunta si no está finalizado
                        if (oConvenio.cuotas > oConvenio.facturadas)
                        {
                            oConvenio.facturadas = oConvenio.facturadas + 1;
                            oConvenioImplement.Update(oConvenio);
                            oDetalle.importe = oConvenio.valor_cuota * oConcepto.variable.Value;
                        }
                        else
                        {
                            oDetalle.importe = 0;
                        }
                    }
                    else
                    {
                        oDetalle.importe = 0;
                    }
                }

                break;

            case 9:
                //Importe fijo según concepto
                // Conceptos.Variable
                oDetalle.importe = oConcepto.variable.Value;
                break;

            case 10:
                // Importe variable que se calcula en el momento
                // (NO IMPLEMENTADO)
                break;

            case 11:
                // Importe fijo según Conceptos Particulares
                // ConceptosPartic.Importe
                oDetalle.importe = oConceptoParticular.importe;
                break;
            }

            return(oDetalle);
        }