예제 #1
0
        public WriteResult Create(OrderDTO orderDTO)
        {
            var result = new WriteResult
            {
                IsSuccess = true
            };

            try
            {
                #region Validation
                var validationResult = _orderValidator.ValidateCreate(orderDTO);
                if (!validationResult.IsSuccess)
                {
                    return(_mapper.Map <WriteResult>(validationResult));
                }
                #endregion

                #region Create Order
                var order       = _mapper.Map <Order>(orderDTO);
                var resultOrder = _orderUnitOfWork.OrderRepository.Create(order);

                #region Reduce Quntity
                orderDTO.OrderDetail.ForEach(a =>
                {
                    if (a.ProductId.HasValue)
                    {
                        _orderUnitOfWork.ProductRepository.ReduceQuntity(a.ProductId.Value, a.Quantity.GetValueOrDefault());
                    }
                });
                #endregion

                #endregion

                #region Save Changes
                _orderUnitOfWork.Save();
                #endregion

                #region Send Alert
                var account  = _orderUnitOfWork.AccountRepository.Get(order.AccountId);
                var alertDTO = new OrderComfirmationAlertDTO
                {
                    Email           = account.Email
                    , OrderNumber   = order.OrderNumber
                    , OrderProducts = _mapper.Map <List <OrderDetailDTO> >(order.OrderDetail.ToList())
                };
                _appCacheService.MailService.SendOrderConfirmation(alertDTO);
                #endregion
            }
            catch (Exception ex)
            {
                result.IsSuccess = false;
                result.Message   = ex.Message;
            }
            return(result);
        }
        public OrderDTO PushOrder(PushOrderCommand pushOrderCommand)
        {
            //Check phone number in black list base
            if (_contactService.IsPhoneLocked(pushOrderCommand.PhoneNumber))
            {
                throw new PhoneIsLockedException("Phone number is locked");
            }

            //Create order from factory
            var order = _orderFactory.CreateOrder(pushOrderCommand.PhoneNumber,
                                                  pushOrderCommand.TargetStartDate,
                                                  pushOrderCommand.TargetEndDate,
                                                  pushOrderCommand.MenuItemsNames);

            //Check total order cost
            if (order.GetTotalPrice() > _config.MaxOrderCost.Value)
            {
                throw new MaximumValueExceededException("Exceeded of the maximum price value of the order");
            }

            //Reservation in memory before long operation
            //Throw TimeMapTrayFullException when target tray is full (Check Time map before saving)
            _timeMapService.RegisterCreatedOrder(order);

            try
            {
                //Save the order
                _ordersDatabase.Orders.Create(order);
                foreach (var orderLine in order.OrderLines.ToList <OrderLine>())
                {
                    _ordersDatabase.OrderLines.Create(orderLine);
                }
                _ordersDatabase.Save();
            }
            catch (DataBaseOperationException ex)
            {
                _timeMapService.UnegisterCreatedOrder(order);

                throw new ApplicationException("Order not saved due to problems with database.", ex);
            }

            var orderDTO = GetDTO(order);

            return(orderDTO);
        }
예제 #3
0
        public IActionResult Orders_Create([DataSourceRequest] DataSourceRequest request, Order product)
        {
            try
            {
                if (product != null && ModelState.IsValid)
                {
                    work.Begin();
                    work.OrderRepo.Add(product);
                    work.Save();
                    work.End();
                    log.Info($"Info in Class: {MethodBase.GetCurrentMethod().ReflectedType.Name} function: {MethodBase.GetCurrentMethod().Name}.\nAdded element");
                }
                else
                {
                    throw new Exception("The entered data are wrong");
                }
            }
            catch (Exception e)
            {
                log.Error($"Error in Class: {MethodBase.GetCurrentMethod().ReflectedType.Name} function: {MethodBase.GetCurrentMethod().Name}.\nThe item was not added" + e.Message);
            }

            return(Ok(new[] { product }.ToDataSourceResult(request, ModelState)));
        }