/// <summary> Consulta los datos de una cuenta si esta esta liquidada. </summary>
        /// <param name="tstrCuenta"> Código de la cuenta a consultar. </param>
        /// <returns> Un objeto del tipo LiquidacionAhorroNavideno. </returns>
        public LiquidacionAhorroNatilleraEscolar gmtdConsultarCuentaLiquidada(string tstrCuenta)
        {
            using (dbExequial2010DataContext cuenta = new dbExequial2010DataContext())
            {
                var query = from cue in cuenta.tblAhorrosNatilleraEscolars
                            where cue.strCuenta == tstrCuenta && cue.bitLiquidada == true && cue.bitAnulado == false
                            select cue;

                if (query.ToList().Count > 0)
                {
                    LiquidacionAhorroNatilleraEscolar cuen = new LiquidacionAhorroNatilleraEscolar();
                    foreach (var dato in query.ToList())
                    {
                        cuen.strCuenta    = tstrCuenta;
                        cuen.intCodigoEgr = (int)dato.intCodigoEgr;
                        cuen.intCodigoIng = (int)dato.intCodigoIng;
                    }
                    return(cuen);
                }
                else
                {
                    return(new LiquidacionAhorroNatilleraEscolar());
                }
            }
        }
        /// <summary> Registra la liquidación de una cuenta de ahorro Navideño. </summary>
        /// <param name="tstrCuenta"> Cuenta de ahorro navideño a liquidar. </param>
        /// <param name="pstrUsuario"> Usuario que hizo la liquidación. </param>
        /// <param name="pstrMaquina"> Maquina desde la quie se hizo la operación. </param>
        /// <returns> Un string que indica si se registro o no la liquidación. </returns>
        public string gmtdLiquidarAhorroNatilleraEscolar(LiquidacionAhorroNatilleraEscolar tobjLiquidacion, string pstrUsuario, string pstrMaquina)
        {
            if (tobjLiquidacion.strCuenta == null || tobjLiquidacion.strCuenta.Trim() == "")
            {
                return("- Debe de ingresar la cuenta que desea liquidar. ");
            }

            if (tobjLiquidacion.decTotalRecaudado <= 0 ||
                tobjLiquidacion.intCuotasPagadas <= 0 ||
                tobjLiquidacion.decTotalLiquidacion <= 0 ||
                tobjLiquidacion.decPorcentajeCuotasPagadas <= 0 ||
                tobjLiquidacion.strAhorrador == null ||
                tobjLiquidacion.strAhorrador == "")
            {
                if (tobjLiquidacion.strAhorrador != "")
                {
                    return("- No se han hecho abonos para liquidar esta cuenta. ");
                }
                else
                {
                    return("- Faltan datos para registrar la liquidación. ");
                }
            }

            tobjLiquidacion.log = metodos.gmtdLog("Registra la liquidación de ahorro Navideño.  " + tobjLiquidacion.strCuenta, "FrmAhorrosNavideñoLiquidacion");

            tobjLiquidacion.strCedulaAho = new blAhorrosNatilleraEscolar().gmtdConsultar(tobjLiquidacion.strCuenta).strCedulaAho;

            return(new daoAhorrosNatilleraEscolar().gmtdLiquidarAhorroNatilleraEscolar(tobjLiquidacion, pstrUsuario, pstrMaquina));
        }
        /// <summary> Consulta los datos de la liquidación de una cuenta de ahorro navideño. </summary>
        /// <param name="tstrCuenta"> Cuenta de la que se desea conocer los datos de liquidación. </param>
        /// <returns> Un objeto con los datos de la liquidacion. </returns>
        public LiquidacionAhorroNatilleraEscolar gmtdCalcularLiquidacionAhorroNatilleraEscolar(string tstrCuenta, int tintAño)
        {
            LiquidacionAhorroNatilleraEscolar liquidacion = new LiquidacionAhorroNatilleraEscolar();

            using (dbExequial2010DataContext ahorros = new dbExequial2010DataContext())
            {
                var query = from det in ahorros.tblAhorrosNatilleraEscolarDetalles
                            join enc in ahorros.tblAhorrosNatilleraEscolars on det.strCuenta equals enc.strCuenta
                            where det.bitPagada == true && det.strCuenta == tstrCuenta && enc.intAno == tintAño
                            orderby det.dtmFechaCuota ascending
                            select new { det, enc };

                int intCuotasPagadas = query.ToList().Count;

                if (intCuotasPagadas != 38)
                {
                    var queryCuotas = from det in ahorros.tblAhorrosNatilleraEscolarDetalles
                                      join enc in ahorros.tblAhorrosNatilleraEscolars on det.strCuenta equals enc.strCuenta
                                      where det.strCuenta == tstrCuenta && enc.intAno == tintAño
                                      orderby det.dtmFechaCuota ascending
                                      select det;

                    DateTime dtmUltimaCuota = queryCuotas.ToList()[queryCuotas.ToList().Count - 1].dtmFechaCuota;

                    if (new daoUtilidadesConfiguracion().gmtdCapturarFechadelServidor() < dtmUltimaCuota)
                    {
                        liquidacion.bitAplicarMulta = true;
                    }
                    else
                    {
                        liquidacion.bitAplicarMulta = false;
                    }
                }


                var query1 = from cue in ahorros.tblAhorrosNatilleraEscolars
                             join per in ahorros.tblAhorradores on cue.strCedulaAho equals per.strCedulaAho
                             where cue.bitAnulado == false && cue.bitLiquidada == false && cue.strCuenta == tstrCuenta
                             select new { cue.strCuenta, cue.strCedulaAho, per.strNombreAho, per.strApellido1Aho, per.strApellido2Aho, cue.bitLiquidada, cue.dtmFechaCuenta, cue.dtmFechaLiquidada, cue.fltIntereses, cue.fltPremios, cue.fltValorCuota, cue.intAno, cue.intCuotas };

                foreach (var dato in query1.ToList())
                {
                    liquidacion.decDescuento = 0;
                    liquidacion.decIntereses = Convert.ToDecimal(dato.fltIntereses);
                    liquidacion.decPorcentajeCuotasPagadas = 0;
                    liquidacion.decPremios          = Convert.ToDecimal(dato.fltPremios);
                    liquidacion.decTotalLiquidacion = 0;
                    liquidacion.decTotalRecaudado   = Convert.ToDecimal(dato.fltValorCuota) * intCuotasPagadas;
                    liquidacion.intCuotasPagadas    = intCuotasPagadas;
                    liquidacion.strAhorrador        = dato.strNombreAho + " " + dato.strApellido1Aho + " " + dato.strApellido2Aho;
                    liquidacion.strCuenta           = tstrCuenta;
                }
                return(liquidacion);
            }
        }
        /// <summary> Elimina la liquidación de una cuenta de ahorro navideño. </summary>
        /// <param name="tobjCuentaLiquidad"> Un objeto con el código de la cuenta a eliminar. </param>
        /// <returns> Un string que indica si se ejecuto o no la operación. </returns>
        public string gmtdEliminarLiquidaciondeCuenta(LiquidacionAhorroNatilleraEscolar tobjCuentaLiquidada)
        {
            if (new daoAhorrosNatilleraEscolar().gmtdConsultarCuentaLiquidada(tobjCuentaLiquidada.strCuenta).strCuenta == null)
            {
                return("- No se puede eliminar la liquidación de cuenta por que no aparece liquidada. ");
            }

            LiquidacionAhorroNatilleraEscolar consulta = new daoAhorrosNatilleraEscolar().gmtdConsultarCuentaLiquidada(tobjCuentaLiquidada.strCuenta);

            tobjCuentaLiquidada.intCodigoEgr = consulta.intCodigoEgr;
            tobjCuentaLiquidada.intCodigoIng = consulta.intCodigoIng;

            tobjCuentaLiquidada.log = metodos.gmtdLog("Elimina la liquidación de ahorro Navideño.  " + tobjCuentaLiquidada.strCuenta, tobjCuentaLiquidada.strFormulario);

            return(new daoAhorrosNatilleraEscolar().gmtdEliminarLiquidaciondeCuenta(tobjCuentaLiquidada));
        }
        /// <summary> Crea un objeto del tipo aplicación de acuerdo a la información de los texbox. </summary>
        /// <returns> Un objeto del tipo aplicación. </returns>
        private LiquidacionAhorroNatilleraEscolar crearObj()
        {
            LiquidacionAhorroNatilleraEscolar ahorroNatilleraEscolar = new LiquidacionAhorroNatilleraEscolar();

            ahorroNatilleraEscolar.decDescuento = Convert.ToDecimal(this.txtDescuento.Text);
            ahorroNatilleraEscolar.decIntereses = Convert.ToDecimal(this.txtIntereses.Text);
            ahorroNatilleraEscolar.decPorcentajeCuotasPagadas = Convert.ToDecimal(this.txtPorcentajeCuotasPagadas.Text);
            ahorroNatilleraEscolar.decPremios          = Convert.ToDecimal(this.txtPremios.Text);
            ahorroNatilleraEscolar.decTotalLiquidacion = Convert.ToDecimal(this.txtTotalLiquidacion.Text);
            ahorroNatilleraEscolar.decTotalRecaudado   = Convert.ToDecimal(this.txtTotalRecaudado.Text);
            ahorroNatilleraEscolar.intCuotasaPagar     = Convert.ToInt32(this.txtCuotasaPagar.Text);
            ahorroNatilleraEscolar.intCuotasPagadas    = Convert.ToInt32(this.txtCuotasPagadas.Text);
            ahorroNatilleraEscolar.strAhorrador        = this.txtAhorrador.Text;
            ahorroNatilleraEscolar.strCuenta           = this.txtCuenta.Text;
            ahorroNatilleraEscolar.strFormulario       = this.Name;
            return(ahorroNatilleraEscolar);
        }
        private void btnCalcularLiquidacion_Click(object sender, EventArgs e)
        {
            if (this.txtCuenta.Text == null || this.txtCuenta.Text.Trim() == "" || this.txtCuenta.Text == "0")
            {
                MessageBox.Show("Debe de digitar el número de la cuenta a liquidar. ", "Liquidar", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            tblAhorrosNatilleraEscolar ahorro = new blAhorrosNatilleraEscolar().gmtdConsultar(this.txtCuenta.Text);

            if (ahorro.strCuenta == null)
            {
                MessageBox.Show("No se puede liquidar una cuenta que no existe. ", "Liquidar", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (ahorro.bitAnulado == true)
            {
                MessageBox.Show("No se puede liquidar una cuenta anulada. ", "Liquidar", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            if (ahorro.bitLiquidada == true)
            {
                MessageBox.Show("No se puede liquidar una cuenta liquidada. ", "Liquidar", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            liquidacion = new blAhorrosNatilleraEscolar().gmtdCalcularLiquidacionAhorroNatilleraEscolar(this.txtCuenta.Text);
            liquidacion.strComputador = Environment.MachineName;
            liquidacion.strUsuario    = propiedades.strLogin;

            this.txtAhorrador.Text               = liquidacion.strAhorrador;
            this.txtCuotasPagadas.Text           = liquidacion.intCuotasPagadas.ToString();
            this.txtPorcentajeCuotasPagadas.Text = liquidacion.decPorcentajeCuotasPagadas.ToString();
            this.txtCuotasaPagar.Text            = "52";
            this.txtIntereses.Text               = liquidacion.decIntereses.ToString();
            this.txtPremios.Text          = liquidacion.decPremios.ToString();
            this.txtTotalRecaudado.Text   = liquidacion.decTotalRecaudado.ToString();
            this.txtDescuento.Text        = liquidacion.decDescuento.ToString();
            this.txtTotalLiquidacion.Text = liquidacion.decTotalLiquidacion.ToString();
        }
        /// <summary> Elimina la liquidación de una cuenta de ahorro navideño. </summary>
        /// <param name="tobjCuentaLiquidad"> Un objeto con el código de la cuenta a eliminar. </param>
        /// <returns> Un string que indica si se ejecuto o no la operación. </returns>
        public string gmtdEliminarLiquidaciondeCuenta(LiquidacionAhorroNatilleraEscolar tobjCuentaLiquidad)
        {
            String   strResultado;
            DateTime dtmFechaActual      = new blConfiguracion().gmtdCapturarFechadelServidor();
            decimal  decValorLiquidacion = 0;
            decimal  decValorMulta       = 0;
            string   strNombre           = "";
            string   strApellido         = "";

            try
            {
                using (TransactionScope ts = new TransactionScope())
                {
                    using (dbExequial2010DataContext reciboEgreso = new dbExequial2010DataContext())
                    {
                        tblEgreso egre_old = reciboEgreso.tblEgresos.SingleOrDefault(p => p.intCodigoEgr == tobjCuentaLiquidad.intCodigoEgr);
                        egre_old.bitAnulado  = true;
                        egre_old.dtmFechaAnu = dtmFechaActual;
                        decValorLiquidacion  = egre_old.decTotal;
                        strNombre            = egre_old.strNombre;
                        strApellido          = egre_old.strApellido;
                        reciboEgreso.tblLogdeActividades.InsertOnSubmit(metodos.gmtdLog("Elimino el egreso " + tobjCuentaLiquidad.intCodigoEgr.ToString(), "FrmAhorrosaFuturoLiquidacion"));
                        reciboEgreso.SubmitChanges();

                        #region Mvto ingreso x anular liquidación de ahorro navideño
                        List <cuentaValores>[] cuotasValores = new blCuentaPar().gmtdCalcularValores("0001", decValorLiquidacion);
                        List <cuentaValores>   cuentasDebito = cuotasValores[0];
                        for (int a = 0; a < cuentasDebito.Count; a++)
                        {
                            reciboEgreso.tblCuentasOperacionesContabilidads.InsertOnSubmit(new blRecibosIngresos().gmtdMvtoContableIngresos(cuentasDebito[a].decValor, 0, cuentasDebito[a].strCuenta, "Recibo de ingreso x Anular liquidación de ahorro navideño", 1, tobjCuentaLiquidad.strCedulaAho, strNombre + " " + strApellido, dtmFechaActual));
                        }
                        List <cuentaValores> cuentasCredito = cuotasValores[1];
                        for (int a = 0; a < cuentasCredito.Count; a++)
                        {
                            reciboEgreso.tblCuentasOperacionesContabilidads.InsertOnSubmit(new blRecibosIngresos().gmtdMvtoContableIngresos(cuentasCredito[a].decValor, 0, cuentasCredito[a].strCuenta, "Recibo de ingreso x Anular liquidación de ahorro navideño", 2, tobjCuentaLiquidad.strCedulaAho, strNombre + " " + strApellido, dtmFechaActual));
                        }
                        #endregion
                    }

                    if (tobjCuentaLiquidad.intCodigoIng > 0)
                    {
                        using (dbExequial2010DataContext reciboEgreso = new dbExequial2010DataContext())
                        {
                            tblIngreso ing_old = reciboEgreso.tblIngresos.SingleOrDefault(p => p.intCodigoIng == tobjCuentaLiquidad.intCodigoIng);
                            ing_old.bitAnulado  = true;
                            ing_old.dtmFechaAnu = dtmFechaActual;
                            decValorMulta       = ing_old.decTotalIng;
                            reciboEgreso.tblLogdeActividades.InsertOnSubmit(metodos.gmtdLog("Elimino el ingreso " + tobjCuentaLiquidad.intCodigoIng.ToString(), "FrmAhorrosaFuturoLiquidacion"));
                            reciboEgreso.SubmitChanges();

                            #region Mvto egreso x anular liquidación de ahorro navideño
                            List <cuentaValores>[] cuotasValores = new blCuentaPar().gmtdCalcularValores("0001", decValorMulta);
                            List <cuentaValores>   cuentasDebito = cuotasValores[0];
                            for (int a = 0; a < cuentasDebito.Count; a++)
                            {
                                reciboEgreso.tblCuentasOperacionesContabilidads.InsertOnSubmit(new blRecibosIngresos().gmtdMvtoContableIngresos(cuentasDebito[a].decValor, 0, cuentasDebito[a].strCuenta, "Recibo de egreso x Anular liquidación de ahorro a futuro", 2, tobjCuentaLiquidad.strCedulaAho, strNombre + " " + strApellido, dtmFechaActual));
                            }
                            List <cuentaValores> cuentasCredito = cuotasValores[1];
                            for (int a = 0; a < cuentasCredito.Count; a++)
                            {
                                reciboEgreso.tblCuentasOperacionesContabilidads.InsertOnSubmit(new blRecibosIngresos().gmtdMvtoContableIngresos(cuentasCredito[a].decValor, 0, cuentasCredito[a].strCuenta, "Recibo de egreso x Anular liquidación de ahorro a futuro", 1, tobjCuentaLiquidad.strCedulaAho, strNombre + " " + strApellido, dtmFechaActual));
                            }
                            #endregion
                        }
                    }

                    using (dbExequial2010DataContext ahorro = new dbExequial2010DataContext())
                    {
                        tblAhorrosNatilleraEscolar aho_old = ahorro.tblAhorrosNatilleraEscolars.SingleOrDefault(p => p.strCuenta == tobjCuentaLiquidad.strCuenta);
                        aho_old.bitLiquidada      = false;
                        aho_old.dtmFechaLiquidada = Convert.ToDateTime("1900/01/01");
                        ahorro.tblLogdeActividades.InsertOnSubmit(tobjCuentaLiquidad.log);
                        ahorro.SubmitChanges();
                        strResultado = "Registro Anulado";
                    }

                    ts.Complete();
                }
            }
            catch (Exception ex)
            {
                new dao().gmtdInsertarError(ex);
                strResultado = "- Ocurrió un error al Actualizar el registro";
            }
            return(strResultado);
        }
        /// <summary> Registra la liquidación de una cuenta de ahorro navideño. </summary>
        /// <param name="tstrCuenta"> Cuenta de ahorro navideño a liquidar. </param>
        /// <returns> Un string que indica si se registro o no la liquidación. </returns>
        public string gmtdLiquidarAhorroNatilleraEscolar(LiquidacionAhorroNatilleraEscolar tobjLiquidacion, string pstrUsuario, string pstrMaquina)
        {
            String     strResultado;
            string     strIngreso = "";
            string     strEgreso  = "";
            DateTime   dtmFechaActual;
            tblEgreso  egreso  = new tblEgreso();
            tblIngreso ingreso = new tblIngreso();
            DataTable  dt      = new DataTable();

            try
            {
                tblEgresosAhorrosNatilleraEscolarLiquidacion egresoLiquidacionNavideno = new tblEgresosAhorrosNatilleraEscolarLiquidacion();
                egresoLiquidacionNavideno.strCuenta = tobjLiquidacion.strCuenta;

                egreso.bitRetiroAhorroNatilleraEscolarLiquidacion = true;
                if (tobjLiquidacion.bitAplicarMulta)
                {
                    egresoLiquidacionNavideno.decValorLiquidacion = tobjLiquidacion.decTotalRecaudado;
                    egreso.decTotal = tobjLiquidacion.decTotalRecaudado;
                }
                else
                {
                    egresoLiquidacionNavideno.decValorLiquidacion = tobjLiquidacion.decTotalLiquidacion;
                    egreso.decTotal = tobjLiquidacion.decTotalLiquidacion;
                }

                egreso.dtmFechaAnu   = Convert.ToDateTime("1/1/1900");
                dtmFechaActual       = new daoUtilidadesConfiguracion().gmtdCapturarFechadelServidor();
                egreso.dtmFechaRec   = dtmFechaActual;
                egreso.strApellido   = "";
                egreso.strCedulaEgre = tobjLiquidacion.strCedulaAho;
                egreso.strFormulario = tobjLiquidacion.strFormulario;
                egreso.strLetras     = new blConfiguracion().montoenLetras(tobjLiquidacion.decTotalLiquidacion.ToString());
                egreso.strNombre     = tobjLiquidacion.strAhorrador;
                egreso.strMaquina    = pstrMaquina;
                egreso.strUsuario    = pstrUsuario;
                egreso.objEgresosAhorrosNatilleraEscolarLiquidacion = egresoLiquidacionNavideno;

                XmlDocument xml = blRecibosEgresos.SerializeServicio(egreso);

                List <SqlParameter> lstParametros = new List <SqlParameter>();
                SqlParameter        objParameter  = new SqlParameter();
                objParameter.DbType        = DbType.Xml;
                objParameter.Direction     = ParameterDirection.Input;
                objParameter.ParameterName = "xmlEgreso";
                objParameter.Value         = xml.OuterXml;
                lstParametros.Add(objParameter);

                dt = new Utilidad().ejecutarSpConeccionDB(lstParametros, Sp.spEgresoInsertar);
            }
            catch (Exception ex)
            {
                new dao().gmtdInsertarError(ex);
                strResultado = "- Ocurrió un error al Actualizar el registro";
            }

            strEgreso  = dt.Rows[0]["intCodigoEgr"].ToString();
            strIngreso = dt.Rows[0]["intCodigoIng"].ToString();

            strResultado = "Se hace el registro del siguiente egreso" + " \n " + strEgreso;

            return(strResultado);
        }