private void PopulateFraudData(Security.FraudCheckData d, OrderTaskContext context)
        {
            if (context.MTApp.CurrentRequestContext.RoutingContext.HttpContext != null)
            {
                if (context.MTApp.CurrentRequestContext.RoutingContext.HttpContext.Request.UserHostAddress != null)
                {
                    d.IpAddress = context.MTApp.CurrentRequestContext.RoutingContext.HttpContext.Request.UserHostAddress;
                }
            }

            if (context.Order.UserEmail != string.Empty)
            {
                d.EmailAddress = context.Order.UserEmail;
                string[] parts = d.EmailAddress.Split('@');
                if (parts.Length > 1)
                {
                    d.DomainName = parts[1];
                }
            }

            d.PhoneNumber = context.Order.BillingAddress.Phone;

            foreach (Orders.OrderTransaction p in context.MTApp.OrderServices.Transactions.FindForOrder(context.Order.bvin))
            {
                if (p.Action == MerchantTribe.Payment.ActionType.CreditCardInfo)
                {
                    d.CreditCard = p.CreditCard.CardNumber;
                    break;
                }
            }
        }
        public override bool Execute(OrderTaskContext context)
        {
            bool result = true;

            if (context.Order != null)
            {
                Security.FraudCheckData d = new Security.FraudCheckData();
                PopulateFraudData(d, context);

                FraudScorer scorer = new FraudScorer(context.MTApp.CurrentRequestContext);

                context.Order.FraudScore = scorer.ScoreData(d);

                if (context.Order.FraudScore >= 5)
                {
                    Orders.OrderStatusCode s = Orders.OrderStatusCode.FindByBvin(Orders.OrderStatusCode.OnHold);
                    context.Order.StatusCode = s.Bvin;
                    context.Order.StatusName = s.StatusName;
                    context.MTApp.OrderServices.Orders.Update(context.Order);
                }

                if (d.Messages.Count > 0)
                {
                    Orders.OrderNote n = new Orders.OrderNote();
                    n.IsPublic = false;
                    n.Note     = "Fraud Check Failed";
                    foreach (string m in d.Messages)
                    {
                        n.Note += " | " + m;
                    }
                    context.Order.Notes.Add(n);
                }

                context.MTApp.OrderServices.Orders.Update(context.Order);
            }

            return(result);
        }
		public override bool Execute(OrderTaskContext context)
		{
			bool result = true;

			if (context.Order != null) {
				Security.FraudCheckData d = new Security.FraudCheckData();
				PopulateFraudData(d, context);

                FraudScorer scorer = new FraudScorer(context.MTApp.CurrentRequestContext);

                context.Order.FraudScore = scorer.ScoreData(d);

				if (context.Order.FraudScore >= 5) {					
					Orders.OrderStatusCode s = Orders.OrderStatusCode.FindByBvin(Orders.OrderStatusCode.OnHold);
					context.Order.StatusCode = s.Bvin;
					context.Order.StatusName = s.StatusName;
                    context.MTApp.OrderServices.Orders.Update(context.Order);
				}

                if (d.Messages.Count > 0)
                {
                    Orders.OrderNote n = new Orders.OrderNote();
                    n.IsPublic = false;
                    n.Note = "Fraud Check Failed";
                    foreach (string m in d.Messages)
                    {
                        n.Note += " | " + m;
                    }                    
                    context.Order.Notes.Add(n);                    
                }

                context.MTApp.OrderServices.Orders.Update(context.Order);

			}

			return result;
		}