public async Task <ActionResult> CommitContractServiceAsync(CourseContractViewModel viewModel)
        {
            String storedPath = null;

            if (Request.Form.Files.Count > 0)
            {
                storedPath = Path.Combine(FileLogger.Logger.LogDailyPath, Guid.NewGuid().ToString() + Path.GetExtension(Request.Form.Files[0].FileName));
                Request.Form.Files[0].SaveAs(storedPath);
            }
            var item = await viewModel.CommitContractServiceAsync(this, storedPath);

            if (item == null)
            {
                if (!ModelState.IsValid)
                {
                    return(View(ConsoleHomeController.InputErrorView));
                }
                else
                {
                    return(View("~/Views/ConsoleHome/Shared/AlertMessage.cshtml", model: ModelState.ErrorMessage()));
                }
            }

            return(View("~/Views/ContractConsole/Editing/ContractServiceCommitted.cshtml", item));
        }
        public async Task <ActionResult> EnableContractStatusAsync(CourseContractViewModel viewModel)
        {
            var profile = await HttpContext.GetUserAsync();

            if (viewModel.KeyID != null)
            {
                viewModel.ContractID = viewModel.DecryptKeyValue();
            }
            var item = models.GetTable <CourseContract>().Where(c => c.ContractID == viewModel.ContractID).FirstOrDefault();

            if (item != null)
            {
                var pdfFile = item.MakeContractEffective(models, profile, Naming.CourseContractStatus.待審核);
                if (pdfFile == null)
                {
                    return(View("~/Views/ConsoleHome/Shared/AlertMessage.cshtml", model: "合約狀態錯誤,請重新檢查!!"));
                }
                else
                {
                    return(View("~/Views/ContractConsole/Editing/CourseContractSigned.cshtml", item));
                }
            }
            else
            {
                return(View("~/Views/ConsoleHome/Shared/AlertMessage.cshtml", model: "合約資料錯誤!!"));
            }
        }
        public async Task <ActionResult> CommitContractAsync(CourseContractViewModel viewModel)
        {
            CourseContract item = null;

            try
            {
                item = await viewModel.CommitCourseContractAsync(this, true);
            }
            catch (Exception ex)
            {
                var logger = ServiceProvider.GetRequiredService <ILogger <ContractConsoleController> >();
                logger.LogError(ex, ex.Message);
                ModelState.AddModelError("Message", ex.Message);
            }

            if (item == null)
            {
                if (!ModelState.IsValid)
                {
                    ViewBag.AlertError = true;
                    return(View(ConsoleHomeController.InputErrorView));
                }
                else
                {
                    return(View("~/Views/ConsoleHome/Shared/AlertMessage.cshtml", model: ModelState.ErrorMessage()));
                }
            }

            return(View("~/Views/ContractConsole/Editing/CourseContractCommitted.cshtml", item));
        }
        public async Task <ActionResult> EnableContractAmendmentAsync(CourseContractViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            var item = await viewModel.EnableContractAmendmentAsync(this, viewModel.FromStatus);

            if (item == null)
            {
                return(View("~/Views/ConsoleHome/Shared/AlertMessage.cshtml", model: ModelState.ErrorMessage()));
            }

            return(View("~/Views/ContractConsole/Editing/ContractStatusChanged.cshtml", item));
        }
        public ActionResult EnableContractAmendment(CourseContractViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            var item = viewModel.EnableContractAmendment(this, out String alertMessage, viewModel.FromStatus);

            if (item == null)
            {
                return(View("~/Views/ConsoleHome/Shared/AlertMessage.cshtml", model: alertMessage));
            }

            return(View("~/Views/ContractConsole/Editing/ContractStatusChanged.cshtml", item));
        }
        public ActionResult ContractAmendmentApprovalView(CourseContractViewModel viewModel)
        {
            ViewResult result = (ViewResult)ViewContractAmendment(viewModel);

            if (result.Model is CourseContractRevision)
            {
                var item    = (CourseContractRevision)result.Model;
                var profile = HttpContext.GetUser();
                ViewBag.ContractAgent  = profile;
                ViewBag.ContractAction = "~/Views/CourseContract/Module/ContractAmendmentApproval.ascx";
            }
            return(result);
        }
        public async Task <ActionResult> ExecuteContractStatusAsync(CourseContractViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;

            var item = await viewModel.ExecuteContractStatusAsync(this);

            if (item == null)
            {
                if (!ModelState.IsValid)
                {
                    return(View(ConsoleHomeController.InputErrorView));
                }
                else
                {
                    return(View("~/Views/ConsoleHome/Shared/AlertMessage.cshtml", model: ModelState.ErrorMessage()));
                }
            }
            else if (viewModel.FromStatus == Naming.CourseContractStatus.待審核 && viewModel.Status == (int)Naming.CourseContractStatus.待簽名)
            {
                if (item.InstallmentID.HasValue)
                {
                    var            contractItems = item.ContractInstallment.CourseContract.ToArray();
                    CourseContract nextItem      = null;
                    int            idx           = 0;
                    for (; idx < contractItems.Length; idx++)
                    {
                        if (contractItems[idx].Status == (int?)viewModel.FromStatus && contractItems[idx].ContractID != item.ContractID)
                        {
                            nextItem = contractItems[idx];
                            break;
                        }
                    }

                    if (nextItem != null)
                    {
                        viewModel.UrlAction    = Url.Action("SignCourseContract", "ConsoleHome");
                        viewModel.KeyID        = nextItem.ContractID.EncryptKey();
                        viewModel.AlertMessage = $"總共有{contractItems.Length}張分期合約,請繼續第{idx+1}張分期合約的審核!!";
                        return(View("~/Views/ConsoleHome/Shared/ViewModelCommitted.cshtml", viewModel));
                    }
                }
            }

            return(View("~/Views/ContractConsole/Editing/ContractStatusChanged.cshtml", item));
        }