private void InitProjectOnlineAccessService()
        {
            bool isProjectOnline = Boolean.Parse(ConfigurationManager.AppSettings["IsProjectOnline"]);

            projectOnlineAccessService = new ProjectOnlineAccessService(ConfigurationManager
                                                                        .AppSettings["ProjectOnlineUrl"], ConfigurationManager.AppSettings["ProjectOnlineUserName"],
                                                                        ConfigurationManager.AppSettings["ProjectOnlinePassword"], isProjectOnline, Guid.Empty);

            projectOnlineODataService = new ProjectOnlineODataService(ConfigurationManager
                                                                      .AppSettings["ProjectOnlineUrl"], ConfigurationManager.AppSettings["ProjectOnlineUserName"],
                                                                      ConfigurationManager.AppSettings["ProjectOnlinePassword"], isProjectOnline);

            projectOnlineAccessService.InitCache();
            projectOnlineODataService.InitCache();
        }
        public static DataFromDbViewModel GetDataFromDbViewModel(ProjectOnlineODataService projectOnlineODataService,
                                                                 UnitOfWork unitOfWork, bool isWorklogs)
        {
            StagingBusinessService    stagingBusinessService    = new StagingBusinessService(unitOfWork);
            SyncSystemBusinessService syncSystemBusinessService = new SyncSystemBusinessService(unitOfWork);
            ProjectServerSystemLinkBusinessService projectServerSystemLinkBusinessService = new ProjectServerSystemLinkBusinessService(projectOnlineODataService, unitOfWork);
            MasterWorklogBusinessService           masterWorklogBusinessService           = new MasterWorklogBusinessService(unitOfWork);
            MasterBusinessService masterBusinessService = new MasterBusinessService(unitOfWork);

            DateTime startDateTimesheetPeriods = projectOnlineODataService.GetODataTimesheetPeriods().Select(x => x.StartDate).Min();
            DateTime endDateTimesheetPeriods   = projectOnlineODataService.GetODataTimesheetPeriods().Select(x => x.EndDate).Max();

            DataFromDbViewModel dataFromDbViewModel = new DataFromDbViewModel
            {
                SyncSystems = syncSystemBusinessService.GetSyncSystemList(),
                ProjectServerSystemLinks = projectServerSystemLinkBusinessService.GetList()
            };

            stagingBusinessService.RemoveDoneStagings();
            dataFromDbViewModel.StagingsAll = stagingBusinessService.GetAllStagings(isWorklogs);

            dataFromDbViewModel.MasterWorklogs = masterWorklogBusinessService.GetActualMasterWorklogs(dataFromDbViewModel.StagingsAll,
                                                                                                      dataFromDbViewModel.SyncSystems, startDateTimesheetPeriods, endDateTimesheetPeriods);

            List <int> stagingIds = dataFromDbViewModel.StagingsAll.Select(x => x.StagingId).ToList();

            //stagingBusinessService.SetStagingsRecordState(stagingIds,
            //    isWorklogs ? ProjectServerConstants.RecordStateActual : ProjectServerConstants.RecordStateGeneral,
            //    RecordStateConst.Pending);

            dataFromDbViewModel.CustomValuesAll = stagingBusinessService
                                                  .GetCustomValues(stagingIds);

            List <VStagingFieldMappingValue> lastUpdateUsersCustomValues = dataFromDbViewModel.CustomValuesAll
                                                                           .Where(x => x.StagingId.HasValue &&
                                                                                  stagingIds.Contains(x.StagingId.Value) &&
                                                                                  x.EpmFieldName == ProjectServerConstants.LastUpdateUser)
                                                                           .ToList();
            List <AssignmentInfo> assignees = dataFromDbViewModel.StagingsAll
                                              .Where(x => !String.IsNullOrEmpty(x.Assignee))
                                              .Select(x => new AssignmentInfo
            {
                IssueKey  = x.IssueKey,
                IssueId   = x.IssueId,
                SystemId  = x.SystemId,
                AuthorKey = x.Assignee
            }).ToList();
            List <AssignmentInfo> lastUpdateUsers = (from staging in dataFromDbViewModel.StagingsAll
                                                     join lu in lastUpdateUsersCustomValues on staging.StagingId equals lu.StagingId
                                                     select new AssignmentInfo
            {
                IssueKey = staging.IssueKey,
                IssueId = staging.IssueId,
                SystemId = staging.SystemId,
                AuthorKey = lu.Value
            }).ToList();
            List <AssignmentInfo> worklogUsers = (from staging in dataFromDbViewModel.StagingsAll
                                                  join worklog in dataFromDbViewModel.MasterWorklogs on new { staging.SystemId, staging.IssueId } equals
                                                  new { worklog.SystemId, worklog.IssueId }
                                                  select new AssignmentInfo
            {
                IssueKey = staging.IssueKey,
                IssueId = staging.IssueId,
                SystemId = staging.SystemId,
                AuthorKey = worklog.AuthorKey
            }).ToList();

            dataFromDbViewModel.Assignments = lastUpdateUsers.Union(assignees).Union(worklogUsers).Distinct(new AssignmentInfoComparer()).ToList();
            foreach (AssignmentInfo assignmentInfo in dataFromDbViewModel.Assignments)
            {
                ODataResource resource = projectOnlineODataService.GetODataResource(assignmentInfo.AuthorKey);
                if (resource != null)
                {
                    assignmentInfo.ResourceUid = resource.ResourceId;
                }
            }
            dataFromDbViewModel.Assignments = dataFromDbViewModel.Assignments.Where(x => x.ResourceUid != Guid.Empty).ToList();

            //List<string> issueKeysCurrentLevel = dataFromDbViewModel.StagingsAll
            //    .Where(x => x.IsSubTask && !String.IsNullOrEmpty(x.ParentIssueKey))
            //    .Select(x => x.ParentIssueKey).Distinct().ToList();
            dataFromDbViewModel.ParentIssues = new List <Master>();
            List <string> issueKeysCurrentLevel = dataFromDbViewModel.StagingsAll
                                                  .Where(x => !String.IsNullOrEmpty(x.ParentIssueKey))
                                                  .Select(x => x.ParentIssueKey).Distinct().ToList();
            List <Master> parentIssuesCurrentLevel = masterBusinessService.GetMasters(issueKeysCurrentLevel);

            dataFromDbViewModel.ParentIssues.AddRange(parentIssuesCurrentLevel);
            while (parentIssuesCurrentLevel.Count != 0)
            {
                issueKeysCurrentLevel = parentIssuesCurrentLevel
                                        .Where(x => !String.IsNullOrEmpty(x.ParentIssueKey))
                                        .Select(x => x.ParentIssueKey).Distinct().ToList();
                parentIssuesCurrentLevel = masterBusinessService.GetMasters(issueKeysCurrentLevel);
                dataFromDbViewModel.ParentIssues.AddRange(parentIssuesCurrentLevel);
            }

            return(dataFromDbViewModel);
        }
 public ProjectServerSystemLinkBusinessService(ProjectOnlineODataService projectOnlineODataService,
                                               UnitOfWork unitOfWork) : base(unitOfWork)
 {
     this.projectOnlineODataService = projectOnlineODataService;
 }
Beispiel #4
0
        public void TimesheetTest()
        {
            Guid guidYaroslav = Guid.Parse("9f52b233-4135-e511-80d0-00155d646d0b");
            //string emailYaroslav = "*****@*****.**";

            Guid guidAlex = Guid.Parse("a72f2f98-bd2f-e511-80c9-00155d60910a");
            //string emailAlex = "*****@*****.**";

            Guid guidKiryl = Guid.Parse("79d8d031-0801-e711-80d3-00155d74dc09");
            //string emailKiryl = "*****@*****.**";

            int  oDataEntitesPerRequest = int.Parse(ConfigurationManager.AppSettings["ODataEntitesPerRequest"]);
            int  oDataMaxQueryLength    = int.Parse(ConfigurationManager.AppSettings["ODataMaxQueryLength"]);
            int  requestTimeout         = int.Parse(ConfigurationManager.AppSettings["RequestTimeout"]);
            bool isProjectOnline        = Boolean.Parse(ConfigurationManager.AppSettings["IsProjectOnline"]);

            ProjectOnlineAccessService projectOnlineAccessService = new ProjectOnlineAccessService(ConfigurationManager
                                                                                                   .AppSettings["ProjectOnlineUrl"], ConfigurationManager.AppSettings["ProjectOnlineUserName"],
                                                                                                   ConfigurationManager.AppSettings["ProjectOnlinePassword"], isProjectOnline, Guid.NewGuid());

            ProjectOnlineODataService projectOnlineODataService = new ProjectOnlineODataService(ConfigurationManager
                                                                                                .AppSettings["ProjectOnlineUrl"], ConfigurationManager.AppSettings["ProjectOnlineUserName"],
                                                                                                ConfigurationManager.AppSettings["ProjectOnlinePassword"], isProjectOnline);


            List <ODataAssignment> assignments = projectOnlineODataService
                                                 .GetODataAssignments(Guid.Parse("8cc0d309-bd02-e711-80d4-00155d70390b"));

            ODataAssignment assignmentYaroslavYaroslavHours = assignments
                                                              .FirstOrDefault(x => x.TaskName == "Yaroslav Hours" && x.ResourceId == guidYaroslav);
            ODataAssignment assignmentYaroslavAlexHours = assignments
                                                          .FirstOrDefault(x => x.TaskName == "Alex Hours" && x.ResourceId == guidYaroslav);

            ODataAssignment assignmentKyrilKyrilHours = assignments
                                                        .FirstOrDefault(x => x.TaskName == "Kyril Hours" && x.ResourceId == guidKiryl);
            ODataAssignment assignmentKyrilAlexHours = assignments
                                                       .FirstOrDefault(x => x.TaskName == "Alex Hours" && x.ResourceId == guidKiryl);

            if (assignmentYaroslavYaroslavHours == null || assignmentYaroslavAlexHours == null ||
                assignmentKyrilKyrilHours == null || assignmentKyrilAlexHours == null)
            {
                return;
            }
            //EnterpriseResource resourceAlex = projectOnlineAccessService.ProjectContext.EnterpriseResources.GetByGuid(guidAlex);
            //projectOnlineAccessService.ProjectContext.Load(resourceAlex.Assignments);
            //EnterpriseResource resourceKyril = projectOnlineAccessService.ProjectContext.EnterpriseResources.GetByGuid(guidKiryl);
            //projectOnlineAccessService.ProjectContext.Load(resourceKyril.Assignments);

            EnterpriseResource resourceYaroslav  = projectOnlineAccessService.ProjectContext.EnterpriseResources.GetByGuid(guidYaroslav);
            TimePhase          timePhaseYaroslav = resourceYaroslav.Assignments.GetTimePhase(new DateTime(2017, 8, 22), new DateTime(2017, 8, 22));

            projectOnlineAccessService.ProjectContext.Load(resourceYaroslav.Assignments);
            projectOnlineAccessService.ProjectContext.Load(timePhaseYaroslav);
            projectOnlineAccessService.ProjectContext.Load(timePhaseYaroslav.Assignments);
            projectOnlineAccessService.ProjectContext.ExecuteQuery();

            foreach (StatusAssignment statusAssignment in timePhaseYaroslav.Assignments)
            {
                if (statusAssignment.Id == assignmentYaroslavYaroslavHours.AssignmentId)
                {
                    statusAssignment.ActualWork = "1h";
                }
                if (statusAssignment.Id == assignmentYaroslavAlexHours.AssignmentId)
                {
                    statusAssignment.ActualWork = "2h";
                }
                if (statusAssignment.Id == assignmentKyrilKyrilHours.AssignmentId)
                {
                    statusAssignment.ActualWork = "3h";
                }
                if (statusAssignment.Id == assignmentKyrilAlexHours.AssignmentId)
                {
                    statusAssignment.ActualWork = "4h";
                }
            }
            timePhaseYaroslav.Assignments.Update();
            timePhaseYaroslav.Assignments.SubmitAllStatusUpdates($"Submitted by CSOM on {DateTime.Now}");
            projectOnlineAccessService.ProjectContext.ExecuteQuery();
            var temp = 1;
            //projectOnlineAccessService.ProjectContext.Load(projectOnlineAccessService.ProjectContext.TimeSheetPeriods, c => c.Where(p => p.Start <= DateTime.Now && p.End >= DateTime.Now).IncludeWithDefaultProperties(p => p.TimeSheet, p => p.TimeSheet.Lines.Where(l => l.LineClass == TimeSheetLineClass.StandardLine).IncludeWithDefaultProperties(l => l.Assignment, l => l.Assignment.Task, l => l.Work)));

            //projectOnlineAccessService.ProjectContext.ExecuteQuery();
        }