Beispiel #1
0
        public ActionResult Edit(clsPlanVM oPlanVM)
        {
            string strMsg = string.Empty;

            try
            {
                if (ModelState.IsValid)
                {
                    clsPlan oPlan = new clsPlan(clsAppInfo.Connection);
                    DataMove(oPlanVM, oPlan, true);

                    if (oPlan.VM.TipoPlanId > 1)
                    {
                        if ((oPlanVM.MonedaId > 0) && (oPlanVM.TipoAmbitoId > 0))
                        {
                            if (oPlan.Update())
                            {
                                return(RedirectToAction("Index"));
                            }
                        }
                        else
                        {
                            strMsg += "Moneda es Requerido" + Environment.NewLine;
                            strMsg += "Ambito es Requerido" + Environment.NewLine;
                        }
                    }
                    else
                    {
                        oPlan.VM.MonedaId     = 0;
                        oPlan.VM.TipoAmbitoId = 0;

                        if (oPlan.Update())
                        {
                            return(RedirectToAction("Index"));
                        }
                    }
                }
            }

            catch (Exception exp)
            {
                ViewBagLoad();
                ViewBag.MessageErr = exp.Message;
                return(View(oPlanVM));
            }

            if (strMsg.Trim() != string.Empty)
            {
                ViewBagLoad();
                ViewBag.MessageErr = strMsg;
                return(View(oPlanVM));
            }
            else
            {
                ViewBagLoad();
                return(View(oPlanVM));
            }
        }
        /*
         * la lista debe contener los hijos menos el oplan a insertar o modificar
         * oplan, es el nuevo hijo a insertar o modificar
         */
        private bool ActualizarOrden(clsPlan oplan, List <clsPlanVM> hijos)
        {
            int bandera = 0;

            if (hijos.Count > 0)
            {
                try
                {
                    for (int i = 0; i < hijos.Count; i++)
                    {
                        clsPlanVM hijo = hijos[i];

                        if (oplan.VM.Orden == i + 1)
                        {
                            bandera = 1;
                        }

                        if (!(hijo.Orden == i + bandera + 1))
                        {
                            hijo.Orden = i + bandera + 1;

                            clsPlan auxplan = new clsPlan(clsAppInfo.Connection);
                            auxplan.VM           = hijos[i];
                            auxplan.UpdateFilter = clsPlan.UpdateFilters.Orden;
                            auxplan.Transaction  = oplan.Transaction;


                            if (!auxplan.Update())
                            {  // error al actualizar
                                return(false);
                            }

                            auxplan.Dispose();
                        }
                    }
                }
                catch (Exception exp) {
                    throw (exp);
                }
            }

            // preguntamos si el nuevo plan quiere ir al final
            if (bandera == 0)
            {
                clsPlan auxplan = new clsPlan(clsAppInfo.Connection);

                //actualizamos el orden del nuevo plan
                oplan.VM.Orden = hijos.Count + 1;
                auxplan.VM     = oplan.VM;

                auxplan.UpdateFilter = clsPlan.UpdateFilters.Orden;
                auxplan.Transaction  = oplan.Transaction;


                if (!auxplan.Update())
                {  // error al actualizar
                    return(false);
                }

                auxplan.Dispose();
            }

            return(true);
        }
        public ActionResult Edit(clsPlanVM oPlanVM)
        {
            string  strMsg = string.Empty;
            clsPlan oPlan  = new clsPlan(clsAppInfo.Connection);

            try
            {
                if (ModelState.IsValid)
                {
                    DataMove(oPlanVM, oPlan, true);

                    strMsg += CheckPlanEditPost(oPlan);
                }
                else
                {
                    if (oPlanVM.PlanPadreId == -1)
                    {
                        strMsg += "Operacion Invalida: Nivel de Plan Inaccesible para realizar Cambios, porfavor elija otro Plan" + Environment.NewLine;
                    }
                    else
                    {
                        strMsg += "Modelo Invalido" + Environment.NewLine;
                    }
                }

                if (strMsg.Trim() != string.Empty)
                {
                    ViewBag.MessageErr = strMsg;
                }
                else
                {
                    // obtenemos el orden guardado en la BD, por si lo quiere modificar
                    long             ordenBD = getOrden(oPlan.VM.PlanId);
                    List <clsPlanVM> hijos   = new List <clsPlanVM>();

                    if (ordenBD != oPlan.VM.Orden)
                    {  // si quiere modificar el orden
                        hijos = get_Hijos(oPlan);

                        hijos.RemoveAll((x) => x.PlanId == oPlan.VM.PlanId); // eliminamos el plan que se esta actualizando
                    }


                    oPlan.BeginTransaction();
                    if (oPlan.Update())
                    {
                        if (hijos.Count > 0)
                        {  // si quiere modificar el orden
                            if (!ActualizarOrden(oPlan, hijos))
                            {
                                oPlan.Rollback();
                                ViewBag.MessageErr = "Error al Actualizar Orden de los demas Planes del mismo Grupo";
                                return(View(oPlanVM));
                            }
                        }

                        oPlan.Commit();
                        return(RedirectToAction("Index", new { idPlan = SysData.ToLong(oPlanVM.PlanId) }));
                    }

                    oPlan.Rollback();
                }

                return(View(oPlanVM));
            }
            catch (Exception exp)
            {
                oPlan.Rollback();
                ViewBag.MessageErr = exp.Message;
                return(View(oPlanVM));
            }
        }