public ActionResult Create(clsPlanVM oPlanVM)
        {
            string  strMsg = string.Empty;
            clsPlan oPlan  = new clsPlan(clsAppInfo.Connection);

            try
            {
                if (ModelState.IsValid)
                {
                    DataMove(oPlanVM, oPlan, false);
                    strMsg += CheckPlanCreatePost(ref oPlan);

                    if (String.IsNullOrEmpty(strMsg))              // verificar si existe error
                    {
                        List <clsPlanVM> hijos = get_Hijos(oPlan);
                        oPlan.BeginTransaction();

                        if (oPlan.Insert())
                        {
                            if (ActualizarOrden(oPlan, hijos))
                            {
                                oPlan.Commit();
                                strMsg += "Plan Creado Correctamente";
                                return(RedirectToAction("Index", new { MessageErr = strMsg, idPlan = SysData.ToLong(oPlan.VM.PlanId) }));
                            }
                            else
                            {
                                oPlan.Rollback();
                                strMsg += "Ocurrio un Problema a Crear(Problema a Actualizar los Orden) Plan Vuelva a Intentarlo";
                                return(RedirectToAction("Index", new { MessageErr = strMsg, idPlan = SysData.ToLong(oPlanVM.PlanPadreId) }));
                            }
                        }
                        else
                        {
                            oPlan.Rollback();
                            strMsg += "Ocurrio un Problema a Crear Plan Vuelva a Intentarlo";
                            return(RedirectToAction("Index", new { MessageErr = strMsg, idPlan = SysData.ToLong(oPlanVM.PlanPadreId) }));
                        }
                    }
                }
                else
                {
                    strMsg += "Datos Incorrectos Revise y Vuelva a Intentar" + Environment.NewLine;
                }
            }

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

            if (strMsg.Trim() != string.Empty)
            {
                ViewBag.MessageErr = strMsg;
            }

            return(View(oPlanVM));
        }
        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));
            }
        }