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);
        }
Esempio n. 2
0
        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);
        }