public virtual ActionResult Index(string operationNumber)
        {
            Logger.GetLogger().WriteDebug("ValidationProcessController", "Method: Index - Parameters( operationNumber: " + operationNumber + ")");
            var model = new ValidationProcessModel()
            {
                ValidationProcessStatus = new List <RowValidationProcessModel>()
            };

            var cycle = _validationService.GetTCMCycleActive(operationNumber);

            model.CodeCycle       = cycle.CodeCycle;
            model.ResultsMatrixId = cycle.ResultsMatrixId;
            model.IsFinalReport   = cycle.IsFinalReport;

            if (cycle.ResultsMatrixId != 0)
            {
                var listProcessResponse = _validationService.GetProcessStatusByResultsMatrix(cycle.ResultsMatrixId);
                model.ValidationProcessStatus = listProcessResponse.ListProcessStatus;

                var validation = _validationService.GetVisibilitySubmit(listProcessResponse.ListProcessStatus);
                model.IsSubmit            = validation.IsSubmit;
                model.IsPmrRequired       = validation.IsPmrRequired;
                model.IsOperationDaughter = validation.IsOperationDaughter;
            }

            model.IsEditable = IsEditableValidationProcess(model);
            Logger.GetLogger().WriteDebug("ValidationProcessController", "Method: Index - IsEditableValidationProcess: " + model.IsEditable);

            Logger.GetLogger().WriteDebug("ValidationProcessController", "Method: Index - IsEditableValidationProcess: " + model.IsEditable);

            model.TextCodeCycle = Localization.GetText("TCM.VP.ValidationProcess.WarningMessageTop");
            Logger.GetLogger().WriteDebug("ValidationProcessController", "Method: Index - Final");

            var isCndOperation = _componentCNDService.IsCNDOperation(operationNumber);

            if (!isCndOperation.IsValid)
            {
                Logger.GetLogger().WriteDebug(
                    "ComponentCNDService",
                    "Method: IsCNDOperation - Error when checking CND operation logic; assuming false");
            }

            model.IsCndOperation =
                isCndOperation.IsValid ? isCndOperation.HasCondition : false;

            return(View(model));
        }
        public virtual ActionResult RefreshTableProcess(string operationNumber)
        {
            var model = new ValidationProcessModel()
            {
                ValidationProcessStatus = new List <RowValidationProcessModel>()
            };

            var cycle = _validationService.GetTCMCycleActive(operationNumber);

            if (cycle.ResultsMatrixId != 0)
            {
                var listProcessResponse = _validationService.GetProcessStatusByResultsMatrix(cycle.ResultsMatrixId);
                model.ValidationProcessStatus = listProcessResponse.ListProcessStatus;
            }

            return(PartialView("Partials/IndexDataTableContent", model.ValidationProcessStatus));
        }
        internal virtual bool IsEditableValidationProcess(ValidationProcessModel model)
        {
            bool tlSubmit = IDBContext.Current.HasPermission(Permission.TL_SUBMIT);

            bool tcResultMatrixAdmin = IDBContext.Current.HasPermission(
                Permission.TC_RESULTS_MATRIX_ADMIN_PERMISSION);

            bool fcCoordinator = false;

            var roles = model.ValidationProcessStatus
                        .Select(vps => vps.ValidationRole);

            foreach (var role in roles)
            {
                if (IDBContext.Current
                    .HasFundPermission(role, Permission.FC_EDIT_VALIDATION_PROCESS))
                {
                    fcCoordinator = true;
                    break;
                }
            }

            bool tcmAdminEdit = IDBContext.Current.HasPermission(
                Permission.TCM_ADMIN_EDIT_VALIDATION_PROCESS);

            bool notIsFinalReport = model.IsFinalReport.HasValue ?
                                    !model.IsFinalReport.Value : true;

            if (model.IsSubmit && (tlSubmit || tcResultMatrixAdmin))
            {
                return(!model.IsPmrRequired && !model.IsOperationDaughter);
            }

            if (!model.IsSubmit && tcmAdminEdit)
            {
                return(true);
            }

            if (!model.IsSubmit && fcCoordinator)
            {
                return(notIsFinalReport);
            }

            return(false);
        }