OrderPageViewModel.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. using Microsoft.EntityFrameworkCore;
  2. using Microsoft.Toolkit.Mvvm.Input;
  3. using MyMoviesWPF.MVVM.View.Pages;
  4. using MyMoviesWPF.MVVM.ViewModel.Core;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Collections.ObjectModel;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows;
  12. using System.Windows.Controls;
  13. namespace MyMoviesWPF.MVVM.ViewModel
  14. {
  15. internal class OrderPageViewModel : BaseViewModel
  16. {
  17. private ObservableCollection<Order> _orders;
  18. private RelayCommand _continuePayment;
  19. private RelayCommand _cancel;
  20. private Order _selectedOrder;
  21. private string _sum;
  22. private string _amount;
  23. private string _selectedPayment;
  24. private bool _continuePaymentEnability = true;
  25. // A.Where(x => Char.IsDigit(x[0]) && x.Length == L).ToList().LastOrDefault() ?? "Not found";
  26. //A.Sum(x => x.Length));
  27. public bool ContinuePaymentEnability
  28. {
  29. get => _continuePaymentEnability;
  30. set
  31. {
  32. if (_continuePaymentEnability == value)
  33. return;
  34. _continuePaymentEnability = value;
  35. OnPropertyChanged("ContinuePaymentEnability");
  36. }
  37. }
  38. public RelayCommand Cancel
  39. {
  40. get
  41. {
  42. return _cancel
  43. ?? (_cancel = new RelayCommand(
  44. async () =>
  45. {
  46. foreach (Order order in Orders)
  47. {
  48. order.Status = "Отменен";
  49. Service.db.Orders.Update(order);
  50. Service.db.SaveChanges();
  51. }
  52. Service.CartMoviesCollection.Clear();
  53. Orders.Clear();
  54. Service.MainViewModel.UpdateCartStr();
  55. Service.MainViewModel.UpdatePage(Service.catalogPage);
  56. }));
  57. }
  58. }
  59. private ObservableCollection<String> _payments = new ObservableCollection<String>() { "Sberbank", "Paypal", "Gazprombank", "RosSelkhozbank" };
  60. public ObservableCollection<String> Payments
  61. {
  62. get => _payments;
  63. set
  64. {
  65. if (_payments == value)
  66. return;
  67. _payments = value;
  68. OnPropertyChanged("Payments");
  69. }
  70. }
  71. public string SelectedPayment
  72. {
  73. get => _selectedPayment;
  74. set
  75. {
  76. if (_selectedPayment == value)
  77. return;
  78. _selectedPayment = value;
  79. if (_continuePaymentEnability == false && Orders != null)
  80. {
  81. if(Orders.Count == 1 && Orders[0] != null || Orders.Count > 1)
  82. {
  83. UpdateEnability(true);
  84. }
  85. }
  86. OnPropertyChanged("SelectedPayment");
  87. }
  88. }
  89. public string Sum
  90. {
  91. get => _sum;
  92. set
  93. {
  94. if (_sum == value)
  95. return;
  96. _sum = value;
  97. OnPropertyChanged("Sum");
  98. }
  99. }
  100. public string Amount
  101. {
  102. get => _amount;
  103. set
  104. {
  105. if (_amount == value)
  106. return;
  107. _amount = value;
  108. OnPropertyChanged("Amount");
  109. }
  110. }
  111. public ObservableCollection<Order> Orders
  112. {
  113. get { return _orders; }
  114. set
  115. {
  116. if (_orders == value)
  117. return;
  118. _orders = value;
  119. OnPropertyChanged("Orders");
  120. }
  121. }
  122. //SelectedOrder
  123. public Order SelectedOrder
  124. {
  125. get
  126. {
  127. return _selectedOrder;
  128. }
  129. set
  130. {
  131. _selectedOrder = value;
  132. OnPropertyChanged();
  133. }
  134. }
  135. public RelayCommand ContinuePayment
  136. {
  137. get
  138. {
  139. return _continuePayment
  140. ?? (_continuePayment = new RelayCommand(
  141. async () =>
  142. {
  143. Payment payment = new Payment();
  144. payment.PaymentType = SelectedPayment;
  145. payment.Sum = Decimal.Parse(Sum);
  146. payment.Date = DateTime.Now;
  147. payment.Status = "Успешно";
  148. Service.db.Payments.Add(payment);
  149. Service.db.SaveChanges();
  150. foreach (Order order in Orders)
  151. {
  152. order.Status = "Выполнен";
  153. order.IdpaymentNavigation = payment;
  154. Service.db.Orders.Update(order);
  155. Service.db.SaveChanges();
  156. }
  157. Service.CartMoviesCollection.Clear();
  158. Orders.Clear();
  159. Service.MainViewModel.UpdateCartStr();
  160. MessageBox.Show("Операция прошла успешно !", "Успех", MessageBoxButton.OK, MessageBoxImage.Information);
  161. Service.MainViewModel.UpdatePage(Service.catalogPage);
  162. }));
  163. }
  164. }
  165. public OrderPageViewModel()
  166. {
  167. foreach (Movie thing in Service.CartMoviesCollection)
  168. {
  169. Order order = new Order();
  170. order.Idmovie = thing.Idmovie;
  171. order.Iduser = Service.LoggedUser.Iduser;
  172. order.Status = "В Процессе";
  173. order.Price = thing.Price;
  174. order.Date = DateTime.Now;
  175. //Orders.Add(order);
  176. Service.db.Orders.Add(order);
  177. Service.db.SaveChanges();
  178. }
  179. _orders = new ObservableCollection<Order>(Service.db.Orders.Where(x => x.Status == "В Процессе"));
  180. Orders = new(Service.db.Orders.Where(o => o.Status == "В Процессе").DefaultIfEmpty().Include(q => q.IdmovieNavigation).Include(u => u.IduserNavigation));
  181. OnPropertyChanged("Orders");
  182. _sum = Convert.ToString((from x in Orders where x != null select x.Price).DefaultIfEmpty().Sum() ?? 0 );
  183. OnPropertyChanged("Sum");
  184. _amount = Convert.ToString((from x in Orders where x != null select x.Idorder).DefaultIfEmpty().Count());
  185. if(Orders != null)
  186. {
  187. UpdateEnability(true);
  188. }
  189. if(SelectedPayment == null)
  190. {
  191. UpdateEnability(false);
  192. }
  193. }
  194. public void UpdateEnability()
  195. {
  196. if (_continuePaymentEnability == true)
  197. {
  198. _continuePaymentEnability = false;
  199. }
  200. else
  201. {
  202. _continuePaymentEnability = true;
  203. }
  204. OnPropertyChanged("ContinuePaymentEnability");
  205. }
  206. public void UpdateEnability(bool value)
  207. {
  208. _continuePaymentEnability = value;
  209. OnPropertyChanged("ContinuePaymentEnability");
  210. }
  211. }
  212. }