private async Task <int> CalculateCommission(NewUpdateSale sale) { int commission = 0; var hwIds = sale.ChosenHardwares.Select(x => x.Id); var exIds = sale.ChosenExtras.Select(x => x.Id); var subIds = sale.ChosenSubscriptions.Select(x => x.Id); var hardwares = await _productRepository.FindAsync(x => hwIds.Contains(x.Id)); var extras = await _productRepository.FindAsync(x => exIds.Contains(x.Id)); var subscriptions = await _productRepository.FindAsync(x => subIds.Contains(x.Id)); foreach (var hardware in hardwares) { commission += hardware.Commission * sale.ChosenHardwares.SingleOrDefault(x => x.Id == hardware.Id).Amount; } foreach (var extra in extras) { commission += extra.Commission * sale.ChosenExtras.SingleOrDefault(x => x.Id == extra.Id).Amount; } foreach (var subscription in subscriptions) { commission += subscription.Commission; } return(commission); }
public static Sale CreateSale(string storeId, int commission, NewUpdateSale sale) { return(new Sale { Id = Guid.NewGuid().ToString(), SellerId = sale.Seller.Id, CompanyId = sale.Company.Id, SaleDate = DateTime.Parse(sale.Date), Hardwares = sale.ChosenHardwares, Extras = sale.ChosenExtras, Subscriptions = ExtractSubscriptions(sale.ChosenSubscriptions), StoreId = storeId, Commission = commission }); }
public async Task <IActionResult> NewSale([FromBody] NewUpdateSale newSale) { var storeId = GetStoreId(); var totalCommission = await CalculateCommission(newSale); var sale = SaleFactory.CreateSale(storeId, totalCommission, newSale); try { await _saleWriteRepository.CreateAsync(sale); } catch (Exception e) { var h = e.Message; } return(Ok()); }