protected void UpdateShippingFromIntegrations(Shipping shipping)
 {
     if (shipping.Status == ShippingState.ShippingCreated && shipping.UserCreatorId.HasValue)
     {
         if (shipping.CarrierId == null)
         {
             shipping.PoolingInfo = "Укажите Транспортную компанию";
             return;
         }
         if (shipping.TarifficationType == null)
         {
             shipping.PoolingInfo = "Укажите Способ тарификации";
             return;
         }
         var creator = _dataService.GetByIdOrNull <User>(shipping.UserCreatorId);
         if (creator.IsPoolingIntegrated())
         {
             using (var poolingIntegration = new PoolingIntegration(creator, _dataService))
             {
                 var poolingInfo = poolingIntegration.GetInfoFor(shipping);
                 shipping.PoolingState = poolingInfo.IsAvailable
                     ? ShippingPoolingState.PoolingAvailable : (ShippingPoolingState?)null;
                 shipping.PoolingInfo = poolingInfo.MessageField;
             }
         }
         else
         {
             shipping.PoolingInfo = PoolingIntegration.NeedLoginPasswordMessage;
         }
     }
 }
Ejemplo n.º 2
0
        public AppActionResult Run(CurrentUserDto userDto, Shipping shipping)
        {
            var user = _dataService.GetById <User>(userDto.Id.Value);

            if (!user.IsPoolingIntegrated())
            {
                return new AppActionResult
                       {
                           IsError = true,
                           Message = "Укажите данные для доступа к pooling.me в настройках профиля"
                       }
            }
            ;

            using (var pooling = new PoolingIntegration(user, _dataService))
            {
                pooling.CancelReservation(shipping);

                var poolingInfoDto = pooling.GetInfoFor(shipping);
                shipping.PoolingInfo = poolingInfoDto.MessageField;
            }

            shipping.PoolingSlotId        = null;
            shipping.PoolingReservationId = null;
            shipping.Status       = ShippingState.ShippingCreated;
            shipping.PoolingState = ShippingPoolingState.PoolingAvailable;

            foreach (var order in _dataService.GetDbSet <Order>().Where(o => o.ShippingId == shipping.Id))
            {
                order.OrderShippingStatus = shipping.Status;
            }

            _historyService.Save(shipping.Id, "shippingDeletePoolingSlot", shipping.ShippingNumber);

            return(new AppActionResult
            {
                IsError = false,
                Message = "shippingDeletePoolingSlot".Translate(userDto.Language, shipping.ShippingNumber)
            });
        }
Ejemplo n.º 3
0
        public AppActionResult Run(CurrentUserDto userDto, Shipping shipping)
        {
            var user = _dataService.GetById <User>(userDto.Id.Value);

            if (!user.IsPoolingIntegrated())
            {
                return new AppActionResult
                       {
                           IsError = true,
                           Message = "Укажите данные для доступа к pooling.me в настройках профиля"
                       }
            }
            ;

            using (var pooling = new PoolingIntegration(user, _dataService))
            {
                var poolingInfo = pooling.GetInfoFor(shipping);

                if (poolingInfo.IsAvailable)
                {
                    var reservationResult = pooling.CreateReservation(shipping);
                    if (!string.IsNullOrEmpty(reservationResult.Error))
                    {
                        return(new AppActionResult
                        {
                            IsError = true,
                            Message = $"Pooling: {reservationResult.Error}"
                        });
                    }

                    shipping.PoolingInfo          = $"Номер брони на Pooling: {reservationResult.ReservationNumber}";
                    shipping.PoolingSlotId        = poolingInfo.SlotId;
                    shipping.PoolingReservationId = reservationResult.ReservationId;
                }
                else
                {
                    shipping.PoolingState = null;
                    return(new AppActionResult
                    {
                        IsError = true,
                        Message = "Бронирование не доступно"
                    });
                }
            }

            shipping.Status       = ShippingState.ShippingConfirmed;
            shipping.PoolingState = ShippingPoolingState.PoolingBooked;

            foreach (var order in _dataService.GetDbSet <Order>().Where(o => o.ShippingId == shipping.Id))
            {
                order.OrderShippingStatus = shipping.Status;
            }

            _historyService.Save(shipping.Id, "shippingSetPooling", shipping.ShippingNumber);

            return(new AppActionResult
            {
                IsError = false,
                Message = "shippingSetPooling".Translate(userDto.Language, shipping.ShippingNumber)
            });
        }