public async Task<ActionResult> UpdateCriteriaValue()
        {
            int criteriaValueId = int.Parse(Request.Form["Command"].Split('_')[1]);

            //Need to update CriteriaRefId
            var criteriaResults = _memberAppService.UpdateCriteriaValue(new CreditsHero.Common.Dtos.CreateCriteriaValuesInput()
            {
                CreditCount = Int32.Parse(Request.Form["txtAdminCredits_" + criteriaValueId].ToString()),
                Name = Request.Form["txtAdminCriteriaName_" + criteriaValueId].ToString(),
                CriteriaValuesId = criteriaValueId,
                CriteriaRefId = Int32.Parse(Request.Form["txtAdminCriteriaId_" + criteriaValueId].ToString())
            });

            rooferlocator.com.Web.Models.ServiceResponse response = new Models.ServiceResponse()
            {
                FriendlyMessage = "Service Updated."
            };

            return Redirect((Url.Action("ServicesOffered", "Members", response)));
        }
        public async Task<ActionResult> AddCriteria()
        {
            Company currentCompany = new Company() { Id = Guid.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["creditsHero:APIKey"]) };
            var criteriaResults = _memberAppService.AddCriteria(new CreditsHero.Common.Dtos.CreateCriteriaInput()
            {
                Company = currentCompany,
                Name = Request["txtCriteriaName"].ToString()
            });

            rooferlocator.com.Web.Models.ServiceResponse response = new Models.ServiceResponse()
            {
                FriendlyMessage = "Service Updated."
            };

            return Redirect((Url.Action("ServicesOffered", "Members", response)));
        }
        public async Task<ActionResult> Detail()
        {
            //Get UserId
            long userId = long.Parse(Request.Form["Command"].Split('_')[1]);
            rooferlocator.com.Web.Models.ServiceResponse response = new Models.ServiceResponse();
            var user = await _userManager.GetUserByIdAsync(userId);

            //Determine if we are Deleting, Resetting, or Activating user
            if (Request.Form["Command"].Contains("ResetPassword"))
            {
                #region ResetPassword Command
                //Generate password reset code for user
                string resetCode = System.Web.Security.Membership.GeneratePassword(5, 2);

                //Save user with password reset code
                user.PasswordResetCode = resetCode;
                await _userManager.UpdateAsync(user);

                //Send email to user with password reset code
                string role = GetUserRole();
                CreditsHero.Subscribers.Dtos.GetSubscribersInput input = await BuildCreditsHeroSubscriberInput(user);

                //NOTE: If EmailTo/EmailFrom is null then email is submitted/replyto to configured admin
                CreditsHero.Messaging.Dtos.NotificationInput inputNotification = new CreditsHero.Messaging.Dtos.NotificationInput()
                {
                    EmailFrom = null,
                    EmailTo = user.EmailAddress,
                    EmailMessage = String.Format("<!DOCTYPE html><html lang=en xmlns=http://www.w3.org/1999/xhtml><head><meta charset=utf-8 /><title></title></head><body style='background-color:#3d1617;text-align:center;padding:0px;margin:0px'><div class='col-lg-3 col-md-3 col-sm-3 col-xs-3' style='background:white'></div><div class='col-lg-4 col-md-4 col-sm-4 col-xs-4' style='padding:0px;margin:0px'><div class=row><div class='col-lg-12 col-md-12 col-sm-12 col-xs-12'><img style='width:100%' src=http://www.conciergesworldwide.com/images/imgHeader.jpg /></div></div><div class=row style='padding:10px;height:50px;font-family:Arial;font-size:24pt'><div class='col-lg-12 col-md-12 col-sm-12 col-xs-12' style='border:2px solid white;border-radius:5px'><div class=row style='background-color:gainsboro'><div>Password Reset</div></div><div class='col-lg-12 col-md-12 col-sm-12 col-xs-12' style='padding:10px;color:white'><div style='font-size:16;'>Hello {0}, </p> To reset your password, you will need to enter the following Password Reset Code using the link below. Your password reset code is:<p/><div style='font-size:22;padding:10px;margin:10px;'>{1}</div> <p/></div></div><div class=row style='background-color:gainsboro'><div><a href='{2}{3}'>Click here to reset your password</a></div></div><div class='col-lg-12 col-md-12 col-sm-12 col-xs-12' style='border-top:1px solid gainsboro;padding:10px;color:white'><div></div></div></div></div><div class=row></div></div><div class='col-lg-3 col-md-3 col-sm-3 col-xs-3' style='padding:0px;margin:0px'></div></body></html>"
                        , user.Name
                        , user.PasswordResetCode
                        , System.Web.Configuration.WebConfigurationManager.AppSettings["dashboardHero:DashboardPrefix"]
                        , "/Account/ResetPassword"),
                    EmailSubject = String.Format("Password Reset", input.SubscribersName),
                    CompanyId = input.CompanyId.Value
                };

                var notificationResults = _memberAppService.SendEmail(inputNotification);
                response = new Models.ServiceResponse()
                {
                    FriendlyMessage = notificationResults.ResponseMessage
                };

                return Redirect((Url.Action("Index", "Members", response)));
                #endregion
            }
            else if (Request.Form["Command"].Contains("UserDetails"))
            {
                #region ShowDetails Command
                CreditsHero.Subscribers.Dtos.GetSubscribersInput input = await BuildCreditsHeroSubscriberInput(user);
                //Get Member Info (credits hero)
                var outputSubscriber = _memberAppService.GetMember(input);

                //Get Member Info
                var outputMember = _memberAppService.GetMembers(new Common.Members.Dtos.GetMemberInput()
                {
                    MemberId = Int32.Parse(user.Id.ToString())
                });

                //Get Member Subscriptions
                var outputSubscriptions = _memberAppService.GetMemberSubscriptions(input);

                rooferlocator.com.Common.Members.Dtos.MemberDto output = outputMember.Members[0];
                output.SubscriberSkills = outputSubscriptions;

                return View("Detail", output);
                #endregion
            }
            else if (Request.Form["Command"].Contains("Activate"))
            {
                #region ActivateUser Command
                user.IsDeleted = false;
                var results = await _userManager.UpdateAsync(user);

                if (results.Succeeded)
                {
                    response = new Models.ServiceResponse()
                    {
                        FriendlyMessage = "Member has been removed."
                    };
                }

                return Redirect((Url.Action("Index", "Members", response)));
                #endregion
            }
            else if (Request.Form["Command"].Contains("Delete"))
            {
                #region DeleteUser Command
                user.IsDeleted = true;
                var results = await _userManager.UpdateAsync(user);

                if (results.Succeeded)
                {
                    response = new Models.ServiceResponse()
                    {
                        FriendlyMessage = "Member has been removed."
                    };
                }

                return Redirect((Url.Action("Index", "Members", response)));
                #endregion
            }
            return View();
        }
        public async Task<ActionResult> AddCriteriaValue()
        {
            //TODO:  Need to update CriteriaRefId
            var criteriaResults = _memberAppService.AddCriteriaValue(new CreditsHero.Common.Dtos.CreateCriteriaValuesInput()
            {
                CreditCount = Int32.Parse(Request.Form[2].ToString()),
                Name = Request.Form[1].ToString(),
                CriteriaRefId = Int32.Parse(Request.Form[0].ToString())
            });

            rooferlocator.com.Web.Models.ServiceResponse response = new Models.ServiceResponse()
            {
                FriendlyMessage = "Service Updated."
            };

            return Redirect((Url.Action("ServicesOffered", "Members", response)));
        }
        public async Task<ActionResult> AddSubscribersValue()
        {
            string role = GetUserRole();
            Users.User user = await GetUser();
            CreditsHero.Subscribers.Dtos.GetSubscribersInput input = await BuildCreditsHeroSubscriberInput(user);

            CreateSubscribersValuesInput inputValues = new CreateSubscribersValuesInput();

            var selectedMemberCriteria = _memberAppService.GetMemberSubscriptions(input);

            foreach (var requestItem in Request.Form.Keys)
            {
                foreach (var item in selectedMemberCriteria.SubscriberSkills)
                {
                    var selectedItem = item.Value.Find(x => x.Id == Int32.Parse(requestItem.ToString()));
                    inputValues.SubscribersId = input.SubscribersId.Value;

                    if (selectedItem == null)
                    {
                        inputValues.CriteriaValuesRefId = Int32.Parse(requestItem.ToString());
                        inputValues.IsDeleted = Request.Form.GetValues(requestItem.ToString())[0] == "on" ? false : true;
                    }
                    else
                    {
                        inputValues.CriteriaValuesRefId = selectedItem.Id;
                        inputValues.IsDeleted = Request.Form.GetValues(selectedItem.Id.ToString())[0] == "on" ? false : true;
                    }

                    _memberAppService.AddSubscribersValue(inputValues);
                }
            }

            //Need to do this to clean up the skills that have been removed from the list
            foreach (var item in selectedMemberCriteria.SubscriberSkills)
            {
                var unselectedItems = item.Value.Where(x => !Request.Form.AllKeys.Any(i => i == x.Id.ToString())).ToList();
                foreach (var unselectedItem in unselectedItems)
                {
                    inputValues.SubscribersId = input.SubscribersId.Value;
                    inputValues.CriteriaValuesRefId = unselectedItem.Id;
                    inputValues.IsDeleted = true;
                    _memberAppService.AddSubscribersValue(inputValues);
                }
            }


            rooferlocator.com.Web.Models.ServiceResponse response = new Models.ServiceResponse()
            {
                FriendlyMessage = "Service Updated."
            };

            return Redirect((Url.Action("ServicesOffered", "Members", response)));
        }
        public async Task<ActionResult> SendAdminEmail()
        {
            string role = GetUserRole();
            Users.User user = await GetUser();
            CreditsHero.Subscribers.Dtos.GetSubscribersInput input = await BuildCreditsHeroSubscriberInput(user);

            CreditsHero.Messaging.Dtos.NotificationInput inputNotification = new CreditsHero.Messaging.Dtos.NotificationInput()
            {
                EmailFrom = input.SubscribersEmail,
                EmailTo = null,
                EmailMessage = String.Format("{0}<p/>Company:{1}<br/>SubscriberId:{2}", Request.Form["txtMessage"], input.CompanyId, input.SubscribersId),
                EmailSubject = String.Format("Notification From {0}", input.SubscribersName),
                CompanyId = input.CompanyId.Value
            };

            var notificationResults = _memberAppService.SendEmail(inputNotification);
            rooferlocator.com.Web.Models.ServiceResponse response = new Models.ServiceResponse()
            {
                FriendlyMessage = notificationResults.ResponseMessage
            };

            return Redirect((Url.Action("Index", "Home", response)));
        }
        public async Task<ActionResult> PostProcessPayment()
        {
            string role = GetUserRole();
            Users.User user = await GetUser();
            CreditsHero.Subscribers.Dtos.GetSubscribersInput input = await BuildCreditsHeroSubscriberInput(user);

            var companyInput = new CreditsHero.Common.Companies.Dtos.GetCompanyInput() { CompanyId = input.CompanyId.Value.ToString() };
            //Get Company entity so we can use the cost per credits
            var company = _companyService2.GetCompany(companyInput);

            //Get Company Configuration
            var companyConfig = _companyService2.GetCompanyConfig(companyInput);

            PaymentResponseDto paymentResponse = new PaymentResponseDto();
            PaymentDto payment = new PaymentDto();

            //TODO: Determine type of payment
            //PayPal Post Payment Process
            payment = new PaymentPaypalDto()
            {
                CompanyConfigurationSettings = companyConfig,
                CompanyId = company.Id,
                PayerId = Request.QueryString["PayerID"],
                PaymentGuid = Request.QueryString["Guid"],
                PaymentId = Request.QueryString["PaymentId"],
                Token = Request.QueryString["Token"],
                PaymentGatewayType = "PayPal",
                PaymentMethod = "PayPal",
                SubscribersEmail = input.SubscribersEmail,
                SubscribersId = input.SubscribersId,
                SubscribersName = input.SubscribersName,
                TaxAmount = 0,
                TransactionType = "PayPalExecute"
            };
            paymentResponse = _memberAppService.MakePayment(payment as PaymentPaypalDto);
            if (paymentResponse.AuthCode == "created")
            {
                return Redirect(paymentResponse.ResponseCode);
            }
            else
            {
                rooferlocator.com.Web.Models.ServiceResponse response = new Models.ServiceResponse()
                {
                    FriendlyMessage = paymentResponse.MessageCode == "sale"
                        ? String.Format("Payment accepted.  Transaction #: ", paymentResponse.TransactionId)
                        : String.Format("Processing Payment.  Transaction #: ", paymentResponse.TransactionId)
                };

                return Redirect((Url.Action("Index", "Home", response)));
            }
            //?guid = 3772 & paymentId = PAY - 5UN73352KF9557105K3KJ2JY & token = EC - 1BC22799SN423381H & PayerID = WWWCHTZE5U74L
        }