public async Task <List <OrderDistribution> > TryAndCreateOrderDistributionAsync(ProductOrder order) { List <OrderDistribution> orderDistributions = new List <OrderDistribution>(); using (CurrentUnitOfWork.SetTenantId(order.TenantId)) { foreach (OrderItem orderItem in order.OrderItems) { int count = _orderItemRepository.GetAll().Where(model => model.CreatorUserId == order.UserId && model.SpecificationId == orderItem.SpecificationId && model.Order.PaymentStatus == PaymentStatus.Payed).Count(); var orderItems = _orderItemRepository.GetAll().Where(model => model.CreatorUserId == order.UserId && model.Order.PaymentStatus == PaymentStatus.Payed).ToList(); if (orderItem.Specification.Product.Distributions.Count() > 0) { foreach (Distribution distribution in orderItem.Specification.Product.Distributions) { if ((distribution.BuyWhen == BuyWhen.NoLimit) || (distribution.BuyWhen == BuyWhen.First && count <= 1) || (distribution.BuyWhen == BuyWhen.Next && count > 1)) { User user = GetDistributionUser(order.User, distribution); if (user != null) { UserManager.IncreaseSales(user, order.Money); OrderDistribution orderDistribution = await CreateOrderDistributionAsync(user, distribution, orderItem, order); if (orderDistribution != null) { orderDistributions.Add(orderDistribution); } } } } } } return(orderDistributions); } }
public async Task <OrderDistribution> CreateOrderDistributionAsync(User user, Distribution distribution, OrderItem orderItem, ProductOrder order) { decimal money = GetDistributionMoney(distribution, order); if (money == 0) { return(null); } OrderDistribution orderDistribution = new OrderDistribution() { OrderId = order.Id, Money = money, OrderMoney = order.PayMoney, OrderItemId = orderItem.Id, UserId = user.Id, DistributionId = distribution.Id }; _orderDistributionRepository.Insert(orderDistribution); CurrentUnitOfWork.SaveChanges(); await WalletManager.IncomeOfOrderRebate(user.ToUserIdentifier(), money, string.Format(L("DistributionOfLevel"), distribution.Level), order); return(orderDistribution); }