protected void btnCerrar_Click(object sender, EventArgs e)
        {
            int ejercicio;

            ejercicio = int.Parse(Session["EjercicioId"].ToString());


            TechoFinancieroBitacora tfBit = new TechoFinancieroBitacora();

            tfBit.EjercicioId   = ejercicio;
            tfBit.Movimiento    = 1;
            tfBit.Tipo          = EnumTipoMovimientoTechoFinanciero.CargaInicial;
            tfBit.Fecha         = DateTime.Now;
            tfBit.Oficio        = "";
            tfBit.Observaciones = "Carga Inicial del Techo Financiero Ejercicio" + ejercicio.ToString();
            uow.TechoFinancieroBitacoraBL.Insert(tfBit);


            List <TechoFinancieroUnidadPresupuestal> lista = uow.TechoFinancieroUnidadPresuestalBusinessLogic.Get(p => p.TechoFinanciero.EjercicioId == ejercicio).ToList();

            foreach (TechoFinancieroUnidadPresupuestal elemento in lista)
            {
                TechoFinancieroBitacoraMovimientos tfBitMov = new TechoFinancieroBitacoraMovimientos();

                tfBitMov.TechoFinancieroBitacoraId = tfBit.Id;
                tfBitMov.TechoFinancieroId         = elemento.TechoFinancieroId;
                tfBitMov.UnidadPresupuestalId      = elemento.UnidadPresupuestalId;
                tfBitMov.Incremento = elemento.Importe;
                tfBitMov.Decremento = 0;

                uow.TechoFinancieroBitacoraMovimientosBL.Insert(tfBitMov);

                elemento.ImporteInicial = elemento.Importe;
                uow.TechoFinancieroUnidadPresuestalBusinessLogic.Update(elemento);
            }



            TechoFinancieroStatus obj = uow.TechoFinancieroStatusBusinessLogic.Get(p => p.EjercicioId == ejercicio).First();

            obj.Status = 2;
            uow.TechoFinancieroStatusBusinessLogic.Update(obj);


            uow.SaveChanges();

            //if (uow.Errors.Count > 0)
            //    uow = new UnitOfWork();



            Response.Redirect("wfTechoFinanciero.aspx");
        }
        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            Financiamiento         fin;
            List <Financiamiento>  listaFinanciamientos;
            List <TechoFinanciero> listaTechosFin;

            int fondo            = int.Parse(ddlFondo.SelectedValue);
            int modalidad        = int.Parse(ddlModalidad.SelectedValue);
            int año              = int.Parse(ddlAño.SelectedValue);
            int idFinanciamiento = 0;

            int idEjercicio = int.Parse(Session["EjercicioId"].ToString());
            int usuario     = int.Parse(Session["IdUser"].ToString());

            listaFinanciamientos = uow.FinanciamientoBusinessLogic.Get(p => p.FondoId == fondo && p.ModalidadFinanciamientoId == modalidad && p.AñoId == año).ToList();

            //buscamos el financiamiento seleccionado y si no existe lo creamos
            if (listaFinanciamientos.Count == 0)
            {
                fin = new Financiamiento();

                fin.FondoId = fondo;
                fin.ModalidadFinanciamientoId = modalidad;
                fin.AñoId = año;

                uow.FinanciamientoBusinessLogic.Insert(fin);
                uow.SaveChanges();

                idFinanciamiento = fin.Id;
            }
            else
            {
                foreach (Financiamiento aux in listaFinanciamientos)
                {
                    idFinanciamiento = aux.Id;
                }
            }



            uow.Errors.Clear();

            if (txtOficio.Value.Trim() == string.Empty)
            {
                uow.Errors.Add("No ha capturado el número de oficio correspondiente a este registro");
            }

            if (txtObservaciones.Value.Trim() == string.Empty)
            {
                uow.Errors.Add("No ha capturado las observaciones correspondientes");
            }


            listaTechosFin = uow.TechoFinancieroBusinessLogic.Get(p => p.EjercicioId == idEjercicio && p.FinanciamientoId == idFinanciamiento).ToList();

            if (listaTechosFin.Count == 0)//Nuevo Techo Financiero
            {
                List <TechoFinancieroTMPtransferencias> listaTMP = uow.TechoFinancieroTMPtransferenciasBL.Get(p => p.Usuario == usuario).ToList();

                //insertar el techo financiero
                TechoFinanciero obj = new TechoFinanciero();
                obj.EjercicioId      = idEjercicio;
                obj.FinanciamientoId = idFinanciamiento;
                obj.Importe          = listaTMP.Sum(q => q.Importe);
                uow.TechoFinancieroBusinessLogic.Insert(obj);

                //insertar la bitacora
                TechoFinancieroBitacora bitacora = new TechoFinancieroBitacora();
                bitacora.EjercicioId   = idEjercicio;
                bitacora.Movimiento    = 3;
                bitacora.Tipo          = EnumTipoMovimientoTechoFinanciero.NuevoFondo;
                bitacora.Fecha         = DateTime.Now;
                bitacora.Oficio        = txtOficio.Value;
                bitacora.Observaciones = txtObservaciones.Value;
                uow.TechoFinancieroBitacoraBL.Insert(bitacora);



                int i = 0;
                foreach (TechoFinancieroTMPtransferencias item in listaTMP)
                {
                    i++;

                    TechoFinancieroUnidadPresupuestal tfup = new TechoFinancieroUnidadPresupuestal();
                    tfup.UnidadPresupuestalId = item.OrigenId;
                    tfup.Importe = item.Importe;
                    obj.detalleUnidadesPresupuestales.Add(tfup);



                    TechoFinancieroBitacoraMovimientos bitacoraMovimientos = new TechoFinancieroBitacoraMovimientos();
                    bitacoraMovimientos.TechoFinancieroBitacora = bitacora;
                    bitacoraMovimientos.Submovimiento           = i;
                    bitacoraMovimientos.UnidadPresupuestalId    = item.OrigenId;
                    bitacoraMovimientos.Decremento = 0;
                    bitacoraMovimientos.Incremento = item.Importe;
                    obj.detalleBitacoraMovimientos.Add(bitacoraMovimientos);
                }
            }
            else
            {
                uow.Errors.Add("El financiamiento que quiere registrar ya ha sido capturado anteriormente");
            }



            if (uow.Errors.Count == 0)
            {
                uow.SaveChanges();
            }



            if (uow.Errors.Count == 0)
            {
                Response.Redirect("wfTechoFinanciero.aspx");
            }
            else
            {
                divMsgSuccess.Style.Add("display", "none");
                divMsgFail.Style.Add("display", "block");

                string mensaje;
                mensaje = string.Empty;
                foreach (string cad in uow.Errors)
                {
                    mensaje = mensaje + cad + "<br>";
                }

                lblMensajeFail.Text = mensaje;
            }
        }
        protected void btnOk_Click(object sender, EventArgs e)
        {
            int usuario        = int.Parse(Session["IdUser"].ToString());
            int idEjercicio    = int.Parse(Session["EjercicioId"].ToString());
            int financiamiento = int.Parse(_financiamiento.Text);
            int next           = uow.TechoFinancieroBitacoraBL.Get(p => p.EjercicioId == idEjercicio).ToList().Max(q => q.Movimiento);

            next++;

            if (txtOficio.Value == string.Empty)
            {
                return;
            }


            TechoFinancieroBitacora bitacora = new TechoFinancieroBitacora();

            bitacora.EjercicioId   = idEjercicio;
            bitacora.Movimiento    = next;
            bitacora.Tipo          = EnumTipoMovimientoTechoFinanciero.Transferencia;
            bitacora.Fecha         = DateTime.Now;
            bitacora.Oficio        = txtOficio.Value;
            bitacora.Observaciones = txtObservaciones.Value;

            uow.TechoFinancieroBitacoraBL.Insert(bitacora);

            List <TechoFinancieroTMPtransferencias> lista;

            lista = uow.TechoFinancieroTMPtransferenciasBL.Get(p => p.Usuario == usuario).ToList();


            TechoFinancieroBitacoraMovimientos bitmov;
            TechoFinancieroUnidadPresupuestal  tfup;

            int i = 0;

            foreach (TechoFinancieroTMPtransferencias elemento in lista)
            {
                i++;

                //Decrementamos


                bitmov = new TechoFinancieroBitacoraMovimientos();
                bitmov.TechoFinancieroId    = financiamiento;
                bitmov.Submovimiento        = i;
                bitmov.UnidadPresupuestalId = elemento.OrigenId;
                bitmov.Incremento           = 0;
                bitmov.Decremento           = elemento.Importe;
                bitacora.detalleMovimientos.Add(bitmov);



                tfup         = uow.TechoFinancieroUnidadPresuestalBusinessLogic.Get(p => p.TechoFinancieroId == financiamiento && p.UnidadPresupuestalId == elemento.OrigenId).First();
                tfup.Importe = tfup.Importe - elemento.Importe;
                uow.TechoFinancieroUnidadPresuestalBusinessLogic.Update(tfup);

                //incrementamos
                bitmov = new TechoFinancieroBitacoraMovimientos();
                bitmov.TechoFinancieroId    = financiamiento;
                bitmov.Submovimiento        = i;
                bitmov.UnidadPresupuestalId = elemento.DestinoId;
                bitmov.Incremento           = elemento.Importe;
                bitmov.Decremento           = 0;
                bitacora.detalleMovimientos.Add(bitmov);



                List <TechoFinancieroUnidadPresupuestal> listaUP = uow.TechoFinancieroUnidadPresuestalBusinessLogic.Get(p => p.TechoFinancieroId == financiamiento && p.UnidadPresupuestalId == elemento.DestinoId).ToList();

                if (listaUP.Count == 0)
                {
                    tfup = new TechoFinancieroUnidadPresupuestal();
                    tfup.TechoFinancieroId    = financiamiento;
                    tfup.UnidadPresupuestalId = elemento.DestinoId;
                    tfup.Importe = elemento.Importe;
                    uow.TechoFinancieroUnidadPresuestalBusinessLogic.Insert(tfup);
                }
                else
                {
                    tfup         = uow.TechoFinancieroUnidadPresuestalBusinessLogic.Get(p => p.TechoFinancieroId == financiamiento && p.UnidadPresupuestalId == elemento.DestinoId).First();
                    tfup.Importe = tfup.Importe + elemento.Importe;
                    uow.TechoFinancieroUnidadPresuestalBusinessLogic.Update(tfup);
                }


                uow.SaveChanges();
            }



            if (uow.Errors.Count == 0)
            {
                divTransferencia.Style.Add("display", "none");
                divNuevo.Style.Add("display", "block");

                txtOficio.Value        = string.Empty;
                txtObservaciones.Value = string.Empty;

                MostrarAsignaciones();
            }
            else
            {
                divMsgSuccess.Style.Add("display", "none");
                divMsgFail.Style.Add("display", "block");

                string mensaje;
                mensaje = string.Empty;
                foreach (string cad in uow.Errors)
                {
                    mensaje = mensaje + cad + "<br>";
                }

                lblMensajeFail.Text = mensaje;
            }
        }