示例#1
0
        public FreightDto GetFreightByExpeditionService(GetFreightByServiceInputDto inputDto)
        {
            var tenantExpedition = _tenantExpeditionRepo.FirstOrDefault(i => i.ExpeditionService.Id == inputDto.ExpeditionService.Expedition.Id);

            Validate.Found(tenantExpedition, "Expedition");
            if (!tenantExpedition.IsActive)
            {
                throw new HozaruException("Expedition tidak aktif");
            }

            var getShippingCostInputDto = new GetShippingCostInputDto
            {
                Expeditions = new List <Expedition>()
                {
                    inputDto.ExpeditionService.Expedition
                },
                Origin      = inputDto.Origin,
                Destination = inputDto.Destination,
                Weight      = inputDto.Weight
            };

            var rajaOngkirResponses = _rajaOngkirService.GetShippingCost(getShippingCostInputDto);

            if (rajaOngkirResponses.IsNullOrEmpty())
            {
                throw new HozaruException("Ongkos Kirim tidak ditemukan");
            }
            var rajaOngkirResponseResult = rajaOngkirResponses.FirstOrDefault().Results.FirstOrDefault(i => i.ServiceName.ToLower() == inputDto.ExpeditionService.RajaOngkirCode.ToLower());

            var estimatedTimeDelivery = new EstimatedTimeDelivery(rajaOngkirResponseResult.EstimatedToDelivery);
            var freightDto            = new FreightDto()
            {
                ExpeditionServiceId = inputDto.ExpeditionService.Id,
                ExpeditionFullName  = inputDto.ExpeditionService.FullName,
                Cost = rajaOngkirResponseResult.Cost,
                EstimatedTimeDelivery = estimatedTimeDelivery,
                Description           = estimatedTimeDelivery.GetEstimatedTimeDeliverySentence(DateTime.Now),
                TotalWeight           = inputDto.Weight
            };

            return(freightDto);
        }
示例#2
0
        public OrderDto CreateOrder(CreateOrderInputDto inputDto)
        {
            var tenant   = GetCurrentTenant();
            var district = _districtRepository.FirstOrDefault(i => i.Id == inputDto.DistrictId);

            Validate.Found(district, "Kecamatan");

            var paymentMethod = _paymentMethodRepository.FirstOrDefault(i => i.Bank.Code == inputDto.PaymentMethodCode);

            Validate.Found(paymentMethod, "Metode Pembayaran", inputDto.PaymentMethodCode);

            var order = Order.Create(inputDto.Name, inputDto.Email, inputDto.Whatsapp, district, inputDto.Address, inputDto.Note, paymentMethod, (transactionDate) =>
            {
                return(_autoNumberGenerator.GenerateOrderNumber(transactionDate));
            });

            foreach (var itemInputDto in inputDto.Items)
            {
                var product = _productRepository.Get(itemInputDto.ProductId);
                Validate.Found(product, "Produk");
                order.AddItem(product, itemInputDto.Quantity, itemInputDto.Note);
            }

            var expeditionService = _expeditionServiceRepository.FirstOrDefault(i => i.Id == inputDto.ExpeditionServiceId);

            Validate.Found(expeditionService, "Ekpedisi");

            order.AddShipment(expeditionService, (totalWeight) =>
            {
                var getFreightByServiceInputDto = new GetFreightByServiceInputDto(expeditionService, tenant.District, district, totalWeight);
                var freightResult = _freightAppService.GetFreightByExpeditionService(getFreightByServiceInputDto);
                return(Tuple.Create(freightResult.Cost, freightResult.EstimatedTimeDelivery));
            });

            _orderRepository.Insert(order);

            var message = NotificationMessageHelper.GenerateDraftMessage(order, tenant);

            WhatsappAPI.SendMessage(order.Customer.WhatsappNumber, message);

            return(Mapper.Map <OrderDto>(order));
        }