Beispiel #1
0
        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
            }));
        }
Beispiel #2
0
        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);
        }