private void OnMakePaymentExecute(string obj)
 {
     if (CanCloseTicket())
     {
         SelectedTicket.PublishEvent(EventTopicNames.MakePayment);
     }
 }
示例#2
0
 private void OnRemoveTicketLock(string obj)
 {
     SelectedTicket.UnLock();
     _ticketOrdersViewModel.Refresh();
     _allAutomationCommands = null;
     RefreshVisuals();
 }
        private void OnPropertySelected(MenuItemProperty obj)
        {
            var mig = SelectedItemPropertyGroups.FirstOrDefault(propertyGroup => propertyGroup.Properties.Contains(obj));

            Debug.Assert(mig != null);
            if (_removeModifier)
            {
                if (mig.ForceValue && SelectedItem.Properties.Count(x => x.Model.PropertyGroupId == mig.Id) < 2)
                {
                    InteractionService.UserIntraction.GiveFeedback(string.Format(Resources.SelectionRequired_f, mig.Name));
                }
                else
                {
                    SelectedItem.RemoveProperty(mig, obj);
                }
            }
            else
            {
                SelectedItem.ToggleProperty(mig, obj);
            }
            SelectedTicket.RefreshVisuals();
            SelectedTicket.RecalculateTicket();
            if (_removeModifier)
            {
                OnRemoveModifier("");
            }
            RaisePropertyChanged("IsRemoveModifierButtonVisible");
        }
        private void OnUpdateFreeTag(string obj)
        {
            var cachedTag = AppServices.MainDataContext.SelectedDepartment.TicketTagGroups.Single(
                x => x.Id == SelectedTicket.LastSelectedTicketTag.Id);

            Debug.Assert(cachedTag != null);
            var ctag = cachedTag.TicketTags.SingleOrDefault(x => x.Name.ToLower() == FreeTag.ToLower());

            if (ctag == null && cachedTag.SaveFreeTags)
            {
                using (var workspace = WorkspaceFactory.Create())
                {
                    var tt = workspace.Single <TicketTagGroup>(x => x.Id == SelectedTicket.LastSelectedTicketTag.Id);
                    Debug.Assert(tt != null);
                    var tag = tt.TicketTags.SingleOrDefault(x => x.Name.ToLower() == FreeTag.ToLower());
                    if (tag == null)
                    {
                        tag = new TicketTag {
                            Name = FreeTag
                        };
                        tt.TicketTags.Add(tag);
                        workspace.Add(tag);
                        workspace.CommitChanges();
                    }
                }
            }
            SelectedTicket.UpdateTag(SelectedTicket.LastSelectedTicketTag, new TicketTag {
                Name = FreeTag
            });
            FreeTag = string.Empty;
        }
示例#5
0
        public void AssignTableToSelectedTicket(int tableId)
        {
            if (SelectedTicket == null)
            {
                CreateNewTicket();
            }

            var table = _ticketWorkspace.GetTableWithId(tableId);

            Debug.Assert(SelectedTicket != null);

            if (!string.IsNullOrEmpty(SelectedTicket.LocationName))
            {
                var oldTable = _ticketWorkspace.GetTicketTable();
                if (oldTable.TicketId == SelectedTicket.Id)
                {
                    oldTable.IsTicketLocked = false;
                    oldTable.TicketId       = 0;
                }
            }

            if (table.TicketId > 0 && table.TicketId != SelectedTicket.Id)
            {
                MoveTicketItems(SelectedTicket.TicketItems.ToList(), table.TicketId);
                OpenTicket(table.TicketId);
            }

            SelectedTicket.DepartmentId = AppServices.CurrentTerminal.DepartmentId > 0
                ? AppServices.CurrentTerminal.DepartmentId
                : SelectedDepartment.Id;

            SelectedTicket.LocationName = table.Name;
            table.TicketId = SelectedTicket.GetRemainingAmount() > 0 ? SelectedTicket.Id : 0;
        }
示例#6
0
 private bool CanChangeTable(string arg)
 {
     if (SelectedTicket != null && !SelectedTicket.IsLocked)
     {
         return(SelectedTicket.CanChangeTable());
     }
     return(true);
 }
示例#7
0
 private void OnRemoveTicketLock(string obj)
 {
     SelectedTicket.UnLock();
     _ticketOrdersViewModel.Refresh();
     _allAutomationCommands = null;
     _entityButtons         = null;
     RaisePropertyChanged(() => EntityButtons);
     RefreshVisuals();
 }
 private void OnPortionSelected(MenuItemPortion obj)
 {
     SelectedItem.UpdatePortion(obj, AppServices.MainDataContext.SelectedDepartment.PriceTag);
     SelectedTicket.RefreshVisuals();
     SelectedTicket.RecalculateTicket();
     if (SelectedItemPropertyGroups.Count == 0 && SelectedItemGroupedPropertyItems.Count == 0)
     {
         SelectedTicket.ClearSelectedItems();
     }
 }
示例#9
0
        private void ClosePaymentScreen()
        {
            var paidItems = MergedItems.SelectMany(x => x.PaidItems);

            SelectedTicket.UpdatePaidItems(paidItems);
            AppServices.MainDataContext.SelectedTicket.PublishEvent(EventTopicNames.PaymentSubmitted);
            TenderedAmount            = "";
            ReturningAmount           = "";
            ReturningAmountVisibility = Visibility.Collapsed;
            SelectedTicket            = null;
        }
示例#10
0
        private void UpdateSelectors()
        {
            var serviceAmount = SelectedTicket.GetPreTaxServicesTotal() + SelectedTicket.GetPostTaxServicesTotal();
            var sum           = SelectedTicket.GetPlainSum();

            foreach (var order in SelectedTicket.Orders)
            {
                UpdateSelector(order, serviceAmount, sum);
            }

            RoundSelectors();
        }
示例#11
0
        private void UpdateSelectors()
        {
            var serviceAmount = SelectedTicket.GetPreTaxServicesTotal() + SelectedTicket.GetPostTaxServicesTotal();
            var sum           = SelectedTicket.GetPlainSum();

            foreach (var order in SelectedTicket.Orders.Where(x => x.CalculatePrice))
            {
                UpdateSelector(order, serviceAmount, sum, SelectedTicket.TaxIncluded);
            }

            RoundSelectors();
        }
        private void button_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            if (SelectedEmployee != null)
            {
                SelectedTicket.SetEmployeeId(SelectedEmployee.Id);
                SelectedTicket.Update();
            }
            Window window1 = Window.GetWindow(this);

            if (window1 != null)
            {
                window1.Close();
            }
        }
        private void OnReasonSelected(int?reasonId)
        {
            var    rid = reasonId.GetValueOrDefault(0);
            Reason r   = AppServices.MainDataContext.Reasons[rid];

            if (r.ReasonType == 0)
            {
                SelectedTicket.VoidSelectedItems(rid);
            }
            if (r.ReasonType == 1)
            {
                SelectedTicket.GiftSelectedItems(rid);
            }
        }
示例#14
0
 private void RoundSelectors()
 {
     if (AutoRoundValue != 0 && RemainingTotal > 0)
     {
         var amount = 0m;
         foreach (var selector in Selectors)
         {
             var price    = selector.Price;
             var newPrice = decimal.Round(price / AutoRoundValue, MidpointRounding.AwayFromZero) * AutoRoundValue;
             selector.Price = newPrice;
             amount        += (newPrice * selector.RemainingQuantity);
         }
         var mLast = Selectors.Where(x => x.RemainingQuantity > 0).OrderBy(x => x.RemainingPrice).First();
         mLast.Price += ((SelectedTicket.GetSum() / ExchangeRate) - amount) / mLast.RemainingQuantity;
     }
 }
        private void OnCloseCommandExecuted(string obj)
        {
            var unselectedItem = SelectedItemPropertyGroups.FirstOrDefault(x => x.ForceValue && SelectedItem.Properties.Count(y => y.Model.PropertyGroupId == x.Id) == 0);

            if (unselectedItem != null)
            {
                InteractionService.UserIntraction.GiveFeedback(string.Format(Resources.SelectionRequired_f, unselectedItem.Name));
                return;
            }

            _showTicketNoteEditor    = false;
            _showExtraPropertyEditor = false;
            _showFreeTagEditor       = false;
            _removeModifier          = false;
            FreeTag = string.Empty;
            SelectedTicket.ClearSelectedItems();
        }
示例#16
0
        private void OnPrintJobExecute(PrintJob printJob)
        {
            var message = SelectedTicket.GetPrintError();

            if (!string.IsNullOrEmpty(message))
            {
                MainWindowViewModel.ShowFeedback(message);
                return;
            }

            if (SelectedTicket.Id == 0)
            {
                var result = DataContext.CloseSelectedTicket();
                DataContext.OpenTicket(result.TicketId);
            }
            AppServices.PrintService.ManualPrintTicket(SelectedTicket.Model, printJob);
            InvokeCloseTicketRequested(EventArgs.Empty);
        }
示例#17
0
        private void OnOrderTagEvent(EventParameters <OrderTagData> obj)
        {
            if (obj.Topic == EventTopicNames.OrderTagSelected)
            {
                _ticketService.TagOrders(SelectedTicket, SelectedTicket.ExtractSelectedOrders(), obj.Value.OrderTagGroup, obj.Value.SelectedOrderTag, "");
                _ticketOrdersViewModel.SelectedTicket = SelectedTicket;
                ClearSelection = true;
                RefreshVisuals();
            }

            if (obj.Topic == EventTopicNames.OrderTagRemoved)
            {
                _ticketService.UntagOrders(SelectedTicket, SelectedTicket.ExtractSelectedOrders(), obj.Value.OrderTagGroup,
                                           obj.Value.SelectedOrderTag);
                _ticketOrdersViewModel.RefreshSelectedOrders();
                RefreshVisuals();
            }
        }
示例#18
0
 private void OnSelectCalculationSelector(CalculationSelector calculationSelector)
 {
     foreach (var calculationType in calculationSelector.CalculationTypes)
     {
         var amount = calculationType.Amount;
         if (amount == 0)
         {
             amount = GetTenderedValue();
         }
         if (calculationType.CalculationMethod == 0 || calculationType.CalculationMethod == 1)
         {
             amount = amount / ExchangeRate;
         }
         SelectedTicket.AddCalculation(calculationType, amount);
     }
     UpdatePaymentAmount(0);
     OrderSelector.UpdateTicket(SelectedTicket);
     RefreshValues();
 }
示例#19
0
        private void TaxExemption()
        {
            string result =
                PosDialogWindow.PromptKeyboard(Types.Strings.EnterTaxExemptionId,
                                               SelectedTicket.TaxExemptId);

            if (result == null)
            {
                return;
            }
            if (String.IsNullOrEmpty(result))
            {
                result = null;
            }
            SelectedTicket.SetTaxExemptId(result);
            SelectedTicket.Update();
            // Update the tax on the payment control
            paymentControl.SelectedTicket = SelectedTicket;
        }
示例#20
0
 private bool CanShowOrderStatesExecute(OrderStateGroup arg)
 {
     if (!SelectedOrders.Any())
     {
         return(false);
     }
     if (!arg.DecreaseOrderInventory && !arg.IncreaseOrderInventory && SelectedOrders.Any(x => !x.Locked && !x.IsStateApplied(arg)))
     {
         return(false);
     }
     if (!arg.CalculateOrderPrice && !SelectedTicket.CanRemoveSelectedOrders(SelectedOrders))
     {
         return(false);
     }
     if (SelectedOrders.Any(x => !x.DecreaseInventory && !x.IsStateApplied(arg)))
     {
         return(false);
     }
     return(!arg.UnlocksOrder || !SelectedOrders.Any(x => x.Locked && x.OrderStateGroupId == arg.Id));
 }
 private void OnPropertyGroupSelected(MenuItemGroupedPropertyItemViewModel obj)
 {
     if (_removeModifier)
     {
         SelectedItem.RemoveProperty(obj.MenuItemPropertyGroup, obj.CurrentProperty);
         obj.UpdateNextProperty(null);
     }
     else
     {
         SelectedItem.ToggleProperty(obj.MenuItemPropertyGroup, obj.NextProperty);
         obj.UpdateNextProperty(obj.NextProperty);
     }
     SelectedTicket.RefreshVisuals();
     SelectedTicket.RecalculateTicket();
     if (_removeModifier)
     {
         OnRemoveModifier("");
     }
     RaisePropertyChanged("IsRemoveModifierButtonVisible");
 }
示例#22
0
 private bool CanMoveOrders(string arg)
 {
     if (SelectedTicket.IsLocked || SelectedTicket.IsClosed)
     {
         return(false);
     }
     if (!SelectedTicket.CanRemoveSelectedOrders(SelectedOrders))
     {
         return(false);
     }
     if (SelectedOrders.Any(x => x.Id == 0))
     {
         return(false);
     }
     if (SelectedOrders.Any(x => !x.Locked) && _userService.IsUserPermittedFor(PermissionNames.MoveUnlockedOrders))
     {
         return(true);
     }
     return(_userService.IsUserPermittedFor(PermissionNames.MoveOrders));
 }
示例#23
0
        public void RefreshValues()
        {
            if (SelectedTicket == null)
            {
                return;
            }

            _ticketService.RecalculateTicket(SelectedTicket);
            if (GetRemainingAmount() < 0)
            {
                foreach (var cSelector in _cacheService.GetCalculationSelectors().Where(x => !string.IsNullOrEmpty(x.ButtonHeader)))
                {
                    foreach (var ctemplate in cSelector.CalculationTypes)
                    {
                        while (SelectedTicket.Calculations.Any(x => x.CalculationTypeId == ctemplate.Id))
                        {
                            SelectedTicket.AddCalculation(ctemplate, 0);
                        }
                    }
                }

                _ticketService.RecalculateTicket(SelectedTicket);
                if (GetRemainingAmount() >= 0)
                {
                    InteractionService.UserIntraction.GiveFeedback(Resources.AllDiscountsRemoved);
                }
            }

            if (GetPaymentDueValue() <= 0)
            {
                UpdatePaymentAmount(SelectedTicket != null ? GetRemainingAmount() : 0);
            }

            Totals.ResetCache();

            RaisePropertyChanged(() => SelectedTicket);
            RaisePropertyChanged(() => Totals);
            RaisePropertyChanged(() => ReturningAmountVisibility);
            RaisePropertyChanged(() => ReturningAmount);
            TenderedAmount = "";
        }
示例#24
0
        public void UpdateCalculations()
        {
            _ticketService.RecalculateTicket(SelectedTicket);
            if (GetRemainingAmount() < 0)
            {
                foreach (var cSelector in _applicationState.GetCalculationSelectors().Where(x => !string.IsNullOrEmpty(x.ButtonHeader)))
                {
                    foreach (var ctemplate in cSelector.CalculationTypes)
                    {
                        while (SelectedTicket.Calculations.Any(x => x.CalculationTypeId == ctemplate.Id))
                        {
                            SelectedTicket.AddCalculation(ctemplate, 0);
                        }
                    }
                }

                _ticketService.RecalculateTicket(SelectedTicket);
                if (GetRemainingAmount() >= 0)
                {
                    InteractionService.UserIntraction.GiveFeedback(Resources.AllDiscountsRemoved);
                }
            }
        }
示例#25
0
        public void UpdateTicketPayment(PaymentType paymentType, ChangePaymentType changeTemplate, decimal paymentDueAmount, decimal paidAmount, decimal tenderedAmount)
        {
            var paymentAccount = paymentType.Account ?? _ticketService.GetAccountForPayment(SelectedTicket, paymentType);

            if (paymentDueAmount > SelectedTicket.GetRemainingAmount() && paidAmount > SelectedTicket.GetRemainingAmount())
            {
                var account = _accountBalances.GetActiveAccount();
                if (account != null)
                {
                    var ticketAmount   = SelectedTicket.GetRemainingAmount();
                    var accountAmount  = paidAmount - ticketAmount;
                    var accountBalance = _accountBalances.GetAccountBalance(account.Id);
                    if (accountAmount > accountBalance)
                    {
                        accountAmount = accountBalance;
                    }
                    if (ticketAmount > 0)
                    {
                        _ticketService.AddPayment(SelectedTicket, paymentType, paymentAccount, ticketAmount, tenderedAmount);
                    }
                    if (accountAmount > 0)
                    {
                        _ticketService.AddAccountTransaction(SelectedTicket, account, paymentAccount, accountAmount, ExchangeRate);
                    }
                }
                _accountBalances.Refresh();
            }
            else
            {
                _ticketService.AddPayment(SelectedTicket, paymentType, paymentAccount, paidAmount, tenderedAmount);
                if (paidAmount > paymentDueAmount && changeTemplate != null)
                {
                    _ticketService.AddChangePayment(SelectedTicket, changeTemplate, changeTemplate.Account,
                                                    paidAmount - paymentDueAmount);
                }
            }
        }
示例#26
0
        public void RefreshValues()
        {
            SelectedTicket.RecalculateTicket();
            if (SelectedTicket.Model.GetRemainingAmount() < 0)
            {
                SelectedTicket.Model.Discounts.Clear();
                SelectedTicket.RecalculateTicket();
                InteractionService.UserIntraction.GiveFeedback(Resources.AllDiscountsRemoved);
            }
            if (GetPaymentValue() <= 0)
            {
                PaymentAmount = AppServices.MainDataContext.SelectedTicket != null
                    ? AppServices.MainDataContext.SelectedTicket.GetRemainingAmount().ToString("#,#0.00")
                    : "";
            }
            SelectedTicket.Discounts.Clear();
            SelectedTicket.Discounts.AddRange(SelectedTicket.Model.Discounts.Select(x => new DiscountViewModel(x)));

            RaisePropertyChanged("SelectedTicket");
            RaisePropertyChanged("ReturningAmountVisibility");
            RaisePropertyChanged("PaymentsVisibility");
            RaisePropertyChanged("ReturningAmount");
            TenderedAmount = "";
        }
示例#27
0
 public decimal GetRemainingAmount()
 {
     return(SelectedTicket.GetRemainingAmount());
 }
示例#28
0
 public bool IsTaggedWith(string tagGroup)
 {
     return(!string.IsNullOrEmpty(SelectedTicket.GetTagValue(tagGroup)));
 }
示例#29
0
 private void OnEditTicketNote(string obj)
 {
     SelectedTicket.PublishEvent(EventTopicNames.EditTicketNote);
 }
示例#30
0
 private void OnMoveOrders(string obj)
 {
     SelectedTicket.PublishEvent(EventTopicNames.MoveSelectedOrders);
 }