public async Task <OrderServiceModel> SaveOrderStatusAsync(UpdateOrderStatusServiceModel serviceModel) { var orders = this.context.Orders.Where(x => x.Id == serviceModel.OrderId && x.IsActive); if (serviceModel.IsSeller is false) { orders = orders.Where(x => x.SellerId == serviceModel.OrganisationId.Value); } var order = await orders.FirstOrDefaultAsync(); if (order == null) { throw new CustomException(this.orderLocalizer.GetString("OrderNotFound"), (int)HttpStatusCode.NotFound); } var newOrderOstatus = await this.context.OrderStatuses.FirstOrDefaultAsync(x => x.Id == serviceModel.OrderStatusId && x.IsActive); if (newOrderOstatus == null) { throw new CustomException(this.orderLocalizer.GetString("OrderStatusNotFound"), (int)HttpStatusCode.NotFound); } order.OrderStatusId = newOrderOstatus.Id; order.OrderStateId = newOrderOstatus.OrderStateId; await this.context.SaveChangesAsync(); return(await this.GetAsync(new GetOrderServiceModel { Id = serviceModel.OrderId, OrganisationId = serviceModel.OrganisationId, Username = serviceModel.Username, Language = serviceModel.Language, IsSeller = serviceModel.IsSeller })); }
public async Task <IActionResult> Post(UpdateOrderStatusRequestModel model) { var sellerClaim = this.User.Claims.FirstOrDefault(x => x.Type == AccountConstants.Claims.OrganisationIdClaim); var serviceModel = new UpdateOrderStatusServiceModel { OrderId = model.OrderId, OrderStatusId = model.OrderStatusId, Language = CultureInfo.CurrentCulture.Name, OrganisationId = GuidHelper.ParseNullable(sellerClaim?.Value), Username = this.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email)?.Value, IsSeller = this.User.IsInRole("Seller") }; var validator = new UpdateOrderStatusModelValidator(); var validationResult = await validator.ValidateAsync(serviceModel); if (validationResult.IsValid) { var order = await this.ordersService.SaveOrderStatusAsync(serviceModel); if (order != null) { var response = new OrderResponseModel { Id = order.Id, ClientId = order.ClientId, ClientName = order.ClientName, BillingAddressId = order.BillingAddressId, BillingCity = order.BillingCity, BillingCompany = order.BillingCompany, BillingCountryCode = order.BillingCountryCode, BillingFirstName = order.BillingFirstName, BillingLastName = order.BillingLastName, BillingPhone = order.BillingPhone, BillingPhonePrefix = order.BillingPhonePrefix, BillingPostCode = order.BillingPostCode, BillingRegion = order.BillingRegion, BillingStreet = order.BillingStreet, ShippingAddressId = order.ShippingAddressId, ShippingCity = order.ShippingCity, ShippingCompany = order.ShippingCompany, ShippingCountryCode = order.ShippingCountryCode, ShippingFirstName = order.ShippingFirstName, ShippingLastName = order.ShippingLastName, ShippingPhone = order.ShippingPhone, ShippingPhonePrefix = order.ShippingPhonePrefix, ShippingPostCode = order.ShippingPostCode, ShippingRegion = order.ShippingRegion, ShippingStreet = order.ShippingStreet, ExpectedDeliveryDate = order.ExpectedDeliveryDate, MoreInfo = order.MoreInfo, Reason = order.Reason, OrderStateId = order.OrderStateId, OrderStatusId = order.OrderStatusId, OrderStatusName = order.OrderStatusName, OrderItems = order.OrderItems.Select(x => new OrderItemResponseModel { ProductId = x.ProductId, ProductSku = x.ProductSku, ProductName = x.ProductName, PictureUrl = x.PictureUrl, Quantity = x.Quantity, ExternalReference = x.ExternalReference, ExpectedDeliveryFrom = x.ExpectedDeliveryFrom, ExpectedDeliveryTo = x.ExpectedDeliveryTo, MoreInfo = x.MoreInfo, LastModifiedDate = x.LastModifiedDate, CreatedDate = x.CreatedDate }), LastModifiedDate = order.LastModifiedDate, CreatedDate = order.CreatedDate }; return(this.StatusCode((int)HttpStatusCode.OK, response)); } else { return(this.StatusCode((int)HttpStatusCode.NotFound)); } } throw new CustomException(string.Join(ErrorConstants.ErrorMessagesSeparator, validationResult.Errors.Select(x => x.ErrorMessage)), (int)HttpStatusCode.UnprocessableEntity); }