private void DisplayTickets() { if (ShowTickets && Customer.Order.Seats.Count < 10) { Application.Current.Dispatcher.Invoke((Action) delegate { foreach (Seat seat in Customer.Order.Seats) { MemoryStream ms = GetTicketImage(Customer.Order.Id, seat.Id, 1); if (ms != null) { Spot spot = SelectedSpots.FirstOrDefault(x => x.Id == seat.Id); if (spot != null) { BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.StreamSource = ms; bi.EndInit(); spot.TicketImage = bi; } } } }); } }
/// <summary> /// Handles PurchaseOrder button on OrderWindow /// </summary> private void OnPurchaseOrder() { PaymentTypeBox ptb = new PaymentTypeBox(); bool? result = ptb.ShowDialog(); if (result ?? false) { BlankStatus = String.Empty; Customer.Order.Seats = new List <Seat>(); foreach (Ticket t in Tickets) { Seat seat = new Seat() { Id = t.Id }; Customer.Order.Seats.Add(seat); } Customer.Order.PaymentType = (PaymentType)Enum.Parse(typeof(PaymentType), SelectedPaymentType.Key.ToString(), true); Customer.Order = Customer.Order = Access.ConfirmPayment(Customer.Order); ReloadOrder(); if (Customer.Order != null && Customer.Order.Status == ItemStatus.Sold) { if (ShowTickets && Customer.Order.Seats.Count < 10) { Application.Current.Dispatcher.Invoke((Action) delegate { foreach (Seat seat in Customer.Order.Seats) { MemoryStream ms = GetTicketImage(Customer.Order.Id, seat.Id, 1); if (ms != null) { Spot spot = SelectedSpots.FirstOrDefault(x => x.Id == seat.Id); if (spot != null) { BitmapImage bi = new BitmapImage(); bi.BeginInit(); bi.StreamSource = ms; bi.EndInit(); spot.TicketImage = bi; } } } }); } } else { Customer.Order = new Order(); // Just not to be null OperationResult = String.Format("Произошла ошибка. Заказ № {0} не оплачен", Customer.Order.Id); } } }
/// <summary> /// Keeps SelectedSpots updated /// </summary> private void PersistSelectedSpots(List <Seat> seats) { foreach (Seat seat in seats) { Spot spot = SelectedSpots.FirstOrDefault(x => x.Id == seat.Id); if (spot != null) { spot.Status = seat.Status; spot.Result = seat.Result; spot.ReserveDate = seat.ReserveDate; } } }
private void OnClearSelection() { SelectedSpots.Clear(); foreach (Spot spot in Spots) { spot.IsSelected = false; spot.Height = 20; spot.Width = 20; //if (spot.IsSelected) //{ // spot.IsSelected = false; // spot.Height = 20; // spot.Width = 20; //} } }
private void OnRemoveSpot() { if (SelectedSpot != null) { Spot spot = SelectedSpot; SelectedSpots.Remove(spot); foreach (Spot s in Spots) { if (s.Id == spot.Id) { s.IsSelected = false; s.Width = 20; s.Height = 20; } } } }
private void OnRemoveTicket() { Spot spot = SelectedSpot; ConfirmationBox cb = new ConfirmationBox { Message = String.Format( "Вы действительно желаете удалить билет № {0}, {1}, {2}, {3} ряд, {4} место из списка билетов заказа?", spot.Id, spot.SideName, spot.SectorName, spot.RowNum, spot.SeatNum) }; bool?result = cb.ShowDialog(); if (result ?? false) { //First we cancel ticket in the order Customer.Order.Seats = new List <Seat> { new Seat() { Id = spot.Id } }; Customer.Order = Data.Access.Cancel(Customer.Order); // Then we remove a seat from selected seats collection SelectedSpots.Remove(spot); // and mark spot as unselected on the map foreach (Spot s in Spots) { if (s.Id == spot.Id) { s.IsSelected = false; s.Width = 20; s.Height = 20; } } // At last we again lock seats if (SelectedSpots.Count > 0) { LockSeats(SelectedSpots.ToArray()); } } }
/// <summary> /// Handles CreateOrder button event and open PurchaseView in wizard /// </summary> private void OnCreateOrder() { Logger.Default.Append("OnCreateOrder Begin"); InitCustomer(); _worker = new BackgroundWorker(); _worker.DoWork += delegate { WizardProgressVisibility = Visibility.Visible; Customer.Order = Access.CreateOrder(Customer); if (Customer.Order != null) { PersistSelectedSpots(Customer.Order.Seats); OrderPrice = SelectedSpots.Where(x => x.Result == Core.OperationResult.Success).Sum(x => x.Price); StatusText = OperationResult = String.Format("Заказ № {0} создан. Сумма заказа: {1}", Customer.Order.Id, OrderPrice.ToString("C")); if (_wizardWindow != null) { WizardTitle = "Оплата заказа"; ContentWindow = new PurchaseViewModel(Instance); } _wisardStep = WisardStep.OrderCreated; } else { StatusText = OperationResult = "Произошла ошибка. Места не зарезервированы"; } }; _worker.RunWorkerCompleted += delegate { WizardProgressVisibility = Visibility.Collapsed; }; _worker.RunWorkerAsync(); Logger.Default.Append("OnCreateOrder End"); }
/// <summary> /// Closes wizard /// </summary> private void OnCloseWizard() { if (_wisardStep == WisardStep.Locked) { _worker = null; _wisardStep = WisardStep.None; _wizardWindow.Close(); ReleaseSeats(SelectedSpots.ToArray()); OnSpotsChanged(); StatusText = String.Empty; } if (_wisardStep == WisardStep.OrderCreated) { _worker = null; _wisardStep = WisardStep.None; _wizardWindow.Close(); OnSpotsChanged(); StatusText = String.Empty; } if (_wisardStep == WisardStep.OrderPaid) { _worker = null; _wisardStep = WisardStep.None; _wizardWindow.Close(); OnSpotsChanged(); StatusText = String.Empty; } if (_wisardStep == WisardStep.Printed) { _worker = null; _wisardStep = WisardStep.None; _wizardWindow.Close(); OnSpotsChanged(); StatusText = String.Empty; } _wizardWindow = null; }
private void OnRemoveSeat() { if (SelectedSpot != null) { Spot spot = SelectedSpot; ConfirmationBox cb = new ConfirmationBox { Message = String.Format( "Вы действительно желаете удалить место № {0}, {1}, {2}, {3} ряд, {4} место из списка выбранных мест?", spot.Id, spot.SideName, spot.SectorName, spot.RowNum, spot.SeatNum) }; bool?result = cb.ShowDialog(); if (result ?? false) { // First we release all the selected seats List <Seat> seats = ReleaseSeats(SelectedSpots.ToArray()); if (seats != null) { // Then we remove a seat from selected seats collection SelectedSpots.Remove(spot); // and mark spot as unselected on the map foreach (Spot s in Spots) { if (s.Id == spot.Id) { s.IsSelected = false; s.Width = 20; s.Height = 20; } } // At last we again lock seats if (SelectedSpots.Count > 0) { LockSeats(SelectedSpots.ToArray()); } } } } }
/// <summary> /// Opens wizard window with ReserveSeats view /// Locks selected seats /// </summary> private void OnReserveSeats() { if (_wizardWindow == null) { WizardTitle = "Создать заказ"; FirstName = String.Empty; MiddleName = String.Empty; LastName = String.Empty; CustomerEmail = String.Empty; CustomerPhone = String.Empty; SendSms = false; LockSeats(SelectedSpots.ToArray()); _wisardStep = WisardStep.Locked; _wizardWindow = new WizardWindow { Owner = MetroWindow }; ContentWindow = new ReserveViewModel(Instance); _wizardWindow.ShowDialog(); } }
/// <summary> /// Locks seats /// </summary> private void LockSeats(Spot[] spots) { List <Seat> seats = new List <Seat>(); foreach (Spot spot in spots) { Seat seat = new Seat(); seat.Id = spot.Id; seat.ReserveDate = ReserveDate; seats.Add(seat); } List <Seat> lockedSeats = Data.Access.LockSeats(seats); if (lockedSeats != null) { HashSet <int> writerIds = new HashSet <int>(lockedSeats.Select(x => x.Id)); seats.RemoveAll(x => writerIds.Contains(x.Id)); foreach (Seat s in seats) { SelectedSpots.Remove(SelectedSpots.Single(i => i.Id == s.Id)); Spots.Remove(Spots.Single(i => i.Id == s.Id)); } int counter = 0; decimal price = 0; foreach (Spot spot in SelectedSpots) { counter++; price += spot.Price; spot.ItemId = counter; } StatusText = String.Format("Удерживается {0} мест на сумму {1}", SeatsCount.ToString("### ##0"), SeatsAmount.ToString("C0")); OperationResult = String.Format("Выбрано мест {0} на сумму {1}", counter, price.ToString("C")); } }
/// <summary> /// Handles PrintTickets button event and prints tickets /// </summary> private void OnPrintTickets() { ProcessPrint(SelectedSpots.ToList()); }
/// <summary> /// Handles PayOrder button event and open PrintView in wizard /// </summary> private void OnPayOrder() { BlankStatus = String.Empty; // if View called from orders if (Customer.Order.Seats == null) { Customer.Order.Seats = new List <Seat>(); foreach (Ticket t in Tickets) { Seat seat = new Seat() { Id = t.Id }; Customer.Order.Seats.Add(seat); } } Customer.Order.PaymentType = (PaymentType)Enum.Parse(typeof(PaymentType), SelectedPaymentType.Key.ToString(), true); _worker = new BackgroundWorker(); _worker.DoWork += delegate { WizardProgressVisibility = Visibility.Visible; Customer.Order = Access.ConfirmPayment(Customer.Order); if (Customer.Order != null && Customer.Order.Status == ItemStatus.Sold) { Blank[] blanks = Access.GetBlanks(0, Customer.Order.ItemsCount, ItemStatus.OnSale); if (blanks != null) { if (blanks.Length != Customer.Order.ItemsCount) { BlankStatus = "Количество бланков недостаточно для печати заказа"; } } else { BlankStatus = "У вас отсутствуют бланки"; } for (int i = 0; i < Customer.Order.Seats.Count; i++) { Seat seat = Customer.Order.Seats[i]; Spot spot = SelectedSpots.FirstOrDefault(x => x.Id == seat.Id); if (spot != null) { spot.Status = seat.Status; //spot.Result = seat.Result; spot.ReserveDate = seat.ReserveDate; if (blanks != null && blanks.Length > i) { spot.Blank = blanks[i]; } } } //PersistSelectedSpots(Customer.Order.Seats); StatusText = OperationResult = String.Format("Заказ № {0} оплачен. Сумма заказа: {1}", Customer.Order.Id, OrderPrice.ToString("C")); if (_wizardWindow != null) { WizardTitle = "Печать заказа"; ContentWindow = new PrintViewModel(Instance); } _wisardStep = WisardStep.OrderPaid; DisplayTickets(); } else { Customer.Order = new Order(); // Just not to be null StatusText = OperationResult = String.Format("Произошла ошибка. Заказ № {0} не оплачен", Customer.Order.Id); } }; _worker.RunWorkerCompleted += delegate { WizardProgressVisibility = Visibility.Collapsed; }; _worker.RunWorkerAsync(); }