Пример #1
0
        private void ValidateChildrenRelationships()
        {
            if (ChildProjects.Count() > 0)
            {
                if (Entity.BeginDate.HasValue && ChildProjects.Count(p => p.BeginDate.HasValue) > 0)
                {
                    DateTime minBeginDate = ChildProjects.Where(p => p.BeginDate.HasValue).Min(p => p.BeginDate.Value);
                    if (Entity.BeginDate.Value > minBeginDate)
                    {
                        Recipient.SetError(nameof(Entity.BeginDate),
                                           $"Дата открытия проекта не может быть позже, чем самая ранняя дата открытия дочерних проектов ({minBeginDate.ToShortDateString()})");
                    }
                }
                if (Entity.EndDate.HasValue && ChildProjects.Count(p => p.EndDate.HasValue) > 0)
                {
                    DateTime maxEndDate = ChildProjects.Where(p => p.EndDate.HasValue).Max(p => p.EndDate.Value);
                    if (Entity.EndDate.Value < maxEndDate)
                    {
                        Recipient.SetError(nameof(Entity.EndDate),
                                           $"Дата закрытия проекта не может быть раньше, чем самая поздня дата закрытия дочерних проектов ({maxEndDate.ToShortDateString()})");
                    }
                }

                ValidateChildrenContractAmount();
                ValidateChildrenSubcontractorsAmountBudget();
                ValidateChildrenOrganisationAmountBudget();
                ValidateChildrenEmployeePayrollBudget();
                ValidateChildrenOtherCostsBudget();
            }
        }
Пример #2
0
        /// <summary>
        /// Launches the delete project window.
        /// </summary>
        public void DeleteProject()
        {
            ProjectViewModel selectedProjectVM = ChildProjects.FirstOrDefault(p => p.IsSelected == true);

            if (selectedProjectVM != null && WPFMessageBox.Show(Properties.Resources.Delete_Confirm, Properties.Resources.Projects_Delete_Confirm, WPFMessageBoxButtons.YesNo, WPFMessageBoxImage.Question) == WPFMessageBoxResult.Yes)
            {
                _projectData.DeleteProject(_projectData.GetProjectByProjectId(selectedProjectVM.ProjectId), _taskData);
                selectedProjectVM.Dispose();
            }
        }
Пример #3
0
        /// <summary>
        /// Launches the edit project window.
        /// </summary>
        public void EditProject()
        {
            ProjectView window = new ProjectView();

            ProjectViewModel selectedProjectVM = ChildProjects.FirstOrDefault(p => p.IsSelected == true);

            using (var viewModel = new ProjectViewModel(_projectData.GetProjectByProjectId(selectedProjectVM.ProjectId), _projectData, _taskData))
            {
                this.ShowWorkspaceAsDialog(window, viewModel);
            }
        }
Пример #4
0
 public override void Validate()
 {
     LoadRelationships();
     ValidateProperties();
     ValidateSingleLevelHierarchy();
     if (ParentProject != null)
     {
         ValidateParentRelationships();
     }
     if (ChildProjects.Count() > 0)
     {
         ValidateChildrenRelationships();
     }
 }
Пример #5
0
        private void ValidateSingleLevelHierarchy()
        {
            if (ParentProject == null)
            {
                return;
            }

            if (ChildProjects.Count() > 0)
            {
                Recipient.SetError(nameof(Entity.ParentProjectID), "Нельзя указать родительский проект, так как у текущего проекта есть дочерние");
                return;
            }

            if (ParentProject.ParentProject != null || ParentProject.ParentProjectID.HasValue)
            {
                Recipient.SetError(nameof(Entity.ParentProjectID), "Нельзя указать выбранный проект в качестве родительского, так как он является дочерним к другому проекту");
            }
        }
Пример #6
0
        private void ValidateChildrenBudgetPropertyAmount(string propertyName, string errorMessageTemplate)
        {
            LoadRelationships();
            var hasBudgetValue = GetBudgetPropertyHasValueFunc(propertyName);

            if (hasBudgetValue(Entity))
            {
                var     conditionExpression = GetBudgetPropertyHasValueExpression(propertyName);
                var     valueExpression     = GetBudgetPropertyValueExpression(propertyName);
                var     filtered            = ChildProjects.Where(conditionExpression).ToList();
                decimal total     = filtered.AsQueryable().Sum(valueExpression);
                var     valueFunc = valueExpression.Compile();
                if (total > valueFunc(Entity))
                {
                    Recipient.SetError(propertyName, string.Format(errorMessageTemplate, total));
                }
            }
        }
 public void AddChildLinks(ISet <ProjectLinkObject> links)
 {
     ChildProjects.UnionWith(links);
 }
 public void RemoveChild(IProject childProject)
 {
     ChildProjects.Remove(childProject);
 }
 public void AddChild(IProject childProject)
 {
     ChildProjects.Add(childProject);
 }
Пример #10
0
 bool CanDeleteProject()
 {
     return(ChildProjects.Count(p => p.IsSelected == true) == 1);
 }