public PaymentView(Payment payment) { ShopRepository shopRepository; BasketItemRepository basketItemRepository; IndividualRepository individualRepository; shopRepository = new ShopRepository(); individualRepository = new IndividualRepository(); basketItemRepository = new BasketItemRepository(); this.Id = payment.Id; this.isPayed = payment.isPayed; this.ShopId = payment.ShopId; if (this.ShopId != null) this.Shop = (Shop)shopRepository.FindById(this.ShopId); this.IndividualId = payment.IndividualId; if (this.IndividualId != null) this.Individual = (Individual) individualRepository.FindById(this.IndividualId); this.BasketItems = basketItemRepository.FindBasketItemsByPayment( this.Id); }
//oldPayment и newPayment указывают на один и тот же экземпляр, но //для надежности оставлю обмен значений полей public void Edit(Payment newPayment) { Payment oldPayment; using (BookMarketDbContext db = new BookMarketDbContext()) { db.EditPayment(newPayment.Id, newPayment.isPayed, newPayment.ShopId, newPayment.IndividualId); } }
//Добавление платежа магазина вместе с платежом WalletOne //Они добавляются вместе public Payment AddPayment(Payment payment, W1Payment w1Payment) { W1Payment dbW1Payment; Payment dbPayment; if (payment != null && w1Payment != null) { dbW1Payment = (W1Payment) this._w1PaymentRepository.Add(w1Payment); payment.Id = dbW1Payment.WMI_PAYMENT_NO; dbPayment = (Payment) this._paymentRepository.Add(payment); return dbPayment; } else throw new Exception("Payment не задан!"); return null; }
//Привязка элементов корзины покупателя к платежу и открепление их //от корзины. //payment должен быть известен БД или стоит его в ней найти по id? public void BasketToPaymentMigration(Basket basket, Payment payment) { IList<BasketItem> basketItems; BasketItemRepository basketItemRepository; if (basket != null && payment != null) { //прикрепление заказов к платежу basketItemRepository = (BasketItemRepository)this._basketItemRepository; basketItems = basketItemRepository.FindAllByBasket(basket.Id); foreach (BasketItem item in basketItems) { item.PaymentId = payment.Id; basketItemRepository.Edit(item); } //открепление заказов от корзины и ее очистка ClearBasket(basket); } else throw new Exception("Корзина или платеж не заданы!"); }
public ActionResult SelectShop(Shop shop) { Basket basket; IList<Shop> shops; PaymentView paymentView; UrlGenerator urlGenerator; Payment payment, dbPayment; W1Payment w1Payment, dbW1Payment; W1PaymentView w1PaymentView; Individual individual; BasketService basketService; IndividualRepository individualRepository; PaymentRepository paymentRepository; PaymentService paymentService; //Необходимо вызвать UrlGenerator в любом Post-методе контроллера, //иначе Request и Url поля не будут доступны. //В будующем нужно исправить! urlGenerator = new UrlGenerator(this.Request, this.Url); basketService = new BasketService(); paymentRepository = new PaymentRepository(); paymentService = new PaymentService(); individualRepository = new IndividualRepository(); //---- shop = (Shop)this._shopRepository.FindById(shop.Id); //для адреса basket = basketService.GetBasket(User.Identity.Name); //Вычитаем заказанныек книги из BookVariableInfo и //обвновляем Basket basketService.ShopProcessing(basket, shop); shop.Address = (Address)this._addressRepository.FindById(shop.Id); //-- //Создание платежной формы W1Payment individual = (Individual)individualRepository .FindIndividualByUserProfileName(User.Identity.Name); w1Payment = new W1Payment(); w1Payment.WMI_PAYMENT_AMOUNT = paymentService.DecimalCounting( basket.TotalAmount, shop.BookDeliveryCost); w1Payment.WMI_DESCRIPTION = paymentService.MakeDescription(basket.Id); dbW1Payment = paymentService.MakeW1Payment(w1Payment); //добавление payment и w1Payment payment = new Payment() { Id = dbW1Payment.WMI_PAYMENT_NO, ShopId = shop.Id, IndividualId = individual.Id }; dbPayment = paymentService.AddPayment(payment, w1Payment); payment.Id = dbPayment.Id; //Перемещение заказов из корзины в платеж и очистка корзины basketService.BasketToPaymentMigration(basket, payment); //-Создали представление для отображения w1Payment и передачи его в POST w1PaymentView = new W1PaymentView(dbW1Payment);//payment, basket); return RedirectToAction("BasketPay", w1PaymentView);//shop); //payment); }
// Получает платеж по представлению public Payment GetPayment(PaymentView paymentView) { Payment payment; payment = new Payment() { Id = paymentView.Id, isPayed = paymentView.isPayed, ShopId = paymentView.ShopId }; payment.Shop = (Shop)this._shopRepository.FindById(payment.ShopId); return payment; }