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