Ejemplo n.º 1
0
        /// <summary>
        /// Elimina el objetivo y sus acciones asociadas
        /// </summary>
        public static void EliminaObjetivo(int iObjetivoId)
        {
            using (Entities c = new Entities())
            {
                OBJETIVO obj = c.CONTENIDO.OfType <OBJETIVO>().Where(o => o.CONTENIDO_ID == iObjetivoId).FirstOrDefault();
                if (obj != null)
                {
                    var results = c.CONTENIDO.OfType <ACCION>().Where(st => st.OBJETIVO_CONTENIDO_ID == iObjetivoId).ToList();

                    c.CONTENIDO.RemoveRange(results);
                    c.SaveChanges();

                    c.CONTENIDO.Remove(obj);
                    c.SaveChanges();
                }
                else
                {
                    throw new Exception("Objetivo no encontrado: " + iObjetivoId.ToString());
                }
            }
        }
Ejemplo n.º 2
0
        /// Valida el contenido actual (todos los campos). Si está marcado como tipo de cambio:
        /// - Alta: se mostrará en la parte pública
        /// - Modificación: se modificará y se mostrará
        /// - Elminación: se eliminará (si es un objetivo, eliminará también las acciones dependientes)
        /// </summary>
        public void Validar(Entities c)
        {
            using (c)
            {
                this.ESTADO_VALIDACION_ID = ESTADOS_VALIDACION.VALIDADO;

                this.OBJETIVO_ESTRATEGICO = this.OBJETIVO_ESTRATEGICO_PDTE_VAL.ToString();

                if (this.TIPO_CAMBIO_CONTENIDO_ID == TIPO_CAMBIO_CONTENIDO.ALTA)
                {
                    this.VISIBLE = true;
                }
                else if (this.TIPO_CAMBIO_CONTENIDO_ID == TIPO_CAMBIO_CONTENIDO.MODIFICACION)
                {
                }
                else if (this.TIPO_CAMBIO_CONTENIDO_ID == TIPO_CAMBIO_CONTENIDO.ELIMINADO)
                {
                }


                if (this.TIPO_CAMBIO_CONTENIDO_ID != TIPO_CAMBIO_CONTENIDO.ELIMINADO)
                {
                    //Si no es eliminar guardamos los cambios
                    this.TIPO_CAMBIO_CONTENIDO_ID = TIPO_CAMBIO_CONTENIDO.SIN_CAMBIOS;
                    this.FECHA_MODIFICACION       = DateTime.Now;
                    c.CONTENIDO.Attach(this);
                    c.Entry(this).State = EntityState.Modified; //Siempre es modificación, ya que aunque sea Alta, ya existirá el registro en la BBDD
                    c.SaveChanges();
                }
                else
                {
                    //Si el cambio es eliminar, eliminamos
                    OBJETIVO.EliminaObjetivo(this.CONTENIDO_ID);
                }

                //Actualizamos porcentajes
                using (var dbContextTransaction = c.Database.BeginTransaction())
                {
                    try
                    {
                        Int16   nObjetivos           = 0;
                        decimal dPorcentajeAcumulado = 0;
                        var     Objetivos            = c.CONTENIDO.OfType <OBJETIVO>().Where(o => o.DEPARTAMENTO_ID == this.DEPARTAMENTO_ID);
                        foreach (OBJETIVO obj in Objetivos)
                        {
                            if (obj.VISIBLE && obj.TIPO_CAMBIO_CONTENIDO_ID != 1)
                            {
                                nObjetivos++;
                                if (obj.PORCENTAJE_AVANCE_CALCULADO != null)
                                {
                                    dPorcentajeAcumulado += Convert.ToDecimal(obj.PORCENTAJE_AVANCE_CALCULADO);
                                }
                            }
                        }
                        //Actualizamos el % en su departamento
                        DEPARTAMENTO dep = c.DEPARTAMENTO.Find(this.DEPARTAMENTO_ID);
                        dep.PORCENTAJE_AVANCE_CALCULADO = (Math.Round(Decimal.Divide(dPorcentajeAcumulado, nObjetivos), 2));

                        c.DEPARTAMENTO.Attach(dep);
                        c.Entry(dep).State = EntityState.Modified;
                        c.SaveChanges();

                        dbContextTransaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        dbContextTransaction.Rollback();
                        throw ex;
                    }
                }
            }
        }