Advertisement
timur-mut

Серверная часть подсистемы передачи заданий

Oct 26th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 40.74 KB | None | 0 0
  1.  [OperationContract]
  2.     public void CreateProjectTask(string code, string text, DateTime FinishDate, long FolderId, int[] departmentsIds, string[] savedFilePaths, string[] savedFileNames, bool draft)
  3.     {
  4.         if (savedFilePaths.Length != savedFileNames.Length)
  5.         {
  6.             throw new ArgumentException("Количество сохранённый файлов и имён не совпадает");
  7.         }
  8.         using (var dbContext = new FalconDbContext())
  9.         {
  10.  
  11.             var curUser = GetCurrentUser();
  12.             var curDepartment = GetDepartmentByUser(FolderId, curUser);
  13.             var project = dbContext.GetProjectFolder(FolderId, false);
  14.             var gip = dbContext.GetGipByFolderId(FolderId);
  15.  
  16.             foreach (int departmentId in departmentsIds)
  17.             {
  18.                 var newTask = new ProjectTask()
  19.                 {
  20.                     Code = code,
  21.                     Text = text,
  22.                     DtCreate = DateTime.Today,
  23.                     IdAutor = curUser.Id,
  24.                     IdAutorDepartment = curDepartment.Id,
  25.                     IdProject = project.Id,
  26.                     DtFinish = FinishDate,
  27.                     IdExecutorDepartment = departmentId,
  28.                     Status = ProjectTask.Statuses.created
  29.                 };
  30.                 dbContext.ProjectTasks.Add(newTask);
  31.                 dbContext.SaveChanges();
  32.                 for (int i = 0; i < savedFilePaths.Length; i++)
  33.                 {
  34.                     var fileName = IO.Path.Combine(Falcon_configuration.public_file_storage, savedFilePaths[i]);
  35.                     dbContext.FalconFiles.Add(new FalconFile()
  36.                     {
  37.                         Path = fileName,
  38.                         FileSize = (int)new IO.FileInfo(fileName).Length,
  39.                         Name = savedFileNames[i],
  40.                         IdProjectTask = newTask.Id
  41.                     });
  42.                 }
  43.  
  44.                 dbContext.LogSimples.Add(new LogSimple()
  45.                 {
  46.                     Action = "Задание создано",
  47.                     Comment = code,
  48.                     Dt = DateTime.Now,
  49.                     Entity = "projectTask",
  50.                     Id = newTask.Id,
  51.                     IdUser = curUser.Id
  52.                 });
  53.                 dbContext.UserTasks.AddProjectTaskAgreement(newTask, curUser.Id, curUser.Id, "Передать на согласование");
  54.                 dbContext.SaveChanges();
  55.                 if (!draft)
  56.                 {
  57.                     AgreeProjectTask(newTask.Id, null, null);
  58.                 }
  59.             }
  60.         }
  61.     }
  62.     [OperationContract]
  63.     public void EditProjectPask(long projectTaskId, string text, DateTime dateTime, string[] savedFilePaths, string[] savedFileNames, long[] deletedFileIds)
  64.     {
  65.         if (savedFilePaths.Length != savedFileNames.Length)
  66.         {
  67.             throw new ArgumentException("Количество сохранённый файлов и имён не совпадает");
  68.         }
  69.  
  70.         using (var dbContext = new FalconDbContext())
  71.         {
  72.             var curUser = GetCurrentUser();
  73.             var projectTask = dbContext.ProjectTasks.Include(pt => pt.Folder)
  74.               .Include(pt => pt.User_IdAutor)
  75.               .Include(pt => pt.User_IdExecutor)
  76.               .Include(pt => pt.Department_IdAutorDepartment.User)
  77.               .Include(pt => pt.Department_IdExecutorDepartment.User)
  78.               .First(pt => pt.Id == projectTaskId);
  79.             var curDepartment = GetDepartmentByUser(projectTask.IdProject, curUser);
  80.             var gip = dbContext.Gips.Include(g => g.User).Include(g => g.Users).First(g => g.Id == projectTask.Folder.IdGip);
  81.  
  82.             if ((projectTask.Status == ProjectTask.Statuses.releaseDepartmentManagerTaskAgreement && projectTask.IdAutorDepartment == curDepartment.Id && curUser.Id == curDepartment.IdManager)
  83.                   ||
  84.                 ((projectTask.Status == ProjectTask.Statuses.created || projectTask.Status == ProjectTask.Statuses.revision) && projectTask.IdAutor == curUser.Id)
  85.                   ||
  86.                 ((projectTask.Status == ProjectTask.Statuses.projectGIPTaskAgreement) && (gip.Includes(curUser)))
  87.                 )
  88.             {
  89.  
  90.                 var comentBuilder = new StringBuilder();
  91.                 if (projectTask.Text != text)
  92.                     comentBuilder.AppendLine($"{projectTask.Text}->{text}");
  93.  
  94.                 if (projectTask.DtFinish != dateTime)
  95.                     comentBuilder.AppendLine($"{projectTask.DtFinish.ToShortDateString()}->{dateTime.ToShortDateString()}");
  96.  
  97.                 if (savedFilePaths.Any())
  98.                     comentBuilder.AppendLine($"Добавлено {savedFilePaths.Count()} файлов");
  99.  
  100.                 if (deletedFileIds.Any())
  101.                     comentBuilder.AppendLine($"Удалено {deletedFileIds.Count()} файлов");
  102.  
  103.  
  104.                 foreach (var deletedFileId in deletedFileIds)
  105.                 {
  106.                     var deletedFile = dbContext.FalconFiles.Single(f => f.Id == deletedFileId);
  107.                     IO.File.Delete(deletedFile.Path);
  108.                     dbContext.FalconFiles.Remove(deletedFile);
  109.                 }
  110.  
  111.                 for (int i = 0; i < savedFilePaths.Length; i++)
  112.                 {
  113.                     var fileName = IO.Path.Combine(Falcon_configuration.public_file_storage, savedFilePaths[i]);
  114.                     dbContext.FalconFiles.Add(new FalconFile()
  115.                     {
  116.                         Path = fileName,
  117.                         FileSize = (int)new IO.FileInfo(fileName).Length,
  118.                         Name = savedFileNames[i],
  119.                         IdProjectTask = projectTask.Id
  120.                     });
  121.                 }
  122.  
  123.                 dbContext.LogSimples.Add(new LogSimple()
  124.                 {
  125.                     Action = "Задание откорректировано",
  126.                     Comment = comentBuilder.ToString(),
  127.                     Dt = DateTime.Now,
  128.                     Entity = "projectTask",
  129.                     Id = projectTask.Id,
  130.                     IdUser = curUser.Id
  131.                 });
  132.  
  133.                 projectTask.Text = text;
  134.                 projectTask.DtFinish = dateTime;
  135.                 dbContext.SaveChanges();
  136.             }
  137.             else
  138.             {
  139.                 throw new Exception("Не прав на редактирование задания. Обратитесь к администратору Falcon");
  140.             }
  141.  
  142.         }
  143.     }
  144.  
  145.     [OperationContract]
  146.     public ProjectTask GetProjectTask(out ProjectTask.UserCapabilities Capabilities, long projectTaskId)
  147.     {
  148.         using (var dbContext = new FalconDbContext())
  149.         {
  150.             var curUser = GetCurrentUser();
  151.             var projectTask = dbContext.ProjectTasks.Include(pt => pt.FalconFiles).Include(pt => pt.Folder).First(pt => pt.Id == projectTaskId);
  152.             var curDepartment = GetDepartmentByUser(projectTask.IdProject, curUser);
  153.             var gip = dbContext.Gips.Include(g => g.Users).First(g => g.Id == projectTask.Folder.IdGip);
  154.  
  155.             var projectNotices = dbContext.UserTasks.Where(t => t.IdUserExecutor == curUser.Id
  156.                     && t.IdEntityType == (int)UserTask.EntityTypes.projectTask
  157.                     && t.IdEntity == projectTask.Id
  158.                     && t.IdType == (int)UserTask.Types.Notice);
  159.  
  160.             foreach (var projectNotice in projectNotices)
  161.             {
  162.                 projectNotice.Status = UserTask.Statuses.closed;
  163.             }
  164.  
  165.             switch (projectTask.Status)
  166.             {
  167.                 case ProjectTask.Statuses.revision:
  168.                 case ProjectTask.Statuses.created:
  169.                     if (projectTask.IdAutor == curUser.Id)
  170.                         Capabilities = ProjectTask.UserCapabilities.Edit | ProjectTask.UserCapabilities.Agree;
  171.                     else
  172.                         Capabilities = ProjectTask.UserCapabilities.None;
  173.                     break;
  174.                 case ProjectTask.Statuses.releaseDepartmentManagerTaskAgreement:
  175.                     if (projectTask.IdAutorDepartment == curDepartment.Id && curUser.Id == curDepartment.IdManager)
  176.                         Capabilities = ProjectTask.UserCapabilities.Edit | ProjectTask.UserCapabilities.Agree | ProjectTask.UserCapabilities.Reject;
  177.                     else
  178.                         Capabilities = ProjectTask.UserCapabilities.None;
  179.                     break;
  180.                 case ProjectTask.Statuses.projectGIPTaskAgreement:
  181.                     if (gip.Includes(curUser))
  182.                         Capabilities = ProjectTask.UserCapabilities.EditDate | ProjectTask.UserCapabilities.Agree | ProjectTask.UserCapabilities.Reject;
  183.                     else
  184.                         Capabilities = ProjectTask.UserCapabilities.None;
  185.                     break;
  186.  
  187.                 case ProjectTask.Statuses.receiveDepartmentManagerTaskAgreement:
  188.                     if ((projectTask.IdExecutorDepartment == curDepartment.Id && curUser.Id == curDepartment.IdManager)
  189.                         ||
  190.                         (projectTask.IdExecutorDepartment == 0 && curUser.Id == gip.IdManager))
  191.                         Capabilities = ProjectTask.UserCapabilities.Agree | ProjectTask.UserCapabilities.Reject | ProjectTask.UserCapabilities.AssignExecutor;
  192.                     else
  193.                         Capabilities = ProjectTask.UserCapabilities.None;
  194.                     break;
  195.                 case ProjectTask.Statuses.expectsExecution:
  196.                     if (projectTask.IdExecutor.Value == curUser.Id)
  197.                         Capabilities = ProjectTask.UserCapabilities.Agree | ProjectTask.UserCapabilities.Reject;
  198.                     else
  199.                         Capabilities = ProjectTask.UserCapabilities.None;
  200.                     break;
  201.                 case ProjectTask.Statuses.executing:
  202.                     if (projectTask.IdExecutor.Value == curUser.Id)
  203.                         Capabilities = ProjectTask.UserCapabilities.AssignResult;
  204.                     else
  205.                         Capabilities = ProjectTask.UserCapabilities.None;
  206.                     break;
  207.                 case ProjectTask.Statuses.receiveDepartmentManagerResultAgreement:
  208.                     if (projectTask.IdExecutorDepartment == curDepartment.Id && curUser.Id == curDepartment.IdManager)
  209.                         Capabilities = ProjectTask.UserCapabilities.Agree | ProjectTask.UserCapabilities.Reject;
  210.                     else
  211.                         Capabilities = ProjectTask.UserCapabilities.None;
  212.                     break;
  213.  
  214.                 default:
  215.                     Capabilities = ProjectTask.UserCapabilities.None;
  216.                     break;
  217.             }
  218.             dbContext.SaveChanges();
  219.             return projectTask;
  220.         }
  221.     }
  222.     [OperationContract]
  223.     public void RejectProjectTask(long projectTaskId, string comment)
  224.     {
  225.         using (var dbContext = new FalconDbContext())
  226.         {
  227.             var curUser = GetCurrentUser();
  228.             var projectTask = dbContext.ProjectTasks.Include(pt => pt.Folder)
  229.                 .Include(pt => pt.User_IdAutor)
  230.                 .Include(pt => pt.User_IdExecutor)
  231.                 .Include(pt => pt.Department_IdAutorDepartment.User)
  232.                 .Include(pt => pt.Department_IdExecutorDepartment.User)
  233.                 .First(pt => pt.Id == projectTaskId);
  234.             var curDepartment = GetDepartmentByUser(projectTask.IdProject, curUser);
  235.             if (curUser.Id == 19 && projectTask.IdExecutorDepartment == 19)
  236.             {
  237.                 curDepartment = dbContext.Departments.Find(19);
  238.             }
  239.             var gip = dbContext.Gips.Include(g => g.User).Include(g => g.Users).First(g => g.Id == projectTask.Folder.IdGip);
  240.  
  241.             //временно подставляем начальника БГИП в качестве начальника выдающего отдела, если выдаёт задание БГИП (в базу эти изменения не идут, т.к на разных проектах гипы разные)
  242.             if (projectTask.Department_IdAutorDepartment.Id == 0)
  243.             {
  244.                 projectTask.Department_IdAutorDepartment.User = gip.User;
  245.             }
  246.             //временно подставляем начальника БГИП в качестве начальника принимающего отдела, если принимает задание БГИП (в базу эти изменения не идут, т.к на разных проектах гипы разные)
  247.             if (projectTask.Department_IdExecutorDepartment.Id == 0)
  248.             {
  249.                 projectTask.Department_IdExecutorDepartment.User = gip.User;
  250.             }
  251.  
  252.             switch (projectTask.Status)
  253.             {
  254.                 case ProjectTask.Statuses.created:
  255.                 case ProjectTask.Statuses.revision:
  256.                     throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  257.  
  258.                 case ProjectTask.Statuses.releaseDepartmentManagerTaskAgreement:
  259.                     if (projectTask.IdAutorDepartment == curDepartment.Id && curUser.Id == curDepartment.IdManager)
  260.                     {
  261.                         projectTask.Status = ProjectTask.Statuses.revision;
  262.                         dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, projectTask.IdAutor, "Доработать задание");
  263.  
  264.                         ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.User_IdAutor);
  265.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  266.                     }
  267.                     else
  268.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  269.                     break;
  270.  
  271.                 case ProjectTask.Statuses.projectGIPTaskAgreement:
  272.                     if (gip.Includes(curUser))
  273.                     {
  274.                         projectTask.Status = ProjectTask.Statuses.revision;
  275.  
  276.                         dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, projectTask.IdAutor, "Доработать задание");
  277.                         ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.User_IdAutor);
  278.  
  279.                         if (projectTask.Department_IdAutorDepartment.User.Id != projectTask.IdAutor)
  280.                         {
  281.  
  282.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.Department_IdAutorDepartment.User.Id);
  283.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdAutorDepartment.User);
  284.                         }
  285.                         var gipMembersIds = gip.Users.Select(u => u.Id).ToArray();
  286.                         var userTasks = dbContext.UserTasks.Where(t =>
  287.                             (t.IdUserExecutor == curUser.Id || gipMembersIds.Contains(t.IdUserExecutor)) &&
  288.                             t.IdEntity == projectTaskId && t.IdStatus == (int)UserTask.Statuses.created);
  289.                         foreach (var userTask in userTasks)
  290.                         {
  291.                             userTask.Status = UserTask.Statuses.closed;
  292.                         }
  293.                     }
  294.                     else
  295.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  296.                     break;
  297.  
  298.                 case ProjectTask.Statuses.receiveDepartmentManagerTaskAgreement:
  299.                     if (projectTask.IdExecutorDepartment == curDepartment.Id && curUser.Id == curDepartment.IdManager)
  300.                     {
  301.                         projectTask.Status = ProjectTask.Statuses.revision;
  302.  
  303.                         if (projectTask.Department_IdAutorDepartment.Id > 0)
  304.                         {
  305.                             dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, projectTask.IdAutor, "Доработать задание");
  306.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.User_IdAutor);
  307.                         }
  308.                         else
  309.                         {
  310.                             dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, gip.IdManager, "Доработать задание");
  311.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gip.User);
  312.                             foreach (var gipUser in gip.Users)
  313.                             {
  314.                                 dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, gipUser.Id, "Доработать задание");
  315.                                 ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gipUser);
  316.                             }
  317.                         }
  318.  
  319.                         if (projectTask.Department_IdAutorDepartment.User.Id != projectTask.IdAutor)
  320.                         {
  321.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.Department_IdAutorDepartment.User.Id);
  322.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdAutorDepartment.User);
  323.                         }
  324.  
  325.                         if (projectTask.IdExecutorDepartment != 0 && !gip.Includes(projectTask.User_IdAutor))
  326.                         {
  327.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, gip.IdManager);
  328.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gip.User);
  329.                             foreach (var gipUser in gip.Users)
  330.                             {
  331.                                 dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, gipUser.Id);
  332.                                 ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gipUser);
  333.                             }
  334.                         }
  335.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  336.                     }
  337.                     else
  338.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  339.                     break;
  340.  
  341.                 case ProjectTask.Statuses.expectsExecution:
  342.                     if (projectTask.IdExecutor.Value == curUser.Id)
  343.                     {
  344.                         projectTask.Status = ProjectTask.Statuses.revision;
  345.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  346.  
  347.                         if (projectTask.Department_IdAutorDepartment.Id > 0)
  348.                         {
  349.                             dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, projectTask.IdAutor, "Доработать задание");
  350.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.User_IdAutor);
  351.  
  352.                             if (projectTask.Department_IdAutorDepartment.User.Id != projectTask.IdAutor)
  353.                             {
  354.                                 dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.Department_IdAutorDepartment.User.Id);
  355.                                 ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdAutorDepartment.User);
  356.                             }
  357.  
  358.                             if (!gip.Includes(projectTask.User_IdAutor))
  359.                             {
  360.                                 dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, gip.IdManager);
  361.                                 ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gip.User);
  362.                                 foreach (var gipUser in gip.Users)
  363.                                 {
  364.                                     dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, gipUser.Id);
  365.                                     ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gipUser);
  366.                                 }
  367.                             }
  368.                         }
  369.                         else
  370.                         {
  371.                             dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, gip.IdManager, "Доработать задание");
  372.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gip.User);
  373.                             foreach (var gipUser in gip.Users)
  374.                             {
  375.                                 dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, gipUser.Id, "Доработать задание");
  376.                                 ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gipUser);
  377.                             }
  378.                         }
  379.  
  380.                         if (curUser.Id != projectTask.Department_IdExecutorDepartment.User.Id)
  381.                         {
  382.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.Department_IdExecutorDepartment.User.Id);
  383.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdExecutorDepartment.User);
  384.                         }
  385.                     }
  386.                     else
  387.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  388.                     break;
  389.  
  390.                 case ProjectTask.Statuses.receiveDepartmentManagerResultAgreement:
  391.                     if (projectTask.Department_IdExecutorDepartment.User.Id == curUser.Id)
  392.                     {
  393.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  394.                         projectTask.Status = ProjectTask.Statuses.executing;
  395.                         dbContext.UserTasks.Add(new UserTask()
  396.                         {
  397.                             Type = UserTask.Types.Agreement,
  398.                             EntityType = UserTask.EntityTypes.projectTask,
  399.                             IdEntity = projectTask.Id,
  400.                             IdUserAutor = curUser.Id,
  401.                             Text = "Доработать результат задания " + projectTask.Code,
  402.                             IdUserExecutor = projectTask.IdExecutor.Value,
  403.                             DtFinish = projectTask.DtFinish
  404.                         });
  405.                         ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.User_IdExecutor);
  406.                     }
  407.                     else
  408.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  409.                     break;
  410.                 default:
  411.                     throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  412.             }
  413.  
  414.             dbContext.LogSimples.Add(new LogSimple()
  415.             {
  416.                 Action = "Возвращено на доработку",
  417.                 Comment = comment,
  418.                 Dt = DateTime.Now,
  419.                 Entity = "projectTask",
  420.                 Id = projectTask.Id,
  421.                 IdUser = curUser.Id
  422.             });
  423.  
  424.             dbContext.Entry(projectTask.Department_IdExecutorDepartment).Property(h => h.IdManager).IsModified = false;
  425.             dbContext.Entry(projectTask.Department_IdAutorDepartment).Property(h => h.IdManager).IsModified = false;
  426.             dbContext.SaveChanges();
  427.         }
  428.     }
  429.  
  430.     [OperationContract]
  431.     public void AgreeProjectTask(long projectTaskId, string comment, long? ExecutorUserId)
  432.     {
  433.         using (var dbContext = new FalconDbContext())
  434.         {
  435.             var curUser = GetCurrentUser();
  436.             var projectTask = dbContext.ProjectTasks.Include(pt => pt.Folder)
  437.                 .Include(pt => pt.User_IdExecutor)
  438.                 .Include(pt => pt.User_IdAutor)
  439.                 .Include(pt => pt.Department_IdAutorDepartment.User)
  440.                 .Include(pt => pt.Department_IdExecutorDepartment.User)
  441.                 .First(pt => pt.Id == projectTaskId);
  442.  
  443.             var curDepartment = GetDepartmentByUser(projectTask.IdProject, curUser);
  444.  
  445.             if (curUser.Id == 19 && projectTask.IdExecutorDepartment == 19)//todo: КОСТЫЛЬ
  446.             {
  447.                 curDepartment = dbContext.Departments.Find(19);
  448.             }
  449.  
  450.             var gip = dbContext.Gips.Include(g => g.User).Include(g => g.Users).First(g => g.Id == projectTask.Folder.IdGip);
  451.             //временно подставляем начальника БГИП в качестве начальника выдающего отдела, если выдаёт задание БГИП (в базу эти изменения не идут, т.к на разных проектах гипы разные)
  452.             if (projectTask.Department_IdAutorDepartment.Id == 0)
  453.             {
  454.                 projectTask.Department_IdAutorDepartment.User = gip.User;
  455.             }
  456.             //временно подставляем начальника БГИП в качестве начальника принимающего отдела, если принимает задание БГИП (в базу эти изменения не идут, т.к на разных проектах гипы разные)
  457.             if (projectTask.Department_IdExecutorDepartment.Id == 0)
  458.             {
  459.                 projectTask.Department_IdExecutorDepartment.User = gip.User;
  460.             }
  461.             string actionText = "Согласовано";
  462.             switch (projectTask.Status)
  463.             {
  464.                 case ProjectTask.Statuses.created:
  465.                 case ProjectTask.Statuses.revision:
  466.                     if (projectTask.IdAutor == curUser.Id)
  467.                     {
  468.                         if (gip.IdManager == curUser.Id)
  469.                             goto case ProjectTask.Statuses.projectGIPTaskAgreement;
  470.  
  471.                         if (projectTask.Department_IdAutorDepartment.User.Id == curUser.Id)
  472.                             goto case ProjectTask.Statuses.releaseDepartmentManagerTaskAgreement;
  473.  
  474.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  475.                         actionText = "Передано на согласование";
  476.                         projectTask.Status = ProjectTask.Statuses.releaseDepartmentManagerTaskAgreement;
  477.                         dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, projectTask.Department_IdAutorDepartment.User.Id);
  478.  
  479.                         ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdAutorDepartment.User);
  480.                     }
  481.                     else
  482.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  483.                     break;
  484.  
  485.                 case ProjectTask.Statuses.releaseDepartmentManagerTaskAgreement:
  486.                     if (projectTask.IdAutorDepartment == curDepartment.Id && curUser.Id == curDepartment.IdManager)
  487.                     {
  488.  
  489.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  490.                         if (projectTask.IdExecutorDepartment == 0 || projectTask.IdAutorDepartment == 0)
  491.                         {
  492.                             projectTask.Status = ProjectTask.Statuses.receiveDepartmentManagerTaskAgreement;
  493.                             dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, projectTask.Department_IdExecutorDepartment.User.Id);
  494.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdExecutorDepartment.User);
  495.                         }
  496.                         else
  497.                         {
  498.                             projectTask.Status = ProjectTask.Statuses.projectGIPTaskAgreement;
  499.                             dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, gip.IdManager);
  500.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gip.User);
  501.                             foreach (var gipUser in gip.Users)
  502.                             {
  503.                                 dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, gipUser.Id);
  504.                                 ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gipUser);
  505.                             }
  506.                         }
  507.                     }
  508.                     else
  509.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  510.                     break;
  511.  
  512.                 case ProjectTask.Statuses.projectGIPTaskAgreement:
  513.                     if (gip.Includes(curUser))
  514.                     {
  515.                         projectTask.Status = ProjectTask.Statuses.receiveDepartmentManagerTaskAgreement;
  516.                         dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, projectTask.Department_IdExecutorDepartment.User.Id);
  517.                         ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdExecutorDepartment.User);
  518.                         var gipMembersIds = gip.Users.Select(u => u.Id).ToArray();
  519.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, gip.IdManager).Status = UserTask.Statuses.closed;
  520.                         foreach (var gipUser in gip.Users)
  521.                         {
  522.                             var gipUserTask = dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, gipUser.Id);
  523.                             if (gipUserTask != null)
  524.                                 gipUserTask.Status = UserTask.Statuses.closed;
  525.                         }
  526.                     }
  527.                     else
  528.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  529.                     break;
  530.  
  531.                 case ProjectTask.Statuses.receiveDepartmentManagerTaskAgreement:
  532.                     if (ExecutorUserId.HasValue && projectTask.IdExecutorDepartment == curDepartment.Id && curUser.Id == curDepartment.IdManager)
  533.                     {
  534.                         projectTask.Status = ProjectTask.Statuses.expectsExecution;
  535.                         projectTask.IdExecutor = ExecutorUserId;
  536.                         dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, ExecutorUserId.Value, "Принять назание на выполнение");
  537.  
  538.                         ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, dbContext.Users.Find(ExecutorUserId.Value));
  539.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  540.                     }
  541.                     else
  542.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  543.                     break;
  544.  
  545.                 case ProjectTask.Statuses.expectsExecution:
  546.                     if (projectTask.IdExecutor.Value == curUser.Id)
  547.                     {
  548.                         actionText = "Принято в работу";
  549.                         projectTask.Status = ProjectTask.Statuses.executing;
  550.  
  551.                         dbContext.UserTasks.Add(new UserTask()
  552.                         {
  553.                             Type = UserTask.Types.Agreement,
  554.                             EntityType = UserTask.EntityTypes.projectTask,
  555.                             IdEntity = projectTask.Id,
  556.                             IdUserAutor = curUser.Id,
  557.                             Text = "Выполнить задание " + projectTask.Code,
  558.                             IdUserExecutor = curUser.Id,
  559.                             DtFinish = projectTask.DtFinish
  560.                         });
  561.  
  562.                         dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.User_IdAutor.Id, "Принято в работу");
  563.                         ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.User_IdAutor);
  564.  
  565.                         if (projectTask.User_IdAutor.Id != projectTask.Department_IdAutorDepartment.User.Id)
  566.                         {
  567.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.Department_IdAutorDepartment.User.Id, "Принято в работу");
  568.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdAutorDepartment.User);
  569.                         }
  570.  
  571.                         if (projectTask.User_IdExecutor.Id != projectTask.Department_IdExecutorDepartment.User.Id)
  572.                         {
  573.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.User_IdExecutor.Id, "Принято в работу");
  574.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.User_IdExecutor);
  575.                         }
  576.  
  577.                         if (projectTask.IdExecutorDepartment != 0 && !gip.Includes(projectTask.User_IdAutor))
  578.                         {
  579.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, gip.IdManager, "Принято в работу");
  580.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gip.User);
  581.                             foreach (var gipUser in gip.Users)
  582.                             {
  583.                                 dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, gipUser.Id, "Принято в работу");
  584.                                 ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gipUser);
  585.                             }
  586.                         }
  587.  
  588.                         ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, curUser);
  589.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  590.                     }
  591.                     else
  592.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  593.                     break;
  594.  
  595.                 case ProjectTask.Statuses.executing:
  596.                     if (projectTask.IdExecutor.Value == curUser.Id)
  597.                     {
  598.                         if (projectTask.Department_IdExecutorDepartment.User.Id == curUser.Id
  599.                             ||
  600.                            (projectTask.Department_IdExecutorDepartment.Id == 0 && gip.IdManager == curUser.Id))
  601.                             goto case ProjectTask.Statuses.receiveDepartmentManagerResultAgreement;
  602.  
  603.                         actionText = "Выполнено";
  604.                         projectTask.Status = ProjectTask.Statuses.receiveDepartmentManagerResultAgreement;
  605.  
  606.                         if (projectTask.Department_IdExecutorDepartment.Id > 0)
  607.                         {
  608.                             dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, projectTask.Department_IdExecutorDepartment.User.Id, "Согласовать результат");
  609.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdExecutorDepartment.User);
  610.                         }
  611.                         else
  612.                         {
  613.                             dbContext.UserTasks.AddProjectTaskAgreement(projectTask, curUser.Id, gip.IdManager, "Согласовать результат");
  614.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gip.User);
  615.                         }
  616.  
  617.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  618.                     }
  619.                     else
  620.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  621.                     break;
  622.  
  623.                 case ProjectTask.Statuses.receiveDepartmentManagerResultAgreement:
  624.                     if (projectTask.IdExecutorDepartment == curDepartment.Id && curUser.Id == curDepartment.IdManager)
  625.                     {
  626.                         actionText = "Закрыто";
  627.                         projectTask.Status = ProjectTask.Statuses.done;
  628.  
  629.                         dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.User_IdAutor.Id, "Задание закрыто");
  630.                         ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.User_IdAutor);
  631.  
  632.                         if (projectTask.User_IdAutor.Id != projectTask.Department_IdAutorDepartment.User.Id)
  633.                         {
  634.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.Department_IdAutorDepartment.User.Id, "Задание закрыто");
  635.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.Department_IdAutorDepartment.User);
  636.                         }
  637.  
  638.                         if (projectTask.User_IdExecutor.Id != projectTask.Department_IdExecutorDepartment.User.Id)
  639.                         {
  640.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, projectTask.User_IdExecutor.Id, "Задание закрыто");
  641.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, projectTask.User_IdExecutor);
  642.                         }
  643.  
  644.                         if (projectTask.IdExecutorDepartment != 0 && !gip.Includes(projectTask.User_IdAutor))
  645.                         {
  646.                             dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, gip.IdManager, "Задание закрыто");
  647.                             ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gip.User);
  648.                             foreach (var gipUser in gip.Users)
  649.                             {
  650.                                 dbContext.UserTasks.AddProjectTaskNotice(projectTask.Id, curUser.Id, gipUser.Id, "Задание закрыто");
  651.                                 ServerMessageService.SendNotificationMessage("PROJECTTASK", projectTaskId, gipUser);
  652.                             }
  653.                         }
  654.  
  655.                         dbContext.UserTasks.GetProjectTaskAgreement(projectTask.Id, curUser.Id).Status = UserTask.Statuses.closed;
  656.                     }
  657.                     else
  658.                         throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  659.                     break;
  660.  
  661.                 default:
  662.                     throw new Exception("Ошибка передачи задания, обратитесть к администратору Falcon");
  663.             }
  664.  
  665.  
  666.  
  667.             dbContext.LogSimples.Add(new LogSimple()
  668.             {
  669.                 Action = actionText,
  670.                 Comment = comment,
  671.                 Dt = DateTime.Now,
  672.                 Entity = "projectTask",
  673.                 Id = projectTask.Id,
  674.                 IdUser = curUser.Id
  675.             });
  676.  
  677.             dbContext.Entry(projectTask.Department_IdExecutorDepartment).Property(h => h.IdManager).IsModified = false;
  678.             dbContext.Entry(projectTask.Department_IdAutorDepartment).Property(h => h.IdManager).IsModified = false;
  679.             dbContext.SaveChanges();
  680.         }
  681.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement