コード例 #1
0
        /// <summary>
        /// Elimina el departamento y sus objetivos / acciones asociadas
        /// </summary>
        public static void EliminaDepartamento(int iDepartamentoId)
        {
            using (Entities c = new Entities())
            {
                using (var dbContextTransaction = c.Database.BeginTransaction())
                {
                    try
                    {
                        foreach (OBJETIVO obj in c.CONTENIDO.OfType <OBJETIVO>().Where(o => o.DEPARTAMENTO_ID == iDepartamentoId))
                        {
                            var results = c.CONTENIDO.OfType <ACCION>().Where(st => st.OBJETIVO_CONTENIDO_ID == obj.CONTENIDO_ID).ToList();
                            //Borramos acciones
                            c.CONTENIDO.RemoveRange(results);
                            c.SaveChanges();
                            //Borramos el objetivo
                            c.CONTENIDO.Remove(obj);
                            c.SaveChanges();
                        }


                        DEPARTAMENTO dep = c.DEPARTAMENTO.Find(iDepartamentoId);
                        if (dep != null)
                        {
                            c.DEPARTAMENTO.Remove(dep);
                            c.SaveChanges();
                            dbContextTransaction.Commit();
                        }
                        else
                        {
                            throw new Exception("Departamento no encontrado: " + iDepartamentoId.ToString());
                        }
                    }
                    catch (Exception ex)
                    {
                        dbContextTransaction.Rollback();
                        throw ex;
                    }
                }
            }
        }
コード例 #2
0
ファイル: OBJETIVO.cs プロジェクト: javiertomey/PLGO
        /// 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;
                    }
                }
            }
        }
コード例 #3
0
ファイル: ACCION.cs プロジェクト: javiertomey/PLGO
        /// <summary>
        /// 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)
        {
            bool bModificadoPorcentajeAvance = false;

            if (this.PORCENTAJE_AVANCE != this.PORCENTAJE_AVANCE_PDTE_VAL)
            {
                bModificadoPorcentajeAvance = true;
            }

            this.ESTADO_VALIDACION_ID = ESTADOS_VALIDACION.VALIDADO;

            this.SEGUIMIENTO           = this.SEGUIMIENTO_PDTE_VAL.ToString(); //ToString: para que haga una copia de la cadena
            this.RECURSOS_HUMANOS      = this.RECURSOS_HUMANOS_PDTE_VAL.ToString();
            this.COSTE_ECONOMICO       = this.COSTE_ECONOMICO_PDTE_VAL.ToString();
            this.INSTRUMENTOS_ACT      = this.INSTRUMENTOS_ACT_PDTE_VAL.ToString();
            this.TEMPORALIDAD          = this.TEMPORALIDAD_PDTE_VAL.ToString();
            this.INDICADOR_SEGUIMIENTO = this.INDICADOR_SEGUIMIENTO_PDTE_VAL.ToString();
            //this.ESTADO_SEGUIMIENTO_ID = this.ESTADO_SEGUIMIENTO_ID_PDTE_VAL;
            this.PORCENTAJE_AVANCE  = this.PORCENTAJE_AVANCE_PDTE_VAL;
            this.ORGANO_RESPONSABLE = this.ORGANO_RESPONSABLE_PDTE_VAL.ToString();
            this.MEDIOS_OTROS       = this.MEDIOS_OTROS_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;



                if (!bModificadoPorcentajeAvance)
                {
                    using (c)
                    {
                        c.CONTENIDO.Attach(this);
                        c.Entry(this).State = EntityState.Modified;
                        c.SaveChanges();
                    }
                }
                else
                {     //hay que actualizar los % de avance calculados:
                    using (var dbContextTransaction = c.Database.BeginTransaction())
                    {
                        try
                        {
                            //Guardamos los cambios pendiente
                            c.CONTENIDO.Attach(this);
                            c.Entry(this).State = EntityState.Modified;
                            c.SaveChanges();

                            //Actualizamos el % en su objetivo
                            Decimal dPorcentajeAcumulado = 0;
                            Int16   nAcciones            = 0;

                            var Acciones = c.CONTENIDO.OfType <ACCION>().Where(o => o.OBJETIVO_CONTENIDO_ID == this.OBJETIVO_CONTENIDO_ID);

                            foreach (ACCION acc in Acciones)
                            {
                                if (acc.VISIBLE && !String.IsNullOrEmpty(acc.INSTRUMENTOS_ACT) && acc.TIPO_CAMBIO_CONTENIDO_ID != 1)
                                {
                                    nAcciones++;
                                    if (acc.PORCENTAJE_AVANCE != null)
                                    {
                                        dPorcentajeAcumulado += Convert.ToDecimal(acc.PORCENTAJE_AVANCE);
                                    }
                                }
                            }
                            this.OBJETIVO.PORCENTAJE_AVANCE_CALCULADO = (Math.Round(Decimal.Divide(dPorcentajeAcumulado, nAcciones), 2));
                            c.CONTENIDO.Attach(this);
                            c.Entry(this.OBJETIVO).State = EntityState.Modified;
                            c.SaveChanges();

                            Int16 nObjetivos = 0;
                            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álculo de media, pero como se muestra en la parte pública el % de avance según iniciados/2+terminados lo aplicamos aquí:
                            //dep.PORCENTAJE_AVANCE_CALCULADO = DEPARTAMENTO.GetEvolucion(1);

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

                            dbContextTransaction.Commit();
                        }
                        catch (Exception ex)
                        {
                            dbContextTransaction.Rollback();
                            throw ex;
                        }
                    }
                }
            }
            else
            {
                //Si el cambio es eliminar, eliminamos
                ACCION a = c.CONTENIDO.OfType <ACCION>().Where(st => st.CONTENIDO_ID == this.CONTENIDO_ID).FirstOrDefault();
                c.CONTENIDO.Remove(a);
                c.SaveChanges();
            }
        }