示例#1
0
        public async Task <IActionResult> Order()
        {
            OrderViewModel              orderViewModel;                                                                 // Order view model
            OrderDetailViewModel        orderDetailViewModel;                                                           // Order detail view model
            List <OrderDetailViewModel> orderDetailViewModels = new List <OrderDetailViewModel>();                      // Order detail view model list
            List <Order>                       orders;                                                                  // Order model list
            OrderStateViewModel                orderStateViewModel = new OrderStateViewModel();                         // View model
            List <OrderDetail>                 orderDetails        = new List <OrderDetail>();                          // Order detail model list
            ProductDetail                      productDetail;                                                           // Product detail model
            ProductDetailBasicViewModel        productDetailBasicViewModel;                                             // Product detail view model
            List <ProductDetailBasicViewModel> productDetailBasicViewModels = new List <ProductDetailBasicViewModel>(); // Product detail view model list

            // Get current user
            var user = await _userManager.GetUserAsync(User);

            if (user == null)
            {
                return(RedirectToAction("SignIn", "Login"));
            }

            // Get orders of user
            orders = orderService.GetOrders(user.Id);
            if (orders.Count > 0)
            {
                foreach (var order in orders)
                {
                    // Set order
                    orderViewModel = new OrderViewModel(order);
                    productDetailBasicViewModels = new List <ProductDetailBasicViewModel>();

                    // Set product
                    orderDetails = orderDetailService.GetOrderDetails(order.Id);
                    if (orderDetails.Count > 0)
                    {
                        foreach (var orderDetail in orderDetails)
                        {
                            productDetail = productDetailService.GetOne(orderDetail.ProductDetailId);
                            productDetail.PriceNavigation = new ProductPrice();
                            productDetail.ColorNavigation = new ProductType();
                            productDetail.SizeNavigation  = new ProductType();

                            productDetailBasicViewModel = new ProductDetailBasicViewModel(productDetail);
                            productDetailBasicViewModels.Add(productDetailBasicViewModel);
                        }
                    }
                    orderDetailViewModel = new OrderDetailViewModel(orderViewModel, productDetailBasicViewModels, null);
                    orderDetailViewModels.Add(orderDetailViewModel);
                }
                orderStateViewModel.Orders         = orderDetailViewModels;                                         // Tất cả đơn hàng
                orderStateViewModel.AcceptOrders   = orderDetailViewModels.Where(o => o.Order.State == 1).ToList(); // Đơn hàng đang chờ xác nhận
                orderStateViewModel.ShippingOrders = orderDetailViewModels.Where(o => o.Order.State == 2).ToList(); // Đơn hàng đang giao
                orderStateViewModel.DoneOrders     = orderDetailViewModels.Where(o => o.Order.State == 3).ToList(); // Đơn hàng giao thành công
                orderStateViewModel.CancelOrders   = orderDetailViewModels.Where(o => o.Order.State == 0).ToList(); // Đơn hàng đã hủy
            }

            return(View(orderStateViewModel));
        }
        public async Task <IActionResult> SendEmailAsync(Guid?id, [Bind("ID", "StateAction", "Message")] OrderStateViewModel viewModel)
        {
            if (id == null)
            {
                return(NotFound());
            }

            _logger.LogDebug($"Admin/Orders/SendEmail values: id = {id}, action = {viewModel.StateAction}, message = {viewModel.Message}");

            Guid orderid = (Guid)id;

            Order order = await _context.Orders.SingleAsync(o => o.ID.Equals(orderid));

            order.IsSend       = true;
            order.Shippingdate = DateTime.Now;

            _context.Entry(order).State = EntityState.Modified;
            await _context.SaveChangesAsync();

            if (order == null)
            {
                return(NotFound());
            }

            var ordervm = await GetOrderViewModel(orderid);

            string subject = "Versand von Auftrag " + ordervm.Number;
            string email   = ordervm.EMail;
            string message = $"<p>Hallo Frau/Herr {ordervm.CutomerLastName},</p>" +
                             $"<p>ich habe die Ware zum Auftrag {ordervm.Number} vom {ordervm.OrderDate.ToShortDateString()} am {DateTime.Now.ToShortDateString()} versendet:</p>" +
                             $"<table><tr><th>Position</th><th>Artikel-Nr.</th><th>Artikelname</th><th>Menge</th></tr>";

            foreach (var item in ordervm.OderLines)
            {
                message += $"<tr><td>{item.Position}</td><td>{item.ProductNumber}</td><td>{item.ProductName}</td><td>{Math.Round(item.OrderQuantity,2)} {item.OrderUnit}</td></tr>";
            }
            message += $"</table>";
            message += $"<p><strong>Sendungsinformationen:</strong></p>";
            message += $"<p>{viewModel.Message}</p>";
            message += $"<p>Vielen Dank für den Einkauf.</p>";
            message += $"<p>Viele Gr&uuml;&szlig;e,<br /> Petra Buron</p><br />";

            var agb = await _context.ShopFiles.SingleAsync(s => s.ShopFileType == Enums.ShopFileTypeEnum.AGB);

            var wiederuf = await _context.ShopFiles.SingleAsync(s => s.ShopFileType == Enums.ShopFileTypeEnum.WRB);

            var datenschutz = await _context.ShopFiles.SingleAsync(s => s.ShopFileType == Enums.ShopFileTypeEnum.DSK);

            var attachments = new List <string> {
                agb.Filename, wiederuf.Filename, datenschutz.Filename
            };
            await _emailSender.SendEmailWithAttachmentsAsync(email, subject, message, attachments);

            return(RedirectToAction(nameof(Details), new { id = id }));
        }
        public async Task <IActionResult> MarkClosedAsync(Guid?id, [Bind("ID", "StateAction", "Message")] OrderStateViewModel viewModel)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var order = await _context.Orders.SingleAsync(o => o.ID == id);

            if (order == null)
            {
                return(NotFound());
            }

            order.IsClosed = true;
            _context.Entry(order).State = EntityState.Modified;
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(Details), new { id = id }));
        }
示例#4
0
        public async Task <IActionResult> AvailableWork(int locationNameNum, int?page)
        {
            OrderStateViewModel _model = await _orderActions.AvailableWork(locationNameNum, page);

            return(View(_model));
        }
示例#5
0
        public IActionResult FirstPickUp([Bind("OrderId, EntitiesPassed")] OrderStateViewModel model)
        {
            using (_unitOfWork)
            {
                Order           order = new Order();
                DepartmentState firstDepartmentState;

                if (!ModelState.IsValid)
                {
                    ViewBag.ErrorMessage = "Oops, something went wrong, refresh the page and try again.";
                    return(View("Error"));
                }
                if (_unitOfWork.OrderRepository.Find(o => o.OrderId == model.OrderId).Any())
                {
                    order = _unitOfWork.OrderRepository.GetById(model.OrderId);
                }
                else
                {
                    ViewBag.ErrorMessage = "Order doesn't exist.";
                    return(View("Error"));
                }

                if (order.EntitiesNotProcessed < 1)
                {
                    return(RedirectToAction("Details", new { id = model.OrderId, message = "All entities related to this order have been processed." }));
                }

                if (model.EntitiesPassed > order.EntitiesNotProcessed ||
                    model.EntitiesPassed < 1)
                {
                    return(RedirectToAction("Details", new { id = model.OrderId, message = "Number of entities must be between 1 and " + order.EntitiesNotProcessed.ToString() }));
                }

                firstDepartmentState = _unitOfWork.DepartmentStateRepository.Find(ls => ls.OrderId == order.OrderId && ls.LocationPosition == 1).FirstOrDefault();

                if (!_unitOfWork.UserRepository.HasRole(HttpContext.User.Identity.Name, GetLocationIntValue(firstDepartmentState.Name)))
                {
                    return(RedirectToAction("Logout", "Account"));
                }

                order.EntitiesNotProcessed -= model.EntitiesPassed;
                firstDepartmentState.EntitiesInProgress += model.EntitiesPassed;
                order.DepartmentStates.Add(firstDepartmentState);
                if (firstDepartmentState.Status == ((Enums.Statuses) 1).ToString())
                {
                    firstDepartmentState.Status = ((Enums.Statuses) 2).ToString();
                    firstDepartmentState.Start  = DateTime.Now;
                }
                if (order.Status != ((Enums.Statuses) 2).ToString())
                {
                    order.StartedAt = DateTime.Now;
                    order.Status    = ((Enums.Statuses) 2).ToString();
                }

                _unitOfWork.Update(order);
                _unitOfWork.Complete();

                _unitOfWork.LogRepository.CreateLog(
                    HttpContext.User.Identity.Name,
                    "Started processing " + model.EntitiesPassed.ToString() + " " + _unitOfWork.OrderRepository.GetById(model.OrderId).EntityType + " in " + firstDepartmentState.Name + ".",
                    DateTime.Now,
                    order.OrderNumber);

                return(RedirectToAction("Details", new { id = model.OrderId, messageType = 1, message = model.EntitiesPassed.ToString() + " entities successfully passed to " + firstDepartmentState.Name }));
            }
        }
示例#6
0
        public IActionResult Details(int id, int messageType = 0, string message = "")
        {
            using (_unitOfWork)
            {
                if (message != "")
                {
                    if (messageType == 1)
                    {
                        ViewBag.successMessage = message;
                    }
                    else
                    {
                        ViewBag.errorMessage = message;
                    }
                }
                Order order = _unitOfWork.OrderRepository.GetOrderAndDepartmentStatesById(id);
                //string userRole = ((UserRoles)_unitOfWork.UserRepository.GetUserByName(HttpContext.User.Identity.Name).Role).ToString();

                if (order == null)
                {
                    ViewBag.ErrorMessage = "Order doesn't exist.";
                    return(View("Error"));
                }
                string webRoot = _hostingEnvironment.WebRootPath;
                if (!Directory.Exists(webRoot + "/OrderFiles/"))
                {
                    Directory.CreateDirectory(webRoot + "/OrderFiles/");
                }
                if (!Directory.Exists(webRoot + "/OrderFiles/" + order.OrderId.ToString() + "/"))
                {
                    Directory.CreateDirectory(webRoot + "/OrderFiles/" + order.OrderId.ToString() + "/");
                }
                string[] strfiles = Directory.GetFiles(webRoot + "/OrderFiles/" + order.OrderId.ToString() + "/", "*.*");
                Dictionary <string, string> fileNamesUrls = new Dictionary <string, string>();

                if (strfiles.Length > 0)
                {
                    string fileName;
                    for (int i = 0; i < strfiles.Length; i++)
                    {
                        fileName = Path.GetFileName(strfiles[i]);

                        string _CurrentFile = strfiles[i].ToString();
                        if (System.IO.File.Exists(_CurrentFile))
                        {
                            string tempFileURL = "/OrderFiles/" + order.OrderId.ToString() + "/" + Path.GetFileName(_CurrentFile).Replace(" ", "%20");
                            fileNamesUrls.Add(Path.GetFileName(_CurrentFile), tempFileURL);
                        }
                    }
                }

                string     UserName  = HttpContext.User.Identity.Name;
                List <int> userRoles = _unitOfWork.UserRepository.GetUserRolesByUserName(UserName);
                List <int> allowedLocationPositions = new List <int>();
                foreach (DepartmentState ls in order.DepartmentStates)
                {
                    if (userRoles.Contains(GetLocationIntValue(ls.Name)) && ls.Status != ((Enums.Statuses) 3).ToString())
                    {
                        allowedLocationPositions.Add(ls.LocationPosition - 1);
                    }
                }
                OrderStateViewModel model = new OrderStateViewModel
                {
                    OrderDetails     = order,
                    AllowedPositions = allowedLocationPositions
                };
                if (fileNamesUrls.Count() > 0)
                {
                    model.FileNamesUrls = fileNamesUrls;
                }

                return(View(model));
            }
        }