Example #1
0
        /// <summary>Выполняем запрос от проекта</summary>
        internal void MakeCommand(PlannerMode mode, Point pos, MFPlannerProjectControl sender)
        {
            MFWorker worker = null;
            DateTime?time   = null;

            GetCell(pos, out worker, out time);
            if (worker == null || time == null)
            {
                return;
            }

            switch (mode)
            {
                #region PlanProject_Confirm - Подтвердить проект
            case PlannerMode.PlanProject_Confirm:
            {
                // Выбираем проект
                var win = new MFPlannerSelectProjectWindow(TimeStart, TimeEnd)
                {
                    Owner = Window.GetWindow(this)
                };
                if (win.ShowDialog() != true || win.SelectedProject == null)
                {
                    return;
                }

                sender.Action.TargetId = win.SelectedProject.ProjectID;
                sender.Action.Type     = MFWorkerActionType.Project;

                if (!MFPlannerManager.MFPlannerChangeAction(sender.Action))
                {
                    sender.Action.TargetId = -1;
                    sender.Action.Type     = MFWorkerActionType.ReseveProject;

                    MessageBox.Show("Не удадось подтвердить проект", "Внимание", MessageBoxButton.OK, MessageBoxImage.Stop);
                    return;
                }

                // Устанавливаем пост
                var sPost = CreatePost(win.SelectedProject.MF_Post, worker.Post.ToString());
                if (win.SelectedProject.MF_Post != sPost)
                {
                    ProjectManager.ChangeProjectPropety(win.SelectedProject.ProjectID, ProjectPropertyType.MF_Post, sPost);
                }

                // Устанавливаем ориентировочное время
                var dateMFPlaned = sender.Action.TimeEnd;
                var isChange     = true;
                if (win.SelectedProject.MF_Time_Plan.HasValue)
                {
                    var msg = string.Format("Изменить 'Планируемое время завершения производства'\n с {0} на {1}",
                                            win.SelectedProject.MF_Time_Plan.Value.ToString(ProjectConfiguration.DateFormat),
                                            dateMFPlaned.ToString(ProjectConfiguration.DateFormat));

                    isChange = MessageBox.Show(msg, "Внимание", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes;
                }

                if (isChange)
                {
                    ProjectManager.ChangeProjectPropety(win.SelectedProject.ProjectID, ProjectPropertyType.MF_Time_Planed, dateMFPlaned);
                }

                break;
            }
                #endregion

                #region CommentEdit
            case PlannerMode.CommentEdit:
            {
                var win = new MFPlannerCommentWindow {
                    Title = "Изменить комментарий", Comment = sender.Action.Comment, Owner = Window.GetWindow(this)
                };
                if (win.ShowDialog() != true)
                {
                    return;
                }

                var prev = sender.Action.Comment;
                sender.Action.Comment = win.Comment;

                if (!MFPlannerManager.MFPlannerChangeAction(sender.Action))
                {
                    sender.Action.Comment = prev;
                    MessageBox.Show("Не удалось изменить описание проекта", "Внимание", MessageBoxButton.OK, MessageBoxImage.Stop);
                    return;
                }

                sender.InvalidateVisual();

                break;
            }
                #endregion

                #region ChangeDays - Изменить продолжительность дней
            case PlannerMode.ChangeDays:
            {
                var res = MessageBox.Show(string.Format("Изменить продолжительность дней?"), "Внимание", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
                if (res != MessageBoxResult.Yes)
                {
                    return;
                }

                var winDays = new DaysWindow(sender.Action.Days)
                {
                    Owner = Window.GetWindow(this)
                };
                if (winDays.ShowDialog() != true)
                {
                    return;
                }

                var prev = sender.Action.Days;
                sender.Action.Days = winDays.Count;

                // изменяем
                if (!MFPlannerManager.MFPlannerChangeAction(sender.Action))
                {
                    sender.Action.Days = prev;

                    MessageBox.Show("Не удалось сохранить изменения", "Внимание", MessageBoxButton.OK, MessageBoxImage.Stop);
                    return;
                }

                // Устанавливаем ориентировочное время
                ProjectManager.ChangeProjectPropety(sender.Action.TargetId, ProjectPropertyType.MF_Time_Planed, sender.Action.TimeEnd);

                isDirty = true;

                break;
            }

                #endregion
                #region Break - Прервать
            case PlannerMode.Break:
            {
                var days = (time.Value - sender.Action.TimeBegin).TotalDays;
                if (days <= 1)
                {
                    return;
                }

                var res = MessageBox.Show(string.Format("Сократить проект до: {0} дней?", days), "Внимание", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
                if (res != MessageBoxResult.Yes)
                {
                    return;
                }

                var prev = sender.Action.Days;
                sender.Action.Days = (int)days;

                // изменяем
                if (!MFPlannerManager.MFPlannerChangeAction(sender.Action))
                {
                    sender.Action.Days = prev;

                    MessageBox.Show("Не удалось сохранить изменения", "Внимание", MessageBoxButton.OK, MessageBoxImage.Stop);
                    return;
                }

                // Устанавливаем ориентировочное время
                ProjectManager.ChangeProjectPropety(sender.Action.TargetId, ProjectPropertyType.MF_Time_Planed, sender.Action.TimeEnd);

                isDirty = true;

                break;
            }

                #endregion
                #region Remove - удаление
            case PlannerMode.Remove:
            {
                var res = MessageBox.Show(string.Format("Удалить выбранный?"), "Внимание", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
                if (res != MessageBoxResult.Yes)
                {
                    return;
                }

                // удаляем
                if (!MFPlannerManager.RemoveAction(sender.Action))
                {
                    MessageBox.Show("Удаление не удалось", "Внимание", MessageBoxButton.OK, MessageBoxImage.Stop);
                    return;
                }

                var cProject = controlsCache[sender.Action.Id];

                controlsCache.Remove(sender.Action.Id);
                Children.Remove(cProject);

                // Удаляем пост
                var p     = ServiceManager.LoadProject(sender.Action.TargetId);
                var sPost = RemovePost(p.MF_Post, worker.Post.ToString());
                if (p.MF_Post != sPost)
                {
                    ProjectManager.ChangeProjectPropety(sender.Action.TargetId, ProjectPropertyType.MF_Post, sPost);
                }

                cProject.Dispose();
                cProject = null;

                break;
            }
                #endregion

                #region ChangeProgressNone/ChangeProgressStart/ChangeProgressHalf/ChangeProgressFinish
            case PlannerMode.ChangeProgressNone:
            case PlannerMode.ChangeProgressStart:
            case PlannerMode.ChangeProgressHalf:
            case PlannerMode.ChangeProgressFinish:
            {
                var name = "";
                if (mode == PlannerMode.ChangeProgressStart)
                {
                    name = Project.inStart;
                }
                else if (mode == PlannerMode.ChangeProgressHalf)
                {
                    name = Project.inHalf;
                }
                else if (mode == PlannerMode.ChangeProgressFinish)
                {
                    name = Project.inFinish;
                }

                // Удаляем пост
                var p = ServiceManager.LoadProject(sender.Action.TargetId);
                if (p.MF_Complete_Percentage != name)
                {
                    ProjectManager.ChangeProjectPropety(sender.Action.TargetId, ProjectPropertyType.MF_Complete_Percentage, name);
                }

                break;
            }
                #endregion
            }
        }