public string Activate(int id, string accion)
        {
            PayCenter paycenter = repository.LoadById(id);

            //Si la la acción solicitada es activar, validar que el paycenter tenga todos los campos necesarios
            if (accion == "Activar")
            {
                if (!ValidaActivacion(paycenter))
                {
                    return "El PayCenter no tiene capturado todos los datos necesarios para su activación.";
                }
                paycenter.Activo = true;
            }
            else
            {
                paycenter.Activo = false;
            }

            //Actualizar el usuario de membership
            AspNetMembershipProviderWrapper membership = new AspNetMembershipProviderWrapper();
            if (!string.IsNullOrWhiteSpace(paycenter.UserName))
            {
                try
                {
                    MembershipUser usuario = membership.Get(paycenter.UserName);

                    if (usuario != null)
                    {
                        usuario.IsApproved = paycenter.Activo;
                        membership.Update(usuario);
                    }
                    else
                    {
                        return "No se encontró el usuario del PayCenter, no se puede ejecutar la acción.";
                    }
                }
                catch
                {
                    return "Se ha producido un error al actualizar el usuario del PayCenter, no se pudo ejecutar la acción.";
                }
            }
            else
            {
                return "No se ha creado el usuario del PayCenter, no se puede ejecutar la acción.";
            }

            repository.Save();

            if (paycenter.Activo)
            {
                return "El PayCenter se ha activado con éxito.";
            }
            else
            {
                return "El PayCenter se ha desactivado con éxito.";
            }
        }
 public UserAdministrationController(AspNetMembershipProviderWrapper membership, IRolesService roles, ISmtpClient smtp)
     : this(membership.Settings, membership, membership, roles, smtp)
 {
 }
        public ActionResult Registrar(PayCenterVM paycenterVM)
        {
            Succeed = true;
            //Esto es para que no me marque requerido al validar cuando es actualización
            if (paycenterVM.PayCenterId > 0)
            {
                ModelState.Remove("Password");
                ModelState.Remove("RepeatPassword");
                ModelState.Remove("UserName");
            }

            if (ModelState.IsValid)
            {
                if (paycenterVM.IFE == null)
                {
                    paycenterVM.IFE = string.Empty;
                }
                if (paycenterVM.Comprobante == null)
                {
                    paycenterVM.Comprobante = string.Empty;
                }
                paycenterVM.ThumbnailIFE = paycenterVM.IFE.Replace("UploadImages", "UploadImages/Thumbnails");
                paycenterVM.ThumbnailComprobante = paycenterVM.Comprobante.Replace("UploadImages", "UploadImages/Thumbnails");

                //llenar los campos faltantes si estan nulos
                ValidaCapturaParcial(ref paycenterVM);

                #region "crear prospecto comentado"
                ////Crear prospecto o cargar el prospecto relacionado
                //if (paycenterVM.ProspectoId > 0)
                //{
                //      //ProspectosRepository repositoryProspecto = new ProspectosRepository();
                //      //Prospecto prospecto = repositoryProspecto.LoadById(paycenterVM.ProspectoId);
                //      //paycenterVM.Prospecto = prospecto;
                //}
                //else
                //{
                //    Prospecto prospecto = new Prospecto() {
                //        Baja=false,
                //        Celular=paycenterVM.Celular,
                //        Comentario=string.Empty,
                //        Email=paycenterVM.Email,
                //        Empresa=paycenterVM.Empresa,
                //        FechaCreacion=paycenterVM.FechaCreacion,
                //        Nombre=paycenterVM.Nombre,
                //        Telefono=paycenterVM.Telefono,
                //        ProspectoId=0
                //    };
                //    paycenterVM.Prospecto = prospecto;
                //}
                #endregion

                //Validar si existe el usuario si el paycenter está siendo editado y actualizarlo
                AspNetMembershipProviderWrapper membership = new AspNetMembershipProviderWrapper();
                if (paycenterVM.PayCenterId > 0 && !string.IsNullOrWhiteSpace(paycenterVM.UserName)) //&& !string.IsNullOrWhiteSpace(paycenterVM.Password))
                {
                    try
                    {
                        MembershipUser usuario = membership.Get(paycenterVM.UserName);

                        if (usuario != null)
                        {
                            if (!usuario.IsApproved)
                            {
                                usuario.Email = paycenterVM.Email;
                                membership.Update(usuario);
                                //membership.ChangePassword(usuario, paycenterVM.Password);
                            }
                            else
                            {
                                paycenterVM.Activo = true;
                                Succeed = false;
                                AddValidationMessage(enumMessageType.UnhandledException, "El PayCenter ya se encuentra aprobado y activo, no es posible ser modificado por el Prospecto. Por favor, ingresa al sistema con tu usuario y contraseña.");
                            }
                        }
                        else
                        {
                            Succeed = false;
                            AddValidationMessage(enumMessageType.UnhandledException, "No se encontró el usuario del PayCenter.");
                        }
                    }
                    catch (Exception ex)
                    {
                        Succeed = false;
                        AddValidationMessage(enumMessageType.UnhandledException, "Se ha producido un error al actualizar el usuario del PayCenter. " + ex.Message);
                    }
                }
                else if (!(string.IsNullOrWhiteSpace(paycenterVM.UserName) || string.IsNullOrWhiteSpace(paycenterVM.Password)))
                {
                    try
                    {
                        var user = membership.Create(paycenterVM.UserName, paycenterVM.Password, paycenterVM.Email, null, null, false);
                        AspNetRoleProviderWrapper membershipRole = new AspNetRoleProviderWrapper();
                        membershipRole.AddToRole(user, "paycenter");
                    }
                    catch (Exception ex)
                    {
                        Succeed = false;
                        AddValidationMessage(enumMessageType.UnhandledException, "Se ha producido un error al crear el usuario del PayCenter. " + ex.Message);
                    }
                }

                if (Succeed)
                {
                    PayCenter paycenter;
                    bool modificando = paycenterVM.PayCenterId > 0;
                    if (paycenterVM.PayCenterId > 0)
                    {
                        paycenter = repository.LoadById(paycenterVM.PayCenterId);
                        paycenterVM.MaximoAFinanciar = paycenter.Parametros != null && paycenter.Parametros.MaximoAFinanciar != null ? paycenter.Parametros.MaximoAFinanciar.ToString() : string.Empty;
                        Mapper.Map(paycenterVM, paycenter);
                    }
                    else
                    {
                        paycenter = new PayCenter();
                        Mapper.Map(paycenterVM, paycenter);
                        if (paycenterVM.PayCenterPadreId == 0)
                        {
                            paycenter.PayCenterPadreId = null;
                            paycenter.PayCenterPadre = null;
                        }
                        repository.Add(paycenter);
                    }
                    Succeed = repository.Save();
                    if (!Succeed)
                    {
                        var mensaje = modificando ? "crear" : "actualizar";
                        AddValidationMessage(enumMessageType.UnhandledException, "No fue posible " + mensaje + " el paycenter. Favor de intentar más tarde o comunicarse con servicio a cliente.");
                        if (!modificando)
                        {
                            try
                            {
                                //Elimino el usuario en caso de haber fallado la creación del PayCenter
                                var user = Membership.GetUser(paycenter.UserName);
                                if (user != null)
                                {
                                    membership.Delete(user);
                                }
                            }
                            catch (Exception ex)
                            {
                                Succeed = false;
                                AddValidationMessage(enumMessageType.Notification, "El usuario creado no pudo ser eliminado");
                            }
                        }
                    }
                    else
                    {
                        paycenterVM.Activo = true; //Esto es sólo para que se deshabiliten los campos
                        AddValidationMessage(enumMessageType.Succeed, "El PayCenter se ha guardado con éxito. Si deseas modificar o terminar de completar tu información deberás acceder mediante el enlace que recibiste en tu correo o contactar al equipo de Evoluciona Móvil. En breve tu registro como PayCenter quedará activado.");
                    }
                }
            }
            return View(paycenterVM);
        }
        public ActionResult Edit(PayCenterVM paycenterVM)
        {
            //Esto es para que no me marque requerido al validar cuando es actualización
            ModelState.Remove("Password");
            ModelState.Remove("RepeatPassword");
            ModelState.Remove("UserName");

            if (ModelState.IsValid)
            {
                //<author>Moisés Cauich</author>
                //<comments>Ya se traen los valores correspondientes del view.</comments>
                //<before>
                //paycenterVM.Comprobante = "";
                //paycenterVM.IFE = "";
                //</before>
                //<after>

                //<author>Moisés Cauich</author>
                //<comments>Se corrigieron las relaciones en el Entity Model</comments>
                //<before>
                //paycenterVM.UsuarioId = 1;
                //if (paycenterVM.ProspectoId == 0)
                //{
                //    paycenterVM.ProspectoId = 1;
                //}
                //</before>
                //<after />

                //Esto es para cuando se edita los datos de un paycenter que no tiene imagenes, no marque error
                if (paycenterVM.IFE == null)
                {
                    paycenterVM.IFE = string.Empty;
                }
                if (paycenterVM.Comprobante == null)
                {
                    paycenterVM.Comprobante = string.Empty;
                }

                //llenar los campos faltantes si estan nulos
                ValidaCapturaParcial(ref paycenterVM);

                Succeed = true;

                //Validar los datos necesarios para activar el usuario
                if (paycenterVM.Activo)
                {
                    Succeed = ValidaActivacion(ref paycenterVM);
                }

                //Validar si existe el usuario si el paycenter está siendo editado y actualizarlo
                if (Succeed)
                {
                    AspNetMembershipProviderWrapper membership = new AspNetMembershipProviderWrapper();
                    if (!string.IsNullOrWhiteSpace(paycenterVM.UserName))
                    {
                        try
                        {
                            MembershipUser usuario = membership.Get(paycenterVM.UserName);

                            if (usuario != null)
                            {
                                usuario.Email = paycenterVM.Email;
                                usuario.IsApproved = paycenterVM.Activo;
                                membership.Update(usuario);
                            }
                            else
                            {
                                Succeed = false;
                                AddValidationMessage(enumMessageType.UnhandledException ,"No se encontró el usuario del PayCenter.");
                            }
                        }
                        catch (Exception ex)
                        {
                            Succeed = false;
                            AddValidationMessage(enumMessageType.UnhandledException ,"Se ha producido un error al actualizar el usuario del PayCenter. " + ex.Message);
                        }
                    }
                    else if (paycenterVM.Activo)
                    {
                        Succeed = false;
                        AddValidationMessage(enumMessageType.UnhandledException ,"No se ha creado el usuario del PayCenter, no se puede activar. desmarque la casilla de activo y guarde.");
                    }

                    if (Succeed)
                    {
                        PayCenter paycenter = repository.LoadById(paycenterVM.PayCenterId);
                        Mapper.Map(paycenterVM, paycenter);
                        if (paycenterVM.PayCenterPadreId <= 0)
                        {
                            paycenter.PayCenterPadre = null;
                        }

                        //Agregar valor del parámetro máximo a financiar
                        if (paycenter.Parametros != null)
                        {
                            paycenter.Parametros.MaximoAFinanciar = Convert.ToDecimal(paycenterVM.MaximoAFinanciar);
                        }
                        else
                        {
                            ParametrosPayCenter parametros = new ParametrosPayCenter() {
                                PayCenterId = paycenterVM.PayCenterId,
                                MaximoAFinanciar = Convert.ToDecimal(paycenterVM.MaximoAFinanciar),
                            };
                            repository.context.ParametrosPayCenters.AddObject(parametros);
                        }

                        repository.Save();

                        AddValidationMessage(enumMessageType.Succeed ,"El PayCenter se ha actualizado con éxito.");
                    }
                }
                else
                {
                    AddValidationMessage(enumMessageType.UnhandledException ,"Es necesario capturar todos los datos para activar al PayCenter. capture los datos faltantes o desmarque la casilla de activo y guarde.");
                }
                //PayCenter paycenter = repository.LoadById(paycenterVM.PayCenterId);
                //Mapper.Map(paycenterVM, paycenter);
                //Mapper.Map(paycenterVM.Cuentas, paycenter.Cuentas);
                //Mapper.Map(paycenterVM.Abonos, paycenter.Abonos);
                //repository.Save();
                //return RedirectToAction("Index");
            }

            //ViewBag.ProspectoId = new SelectList(repository.LoadProspectos(), "ProspectoId", "Email", paycenterVM.ProspectoId);
            //ViewBag.UsuarioId = new SelectList(repository.LoadUsuarios(), "UsuarioId", "Email", paycenterVM.UsuarioId);
            return View(paycenterVM);
        }