/// <summary>
        /// Function to edit release.
        /// </summary>
        /// <param name="calendarId">The calendar id</param>
        /// <returns>Edit view</returns>
        public ActionResult Edit(string calendarId)
        {
            ReleaseCalendarPresenter presenter = new ReleaseCalendarPresenter();
            presenter.IsEdit = "true";

            if (!string.IsNullOrEmpty(calendarId))
            {
                presenter.ReleaseCalendar = this.releaseService.LoadById(Convert.ToInt32(calendarId, CultureInfo.CurrentCulture));
                presenter.OldProjectId = presenter.ReleaseCalendar.ProjectID;
                presenter.ActualStartDate = presenter.ReleaseCalendar.StartDate.ToString("M/d/yyyy h:mm tt");
                presenter.IsEditable = LookupService.IsReleaseEditable(presenter.ReleaseCalendar.Status);
                if (presenter.IsEditable != true || presenter.ReleaseCalendar.Status != 1)
                {
                    return this.Redirect(RetrieveItemAddress(Url.ViewReleaseAction(), presenter.ReleaseCalendar.ReleaseCalendarID));
                }

                this.AssignValuesToPresenter(presenter);
                presenter.ProjectsExcludePipeline.ForEach(p => { p.ProjectName = p.ProjectFullName; });

                var historyListItems = this.releaseService.RetrieveHistory(Convert.ToInt32(calendarId, CultureInfo.CurrentCulture));
                if (historyListItems != null && historyListItems.Count > 0)
                {
                    AssignHistoryItems(presenter, historyListItems);
                }

                presenter.AssignArtifacts(this.lookupService.RetrieveReleaseArtifactList(presenter.ReleaseCalendar.ReleaseCalendarID, SessionData.Instance.UserInfo.Developer.DeveloperID));
                AssignReleaseArtifactList(presenter);
                AssignProjectArtifactList(presenter);

                presenter.IsSendNotification = presenter.ReleaseCalendar.Environment == (byte)ReleaseType.Production ? true : false;
                presenter.SelectedReleaseStatus = presenter.ReleaseCalendar.Status;
                presenter.OldEndDate = presenter.ReleaseCalendar.EndDate.Value.ToString("M/d/yyyy h:mm tt");

                this.AddBreadcrumbItem(Resources.ReleaseCalendar, RetrieveCalendarAddress(Url.ReleaseCalendarAction(), presenter.ReleaseCalendar.StartDate));
                this.AddBreadcrumbItem(Resources.DayView, RetrieveCalendarAddress(Url.DayViewAction(), presenter.ReleaseCalendar.StartDate));
                this.AddBreadcrumbItem(Resources.ViewRelease, RetrieveItemAddress(Url.ViewReleaseAction(), presenter.ReleaseCalendar.ReleaseCalendarID));
                this.AddBreadcrumbItem(Resources.EditRelease, Url.EditReleaseAction());
            }

            if (presenter.ReleaseCalendar == null)
            {
                return this.Redirect(Url.AddReleaseAction());
            }

            return this.View("InsertOrUpdate", presenter);
        }
        public ActionResult SubmitDetails(ReleaseCalendarPresenter presenter)
        {
            if (presenter != null)
            {
                presenter.Artifacts.Clear();

                var list = presenter.ReleaseArtifactList.SelectMany(p => p.Items).ToList()
                    .Union(presenter.ProjectArtifactList.SelectMany(p => p.Items).ToList()).ToList();
                presenter.AssignArtifacts(list);

                DecodeRawText(presenter);
                presenter.ReleaseCalendar.SendNotificationStatus = presenter.IsSendNotification ? SendNotificationValue : DoNotSendNotificationValue;
                if (presenter.IsEdit.Equals("false"))
                {
                    presenter.ReleaseCalendar.EndDate = presenter.ReleaseCalendar.EndDate.HasValue ? presenter.ReleaseCalendar.EndDate : presenter.ReleaseCalendar.StartDate.AddMinutes(30);
                    presenter.ReleaseCalendar.Status = (byte)ReleaseStatus.Planned;
                    this.releaseService.InsertOrUpdate(presenter.ReleaseCalendar, presenter.Artifacts, null, SessionData.Instance.UserInfo.Developer.DeveloperID, presenter.OldProjectId);
                }
                else
                {
                    this.releaseService.InsertOrUpdate(presenter.ReleaseCalendar, presenter.Artifacts, null, SessionData.Instance.UserInfo.Developer.DeveloperID, presenter.OldProjectId);
                }
            }

            return this.Json(string.Empty);
        }
        /// <summary>
        /// Function to add new release.
        /// </summary>
        /// <param name="date">Current date details.</param>
        /// <param name="projectId">Current project Id.</param>
        /// <returns>Add view</returns>
        public ActionResult Add(string date, int? projectId)
        {
            DateTime dateTime = ConvertToDateTime(date);
            this.AddBreadcrumbItem(Resources.ReleaseCalendar, RetrieveCalendarAddress(Url.ReleaseCalendarAction(), dateTime));
            this.AddBreadcrumbItem(Resources.DayView, RetrieveCalendarAddress(Url.DayViewAction(), dateTime));
            this.AddBreadcrumbItem(Resources.AddRelease, Url.AddReleaseAction());

            var applicationSettings = DependencyInjectionContainer.Instance.Container.Resolve<ApplicationSettings>();
            ReleaseCalendarPresenter presenter = new ReleaseCalendarPresenter() { ReleaseCalendar = new ReleaseCalendar() };
            presenter.ReleaseCalendar.StartDate = dateTime.Date.Add(applicationSettings.DefaultReleaseStartTime);
            presenter.ReleaseCalendar.EndDate = presenter.ReleaseCalendar.StartDate.Add(applicationSettings.DefaultEndTimeDuration);
            presenter.ReleaseCalendar.ProjectID = projectId.HasValue ? projectId.Value : presenter.ReleaseCalendar.ProjectID;
            this.AssignValuesToPresenter(presenter);

            var timeZone = presenter.TimeZoneList.FirstOrDefault(t => t.TimeZoneID == SessionData.Instance.UserInfo.Developer.TimeZoneID);
            presenter.ReleaseCalendar.TimeZoneID = timeZone != null ? timeZone.TimeZoneID : presenter.ReleaseCalendar.TimeZoneID;
            presenter.ProjectsExcludePipeline.ForEach(p => { p.ProjectName = p.ProjectFullName; });

            var result = this.lookupService.RetrieveReleaseArtifactList(null, SessionData.Instance.UserInfo.Developer.DeveloperID);
            result.Where(item => item.ArtifactType.Value == ArtifactType.Release).ToList().ForEach(item => item.IsSelected = true);
            presenter.AssignArtifacts(result);
            AssignReleaseArtifactList(presenter);
            AssignProjectArtifactList(presenter);

            return this.View("InsertOrUpdate", presenter);
        }
 /// <summary>
 /// Assigns the artifact list.
 /// </summary>
 /// <param name="presenter">The presenter.</param>
 private void AssignArtifactList(ReleaseCalendarPresenter presenter)
 {
     presenter.AssignArtifacts(this.lookupService.RetrieveReleaseArtifactList(presenter.ReleaseListItem.ReleaseCalendarID, SessionData.Instance.UserInfo.Developer.DeveloperID).Where(g => g.IsSelected == true).ToList());
     AssignViewReleaseArtifactList(presenter);
     AssignViewProjectArtifactList(presenter);
 }