Ejemplo n.º 1
0
        public async Task <IHttpActionResult> Order(OrderRequestModel orderRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                IHttpActionResult result = Ok();

                var  userId = User.Identity.GetUserId();
                User user   = null;
                if (!string.IsNullOrEmpty(userId))
                {
                    user = users.GetById(userId);
                }

                var order = this.Mapper.Map <Order>(orderRequest);
                order.User   = user;
                order.Status = DeliveryStatus.Unpaid;

                var installationRuse  = orderRequest.InstallationRuse;
                var installationSofia = orderRequest.InstallationSofia;
                if (installationSofia)
                {
                    order.BoughtFrom = GlobalConstants.OfficeSofia;
                }
                else if (installationRuse)
                {
                    order.BoughtFrom = GlobalConstants.OfficeRuse;
                }

                if (this.orders.IsValidOrder(order))
                {
                    this.orders.Add(order);
                }
                else
                {
                    result = BadRequest("Грешка при валидацията на поръчката");
                }

                if (result is OkResult)
                {
                    string body    = orderRequest.ToString();
                    string emailTo = order.UserЕmail;
                    await emails.SendEmail(emailTo, string.Format(GlobalConstants.OrderMade, order.Id),
                                           body, GlobalConstants.SMTPServer,
                                           GlobalConstants.EmailPrimary, GlobalConstants.EmailPrimaryPassword);

                    await emails.SendEmail(GlobalConstants.EmailPrimaryProduction,
                                           string.Format(GlobalConstants.OrderMade, order.Id),
                                           body, GlobalConstants.SMTPServer,
                                           GlobalConstants.EmailPrimary, GlobalConstants.EmailPrimaryPassword);

                    if (installationSofia)
                    {
                        await emails.SendEmail(GlobalConstants.EmailSofia,
                                               string.Format(GlobalConstants.OrderMade, order.Id),
                                               body, GlobalConstants.SMTPServer,
                                               GlobalConstants.EmailPrimary, GlobalConstants.EmailPrimaryPassword);
                    }
                    else if (installationRuse)
                    {
                        await emails.SendEmail(GlobalConstants.EmailRuse,
                                               string.Format(GlobalConstants.OrderMade, order.Id),
                                               body, GlobalConstants.SMTPServer,
                                               GlobalConstants.EmailPrimary, GlobalConstants.EmailPrimaryPassword);
                    }
                }

                var orderResponse = Mapper.Map <OrderResponseModel>(order);
                result = Ok(orderResponse);

                return(result);
            }
            catch (Exception e)
            {
                HandlExceptionLogging(e, "", controllerName);
                return(InternalServerError());
            }
        }