protected void gridEstimaciones_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                int         idEstimacion   = Utilerias.StrToInt(gridEstimaciones.DataKeys[e.Row.RowIndex].Values["Id"].ToString());
                ImageButton imgBtnEliminar = (ImageButton)e.Row.FindControl("imgBtnEliminar");


                EstimacionesProgramadas        estimacion = uow.EstimacionesProgramadasBL.GetByID(idEstimacion);
                List <EstimacionesProgramadas> lista      = uow.EstimacionesProgramadasBL.Get(p => p.ContratoDeObraId == estimacion.ContratoDeObraId && p.NumeroDeEstimacion > estimacion.NumeroDeEstimacion).ToList();

                if (lista.Count > 0 || estimacion.ContratoDeObra.Obra.StatusControlFinanciero > 3)
                {
                    imgBtnEliminar.Visible = false;
                }
            }
        }
        protected void imgBtnEliminar_Click(object sender, ImageClickEventArgs e)
        {
            idObra = int.Parse(Session["XidObra"].ToString());
            Obra obra = uow.ObraBusinessLogic.GetByID(idObra);

            if (obra.StatusControlFinanciero < 4)
            {
                GridViewRow row = (GridViewRow)((ImageButton)sender).NamingContainer;

                EstimacionesProgramadas estimacion = uow.EstimacionesProgramadasBL.GetByID(int.Parse(gridEstimaciones.DataKeys[row.RowIndex].Values["Id"].ToString()));

                List <EstimacionesProgramadasConceptos> listaConceptos = uow.EstimacionesProgramadasConceptosBL.Get(p => p.EstimacionProgramadaId == estimacion.Id).ToList();

                ProgramasDeObras conceptoProgramado;
                foreach (EstimacionesProgramadasConceptos item in listaConceptos)
                {
                    uow.EstimacionesProgramadasConceptosBL.Delete(item);

                    conceptoProgramado        = uow.ProgramasDeObrasBL.Get(p => p.PresupuestoContratadoId == item.PresupuestoContratadoId).First();
                    conceptoProgramado.Status = 1;
                    uow.ProgramasDeObrasBL.Update(conceptoProgramado);
                }


                uow.EstimacionesProgramadasBL.Delete(estimacion);


                uow.SaveChanges();

                if (uow.Errors.Count == 0)
                {
                    cargarConceptosPendientes();
                    cargarEstimacionesProgramadas();
                }
            }
        }
        protected void btnAddEstimacion_Click(object sender, EventArgs e)
        {
            DateTime fechaEstimacion;

            idObra = int.Parse(Session["XidObra"].ToString());

            ContratosDeObra contrato = uow.ContratosDeObraBL.Get(p => p.ObraId == idObra).First();

            fechaEstimacion = DateTime.Parse(dtpFecha.Value);

            List <ProgramasDeObras> listaConceptos = uow.ProgramasDeObrasBL.Get(p => p.ContratoDeObra.ObraId == idObra && p.Status == 1 && p.Termino <= fechaEstimacion).ToList();

            if (listaConceptos.Count == 0)
            {
                return;
            }



            EstimacionesProgramadas estimacion = new EstimacionesProgramadas();
            PresupuestosContratados concepto;

            decimal importeEstimado, iva, total;
            decimal amortizacion, ret5, ret2, ret2bis;

            importeEstimado = 0;



            foreach (ProgramasDeObras item in listaConceptos)
            {
                concepto        = uow.PresupuestosContratadosBL.GetByID(item.PresupuestoContratadoId);
                importeEstimado = importeEstimado + concepto.Subtotal;
            }

            iva   = importeEstimado * decimal.Parse("0.16");
            total = importeEstimado * decimal.Parse("1.16");

            amortizacion = decimal.Parse(contrato.PorcentajeDeAnticipo.ToString()) / decimal.Parse("100");
            if (contrato.Descontar5AlMillar)
            {
                ret5 = decimal.Parse("0.005");
            }
            else
            {
                ret5 = 0;
            }
            if (contrato.Descontar2AlMillar)
            {
                ret2 = decimal.Parse("0.002");
            }
            else
            {
                ret2 = 0;
            }
            if (contrato.Descontar2AlMillarSV)
            {
                ret2bis = decimal.Parse("0.002");
            }
            else
            {
                ret2bis = 0;
            }

            amortizacion = total * amortizacion;
            ret5         = total * ret5;
            ret2         = total * ret2;
            ret2bis      = total * ret2bis;

            List <EstimacionesProgramadas> listaEstimacionesProgramadas = uow.EstimacionesProgramadasBL.Get(p => p.ContratoDeObra.ObraId == this.idObra).ToList();
            int NumEstimacion = 0;

            if (listaEstimacionesProgramadas.Count > 0)
            {
                NumEstimacion = listaEstimacionesProgramadas.Max(p => p.NumeroDeEstimacion);
            }

            NumEstimacion++;


            estimacion.ContratoDeObraId   = contrato.Id;
            estimacion.NumeroDeEstimacion = NumEstimacion;
            estimacion.FechaDeEstimacion  = fechaEstimacion;
            estimacion.ImporteEstimado    = importeEstimado;
            estimacion.IVA   = iva;
            estimacion.Total = total;
            estimacion.AmortizacionAnticipo  = amortizacion;
            estimacion.Retencion5AlMillar    = ret5;
            estimacion.Retencion2AlMillar    = ret2;
            estimacion.Retencion2AlMillarSyV = ret2bis;
            estimacion.ImporteAPagar         = total - (amortizacion + ret5 + ret2 + ret2bis);

            uow.EstimacionesProgramadasBL.Insert(estimacion);


            foreach (ProgramasDeObras item in listaConceptos)
            {
                EstimacionesProgramadasConceptos conceptoProgramado = new EstimacionesProgramadasConceptos();

                conceptoProgramado.EstimacionProgramada    = estimacion;
                conceptoProgramado.PresupuestoContratadoId = item.PresupuestoContratadoId;
                conceptoProgramado.Cantidad = item.PresupuestoContratado.Cantidad;
                conceptoProgramado.Subtotal = item.PresupuestoContratado.Subtotal;

                uow.EstimacionesProgramadasConceptosBL.Insert(conceptoProgramado);

                item.Status = 2;
                uow.ProgramasDeObrasBL.Update(item);
            }

            uow.SaveChanges();

            if (uow.Errors.Count == 0)
            {
                cargarConceptosPendientes();
                cargarEstimacionesProgramadas();
                NextNumeroEstimacion();
                dtpFecha.Value = string.Empty;
            }
        }