Exemple #1
0
        public Order AddOrder(Ticket ticket, int menuItemId, decimal quantity, string portionName)
        {
            if (ticket.IsLocked && !_userService.IsUserPermittedFor(PermissionNames.AddItemsToLockedTickets))
            {
                return(null);
            }
            if (!ticket.CanSubmit)
            {
                return(null);
            }
            var menuItem = _cacheService.GetMenuItem(x => x.Id == menuItemId);
            var portion  = _cacheService.GetMenuItemPortion(menuItemId, portionName);

            if (portion == null)
            {
                return(null);
            }
            var priceTag     = _applicationState.CurrentDepartment.PriceTag;
            var productTimer = _applicationState.GetProductTimer(menuItemId);

            var order = ticket.AddOrder(
                _applicationState.CurrentTicketType.SaleTransactionType,
                _applicationState.CurrentDepartment.Model,
                _applicationState.CurrentLoggedInUser.Name, menuItem,
                _applicationState.GetTaxTemplates(menuItem.Id).ToList(), portion, priceTag, productTimer);

            order.Quantity = quantity > 9 ? decimal.Round(quantity / portion.Multiplier, 3, MidpointRounding.AwayFromZero) : quantity;
            RecalculateTicket(ticket);
            _applicationState.NotifyEvent(RuleEventNames.OrderAdded, new { Ticket = ticket, Order = order, MenuItemName = order.MenuItemName, MenuItemTag = menuItem.Tag, MenuItemGroupCode = menuItem.GroupCode });
            return(order);
        }
        public Ticket Build()
        {
            if (_ticketType == null)
            {
                throw new ArgumentNullException();
            }
            if (_department == null)
            {
                throw new ArgumentNullException();
            }

            var result = new Ticket
            {
                TicketTypeId        = _ticketType.Id,
                DepartmentId        = _department.Id,
                ExchangeRate        = _exchangeRate,
                TaxIncluded         = _taxIncluded,
                TransactionDocument = new AccountTransactionDocument()
            };

            foreach (var orderData in _orders)
            {
                result.AddOrder(orderData.Order, orderData.TaxTemplates, orderData.TransactionType, orderData.UserName);
            }

            foreach (var calculation in _calculations)
            {
                result.AddCalculation(calculation, calculation.Amount);
            }

            result.Recalculate();

            return(result);
        }
Exemple #3
0
        public Order AddOrder(Ticket ticket, int menuItemId, decimal quantity, string portionName, OrderTagTemplate template)
        {
            if (ticket.Locked && !_userService.IsUserPermittedFor(PermissionNames.AddItemsToLockedTickets))
            {
                return(null);
            }
            if (!ticket.CanSubmit)
            {
                return(null);
            }
            var menuItem = _cacheService.GetMenuItem(x => x.Id == menuItemId);
            var portion  = _cacheService.GetMenuItemPortion(menuItemId, portionName);

            if (portion == null)
            {
                return(null);
            }
            var priceTag     = _applicationState.CurrentDepartment.PriceTag;
            var productTimer = _cacheService.GetProductTimer(menuItemId);
            var order        = ticket.AddOrder(
                _applicationState.CurrentDepartment.TicketTemplate.SaleTransactionType,
                _applicationState.CurrentLoggedInUser.Name, menuItem, portion, priceTag, productTimer);

            order.Quantity = quantity > 9 ? decimal.Round(quantity / portion.Multiplier, 3, MidpointRounding.AwayFromZero) : quantity;

            if (template != null)
            {
                template.OrderTagTemplateValues.ToList().ForEach(x => order.ToggleOrderTag(x.OrderTagGroup, x.OrderTag, 0));
            }
            RecalculateTicket(ticket);

            order.PublishEvent(EventTopicNames.OrderAdded);
            _automationService.NotifyEvent(RuleEventNames.TicketLineAdded, new { Ticket = ticket, Order = order, order.MenuItemName });

            return(order);
        }