public async Task <MOrder> CreateOrderAsync(OrderParams orderParams) { MOrder order = MOrder.FromParams(orderParams); order.Seller = await usersRepository.GetUserAsync <Seller>(order.SellerId); order.Status = OrderConstants.Status.Pending; order.Currency = "USD"; order.PaymentMethod = orderParams.PaymentMethod; order.PaymentReceiver = order.GetReceiver(order.PaymentMethod); foreach (var itemParams in orderParams.Items) { MOrderItem item = MOrderItem.FromParams(itemParams); item.Product = await productsRepository.GetProductAsync(item.ProductId, order.BuyerId); if (item.Product == null) { return(null); } if (order.SellerId != item.Product.SellerId) { return(null); } if (item.Product.Customer != null) { return(null); } item.ProductName = item.Product.Name; item.Price = item.Product.Price; order.TotalPrice += item.Price; order.Items.Add(item); } Payment payment = Payment.Create(order.PaymentMethod, string.Empty, order.GetReceiver(order.PaymentMethod), order.Currency, order.TotalPrice); foreach (MOrderItem item in order.Items) { payment.AddItem(item.ProductName, 1, item.Price); } order.PaymentId = await PaymentGatewayClient.CreatePaymentAsync(payment); return(await ordersRepository.AddOrderAsync(order)); }
public async Task <OrderModel> CreateOrderAsync(OrderParams orderParams) { if (orderParams.PaymentMethod == PaymentContants.PayPal) { var order = OrderModel.FromParams(orderParams); order.Seller = await usersRepository.GetUserPrivateAsync(order.SellerId); order.PaymentReceiver = order.Seller.PayPalEmail; order.Currency = order.Seller.PayPalCurrency; order.Status = PaymentContants.PendingStatus; foreach (var itemParams in orderParams.Items) { var item = OrderItemModel.FromParams(itemParams); item.Product = await productsRepository.GetProductAsync(item.ProductId, order.BuyerId); if (item.Product == null) { return(null); } if (order.SellerId != item.Product.SellerId) { return(null); } if (item.Product.Customer != null) { return(null); } item.ProductName = item.Product.Name; item.Price = item.Product.Price; order.TotalPrice += item.Price; order.Items.Add(item); } order = await ordersRepository.AddOrderAsync(order); payPalService.PayPalPayment(order, orderParams.BaseUrl); await ordersRepository.UpdateOrderPaymentUrlAsync(order); return(order); } return(null); }