Diagram.xaml.cs 8.9 KB

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