예제 #1
0
        public async Task <IList <DeliveryScheduleDto> > GetCompatibleListAsync(int addressId, int[] itemsList)
        {
            var customerClaim = CurrentUser.FindClaim("customerId") ?? throw new BusinessException();
            var addressE      = await AddressRepository
                                .FindAsync(e => e.Id == addressId && e.CustomerID == int.Parse(customerClaim.Value))
                                ?? throw new EntityNotFoundException();

            return(null);
        }
        public virtual async Task <DeliveryChargeEntity> CalculateAsync(int addressId, int deliveryScheduleId, float subtotal, bool hasPromotion = false)
        {
            var addrE = await AddressRepository.FindAsync(addressId) ?? throw new EntityNotFoundException();

            var dScheduleE = await DeliveryScheduleRepository.FindAsync(deliveryScheduleId) ?? throw new EntityNotFoundException();

            var riderEs = await RiderRepository.GetRidersForTheCity(addrE.CityID);

            var meanDistance    = GetMeanDistance(addrE, riderEs);
            var distanceChargeE = await AsyncExecutor.LastOrDefaultAsync(DistanceChargeRepository
                                                                         .Where(e => e.From < meanDistance)
                                                                         .OrderBy(e => e.From));

            var subtotalPercentageE = await AsyncExecutor.LastOrDefaultAsync(SubtotalPercentageRepository.Where(e => e.From < subtotal)
                                                                             .OrderBy(e => e.From));

            var charge = subtotal * subtotalPercentageE.Percentage;

            charge += (hasPromotion)? 0 : distanceChargeE.Charge;

            charge += charge * dScheduleE.CostIncreasePercentage;

            return(new DeliveryChargeEntity(charge, distanceChargeE.Id, subtotalPercentageE.Id, dScheduleE.Id));
        }