public HttpResponseMessage CompleteOrder(CompleteOrderDTO request) { HttpResponseMessage responseMessage; JSendMessage json; var token = Request.Headers.SingleOrDefault(x => x.Key == "token").Value.First(); try { var userId = db.Tokens.First(u => u.TokenString.Equals(token))?.UserId; if (userId > 0) { var order = db.Orders.FirstOrDefault(o => o.OrderId == request.OrderId); if (request.PaymentStatus) { order.TransactionId = request.TransactionId; order.PaymentMethod = request.PaymentMethod; db.Orders.Update(order); db.SaveChanges(); var InvoiceLogic = new InvoiceLogic(db); var invoice = InvoiceLogic.CreateInvoice(order); order.Invoice = invoice.ToArray(); db.Orders.Update(order); db.SaveChanges(); var productList = new List <Products>(); var productOrdersList = db.ProductsOrders.Where(p => p.OrderId == request.OrderId).ToList(); foreach (var requestProduct in productOrdersList) { var product = db.Products.Find(requestProduct.ProductId); if (product?.ProductId > 0) { productList.Add(product); } } var OrderLogic = new OrderLogic(db); OrderLogic.SendOrderEmail(order, productList, invoice); order.MailSent = true; db.Orders.Update(order); db.SaveChanges(); OrderLogic.SendOrderEmailToAdmin(order, productList, invoice); json = new JSendMessage("success", "Order successfully added"); } else { db.Orders.Remove(order); json = new JSendMessage("success", "Order canceled"); } responseMessage = Request.CreateResponse(HttpStatusCode.OK, json); } else { responseMessage = Request.CreateResponse(HttpStatusCode.BadRequest); } } catch (Exception) { responseMessage = Request.CreateResponse(HttpStatusCode.BadRequest); return(responseMessage); } return(responseMessage); }
// POST: api/Orders public HttpResponseMessage PostOrders(AddOrderDTO request) { HttpResponseMessage responseMessage; var token = Request.Headers.SingleOrDefault(x => x.Key == "token").Value.First(); try { var userId = db.Tokens.First(u => u.TokenString.Equals(token))?.UserId; if (userId > 0) { var order = new Orders { Date = DateTime.Now, UserId = userId.Value, FirstName = request.UserDetails.FirstName, LastName = request.UserDetails.LastName, State = request.UserDetails.State, Address = request.UserDetails.StreetAddress, City = request.UserDetails.City, ZipCode = request.UserDetails.ZipCode, Phone = request.UserDetails.Phone, Email = request.UserDetails.Email, Currency = request.Currency, Lang = request.Lang, TransactionId = request.TransactionId, ProductsOrders = new List <ProductsOrders>() }; db.Orders.Add(order); db.SaveChanges(); double subtotal = 0; var productList = new List <Products>(); foreach (var requestProduct in request.CartProducts) { var product = db.Products.Find(requestProduct.Key); if (product?.ProductId > 0) { var productsOrders = new ProductsOrders { ProductId = product.ProductId, ProductPrice = GetCurrencyPrice(product, order.Currency), Amount = requestProduct.Value, OrderId = order.OrderId, Currency = order.Currency, ProductProduct = product, Code = product.StyleCode + " " + product.Colour }; subtotal += productsOrders.ProductPrice * productsOrders.Amount; order.ProductsOrders.Add(productsOrders); productList.Add(product); } } order.Subtotal = subtotal; order.Shipping = 0; order.PaymentMethod = request.PaymentMethod; db.Orders.Update(order); db.SaveChanges(); var InvoiceLogic = new InvoiceLogic(db); var invoice = InvoiceLogic.CreateInvoice(order); order.Invoice = invoice.ToArray(); db.Orders.Update(order); db.SaveChanges(); var OrderLogic = new OrderLogic(db); OrderLogic.SendOrderEmail(order, productList, invoice); order.MailSent = true; db.Orders.Update(order); db.SaveChanges(); OrderLogic.SendOrderEmailToAdmin(order, productList, invoice); } } catch (DbUpdateException) { responseMessage = Request.CreateResponse(HttpStatusCode.BadRequest); return(responseMessage); } var json = new JSendMessage("success", "Order successfully added"); responseMessage = Request.CreateResponse(HttpStatusCode.OK, json); return(responseMessage); }