using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms.DataVisualization.Charting;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
namespace ROGOZ.Pages
{
///
/// Логика взаимодействия для Diagram.xaml
///
public partial class Diagram : Window
{
private user1Entities _context = new user1Entities();
List listStatus = new List()
{
"запланирована", "выполнена", "отменена", "исполняется"
};
public Diagram()
{
InitializeComponent();
ChartPayments.ChartAreas.Add(new ChartArea("Main"));
var currentSeries = new Series("Количество")
{
IsValueShownAsLabel = true
};
ChartPayments.Series.Add(currentSeries);
ComboExecutor.ItemsSource = listStatus;
ComboChartTypes.ItemsSource = Enum.GetValues(typeof(SeriesChartType));
}
private void UpdateChart(object sender, SelectionChangedEventArgs e)
{
if (ComboExecutor.SelectedItem is string value &&
ComboChartTypes.SelectedItem is SeriesChartType chartType)
{
Series currentSeries = ChartPayments.Series.FirstOrDefault();
currentSeries.ChartType = chartType;
currentSeries.Points.Clear();
var categoriesList = _context.Task.ToList();
currentSeries.Points.AddXY(value, categoriesList.Where(x => x.Status == value).Count());
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
if (Owner != null)
Owner.IsEnabled = false;
}
private void Window_Closed(object sender, EventArgs e)
{
if (Owner != null)
Owner.IsEnabled = true;
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void btnMinimize_Click(object sender, RoutedEventArgs e)
{
WindowState = WindowState.Minimized;
}
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed) { DragMove(); }
}
private void btnExcel_Click(object sender, RoutedEventArgs e)
{
var allTask = _context.Task.ToList();
var executor = _context.Executor.ToList();
var application = new Excel.Application();
application.SheetsInNewWorkbook = executor.Count();
Excel.Workbook workbook = application.Workbooks.Add(Type.Missing);
for (int i = 0; i < executor.Count(); i++)
{
int startRowIndex = 1;
Excel.Worksheet worksheet = application.Worksheets.Item[i + 1];
worksheet.Name = executor[i].User.MiddleName;
worksheet.Cells[1][startRowIndex] = "Менеджер";
worksheet.Cells[2][startRowIndex] = "Статус задачи";
worksheet.Cells[3][startRowIndex] = "Тип работы";
worksheet.Cells[4][startRowIndex] = "Время на выполнение";
worksheet.Cells[5][startRowIndex] = "Время на выполнение в часах";
worksheet.Cells[6][startRowIndex] = "Сложность";
startRowIndex++;
foreach (var titleTask in allTask.Where(x => x.Executor.User.MiddleName == executor[i].User.MiddleName))
{
Excel.Range headerRange = worksheet.Range[worksheet.Cells[1][startRowIndex], worksheet.Cells[8][startRowIndex]];
headerRange.Merge();
headerRange.Value = titleTask.Title;
headerRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
headerRange.Font.Italic = true;
startRowIndex++;
foreach (var mainDateTask in allTask.Where(x => x.Executor.User.MiddleName == executor[i].User.MiddleName))
{
worksheet.Cells[1][startRowIndex] = mainDateTask.Executor.Manager.User.MiddleName;
worksheet.Cells[2][startRowIndex] = mainDateTask.Status;
worksheet.Cells[3][startRowIndex] = mainDateTask.WorkType;
worksheet.Cells[4][startRowIndex] = mainDateTask.Time;
worksheet.Cells[5][startRowIndex].Formula = $"=F{startRowIndex}/60";
worksheet.Cells[8][startRowIndex] = mainDateTask.Difficulty;
worksheet.Cells[8][startRowIndex].NumberFormat =
worksheet.Cells[8][startRowIndex].NumberFormat = "0";
startRowIndex++;
}
}
Excel.Range cauntTask = worksheet.Range[worksheet.Cells[1][startRowIndex], worksheet.Cells[7][startRowIndex]];
cauntTask.Merge();
cauntTask.Value = "Итоговое количество задач:";
cauntTask.HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;
worksheet.Cells[8][startRowIndex] = allTask.Where(x => x.ExecutorID == executor[i].ID).ToList().Count();
startRowIndex++;
Excel.Range rangBorder = worksheet.Range[worksheet.Cells[1][1], worksheet.Cells[8][startRowIndex - 1]];
rangBorder.Borders[Excel.XlBordersIndex.xlEdgeBottom].LineStyle =
rangBorder.Borders[Excel.XlBordersIndex.xlEdgeLeft].LineStyle =
rangBorder.Borders[Excel.XlBordersIndex.xlEdgeRight].LineStyle =
rangBorder.Borders[Excel.XlBordersIndex.xlEdgeTop].LineStyle =
rangBorder.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle =
rangBorder.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle = Excel.XlLineStyle.xlContinuous;
worksheet.Columns.AutoFit();
}
application.Visible = true;
}
private void btnWord_Click(object sender, RoutedEventArgs e)
{
var allTask = _context.Task.ToList();
var allExecuters = _context.Executor.ToList();
var application = new Word.Application();
Word.Document document = application.Documents.Add();
foreach (var ex in allExecuters)
{
Word.Paragraph executerParagraph = document.Paragraphs.Add();
Word.Range executerRange = executerParagraph.Range;
executerRange.Text = ex.User.MiddleName;
executerParagraph.set_Style("Заголовок");
executerRange.InsertParagraphAfter();
Word.Paragraph tableParagraph = document.Paragraphs.Add();
Word.Range tableRange = tableParagraph.Range;
Word.Table tasksTable = document.Tables.Add(tableRange,
allExecuters.Count(), 3);
tasksTable.Borders.InsideLineStyle = tasksTable.Borders.OutsideLineStyle
= Word.WdLineStyle.wdLineStyleSingle;
tasksTable.Range.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;
Word.Range cellRange;
cellRange = tasksTable.Cell(1, 1).Range;
cellRange.Text = "Название задачи";
cellRange = tasksTable.Cell(1, 2).Range;
cellRange.Text = "Крайняя дата задачи";
cellRange = tasksTable.Cell(1, 3).Range;
cellRange.Text = "Статус";
tasksTable.Rows[1].Range.Bold = 1;
tasksTable.Rows[1].Range.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
for (int i = 1; i < allExecuters.Count(); i++)
{
cellRange = tasksTable.Cell(i + 2, 1).Range;
cellRange.Text = allTask[i].Title;
cellRange = tasksTable.Cell(i + 2, 2).Range;
cellRange.Text = allTask[i].Deadline.ToString();
cellRange = tasksTable.Cell(i + 2, 3).Range;
cellRange.Text = allTask[i].Status;
}
if (ex != allExecuters.LastOrDefault())
document.Words.Last.InsertBreak(Word.WdBreakType.wdPageBreak);
}
application.Visible = true;
}
}
}