Diagram.xaml.cs 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using Esoft;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Input;
  8. using Excel = Microsoft.Office.Interop.Excel;
  9. using Word = Microsoft.Office.Interop.Word;
  10. using System.Windows.Forms.DataVisualization.Charting;
  11. using System.Windows.Forms.Integration;
  12. namespace Esoft.Pages
  13. {
  14. /// <summary>
  15. /// Логика взаимодействия для Diagram.xaml
  16. /// </summary>
  17. public partial class Diagram : Window
  18. {
  19. private user6Entities _context = new user6Entities();
  20. List<string> listStatus = new List<string>()
  21. {
  22. "запланирована", "выполнена", "отменена", "исполняется"
  23. };
  24. public Diagram()
  25. {
  26. InitializeComponent();
  27. ChartPayments.ChartAreas.Add(new ChartArea("Main"));
  28. var currentSeries = new Series("Количество")
  29. {
  30. IsValueShownAsLabel = true
  31. };
  32. ChartPayments.Series.Add(currentSeries);
  33. ComboExecutor.ItemsSource = listStatus;
  34. ComboChartTypes.ItemsSource = Enum.GetValues(typeof(SeriesChartType));
  35. }
  36. private void UpdateChart(object sender, SelectionChangedEventArgs e)
  37. {
  38. if (ComboExecutor.SelectedItem is string value &&
  39. ComboChartTypes.SelectedItem is SeriesChartType chartType)
  40. {
  41. Series currentSeries = ChartPayments.Series.FirstOrDefault();
  42. currentSeries.ChartType = chartType;
  43. currentSeries.Points.Clear();
  44. var categoriesList = _context.Task.ToList();
  45. currentSeries.Points.AddXY(value, categoriesList.Where(x => x.Status == value).Count());
  46. }
  47. }
  48. private void Window_Loaded(object sender, RoutedEventArgs e)
  49. {
  50. if (Owner != null)
  51. Owner.IsEnabled = false;
  52. }
  53. private void Window_Closed(object sender, EventArgs e)
  54. {
  55. if (Owner != null)
  56. Owner.IsEnabled = true;
  57. }
  58. private void btnClose_Click(object sender, RoutedEventArgs e)
  59. {
  60. this.Close();
  61. }
  62. private void btnMinimize_Click(object sender, RoutedEventArgs e)
  63. {
  64. WindowState = WindowState.Minimized;
  65. }
  66. private void Window_MouseDown(object sender, MouseButtonEventArgs e)
  67. {
  68. if (e.LeftButton == MouseButtonState.Pressed) { DragMove(); }
  69. }
  70. private void btnExcel_Click(object sender, RoutedEventArgs e)
  71. {
  72. var allTask = _context.Task.ToList();
  73. var executor = _context.Executor.ToList();
  74. var application = new Excel.Application();
  75. application.SheetsInNewWorkbook = executor.Count();
  76. Excel.Workbook workbook = application.Workbooks.Add(Type.Missing);
  77. for (int i = 0; i < executor.Count(); i++)
  78. {
  79. int startRowIndex = 1;
  80. Excel.Worksheet worksheet = application.Worksheets.Item[i + 1];
  81. worksheet.Name = executor[i].User.MiddleName;
  82. worksheet.Cells[1][startRowIndex] = "Менеджер";
  83. worksheet.Cells[2][startRowIndex] = "Статус задачи";
  84. worksheet.Cells[3][startRowIndex] = "Тип работы";
  85. worksheet.Cells[4][startRowIndex] = "Время на выполнение";
  86. worksheet.Cells[5][startRowIndex] = "Время на выполнение в часах";
  87. worksheet.Cells[6][startRowIndex] = "Сложность";
  88. startRowIndex++;
  89. foreach (var titleTask in allTask.Where(x => x.Executor.User.MiddleName == executor[i].User.MiddleName))
  90. {
  91. Excel.Range headerRange = worksheet.Range[worksheet.Cells[1][startRowIndex], worksheet.Cells[8][startRowIndex]];
  92. headerRange.Merge();
  93. headerRange.Value = titleTask.Title;
  94. headerRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
  95. headerRange.Font.Italic = true;
  96. startRowIndex++;
  97. foreach (var mainDateTask in allTask.Where(x => x.Executor.User.MiddleName == executor[i].User.MiddleName))
  98. {
  99. worksheet.Cells[1][startRowIndex] = mainDateTask.Executor.Manager.User.MiddleName;
  100. worksheet.Cells[2][startRowIndex] = mainDateTask.Status;
  101. worksheet.Cells[3][startRowIndex] = mainDateTask.WorkType;
  102. worksheet.Cells[4][startRowIndex] = mainDateTask.Time;
  103. worksheet.Cells[5][startRowIndex].Formula = $"=F{startRowIndex}/60";
  104. worksheet.Cells[8][startRowIndex] = mainDateTask.Difficulty;
  105. worksheet.Cells[8][startRowIndex].NumberFormat =
  106. worksheet.Cells[8][startRowIndex].NumberFormat = "0";
  107. startRowIndex++;
  108. }
  109. }
  110. Excel.Range cauntTask = worksheet.Range[worksheet.Cells[1][startRowIndex], worksheet.Cells[7][startRowIndex]];
  111. cauntTask.Merge();
  112. cauntTask.Value = "Итоговое количество задач:";
  113. cauntTask.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;
  114. worksheet.Cells[8][startRowIndex] = allTask.Where(x => x.ExecutorID == executor[i].ID).ToList().Count();
  115. startRowIndex++;
  116. Excel.Range rangBorder = worksheet.Range[worksheet.Cells[1][1], worksheet.Cells[8][startRowIndex - 1]];
  117. rangBorder.Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle =
  118. rangBorder.Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle =
  119. rangBorder.Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle =
  120. rangBorder.Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle =
  121. rangBorder.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle =
  122. rangBorder.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;
  123. worksheet.Columns.AutoFit();
  124. }
  125. application.Visible = true;
  126. }
  127. private void btnWord_Click(object sender, RoutedEventArgs e)
  128. {
  129. var allTask = _context.Task.ToList();
  130. var allExecuters = _context.Executor.ToList();
  131. var application = new Word.Application();
  132. Word.Document document = application.Documents.Add();
  133. foreach (var ex in allExecuters)
  134. {
  135. Word.Paragraph executerParagraph = document.Paragraphs.Add();
  136. Word.Range executerRange = executerParagraph.Range;
  137. executerRange.Text = ex.User.MiddleName;
  138. executerParagraph.set_Style("Заголовок");
  139. executerRange.InsertParagraphAfter();
  140. Word.Paragraph tableParagraph = document.Paragraphs.Add();
  141. Word.Range tableRange = tableParagraph.Range;
  142. Word.Table tasksTable = document.Tables.Add(tableRange,
  143. allExecuters.Count(), 3);
  144. tasksTable.Borders.InsideLineStyle = tasksTable.Borders.OutsideLineStyle
  145. = Word.WdLineStyle.wdLineStyleSingle;
  146. tasksTable.Range.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
  147. Word.Range cellRange;
  148. cellRange = tasksTable.Cell(1, 1).Range;
  149. cellRange.Text = "Название задачи";
  150. cellRange = tasksTable.Cell(1, 2).Range;
  151. cellRange.Text = "Крайняя дата задачи";
  152. cellRange = tasksTable.Cell(1, 3).Range;
  153. cellRange.Text = "Статус";
  154. tasksTable.Rows[1].Range.Bold = 1;
  155. tasksTable.Rows[1].Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
  156. for (int i = 1; i < allExecuters.Count(); i++)
  157. {
  158. cellRange = tasksTable.Cell(i + 2, 1).Range;
  159. cellRange.Text = allTask[i].Title;
  160. cellRange = tasksTable.Cell(i + 2, 2).Range;
  161. cellRange.Text = allTask[i].Deadline.ToString();
  162. cellRange = tasksTable.Cell(i + 2, 3).Range;
  163. cellRange.Text = allTask[i].Status;
  164. }
  165. if (ex != allExecuters.LastOrDefault())
  166. document.Words.Last.InsertBreak(Word.WdBreakType.wdPageBreak);
  167. }
  168. application.Visible = true;
  169. }
  170. }
  171. }