/// <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 })); }