public async Task <IActionResult> Details(string id, string itemNumber, int quantity, int rowID, string remark, int createNewVoucherItemModalName, int voucherItemModalName, string itemSubmitted, string itemSavedToDraft, string rejectVoucher, string approveBySup, string approveByMan)
        {
            ADTeam5User user = await _userManager.GetUserAsync(HttpContext.User);

            List <string> identity = userCheck.checkUserIdentityAsync(user);
            int           userID   = user.WorkID;
            string        userRole = identity[1];

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

            //ViewBag for voucher price
            decimal?amount = b.GetTotalAmountForVoucher(id);
            decimal?GST    = Math.Round((decimal)(amount * (decimal?)0.07), 2);

            ViewBag.Amount      = amount;
            ViewBag.GST         = GST;
            ViewBag.TotalAmount = amount + GST;

            //ViewData for voucherNo
            ViewData["VoucherNo"] = id;

            //handle post action
            List <AdjustmentRecordDetails> adjustmentRecordDetailsList = b.GetAdjustmentRecordDetails(id);

            if (createNewVoucherItemModalName == 1)
            {
                b.CreateNewVoucherItem(userID, id, itemNumber, quantity, remark);
                return(RedirectToAction(nameof(Details)));
            }
            else if (voucherItemModalName == 1)
            {
                b.UpdateVoucherItem(rowID, quantity, remark, adjustmentRecordDetailsList);
            }

            if (itemSubmitted == "1")
            {
                //changestatus to pending approval
                b.UpdateRecordStatus("Pending Approval", "AdjustmentRecord", id);
                return(RedirectToAction(nameof(Index)));
            }
            else if (itemSavedToDraft == "1")
            {
                //change status to draft
                b.UpdateRecordStatus("Draft", "AdjustmentRecord", id);
                return(RedirectToAction(nameof(Index)));
            }

            if (rejectVoucher == "1")
            {
                var ar = _context.AdjustmentRecord.FirstOrDefault(x => x.VoucherNo == id);
                if (ar != null)
                {
                    //changestatus to reject
                    b.RejectVoucher(userID, userRole, id);
                }
                return(RedirectToAction(nameof(Index)));
            }
            else if (approveBySup == "1")
            {
                //change status to draft
                b.ApproveVoucher(userID, userRole, id);
                return(RedirectToAction(nameof(Index)));
            }
            else if (approveByMan == "1")
            {
                //change status to draft
                b.ApproveVoucher(userID, userRole, id);
                return(RedirectToAction(nameof(Index)));
            }

            //Viewbag for category dropdown list, need to post back
            List <Catalogue> categoryList = new List <Catalogue>();
            var q = _context.Catalogue.GroupBy(x => new { x.Category }).Select(x => x.FirstOrDefault());

            foreach (var item in q)
            {
                categoryList.Add(item);
            }
            categoryList.Insert(0, new Catalogue {
                ItemNumber = "0", Category = "---Select Category---"
            });
            ViewBag.ListofCategory = categoryList;

            //ViewBag for record status
            ViewBag.AdjustmentRecordStatus = _context.AdjustmentRecord.FirstOrDefault(x => x.VoucherNo == id).Status;

            List <AdjustmentRecordDetails> result = b.GetAdjustmentRecordDetails(id);

            return(View(result));
        }