/// <summary>
 /// Function to retrieve index page.
 /// </summary>
 /// <returns>Index page</returns>
 public ActionResult Index()
 {
     this.AddBreadcrumbItem(Resources.ProjectCompliance, Url.ProjectComplianceAction());
     ProjectCompliancePresenter presenter = new ProjectCompliancePresenter();
     this.AssignValues(presenter);
     presenter.AssignSelectedReleaseTypes(presenter.ReleaseTypeList.Where(r => r.ID == (byte)ReleaseType.UAT).ToList());
     presenter.AssignSelectedArtifactsList(presenter.ArtifactStatusList);
     return this.View(presenter);
 }
        public ActionResult Index(ProjectCompliancePresenter presenter)
        {
            this.AddBreadcrumbItem(Resources.ProjectCompliance, Url.ProjectComplianceAction());
            if (presenter == null)
            {
                return null;
            }

            this.AssignValues(presenter);

            IList<int> selectedArtifactsList = null;
            IList<int> selectedReleaseTypeList = null;
            if (!string.IsNullOrEmpty(presenter.SelectedArtifactStatusIds))
            {
                selectedArtifactsList = presenter.SelectedArtifactStatusIds.Split(',').Select(s => Convert.ToInt32(s, CultureInfo.CurrentCulture)).ToList();
                presenter.AssignSelectedArtifactsList(presenter.ArtifactStatusList.Where(artifact => selectedArtifactsList.Contains(artifact.ID)).ToList());
            }

            if (!string.IsNullOrEmpty(presenter.SelectedReleaseTypeIds))
            {
                selectedReleaseTypeList = presenter.SelectedReleaseTypeIds.Split(',').Select(s => Convert.ToInt32(s, CultureInfo.CurrentCulture)).ToList();
                presenter.AssignSelectedReleaseTypes(presenter.ReleaseTypeList.Where(releaseType => selectedReleaseTypeList.Contains(releaseType.ID)).ToList());
            }

            var artifactList = this.projectArtifactService.RetrieveList(presenter.SelectedProjectId, selectedReleaseTypeList, selectedArtifactsList, SessionData.Instance.UserInfo.Developer.DeveloperID);
            (from artifact in artifactList
             from artifactStatus in presenter.ArtifactStatusList
             where artifact.Status == artifactStatus.ID
             select MapProcessComplianceStatusTitle(artifactStatus, artifact)).ToList();

            AssignProjectArtifactList(presenter, artifactList);

            AssignReleaseArtifactList(presenter, artifactList);

            return this.View(presenter);
        }
 /// <summary>
 /// Decodes the raw text.
 /// </summary>
 /// <param name="presenter">The presenter.</param>
 private static void DecodeRawText(ProjectCompliancePresenter presenter)
 {
     presenter.ProcessComplianceItem.Comment = !string.IsNullOrEmpty(presenter.ProcessComplianceItem.Comment) ? WebUtility.HtmlDecode(presenter.ProcessComplianceItem.Comment) : presenter.ProcessComplianceItem.Comment;
 }
 /// <summary>
 /// Assigns the values.
 /// </summary>
 /// <param name="presenter">The presenter.</param>
 private void AssignValues(ProjectCompliancePresenter presenter)
 {
     presenter.AssignReleaseTypes(this.lookupService.RetrieveReleaseTypes(SessionData.Instance.UserInfo.Developer.DeveloperID));
     presenter.AssignArtifactStatus(this.lookupService.RetrieveArtifactStatusTypes(SessionData.Instance.UserInfo.Developer.DeveloperID));
     presenter.AssignProjects(this.lookupService.RetrieveProjects(null, default(int), false, false, SessionData.Instance.UserInfo.Developer.DeveloperID));
     presenter.Projects.ForEach(p => { p.ProjectName = p.ProjectFullName; });
 }
        /// <summary>
        /// Assigns the project artifact list.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="artifactList">The artifact list.</param>
        private static void AssignProjectArtifactList(ProjectCompliancePresenter presenter, IList<ProcessComplianceListItem> artifactList)
        {
            int nodeIndex = 0;
            var groupedList = artifactList.OrderBy(a => a.Squence)
                .Where(a => a.ArtifactType == (byte)ArtifactType.Project)
                             .GroupBy(u => u.FunctionalArea)
                             .Select(grp => new ProcessComplianceListItem { FunctionalArea = grp.Key, Items = grp.ToList() })
                             .ToList();

            groupedList.ForEach(g => { g.NodeIndex = nodeIndex; nodeIndex++; });
            presenter.AssignProjectArtifactList(groupedList);
        }
        /// <summary>
        /// Assigns the release artifact list.
        /// </summary>
        /// <param name="presenter">The presenter.</param>
        /// <param name="artifactList">The artifact list.</param>
        private static void AssignReleaseArtifactList(ProjectCompliancePresenter presenter, IList<ProcessComplianceListItem> artifactList)
        {
            int nodeIndexRelease = 0;
            var groupedListRelease = artifactList.OrderBy(a => a.Squence)
                .Where(a => a.ArtifactType == (byte)ArtifactType.Release)
                             .GroupBy(u => new { buiildNumber = u.BuildFullNumber, releaseType = u.Environment, releaseDate = u.StartDate, calendarId = u.ReleaseCalendarID })
                             .Select(grp => new ProcessComplianceListItem { BuildNumber = grp.Key.buiildNumber, ReleaseCalendarID = grp.Key.calendarId, Environment = grp.Key.releaseType, StartDate = grp.Key.releaseDate, Items = grp.ToList() })
                             .OrderByDescending(g => g.StartDate)
                             .ToList();

            groupedListRelease.ForEach(g => { g.NodeIndex = nodeIndexRelease; nodeIndexRelease++; });
            presenter.AssignReleaseArtifactList(groupedListRelease);
            (from artifact in presenter.ReleaseArtifactList
             from releaseType in presenter.ReleaseTypeList
             where artifact.Environment == releaseType.ID
             select MapProcessComplianceEnvironmentTitle(releaseType, artifact)).ToList();
        }
        private static void ValidateDetails(ProjectCompliancePresenter presenter)
        {
            if (presenter.ProcessComplianceItem.Status == null)
            {
                presenter.ValidationErrors.Add(ArtifactId, @Resources.SelectStatusErrorMessage);
            }

            var dateNow = DateTimeHelper.RetrieveCurrentDate();
            if (presenter.ProcessComplianceItem.DueDate < dateNow)
            {
                presenter.ValidationErrors.Add(DueDate, @Resources.ValidDateErrorMessage);
            }
        }
 public ActionResult ValidateProjectComplianceDetails(ProjectCompliancePresenter presenter)
 {
     ValidateDetails(presenter);
     return new JsonResult { Data = presenter, MaxJsonLength = int.MaxValue };
 }
        public ActionResult SubmitDetails(ProjectCompliancePresenter presenter)
        {
            if (presenter != null)
            {
                DecodeRawText(presenter);
                this.projectArtifactService.InsertOrUpdate(presenter.ProcessComplianceItem, SessionData.Instance.UserInfo.Developer.DeveloperID);
            }

            return new JsonResult { Data = true, MaxJsonLength = int.MaxValue };
        }