private async Task <List <string> > Validate(CreateOrderFromClient createOrderFromClient) { List <string> erros = new List <string>(); if (await CodeExist(createOrderFromClient.Code)) { erros.Add("الكود موجود مسبقاً"); } if (this._context.Countries.Find(createOrderFromClient.CountryId) == null) { erros.Add("المدينة غير موجودة"); } if (createOrderFromClient.RecipientPhones.Length == 0) { erros.Add("رقم الهاتف مطلوب"); } if (createOrderFromClient.OrderItem != null && createOrderFromClient.OrderItem.Count > 0) { foreach (var item in createOrderFromClient.OrderItem) { if (item.OrderTypeId != null) { var orderType = this._context.OrderTypes.Find(item.OrderTypeId); if (orderType == null) { erros.Add("النوع غير موجود"); break; } } } } return(erros); }
public async Task <IActionResult> Create([FromBody] CreateOrderFromClient createOrderFromClient) { var dbTransacrion = this._context.Database.BeginTransaction(); try { var validate = await this.Validate(createOrderFromClient); if (validate.Count != 0) { return(Conflict(new { messages = validate })); } var country = this._context.Countries.Find(createOrderFromClient.CountryId); var order = _mapper.Map <Order>(createOrderFromClient); order.ClientId = AuthoticateUserId(); order.CreatedBy = AuthoticateUserName(); order.DeliveryCost = country.DeliveryCost; order.CreatedBy = AuthoticateUserName(); order.MoenyPlacedId = (int)MoneyPalcedEnum.OutSideCompany; order.OrderplacedId = (int)OrderplacedEnum.Client; order.OrderStateId = (int)OrderStateEnum.Processing; order.RecipientPhones = String.Join(',', createOrderFromClient.RecipientPhones); order.IsSend = false; order.CurrentCountry = this._context.Countries.Where(c => c.IsMain == true).FirstOrDefault().Id; this._context.Add(order); this._context.SaveChanges(); var orderItem = createOrderFromClient.OrderItem; if (orderItem != null) { foreach (var item in orderItem) { int orderTypeId; if (item.OrderTypeId == null) { if (item.OrderTypeName == "") { return(Conflict()); } var similerOrderType = this._context.OrderTypes.Where(c => c.Name == item.OrderTypeName).FirstOrDefault(); if (similerOrderType == null) { var orderType = new OrderType() { Name = item.OrderTypeName, }; this._context.Add(orderType); this._context.SaveChanges(); orderTypeId = orderType.Id; } else { orderTypeId = similerOrderType.Id; } } else { orderTypeId = (int)item.OrderTypeId; } this._context.Add(new OrderItem() { OrderTpyeId = orderTypeId, Count = item.Count, OrderId = order.Id }); this._context.SaveChanges(); } } await dbTransacrion.CommitAsync(); var newOrdersDontSendCount = await this._context.Orders .Where(c => c.IsSend == false && c.OrderplacedId == (int)OrderplacedEnum.Client) .CountAsync(); AdminNotification adminNotification = new AdminNotification() { NewOrdersDontSendCount = newOrdersDontSendCount }; await _notificationHub.AdminNotifcation(adminNotification); return(Ok(_mapper.Map <OrderResponseClientDto>(order))); } catch (Exception ex) { dbTransacrion.Rollback(); _logging.WriteExption(ex); return(BadRequest()); } }