/// <summary>
        ///  Page with items that need to be created first
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public async Task <IActionResult> ItemsToBeCreatedInExact(int Id)
        {
            // Check if order exists
            var order = _context.ExactOrders
                        .Include(nameof(ExactOrder.Lines) + "." + nameof(ExactOrderLine.Item))
                        .Include(nameof(ExactOrder.Supplier))
                        .FirstOrDefault(x => x.Id == Id);

            if (order == null || order.Lines == null)
            {
                return(RedirectToAction(nameof(Index), new { sm = StateMessage.FailedMissingInfo }));
            }

            // Check if user exists
            var user = _dbHelper.GetUser(_context, User.Identity.Name);

            if (user == null)
            {
                return(RedirectToAction("LogOut", "Account"));
            }

            var vm = new ItemsToBeCreatedVM();

            ExactOnlineConnect.data.Context     = _context;
            ExactOnlineConnect.data.AccessToken = user.Token;

            var itemsInExact = await ExactOnlineConnect.data.GetItems(user.DivisionId);

            vm.SupplierName = order.Supplier.Name;
            vm.Items        = (_exactHelper.GetToBeCreatedItems(itemsInExact, order.Lines.Select(x => x.Item).ToList(), user, null, order.Lines));
            var itemgroups = await ExactOnlineConnect.data.GetItemGroups(user.DivisionId);

            vm.ItemGroups = _exactHelper.ItemGroupsToSelectList(itemgroups).OrderBy(x => x.Value == user.ItemGroupId.ToString()).ToList();
            vm.OrderId    = order.Id;

            if (!vm.Items.Any())
            {
                order.ItemsAreInExact = true;
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Order), new { Id = vm.OrderId }));
            }

            return(View(vm));
        }
        public async Task <IActionResult> CreateToBeCreatedItems(ItemsToBeCreatedVM vm)
        {
            // Check if order exists
            var order = _context.ExactOrders
                        .Include(nameof(ExactOrder.Lines) + "." + nameof(ExactOrderLine.Item))
                        .Include(nameof(ExactOrder.DBUser))
                        .FirstOrDefault(x => x.Id == vm.OrderId);

            if (order == null || order.Lines == null)
            {
                return(RedirectToAction(nameof(Index), new { sm = StateMessage.FailedOrderDoesNotExist }));
            }

            // Check if user exists
            var user = _dbHelper.GetUser(_context, User.Identity.Name);

            if (user == null)
            {
                return(RedirectToAction("LogOut", "Account"));
            }

            ExactOnlineConnect.data.Context     = _context;
            ExactOnlineConnect.data.AccessToken = user.Token;

            // Create missing Items within Exact Online
            foreach (var x in vm.Items)
            {
                var storedItem = await ExactOnlineConnect.data.StoreItem(user.DivisionId, x);

                var tempOrder = order.Lines
                                .FirstOrDefault(y => y.Item.Name == x.Description);
                var supplierItem = new SupplierItem
                {
                    Item          = storedItem.ID,
                    PurchasePrice = tempOrder.AmountDC,
                    PurchaseUnit  = "PC",
                    Supplier      = new Guid(user.SupplierId),
                };

                // Set new item values
                var dbItem = _context.ExactItems
                             .FirstOrDefault(y =>
                                             y.Name == x.Description &&
                                             y.ExactUserId.ToString() == user.CreatorId &&
                                             y.SupplierId.ToString() == user.SupplierId);

                dbItem.Description = storedItem.ExtraDescription;
                dbItem.ExactID     = storedItem.ID;
                dbItem.Code        = storedItem.Code;
                dbItem.IsComplete  = true;
                dbItem.MessageSeen = false;

                var storedSupplierItem = await ExactOnlineConnect.data.StoreSupplierItem(user.DivisionId, supplierItem);
            }

            // Set SalesItemPrice
            var salesItemPrices = await ExactOnlineConnect.data.GetSalesItemPrices(user.DivisionId);

            order.ItemsAreInExact = true;
            await _context.SaveChangesAsync();

            return(RedirectToAction(nameof(Order), new { Id = vm.OrderId }));
        }