//[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)); }
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)); }