Esempio n. 1
0
        private static void HandleEvents()
        {
            EventServiceFactory.EventService.GetEvent <GenericEvent <ActionData> >().Subscribe(x =>
            {
                if (x.Value.Action.ActionType == "UpdateApplicationSubTitle")
                {
                    var title = x.Value.GetAsString("Title");
                    PresentationServices.SubTitle.ApplicationTitle = title;
                    var fontSize = x.Value.GetAsInteger("FontSize");
                    if (fontSize > 0)
                    {
                        PresentationServices.SubTitle.ApplicationTitleFontSize = fontSize;
                    }
                    var fontColor = x.Value.GetAsString("Color");
                    if (!string.IsNullOrEmpty(fontColor))
                    {
                        PresentationServices.SubTitle.ApplicationTitleColor = fontColor;
                    }
                }
                if (x.Value.Action.ActionType == "RemoveLastModifier")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket == null)
                    {
                        return;
                    }
                    var ti = x.Value.GetDataValue <TicketItem>("TicketItem");
                    if (ti == null)
                    {
                        return;
                    }
                    if (ti.Properties.Count > 0)
                    {
                        var prop = ti.LastSelectedProperty ?? ti.Properties.Last();
                        prop.Quantity--;
                        if (prop.Quantity < 1)
                        {
                            ti.Properties.Remove(prop);
                        }
                    }
                    TicketViewModel.RecalculateTicket(ticket);
                }

                if (x.Value.Action.ActionType == "UpdateTicketItemPriceTag")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket == null)
                    {
                        return;
                    }

                    var ti = x.Value.GetDataValue <TicketItem>("TicketItem");
                    if (ti == null)
                    {
                        return;
                    }

                    var priceTag = x.Value.GetAsString("PriceTag");
                    var mi       = AppServices.DataAccessService.GetMenuItem(ti.MenuItemId);
                    if (mi == null)
                    {
                        return;
                    }

                    var portion = mi.Portions.SingleOrDefault(y => y.Name == ti.PortionName);
                    if (portion == null)
                    {
                        return;
                    }

                    ti.UpdatePortion(portion, priceTag, null);

                    TicketViewModel.RecalculateTicket(ticket);
                    EventServiceFactory.EventService.PublishEvent(EventTopicNames.RefreshSelectedTicket);
                }

                if (x.Value.Action.ActionType == "UpdateTicketItemTag")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket == null)
                    {
                        return;
                    }

                    var ti = x.Value.GetDataValue <TicketItem>("TicketItem");
                    if (ti == null)
                    {
                        return;
                    }

                    var tag = x.Value.GetAsString("Tag");
                    ti.Tag  = tag;
                    decimal val;
                    decimal.TryParse(tag, out val);
                }

                if (x.Value.Action.ActionType == "UpdateLastTicketItemPriceTag")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket == null)
                    {
                        return;
                    }

                    var ti = ticket.TicketItems.LastOrDefault();
                    if (ti == null)
                    {
                        return;
                    }

                    var priceTag = x.Value.GetAsString("PriceTag");
                    var mi       = AppServices.DataAccessService.GetMenuItem(ti.MenuItemId);
                    if (mi == null)
                    {
                        return;
                    }

                    var portion = mi.Portions.SingleOrDefault(y => y.Name == ti.PortionName);
                    if (portion == null)
                    {
                        return;
                    }

                    ti.UpdatePortion(portion, priceTag, null);

                    TicketViewModel.RecalculateTicket(ticket);
                    EventServiceFactory.EventService.PublishEvent(EventTopicNames.RefreshSelectedTicket);
                }

                if (x.Value.Action.ActionType == "GiftLastTicketItem")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket != null)
                    {
                        var ti = ticket.TicketItems.LastOrDefault();
                        if (ti != null)
                        {
                            decimal quantity;
                            decimal.TryParse(x.Value.Action.GetParameter("Quantity"), out quantity);
                            if (quantity > 0 && ti.Quantity > quantity)
                            {
                                ti.UpdateSelectedQuantity(quantity);
                                ti = ticket.ExtractSelectedTicketItems(new List <TicketItem> {
                                    ti
                                }).FirstOrDefault();
                                if (ti == null)
                                {
                                    return;
                                }
                                AppServices.MainDataContext.AddItemToSelectedTicket(ti);
                            }
                            var reasonId   = 0;
                            var giftReason = x.Value.Action.GetParameter("GiftReason");
                            if (!string.IsNullOrEmpty(giftReason))
                            {
                                var reason = Dao.SingleWithCache <Reason>(u => u.Name == giftReason);
                                if (reason != null)
                                {
                                    reasonId = reason.Id;
                                }
                            }
                            ticket.GiftItem(ti, reasonId, AppServices.CurrentLoggedInUser.Id);
                            TicketViewModel.RecalculateTicket(ticket);
                            EventServiceFactory.EventService.PublishEvent(EventTopicNames.RefreshSelectedTicket);
                        }
                    }
                }

                if (x.Value.Action.ActionType == "UpdateTicketAccount")
                {
                    Expression <Func <Customer, bool> > qFilter = null;

                    var phoneNumber = x.Value.GetAsString("AccountPhone");
                    var accountName = x.Value.GetAsString("AccountName");
                    var note        = x.Value.GetAsString("Note");

                    if (!string.IsNullOrEmpty(phoneNumber))
                    {
                        qFilter = y => y.PhoneNumber == phoneNumber;
                    }

                    if (!string.IsNullOrEmpty(accountName))
                    {
                        if (qFilter == null)
                        {
                            qFilter = y => y.Name == accountName;
                        }
                        else
                        {
                            qFilter = qFilter.And(y => y.Name == accountName);
                        }
                    }

                    if (!string.IsNullOrEmpty(note))
                    {
                        if (qFilter == null)
                        {
                            qFilter = y => y.Note == note;
                        }
                        else
                        {
                            qFilter = qFilter.And(y => y.Note == note);
                        }
                    }

                    if (qFilter != null)
                    {
                        var customer = Dao.Query(qFilter).FirstOrDefault();
                        if (customer != null)
                        {
                            AppServices.MainDataContext.AssignCustomerToSelectedTicket(customer);
                        }
                    }
                    else
                    {
                        AppServices.MainDataContext.AssignCustomerToSelectedTicket(Customer.Null);
                    }
                }

                if (x.Value.Action.ActionType == "UpdateProgramSetting")
                {
                    SettingAccessor.ResetCache();

                    var settingName = x.Value.GetAsString("SettingName");
                    var updateType  = x.Value.GetAsString("UpdateType");
                    if (!string.IsNullOrEmpty(settingName))
                    {
                        var isLocal = x.Value.GetAsBoolean("IsLocal");
                        var setting = isLocal
                            ? AppServices.SettingService.ReadLocalSetting(settingName)
                            : AppServices.SettingService.ReadGlobalSetting(settingName);

                        if (updateType == Resources.Increase)
                        {
                            var settingValue = x.Value.GetAsInteger("SettingValue");
                            if (string.IsNullOrEmpty(setting.StringValue))
                            {
                                setting.IntegerValue = settingValue;
                            }
                            else
                            {
                                setting.IntegerValue = setting.IntegerValue + settingValue;
                            }
                        }
                        else if (updateType == Resources.Decrease)
                        {
                            var settingValue = x.Value.GetAsInteger("SettingValue");
                            if (string.IsNullOrEmpty(setting.StringValue))
                            {
                                setting.IntegerValue = settingValue;
                            }
                            else
                            {
                                setting.IntegerValue = setting.IntegerValue - settingValue;
                            }
                        }
                        else if (updateType == "Multiply")
                        {
                            if (string.IsNullOrEmpty(setting.StringValue))
                            {
                                setting.DecimalValue = 0;
                            }
                            else
                            {
                                setting.DecimalValue = setting.DecimalValue * x.Value.GetAsDecimal("SettingValue");
                            }
                        }
                        else if (updateType == "Toggle")
                        {
                            var settingValue = x.Value.GetAsString("SettingValue");
                            var parts        = settingValue.Split(',');
                            if (string.IsNullOrEmpty(setting.StringValue))
                            {
                                setting.StringValue = parts[0];
                            }
                            else
                            {
                                for (var i = 0; i < parts.Length; i++)
                                {
                                    if (parts[i] == setting.StringValue)
                                    {
                                        setting.StringValue = (i + 1) < parts.Length ? parts[i + 1] : parts[0];
                                        break;
                                    }
                                }
                            }
                        }
                        else
                        {
                            var settingValue    = x.Value.GetAsString("SettingValue");
                            setting.StringValue = settingValue;
                        }
                        if (!isLocal)
                        {
                            AppServices.SettingService.SaveChanges();
                        }
                    }
                }

                if (x.Value.Action.ActionType == "RefreshCache")
                {
                    MethodQueue.Queue("ResetCache", ResetCache);
                }

                if (x.Value.Action.ActionType == "SendMessage")
                {
                    AppServices.MessagingService.SendMessage("ActionMessage", x.Value.GetAsString("Command"));
                }

                if (x.Value.Action.ActionType == "SendEmail")
                {
                    EMailService.SendEMailAsync(x.Value.GetAsString("SMTPServer"),
                                                x.Value.GetAsString("SMTPUser"),
                                                x.Value.GetAsString("SMTPPassword"),
                                                x.Value.GetAsInteger("SMTPPort"),
                                                x.Value.GetAsString("ToEMailAddress"),
                                                x.Value.GetAsString("FromEMailAddress"),
                                                x.Value.GetAsString("Subject"),
                                                x.Value.GetAsString("EMailMessage"),
                                                x.Value.GetAsString("FileName"),
                                                x.Value.GetAsBoolean("DeleteFile"),
                                                x.Value.GetAsBoolean("BypassSslErrors"));
                }

                if (x.Value.Action.ActionType == "ExecuteTicketEvent")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket != null)
                    {
                        var operationName = x.Value.GetAsString("TicketOperation");
                        if (operationName == Resources.Refresh)
                        {
                            EventServiceFactory.EventService.PublishEvent(EventTopicNames.DisplayTicketView);
                        }
                        if (operationName == Resources.Close)
                        {
                            ticket.PublishEvent(EventTopicNames.PaymentSubmitted);
                        }
                    }
                }


                if (x.Value.Action.ActionType == "UpdateTicketVat")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket != null)
                    {
                        var vatTemplateName = x.Value.GetAsString("VatTemplate");
                        var vatTemplate     = AppServices.MainDataContext.VatTemplates.FirstOrDefault(y => y.Name == vatTemplateName);
                        if (vatTemplate != null)
                        {
                            ticket.UpdateVat(vatTemplate);
                            TicketViewModel.RecalculateTicket(ticket);
                            EventServiceFactory.EventService.PublishEvent(EventTopicNames.RefreshSelectedTicket);
                        }
                    }
                }

                if (x.Value.Action.ActionType == "UpdateTicketTaxService")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket != null)
                    {
                        var taxServiceTemplateName = x.Value.GetAsString("TaxServiceTemplate");
                        var taxServiceTemplate     =
                            AppServices.MainDataContext.TaxServiceTemplates.FirstOrDefault(
                                y => y.Name == taxServiceTemplateName);
                        if (taxServiceTemplate != null)
                        {
                            var amount = x.Value.GetAsDecimal("Amount");
                            ticket.AddTaxService(taxServiceTemplate.Id, taxServiceTemplate.CalculationMethod, amount);
                            TicketViewModel.RecalculateTicket(ticket);
                        }
                    }
                }

                if (x.Value.Action.ActionType == "RegenerateTicketVat")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket != null)
                    {
                        TicketViewModel.RegenerateVatRates(ticket);
                        TicketViewModel.RecalculateTicket(ticket);
                        EventServiceFactory.EventService.PublishEvent(EventTopicNames.RefreshSelectedTicket);
                    }
                }

                if (x.Value.Action.ActionType == "AddTicketDiscount")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket != null)
                    {
                        var percentValue = x.Value.GetAsDecimal("DiscountPercentage");
                        ticket.AddTicketDiscount(DiscountType.Percent, percentValue, AppServices.CurrentLoggedInUser.Id);
                        TicketViewModel.RecalculateTicket(ticket);
                    }
                }

                if (x.Value.Action.ActionType == "AddTicketItem")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");

                    if (ticket != null)
                    {
                        var menuItemName = x.Value.GetAsString("MenuItemName");
                        var menuItem     = AppServices.DataAccessService.GetMenuItemByName(menuItemName);
                        var portionName  = x.Value.GetAsString("PortionName");
                        var quantity     = x.Value.GetAsDecimal("Quantity");
                        var gifted       = x.Value.GetAsBoolean("Gift");
                        var giftReason   = x.Value.GetAsString("GiftReason");
                        var tag          = x.Value.GetAsString("Tag");

                        var departmentId = AppServices.CurrentTerminal.DepartmentId > 0
                               ? AppServices.MainDataContext.SelectedDepartment.Id
                               : ticket.DepartmentId;

                        var ti = ticket.AddTicketItem(AppServices.CurrentLoggedInUser.Id,
                                                      departmentId, menuItem, portionName,
                                                      AppServices.MainDataContext.SelectedDepartment.PriceTag, "");

                        ti.Quantity = quantity;
                        ti.Gifted   = gifted;
                        if (gifted && !string.IsNullOrEmpty(giftReason))
                        {
                            var reason = Dao.SingleWithCache <Reason>(u => u.Name == giftReason);
                            if (reason != null)
                            {
                                ti.ReasonId = reason.Id;
                            }
                        }
                        else
                        {
                            ti.ReasonId = 0;
                        }
                        ti.Tag = tag;

                        TicketViewModel.RecalculateTicket(ticket);
                        EventServiceFactory.EventService.PublishEvent(EventTopicNames.RefreshSelectedTicket);
                    }
                }

                if (x.Value.Action.ActionType == "VoidTicketItems")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket != null)
                    {
                        var menuItemName = x.Value.GetAsString("MenuItemName");
                        var tag          = x.Value.GetAsString("Tag");
                        if (!string.IsNullOrEmpty(menuItemName) && !string.IsNullOrEmpty(tag))
                        {
                            var lines = ticket.TicketItems.Where(y => !y.Voided &&
                                                                 (string.IsNullOrEmpty(menuItemName) || y.MenuItemName.Contains(menuItemName)) &&
                                                                 (y.Tag.Contains(tag) || string.IsNullOrEmpty(tag))).ToList();
                            lines.ForEach(y => ticket.VoidItem(y, 0, AppServices.CurrentLoggedInUser.Id));
                            TicketViewModel.RecalculateTicket(ticket);
                            EventServiceFactory.EventService.PublishEvent(EventTopicNames.RefreshSelectedTicket);
                        }
                    }
                }

                if (x.Value.Action.ActionType == "UpdateTicketTag")
                {
                    var ticket = x.Value.GetDataValue <Ticket>("Ticket");
                    if (ticket != null)
                    {
                        var tagName  = x.Value.GetAsString("TagName");
                        var tagValue = x.Value.GetAsString("TagValue");
                        if (tagValue.Contains(","))
                        {
                            var ctag = ticket.GetTagValue(tagName);
                            if (!string.IsNullOrEmpty(ctag))
                            {
                                var nextTag = tagValue.Split(',').SkipWhile(y => y != ctag).Skip(1).FirstOrDefault();
                                if (string.IsNullOrEmpty(nextTag))
                                {
                                    nextTag = tagValue.Split(',')[0];
                                }
                                tagValue = nextTag;
                            }
                        }
                        ticket.SetTagValue(tagName, tagValue);
                        var tagData = new TicketTagData {
                            TagName = tagName, TagValue = tagValue
                        };
                        tagData.PublishEvent(EventTopicNames.TagSelectedForSelectedTicket);
                    }
                }

                if (x.Value.Action.ActionType == "UpdatePriceTag")
                {
                    using (var workspace = WorkspaceFactory.Create())
                    {
                        var priceTag       = x.Value.GetAsString("PriceTag");
                        var departmentName = x.Value.GetAsString("DepartmentName");
                        var department     = workspace.Single <Department>(y => y.Name == departmentName);
                        if (department != null)
                        {
                            department.PriceTag = priceTag;
                            workspace.CommitChanges();
                            MethodQueue.Queue("ResetCache", ResetCache);
                        }
                    }
                }

                if (x.Value.Action.ActionType == "ExecutePrintJob")
                {
                    var ticket        = x.Value.GetDataValue <Ticket>("Ticket");
                    var pjName        = x.Value.GetAsString("PrintJobName");
                    var ticketItemTag = x.Value.GetAsString("TicketItemTag");

                    if (!string.IsNullOrEmpty(pjName))
                    {
                        var j = AppServices.CurrentTerminal.PrintJobs.SingleOrDefault(y => y.Name == pjName);

                        if (j != null)
                        {
                            if (ticket != null)
                            {
                                AppServices.MainDataContext.UpdateTicketNumber(ticket);
                                if (j.LocksTicket)
                                {
                                    ticket.RequestLock();
                                }

                                var clonedTicket = ObjectCloner.Clone(ticket);
                                clonedTicket.CopyPaidItemsCache(ticket);
                                if (!string.IsNullOrEmpty(ticketItemTag))
                                {
                                    clonedTicket.TicketItems =
                                        clonedTicket.TicketItems.Where(y => !string.IsNullOrEmpty(y.Tag) &&
                                                                       y.Tag.ToLower().Contains(ticketItemTag.Trim().ToLower())).ToList();
                                }
                                AppServices.PrintService.ManualPrintTicket(clonedTicket, j);
                            }
                            else
                            {
                                AppServices.PrintService.ExecutePrintJob(j);
                            }
                        }
                    }
                }
            });
        }
Esempio n. 2
0
 public TicketTagButton(TicketTagGroup ticketTagGroup, TicketViewModel ticket)
 {
     Model = ticketTagGroup;
     Caption = Model.Name;
     _ticket = ticket;
 }
Esempio n. 3
0
 private void SaveTicketIfNew()
 {
     if ((SelectedTicket.Id == 0 || SelectedTicket.Items.Any(x => x.Model.Id == 0)) && SelectedTicket.Items.Count > 0)
     {
         var result = AppServices.MainDataContext.CloseTicket();
         AppServices.MainDataContext.OpenTicket(result.TicketId);
         _selectedTicket = null;
     }
 }
Esempio n. 4
0
        public TicketListViewModel()
        {
            _timer = new Timer(OnTimer, null, Timeout.Infinite, 1000);
            _selectedTicketItems = new ObservableCollection<TicketItemViewModel>();

            PrintJobCommand = new CaptionCommand<PrintJob>(Resources.Print, OnPrintJobExecute, CanExecutePrintJob);

            AddMenuItemCommand = new DelegateCommand<ScreenMenuItemData>(OnAddMenuItemCommandExecute);
            CloseTicketCommand = new CaptionCommand<string>(Resources.CloseTicket_r, OnCloseTicketExecute, CanCloseTicket);
            OpenTicketCommand = new DelegateCommand<int?>(OnOpenTicketExecute);
            MakePaymentCommand = new CaptionCommand<string>(Resources.GetPayment, OnMakePaymentExecute, CanMakePayment);
            MakeCashPaymentCommand = new CaptionCommand<string>(Resources.CashPayment_r, OnMakeCashPaymentExecute, CanMakeFastPayment);
            MakeCreditCardPaymentCommand = new CaptionCommand<string>(Resources.CreditCard_r, OnMakeCreditCardPaymentExecute, CanMakeFastPayment);
            MakeTicketPaymentCommand = new CaptionCommand<string>(Resources.Voucher_r, OnMakeTicketPaymentExecute, CanMakeFastPayment);
            SelectTableCommand = new CaptionCommand<string>(Resources.SelectTable, OnSelectTableExecute, CanSelectTable);
            SelectCustomerCommand = new CaptionCommand<string>(Resources.SelectCustomer, OnSelectCustomerExecute, CanSelectCustomer);
            ShowAllOpenTickets = new CaptionCommand<string>(Resources.AllTickets_r, OnShowAllOpenTickets);
            NewTicketCommand = new CaptionCommand<string>(Resources.Ticket, OnCreateNewTicket,CanCreateNewTicket);
            FilterOpenTicketsCommand = new DelegateCommand<TicketTagFilterViewModel>(OnFilterOpenTicketsExecute);

            IncQuantityCommand = new CaptionCommand<string>("+", OnIncQuantityCommand, CanIncQuantity);
            DecQuantityCommand = new CaptionCommand<string>("-", OnDecQuantityCommand, CanDecQuantity);
            IncSelectionQuantityCommand = new CaptionCommand<string>("(+)", OnIncSelectionQuantityCommand, CanIncSelectionQuantity);
            DecSelectionQuantityCommand = new CaptionCommand<string>("(-)", OnDecSelectionQuantityCommand, CanDecSelectionQuantity);
            ShowVoidReasonsCommand = new CaptionCommand<string>(Resources.Void, OnShowVoidReasonsExecuted, CanVoidSelectedItems);
            ShowGiftReasonsCommand = new CaptionCommand<string>(Resources.Gift, OnShowGiftReasonsExecuted, CanGiftSelectedItems);
            ShowTicketTagsCommand = new CaptionCommand<TicketTagGroup>(Resources.Tag, OnShowTicketsTagExecute, CanExecuteShowTicketTags);
            CancelItemCommand = new CaptionCommand<string>(Resources.Cancel, OnCancelItemCommand, CanCancelSelectedItems);
            MoveTicketItemsCommand = new CaptionCommand<string>(Resources.MoveTicketLine, OnMoveTicketItems, CanMoveTicketItems);
            ShowExtraPropertyEditorCommand = new CaptionCommand<string>(Resources.ExtraModifier, OnShowExtraProperty, CanShowExtraProperty);
            EditTicketNoteCommand = new CaptionCommand<string>(Resources.TicketNote, OnEditTicketNote, CanEditTicketNote);
            RemoveTicketLockCommand = new CaptionCommand<string>(Resources.ReleaseLock, OnRemoveTicketLock, CanRemoveTicketLock);
            ChangePriceCommand = new CaptionCommand<string>(Resources.ChangePrice, OnChangePrice, CanChangePrice);

            EventServiceFactory.EventService.GetEvent<GenericEvent<LocationData>>().Subscribe(
                x =>
                {
                    if (x.Topic == EventTopicNames.LocationSelectedForTicket)
                    {
                        if (SelectedTicket != null)
                        {
                            var oldLocationName = SelectedTicket.Location;
                            var ticketsMerged = x.Value.TicketId > 0 && x.Value.TicketId != SelectedTicket.Id;
                        //    TicketViewModel.AssignTableToSelectedTicket(x.Value.LocationId);

                            CloseTicket();

                            if (!AppServices.CurrentTerminal.AutoLogout)
                                EventServiceFactory.EventService.PublishEvent(EventTopicNames.ActivateTicketView);

                            if (!string.IsNullOrEmpty(oldLocationName) || ticketsMerged)
                                if (ticketsMerged && !string.IsNullOrEmpty(oldLocationName))
                                    InteractionService.UserIntraction.GiveFeedback(string.Format(Resources.TablesMerged_f, oldLocationName, x.Value.Caption));
                                else if (ticketsMerged)
                                    InteractionService.UserIntraction.GiveFeedback(string.Format(Resources.TicketMergedToTable_f, x.Value.Caption));
                                else if (oldLocationName != x.Value.LocationName)
                                    InteractionService.UserIntraction.GiveFeedback(string.Format(Resources.TicketMovedToTable_f, oldLocationName, x.Value.Caption));
                        }
                        else
                        {
                            if (x.Value.TicketId == 0)
                            {
                                TicketViewModel.CreateNewTicket();
                      //          TicketViewModel.AssignTableToSelectedTicket(x.Value.LocationId);
                            }
                            else
                            {
                                AppServices.MainDataContext.OpenTicket(x.Value.TicketId);

                            }
                            EventServiceFactory.EventService.PublishEvent(EventTopicNames.DisplayTicketView);
                        }
                    }

                }
                );

            EventServiceFactory.EventService.GetEvent<GenericEvent<WorkPeriod>>().Subscribe(
                x =>
                {
                    if (x.Topic == EventTopicNames.WorkPeriodStatusChanged)
                    {
                        RaisePropertyChanged("CanChangeDepartment");
                    }
                });

            EventServiceFactory.EventService.GetEvent<GenericEvent<TicketItemViewModel>>().Subscribe(
                x =>
                {
                    if (SelectedTicket != null && x.Topic == EventTopicNames.SelectedItemsChanged)
                    {
                        LastSelectedTicketItem = x.Value.Selected ? x.Value : null;
                        foreach (var item in SelectedTicket.SelectedItems)
                        { item.IsLastSelected = item == LastSelectedTicketItem; }

                        SelectedTicket.PublishEvent(EventTopicNames.SelectedItemsChanged);
                    }
                });

            EventServiceFactory.EventService.GetEvent<GenericEvent<TicketTagData>>().Subscribe(
                x =>
                {
                    if (x.Topic == EventTopicNames.TagSelectedForSelectedTicket)
                    {
                        if (x.Value.Action == 1 && CanCloseTicket(""))
                            CloseTicketCommand.Execute("");
                        if (x.Value.Action == 2 && CanMakePayment(""))
                            MakePaymentCommand.Execute("");
                        else
                        {
                            RefreshVisuals();
                        }
                    }
                });

            EventServiceFactory.EventService.GetEvent<GenericEvent<TicketViewModel>>().Subscribe(
                x =>
                {
                    if (x.Topic == EventTopicNames.SelectedItemsChanged)
                    {
                        _selectedTicketItems.Clear();
                        _selectedTicketItems.AddRange(x.Value.SelectedItems);
                        if (x.Value.SelectedItems.Count == 0) LastSelectedTicketItem = null;
                        RaisePropertyChanged("IsItemsSelected");
                        RaisePropertyChanged("IsNothingSelected");
                        RaisePropertyChanged("IsNothingSelectedAndTicketLocked");
                        RaisePropertyChanged("IsCustomerButtonVisible");
                        RaisePropertyChanged("IsItemsSelectedAndUnlocked");
                        RaisePropertyChanged("IsItemsSelectedAndLocked");
                        RaisePropertyChanged("IsTicketSelected");
                    }
                });

            EventServiceFactory.EventService.GetEvent<GenericEvent<Customer>>().Subscribe(
                x =>
                {
                    if (x.Topic == EventTopicNames.CustomerSelectedForTicket)
                    {
                        if (AppServices.MainDataContext.SelectedTicket == null)
                            TicketViewModel.CreateNewTicket();

                        AppServices.MainDataContext.AssignCustomerToSelectedTicket(x.Value);

                        var lastOrder = Dao.Last<Ticket>(y => y.CustomerId == x.Value.Id);

                        var lastOderDayCount = lastOrder != null
                            ? Convert.ToInt32(new TimeSpan(DateTime.Now.Ticks - lastOrder.Date.Ticks).TotalDays) : -1;
                        var lastOderTotal = lastOrder != null
                            ? lastOrder.TotalAmount : -1;

                        RuleExecutor.NotifyEvent(RuleEventNames.CustomerSelectedForTicket,
                            new
                            {
                                Ticket = AppServices.MainDataContext.SelectedTicket,
                                CustomerId = x.Value.Id,
                                CustomerName = x.Value.Name,
                                x.Value.PhoneNumber,
                                CustomerNote = x.Value.Note,
                               // CustomerGroupCode = x.Value.GroupCode,
                                LastOrderTotal = lastOderTotal,
                                LastOrderDayCount = lastOderDayCount
                            });

                        //if (!string.IsNullOrEmpty(SelectedTicket.CustomerName) && SelectedTicket.Items.Count > 0)
                         //   CloseTicket();
                        //else
                        {
                            RefreshVisuals();
                            SelectedTicketView = SingleTicketView;
                        }
                    }

                    if (x.Topic == EventTopicNames.PaymentRequestedForTicket)
                    {
                        AppServices.MainDataContext.AssignCustomerToSelectedTicket(x.Value);
                        if (!string.IsNullOrEmpty(SelectedTicket.CustomerName) && SelectedTicket.Items.Count > 0)
                            MakePaymentCommand.Execute("");
                        else
                        {
                            RefreshVisuals();
                            SelectedTicketView = SingleTicketView;
                        }

                    }
                });

            EventServiceFactory.EventService.GetEvent<GenericEvent<Ticket>>().Subscribe(
                x =>
                {
                    _selectedTicket = null;

                    if (x.Topic == EventTopicNames.PaymentSubmitted)
                    {
                        CloseTicket();
                    }
                });

            EventServiceFactory.EventService.GetEvent<GenericEvent<EventAggregator>>().Subscribe(
                 x =>
                 {
                     if (SelectedDepartment == null)
                         UpdateSelectedDepartment(AppServices.CurrentLoggedInUser.UserRole.DepartmentId);

                     if (x.Topic == EventTopicNames.ActivateTicketView)
                     {
                         UpdateSelectedTicketView();
                         DisplayTickets();
                     }

                     if (x.Topic == EventTopicNames.DisplayTicketView)
                     {
                         UpdateSelectedTicketView();
                         RefreshVisuals();
                     }

                     if (x.Topic == EventTopicNames.RefreshSelectedTicket)
                     {
                         _selectedTicket = null;
                         RefreshVisuals();
                         SelectedTicketView = SingleTicketView;
                     }
                 });

            EventServiceFactory.EventService.GetEvent<GenericEvent<Message>>().Subscribe(
                x =>
                {
                    if (AppServices.ActiveAppScreen == AppScreens.TicketList
                        && x.Topic == EventTopicNames.MessageReceivedEvent
                        && x.Value.Command == Messages.TicketRefreshMessage)
                    {
                        RefreshOpenTickets();
                        RefreshVisuals();
                    }
                });

            EventServiceFactory.EventService.GetEvent<GenericEvent<PopupData>>().Subscribe(
                x =>
                {
                    if (x.Value.EventMessage == "SelectCustomer")
                    {
                        var dep = AppServices.MainDataContext.Departments.FirstOrDefault(y => y.IsTakeAway);
                        if (dep != null)
                        {
                            UpdateSelectedDepartment(dep.Id);
                            SelectedTicketView = OpenTicketListView;
                        }
                        if (SelectedDepartment == null)
                            SelectedDepartment = AppServices.MainDataContext.Departments.FirstOrDefault();
                        RefreshVisuals();
                    }
                });

            EventServiceFactory.EventService.GetEvent<GenericEvent<CreditCardProcessingResult>>().Subscribe(OnProcessCreditCard);
        }
Esempio n. 5
0
        private void OnCloseTicketExecute(string obj)
        {
            if (SelectedTicketItem != null && !SelectedTicketItem.IsLocked)
            {
                var unselectedItem = AppServices.DataAccessService.GetUnselectedItem(SelectedTicketItem.Model);
                if (unselectedItem != null)
                {
                    InteractionService.UserIntraction.GiveFeedback(string.Format(Resources.SelectionRequired_f, unselectedItem.Name));
                    return;
                }
            }

            if (SelectedTicket.Items.Count > 0 && SelectedTicket.Model.GetRemainingAmount() == 0)
            {
                var message = SelectedTicket.GetPrintError();
                if (!string.IsNullOrEmpty(message))
                {
                    SelectedTicket.ClearSelectedItems();
                    RefreshVisuals();
                    InteractionService.UserIntraction.GiveFeedback(message);
                    return;
                }
            }

            SelectedTicket.ClearSelectedItems();
            var result = AppServices.MainDataContext.CloseTicket();
            if (!string.IsNullOrEmpty(result.ErrorMessage))
            {
                InteractionService.UserIntraction.GiveFeedback(result.ErrorMessage);
            }
            else
            {
                RuleExecutor.NotifyEvent(RuleEventNames.TicketClosed, new { Ticket = _selectedTicket.Model });
            }

            _selectedTicket = null;
            _selectedTicketItems.Clear();

            if (AppServices.CurrentTerminal.AutoLogout)
            {
                AppServices.LogoutUser(false);
                AppServices.CurrentLoggedInUser.PublishEvent(EventTopicNames.UserLoggedOut);
            }
            else
            {
                DisplayTickets();
            }
            AppServices.MessagingService.SendMessage(Messages.TicketRefreshMessage, result.TicketId.ToString());
        }
Esempio n. 6
0
 private void OnOpenTicketExecute(int? id)
 {
     _selectedTicket = null;
     _selectedTicketItems.Clear();
     AppServices.MainDataContext.OpenTicket(id.GetValueOrDefault(0));
     SelectedTicketView = SingleTicketView;
     RefreshVisuals();
     SelectedTicket.ClearSelectedItems();
     SelectedTicket.PublishEvent(EventTopicNames.SelectedTicketChanged);
 }
Esempio n. 7
0
 public void Prepare()
 {
     if (SelectedTicket == null)
     {
         SelectedTicket = new TicketViewModel(AppServices.MainDataContext.SelectedTicket, AppServices.MainDataContext.SelectedDepartment.IsFastFood);
         TicketRemainingValue = AppServices.MainDataContext.SelectedTicket.GetRemainingAmount();
         PrepareMergedItems();
         RefreshValues();
         LastTenderedAmount = PaymentAmount;
         CreateButtons();
         OnSetValue("");
         if (CreditCardProcessingService.ForcePayment(SelectedTicket.Id))
         {
             TenderedAmount = TicketRemainingValue.ToString("#,#0.00");
             SubmitPayment(PaymentType.CreditCard);
         }
     }
 }
 private void SetSelectedTicket(TicketViewModel ticketViewModel)
 {
     SelectedTicket = ticketViewModel;
     SelectedItem = SelectedTicket.SelectedItems.Count() == 1 ? SelectedTicket.SelectedItems[0] : null;
     RaisePropertyChanged("SelectedTicket");
     RaisePropertyChanged("SelectedItem");
     RaisePropertyChanged("IsTicketNoteEditorVisible");
     RaisePropertyChanged("IsExtraPropertyEditorVisible");
     RaisePropertyChanged("IsFreeTagEditorVisible");
     RaisePropertyChanged("IsPortionsVisible");
     RaisePropertyChanged("IsRemoveModifierButtonVisible");
 }
 private void ResetValues(TicketViewModel selectedTicket)
 {
     SelectedTicket = null;
     SelectedItem = null;
     SelectedItemPortions.Clear();
     SelectedItemPropertyGroups.Clear();
     SelectedItemGroupedPropertyItems.Clear();
     Reasons.Clear();
     TicketTags.Clear();
     _showExtraPropertyEditor = false;
     _showTicketNoteEditor = false;
     _showFreeTagEditor = false;
     _removeModifier = false;
     SetSelectedTicket(selectedTicket);
 }
        public bool ShouldDisplay(TicketViewModel value)
        {
            ResetValues(value);

            if (SelectedItem == null || SelectedItem.Model.Locked) return false;

            if (SelectedTicket != null && !SelectedItem.Model.Voided && !SelectedItem.Model.Locked)
            {
                var id = SelectedItem.Model.MenuItemId;

                var mi = AppServices.DataAccessService.GetMenuItem(id);
                if (SelectedItem.Model.PortionCount > 1) SelectedItemPortions.AddRange(mi.Portions);
                SelectedItemPropertyGroups.AddRange(mi.PropertyGroups.Where(x => string.IsNullOrEmpty(x.GroupTag)));

                SelectedItemGroupedPropertyItems.AddRange(mi.PropertyGroups.Where(x => !string.IsNullOrEmpty(x.GroupTag) &&
                     x.Properties.Count > 1)
                    .GroupBy(x => x.GroupTag)
                    .Select(x => new MenuItemGroupedPropertyViewModel(SelectedItem, x)));
                RaisePropertyChanged("IsPortionsVisible");
            }
            return SelectedItemPortions.Count > 1 || SelectedItemPropertyGroups.Count > 0 || SelectedItemGroupedPropertyItems.Count > 0;
        }
Esempio n. 11
0
 public TicketTagButton(TicketTagGroup ticketTagGroup, TicketViewModel ticket)
 {
     Model   = ticketTagGroup;
     Caption = Model.Name;
     _ticket = ticket;
 }