void mnu_Click(object sender, RoutedEventArgs e) { try { isAddActionInProgress = true; var pos = (Point)ContextMenu.Tag; MFWorker worker = null; DateTime?date = null; GetCell(pos, out worker, out date); if (worker == null || !date.HasValue) { return; } // Если уволен то выходим if (worker.EndWorkTime.HasValue) { MessageBox.Show("Невозможно дать задание уволенному работнику", "Внимание", MessageBoxButton.OK, MessageBoxImage.Stop); return; } var t = (MFWorkerActionType)((FrameworkElement)sender).Tag; // Количество дней var winDays = new DaysWindow(14) { Owner = Window.GetWindow(this) }; if (winDays.ShowDialog() != true) { return; } switch (t) { #region Holiday/Hospital case MFWorkerActionType.Holiday: case MFWorkerActionType.Hospital: { MFPlannerManager.CreateNewAction(t, worker.Id, -1, date.Value, winDays.Count); break; } #endregion #region Project case MFWorkerActionType.Project: { // Выбираем проект var win = new MFPlannerSelectProjectWindow(TimeStart, TimeEnd) { Owner = Window.GetWindow(this) }; if (win.ShowDialog() != true || win.SelectedProject == null) { return; } MFPlannerManager.CreateNewAction(t, worker.Id, win.SelectedProject.ProjectID, date.Value, winDays.Count); // Устанавливаем пост 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 = date.Value.AddDays(winDays.Count); 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); } //actions.Add(new MFPlannerAction { Type = t, WorkerId = worker.Id, TimeBegin = date.Value, Days = winDays.Count, Id = actions.Count + 1, TargetId = win.SelectedProject.ProjectID }); break; } #endregion #region ReseveProject case MFWorkerActionType.ReseveProject: { var win = new MFPlannerCommentWindow { Owner = Window.GetWindow(this) }; if (win.ShowDialog() != true) { return; } MFPlannerManager.CreateNewAction(t, worker.Id, -1, date.Value, winDays.Count, win.Comment); break; } #endregion #region Avait case MFWorkerActionType.Avait: { MFPlannerManager.CreateNewAction(t, worker.Id, -1, date.Value, 1); break; } #endregion } } catch (Exception ex) { LogManager.LogError(unit, "Ошибка добавления нового действия в проект", ex); } finally { isAddActionInProgress = false; //projects[1].MF_Post = worker.Post.ToString(); isDirty = true; InvalidateVisual(); } }
/// <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 } }