public EditWorkItem(
            IWorkApplicationService workApplicationService,
            IWeekApplicationService weekApplicationService,
            IAssigneeApplicationService assigneeApplicationService,
            IEpicApplicationService epicApplicationService,
            WorkItemViewModel workItem)
        {
            _workApplicationService     = workApplicationService;
            _weekApplicationService     = weekApplicationService;
            _assigneeApplicationService = assigneeApplicationService;
            _epicApplicationService     = epicApplicationService;
            _workItemViewModel          = workItem;

            InitializeComponent();
            LoadData();

            DataContext = this;
            if (_workItemViewModel.Id.HasValue)
            {
                DateStatusChanged.Focus();
            }
            else
            {
                IssueID.Focus();
            }
        }
        private void Update()
        {
            if (!FormIsValid())
            {
                return;
            }

            var team = CbbTeam.SelectedItem?.ToString();

            _workItemViewModel.IssueId = IssueID.Text;
            _workItemViewModel.Epic    = (EpicViewModel)CbbEpic.SelectedItem ?? _workItemViewModel.Epic;
            _workItemViewModel.Week    = (WeekViewModel)CbbWeek.SelectedItem ?? _workItemViewModel.Week;
            _workItemViewModel.Type    = CbbType.SelectedItem != null ? (WorkType)CbbType.SelectedItem : _workItemViewModel.Type;
            _workItemViewModel.Status  = (WorkStatus)CbbStatus.SelectedItem;
            _workItemViewModel.AcceptanceReleaseDate = AcceptanceReleaseDate.SelectedDate;
            _workItemViewModel.ProductionReleaseDate = ProductionReleaseDate.SelectedDate;
            _workItemViewModel.Assignee            = (AssigneeViewModel)CbbAssignee.SelectedItem ?? _workItemViewModel.Assignee;
            _workItemViewModel.Team                = _workItemViewModel.Assignee != null ? _workItemViewModel.Assignee.Team : string.IsNullOrEmpty(team) ? _workItemViewModel.Team : team;
            _workItemViewModel.StartImpedimentDate = StartImpedimentAt.SelectedDate;
            _workItemViewModel.EndImpedimentDate   = EndImpedimentAt.SelectedDate;
            _workItemViewModel.Observations        = ImpObservation.Text;

            _workItemViewModel.UpdatedBy = "master";
            _workItemViewModel.CreatedBy = "master";

            _workItemViewModel = _workApplicationService.CreateOrUpdate(_workItemViewModel, DateStatusChanged.SelectedDate);

            if (MessageBox.Show("Work item has updated, Do you want continue editing?", "Information.", MessageBoxButton.YesNo) == MessageBoxResult.No)
            {
                Close();
            }
        }
 public EditTaskPage(WorkItemViewModel selectedItem) : this()
 {
     _selectedItem = selectedItem;
     Vm.Init(_selectedItem);
     BindingContext = Vm;
     Title          = selectedItem.Title;
 }
示例#4
0
        private string GetOrganization(WorkItemViewModel item)
        {
            var project      = _repository.GetSingle <Project>(p => p.Name == GetProject(item));
            var organization = project != null?_repository.GetSingle <VstsOrganization>(o => o.Id == project.Organization) : null;

            return(organization != null ? organization.Name : string.Empty);
        }
示例#5
0
        private void CreateNewWorkItem()
        {
            if (!FormIsValid())
            {
                return;
            }

            _workItemViewModel = new WorkItemViewModel
            {
                IssueId               = IssueID.Text,
                Week                  = (WeekViewModel)CbbWeek.SelectedItem,
                Type                  = (WorkType)CbbType.SelectedItem,
                TechDebt              = TechDebt.IsChecked ?? false,
                BacklogDate           = IncludeDate.SelectedDate.Value,
                Assignee              = (AssigneeViewModel)CbbAssignee.SelectedItem,
                AcceptanceReleaseDate = ReleaseDate.SelectedDate,
                Epic                  = (EpicViewModel)CbbEpic.SelectedItem,
                CreatedBy             = "master"
            };

            _workApplicationService.CreateOrUpdate(_workItemViewModel, null);
            MessageBox.Show("Work item has created", "Information.");

            Close();
        }
        protected override bool IsSupported(WorkItemViewModel item)
        {
            var type = item[WorkItemTypeField];

            return(string.Equals(type, WorkItemTypeBug, StringComparison.OrdinalIgnoreCase) ||
                   string.Equals(type, WorkItemTypeTask, StringComparison.OrdinalIgnoreCase));
        }
示例#7
0
        private IEnumerable <int> GetPullRequestIds(WorkItemViewModel workItem)
        {
            var ids = workItem.Relations?
                      .Where(r => string.Equals(r.RelationType, ArtifactLink, StringComparison.OrdinalIgnoreCase) && r.Url.LocalPath.Contains(PullRequestId))
                      .Select(r => r.Url.LocalPath.Substring(r.Url.LocalPath.LastIndexOf(ForwardSlash) + 1))
                      .ToArray();

            if (ids is null)
            {
                return(Enumerable.Empty <int>());
            }

            var convertedIds = new List <int>(ids.Count());

            foreach (var idString in ids)
            {
                if (int.TryParse(idString, out var id))
                {
                    convertedIds.Add(id);
                }
                else
                {
                    _logger.LogError("Error parsing pull request for work item {WorkItemId}; String to parse: {StringToParse}", workItem.WorkItemId, idString);
                }
            }

            return(convertedIds);
        }
示例#8
0
        public async Task <bool> IsInCodeReview(WorkItemViewModel workItem)
        {
            var isActiveWithCodeReviewTag = IsActive(workItem) && workItem.Fields.ContainsKey(WorkItemTagsField) && ContainsTag(workItem.Fields[WorkItemTagsField], CodeReviewTag);

            if (isActiveWithCodeReviewTag)
            {
                return(true);
            }

            if (!IsActive(workItem))
            {
                return(false);
            }

            var pullRequestIds = GetPullRequestIds(workItem);

            if (pullRequestIds == null || !pullRequestIds.Any())
            {
                return(false);
            }

            var pullRequests = await _repository.GetAsync <PullRequest>(p => pullRequestIds.Contains(p.PullRequestId));

            return(pullRequests.Count() == pullRequestIds.Count() && pullRequests.Any(p => p.State == PullRequestState.Active));
        }
示例#9
0
 public ETAValues GetETAValues(WorkItemViewModel workItem)
 {
     return(new ETAValues(
                GetEtaValue(workItem, OriginalEstimateField),
                GetEtaValue(workItem, RemainingWorkField),
                GetEtaValue(workItem, CompletedWorkField)));
 }
示例#10
0
        public WorkItemViewModel CreateOrUpdate(WorkItemViewModel model, DateTime?dateChanged)
        {
            var workItem = _mapper.Map <WorkItem>(model);
            var result   = _workRepository.Find(workItem.Id);

            if (result == null)
            {
                workItem.CreatedBy = model.CreatedBy;
                workItem.UpdatedAt = DateTime.Now;
                _workRepository.Add(workItem);

                if (dateChanged != null)
                {
                    workItem = PutDateByStatus(workItem, dateChanged.GetValueOrDefault());
                }

                var worksheet = CreateOrUpdateSerializable(workItem);
                _workSheetRepository.Add(worksheet);

                _transaction.Commit();

                var viewModel = _mapper.Map <WorkItemViewModel>(workItem);
                return(viewModel);
            }
            else
            {
                result.UpdatedBy = model.CreatedBy;

                var week     = _mapper.Map <Week>(model.Week);
                var assignee = _mapper.Map <Assignee>(model.Assignee);

                var team = assignee != null ? assignee.Team : model.Team;

                result.WeekId = week.Id;
                result.SetStatus(model.Status);
                result.SetType(model.Type);
                result.SetAcceptanceReleaseDate(model.AcceptanceReleaseDate);
                result.SetProductionReleaseDate(model.ProductionReleaseDate);
                result.SetStartImpedimentDate(model.StartImpedimentDate);
                result.SetEndImpedimentDate(model.EndImpedimentDate);
                result.SetObservations(model.Observations);
                result.SetTeam(team);
                result.AssigneeId = assignee?.Id;

                if (dateChanged != null)
                {
                    result = PutDateByStatus(result, dateChanged.GetValueOrDefault());
                }

                _workRepository.Update(result);

                var worksheet = CreateOrUpdateSerializable(result);
                _workSheetRepository.Update(worksheet);

                _transaction.Commit();

                var viewModel = _mapper.Map <WorkItemViewModel>(result);
                return(viewModel);
            }
        }
        private async Task <WorkItemViewModel> CreateWorkItemViewModel(Guid?id)
        {
            var workItem = await _repo.GetWorkItem(id);

            WorkItemViewModel vm = new WorkItemViewModel
            {
                WorkItemId = workItem.WorkItemId,
                WorkItem   = workItem,
                WorkId     = workItem.Work.WorkId
            };

            if (workItem.PartsForWork != null || workItem.PartsForWork.Count() > 0)
            {
                vm.NumPartsForWork = workItem.PartsForWork.Count();
            }
            if (workItem.StartDate != null)
            {
                vm.StartDate = workItem.StartDate;
            }
            if (workItem.InvoiceDate != null)
            {
                vm.CompleteDate = workItem.InvoiceDate;
            }
            return(vm);
        }
        // GET: WorkItems/Create
        public ActionResult Create()
        {
            //Create an empty work item
            WorkItem workItem = new WorkItem()
            {
                ProjectId = ProjectId
            };

            //Set initial values to the view model that will be rendered in the view
            WorkItemViewModel wItem = TheModelFactory.Create(workItem);

            wItem.Mode        = Mode.Create;
            wItem.DueDate     = DateTime.Now.Date;
            wItem.ProjectName = ProjectViewModelSession.ProjectName;

            //Set the list of team members that will be shown in the drop down for selection
            IEnumerable <TeamMemberViewModel> teamMemberList = ProjectViewModelSession.TeamMembersViewModel;

            wItem.TeamMemberList = new SelectList(teamMemberList, "TeamMemberId", "FullName");

            //Wrap the container
            WorkItemContainerViewModel container = new WorkItemContainerViewModel()
            {
                WorkItemsMenu     = MenuWorkItemsSession,
                WorkItemViewModel = wItem
            };

            return(View(container));
        }
 public EditTaskPage()
 {
     InitializeComponent();
     _selectedItem   = new WorkItemViewModel(new WorkItem());
     Vm.NavigateBack = NavigateBack;
     Vm.Init(_selectedItem);
     BindingContext = Vm;
 }
 /// <summary>
 /// Converts a value.
 /// </summary>
 /// <param name="value">The value produced by the binding source.</param>
 /// <param name="targetType">The type of the binding target property.</param>
 /// <param name="parameter">The converter parameter to use.</param>
 /// <param name="culture">The culture to use in the converter.</param>
 /// <returns>
 /// A converted value. If the method returns null, the valid null value is used.
 /// </returns>
 public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 {
     if (value != null && (value is WorkItem))
     {
         return(WorkItemViewModel.ConvertFrom(value as WorkItem));
     }
     return(null);
 }
示例#15
0
        // TODO: DataSource should not have knowledge on the type specific to reporters!
        public async Task <WorkitemInformationViewModel> GetWorkItemInfo(WorkItemViewModel workItem, IEnumerable <TeamMemberViewModel> team)
        {
            (var estimatedToComplete, var timeSpent) = GetEtaMetric(workItem, team, allowZeroEstimate: true);
            var isInCodeReview = await IsInCodeReview(workItem);

            if (IsResolved(workItem) || (!IsActive(workItem) && !IsNew(workItem)) || !IsAssignedToTeamMember(workItem, team))
            {
                return(null);
            }

            var workItemInfo = new WorkitemInformationViewModel
            {
                Id    = workItem.WorkItemId,
                Title = workItem.Fields[WorkItemTitleField],
                State = workItem.Fields[WorkItemStateField],
                Url   = GetWorkItemUrl(GetProject(workItem), workItem.WorkItemId),

                // Priority = workItem.Fields[prio]
                AssignedTo   = GetUserReference(workItem.Fields[WorkItemAssignedToField]),
                Type         = workItem.Fields[WorkItemTypeField],
                IsBlocked    = ContainsTag(workItem, "blocked"),
                IsOnHold     = ContainsTag(workItem, "onhold"),
                Estimated    = estimatedToComplete,
                Spent        = timeSpent,
                PullRequests = Enumerable.Empty <WorkitemPullRequest>(),
            };

            var pullRequestIds = GetPullRequestIds(workItem);

            if (pullRequestIds != null && pullRequestIds.Any())
            {
                var pullRequests = await _repository.GetAsync <PullRequest>(p => pullRequestIds.Contains(p.PullRequestId));

                workItemInfo.PullRequests = pullRequestIds.Select(pId =>
                {
                    var prInfo = new WorkitemPullRequest {
                        Id = pId
                    };
                    var pr = pullRequests.SingleOrDefault(p => p.PullRequestId == pId);
                    if (pr == null)
                    {
                        return(prInfo);
                    }

                    prInfo.Url        = GetPullRequestUrl(GetProject(workItem), pr.Repository, pId);
                    prInfo.Title      = pr.Title;
                    prInfo.TimeActive = GetPullRequestActiveTime(pr);
                    prInfo.Author     = pr.Author;
                    prInfo.State      = pr.State.ToString();

                    return(prInfo);
                });
            }

            workItemInfo.Warnings = GetWorkitemWarnings(workItemInfo, workItem);

            return(workItemInfo);
        }
 private void Verify(IWorkItemEvent @event, WorkItemViewModel workItem, TeamMemberViewModel teamMember, DateTime expecetdDate)
 {
     @event.Should().BeOfType <WorkItemReOpenedEvent>();
     @event.Date.Should().BeCloseTo(expecetdDate, TimeSpan.FromSeconds(1));
     @event.WorkItem.Id.Should().Be(workItem.WorkItemId);
     @event.AssociatedUser.Should().NotBeNull();
     @event.AssociatedUser.Email.Should().Be(teamMember.Email);
     @event.AssociatedUser.Title.Should().Be(teamMember.DisplayName);
 }
示例#17
0
        private bool ContainsTag(WorkItemViewModel workItem, string tag)
        {
            if (!workItem.Fields.ContainsKey(WorkItemTagsField))
            {
                return(false);
            }

            return(ContainsTag(workItem.Fields[WorkItemTagsField], tag));
        }
        public async Task <ActionResult> Edit(int id)
        {
            _logger.LogInformation("Loading WorkItem/Task Details to Edit");

            var workItemEnity = await this.workItemService.GetWorkItemById(id);

            WorkItemViewModel workItemViewModel = _objectMapper.WorkItemEnityToWorkItemViewModel(workItemEnity);

            return(View(workItemViewModel));
        }
 private IEnumerable <IWorkItemEvent> Run(WorkItemViewModel item, params TeamMemberViewModel[] team)
 {
     return(_classifier.Classify(new WorkItemResolutionRequest
     {
         StartDate = DateTime.UtcNow,
         EndDate = DateTime.UtcNow,
         WorkItem = item,
         Team = team
     }));
 }
示例#20
0
        public ActionResult EditTask(WorkItemViewModel model)
        {
            WorkItem item = unitOfWork.WorkItemRepository.GetByID(model.Id);

            item.AssignedWorker = model.AssignedWorker;
            unitOfWork.WorkItemRepository.Update(item);
            unitOfWork.Save();

            return(RedirectToAction("Index"));
        }
 public WorkItem WorkItemViewModelToWorkItemEnity(WorkItemViewModel workItemViewModel)
 {
     return(new WorkItem()
     {
         TaskId = workItemViewModel.TaskId,
         Name = workItemViewModel.Name,
         NoOfHours = workItemViewModel.NoOfHours,
         IsCompleted = workItemViewModel.IsCompleted,
     });
 }
示例#22
0
 public ActionResult Edit(WorkItemViewModel workItem)
 {
     if (ModelState.IsValid)
     {
         var entity = Mapper.Map <WorkItem>(workItem);
         _workItemService.Update(entity);
         return(RedirectToAction("Index"));
     }
     ViewBag.ProjectId = new SelectList(_projectService.GetAll(), "Id", "Name", workItem.ProjectId);
     return(View(workItem));
 }
        public ActionResult EditTask(WorkItemViewModel model)
        {
            string          newAssignWorkerUsername = Request.Form["AssignedWorker"].ToString();
            ApplicationUser newAssignUser           = unitOfWork.UserRepository.Get().Where(s => s.UserName.Equals(newAssignWorkerUsername)).SingleOrDefault();
            WorkItem        item = unitOfWork.WorkItemRepository.GetByID(model.Id);

            item.AssignedWorker = newAssignUser;
            unitOfWork.WorkItemRepository.Update(item);
            unitOfWork.Save();

            return(RedirectToAction("Index"));
        }
示例#24
0
        public IEnumerable <IWorkItemEvent> Classify(WorkItemViewModel item, ClassificationScope scope)
        {
            var rs = from c in _classifiers
                     let resolutions = c.Classify(new WorkItemResolutionRequest {
                WorkItem = item, Team = scope.Team, StartDate = scope.StartDate, EndDate = scope.EndDate
            })
                                       from r in resolutions
                                       where IsInRange(r, scope) || IsError(r)
                                       select r;

            return(rs.ToList());
        }
        public ActionResult Draft(WorkItemViewModel workItem)
        {
            try
            {
                // TODO: Add insert logic here

                return(RedirectToAction("Index"));
            }
            catch
            {
                return(View());
            }
        }
        /// <summary>
        /// 分组模式-待办
        /// </summary>
        /// <param name="pagerInfo"></param>
        /// <param name="keyWord">流程模板名称</param>
        /// <returns></returns>
        public JsonResult MyUnfinishedWorkItemByGroup()
        {
            return(this.ExecuteFunctionRun(() =>
            {
                string orderBy = "ORDER BY " +
                                 WorkItem.WorkItem.TableName + "." + WorkItem.WorkItem.PropertyName_Priority + " DESC," +
                                 WorkItem.WorkItem.TableName + "." + WorkItem.WorkItem.PropertyName_ReceiveTime + " DESC";
                string[] conditions = Engine.PortalQuery.GetWorkItemConditions(this.UserValidator.UserID, DateTime.MinValue, DateTime.MaxValue, WorkItem.WorkItemState.Unfinished, string.Empty, OThinker.Data.BoolMatchValue.Unspecified, string.Empty, false, WorkItem.WorkItem.TableName);
                DataTable dtWorkitem = Engine.PortalQuery.QueryWorkItem(conditions, -1, -1, orderBy, WorkItem.WorkItem.TableName);
                string[] columns = new string[] { WorkItem.WorkItem.PropertyName_OrgUnit };
                Dictionary <string, string> unitNames = this.GetUnitNamesFromTable(dtWorkitem, columns);
                Dictionary <string, string> workflowNames = this.GetWorkflowNamesFromTable(dtWorkitem);
                Dictionary <string, WorkItemGroup> workflowGroups = new Dictionary <string, WorkItemGroup>();
                // 获取分组集合
                foreach (DataRow row in dtWorkitem.Rows)
                {
                    string workflowCode = row[WorkItem.WorkItem.PropertyName_WorkflowCode] + string.Empty;
                    if (!workflowGroups.ContainsKey(workflowCode))
                    {
                        string workflowName = workflowNames[workflowCode] + string.Empty;
                        workflowGroups.Add(workflowCode, new WorkItemGroup(workflowCode, workflowName));
                    }

                    var workItem = new WorkItemViewModel()
                    {
                        Priority = row[WorkItem.WorkItem.PropertyName_Priority] + string.Empty,
                        Urged = this.GetColumnsValue(row, WorkItem.WorkItem.PropertyName_Urged).ToString() == "1" ? true : false,
                        ObjectID = row[WorkItem.WorkItem.PropertyName_ObjectID] + string.Empty,
                        InstanceId = row[WorkItem.WorkItem.PropertyName_InstanceId] + string.Empty,
                        WorkflowCode = workflowCode,
                        InstanceName = row[Instance.InstanceContext.PropertyName_InstanceName] + string.Empty,
                        ActivityCode = row[WorkItem.WorkItem.PropertyName_ActivityCode] + string.Empty,
                        DisplayName = row[WorkItem.WorkItem.PropertyName_DisplayName] + string.Empty,
                        ReceiveTime = this.GetValueFromDate(row[WorkItem.WorkItem.PropertyName_ReceiveTime], WorkItemTimeFormat),
                        Originator = row[WorkItem.WorkItem.PropertyName_Originator] + string.Empty,
                        OriginatorName = row[Instance.InstanceContext.PropertyName_OriginatorName] + string.Empty,
                        OriginatorOUName = this.GetValueFromDictionary(unitNames, row[Instance.InstanceContext.PropertyName_OrgUnit] + string.Empty)
                    };
                    workflowGroups[workflowCode].WorkItems.Add(workItem);
                }

                List <WorkItemGroup> gridDatas = new List <WorkItemGroup>();
                foreach (string key in workflowGroups.Keys)
                {
                    gridDatas.Add(workflowGroups[key]);
                }

                GridViewModel <WorkItemGroup> result = new GridViewModel <WorkItemGroup>(workflowGroups.Count, gridDatas);
                return Json(result, JsonRequestBehavior.AllowGet);
            }, FunctionNode.Workspace_MyUnfinishedWorkItem_Code));
        }
示例#27
0
        // GET: WorkItems/Details/5
        public ActionResult Details(Guid?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            WorkItemViewModel workItem = Mapper.Map <WorkItemViewModel>(_workItemService.Get(id.Value));

            if (workItem == null)
            {
                return(HttpNotFound());
            }
            return(View(workItem));
        }
示例#28
0
        private float GetEtaFromUpdates(WorkItemViewModel wi, string field)
        {
            if (wi.Updates == null || !wi.Updates.Any())
            {
                return(0);
            }

            var recoveredValue = wi.Updates
                                 .LastOrDefault(u => (u[WorkItemStateField]?.NewValue == WorkItemStateClosed || u[WorkItemStateField]?.NewValue == WorkItemStateResolved) && u.Fields.ContainsKey(field))?
                                 .Fields[field].OldValue;

            float.TryParse(recoveredValue, out var result);
            return(result);
        }
示例#29
0
        private DateTime?GetStatusDate(WorkItemViewModel workItem)
        {
            if (workItem.Status == WorkStatus.Done)
            {
                return(workItem.DoneDate);
            }
            else if (workItem.Status == WorkStatus.AwaitingProduction)
            {
                return(workItem.AwaitingProductionDate);
            }
            else if (workItem.Status == WorkStatus.TestingInAcceptance)
            {
                return(workItem.TestingInAcceptanceDate);
            }
            else if (workItem.Status == WorkStatus.AwaitingAcceptanceTests)
            {
                return(workItem.AwaitingAcceptanceTestsDate);
            }
            else if (workItem.Status == WorkStatus.Testing)
            {
                return(workItem.TestingDate);
            }
            else if (workItem.Status == WorkStatus.AwaitingTests)
            {
                return(workItem.AwaitingTestsDate);
            }
            else if (workItem.Status == WorkStatus.Reviewing)
            {
                return(workItem.ReviewingDate);
            }
            else if (workItem.Status == WorkStatus.AwaitingCodeReview)
            {
                return(workItem.AwaitingCodeReviewDate);
            }
            else if (workItem.Status == WorkStatus.InProgress)
            {
                return(workItem.InProgressDate);
            }
            else if (workItem.Status == WorkStatus.ToDo)
            {
                return(workItem.ToDoDate);
            }
            else if (workItem.Status == WorkStatus.Backlog)
            {
                return(workItem.BacklogDate);
            }

            return(null);
        }
示例#30
0
        private static WorkItemResolutionRequest GetRequest(IEnumerable <WorkItemUpdateViewModel> updates, string type = Constants.WorkItemTypeTask)
        {
            var workItem = new WorkItemViewModel {
                Fields = new Dictionary <string, string>(), WorkItemId = 0
            };

            workItem.Fields.Add(Constants.WorkItemTypeField, type);
            workItem.Updates = updates;

            return(new WorkItemResolutionRequest
            {
                WorkItem = workItem,
                Team = GetFakeTeam()
            });
        }