public async Task <BillAM> CalculateBill(BillInfoAM billInfo, BasketAM basket) { var domainPrice = await PricelistService.GetDomainPrice(billInfo.PriceId); if (domainPrice == null) { throw new EntityNotFoundException($"PriceId:{billInfo.PriceId} doesn't exist", "Price"); } var result = new BillAM { Info = billInfo }; if (basket.KmValue > 0) { var billItem = await CalculateBillItem(BillItem.KmBillKey, basket.KmValue, domainPrice.PerKm, billInfo.DegreeOfDifficulty); result.Items.Add(billItem); } if (basket.LoadingValue > 0) { var billItem = await CalculateBillItem(BillItem.LoadingBillKey, basket.LoadingValue, domainPrice.Loading, billInfo.DegreeOfDifficulty); result.Items.Add(billItem); } if (basket.LockedSteeringValue > 0) { var billItem = await CalculateBillItem(BillItem.LockedSteeringKey, basket.LockedSteeringValue, domainPrice.LockedSteering, billInfo.DegreeOfDifficulty); result.Items.Add(billItem); } if (basket.LockedWheelsValue > 0) { var billItem = await CalculateBillItem(BillItem.LockedWheelsKey, basket.LockedWheelsValue, domainPrice.LockedWheel, billInfo.DegreeOfDifficulty); result.Items.Add(billItem); } if (basket.OverturnedValue > 0) { var billItem = await CalculateBillItem(BillItem.OverturnedKey, basket.OverturnedValue, domainPrice.Overturned, billInfo.DegreeOfDifficulty); result.Items.Add(billItem); } if (basket.DitchValue > 0) { var billItem = await CalculateBillItem(BillItem.DitchKey, basket.DitchValue, domainPrice.Ditch, billInfo.DegreeOfDifficulty); result.Items.Add(billItem); } result.TotalCost = result.Items.Select(i => i.Cost).Sum(); return(result); }
public void ScanMultipleItems_TotalIsSum(Client client, string items, double total) { IPricingRules pricingRules = new PricingRulesService(client); IPriceList pricelist = new PricelistService(); ScanMultipleItems(pricingRules, pricelist, items, total); }
public async Task <BillInfoAM> GetBillInfo(Coordinate coordinate, int catalogItemId) { var domainCity = await CityService.GetDomainCityByCoordinate(coordinate); var domainPrice = await PricelistService.GetDomainPrice(domainCity.PricelistId, catalogItemId); return(new BillInfoAM { PriceId = domainPrice.Id, CommissionPercentage = domainPrice.CommissionPercentage }); }
public PricelistServiceTestSuite() { PricelistRepositoryMock = new Mock <IPricelistRepository>(); PricelistService = new PricelistService(PricelistRepositoryMock.Object); }