public bool IsOrderStatus(Order order, OrderStatusCode orderStatus)
 {
     return(OrderRoot.Elements().Any(
                item => Convert.ToInt32(item.Element("OrderKey").Value) == order.OrderKey &&
                item.Element("Status").Value == orderStatus.ToString()
                ));
 }
Example #2
0
        public override bool Execute(OrderTaskContext context)
        {
            if (context.Order.IsRecurring)
            {
                return(true);
            }

            if (context.PreviousPaymentStatus == OrderPaymentStatus.Paid &&
                context.Order.PaymentStatus != OrderPaymentStatus.Paid)
            {
                var statusCode  = OrderStatusCode.Received;
                var orderStatus = OrderStatusCode.FindByBvin(statusCode);
                if (orderStatus != null && orderStatus.Bvin != string.Empty)
                {
                    context.Order.StatusCode = orderStatus.Bvin;
                    context.Order.StatusName = orderStatus.StatusName;
                }
                else
                {
                    EventLog.LogEvent("Change Order Status When Payment Removed",
                                      "Could not find order status with id of " + statusCode, EventLogSeverity.Error);
                }
            }

            return(true);
        }
Example #3
0
 public bool IsOrderStatus(Order order, OrderStatusCode orderStatus)
 {
     return(DataSource.OrdersCollection.Any(
                item => item.OrderKey == order.OrderKey &&
                item.Status == orderStatus
                ));
 }
        private async Task LoadOrders(bool refresh)
        {
            var orders = (await OrderManager.Instance.LoadOrders(Day, refresh))?.AsEnumerable().OrderByDescending(o => o.PlacedTime);

            Orders.Clear();

            if (!orders.IsNullOrEmpty())
            {
                OrderStatusCode[] activeStatus = new OrderStatusCode[] { OrderStatusCode.PendingCancel, OrderStatusCode.PendingSubmit, OrderStatusCode.PreSubmitted, OrderStatusCode.Submitted };

                // 1. Active orders
                var activeOrders = orders.Where(o => activeStatus.Contains(o.Status));

                if (!activeOrders.IsNullOrEmpty())
                {
                    Orders.Add(new GroupedOrdersList($"Active Orders ({activeOrders.Count()})", "ACTIVE", activeOrders.ToOrderViewModels()));
                }
                else
                {
                    Orders.Add(new GroupedOrdersList("Active Orders (0)", "ACTIVE"));
                }

                // 2. Inactive orders
                var inactiveOrders = orders.Where(o => !activeStatus.Contains(o.Status));

                if (!inactiveOrders.IsNullOrEmpty())
                {
                    Orders.Add(new GroupedOrdersList($"Inactive Orders ({inactiveOrders.Count()})", "INACTIVE", inactiveOrders.ToOrderViewModels()));
                }
                else
                {
                    Orders.Add(new GroupedOrdersList("Inactive Orders (0)", "INACTIVE"));
                }
            }
        }
Example #5
0
 public override bool Execute(OrderTaskContext context)
 {
     if (context.Inputs["PreviousShippingStatus"] != null)
     {
         var val    = 0;
         var parsed = int.TryParse(context.Inputs["PreviousShippingStatus"].Value, out val);
         if (parsed && val == (int)OrderShippingStatus.FullyShipped)
         {
             if (context.Order.ShippingStatus != OrderShippingStatus.NonShipping &&
                 context.Order.ShippingStatus != OrderShippingStatus.FullyShipped)
             {
                 var statusCode  = OrderStatusCode.Received;
                 var orderStatus = OrderStatusCode.FindByBvin(statusCode);
                 if (orderStatus != null && orderStatus.Bvin != string.Empty)
                 {
                     context.Order.StatusCode = orderStatus.Bvin;
                     context.Order.StatusName = orderStatus.StatusName;
                 }
                 else
                 {
                     EventLog.LogEvent("Change Order Status When Shipment Removed",
                                       "Could not find order status with id of " + statusCode, EventLogSeverity.Error);
                 }
             }
         }
     }
     return(true);
 }
Example #6
0
        private async Task ProcessTaskCatMessagesAsync(Message message, CancellationToken token)
        {
            logger.LogInformation($"Received message from TaskCat: SequenceNumber:{message.SystemProperties.SequenceNumber}");

            var messageBody    = Encoding.UTF8.GetString(message.Body);
            var taskCatMessage = JsonConvert.DeserializeObject <TaskCatMessage>(messageBody);

            if (taskCatMessage.RemoteJobStage == RemoteJobStage.ERROR)
            {
                logger.LogInformation($"Order {taskCatMessage.ReferenceId} ended in {RemoteJobStage.ERROR}");
                await this.cache.StringSetAsync(taskCatMessage.ReferenceId, RemoteJobStage.ERROR);
            }
            else if (taskCatMessage.RemoteJobStage == RemoteJobStage.CREATED)
            {
                logger.LogInformation($"Order {taskCatMessage.ReferenceId} was created in TaskCat. Taskcat job ID/HRID: {taskCatMessage.JobID} => {taskCatMessage.JobHRID}");
                await this.orderService.UpdateOrderReferenceId(this.infiniToken, taskCatMessage.ReferenceId, taskCatMessage.JobHRID);

                await this.cache.StringSetAsync(taskCatMessage.ReferenceId, RemoteJobStage.CREATED);
            }
            else if (taskCatMessage.RemoteJobStage == RemoteJobStage.UPDATE)
            {
                logger.LogInformation($"Order {taskCatMessage.ReferenceId} was updated in TaskCat. Taskcat job ID/HRID: {taskCatMessage.JobID} => {taskCatMessage.JobHRID}");

                OrderStatusCode translatedStatus = StatusTranslator.TranslateStatus(taskCatMessage.RemoteJobState);
                if (translatedStatus != OrderStatusCode.Undefined)
                {
                    await this.orderService.UpdateOrderStatus(this.infiniToken, taskCatMessage.ReferenceId, translatedStatus);
                }

                await this.cache.StringSetAsync(taskCatMessage.ReferenceId, RemoteJobStage.UPDATE);
            }
        }
Example #7
0
        public static OrderStatusCode OrderStatusCode(int?counter)
        {
            var rtValue = new OrderStatusCode();

            rtValue.Name = "Name" + counter.Extra();

            return(rtValue);
        }
        public override bool Execute(OrderTaskContext context)
        {
            if (context.Order.IsPlaced)
            {
                return(true);
            }
            if (context.Order.Items.Count == 0)
            {
                context.Errors.Add(new WorkflowMessage("Order already placed.",
                                                       GlobalLocalization.GetString("OrderAlreadyPlaced"), true));
                return(false);
            }

            context.Order.IsPlaced       = true;
            context.Order.TimeOfOrderUtc = DateTime.UtcNow;

            var errors = new List <string>();

            if (!context.HccApp.OrdersReserveInventoryForAllItems(context.Order, errors))
            {
                foreach (var item in errors)
                {
                    context.Errors.Add(new WorkflowMessage("Stock Too Low", item, true));
                }
                return(false);
            }

            if (context.HccApp.CurrentRequestContext.RoutingContext.HttpContext != null)
            {
                var request = context.HccApp.CurrentRequestContext.RoutingContext.HttpContext.Request;
                var note    = new OrderNote();
                note.IsPublic = false;
                note.Note     = "Customer IP: " + request.UserHostAddress;
                note.Note    += "<br> Customer Host: " + request.UserHostName;
                note.Note    += "<br> Browser: " + request.UserAgent;
                context.Order.Notes.Add(note);

                context.Order.UserDeviceType = DetermineDeviceType(request);
            }

            var c = OrderStatusCode.FindByBvin(OrderStatusCode.Received);

            if (c != null)
            {
                var affiliateId = context.HccApp.ContactServices.GetCurrentAffiliateId();

                context.Order.StatusName  = c.StatusName;
                context.Order.StatusCode  = c.Bvin;
                context.Order.AffiliateID = affiliateId;

                if (affiliateId.HasValue)
                {
                    context.HccApp.ContactServices.UpdateProfileAffiliateId(affiliateId.Value);
                }
            }
            return(true);
        }
Example #9
0
        public async Task <Deal> UpdateForOrder(Order order, PairConfig config)
        {
            if (!order.DealId.HasValue)
            {
                return(null);
            }

            return(await WithConnection(async (connection, transaction) =>
            {
                Deal deal = await _dealManager.Get(order.DealId.Value, connection, transaction);
                if (deal == null)
                {
                    throw new Exception($"Deal {order.DealId} not found");
                }

                Order storedOrder = await _orderManager.Update(order, connection, transaction);

                if (order.OrderSideCode == OrderSideCode.BUY.Code)
                {
                    deal.AvgOpenPrice = order.Price;
                    deal.Amount = order.Amount;
                    deal.EstimatedFee = order.Fee *order.Price;
                    deal.TakeProfit = order.Price + order.Price * (decimal)config.DefaultTakeProfitPercent / 100;
                    deal.StopLoss = order.Price - order.Price * (decimal)config.DefaultStopLossPercent / 100;

                    if (order.TradingModeCode == TradingModeCode.AUTO.Code)
                    {
                        Order sellOrder = new Order();
                        sellOrder.ExchangeCode = deal.Exchange;
                        sellOrder.Symbol = deal.Symbol;
                        sellOrder.TradingModeCode = TradingModeCode.AUTO.Code;
                        sellOrder.FillPoliticsCode = FillPoliticsCode.GTC.Code;
                        sellOrder.OrderStatusCode = OrderStatusCode.PENDING.Code;
                        sellOrder.DealId = deal.Id;
                        sellOrder.OrderTypeCode = OrderTypeCode.LMT.Code;
                        sellOrder.OrderSideCode = OrderSideCode.SELL.Code;
                        sellOrder.Amount = deal.Amount;
                        sellOrder.Price = deal.TakeProfit;
                        sellOrder.StopLoss = deal.StopLoss;

                        await _orderManager.Create(order, connection, transaction);
                    }
                }
                else
                {
                    deal.AvgClosePrice = order.Price;
                    deal.EstimatedFee += order.Fee;
                    deal.StatusCode = OrderStatusCode.Create(order.OrderStatusCode).ToDealCode().Code;
                }

                deal = await _dealManager.Update(deal, connection, transaction);
                deal.Orders.Add(storedOrder);
                return deal;
            }));
        }
        private void CreateApprovals(List <Approval> approvals, OrderStatusCode currentLevel, Order order)
        {
            //var approval = new Approval();
            //approval.Order = new Order();
            //approval.Order.SetIdTo(i + 1 + currentOffSet);
            //approval.StatusCode = OrderStatusCodeRepository.GetNullableById(Role.Codes.Requester);
            //approval.User = createdBy;
            //approval.Approved = true;
            //approvals.Add(approval);

            var approval = new Approval();

            approval.Order = new Order();
            approval.Order.SetIdTo(order.Id);
            approval.StatusCode = OrderStatusCodeRepository.GetNullableById(Role.Codes.Approver);
            approval.User       = UserRepository.GetNullableById("hsimpson");
            if (approval.StatusCode.Level < currentLevel.Level)
            {
                approval.Completed = true;
            }
            approvals.Add(approval);

            approval       = new Approval();
            approval.Order = new Order();
            approval.Order.SetIdTo(order.Id);
            approval.StatusCode = OrderStatusCodeRepository.GetNullableById(Role.Codes.AccountManager);
            approval.User       = UserRepository.GetNullableById("flanders");
            if (approval.StatusCode.Level < currentLevel.Level)
            {
                approval.Completed = true;
            }
            approvals.Add(approval);

            approval       = new Approval();
            approval.Order = new Order();
            approval.Order.SetIdTo(order.Id);
            approval.StatusCode = OrderStatusCodeRepository.GetNullableById(Role.Codes.Purchaser);
            approval.User       = UserRepository.GetNullableById("awong");
            if (approval.StatusCode.Level < currentLevel.Level)
            {
                approval.Completed = true;
            }
            approvals.Add(approval);

            approval       = new Approval();
            approval.Order = new Order();
            approval.Order.SetIdTo(order.Id);
            approval.StatusCode = OrderStatusCodeRepository.GetNullableById(OrderStatusCode.Codes.CompleteNotUploadedKfs);
            approval.User       = UserRepository.GetNullableById("zoidberg");
            if (approval.StatusCode.Level < currentLevel.Level)
            {
                approval.Completed = true;
            }
            approvals.Add(approval);
        }
Example #11
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (!IsPostBack)
            {
                lstStatus.DataSource     = OrderStatusCode.FindAll();
                lstStatus.DataValueField = "Bvin";
                lstStatus.DataTextField  = "StatusDisplayName";
                lstStatus.DataBind();
            }
        }
Example #12
0
        protected void lstStatus_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CurrentOrder != null)
            {
                var prevStatusCode = CurrentOrder.StatusCode;
                var newStatusCode  = OrderStatusCode.FindByBvin(lstStatus.SelectedValue);

                CurrentOrder.StatusCode = newStatusCode.Bvin;
                CurrentOrder.StatusName = newStatusCode.StatusName;

                HccApp.OrderServices.Orders.Update(CurrentOrder);
                HccApp.OrderServices.OrderStatusChanged(CurrentOrder, prevStatusCode);
            }
        }
 public override bool Execute(OrderTaskContext context)
 {
     if (!context.Order.IsRecurring &&
         context.Order.ShippingStatus == OrderShippingStatus.FullyShipped &&
         context.Order.PaymentStatus == OrderPaymentStatus.Paid)
     {
         var orderStatus = OrderStatusCode.FindByBvin(OrderStatusCode.Completed);
         if (orderStatus != null)
         {
             context.Order.StatusCode = orderStatus.Bvin;
             context.Order.StatusName = orderStatus.StatusName;
         }
     }
     return(true);
 }
Example #14
0
        public void OrderCancelled(Order order, string comment, OrderStatusCode previousStatus)
        {
            var user = _userRepository.GetById(_userIdentity.Current);

            var trackingEvent = new OrderTracking
            {
                User        = user,
                StatusCode  = order.StatusCode,
                Description = "cancelled"
            };

            order.AddTracking(trackingEvent);

            _notificationService.OrderCancelled(order, user, comment, previousStatus);
        }
        public void OrderCancelled(Order order, User actor, string cancelReason, OrderStatusCode previousStatus)
        {
            var user             = order.CreatedBy;
            var preference       = _emailPreferenceRepository.GetNullableById(user.Id);
            var notificationType = EmailPreferences.NotificationTypes.PerEvent;

            if (preference != null)
            {
                notificationType = preference.NotificationType;
            }

            //var emailQueue = new EmailQueue(order, notificationType, string.Format(CancellationMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, actor.FullName, order.StatusCode.Name, cancelReason), user);
            var emailQueue2 = new EmailQueueV2(order, notificationType, "Cancelled", string.Format("By {0} at {1} review with the comment  \"{2}\".", actor.FullName, previousStatus.Name, cancelReason), user);

            order.AddEmailQueue(emailQueue2);
        }
        public void OrderDenied(Order order, User user, string comment, OrderStatusCode previousStatus)
        {
            var queues = new List <EmailQueueV2>();

            foreach (var appr in order.OrderTrackings.Select(a => new { User = a.User, StatusCode = a.StatusCode }).Distinct())
            {
                var target     = appr.User;
                var preference = GetEmailPreferences(user.Id);

                //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(CancellationMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, user.FullName, order.StatusCode.Name, comment), target);
                var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Denied", string.Format("By {0} at {1} review with the following comment \"{2}\".", user.FullName, previousStatus.Name, comment), target);
                //order.AddEmailQueue(emailQueue);
                AddToQueue(queues, emailQueue2);
            }

            AddQueuesToOrder(order, queues);
        }
Example #17
0
        public static string ShortenOrderStatus(OrderStatusCode orderStatus)
        {
            switch (orderStatus)
            {
            case OrderStatusCode.Submitted:
                return("Sbtd");

            case OrderStatusCode.ApiCanceled:
            case OrderStatusCode.Cancelled:
                return("Cxld");

            case OrderStatusCode.Filled:
                return("Fld");

            default:
                return(orderStatus.ToString());
            }
        }
        public Order SetupData1(string userId, OrderStatusCode currentLevel)
        {
            var approvals = new List<Approval>();

            var order = CreateValidEntities.Order(1);
            order.SetIdTo(1);
            order.CreatedBy = UserRepository.GetNullableById(userId);
            Assert.IsNotNull(order.CreatedBy);
            order.StatusCode = currentLevel;

            CreateApprovals(approvals, currentLevel, order);
            new FakeApprovals(0, ApprovalRepository, approvals);

            order.OrderTrackings = SetupOrderTracking(order);

            order.Organization = CreateValidEntities.Organization(9);
            order.Organization.SetIdTo("testOrg");

            return order;
        }
Example #19
0
        public IEnumerable <OrderBrief> Get(int pageSize  = 100, int pageNumber = 1, string period = "year",
                                            string status = "")
        {
            var totalCount            = 0;
            List <OrderSnapshot> data = null;
            var dates = GetDateRange(period);

            if (status == "Ready for payment")
            {
                data = HccApp.OrderServices.Orders.GetReadyForPaymentPaged(dates.StartDate, dates.EndDate, pageNumber,
                                                                           pageSize, ref totalCount);
            }
            else if (status == "Ready for shipping")
            {
                data = HccApp.OrderServices.Orders.GetReadyForShippingPaged(dates.StartDate, dates.EndDate, pageNumber,
                                                                            pageSize, ref totalCount);
            }
            else
            {
                var statusCode     = OrderStatusCode.FindAll().FirstOrDefault(o => o.StatusName == status);
                var statusCodeBvin = string.Empty;
                if (statusCode != null)
                {
                    statusCodeBvin = statusCode.Bvin;
                }

                data = GetOrdersData(pageSize, pageNumber, dates, statusCodeBvin, ref totalCount);
            }

            return(data.Select(d => new OrderBrief
            {
                OrderId = d.bvin,
                OrderDate = d.TimeOfOrderUtc,
                CustomerName = string.Format("{0} {1}", d.BillingAddress.FirstName, d.BillingAddress.LastName),
                Total = d.TotalGrand,
                OrderNumber = d.OrderNumber,
                StatusCode = d.StatusName,
                PaymentStatus = d.PaymentStatus.ToString(),
                ShippingStatus = d.ShippingStatus.ToString()
            }).ToList());
        }
        public Order SetupData1(string userId, OrderStatusCode currentLevel)
        {
            var approvals = new List <Approval>();

            var order = CreateValidEntities.Order(1);

            order.SetIdTo(1);
            order.CreatedBy = UserRepository.GetNullableById(userId);
            Assert.IsNotNull(order.CreatedBy);
            order.StatusCode = currentLevel;

            CreateApprovals(approvals, currentLevel, order);
            new FakeApprovals(0, ApprovalRepository, approvals);

            order.OrderTrackings = SetupOrderTracking(order);

            order.Organization = CreateValidEntities.Organization(9);
            order.Organization.SetIdTo("testOrg");

            return(order);
        }
Example #21
0
        public override bool Execute(OrderTaskContext context)
        {
            var result = true;

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

                var scorer = new FraudScorer(context.HccApp.CurrentRequestContext);

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

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

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

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

            return(result);
        }
Example #22
0
        public async Task <IEnumerable <Order> > GetOrders(string token, OrderStatusCode orderStatus = OrderStatusCode.Undefined)
        {
            if (string.IsNullOrWhiteSpace(token))
            {
                throw new ArgumentException("Invalid token provided", nameof(token));
            }

            var uriBuilder = new UriBuilder(baseUri);

            uriBuilder.Path = "api/orders/get-orders";

            if (orderStatus != OrderStatusCode.Undefined)
            {
                var query = HttpUtility.ParseQueryString(uriBuilder.Query);
                query["order_status"] = ((int)orderStatus).ToString();
                uriBuilder.Query      = query.ToString();
            }

            var request = new HttpRequestMessage()
            {
                RequestUri = uriBuilder.Uri,
                Method     = HttpMethod.Post
            };

            request.Headers.Add("token", token);

            var response = await this._httpClient.SendAsync(request);

            response.EnsureSuccessStatusCode();

            var responseJson = await response.Content.ReadAsStringAsync();

            var returnVal = JsonConvert.DeserializeObject <List <Order> >(responseJson);

            return(returnVal);
        }
Example #23
0
 public void OrderStatusChange(Order order, OrderStatusCode newStatusCode)
 {
 }
        public void SetupOrderStatusCodes()
        {
            var orderStatusCodes = new List<OrderStatusCode>();
            var orderStatusCode = new OrderStatusCode();
            orderStatusCode.Name = "Account Manager";
            orderStatusCode.Level = 3;
            orderStatusCode.IsComplete = false;
            orderStatusCode.KfsStatus = false;
            orderStatusCode.ShowInFilterList = true;
            orderStatusCode.SetIdTo("AM");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode = new OrderStatusCode();
            orderStatusCode.Name = "Approver";
            orderStatusCode.Level = 2;
            orderStatusCode.IsComplete = false;
            orderStatusCode.KfsStatus = false;
            orderStatusCode.ShowInFilterList = true;
            orderStatusCode.SetIdTo("AP");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode = new OrderStatusCode();
            orderStatusCode.Name = "Conditional Approval";
            orderStatusCode.Level = 2;
            orderStatusCode.IsComplete = false;
            orderStatusCode.KfsStatus = false;
            orderStatusCode.ShowInFilterList = false;
            orderStatusCode.SetIdTo("CA");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode = new OrderStatusCode();
            orderStatusCode.Name = "Complete-Not Uploaded KFS";
            orderStatusCode.Level = 5;
            orderStatusCode.IsComplete = true;
            orderStatusCode.KfsStatus = false;
            orderStatusCode.ShowInFilterList = false;
            orderStatusCode.SetIdTo("CN");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode = new OrderStatusCode();
            orderStatusCode.Name = "Complete";
            orderStatusCode.Level = 5;
            orderStatusCode.IsComplete = true;
            orderStatusCode.KfsStatus = false;
            orderStatusCode.ShowInFilterList = true;
            orderStatusCode.SetIdTo("CP");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode = new OrderStatusCode();
            orderStatusCode.Name = "Purchaser";
            orderStatusCode.Level = 4;
            orderStatusCode.IsComplete = false;
            orderStatusCode.KfsStatus = false;
            orderStatusCode.ShowInFilterList = true;
            orderStatusCode.SetIdTo("PR");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode = new OrderStatusCode();
            orderStatusCode.Name = "Requester";
            orderStatusCode.Level = 1;
            orderStatusCode.IsComplete = false;
            orderStatusCode.KfsStatus = false;
            orderStatusCode.ShowInFilterList = false;
            orderStatusCode.SetIdTo("RQ");
            orderStatusCodes.Add(orderStatusCode);

            new FakeOrderStatusCodes(0, OrderStatusCodeRepository, orderStatusCodes, true);
        }
        private void CreateApprovals(List<Approval> approvals, OrderStatusCode currentLevel, Order order)
        {
            //var approval = new Approval();
            //approval.Order = new Order();
            //approval.Order.SetIdTo(i + 1 + currentOffSet);
            //approval.StatusCode = OrderStatusCodeRepository.GetNullableById(Role.Codes.Requester);
            //approval.User = createdBy;
            //approval.Approved = true;
            //approvals.Add(approval);

            var approval = new Approval();
            approval.Order = new Order();
            approval.Order.SetIdTo(order.Id);
            approval.StatusCode = OrderStatusCodeRepository.GetNullableById(Role.Codes.Approver);
            approval.User = UserRepository.GetNullableById("hsimpson");
            if(approval.StatusCode.Level < currentLevel.Level)
            {
                approval.Completed = true;
            }
            approvals.Add(approval);

            approval = new Approval();
            approval.Order = new Order();
            approval.Order.SetIdTo(order.Id);
            approval.StatusCode = OrderStatusCodeRepository.GetNullableById(Role.Codes.AccountManager);
            approval.User = UserRepository.GetNullableById("flanders");
            if(approval.StatusCode.Level < currentLevel.Level)
            {
                approval.Completed = true;
            }
            approvals.Add(approval);

            approval = new Approval();
            approval.Order = new Order();
            approval.Order.SetIdTo(order.Id);
            approval.StatusCode = OrderStatusCodeRepository.GetNullableById(Role.Codes.Purchaser);
            approval.User = UserRepository.GetNullableById("awong");
            if(approval.StatusCode.Level < currentLevel.Level)
            {
                approval.Completed = true;
            }
            approvals.Add(approval);

            approval = new Approval();
            approval.Order = new Order();
            approval.Order.SetIdTo(order.Id);
            approval.StatusCode = OrderStatusCodeRepository.GetNullableById(OrderStatusCode.Codes.CompleteNotUploadedKfs);
            approval.User = UserRepository.GetNullableById("zoidberg");
            if(approval.StatusCode.Level < currentLevel.Level)
            {
                approval.Completed = true;
            }
            approvals.Add(approval);
        }
        public override bool Execute(OrderTaskContext context)
        {
            bool result = true;

            if (context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth > 0)
            {
                //Use the last transaction entered by customer first
                List <OrderTransaction> transactions = context.HccApp.OrderServices.Transactions
                                                       .FindForOrder(context.Order.bvin)
                                                       .OrderByDescending(x => x.TimeStampUtc)
                                                       .ToList();

                decimal dueAmount = context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth;

                foreach (OrderTransaction p in transactions)
                {
                    if (p.Action == ActionType.PayPalExpressCheckoutInfo)
                    {
                        // if we already have an auth or charge on the card, skip
                        if (p.HasSuccessfulLinkedAction(ActionType.PayPalHold, transactions) ||
                            p.HasSuccessfulLinkedAction(ActionType.PayPalCharge, transactions))
                        {
                            continue;
                        }

                        try
                        {
                            OrderPaymentManager payManager = new OrderPaymentManager(context.Order, context.HccApp);
                            decimal             amount     = context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth;
                            result = context.HccApp.CurrentRequestContext.CurrentStore.Settings.PayPal.ExpressAuthorizeOnly ? payManager.PayPalExpressHold(p, amount) : payManager.PayPalExpressCharge(p, amount);

                            if (result == true)
                            {
                                dueAmount = context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth;
                                //Amount required in order is already charged. No need to charge on other transactions
                                if (dueAmount <= 0)
                                {
                                    break;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            context.Errors.Add(new WorkflowMessage("Exception During Receive Paypal Express Payments", ex.Message + ex.StackTrace, false));
                        }
                    }
                }
            }

            if (result == false)
            {
                var errorString = "An error occurred while attempting to process your Paypal Express payment. Please check your payment information and try again";
                context.Errors.Add(new WorkflowMessage("Receive Card Failed", errorString, true));

                // Failure Status Code
                var failCode = OrderStatusCode.OnHold;
                var c        = OrderStatusCode.FindByBvin(failCode);
                if (c != null)
                {
                    context.Order.StatusCode = c.Bvin;
                    context.Order.StatusName = c.StatusName;
                }
            }
            return(result);
        }
Example #27
0
        /// <summary>
        /// Generate Random orders
        /// </summary>
        /// <param name="users">List of users to select from</param>
        /// <param name="vendors">List of vendors to select from</param>
        /// <param name="statusCode">Status code to set the order approved through</param>
        /// <returns></returns>
        private static Order GenderateRandomOrder(Workgroup workgroup, OrderStatusCode statusCode, ISession session, WorkgroupPermission user = null, WorkgroupPermission excludeUser = null )
        {
            var randomizedPerms = workgroup.Permissions.Select(a => new {Permission = a, Key = Guid.NewGuid()});
            var requester =  user ?? (excludeUser == null ?
                randomizedPerms.Where(a=>a.Permission.Role.Id == "RQ").OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault()
                : randomizedPerms.Where(a=>a.Permission.Role.Id == "RQ" && a.Permission != excludeUser).OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault());
            var approver = randomizedPerms.Where(a => a.Permission.Role.Id == "AP" && a.Permission.User.Id !="zoidberg").OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault();
            var conditionalApprover = session.Load<User>("zoidberg");  //workgroup.Permissions.Where(a => a.User.Id == "zoidberg").FirstOrDefault();
            var accountmgr = randomizedPerms.Where(a => a.Permission.Role.Id == "AM").OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault();
            var purchaser = randomizedPerms.Where(a => a.Permission.Role.Id == "PR").OrderBy(a => a.Key).Select(a => a.Permission).FirstOrDefault();

            var order = new Order()
                            {
                                Justification = _justifications.Skip(_random.Next() % 5).Take(1).FirstOrDefault(),
                                OrderType = session.Load<OrderType>("OR"),
                                Workgroup = workgroup,
                                Organization = workgroup.PrimaryOrganization,

                                Vendor = workgroup.Vendors.Skip(_random.Next() % workgroup.Vendors.Count).Take(1).FirstOrDefault(),
                                Address = workgroup.Addresses.Skip(_random.Next() % workgroup.Addresses.Count).Take(1).FirstOrDefault(),
                                ShippingType = session.QueryOver<ShippingType>().Skip(_random.Next() % 3).Take(1).SingleOrDefault(),

                                DeliverTo = "Mr. Smith",
                                DateNeeded = DateTime.Now.AddDays(_random.Next() % 30),
                                AllowBackorder = _random.Next() % 2 == 1,

                                EstimatedTax = 8.89m,
                                CreatedBy = requester.User,
                                StatusCode = statusCode
                            };

            order.GenerateRequestNumber();

            // add the tracking
            order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("RQ"), Completed = true, User = requester.User });
            order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("AP"), Completed = statusCode.Level > 2 , User = approver.User });
            order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("AM"), Completed = statusCode.Level > 3 , User = accountmgr.User });
            order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("PR"), Completed = statusCode.Level > 4 , User = purchaser.User });

            // add the approvals

            var daysBack = ((-1)*(_random.Next()%10)) - 10;

            order.AddTracking(new OrderTracking() { User = requester.User, DateCreated = DateTime.Now.AddDays(daysBack), Description = "Order submitted by " + requester.User.FullName, StatusCode = session.Load<OrderStatusCode>("RQ") });
            if (statusCode.Level > 2)
            {
                order.AddTracking(new OrderTracking() { User = approver.User, DateCreated = DateTime.Now.AddDays(daysBack + 1), Description = "Order reviewed by " + approver.User.FullName, StatusCode = session.Load<OrderStatusCode>("AP") });
            }
            if (statusCode.Level > 3)
            {
                order.AddTracking(new OrderTracking() { User = accountmgr.User, DateCreated = DateTime.Now.AddDays(daysBack + 3), Description = "Order reviewed by " + accountmgr.User.FullName, StatusCode = session.Load<OrderStatusCode>("AM") });
            }
            if (statusCode.Level > 4)
            {
                order.AddTracking(new OrderTracking() { User = purchaser.User, DateCreated = DateTime.Now.AddDays(daysBack + (_random.Next() % 4)+3), Description = "Order reviewed by " + purchaser.User.FullName, StatusCode = session.Load<OrderStatusCode>("PR") });
                order.AddTracking(new OrderTracking() { User = purchaser.User, DateCreated = DateTime.Now.AddDays(daysBack + (_random.Next() % 4)+8), Description = "Order marked complete by " + purchaser.User.FullName, StatusCode = session.Load<OrderStatusCode>("CN") });
            }

            // add the conditional stuff if we feel like it
            if (_random.Next() % 2 == 1)
            {
                order.AddApproval(new Approval() { StatusCode = session.Load<OrderStatusCode>("CA"), Completed = statusCode.Level > 2 , User = conditionalApprover });

                if (statusCode.Level > 2)
                {
                    order.AddTracking(new OrderTracking() { User = conditionalApprover, DateCreated = DateTime.Now.AddDays(daysBack + 2), Description = "Order reviewed by " + conditionalApprover.FullName, StatusCode = session.Load<OrderStatusCode>("AP") });
                }
            }

            // add the line items
            var numLineItems = (_random.Next()%5) + 1;  // minimum of 1 line item

            for (var i = 0; i < numLineItems; i++)
            {
                var item = _items.Skip(_random.Next()%_items.Count()).Take(1).FirstOrDefault();
                order.AddLineItem(new LineItem() { Quantity = _random.Next() % 10, UnitPrice = item.Value + (item.Value * ((_random.Next() % 10)+1 / 10)), Unit = "each", Description = item.Key });
            }

            // account information
            var splitType = _random.Next()%2;

            if (splitType == 1) {
                var numSplits = _random.Next()%2;
                var skip = _random.Next()%18;
                var accounts = session.QueryOver<Account>().Skip(skip+numSplits>=18 ? 18-numSplits : skip).Take(numSplits);

                foreach (var act in accounts.List())
                {
                    order.AddSplit(new Split(){Account = act.Id, Amount = order.Total()/numSplits});
                }
            }

            // set shipping
            order.ShippingAmount = order.Total()*.1m;

            order.TotalFromDb = order.Total();

            return order;
        }
Example #28
0
        public void OrderCancelled(Order order, User actor, string cancelReason, OrderStatusCode previousStatus)
        {
            var user = order.CreatedBy;
            var preference = _emailPreferenceRepository.GetNullableById(user.Id);
            var notificationType = EmailPreferences.NotificationTypes.PerEvent;

            if (preference != null) { notificationType = preference.NotificationType; }

            //var emailQueue = new EmailQueue(order, notificationType, string.Format(CancellationMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, actor.FullName, order.StatusCode.Name, cancelReason), user);
            var emailQueue2 = new EmailQueueV2(order, notificationType, "Cancelled", string.Format("By {0} at {1} review with the comment  \"{2}\".", actor.FullName, previousStatus.Name, cancelReason), user);
            order.AddEmailQueue(emailQueue2);
        }
Example #29
0
        public void OrderDenied(Order order, User user, string comment, OrderStatusCode previousStatus)
        {
            var queues = new List<EmailQueueV2>();

            foreach (var appr in order.OrderTrackings.Select(a => new { User = a.User, StatusCode = a.StatusCode }).Distinct())
            {
                var target = appr.User;
                var preference = GetEmailPreferences(user.Id);

                //var emailQueue = new EmailQueue(order, preference.NotificationType, string.Format(CancellationMessage, GenerateLink(_serverLink.Address, order.OrderRequestNumber()), order.Vendor == null ? "Unspecified Vendor" : order.Vendor.Name, user.FullName, order.StatusCode.Name, comment), target);
                var emailQueue2 = new EmailQueueV2(order, preference.NotificationType, "Denied", string.Format("By {0} at {1} review with the following comment \"{2}\".", user.FullName, previousStatus.Name, comment), target);
                //order.AddEmailQueue(emailQueue);
                AddToQueue(queues, emailQueue2);
            }

            AddQueuesToOrder(order, queues);
        }
Example #30
0
        /// <summary>
        /// Determines if user has opted out of a selected email
        /// </summary>
        /// <param name="preference"></param>
        /// <param name="role"></param>
        /// <param name="currentStatus"></param>
        /// <param name="eventCode"></param>
        /// <returns>True if should receive email, False if should not receive email</returns>
        private bool IsMailRequested(EmailPreferences preference, OrderStatusCode role, OrderStatusCode currentStatus, EventCode eventCode, OrderType orderType = null)
        {
            // no preference, automatically gets emails
            if (preference == null) return true;

            // what is the role of the user we are inspecting
            switch (role.Id)
            {
                case OrderStatusCode.Codes.Requester:

                    // what event is happening
                    switch (eventCode)
                    {
                        case EventCode.Approval:

                            // evaluate the level that is being handled
                            switch (currentStatus.Id)
                            {
                                case OrderStatusCode.Codes.Approver: return preference.RequesterApproverApproved;

                                case OrderStatusCode.Codes.ConditionalApprover: return preference.RequesterApproverApproved;

                                case OrderStatusCode.Codes.AccountManager: return preference.RequesterAccountManagerApproved;

                                // this technically doesn't exist, gets completed at purchaser level
                                //case OrderStatusCode.Codes.Purchaser: return preference.RequesterPurchaserAction;

                                //case OrderStatusCode.Codes.Complete: return preference.RequesterKualiApproved;  //Done: OrderStatusCode.Codes.Complete (Kuali Approved)

                                default: return true;
                            }

                        case EventCode.Update:

                            switch (currentStatus.Id)
                            {
                                case OrderStatusCode.Codes.Approver: return preference.RequesterApproverChanged;

                                case OrderStatusCode.Codes.ConditionalApprover: return preference.RequesterApproverChanged;

                                case OrderStatusCode.Codes.AccountManager: return preference.RequesterAccountManagerChanged;

                                case OrderStatusCode.Codes.Purchaser: return preference.RequesterPurchaserChanged;

                                default: return true;
                            }

                        case EventCode.Cancelled:

                            // there is no option, user always receives this event
                            return true;

                        case EventCode.Complete:

                            return preference.RequesterPurchaserAction;

                            //case EventCode.KualiUpdate:

                            //    //TODO: add in kuali stuff

                            //    break;

                        case EventCode.Received:
                            return preference.RequesterReceived;
                        case EventCode.Paid:
                            return preference.RequesterPaid;
                    }

                    break;
                case OrderStatusCode.Codes.Approver:

                    // evaluate the event
                    switch (eventCode)
                    {
                        case EventCode.Approval:

                            switch (currentStatus.Id)
                            {
                                case OrderStatusCode.Codes.AccountManager: return preference.ApproverAccountManagerApproved;
                                case OrderStatusCode.Codes.Purchaser: return preference.ApproverPurchaserProcessed;
                                //case OrderStatusCode.Codes.Complete: return preference.ApproverKualiApproved; //Done: OrderStatusCode.Codes.Complete (Kuali Approved) or Request Completed (Look at Email Preferences Page) ?
                                case OrderStatusCode.Codes.Complete: return preference.ApproverPurchaserProcessed;

                                default: return false;
                            }

                        case EventCode.Update:

                            // this email is turned off, no email exists
                            return false;

                        case EventCode.Cancelled:

                            // this email is turned off, no email exists
                            return false;

                        // this technically doesn't exist, since a "complete" order is an approval at purchaser level, see switch statement in approval event.
                        case EventCode.Complete:

                            return preference.ApproverPurchaserProcessed;

                        //case EventCode.KualiUpdate:

                        //    //TODO: add in kuali stuff

                        //    break;

                        case EventCode.Arrival:

                            return preference.ApproverOrderArrive;

                        // no received status for approver
                        case EventCode.Received:
                            return false;
                        case EventCode.Paid:
                            return false;

                        default: return false;
                    }

                case OrderStatusCode.Codes.ConditionalApprover:
                    //Copied code from Approver above... Otherwise this was always returning true...
                    // evaluate the event
                    switch (eventCode)
                    {
                        case EventCode.Approval:

                            switch (currentStatus.Id)
                            {
                                case OrderStatusCode.Codes.AccountManager: return preference.ApproverAccountManagerApproved;
                                case OrderStatusCode.Codes.Purchaser: return preference.ApproverPurchaserProcessed;
                                //case OrderStatusCode.Codes.Complete: return preference.ApproverKualiApproved; //Done: OrderStatusCode.Codes.Complete (Kuali Approved) or Request Completed (Look at Email Preferences Page) ?
                                case OrderStatusCode.Codes.Complete: return preference.ApproverPurchaserProcessed;

                                default: return false;
                            }

                        case EventCode.Update:

                            // this email is turned off, no email exists
                            return false;

                        case EventCode.Cancelled:

                            // this email is turned off, no email exists
                            return false;

                        // this technically doesn't exist, since a "complete" order is an approval at purchaser level, see switch statement in approval event.
                        case EventCode.Complete:

                            return preference.ApproverPurchaserProcessed;

                        //case EventCode.KualiUpdate:

                        //    //TODO: add in kuali stuff

                        //    break;

                        case EventCode.Arrival:

                            return preference.ApproverOrderArrive;

                        // no received status for approver
                        case EventCode.Received:
                            return false;
                        case EventCode.Paid:
                            return false;

                        default: return false;
                    }

                    break;
                case OrderStatusCode.Codes.AccountManager:

                    switch (eventCode)
                    {
                        case EventCode.Approval:

                            switch (currentStatus.Id)
                            {
                                case OrderStatusCode.Codes.Purchaser: return preference.AccountManagerPurchaserProcessed;
                                case OrderStatusCode.Codes.Complete: return preference.AccountManagerPurchaserProcessed; //Done: OrderStatusCode.Codes.Complete (Kuali Approved) or Request Completed (Look at Email Preferences Page) ?
                                default: return true;
                            }

                        case EventCode.Update:

                            // no email exists
                            return false;

                        case EventCode.Cancelled:

                            // no email exists
                            return false;

                        case EventCode.Complete:

                            return preference.AccountManagerPurchaserProcessed;

                        //case EventCode.KualiUpdate:

                        //    //TODO: Add in kuali stuff

                        //    break;

                        case EventCode.Arrival:

                            return preference.AccountManagerOrderArrive;

                        // account manager doesn't have any emails fror received.
                        case EventCode.Received:
                            return false;
                        case EventCode.Paid:
                            return false;

                        default: return false;
                    }

                case OrderStatusCode.Codes.Purchaser:

                    switch (eventCode)
                    {
                        case EventCode.Approval:
                            switch (currentStatus.Id)
                            {
                                case OrderStatusCode.Codes.Complete: return preference.PurchaserKualiApproved;  //Done: OrderStatusCode.Codes.Complete (Kuali Approved) or Request Completed (Look at Email Preferences Page) ?
                            }

                            // no email exists
                            return false;

                        case EventCode.Update:

                            // no email exists
                            return false;

                        case EventCode.Cancelled:

                            // no email exists
                            return false;

                        //case EventCode.KualiUpdate:
                        //    //TODO: Add in Kuali Stuff
                        //    break;

                        case EventCode.Arrival:

                            return preference.PurchaserOrderArrive;

                        case EventCode.Received:

                            switch (orderType.Id)
                            {
                                case "KFS": return preference.PurchaserKfsItemReceived;
                                case "PC": return preference.PurchaserPCardItemReceived;
                                case "CS": return preference.PurchaserCampusServicesItemReceived;
                                default: return false;
                            }
                        case EventCode.Paid:

                            switch (orderType.Id)
                            {
                                case "KFS": return preference.PurchaserKfsItemPaid;
                                case "PC": return preference.PurchaserPCardItemPaid;
                                case "CS": return preference.PurchaserCampusServicesItemPaid;
                                default: return false;
                            }

                        default: return false;
                    }
            }

            // default receive email
            return true;
        }
Example #31
0
 public bool IsOrderStatus(Order order, OrderStatusCode orderStatus)
 {
     return(XO.IsOrderStatus(order, orderStatus));
 }
Example #32
0
        public void LoadOrderStatusCodes()
        {
            var orderStatusCodeRepository = new RepositoryWithTypedId <OrderStatusCode, string>();
            var orderStatusCodes          = new List <OrderStatusCode>();
            var orderStatusCode           = new OrderStatusCode();

            orderStatusCode.Name             = "Account Manager";
            orderStatusCode.Level            = 3;
            orderStatusCode.IsComplete       = false;
            orderStatusCode.KfsStatus        = false;
            orderStatusCode.ShowInFilterList = true;
            orderStatusCode.SetIdTo("AM");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode                  = new OrderStatusCode();
            orderStatusCode.Name             = "Approver";
            orderStatusCode.Level            = 2;
            orderStatusCode.IsComplete       = false;
            orderStatusCode.KfsStatus        = false;
            orderStatusCode.ShowInFilterList = true;
            orderStatusCode.SetIdTo("AP");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode                  = new OrderStatusCode();
            orderStatusCode.Name             = "Conditional Approval";
            orderStatusCode.Level            = 2;
            orderStatusCode.IsComplete       = false;
            orderStatusCode.KfsStatus        = false;
            orderStatusCode.ShowInFilterList = false;
            orderStatusCode.SetIdTo("CA");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode                  = new OrderStatusCode();
            orderStatusCode.Name             = "Complete-Not Uploaded KFS";
            orderStatusCode.Level            = 5;
            orderStatusCode.IsComplete       = true;
            orderStatusCode.KfsStatus        = false;
            orderStatusCode.ShowInFilterList = false;
            orderStatusCode.SetIdTo("CN");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode                  = new OrderStatusCode();
            orderStatusCode.Name             = "Complete";
            orderStatusCode.Level            = 5;
            orderStatusCode.IsComplete       = true;
            orderStatusCode.KfsStatus        = false;
            orderStatusCode.ShowInFilterList = true;
            orderStatusCode.SetIdTo("CP");
            orderStatusCodes.Add(orderStatusCode);

            orderStatusCode                  = new OrderStatusCode();
            orderStatusCode.Name             = "Purchaser";
            orderStatusCode.Level            = 4;
            orderStatusCode.IsComplete       = false;
            orderStatusCode.KfsStatus        = false;
            orderStatusCode.ShowInFilterList = true;
            orderStatusCode.SetIdTo("PR");
            orderStatusCodes.Add(orderStatusCode);


            orderStatusCode                  = new OrderStatusCode();
            orderStatusCode.Name             = "Requester";
            orderStatusCode.Level            = 1;
            orderStatusCode.IsComplete       = false;
            orderStatusCode.KfsStatus        = false;
            orderStatusCode.ShowInFilterList = false;
            orderStatusCode.SetIdTo("RQ");
            orderStatusCodes.Add(orderStatusCode);

            foreach (var statusCode in orderStatusCodes)
            {
                orderStatusCodeRepository.EnsurePersistent(statusCode);
            }
        }
Example #33
0
 public static IDealStatusCode ToDealCode(this OrderStatusCode code)
 {
     return(((IOrderStatusCode)code).ToDealCode());
 }
        public override bool Execute(OrderTaskContext context)
        {
            var result = true;

            if (context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth > 0)
            {
                List <OrderTransaction> transactions = context.HccApp.OrderServices.Transactions
                                                       .FindForOrder(context.Order.bvin)
                                                       .OrderByDescending(x => x.TimeStampUtc)
                                                       .ToList();

                decimal dueAmount = context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth;

                foreach (OrderTransaction p in transactions)
                {
                    if (p.Action == ActionType.GiftCardInfo)
                    {
                        // if we already have an auth or charge on the card, skip
                        if (p.HasSuccessfulLinkedAction(ActionType.GiftCardDecrease, transactions) ||
                            p.HasSuccessfulLinkedAction(ActionType.GiftCardCapture, transactions) ||
                            p.HasSuccessfulLinkedAction(ActionType.GiftCardHold, transactions))
                        {
                            var note = new OrderNote();
                            note.IsPublic = false;
                            note.Note     = "Skipping receive for gift card info because auth or charge already exists. Transaction " + p.Id;
                            context.Order.Notes.Add(note);
                            continue;
                        }

                        try
                        {
                            var         payManager    = new OrderPaymentManager(context.Order, context.HccApp);
                            var         storeSettings = context.HccApp.CurrentStore.Settings;
                            Transaction t             = payManager.CreateEmptyTransaction();
                            t.GiftCard.CardNumber = p.GiftCard.CardNumber;
                            t.Amount = p.Amount;

                            GiftCardGateway proc = storeSettings.PaymentCurrentGiftCardProcessor();

                            if (storeSettings.PaymentGiftCardAuthorizeOnly && proc.CanAuthorize)
                            {
                                t.Action = ActionType.GiftCardHold;
                            }
                            else
                            {
                                t.Action = ActionType.GiftCardDecrease;
                            }

                            proc.ProcessTransaction(t);

                            OrderTransaction ot = new OrderTransaction(t);
                            ot.LinkedToTransaction = p.IdAsString;
                            context.HccApp.OrderServices.AddPaymentTransactionToOrder(context.Order, ot);

                            if (t.Result.Succeeded == false)
                            {
                                result = false;
                            }
                        }
                        catch (Exception ex)
                        {
                            context.Errors.Add(new WorkflowMessage("Exception During Receive Gift Card", ex.Message + ex.StackTrace, false));
                            OrderNote note = new OrderNote();
                            note.IsPublic = false;
                            note.Note     = "EXCEPTION: " + ex.Message + " | " + ex.StackTrace;
                            context.Order.Notes.Add(note);
                        }

                        dueAmount = context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth;
                        //Amount required in order is already charged. No need to charge on other transactions
                        if (dueAmount <= 0)
                        {
                            break;
                        }
                    }
                }
            }
            else
            {
                var note = new OrderNote();
                note.IsPublic = false;
                note.Note     = "Amount due was less than zero. Skipping receive gift cards";
                context.Order.Notes.Add(note);
            }

            if (!result)
            {
                string errorString = "An error occurred while attempting to process your gift card. Please check your payment information and try again";
                context.Errors.Add(new WorkflowMessage("Receive Gift Card Failed", errorString, true));

                // Failure Status Code
                string          failCode = OrderStatusCode.OnHold;
                OrderStatusCode c        = OrderStatusCode.FindByBvin(failCode);
                if (c != null)
                {
                    context.Order.StatusCode = c.Bvin;
                    context.Order.StatusName = c.StatusName;
                }
            }
            return(result);
        }
Example #35
0
        public static OrderStatusCode OrderStatusCode(int? counter)
        {
            var rtValue = new OrderStatusCode();
            rtValue.Name = "Name" + counter.Extra();

            return rtValue;
        }
Example #36
0
        public override bool Execute(OrderTaskContext context)
        {
            bool result = true;

            if (context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth > 0)
            {
                //Use the last transaction entered by customer first
                List <OrderTransaction> transactions = context.HccApp.OrderServices.Transactions
                                                       .FindForOrder(context.Order.bvin)
                                                       .OrderByDescending(x => x.TimeStampUtc)
                                                       .ToList();

                decimal dueAmount = context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth;

                foreach (OrderTransaction p in transactions)
                {
                    if (p.Action == ActionType.CreditCardInfo)
                    {
                        // if we already have an auth or charge on the card, skip
                        if (p.HasSuccessfulLinkedAction(ActionType.CreditCardCharge, transactions) ||
                            p.HasSuccessfulLinkedAction(ActionType.CreditCardHold, transactions))
                        {
                            OrderNote note = new OrderNote();
                            note.IsPublic = false;
                            note.Note     = "Skipping receive for credit card info because auth or charge already exists. Transaction " + p.Id;
                            context.Order.Notes.Add(note);
                            continue;
                        }
                        result &= ProcessTransaction(context, p);

                        if (result == true)
                        {
                            dueAmount = context.HccApp.OrderServices.PaymentSummary(context.Order).AmountDueWithAuth;
                            //Due amount is already charged, no need to charge other cards
                            if (dueAmount <= 0)
                            {
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                OrderNote note = new OrderNote();
                note.IsPublic = false;
                note.Note     = "Amount due was less than zero. Skipping receive credit cards";
                context.Order.Notes.Add(note);
            }

            if (!result)
            {
                string errorString = "An error occurred while attempting to process your credit card. Please check your payment information and try again";
                context.Errors.Add(new WorkflowMessage("Receive Card Failed", errorString, true));

                string          failCode = OrderStatusCode.OnHold;
                OrderStatusCode c        = OrderStatusCode.FindByBvin(failCode);
                if (c != null)
                {
                    context.Order.StatusCode = c.Bvin;
                    context.Order.StatusName = c.StatusName;
                }
            }
            return(result);
        }
Example #37
0
        public async Task <UpdateOrderResponse> UpdateOrderStatus(string token, string order_id, OrderStatusCode order_status)
        {
            if (string.IsNullOrWhiteSpace(token))
            {
                throw new ArgumentException("Invalid token provided", nameof(token));
            }

            if (string.IsNullOrWhiteSpace(order_id))
            {
                throw new ArgumentException("Invalid order_id provided", nameof(order_id));
            }

            if (order_status == OrderStatusCode.Undefined)
            {
                throw new ArgumentException("Invalid order_status provided", nameof(order_status));
            }

            var uriBuilder = new UriBuilder(baseUri);

            uriBuilder.Path = "api/orders/api-update-order-status";

            var query = HttpUtility.ParseQueryString(uriBuilder.Query);

            query["order_status"] = ((int)order_status).ToString();
            query["order_id"]     = order_id;
            uriBuilder.Query      = query.ToString();

            var request = new HttpRequestMessage()
            {
                RequestUri = uriBuilder.Uri,
                Method     = HttpMethod.Post
            };

            request.Headers.Add("token", token);

            var response = await this._httpClient.SendAsync(request);

            //TODO: Do they actually send back an error code, not sure, need to handle this.
            response.EnsureSuccessStatusCode();

            var responseJson = await response.Content.ReadAsStringAsync();

            var returnVal = JsonConvert.DeserializeObject <UpdateOrderResponse>(responseJson);

            return(returnVal);
        }
        /// <summary>
        /// Determines if user has opted out of a selected email
        /// </summary>
        /// <param name="preference"></param>
        /// <param name="role"></param>
        /// <param name="currentStatus"></param>
        /// <param name="eventCode"></param>
        /// <returns>True if should receive email, False if should not receive email</returns>
        private bool IsMailRequested(EmailPreferences preference, OrderStatusCode role, OrderStatusCode currentStatus, EventCode eventCode, OrderType orderType = null)
        {
            // no preference, automatically gets emails
            if (preference == null)
            {
                return(true);
            }

            // what is the role of the user we are inspecting
            switch (role.Id)
            {
            case OrderStatusCode.Codes.Requester:

                // what event is happening
                switch (eventCode)
                {
                case EventCode.Approval:

                    // evaluate the level that is being handled
                    switch (currentStatus.Id)
                    {
                    case OrderStatusCode.Codes.Approver: return(preference.RequesterApproverApproved);

                    case OrderStatusCode.Codes.ConditionalApprover: return(preference.RequesterApproverApproved);

                    case OrderStatusCode.Codes.AccountManager: return(preference.RequesterAccountManagerApproved);

                    // this technically doesn't exist, gets completed at purchaser level
                    //case OrderStatusCode.Codes.Purchaser: return preference.RequesterPurchaserAction;

                    //case OrderStatusCode.Codes.Complete: return preference.RequesterKualiApproved;  //Done: OrderStatusCode.Codes.Complete (Kuali Approved)

                    default: return(true);
                    }


                case EventCode.Update:

                    switch (currentStatus.Id)
                    {
                    case OrderStatusCode.Codes.Approver: return(preference.RequesterApproverChanged);

                    case OrderStatusCode.Codes.ConditionalApprover: return(preference.RequesterApproverChanged);

                    case OrderStatusCode.Codes.AccountManager: return(preference.RequesterAccountManagerChanged);

                    case OrderStatusCode.Codes.Purchaser: return(preference.RequesterPurchaserChanged);

                    default: return(true);
                    }

                case EventCode.Cancelled:

                    // there is no option, user always receives this event
                    return(true);

                case EventCode.Complete:

                    return(preference.RequesterPurchaserAction);

                //case EventCode.KualiUpdate:

                //    //TODO: add in kuali stuff

                //    break;

                case EventCode.Received:
                    return(preference.RequesterReceived);

                case EventCode.Paid:
                    return(preference.RequesterPaid);
                }


                break;

            case OrderStatusCode.Codes.Approver:

                // evaluate the event
                switch (eventCode)
                {
                case EventCode.Approval:

                    switch (currentStatus.Id)
                    {
                    case OrderStatusCode.Codes.AccountManager: return(preference.ApproverAccountManagerApproved);

                    case OrderStatusCode.Codes.Purchaser: return(preference.ApproverPurchaserProcessed);

                    //case OrderStatusCode.Codes.Complete: return preference.ApproverKualiApproved; //Done: OrderStatusCode.Codes.Complete (Kuali Approved) or Request Completed (Look at Email Preferences Page) ?
                    case OrderStatusCode.Codes.Complete: return(preference.ApproverPurchaserProcessed);

                    default: return(false);
                    }

                case EventCode.Update:

                    // this email is turned off, no email exists
                    return(false);

                case EventCode.Cancelled:

                    // this email is turned off, no email exists
                    return(false);

                // this technically doesn't exist, since a "complete" order is an approval at purchaser level, see switch statement in approval event.
                case EventCode.Complete:

                    return(preference.ApproverPurchaserProcessed);

                //case EventCode.KualiUpdate:

                //    //TODO: add in kuali stuff

                //    break;

                case EventCode.Arrival:

                    return(preference.ApproverOrderArrive);

                // no received status for approver
                case EventCode.Received:
                    return(false);

                case EventCode.Paid:
                    return(false);

                default: return(false);
                }

            case OrderStatusCode.Codes.ConditionalApprover:
                //Copied code from Approver above... Otherwise this was always returning true...
                // evaluate the event
                switch (eventCode)
                {
                case EventCode.Approval:

                    switch (currentStatus.Id)
                    {
                    case OrderStatusCode.Codes.AccountManager: return(preference.ApproverAccountManagerApproved);

                    case OrderStatusCode.Codes.Purchaser: return(preference.ApproverPurchaserProcessed);

                    //case OrderStatusCode.Codes.Complete: return preference.ApproverKualiApproved; //Done: OrderStatusCode.Codes.Complete (Kuali Approved) or Request Completed (Look at Email Preferences Page) ?
                    case OrderStatusCode.Codes.Complete: return(preference.ApproverPurchaserProcessed);

                    default: return(false);
                    }

                case EventCode.Update:

                    // this email is turned off, no email exists
                    return(false);

                case EventCode.Cancelled:

                    // this email is turned off, no email exists
                    return(false);

                // this technically doesn't exist, since a "complete" order is an approval at purchaser level, see switch statement in approval event.
                case EventCode.Complete:

                    return(preference.ApproverPurchaserProcessed);

                //case EventCode.KualiUpdate:

                //    //TODO: add in kuali stuff

                //    break;

                case EventCode.Arrival:

                    return(preference.ApproverOrderArrive);

                // no received status for approver
                case EventCode.Received:
                    return(false);

                case EventCode.Paid:
                    return(false);

                default: return(false);
                }

                break;

            case OrderStatusCode.Codes.AccountManager:

                switch (eventCode)
                {
                case EventCode.Approval:

                    switch (currentStatus.Id)
                    {
                    case OrderStatusCode.Codes.Purchaser: return(preference.AccountManagerPurchaserProcessed);

                    case OrderStatusCode.Codes.Complete: return(preference.AccountManagerPurchaserProcessed);            //Done: OrderStatusCode.Codes.Complete (Kuali Approved) or Request Completed (Look at Email Preferences Page) ?

                    default: return(true);
                    }

                case EventCode.Update:

                    // no email exists
                    return(false);

                case EventCode.Cancelled:

                    // no email exists
                    return(false);

                case EventCode.Complete:

                    return(preference.AccountManagerPurchaserProcessed);

                //case EventCode.KualiUpdate:

                //    //TODO: Add in kuali stuff

                //    break;

                case EventCode.Arrival:

                    return(preference.AccountManagerOrderArrive);

                // account manager doesn't have any emails fror received.
                case EventCode.Received:
                    return(false);

                case EventCode.Paid:
                    return(false);

                default: return(false);
                }

            case OrderStatusCode.Codes.Purchaser:

                switch (eventCode)
                {
                case EventCode.Approval:
                    switch (currentStatus.Id)
                    {
                    case OrderStatusCode.Codes.Complete: return(preference.PurchaserKualiApproved);             //Done: OrderStatusCode.Codes.Complete (Kuali Approved) or Request Completed (Look at Email Preferences Page) ?
                    }

                    // no email exists
                    return(false);

                case EventCode.Update:

                    // no email exists
                    return(false);

                case EventCode.Cancelled:

                    // no email exists
                    return(false);

                //case EventCode.KualiUpdate:
                //    //TODO: Add in Kuali Stuff
                //    break;

                case EventCode.Arrival:

                    return(preference.PurchaserOrderArrive);

                case EventCode.Received:

                    switch (orderType.Id)
                    {
                    case "KFS": return(preference.PurchaserKfsItemReceived);

                    case "PC": return(preference.PurchaserPCardItemReceived);

                    case "CS": return(preference.PurchaserCampusServicesItemReceived);

                    default: return(false);
                    }

                case EventCode.Paid:

                    switch (orderType.Id)
                    {
                    case "KFS": return(preference.PurchaserKfsItemPaid);

                    case "PC": return(preference.PurchaserPCardItemPaid);

                    case "CS": return(preference.PurchaserCampusServicesItemPaid);

                    default: return(false);
                    }


                default: return(false);
                }
            }

            // default receive email
            return(true);
        }