private bool FillODataEntityValues(IEnumerable <XElement> propertiesElements, ODataAssignment assignment)
        {
            foreach (XElement xElement in propertiesElements)
            {
                switch (xElement.Name.LocalName)
                {
                case "ProjectId":
                    if (!String.IsNullOrEmpty(xElement.Value))
                    {
                        assignment.ProjectId = Guid.Parse(xElement.Value);
                    }
                    break;

                case "TaskId":
                    if (!String.IsNullOrEmpty(xElement.Value))
                    {
                        assignment.TaskId = Guid.Parse(xElement.Value);
                    }
                    break;

                case "AssignmentId":
                    if (!String.IsNullOrEmpty(xElement.Value))
                    {
                        assignment.AssignmentId = Guid.Parse(xElement.Value);
                    }
                    break;

                case "ResourceId":
                    if (!String.IsNullOrEmpty(xElement.Value))
                    {
                        assignment.ResourceId = Guid.Parse(xElement.Value);
                    }
                    break;

                case "TaskName":
                    assignment.TaskName = xElement.Value;
                    break;

                case ProjectServerConstants.SystemId + ProjectServerConstants.ODataReferencePostfix:
                    decimal systemId;
                    if (!String.IsNullOrEmpty(xElement.Value) && Decimal.TryParse(xElement.Value, out systemId))
                    {
                        assignment.SystemId = (int)systemId;
                    }
                    break;

                case ProjectServerConstants.IssueKey + ProjectServerConstants.ODataReferencePostfix:
                    assignment.IssueKey = xElement.Value;
                    break;

                case ProjectServerConstants.IssueId + ProjectServerConstants.ODataReferencePostfix:
                    assignment.IssueId = xElement.Value;
                    break;

                case ProjectServerConstants.ParentEpicKey + ProjectServerConstants.ODataReferencePostfix:
                    assignment.ParentEpicKey = xElement.Value;
                    break;

                case ProjectServerConstants.ParentVersionId + ProjectServerConstants.ODataReferencePostfix:
                    assignment.ParentVersionId = xElement.Value;
                    break;

                case ProjectServerConstants.IssueTypeName + ProjectServerConstants.ODataReferencePostfix:
                    assignment.IssueTypeName = xElement.Value;
                    break;
                }
            }
            return(true);
        }
Example #2
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();
        }