public string CreateNewOrder([FromBody] string req)
        {
            var result   = String.Empty;
            var request  = new SaveOrderRequest();
            var response = new SaveOrderResponse();

            try
            {
                OrderService service = new OrderService();

                request = JsonConvert.DeserializeObject <SaveOrderRequest>(req);

                ClaimsIdentity identity = (ClaimsIdentity)User.Identity;
                int            userID   = Int32.Parse(identity.Claims.Where(x => x.Type == "UserID").First().Value);

                if (request.Order.OrderTypeID == (byte)EOrderTypes.Online)
                {
                    request.Order.CustomerID = userID;
                }

                response = service.PerformCreateNewOrder(request);
            }
            catch (Exception ex)
            {
                response = new SaveOrderResponse()
                {
                    MessageString   = ex.Message,
                    MessageStatusID = (byte)EMessageStatus.Success
                };
            }

            result = JsonConvert.SerializeObject(response);

            return(result);
        }
        public async Task <ActionResult> Create([FromBody] SaveOrderRequest entity)
        {
            try
            {
                var order = mapper.Map <Order>(entity);

                // Deduct quantities from inventory
                await inventoryService.ProcessAdjustments(order.LineItems, AdjustmentType.Deduct, Constants.AdjustmentRemarks.OrderCreated, QuantityType.Quantity);

                await context.Orders.AddAsync(order);

                await context.SaveChangesAsync();

                return(StatusCode(StatusCodes.Status201Created));
            }
            catch (QuantityBelowZeroException ex)
            {
                logger.LogError(ex.Message);

                ModelState.AddModelError(Constants.ErrorMessage, ex.Message);
                return(BadRequest(ModelState));
            }
            catch (Exception e)
            {
                logger.LogError(e.Message);
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
        public SaveOrderResponse PerformCreateNewOrder(SaveOrderRequest request)
        {
            SaveOrderResponse response = new SaveOrderResponse();

            try
            {
                using (var db = new CuddlyWombatEntities())
                {
                    db.Configuration.LazyLoadingEnabled   = false;
                    db.Configuration.ProxyCreationEnabled = false;

                    db.Orders.Add(request.Order);
                    db.SaveChanges();

                    foreach (var o in request.OrderMenuItems)
                    {
                        o.OrderID = request.Order.OrderID;
                        db.OrderMenuItems.Add(o);
                    }

                    db.SaveChanges();

                    response.MessageString   = "New Order is successfully created";
                    response.MessageStatusID = (byte)EMessageStatus.Success;
                }
            }
            catch (Exception ex)
            {
                response.MessageStatusID = (byte)EMessageStatus.Exception;
                response.MessageString   = ex.Message;
            }

            return(response);
        }
Exemple #4
0
        /// <summary>
        /// Update order with current id.
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public virtual Task <Overture.ServiceModel.Orders.Order> UpdateOrderAsync(UpdateOrderParam param)
        {
            if (param == null)
            {
                throw new ArgumentNullException(nameof(param));
            }
            if (param.OrderId == default)
            {
                throw new ArgumentException(GetMessageOfEmpty(nameof(param.OrderId)));
            }
            if (string.IsNullOrWhiteSpace(param.Scope))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(param.Scope)));
            }
            if (param.Order == null)
            {
                throw new ArgumentException(GetMessageOfNull(nameof(param.Order)));
            }

            var request = new SaveOrderRequest
            {
                ScopeId = param.Scope,
                OrderId = param.OrderId,
                Order   = param.Order,
            };

            return(OvertureClient.SendAsync(request));
        }
Exemple #5
0
 public IActionResult SaveOrder([FromBody] SaveOrderRequest saveOrderRequest)
 {
     try
     {
         bool isSuccess = dataBaseService.InsertOrder(saveOrderRequest);
         return(StatusCode(200, isSuccess));
     }
     catch (Exception)
     {
         return(StatusCode(500, Constants.REQUEST_ERROR_MESSAGE));
     }
 }
        public async Task <ActionResult> Update(long id, [FromBody] SaveOrderRequest entity)
        {
            try
            {
                var order = await context.Orders
                            .Include(a => a.Customer)
                            .Include(a => a.LineItems).ThenInclude(detail => (detail as OrderLineItem).TransactionHistory)
                            .AsNoTracking()
                            .SingleOrDefaultAsync(t => t.Id == id);

                if (order == null)
                {
                    return(NotFound());
                }

                // Process inventory adjustments
                await inventoryService.ProcessAdjustments(order.LineItems, AdjustmentType.Add, Constants.AdjustmentRemarks.OrderUpdated, QuantityType.Quantity);

                await inventoryService.ProcessAdjustments(entity.LineItems, AdjustmentType.Deduct, Constants.AdjustmentRemarks.OrderUpdated, QuantityType.Quantity);

                // Process deleted line items
                entityListHelpers.CheckItemsForDeletion(order.LineItems, entity.LineItems);

                // Update the order data
                order = mapper.Map <Order>(entity);

                context.Update(order);
                await context.SaveChangesAsync();

                return(StatusCode(StatusCodes.Status204NoContent));
            }
            catch (QuantityBelowZeroException ex)
            {
                logger.LogError(ex.Message);

                ModelState.AddModelError(Constants.ErrorMessage, ex.Message);
                return(BadRequest(ModelState));
            }
            catch (DbUpdateConcurrencyException concurrencyEx)
            {
                logger.LogError(concurrencyEx.Message);
                return(StatusCode(StatusCodes.Status409Conflict, Constants.ErrorMessages.ConcurrencyErrorMessage));
            }
            catch (Exception ex)
            {
                logger.LogError(ex.Message);
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
Exemple #7
0
        public BasketSaveResponse Save(string userId, OrderStatus orderStatus)
        {
            var response = new BasketSaveResponse();

            if (!_userSessionService.IsLoggedIn(userId))
            {
                response.AddError(new Error
                {
                    Code        = ErrorCodes.UserNotLoggedIn,
                    UserMessage = "You have to be logged in to save your order"
                });
                return(response);
            }

            if (orderStatus == OrderStatus.Unknown)
            {
                response.AddError(new Error {
                    UserMessage = "Order status not specified."
                });
                return(response);
            }

            var userBasket = _userSessionService.GetBasketForUser(userId);

            var orderRequest = new SaveOrderRequest
            {
                DeliveryType = DeliveryType.Unknown.ToString(),
                Voucher      = "",
                UserId       = _userSessionService.GetUserByUserToken(userId),
                GrandTotal   = userBasket.Total.InPence,
                Status       = orderStatus.ToString(),
                Orders       = userBasket.Items.ConvertAll(x => new Order
                {
                    PizzaId         = x.Pizza.Id,
                    SizeId          = x.Size.Id,
                    ExtraToppingIds = x.ExtraToppings.ConvertAll(y => y.Id),
                    SubTotal        = x.Total.InPence
                })
            };
            var saveOrderResponse = _orderRepository.SaveOrder(orderRequest);

            if (saveOrderResponse.HasError)
            {
                response.AddError(saveOrderResponse.Error);
            }

            return(response);
        }
Exemple #8
0
 public bool InsertOrder(SaveOrderRequest request)
 {
     using (SqlConnection connection = new SqlConnection(configuration["ConnectionStrings:DataBase"]))
     {
         try
         {
             connection.Open();
             string     success      = request.Success ? "1" : "0";
             string     query        = $"INSERT INTO Pedidos(Facturado, ValorTotal, Productos) VALUES ({success}, {request.TotalValue}, '{Serialize.SerializeObject(request.Request)}')";
             SqlCommand command      = new SqlCommand(query, connection);
             int        affectedRows = command.ExecuteNonQuery();
             return(affectedRows > 0);
         }
         catch (Exception)
         {
             return(false);
         }
     }
 }
Exemple #9
0
        public void SaveOrder(SaveOrderRequest request)
        {
            var staff = _staffOrderRepo.GetStaffMemberEmpNo(request.EmployeeNo);

            if (staff == null)
            {
                throw new StaffException("Staff Member does not have an employee number. Please capture it.");
            }


            Domain.Order order = new Domain.Order()
            {
                Dept        = request.Dept,
                OrderDate   = DateTime.Now,
                Description = request.Description,
                EmployeeNo  = request.EmployeeNo,
                ItemNo      = request.ItemNo,
                Mailing     = request.Mailing,
                Month       = request.Month,
                OrdCode     = request.OrdCode,
                page        = request.page,
                Price       = request.Price,
                Size        = request.Size,
                StatusID    = 1
            };

            var stock = _stockRepo.GetStock(order.ItemNo);

            if (stock == null)
            {
                throw new StaffException("Item not available.");
            }

            if (stock.QtyAvail > 0)
            {
                _staffOrderRepo.SaveOrder(order);
            }
            else
            {
                throw new StaffException("Not enough stock for this order.");
            }
        }
        public void ShouldNotCreateAnEmptyComplexTypeMember()
        {
            var source = new SaveOrderRequest
            {
                Id          = 678,
                DateCreated = DateTime.Now,
                Items       = new[]
                {
                    new SaveOrderItemRequest {
                        ProductId = 123
                    },
                    new SaveOrderItemRequest {
                        ProductId = 456
                    }
                }
            };

            var result = Mapper.Map(source).ToANew <OrderEntity>(cfg => cfg
                                                                 .WhenMapping
                                                                 .From <SaveOrderItemRequest>()
                                                                 .To <OrderItemEntity>()
                                                                 .Map(ctx => ctx.Parent.Parent.GetSource <SaveOrderRequest>().Id)
                                                                 .To(oi => oi.OrderId));

            result.DateCreated.ShouldBe(source.DateCreated);

            result.Items.Count.ShouldBe(2);

            result.Items.First().OrderId.ShouldBe(678);
            result.Items.First().ProductId.ShouldBe(123);
            result.Items.First().Product.ShouldBeNull();

            result.Items.Second().OrderId.ShouldBe(678);
            result.Items.Second().ProductId.ShouldBe(456);
            result.Items.Second().Product.ShouldBeNull();
        }
Exemple #11
0
        public void LogisticsController_HttpStatusCode_200()
        {
            //Arrange
            var IInvoiceServiceMock = new Mock <IDataBaseService>();

            IInvoiceServiceMock.Setup(m => m.InsertOrder(It.IsAny <SaveOrderRequest>()))
            .Returns(() => { return(true); });

            SaveOrderRequest payRequest = new SaveOrderRequest()
            {
                Success    = true,
                TotalValue = 200000,
                Request    = new PayRequest()
                {
                    IdUser   = 123,
                    Products = new List <ProductDto>()
                    {
                        new ProductDto()
                        {
                            Cantidad = 1, Nombre = "CPU", Precio = 2800000
                        },
                        new ProductDto()
                        {
                            Cantidad = 3, Nombre = "Monitor", Precio = 500000
                        }
                    }
                }
            };

            //Act
            LogisticsController logisticsController = new LogisticsController(IInvoiceServiceMock.Object);
            var response = logisticsController.SaveOrder(payRequest) as Microsoft.AspNetCore.Mvc.ObjectResult;

            //Assert
            Assert.AreEqual(true, response.Value);
        }
Exemple #12
0
        public void SetUp()
        {
            _database = new Mock <IDatabase>();
            _database.Setup(x => x.Query <UserRecord>()).Returns(new List <UserRecord> {
                new UserRecord {
                    Id = 1
                }
            });
            _database.Setup(x => x.Query <BasketRecord>()).Returns(new List <BasketRecord> {
                new BasketRecord {
                    Id = 1
                }
            });
            _database.Setup(x => x.Query <PizzaRecord>()).Returns(new List <PizzaRecord> {
                new PizzaRecord {
                    Id = 2
                }
            });
            _database.Setup(x => x.Query <SizeRecord>()).Returns(new List <SizeRecord> {
                new SizeRecord {
                    Id = 3
                }
            });
            _database.Setup(x => x.Query <OrderRecord>()).Returns(new List <OrderRecord> {
                new OrderRecord {
                    Id = 2
                }
            });
            _database.Setup(x => x.Query <ToppingRecord>())
            .Returns(new List <ToppingRecord> {
                new ToppingRecord {
                    Id = 4
                }
            });

            _database.Setup(x => x.Save(It.IsAny <BasketRecord>())).Returns(new BasketRecord {
                Id = 1
            });
            _database.Setup(x => x.Save(It.IsAny <OrderRecord>())).Returns(new OrderRecord {
                Id = 2
            });
            _database.Setup(x => x.Save(It.IsAny <OrderToppingRecord>())).Returns(new OrderToppingRecord {
                Id = 3
            });

            var subject          = new OrderRepository(_database.Object);
            var saveOrderRequest = new SaveOrderRequest
            {
                DeliveryType = DeliveryType.Collection.ToString(),
                GrandTotal   = 1200,
                Voucher      = "SOME_VOUCHER",
                UserId       = 1,
                Status       = OrderStatus.Complete.ToString(),
                Orders       = new List <Data.Order.Order>
                {
                    new Data.Order.Order
                    {
                        SubTotal        = 1000,
                        PizzaId         = 2,
                        SizeId          = 3,
                        ExtraToppingIds = new List <int> {
                            4
                        }
                    }
                }
            };

            _result = subject.SaveOrder(saveOrderRequest);
        }
Exemple #13
0
        public BasketCheckoutResponse Checkout(DeliveryType delivery, string voucher, string userId, OrderStatus orderStatus)
        {
            var response = new BasketCheckoutResponse();

            if (!_userSessionService.IsLoggedIn(userId))
            {
                response.AddError(new Error
                {
                    Code        = ErrorCodes.UserNotLoggedIn,
                    UserMessage = "You have to be logged in to complete your order"
                });
                return(response);
            }

            if (delivery == DeliveryType.Unknown)
            {
                response.AddError(new Error
                {
                    Code        = ErrorCodes.DeliveryTypeUnknown,
                    UserMessage = "Delivery type not specified."
                });
                return(response);
            }

            if (orderStatus == OrderStatus.Unknown)
            {
                response.AddError(new Error
                {
                    Code        = ErrorCodes.OrderStatusUnkown,
                    UserMessage = "Order status not specified."
                });
                return(response);
            }

            var userBasket = _userSessionService.GetBasketForUser(userId);

            if (!voucher.IsEmpty())
            {
                var verifyVoucherResponse = _voucherService.Verify(userBasket, new List <DeliveryType> {
                    delivery
                }, voucher);

                if (!verifyVoucherResponse.HasError)
                {
                    userBasket.Total = verifyVoucherResponse.Total;
                }
            }

            var orderRequest = new SaveOrderRequest
            {
                UserId       = _userSessionService.GetUserByUserToken(userId),
                DeliveryType = delivery.ToString(),
                Voucher      = voucher,
                GrandTotal   = userBasket.Total.InPence,
                Status       = orderStatus.ToString(),
                Orders       = userBasket.Items.ConvertAll(x => new Order
                {
                    PizzaId         = x.Pizza.Id,
                    SizeId          = x.Size.Id,
                    ExtraToppingIds = x.ExtraToppings.ConvertAll(y => y.Id),
                    SubTotal        = x.Total.InPence
                })
            };
            var saveOrderResponse = _orderRepository.SaveOrder(orderRequest);

            if (saveOrderResponse.HasError)
            {
                response.AddError(saveOrderResponse.Error);
            }

            _userSessionService.ClearBasketForUser(userId);

            return(response);
        }
Exemple #14
0
 public void SaveOrder([FromBody] SaveOrderRequest request)
 {
     _agentService.SaveOrder(request);
 }
Exemple #15
0
        public async Task <SaveOrderResponse> SaveOrderAsync(SaveOrderRequest request)
        {
            await DataAccessClient.SaveOrderAsync(request.Order, request.Items);

            return(new SaveOrderResponse());
        }