示例#1
0
        /// <summary>
        /// Show more information about an action
        /// Routing create to be able to access as: /Action/Id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public async Task <ActionResult> Details(int?PublishModeFilter, int?id, bool computeReadNext = false, bool partial = false)
        {
            if (!id.HasValue)
            {
                return(HttpNotFound());
            }

            var action = await _prepareService.GetPublishedAction(id.Value);

            if (action == null)
            {
                return(HttpNotFound());
            }

            var publication = await _prepareService.GetLightPublication(action.Publication.PublicationId);

            ViewBag.ComputeReadNext   = computeReadNext;
            ViewBag.publishModeFilter = PublishModeFilter.Value;

            // TODO : Faire le calcul du chemin critique en incluant les tâches des sous-process
            // Change to normal WBS order (alphanumeric)
            //if (computeReadNext)
            //{
            //    var tempCriticalPath = publication.PublishedActions.CriticalPath(p => p.Successors, p => p.BuildFinish - p.BuildStart);
            //    var criticalPath = new List<PublishedAction>();
            //    for (int i = tempCriticalPath.Count(); i > 0; i--)
            //        criticalPath.Add(tempCriticalPath.ElementAt(i - 1));

            //    var nextActionIndex = criticalPath.IndexOf(criticalPath.First(u => u.PublishedActionId == id)) + 1;
            //    ViewBag.NextAction = nextActionIndex >= criticalPath.Count ? 0 : criticalPath[nextActionIndex].PublishedActionId;

            //}


            var actionIndex = action.Publication.PublishedActions.OrderBy(a => a, new WBSComparer()).Select(p => p.PublishedActionId).ToList().IndexOf(action.PublishedActionId);
            var previousId  = actionIndex - 1 >= 0 ? action.Publication.PublishedActions.OrderBy(a => a, new WBSComparer()).Select(p => p.PublishedActionId).ToList().ElementAtOrDefault(actionIndex - 1) : 0;
            var nextId      = action.Publication.PublishedActions.OrderBy(a => a, new WBSComparer()).Select(p => p.PublishedActionId).ToList().ElementAtOrDefault(actionIndex + 1);

            var localizations             = action.Publication.Localizations.ToDictionary(k => k.ResourceKey, v => v.Value);
            var documentationReferentials = await _referentialsService.GetDocumentationReferentials(action.Publication.ProcessId);

            localizations = ActionMapper.UpdateLocalizationLabelForDetail(localizations, documentationReferentials);
            var visibleColumns = ActionMapper.GetDetailDispositions(action.Publication, (PublishModeEnum)PublishModeFilter.Value);
            var values         = new Dictionary <string, ActionColumnViewModel>();
            var actionHeaders  = ActionMapper.GetDetailColumnHeader(visibleColumns, localizations);

            if (computeReadNext)
            {
                ViewBag.NextAction = nextId;
            }

            foreach (var setting in visibleColumns)
            {
                (List <RefsCollection> refs, List <CustomLabel> customLabel) = ActionMapper.BuildReferenceAndCustomLabel(action, localizations);
                var attribute = ReflectionHelper.GetPropertyValue(action, setting);
                values.Add(setting, ActionMapper.GetPublishedActionAttributes(action, attribute, setting, setting, localizations, refs, customLabel));
            }

            //Populate Action detail dispositions
            var detailsDisposition = new List <string>();

            if ((PublishModeEnum)PublishModeFilter.Value == PublishModeEnum.Formation)
            {
                if (publication.Formation_ActionDisposition.IsNotNullNorEmpty())
                {
                    detailsDisposition = publication.Formation_ActionDisposition.Split(',').ToList();
                }
            }
            else if ((PublishModeEnum)PublishModeFilter.Value == PublishModeEnum.Inspection)
            {
                if (publication.Inspection_ActionDisposition.IsNotNullNorEmpty())
                {
                    detailsDisposition = publication.Inspection_ActionDisposition.Split(',').ToList();
                }
            }



            var model = new GenericActionViewModel
            {
                ActionHeaders  = actionHeaders,
                ActionId       = action.PublishedActionId,
                Label          = action.Label,
                ColumnValues   = values,
                VideoExtension = action.CutVideo != null?MimeMapping.GetMimeMapping(action.CutVideo.Extension) : null,
                                     VideoHash                 = action.CutVideo?.Hash,
                                     VideoExt                  = action.CutVideo?.Extension,
                                     ProcessId                 = action.Publication.ProcessId,
                                     ProcessLabel              = action.Publication.Process.Label,
                                     PublicationVersion        = action.Publication.Version,
                                     PublicationVersionIsMajor = action.Publication.IsMajor,
                                     PreviousActionId          = previousId,
                                     NextActionId              = nextId,
                                     IsKeyTask                 = action.IsKeyTask,
                                     PublishModeFilter         = PublishModeFilter.Value,
                                     DetailActionDispositions  = detailsDisposition
            };

            if (partial)
            {
                return(PartialView(model));
            }

            return(View(model));
        }