Example #1
0
        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);
        }
Example #2
0
 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
     });
 }
Example #3
0
        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());
        }