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