2024-09-23 05:00:01 +04:00
using ComponentsLibrary.NonVisualComponents.HelperModels ;
using ComponentsLibraryNet60.Models ;
using Contracts.BindingModels ;
using Contracts.BusinessLogicsContracts ;
using Contracts.ViewModels ;
using System ;
using System.Collections.Generic ;
using System.ComponentModel ;
using System.Data ;
using System.Drawing ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using System.Windows.Forms ;
namespace WinForms
{
/// <summary>
/// Главная форма
/// </summary>
public partial class FormMain : Form
{
/// <summary>
/// Бизнес-логика для сущности "Счет"
/// </summary>
private readonly IOrderLogic _orderLogic ;
/// <summary>
/// Бизнес-логика для сущности "Тип заказа"
/// </summary>
private readonly IOrderTypeLogic _orderTypeLogic ;
/// <summary>
/// Конструктор
/// </summary>
/// <param name="orderLogic"></param>
/// <param name="orderTypeLogic"></param>
public FormMain ( IOrderLogic orderLogic , IOrderTypeLogic orderTypeLogic )
{
InitializeComponent ( ) ;
_orderLogic = orderLogic ;
_orderTypeLogic = orderTypeLogic ;
userTreeView . ContextMenuStrip = contextMenuStrip ;
}
/// <summary>
/// Загрузка формы
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormMain_Load ( object sender , EventArgs e )
{
var hierarchy = new List < string > ( )
{
"Type" ,
"Sum" ,
"Id" ,
2024-09-23 13:33:24 +04:00
"WaiterFullName"
2024-09-23 05:00:01 +04:00
} ;
userTreeView . SetHierarchy ( hierarchy ) ;
LoadData ( ) ;
}
/// <summary>
/// Элемент контекстного меню "Добавить запись"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void createElementToolStripMenuItem_Click ( object sender , EventArgs e )
{
AddElement ( ) ;
}
/// <summary>
/// Элемент контекстного меню "Редактировать запись"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void updateElementToolStripMenuItem_Click ( object sender , EventArgs e )
{
UpdateElement ( ) ;
}
/// <summary>
/// Элемент контекстного меню "Удалить запись"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void deleteElementToolStripMenuItem_Click ( object sender , EventArgs e )
{
DeleteElement ( ) ;
}
/// <summary>
/// Элемент контекстного меню "Создать документ Word"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void createWordDocumentToolStripMenuItem_Click ( object sender , EventArgs e )
{
CreateWordDocument ( ) ;
}
/// <summary>
/// Элемент контекстного меню "Создать документ Excel"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void createExcelDocumentToolStripMenuItem_Click ( object sender , EventArgs e )
{
CreateExcelDocument ( ) ;
}
/// <summary>
/// Элемент контекстного меню "Создать документ Pdf"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void createPdfDocumentToolStripMenuItem_Click ( object sender , EventArgs e )
{
CreatePdfDocument ( ) ;
}
/// <summary>
/// Элемент контекстного меню "Типы заказов"
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void orderTypesToolStripMenuItem_Click ( object sender , EventArgs e )
{
2024-09-23 13:33:24 +04:00
ShowFormOrderTypes ( ) ;
2024-09-23 05:00:01 +04:00
}
/// <summary>
/// Загрузка данных
/// </summary>
private void LoadData ( )
{
try
{
var orders = _orderLogic . ReadList ( null ) ;
if ( orders = = null )
{
return ;
}
foreach ( var order in orders )
{
if ( string . IsNullOrEmpty ( order . Sum ) )
{
order . Sum = "По акции" ;
}
userTreeView . AddObjectToTree ( order ) ;
}
}
catch ( Exception ex )
{
MessageBox . Show ( ex . Message , "Ошибка" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
}
}
/// <summary>
/// Добавить запись
/// </summary>
private void AddElement ( )
{
var service = Program . ServiceProvider ? . GetService ( typeof ( FormOrder ) ) ;
if ( ! ( service is FormOrder form ) )
{
return ;
}
if ( form . ShowDialog ( ) = = DialogResult . OK )
{
LoadData ( ) ;
}
}
/// <summary>
2024-09-23 13:33:24 +04:00
/// Редактировать запись
2024-09-23 05:00:01 +04:00
/// </summary>
private void UpdateElement ( )
{
var service = Program . ServiceProvider ? . GetService ( typeof ( FormOrder ) ) ;
if ( ! ( service is FormOrder form ) )
{
return ;
}
2024-09-23 13:33:24 +04:00
var selectedOrder = userTreeView . GetSelectedObject < OrderViewModel > ( ) ;
2024-09-23 05:00:01 +04:00
if ( selectedOrder = = null )
{
MessageBox . Show ( "Выберите счет для редактирования!" , "Ошибка" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
return ;
}
form . Id = Convert . ToInt32 ( selectedOrder . Id ) ;
if ( form . ShowDialog ( ) = = DialogResult . OK )
{
LoadData ( ) ;
}
}
/// <summary>
2024-09-23 13:33:24 +04:00
/// Удалить запись
2024-09-23 05:00:01 +04:00
/// </summary>
private void DeleteElement ( )
{
2024-09-23 13:33:24 +04:00
if ( MessageBox . Show ( "Удалить запись?" , "Вопрос" , MessageBoxButtons . YesNo , MessageBoxIcon . Question ) ! = DialogResult . Yes )
2024-09-23 05:00:01 +04:00
{
return ;
}
2024-09-23 13:33:24 +04:00
var selectedOrder = userTreeView . GetSelectedObject < OrderViewModel > ( ) ;
2024-09-23 05:00:01 +04:00
int id = Convert . ToInt32 ( selectedOrder . Id ) ;
try
{
_orderLogic . Delete ( new OrderBindingModel { Id = id } ) ;
}
catch ( Exception ex )
{
MessageBox . Show ( ex . Message , "Ошибка" , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
}
LoadData ( ) ;
}
/// <summary>
/// Создать документ Word
/// </summary>
private void CreateWordDocument ( )
{
string fileName = "" ;
using ( var dialog = new SaveFileDialog { Filter = "docx|*.docx" } )
{
if ( dialog . ShowDialog ( ) = = DialogResult . OK )
{
fileName = dialog . FileName . ToString ( ) ;
MessageBox . Show ( "Выполнено" , "Успех" , MessageBoxButtons . OK , MessageBoxIcon . Information ) ;
}
}
var orders = _orderLogic . ReadList ( null ) ;
if ( orders = = null )
{
return ;
}
foreach ( var order in orders )
{
if ( string . IsNullOrEmpty ( order . Sum ) )
{
order . Sum = "По акции" ;
}
}
componentDocumentWithTableMultiHeaderWord1 . CreateDoc ( new ComponentDocumentWithTableHeaderDataConfig < OrderViewModel >
{
FilePath = fileName ,
Header = "Информация по счетам." ,
ColumnsRowsWidth = new List < ( int Column , int Row ) > ( )
{
( 5 , 5 ) ,
( 10 , 5 ) ,
( 15 , 0 ) ,
( 15 , 0 ) ,
} ,
Headers = new List < ( int ColumnIndex , int RowIndex , string Header , string PropertyName ) > ( )
{
( 0 , 0 , "Id" , "Id" ) ,
( 1 , 0 , "ФИО официанта" , "WaiterFullName" ) ,
( 2 , 0 , "Тип заказа" , "Type" ) ,
( 3 , 0 , "Сумма заказа" , "Sum" )
} ,
Data = orders ,
} ) ;
}
/// <summary>
/// Создать документ Excel
/// </summary>
private void CreateExcelDocument ( )
{
string fileName = "" ;
using ( var dialog = new SaveFileDialog { Filter = "xlsx|*.xlsx" } )
{
if ( dialog . ShowDialog ( ) = = DialogResult . OK )
{
fileName = dialog . FileName . ToString ( ) ;
MessageBox . Show ( "Выполнено" , "Успех" , MessageBoxButtons . OK , MessageBoxIcon . Information ) ;
}
}
var orders = _orderLogic . ReadList ( null ) ;
if ( orders = = null )
{
return ;
}
string title = "Информация по аукционным счетам." ;
List < string > rows = new List < string > ( ) ;
foreach ( var order in orders )
{
if ( string . IsNullOrEmpty ( order . Sum ) )
{
string row = $"ФИО официанта: {order.WaiterFullName} -- Описание счета: {order.Info}" ;
rows . Add ( row ) ;
}
}
string [ ] rowsArray = rows . ToArray ( ) ;
bigTextComponent1 . CreateDocument ( fileName , title , rowsArray ) ;
}
/// <summary>
/// Создать документ Pdf
/// </summary>
private void CreatePdfDocument ( )
{
string fileName = "" ;
using ( var dialog = new SaveFileDialog { Filter = "pdf|*.pdf" } )
{
if ( dialog . ShowDialog ( ) = = DialogResult . OK )
{
fileName = dialog . FileName . ToString ( ) ;
MessageBox . Show ( "Выполнено" , "Успех" , MessageBoxButtons . OK , MessageBoxIcon . Information ) ;
}
}
var orders = _orderLogic . ReadList ( null ) ;
if ( orders = = null )
{
return ;
}
var orderTypes = _orderTypeLogic . ReadList ( null ) ;
if ( orderTypes = = null )
{
return ;
}
List < ( double , string ) > items = new List < ( double , string ) > ( ) ;
foreach ( var orderType in orderTypes )
{
int count = 0 ;
foreach ( var order in orders )
{
2024-09-23 13:33:24 +04:00
if ( order . Type = = orderType . Name & & string . IsNullOrEmpty ( order . Sum ) )
2024-09-23 05:00:01 +04:00
{
count + + ;
}
}
items . Add ( ( count , orderType . Name ) ) ;
}
pdfPieChart1 . CreatePieChart ( new DataForPieChart ( fileName , "Информация по оплаченным счетам каждого типа заказов" , "Круговая диаграмма" , DiagramLegendEnum . Top , "Типы заказов" , items ) ) ;
}
2024-09-23 13:33:24 +04:00
/// <summary>
/// Вывести форму списка типов заказов
/// </summary>
private void ShowFormOrderTypes ( )
{
var service = Program . ServiceProvider ? . GetService ( typeof ( FormOrderTypes ) ) ;
if ( ! ( service is FormOrderTypes form ) )
{
return ;
}
form . ShowDialog ( ) ;
}
/// <summary>
/// Обработка нажатия кнопок
/// </summary>
/// <param name="msg"></param>
/// <param name="keyData"></param>
/// <returns></returns>
protected override bool ProcessCmdKey ( ref Message msg , Keys keyData )
{
// Ctrl+A - добавить запись
if ( keyData = = ( Keys . Control | Keys . A ) )
{
AddElement ( ) ;
return true ;
}
// Ctrl+U - редактировать запись
if ( keyData = = ( Keys . Control | Keys . U ) )
{
UpdateElement ( ) ;
return true ;
}
// Ctrl+D - удалить запись
if ( keyData = = ( Keys . Control | Keys . D ) )
{
DeleteElement ( ) ;
return true ;
}
// Ctrl+S - создать документ Word
if ( keyData = = ( Keys . Control | Keys . S ) )
{
CreateWordDocument ( ) ;
return true ;
}
// Ctrl+T - создать документ Excel
if ( keyData = = ( Keys . Control | Keys . T ) )
{
CreateExcelDocument ( ) ;
return true ;
}
// Ctrl+C - создать документ Pdf
if ( keyData = = ( Keys . Control | Keys . C ) )
{
CreatePdfDocument ( ) ;
return true ;
}
// Ctrl+M - вывести форму списка типов заказов
if ( keyData = = ( Keys . Control | Keys . M ) )
{
ShowFormOrderTypes ( ) ;
return true ;
}
return base . ProcessCmdKey ( ref msg , keyData ) ;
}
2024-09-23 05:00:01 +04:00
}
}