コード例 #1
0
        //[Authorize(Roles = "Customer")]
        public async Task <IHttpActionResult> PutConvertPrivateToAreaOrder(ConvertPrivateToAreaOrderCommand command)
        {
            var commandResponse = await Bus.Send <ConvertPrivateToAreaOrderCommand, ConvertPrivateToAreaOrderCommandResponse>(command);

            var response = new ResponseModel
            {
                Message      = "Order for other shops has been successfully issued",
                Success      = true,
                ResponseData = commandResponse
            };

            return(Ok(response));
        }
コード例 #2
0
        public async Task <ConvertPrivateToAreaOrderCommandResponse> Handle(ConvertPrivateToAreaOrderCommand command)
        {
            var setting = await _applicationSettingRepository.AsQuery().FirstOrDefaultAsync();

            if (setting == null)
            {
                throw new Exception();
            }
            var order = await _privateOrderRepository.FindAsync(command.OrderId);

            if (order == null)
            {
                throw new DomainException("سفارش یافت نشد");
            }

            var areaOrders = _areaRepository.AsQuery().Where(p => p.PrivateOrder.Id == order.Id).ToList();

            foreach (var areaOrder in areaOrders)
            {
                areaOrder.OrderItems.Clear();
                _areaRepository.Remove(areaOrder);
            }

            var shopsInArea = _personRepository.AsQuery().OfType <Shop>().Where(item =>
                                                                                item.Id != order.Shop.Id && item.IsActive && item.ShopStatus == ShopStatus.Accept &&
                                                                                item.ShopAddress.Geography.Distance(order.OrderAddress.Geography) <= item.AreaRadius)
                              .ToList();

            if (shopsInArea.Count <= 1)
            {
                throw new DomainException("فروشگاه دیگری در اطراف این فرو شگاه موجود نمی باشد");
            }
            var orderItems = order.OrderItems.ToList();
            var areaOrderExpireOpenTime = DateTime.Now.AddSeconds(setting.OrderExpireOpenTime);

            foreach (var shop in shopsInArea)
            {
                var areaOrder = new AreaOrder(order.Customer, order.OrderAddress,
                                              order.Description,
                                              areaOrderExpireOpenTime, shop, order, AreaOrderCreator.ByCustomer)
                {
                    OrderItems = new List <OrderItem>()
                };
                foreach (var orderItem in orderItems)
                {
                    var orderProductTemp = new OrderProduct(orderItem.OrderProduct.ProductId,
                                                            orderItem.OrderProduct.Name, orderItem.OrderProduct.Price,
                                                            orderItem.OrderProduct.ProductImage, orderItem.OrderProduct.BrandId,
                                                            orderItem.OrderProduct.BrandName);
                    OrderItemDiscountBase orderItemDiscountBase = null;
                    if (orderItem.Discount != null)
                    {
                        orderItemDiscountBase = orderItem.Discount;
                    }
                    var orderItemTemp = new OrderItem(Guid.NewGuid(), orderItem.Quantity, orderItem.Description,
                                                      orderProductTemp, orderItemDiscountBase);
                    areaOrder.OrderItems.Add(orderItemTemp);
                }
                _areaRepository.Add(areaOrder);
                await _fcmNotification.SendToIds(shop.GetPushTokens(), "سفارش جدید",
                                                 $"یک سفارش ثبت شد", NotificationType.OrderAdd,
                                                 AppType.Shop, NotificationSound.Shopper);
            }
            order.IsConvertToAreaOrder = true;
            order.OrderStatus          = OrderStatus.Pending;
            order.ExpireOpenTime       = DateTime.Now.AddSeconds(setting.OrderExpireOpenTime);
            return(new ConvertPrivateToAreaOrderCommandResponse(setting.OrderExpireOpenTime));
        }