Compare commits

...

2 Commits

108 changed files with 5282 additions and 1075 deletions

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities
{
public class AddMoney
{
public int Id { get; private set; }
public int ClientId { get; private set; }
public DateTime Date { get; private set; }
public int MoneyAmount{ get; private set; }
public static AddMoney CreateEntity(int id,int cId,
DateTime date, int money)
{
return new AddMoney
{
Id = id,
ClientId = cId,
Date = date,
MoneyAmount = money
};
}
}
}

View File

@ -13,10 +13,10 @@ public class Client
public string FullName { get; private set; } = string.Empty; public string FullName { get; private set; } = string.Empty;
public DateTime BirthDate { get; private set; } public DateTime BirthDate { get; private set; }
public string PhoneNumber { get; private set; } = string.Empty; public string PhoneNumber { get; private set; } = string.Empty;
public ClientSocialStatus ClientSocialStatus { get; private set; } public int Money { get; private set; }
public static Client CreateEntity(int id, string fullName, public static Client CreateEntity(int id, string fullName,
DateTime birthDate, string phoneNumber, ClientSocialStatus clientSocialStatus) DateTime birthDate, string phoneNumber, int money)
{ {
return new Client return new Client
{ {
@ -24,7 +24,7 @@ public class Client
FullName = fullName, FullName = fullName,
BirthDate = birthDate, BirthDate = birthDate,
PhoneNumber = phoneNumber, PhoneNumber = phoneNumber,
ClientSocialStatus = clientSocialStatus Money = money
}; };
} }

View File

@ -9,18 +9,20 @@ namespace ProjectTourAgency.Enities;
public class ClientTour public class ClientTour
{ {
public int Id { get; private set; }
public int ClientId { get; private set; } public int ClientId { get; private set; }
public int TourId { get; private set; } public int TourId { get; private set; }
public int Count { get; private set; } public int Cost { get; private set; }
public static ClientTour CreateEntity(int clientId, int tourId, int count) public static ClientTour CreateEntity(int id,int clientId, int tourId, int cost)
{ {
return new ClientTour return new ClientTour
{ {
Id = id,
ClientId = clientId, ClientId = clientId,
TourId = tourId, TourId = tourId,
Count = count Cost = cost
}; };
} }

View File

@ -1,25 +0,0 @@
using ProjectTourAgency.Enities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities;
public class Discount
{
public int Id { get; private set; }
public decimal DiscountPercent { get; private set; }
public ClientSocialStatus ClientSocialStatus { get; private set; }
public static Discount CreateEntity(int id,
ClientSocialStatus clientSocialStatus,decimal discountPercent)
{
return new Discount
{
Id = id,
ClientSocialStatus = clientSocialStatus,
DiscountPercent = discountPercent
};
}
}

View File

@ -0,0 +1,28 @@
using ProjectTourAgency.Enities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities;
public class Employee
{
public int Id { get; private set; }
public string FullName { get; private set; } = string.Empty;
public EmpoyeeJob EmployeeJob { get; private set; }
public static Employee CreateEntity(int id, string fullName,
EmpoyeeJob job)
{
return new Employee
{
Id = id,
FullName = fullName,
EmployeeJob = job
};
}
}

View File

@ -1,15 +1,16 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace ProjectTourAgency.Enities.Enums; namespace ProjectTourAgency.Enities.Enums;
public enum ClientSocialStatus public enum EmpoyeeJob
{ {
None = 0, None = 0,
Student = 1, Driver = 1,
Veteran = 2, Archeologist = 2,
aged = 3 ETC = 3
} }

View File

@ -1,33 +0,0 @@
using ProjectTourAgency.Enities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities;
public class Receipt
{
public int ClientId { get; private set; }
public DateTime Date { get; private set; }
public int TourId { get; private set; }
public int DiscountId { get; private set; }
public decimal FinalCost { get; private set; }
public static Receipt CreateEntity(int clientId, int tourId,int discountId, decimal finalCost)
{
return new Receipt
{
ClientId = clientId,
TourId = tourId,
DiscountId = discountId,
Date = DateTime.Now,
FinalCost = finalCost
};
}
}

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities;
public class Route
{
public int Id { get; private set; }
public int TourId { get; private set; }
public string Destination { get; private set; } = string.Empty;
public string Departure { get; private set; } = string.Empty;
public int Duration { get; private set; }
public static Route CreateEntity(int id, int TourId, string destination,
string departure, int duration)
{
return new Route
{
Id = id,
TourId = TourId,
Destination = destination,
Departure = departure,
Duration = duration
};
}
}

View File

@ -10,22 +10,20 @@ namespace ProjectTourAgency.Enities;
public class Tour public class Tour
{ {
public int Id { get; private set; } public int Id { get; private set; }
public string Destination { get; private set; } = string.Empty; public int EmployeeId { get; private set; }
public string Departure { get; private set; } = string.Empty; public int RouteId { get; private set; }
public DateTime DepartureDate { get; private set; } public DateTime DepartureDate { get; private set; }
public int Duration { get; private set; } public IEnumerable<ClientTour> ClientTours { get; private set; } = [];
public int Cost { get; private set; } public static Tour CreateEntity(int id, int employeeId, int routeId,
public static Tour CreateEntity(int id, string destination, DateTime date,IEnumerable<ClientTour> clientTours)
DateTime date, string departure, int cost, int duration)
{ {
return new Tour return new Tour
{ {
Id = id, Id = id,
Destination = destination, EmployeeId = employeeId,
Departure = departure, RouteId = routeId,
DepartureDate = date, DepartureDate = date,
Cost = cost, ClientTours = clientTours
Duration = duration
}; };
} }
} }

View File

@ -31,11 +31,11 @@
menuStrip1 = new MenuStrip(); menuStrip1 = new MenuStrip();
MenuToolStripMenuItem = new ToolStripMenuItem(); MenuToolStripMenuItem = new ToolStripMenuItem();
ClientsToolStripMenuItem = new ToolStripMenuItem(); ClientsToolStripMenuItem = new ToolStripMenuItem();
ToursToolStripMenuItem = new ToolStripMenuItem(); RotesToolStripMenuItem = new ToolStripMenuItem();
ReceiptsToolStripMenuItem = new ToolStripMenuItem(); EmployeesToolStripMenuItem = new ToolStripMenuItem();
DiscountsToolStripMenuItem = new ToolStripMenuItem();
OperationsToolStripMenuItem = new ToolStripMenuItem(); OperationsToolStripMenuItem = new ToolStripMenuItem();
CLientTourToolStripMenuItem = new ToolStripMenuItem(); пополнитьБалансПользователяToolStripMenuItem = new ToolStripMenuItem();
турToolStripMenuItem = new ToolStripMenuItem();
отчетыToolStripMenuItem = new ToolStripMenuItem(); отчетыToolStripMenuItem = new ToolStripMenuItem();
menuStrip1.SuspendLayout(); menuStrip1.SuspendLayout();
SuspendLayout(); SuspendLayout();
@ -51,7 +51,7 @@
// //
// MenuToolStripMenuItem // MenuToolStripMenuItem
// //
MenuToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ClientsToolStripMenuItem, ToursToolStripMenuItem, ReceiptsToolStripMenuItem, DiscountsToolStripMenuItem }); MenuToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ClientsToolStripMenuItem, RotesToolStripMenuItem, EmployeesToolStripMenuItem });
MenuToolStripMenuItem.Name = "MenuToolStripMenuItem"; MenuToolStripMenuItem.Name = "MenuToolStripMenuItem";
MenuToolStripMenuItem.Size = new Size(94, 20); MenuToolStripMenuItem.Size = new Size(94, 20);
MenuToolStripMenuItem.Text = "Справочники"; MenuToolStripMenuItem.Text = "Справочники";
@ -59,44 +59,44 @@
// ClientsToolStripMenuItem // ClientsToolStripMenuItem
// //
ClientsToolStripMenuItem.Name = "ClientsToolStripMenuItem"; ClientsToolStripMenuItem.Name = "ClientsToolStripMenuItem";
ClientsToolStripMenuItem.Size = new Size(217, 22); ClientsToolStripMenuItem.Size = new Size(140, 22);
ClientsToolStripMenuItem.Text = "Клиенты"; ClientsToolStripMenuItem.Text = "Клиенты";
ClientsToolStripMenuItem.Click += ClientsToolStripMenuItem_Click; ClientsToolStripMenuItem.Click += ClientsToolStripMenuItem_Click;
// //
// ToursToolStripMenuItem // RotesToolStripMenuItem
// //
ToursToolStripMenuItem.Name = "ToursToolStripMenuItem"; RotesToolStripMenuItem.Name = "RotesToolStripMenuItem";
ToursToolStripMenuItem.Size = new Size(217, 22); RotesToolStripMenuItem.Size = new Size(140, 22);
ToursToolStripMenuItem.Text = "Туры"; RotesToolStripMenuItem.Text = "маршруты";
ToursToolStripMenuItem.Click += ToursToolStripMenuItem_Click; RotesToolStripMenuItem.Click += RotesToolStripMenuItem_Click;
// //
// ReceiptsToolStripMenuItem // EmployeesToolStripMenuItem
// //
ReceiptsToolStripMenuItem.Name = "ReceiptsToolStripMenuItem"; EmployeesToolStripMenuItem.Name = "EmployeesToolStripMenuItem";
ReceiptsToolStripMenuItem.Size = new Size(217, 22); EmployeesToolStripMenuItem.Size = new Size(140, 22);
ReceiptsToolStripMenuItem.Text = "Чеки"; EmployeesToolStripMenuItem.Text = "Сотрудники";
ReceiptsToolStripMenuItem.Click += ReceiptsToolStripMenuItem_Click; EmployeesToolStripMenuItem.Click += EmployeesToolStripMenuItem_Click;
//
// DiscountsToolStripMenuItem
//
DiscountsToolStripMenuItem.Name = "DiscountsToolStripMenuItem";
DiscountsToolStripMenuItem.Size = new Size(217, 22);
DiscountsToolStripMenuItem.Text = "Предостовляемые скидки";
DiscountsToolStripMenuItem.Click += DiscountsToolStripMenuItem_Click;
// //
// OperationsToolStripMenuItem // OperationsToolStripMenuItem
// //
OperationsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { CLientTourToolStripMenuItem }); OperationsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { пополнитьБалансПользователяToolStripMenuItem, турToolStripMenuItem });
OperationsToolStripMenuItem.Name = "OperationsToolStripMenuItem"; OperationsToolStripMenuItem.Name = "OperationsToolStripMenuItem";
OperationsToolStripMenuItem.Size = new Size(75, 20); OperationsToolStripMenuItem.Size = new Size(75, 20);
OperationsToolStripMenuItem.Text = "Операции"; OperationsToolStripMenuItem.Text = "Операции";
// //
// CLientTourToolStripMenuItem // пополнитьБалансПользователяToolStripMenuItem
// //
CLientTourToolStripMenuItem.Name = "CLientTourToolStripMenuItem"; пополнитьБалансПользователяToolStripMenuItem.Name = "пополнитьБалансПользователяToolStripMenuItem";
CLientTourToolStripMenuItem.Size = new Size(180, 22); пополнитьБалансПользователяToolStripMenuItem.Size = new Size(256, 22);
CLientTourToolStripMenuItem.Text = "Оформит поездку"; пополнитьБалансПользователяToolStripMenuItem.Text = "Пополнить баланс пользователя";
CLientTourToolStripMenuItem.Click += CLientTourToolStripMenuItem_Click; пополнитьБалансПользователяToolStripMenuItem.Click += AddMoneyToolStripMenuItem_Click;
//
// турToolStripMenuItem
//
турToolStripMenuItem.Name = урToolStripMenuItem";
турToolStripMenuItem.Size = new Size(256, 22);
турToolStripMenuItem.Text = "Тур";
турToolStripMenuItem.Click += ToursToolStripMenuItem_Click;
// //
// отчетыToolStripMenuItem // отчетыToolStripMenuItem
// //
@ -130,9 +130,9 @@
private ToolStripMenuItem OperationsToolStripMenuItem; private ToolStripMenuItem OperationsToolStripMenuItem;
private ToolStripMenuItem отчетыToolStripMenuItem; private ToolStripMenuItem отчетыToolStripMenuItem;
private ToolStripMenuItem ClientsToolStripMenuItem; private ToolStripMenuItem ClientsToolStripMenuItem;
private ToolStripMenuItem ToursToolStripMenuItem; private ToolStripMenuItem RotesToolStripMenuItem;
private ToolStripMenuItem ReceiptsToolStripMenuItem; private ToolStripMenuItem EmployeesToolStripMenuItem;
private ToolStripMenuItem DiscountsToolStripMenuItem; private ToolStripMenuItem пополнитьБалансПользователяToolStripMenuItem;
private ToolStripMenuItem CLientTourToolStripMenuItem; private ToolStripMenuItem турToolStripMenuItem;
} }
} }

View File

@ -25,6 +25,43 @@ public partial class FormTourAgency : Form
} }
} }
private void RotesToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormRoutes>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void EmployeesToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormEmployees>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void AddMoneyToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormAddMoneys>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ToursToolStripMenuItem_Click(object sender, EventArgs e) private void ToursToolStripMenuItem_Click(object sender, EventArgs e)
{ {
try try
@ -36,40 +73,4 @@ public partial class FormTourAgency : Form
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private void ReceiptsToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormReceipts>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void DiscountsToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormDiscounts>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void CLientTourToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormClientTour>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
} }

View File

@ -0,0 +1,118 @@
namespace ProjectTourAgency.Forms
{
partial class FormAddMoney
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelClient = new Label();
labelMoney = new Label();
comboBoxClientId = new ComboBox();
textBoxMoney = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// labelClient
//
labelClient.AutoSize = true;
labelClient.Location = new Point(32, 28);
labelClient.Name = "labelClient";
labelClient.Size = new Size(66, 15);
labelClient.TabIndex = 0;
labelClient.Text = "ID Клиента";
//
// labelMoney
//
labelMoney.AutoSize = true;
labelMoney.Location = new Point(32, 79);
labelMoney.Name = "labelMoney";
labelMoney.Size = new Size(173, 15);
labelMoney.TabIndex = 1;
labelMoney.Text = "на сколько пополнить баланс";
//
// comboBoxClientId
//
comboBoxClientId.FormattingEnabled = true;
comboBoxClientId.Location = new Point(231, 28);
comboBoxClientId.Name = "comboBoxClientId";
comboBoxClientId.Size = new Size(121, 23);
comboBoxClientId.TabIndex = 2;
//
// textBoxMoney
//
textBoxMoney.Location = new Point(231, 71);
textBoxMoney.Name = "textBoxMoney";
textBoxMoney.Size = new Size(126, 23);
textBoxMoney.TabIndex = 3;
//
// buttonSave
//
buttonSave.Location = new Point(32, 128);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(75, 23);
buttonSave.TabIndex = 4;
buttonSave.Text = "Пополнить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(242, 128);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(89, 26);
buttonCancel.TabIndex = 5;
buttonCancel.Text = "Отмнить";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormAddMoney
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(386, 184);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxMoney);
Controls.Add(comboBoxClientId);
Controls.Add(labelMoney);
Controls.Add(labelClient);
Name = "FormAddMoney";
Text = "FormAddMoney";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelClient;
private Label labelMoney;
private ComboBox comboBoxClientId;
private TextBox textBoxMoney;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,48 @@
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
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 ProjectTourAgency.Forms
{
public partial class FormAddMoney : Form
{
private readonly IAddMoneyRepository _addMoneyRepository;
public FormAddMoney(IAddMoneyRepository addMoneyRepository, IClientRepository clientRepository)
{
InitializeComponent();
_addMoneyRepository = addMoneyRepository ??
throw new ArgumentNullException(nameof(addMoneyRepository));
comboBoxClientId.DataSource = clientRepository.ReadClients();
comboBoxClientId.DisplayMember = "Name";
comboBoxClientId.ValueMember = "Id";
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if (comboBoxClientId.SelectedIndex < 0 || String.IsNullOrWhiteSpace(textBoxMoney.Text))
{
throw new Exception("Имеются незаполненные поля");
}
_addMoneyRepository.CreateAddMoney(AddMoney.CreateEntity(0, (int)comboBoxClientId.SelectedValue!, DateTime.Now, Convert.ToInt32(textBoxMoney.Text)));
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e) => Close();
}
}

View File

@ -1,6 +1,6 @@
namespace ProjectTourAgency.Forms namespace ProjectTourAgency.Forms
{ {
partial class FormReceipts partial class FormAddMoneys
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
@ -50,17 +50,17 @@
dataGridViewData.ReadOnly = true; dataGridViewData.ReadOnly = true;
dataGridViewData.RowHeadersVisible = false; dataGridViewData.RowHeadersVisible = false;
dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewData.Size = new Size(775, 371); dataGridViewData.Size = new Size(699, 362);
dataGridViewData.TabIndex = 5; dataGridViewData.TabIndex = 3;
// //
// panel1 // panel1
// //
panel1.Controls.Add(buttonAdd); panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right; panel1.Dock = DockStyle.Right;
panel1.Location = new Point(775, 0); panel1.Location = new Point(699, 0);
panel1.Name = "panel1"; panel1.Name = "panel1";
panel1.Size = new Size(149, 371); panel1.Size = new Size(149, 362);
panel1.TabIndex = 4; panel1.TabIndex = 2;
// //
// buttonAdd // buttonAdd
// //
@ -73,16 +73,16 @@
buttonAdd.UseVisualStyleBackColor = true; buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += buttonAdd_Click; buttonAdd.Click += buttonAdd_Click;
// //
// FormReceipts // FormAddMoneys
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(924, 371); ClientSize = new Size(848, 362);
Controls.Add(dataGridViewData); Controls.Add(dataGridViewData);
Controls.Add(panel1); Controls.Add(panel1);
Name = "FormReceipts"; Name = "FormAddMoneys";
Text = "FormReceipts"; Text = "FormAddMoneys";
Load += FormReceipts_Load; Load += FormAddMoneys_Load;
((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
panel1.ResumeLayout(false); panel1.ResumeLayout(false);
ResumeLayout(false); ResumeLayout(false);

View File

@ -12,20 +12,20 @@ using Unity;
namespace ProjectTourAgency.Forms namespace ProjectTourAgency.Forms
{ {
public partial class FormReceipts : Form public partial class FormAddMoneys : Form
{ {
private readonly IUnityContainer _container; private readonly IUnityContainer _container;
private readonly IReceiptRepository _receiptRepository; private readonly IAddMoneyRepository _addMoneyRepository;
public FormReceipts(IReceiptRepository ReceiptRepository, IUnityContainer container) public FormAddMoneys(IAddMoneyRepository addMoneyRepository, IUnityContainer container)
{ {
InitializeComponent(); InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container)); _container = container ?? throw new ArgumentNullException(nameof(container));
_receiptRepository = ReceiptRepository ?? throw new ArgumentNullException(nameof(_receiptRepository)); _addMoneyRepository = addMoneyRepository ?? throw new ArgumentNullException(nameof(_addMoneyRepository));
} }
private void FormReceipts_Load(object sender, EventArgs e) private void FormAddMoneys_Load(object sender, EventArgs e)
{ {
try try
{ {
@ -41,7 +41,7 @@ namespace ProjectTourAgency.Forms
{ {
try try
{ {
_container.Resolve<FormReceipt>().ShowDialog(); _container.Resolve<FormAddMoney>().ShowDialog();
LoadList(); LoadList();
} }
catch (Exception ex) catch (Exception ex)
@ -51,7 +51,7 @@ namespace ProjectTourAgency.Forms
} }
private void LoadList() => dataGridViewData.DataSource = _receiptRepository.ReadReceipts(); private void LoadList() => dataGridViewData.DataSource = _addMoneyRepository.ReadAddMoneys();
private bool TryGetIdentifierFromSelectedRow(out int id) private bool TryGetIdentifierFromSelectedRow(out int id)
{ {

View File

@ -29,15 +29,15 @@
private void InitializeComponent() private void InitializeComponent()
{ {
labelName = new Label(); labelName = new Label();
textBoxName = new TextBox(); labelDate = new Label();
labelBirthDate = new Label();
textBoxNumber = new TextBox();
labelNumber = new Label(); labelNumber = new Label();
dateTimePickerBirth = new DateTimePicker(); labelMoney = new Label();
labelSocialStatus = new Label(); textBoxName = new TextBox();
dateTimePickerDate = new DateTimePicker();
textBoxNumber = new TextBox();
textBoxMoney = new TextBox();
buttonSave = new Button(); buttonSave = new Button();
buttonCancel = new Button(); buttonCancel = new Button();
comboBoxSocialStatus = new ComboBox();
SuspendLayout(); SuspendLayout();
// //
// labelName // labelName
@ -49,102 +49,98 @@
labelName.TabIndex = 0; labelName.TabIndex = 0;
labelName.Text = "Полное имя"; labelName.Text = "Полное имя";
// //
// textBoxName // labelDate
// //
textBoxName.Location = new Point(156, 6); labelDate.AutoSize = true;
textBoxName.Name = "textBoxName"; labelDate.Location = new Point(12, 45);
textBoxName.Size = new Size(100, 23); labelDate.Name = "labelDate";
textBoxName.TabIndex = 1; labelDate.Size = new Size(90, 15);
// labelDate.TabIndex = 1;
// labelBirthDate labelDate.Text = "Дата рождения";
//
labelBirthDate.AutoSize = true;
labelBirthDate.Location = new Point(12, 64);
labelBirthDate.Name = "labelBirthDate";
labelBirthDate.Size = new Size(90, 15);
labelBirthDate.TabIndex = 2;
labelBirthDate.Text = "Дата рождения";
//
// textBoxNumber
//
textBoxNumber.Location = new Point(156, 116);
textBoxNumber.Name = "textBoxNumber";
textBoxNumber.Size = new Size(100, 23);
textBoxNumber.TabIndex = 5;
textBoxNumber.Text = "+7";
// //
// labelNumber // labelNumber
// //
labelNumber.AutoSize = true; labelNumber.AutoSize = true;
labelNumber.Location = new Point(12, 119); labelNumber.Location = new Point(12, 88);
labelNumber.Name = "labelNumber"; labelNumber.Name = "labelNumber";
labelNumber.Size = new Size(101, 15); labelNumber.Size = new Size(101, 15);
labelNumber.TabIndex = 4; labelNumber.TabIndex = 2;
labelNumber.Text = "Номер телефона"; labelNumber.Text = "Номер телефона";
// //
// dateTimePickerBirth // labelMoney
// //
dateTimePickerBirth.Location = new Point(156, 58); labelMoney.AutoSize = true;
dateTimePickerBirth.Name = "dateTimePickerBirth"; labelMoney.Location = new Point(12, 128);
dateTimePickerBirth.Size = new Size(200, 23); labelMoney.Name = "labelMoney";
dateTimePickerBirth.TabIndex = 6; labelMoney.Size = new Size(46, 15);
labelMoney.TabIndex = 3;
labelMoney.Text = "Баланс";
// //
// labelSocialStatus // textBoxName
// //
labelSocialStatus.AutoSize = true; textBoxName.Location = new Point(131, 9);
labelSocialStatus.Location = new Point(12, 187); textBoxName.Name = "textBoxName";
labelSocialStatus.Name = "labelSocialStatus"; textBoxName.Size = new Size(100, 23);
labelSocialStatus.Size = new Size(131, 15); textBoxName.TabIndex = 4;
labelSocialStatus.TabIndex = 7; //
labelSocialStatus.Text = "Основания для скидки"; // dateTimePickerDate
//
dateTimePickerDate.Location = new Point(131, 45);
dateTimePickerDate.Name = "dateTimePickerDate";
dateTimePickerDate.Size = new Size(200, 23);
dateTimePickerDate.TabIndex = 5;
//
// textBoxNumber
//
textBoxNumber.Location = new Point(131, 85);
textBoxNumber.Name = "textBoxNumber";
textBoxNumber.Size = new Size(100, 23);
textBoxNumber.TabIndex = 6;
//
// textBoxMoney
//
textBoxMoney.Location = new Point(131, 125);
textBoxMoney.Name = "textBoxMoney";
textBoxMoney.Size = new Size(100, 23);
textBoxMoney.TabIndex = 7;
// //
// buttonSave // buttonSave
// //
buttonSave.Location = new Point(38, 272); buttonSave.Location = new Point(49, 198);
buttonSave.Name = "buttonSave"; buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(75, 23); buttonSave.Size = new Size(75, 23);
buttonSave.TabIndex = 9; buttonSave.TabIndex = 8;
buttonSave.Text = "Сохранить"; buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true; buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click; buttonSave.Click += buttonSave_Click;
// //
// buttonCancel // buttonCancel
// //
buttonCancel.Location = new Point(201, 272); buttonCancel.Location = new Point(173, 198);
buttonCancel.Name = "buttonCancel"; buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(75, 23); buttonCancel.Size = new Size(75, 23);
buttonCancel.TabIndex = 10; buttonCancel.TabIndex = 9;
buttonCancel.Text = "Отменить"; buttonCancel.Text = "Отменить";
buttonCancel.UseVisualStyleBackColor = true; buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click; buttonCancel.Click += buttonCancel_Click;
// //
// comboBoxSocialStatus
//
comboBoxSocialStatus.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxSocialStatus.FormattingEnabled = true;
comboBoxSocialStatus.Location = new Point(156, 179);
comboBoxSocialStatus.Name = "comboBoxSocialStatus";
comboBoxSocialStatus.Size = new Size(121, 23);
comboBoxSocialStatus.TabIndex = 11;
//
// FormClient // FormClient
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(369, 314); ClientSize = new Size(389, 251);
Controls.Add(comboBoxSocialStatus);
Controls.Add(buttonCancel); Controls.Add(buttonCancel);
Controls.Add(buttonSave); Controls.Add(buttonSave);
Controls.Add(labelSocialStatus); Controls.Add(textBoxMoney);
Controls.Add(dateTimePickerBirth);
Controls.Add(textBoxNumber); Controls.Add(textBoxNumber);
Controls.Add(labelNumber); Controls.Add(dateTimePickerDate);
Controls.Add(labelBirthDate);
Controls.Add(textBoxName); Controls.Add(textBoxName);
Controls.Add(labelMoney);
Controls.Add(labelNumber);
Controls.Add(labelDate);
Controls.Add(labelName); Controls.Add(labelName);
Name = "FormClient"; Name = "FormClient";
StartPosition = FormStartPosition.CenterScreen; Text = "FormClient";
Text = "Клиенты";
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@ -152,14 +148,14 @@
#endregion #endregion
private Label labelName; private Label labelName;
private TextBox textBoxName; private Label labelDate;
private Label labelBirthDate;
private TextBox textBoxNumber;
private Label labelNumber; private Label labelNumber;
private DateTimePicker dateTimePickerBirth; private Label labelMoney;
private Label labelSocialStatus; private TextBox textBoxName;
private DateTimePicker dateTimePickerDate;
private TextBox textBoxNumber;
private TextBox textBoxMoney;
private Button buttonSave; private Button buttonSave;
private Button buttonCancel; private Button buttonCancel;
private ComboBox comboBoxSocialStatus;
} }
} }

View File

@ -1,5 +1,7 @@
using ProjectTourAgency.Enities; 
using ProjectTourAgency.Enities.Enums; using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories; using ProjectTourAgency.Repositories;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -11,75 +13,76 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
namespace ProjectTourAgency.Forms; namespace ProjectTourAgency.Forms
public partial class FormClient : Form
{ {
private readonly IClientRepository _clientRepository; public partial class FormClient : Form
private int? _clientId;
public int Id
{ {
set private readonly IClientRepository _clientRepository;
private int? _clientId;
public int Id
{
set
{
try
{
var client = _clientRepository.ReadClientById(value);
if (client == null)
{
throw new InvalidOperationException(nameof(client));
}
textBoxName.Text = client.FullName;
textBoxNumber.Text = client.PhoneNumber;
textBoxMoney.Text = client.Money.ToString();
dateTimePickerDate.Value = client.BirthDate;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении ланных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormClient(IClientRepository clientRepository)
{
InitializeComponent();
_clientRepository = clientRepository ??
throw new ArgumentNullException(nameof(clientRepository));
}
private void buttonSave_Click(object sender, EventArgs e)
{ {
try try
{ {
var client = _clientRepository.ReadClientById(value); if (string.IsNullOrWhiteSpace(textBoxName.Text) ||
if (client == null) string.IsNullOrWhiteSpace(textBoxNumber.Text)
|| string.IsNullOrWhiteSpace(textBoxMoney.Text) || string.IsNullOrWhiteSpace(dateTimePickerDate.Text))
{ {
throw new InvalidDataException(nameof(client)); throw new Exception("Имеются незаполненные поля");
} }
textBoxName.Text = client.FullName;
textBoxNumber.Text = client.PhoneNumber;
comboBoxSocialStatus.SelectedItem = client.ClientSocialStatus;
dateTimePickerBirth.Value = client.BirthDate;
if (_clientId.HasValue)
{
_clientRepository.UpdateClient(CreateClient(_clientId.Value));
}
else
{
_clientRepository.CreateClient(CreateClient(_clientId.Value));
}
Close();
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "Ошибка при получении данных", MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
} }
} }
private void buttonCancel_Click(object sender, EventArgs e) => Close();
private Client CreateClient(int id) => Client.CreateEntity(id, textBoxName.Text, dateTimePickerDate.Value,textBoxNumber.Text, Convert.ToInt32(textBoxMoney.Text));
} }
public FormClient(IClientRepository clientRepository)
{
InitializeComponent();
_clientRepository = clientRepository ??
throw new ArgumentNullException(nameof(clientRepository));
comboBoxSocialStatus.DataSource = Enum.GetValues(typeof(ClientSocialStatus));
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if(string.IsNullOrWhiteSpace(textBoxName.Text) ||
string.IsNullOrWhiteSpace(textBoxNumber.Text) || comboBoxSocialStatus.SelectedIndex < 0)
{
throw new Exception("Имеются незаполненные поля");
}
if(_clientId.HasValue)
{
_clientRepository.UpdateClient(CreateClient(_clientId.Value));
}
else
{
_clientRepository.CreateClient(CreateClient(0));
}
Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message,"Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e) => Close();
private Client CreateClient(int id) => Client.CreateEntity(id, textBoxName.Text,
dateTimePickerBirth.Value, textBoxNumber.Text, (ClientSocialStatus)comboBoxSocialStatus.SelectedItem!);
} }

View File

@ -28,123 +28,164 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
comboBoxClientId = new ComboBox(); labelEmployeeName = new Label();
labelCLientId = new Label(); labelDate = new Label();
groupBox1 = new GroupBox(); groupBoxTour = new GroupBox();
dataGridViewReceipts = new DataGridView(); dataGridView = new DataGridView();
ColumnTour = new DataGridViewComboBoxColumn(); ColumnClient = new DataGridViewComboBoxColumn();
ColumnReceipt = new DataGridViewTextBoxColumn(); ColumnCost = new DataGridViewTextBoxColumn();
buttonCancel = new Button(); labelRoute = new Label();
buttonSave = new Button(); buttonSave = new Button();
groupBox1.SuspendLayout(); buttonCancel = new Button();
((System.ComponentModel.ISupportInitialize)dataGridViewReceipts).BeginInit(); comboBoxEmployeeId = new ComboBox();
comboBoxRouteId = new ComboBox();
dateTimePicker = new DateTimePicker();
groupBoxTour.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout(); SuspendLayout();
// //
// comboBoxClientId // labelEmployeeName
// //
comboBoxClientId.FormattingEnabled = true; labelEmployeeName.AutoSize = true;
comboBoxClientId.Location = new Point(208, 9); labelEmployeeName.Location = new Point(12, 19);
comboBoxClientId.Name = "comboBoxClientId"; labelEmployeeName.Name = "labelEmployeeName";
comboBoxClientId.Size = new Size(164, 23); labelEmployeeName.Size = new Size(59, 15);
comboBoxClientId.TabIndex = 7; labelEmployeeName.TabIndex = 0;
labelEmployeeName.Text = "Работник";
// //
// labelCLientId // labelDate
// //
labelCLientId.AutoSize = true; labelDate.AutoSize = true;
labelCLientId.Location = new Point(37, 12); labelDate.Location = new Point(12, 95);
labelCLientId.Name = "labelCLientId"; labelDate.Name = "labelDate";
labelCLientId.Size = new Size(142, 15); labelDate.Size = new Size(127, 15);
labelCLientId.TabIndex = 6; labelDate.TabIndex = 1;
labelCLientId.Text = "Идентификатор Клиента"; labelDate.Text = "Дата проведения тура";
// //
// groupBox1 // groupBoxTour
// //
groupBox1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; groupBoxTour.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
groupBox1.Controls.Add(dataGridViewReceipts); groupBoxTour.Controls.Add(dataGridView);
groupBox1.Location = new Point(37, 38); groupBoxTour.Location = new Point(18, 123);
groupBox1.Name = "groupBox1"; groupBoxTour.Name = "groupBoxTour";
groupBox1.Size = new Size(326, 337); groupBoxTour.Size = new Size(360, 248);
groupBox1.TabIndex = 8; groupBoxTour.TabIndex = 2;
groupBox1.TabStop = false; groupBoxTour.TabStop = false;
groupBox1.Text = "groupBox1"; groupBoxTour.Text = "Клиенты";
// //
// dataGridViewReceipts // dataGridView
// //
dataGridViewReceipts.AllowUserToResizeColumns = false; dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridViewReceipts.AllowUserToResizeRows = false; dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewReceipts.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewReceipts.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; dataGridView.Columns.AddRange(new DataGridViewColumn[] { ColumnClient, ColumnCost });
dataGridViewReceipts.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; dataGridView.Location = new Point(6, 22);
dataGridViewReceipts.Columns.AddRange(new DataGridViewColumn[] { ColumnTour, ColumnReceipt }); dataGridView.Name = "dataGridView";
dataGridViewReceipts.Location = new Point(6, 22); dataGridView.Size = new Size(348, 220);
dataGridViewReceipts.MultiSelect = false; dataGridView.TabIndex = 0;
dataGridViewReceipts.Name = "dataGridViewReceipts"; dataGridView.CellContentClick += dataGridView_CellContentClick;
dataGridViewReceipts.RowHeadersVisible = false;
dataGridViewReceipts.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewReceipts.Size = new Size(314, 309);
dataGridViewReceipts.TabIndex = 9;
// //
// ColumnTour // ColumnClient
// //
ColumnTour.HeaderText = "Туры"; ColumnClient.HeaderText = "Клиент";
ColumnTour.Name = "ColumnTour"; ColumnClient.Name = "ColumnClient";
ColumnClient.Resizable = DataGridViewTriState.True;
ColumnClient.SortMode = DataGridViewColumnSortMode.Automatic;
// //
// ColumnReceipt // ColumnCost
// //
ColumnReceipt.HeaderText = "Ид Чека"; ColumnCost.HeaderText = "Цена";
ColumnReceipt.Name = "ColumnReceipt"; ColumnCost.Name = "ColumnCost";
//
// labelRoute
//
labelRoute.AutoSize = true;
labelRoute.Location = new Point(12, 61);
labelRoute.Name = "labelRoute";
labelRoute.Size = new Size(60, 15);
labelRoute.TabIndex = 3;
labelRoute.Text = "Маршрут";
//
// buttonSave
//
buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonSave.Location = new Point(29, 400);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(110, 25);
buttonSave.TabIndex = 4;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
// //
// buttonCancel // buttonCancel
// //
buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonCancel.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonCancel.Location = new Point(285, 397); buttonCancel.Location = new Point(249, 400);
buttonCancel.Name = "buttonCancel"; buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(75, 23); buttonCancel.Size = new Size(110, 25);
buttonCancel.TabIndex = 10; buttonCancel.TabIndex = 5;
buttonCancel.Text = "Отмена"; buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true; buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click; buttonCancel.Click += buttonCancel_Click;
// //
// buttonSave // comboBoxEmployeeId
// //
buttonSave.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; comboBoxEmployeeId.FormattingEnabled = true;
buttonSave.Location = new Point(43, 397); comboBoxEmployeeId.Location = new Point(145, 16);
buttonSave.Name = "buttonSave"; comboBoxEmployeeId.Name = "comboBoxEmployeeId";
buttonSave.Size = new Size(75, 23); comboBoxEmployeeId.Size = new Size(186, 23);
buttonSave.TabIndex = 11; comboBoxEmployeeId.TabIndex = 6;
buttonSave.Text = "Сохранить"; //
buttonSave.UseVisualStyleBackColor = true; // comboBoxRouteId
buttonSave.Click += buttonSave_Click; //
comboBoxRouteId.FormattingEnabled = true;
comboBoxRouteId.Location = new Point(145, 58);
comboBoxRouteId.Name = "comboBoxRouteId";
comboBoxRouteId.Size = new Size(186, 23);
comboBoxRouteId.TabIndex = 7;
//
// dateTimePicker
//
dateTimePicker.Location = new Point(145, 89);
dateTimePicker.Name = "dateTimePicker";
dateTimePicker.Size = new Size(186, 23);
dateTimePicker.TabIndex = 8;
// //
// FormClientTour // FormClientTour
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(398, 432); ClientSize = new Size(406, 456);
Controls.Add(buttonSave); Controls.Add(dateTimePicker);
Controls.Add(comboBoxRouteId);
Controls.Add(comboBoxEmployeeId);
Controls.Add(buttonCancel); Controls.Add(buttonCancel);
Controls.Add(groupBox1); Controls.Add(buttonSave);
Controls.Add(comboBoxClientId); Controls.Add(labelRoute);
Controls.Add(labelCLientId); Controls.Add(groupBoxTour);
Controls.Add(labelDate);
Controls.Add(labelEmployeeName);
Name = "FormClientTour"; Name = "FormClientTour";
Text = "FormClientTour"; Text = "FormClientTour";
groupBox1.ResumeLayout(false); groupBoxTour.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dataGridViewReceipts).EndInit(); ((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
#endregion #endregion
private ComboBox comboBoxClientId; private Label labelEmployeeName;
private Label labelCLientId; private Label labelDate;
private GroupBox groupBox1; private GroupBox groupBoxTour;
private DataGridView dataGridViewReceipts; private DataGridView dataGridView;
private DataGridViewCheckBoxColumn Column1; private DataGridViewComboBoxColumn ColumnClient;
private Button button1; private DataGridViewTextBoxColumn ColumnCost;
private Button buttonCancel; private Label labelRoute;
private Button buttonSave; private Button buttonSave;
private DataGridViewComboBoxColumn ColumnTour; private Button buttonCancel;
private DataGridViewTextBoxColumn ColumnReceipt; private ComboBox comboBoxEmployeeId;
private ComboBox comboBoxRouteId;
private DateTimePicker dateTimePicker;
} }
} }

View File

@ -1,4 +1,6 @@
using ProjectTourAgency.Enities; using ProjectEmployeeAgency.Repositories;
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories; using ProjectTourAgency.Repositories;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -6,7 +8,6 @@ using System.ComponentModel;
using System.Data; using System.Data;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
@ -15,36 +16,44 @@ namespace ProjectTourAgency.Forms
{ {
public partial class FormClientTour : Form public partial class FormClientTour : Form
{ {
private readonly IReceiptRepository _receiptRepository; private readonly ITourRepository _tourRepository;
public FormClientTour(IReceiptRepository receiptRepository, public FormClientTour(ITourRepository tourRepository,
IClientRepository clientRepository, ITourRepository tourRepository) IEmployeeRepository employeeRepository,
IRouteRepository routeRepository, IClientRepository clientRepository)
{ {
InitializeComponent(); InitializeComponent();
_receiptRepository = receiptRepository ?? _tourRepository = tourRepository ??
throw new ArgumentNullException(nameof(receiptRepository)); throw new ArgumentNullException(nameof(tourRepository));
comboBoxEmployeeId.DataSource = employeeRepository.ReadEmployees();
comboBoxEmployeeId.DisplayMember = "FullName";
comboBoxEmployeeId.ValueMember = "Id";
comboBoxClientId.DataSource = clientRepository.ReadClients(); comboBoxRouteId.DataSource = routeRepository.ReadRoutes();
comboBoxClientId.DisplayMember = "FullName"; comboBoxRouteId.DisplayMember = "Destination";
comboBoxClientId.ValueMember = "Id"; comboBoxRouteId.ValueMember = "Id";
ColumnTour.DataSource = tourRepository.ReadTours(); ColumnClient.DataSource = clientRepository.ReadClients();
ColumnTour.DisplayMember = "Departure"; ColumnClient.DisplayMember = "FullName";
ColumnTour.ValueMember = "Id"; ColumnClient.ValueMember = "Id";
}
private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
} }
private void buttonSave_Click(object sender, EventArgs e) private void buttonSave_Click(object sender, EventArgs e)
{ {
try try
{ {
if (dataGridViewReceipts.RowCount < 1 || if (dataGridView.RowCount < 1
comboBoxClientId.SelectedIndex < 0) || comboBoxEmployeeId.SelectedIndex < 0
|| comboBoxRouteId.SelectedIndex < 0)
{ {
throw new Exception("Имеются незаполненные поля"); throw new Exception("Есть незаполненные поля");
} }
_tourRepository.CreateTour(Tour.CreateEntity(0, comboBoxEmployeeId.SelectedIndex,
_receiptRepository.CreateReceipt(Receipt.CreateEntity((int)comboBoxClientId.SelectedValue!, Convert.ToInt32(ColumnTour.ValueMember), 0, 0)); comboBoxRouteId.SelectedIndex, dateTimePicker.Value,CreateListClientTourFromDataGrid()));
Close();
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -52,21 +61,23 @@ namespace ProjectTourAgency.Forms
} }
} }
private List<Receipt> CreateListClientTourFromDataGrid() private void buttonCancel_Click(object sender, EventArgs e) => Close();
private List<ClientTour> CreateListClientTourFromDataGrid()
{ {
var list = new List<Receipt>(); var list = new List<ClientTour>();
foreach (DataGridViewRow row in dataGridViewReceipts.Rows) foreach(DataGridViewRow row in dataGridView.Rows)
{ {
if (row.Cells["ColumnTour"].Value == null || row.Cells["ColumnReceipt"].Value == null) if (row.Cells["ColumnClient"].Value == null
|| row.Cells["ColumnCost"].Value == null)
{ {
continue; continue;
} }
list.Add(ClientTour.CreateEntity(0, Convert.ToInt32(row.Cells["ColumnClient"].Value), 0,
list.Add(Receipt.CreateEntity((int)comboBoxClientId.SelectedValue!, Convert.ToInt32(ColumnTour.ValueMember), 0, 0)); Convert.ToInt32(row.Cells["ColumnCost"].Value)));
} }
return list; return list;
} }
private void buttonCancel_Click(object sender, EventArgs e) => Close();
} }
} }

View File

@ -117,10 +117,10 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="ColumnTour.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="ColumnClient.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>
<metadata name="ColumnReceipt.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="ColumnCost.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>
</root> </root>

View File

@ -1,122 +0,0 @@
namespace ProjectTourAgency.Forms
{
partial class FormDiscount
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelDiscount = new Label();
comboBoxSocialStatus = new ComboBox();
labelSocialStatus = new Label();
buttonCancel = new Button();
buttonSave = new Button();
numericUpDownDiscount = new NumericUpDown();
((System.ComponentModel.ISupportInitialize)numericUpDownDiscount).BeginInit();
SuspendLayout();
//
// labelDiscount
//
labelDiscount.AutoSize = true;
labelDiscount.Location = new Point(25, 82);
labelDiscount.Name = "labelDiscount";
labelDiscount.Size = new Size(88, 15);
labelDiscount.TabIndex = 0;
labelDiscount.Text = "Размер скидки";
//
// comboBoxSocialStatus
//
comboBoxSocialStatus.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxSocialStatus.FormattingEnabled = true;
comboBoxSocialStatus.Location = new Point(182, 33);
comboBoxSocialStatus.Name = "comboBoxSocialStatus";
comboBoxSocialStatus.Size = new Size(121, 23);
comboBoxSocialStatus.TabIndex = 13;
//
// labelSocialStatus
//
labelSocialStatus.AutoSize = true;
labelSocialStatus.Location = new Point(25, 33);
labelSocialStatus.Name = "labelSocialStatus";
labelSocialStatus.Size = new Size(131, 15);
labelSocialStatus.TabIndex = 12;
labelSocialStatus.Text = "Основания для скидки";
//
// buttonCancel
//
buttonCancel.Location = new Point(228, 139);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(75, 23);
buttonCancel.TabIndex = 15;
buttonCancel.Text = "Отменить";
buttonCancel.UseVisualStyleBackColor = true;
//
// buttonSave
//
buttonSave.Location = new Point(65, 139);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(75, 23);
buttonSave.TabIndex = 14;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
//
// numericUpDownDiscount
//
numericUpDownDiscount.DecimalPlaces = 2;
numericUpDownDiscount.Increment = new decimal(new int[] { 1, 0, 0, 131072 });
numericUpDownDiscount.Location = new Point(182, 82);
numericUpDownDiscount.Maximum = new decimal(new int[] { 1, 0, 0, 0 });
numericUpDownDiscount.Name = "numericUpDownDiscount";
numericUpDownDiscount.Size = new Size(121, 23);
numericUpDownDiscount.TabIndex = 16;
//
// FormDiscount
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(383, 174);
Controls.Add(numericUpDownDiscount);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(comboBoxSocialStatus);
Controls.Add(labelSocialStatus);
Controls.Add(labelDiscount);
Name = "FormDiscount";
Text = "FormDiscount";
((System.ComponentModel.ISupportInitialize)numericUpDownDiscount).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelDiscount;
private ComboBox comboBoxSocialStatus;
private Label labelSocialStatus;
private Button buttonCancel;
private Button buttonSave;
private NumericUpDown numericUpDownDiscount;
}
}

View File

@ -1,81 +0,0 @@
using ProjectTourAgency.Enities.Enums;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
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 ProjectTourAgency.Forms;
public partial class FormDiscount : Form
{
private readonly IDiscountRepository _discountRepository;
private int? _discountId;
public int Id
{
set
{
try
{
var discount = _discountRepository.ReadDiscountById(value);
if (discount == null)
{
throw new InvalidDataException(nameof(discount));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении данных",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormDiscount(IDiscountRepository discountRepository)
{
InitializeComponent();
_discountRepository = discountRepository ??
throw new ArgumentNullException(nameof(discountRepository));
comboBoxSocialStatus.DataSource = Enum.GetValues(typeof(ClientSocialStatus));
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(numericUpDownDiscount.Text)
|| comboBoxSocialStatus.SelectedIndex < 0)
{
throw new Exception("Имеются незаполненные поля");
}
if (_discountId.HasValue)
{
_discountRepository.UpdateDiscount(CreateDiscount(_discountId.Value));
}
else
{
_discountRepository.CreateDiscount(CreateDiscount(0));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e) => Close();
private Discount CreateDiscount(int id) => Discount.CreateEntity(id, (ClientSocialStatus)comboBoxSocialStatus.SelectedItem!,numericUpDownDiscount.Value );
}

View File

@ -0,0 +1,118 @@
namespace ProjectTourAgency.Forms
{
partial class FormEmployee
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
comboBoxJob = new ComboBox();
label1 = new Label();
label2 = new Label();
textBoxName = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// comboBoxJob
//
comboBoxJob.FormattingEnabled = true;
comboBoxJob.Location = new Point(130, 75);
comboBoxJob.Name = "comboBoxJob";
comboBoxJob.Size = new Size(121, 23);
comboBoxJob.TabIndex = 0;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(12, 75);
label1.Name = "label1";
label1.Size = new Size(69, 15);
label1.TabIndex = 1;
label1.Text = "Должность";
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(12, 31);
label2.Name = "label2";
label2.Size = new Size(31, 15);
label2.TabIndex = 2;
label2.Text = "Имя";
//
// textBoxName
//
textBoxName.Location = new Point(130, 28);
textBoxName.Name = "textBoxName";
textBoxName.Size = new Size(100, 23);
textBoxName.TabIndex = 3;
//
// buttonSave
//
buttonSave.Location = new Point(42, 148);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(75, 23);
buttonSave.TabIndex = 4;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(155, 148);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(75, 23);
buttonCancel.TabIndex = 5;
buttonCancel.Text = "Отменить";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormEmployee
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(338, 224);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxName);
Controls.Add(label2);
Controls.Add(label1);
Controls.Add(comboBoxJob);
Name = "FormEmployee";
Text = "FormEmployee";
ResumeLayout(false);
PerformLayout();
}
#endregion
private ComboBox comboBoxJob;
private Label label1;
private Label label2;
private TextBox textBoxName;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,87 @@

using ProjectEmployeeAgency.Repositories;
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories;
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 ProjectTourAgency.Forms
{
public partial class FormEmployee: Form
{
private readonly IEmployeeRepository _employeeRepository;
private int? _employeeId;
public int Id
{
set
{
try
{
var employee = _employeeRepository.ReadEmployeeById(value);
if (employee == null)
{
throw new InvalidOperationException(nameof(employee));
}
textBoxName.Text = employee.FullName;
comboBoxJob.SelectedItem = employee.EmployeeJob;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении ланных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormEmployee(IEmployeeRepository employeeRepository)
{
InitializeComponent();
_employeeRepository = employeeRepository ??
throw new ArgumentNullException(nameof(employeeRepository));
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(textBoxName.Text) ||
string.IsNullOrWhiteSpace(comboBoxJob.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_employeeId.HasValue)
{
_employeeRepository.UpdateEmployee(CreateEmployee(_employeeId.Value));
}
else
{
_employeeRepository.CreateEmployee(CreateEmployee(_employeeId.Value));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e) => Close();
private Employee CreateEmployee(int id) => Employee.CreateEntity(id, textBoxName.Text, (Enities.Enums.EmpoyeeJob)comboBoxJob.SelectedItem!);
}
}

View File

@ -0,0 +1,125 @@
namespace ProjectTourAgency.Forms
{
partial class FormEmployees
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridViewData = new DataGridView();
panel1 = new Panel();
buttonDelete = new Button();
buttonUpdate = new Button();
buttonAdd = new Button();
((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
panel1.SuspendLayout();
SuspendLayout();
//
// dataGridViewData
//
dataGridViewData.AllowUserToAddRows = false;
dataGridViewData.AllowUserToDeleteRows = false;
dataGridViewData.AllowUserToResizeColumns = false;
dataGridViewData.AllowUserToResizeRows = false;
dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewData.Dock = DockStyle.Fill;
dataGridViewData.Location = new Point(0, 0);
dataGridViewData.MultiSelect = false;
dataGridViewData.Name = "dataGridViewData";
dataGridViewData.ReadOnly = true;
dataGridViewData.RowHeadersVisible = false;
dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewData.Size = new Size(783, 450);
dataGridViewData.TabIndex = 3;
//
// panel1
//
panel1.Controls.Add(buttonDelete);
panel1.Controls.Add(buttonUpdate);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(783, 0);
panel1.Name = "panel1";
panel1.Size = new Size(149, 450);
panel1.TabIndex = 2;
//
// buttonDelete
//
buttonDelete.BackgroundImage = Properties.Resources.free_icon_delete_3807871;
buttonDelete.BackgroundImageLayout = ImageLayout.Stretch;
buttonDelete.Location = new Point(43, 276);
buttonDelete.Name = "buttonDelete";
buttonDelete.Size = new Size(61, 59);
buttonDelete.TabIndex = 3;
buttonDelete.UseVisualStyleBackColor = true;
buttonDelete.Click += buttonDelete_Click;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = Properties.Resources.free_icon_edit_8679935;
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(43, 142);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(61, 59);
buttonUpdate.TabIndex = 2;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += buttonUpdate_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.free_icon_add_button_5974633;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(43, 25);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(61, 59);
buttonAdd.TabIndex = 1;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += buttonAdd_Click;
//
// FormEmployees
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(932, 450);
Controls.Add(dataGridViewData);
Controls.Add(panel1);
Name = "FormEmployees";
Text = "FormEmployees";
Load += FormEmployees_Load;
((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
panel1.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
private DataGridView dataGridViewData;
private Panel panel1;
private Button buttonDelete;
private Button buttonUpdate;
private Button buttonAdd;
}
}

View File

@ -0,0 +1,112 @@
using ProjectEmployeeAgency.Repositories;
using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories;
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;
using Unity;
namespace ProjectTourAgency.Forms
{
public partial class FormEmployees: Form
{
private readonly IUnityContainer _container;
private readonly IEmployeeRepository _employeeRepository;
public FormEmployees(IEmployeeRepository employeeRepository, IUnityContainer container)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_employeeRepository = employeeRepository ?? throw new ArgumentNullException(nameof(_employeeRepository));
}
private void FormEmployees_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormClient>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonUpdate_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormEmployee>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonDelete_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_employeeRepository.DeleteEmployee(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _employeeRepository.ReadEmployees();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["ID"].Value);
return true;
}
}
}

View File

@ -1,167 +0,0 @@
namespace ProjectTourAgency.Forms
{
partial class FormReceipt
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelCLientId = new Label();
labelTourId = new Label();
labelDIscountId = new Label();
label1 = new Label();
textBoxFinalCost = new TextBox();
comboBoxClientId = new ComboBox();
comboBoxDIscountId = new ComboBox();
comboBoxTourId = new ComboBox();
buttonCancel = new Button();
buttonSave = new Button();
SuspendLayout();
//
// labelCLientId
//
labelCLientId.AutoSize = true;
labelCLientId.Location = new Point(12, 29);
labelCLientId.Name = "labelCLientId";
labelCLientId.Size = new Size(142, 15);
labelCLientId.TabIndex = 0;
labelCLientId.Text = "Идентификатор Клиента";
//
// labelTourId
//
labelTourId.AutoSize = true;
labelTourId.Location = new Point(12, 73);
labelTourId.Name = "labelTourId";
labelTourId.Size = new Size(122, 15);
labelTourId.TabIndex = 1;
labelTourId.Text = "Идентификатор Тура";
//
// labelDIscountId
//
labelDIscountId.AutoSize = true;
labelDIscountId.Location = new Point(12, 118);
labelDIscountId.Name = "labelDIscountId";
labelDIscountId.Size = new Size(137, 15);
labelDIscountId.TabIndex = 2;
labelDIscountId.Text = "Идентификатор Скидки";
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(12, 156);
label1.Name = "label1";
label1.Size = new Size(95, 15);
label1.TabIndex = 3;
label1.Text = "Сумма к опалет";
//
// textBoxFinalCost
//
textBoxFinalCost.Location = new Point(160, 153);
textBoxFinalCost.Name = "textBoxFinalCost";
textBoxFinalCost.Size = new Size(100, 23);
textBoxFinalCost.TabIndex = 4;
//
// comboBoxClientId
//
comboBoxClientId.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxClientId.FormattingEnabled = true;
comboBoxClientId.Location = new Point(160, 26);
comboBoxClientId.Name = "comboBoxClientId";
comboBoxClientId.Size = new Size(121, 23);
comboBoxClientId.TabIndex = 5;
//
// comboBoxDIscountId
//
comboBoxDIscountId.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxDIscountId.FormattingEnabled = true;
comboBoxDIscountId.Location = new Point(160, 110);
comboBoxDIscountId.Name = "comboBoxDIscountId";
comboBoxDIscountId.Size = new Size(121, 23);
comboBoxDIscountId.TabIndex = 6;
//
// comboBoxTourId
//
comboBoxTourId.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxTourId.FormattingEnabled = true;
comboBoxTourId.Location = new Point(160, 65);
comboBoxTourId.Name = "comboBoxTourId";
comboBoxTourId.Size = new Size(121, 23);
comboBoxTourId.TabIndex = 7;
//
// buttonCancel
//
buttonCancel.Location = new Point(250, 211);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(75, 23);
buttonCancel.TabIndex = 15;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// buttonSave
//
buttonSave.Location = new Point(57, 211);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(75, 23);
buttonSave.TabIndex = 14;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// FormReceipt
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(361, 254);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(comboBoxTourId);
Controls.Add(comboBoxDIscountId);
Controls.Add(comboBoxClientId);
Controls.Add(textBoxFinalCost);
Controls.Add(label1);
Controls.Add(labelDIscountId);
Controls.Add(labelTourId);
Controls.Add(labelCLientId);
Name = "FormReceipt";
Text = "FormReceipt";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelCLientId;
private Label labelTourId;
private Label labelDIscountId;
private Label label1;
private TextBox textBoxFinalCost;
private ComboBox comboBoxClientId;
private ComboBox comboBoxDIscountId;
private ComboBox comboBoxTourId;
private Button buttonCancel;
private Button buttonSave;
}
}

View File

@ -1,68 +0,0 @@
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
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 ProjectTourAgency.Forms;
public partial class FormReceipt : Form
{
private readonly IReceiptRepository _receiptRepository;
public FormReceipt(IReceiptRepository receiptRepository,
IClientRepository clientRepository,
ITourRepository tourRepository,
IDiscountRepository discountRepository)
{
InitializeComponent();
_receiptRepository = receiptRepository ??
throw new ArgumentNullException(nameof(receiptRepository));
comboBoxClientId.DataSource = clientRepository.ReadClients();
comboBoxClientId.DisplayMember = "FullName";
comboBoxClientId.ValueMember = "Id";
comboBoxTourId.DataSource = tourRepository.ReadTours();
comboBoxTourId.DisplayMember = "Destination";
comboBoxTourId.ValueMember = "Id";
comboBoxDIscountId.DataSource = discountRepository.ReadDiscounts();
comboBoxDIscountId.DisplayMember = "DiscountPercent";
comboBoxDIscountId.ValueMember = "Id";
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if (comboBoxClientId.SelectedIndex < 0 ||
comboBoxDIscountId.SelectedIndex < 0 ||
comboBoxTourId.SelectedIndex < 0)
{
throw new Exception("Имеются незаполненные поля");
}
var selectedTour = (Tour)comboBoxTourId.SelectedItem;
var selectedDiscount = (Discount)comboBoxDIscountId.SelectedItem;
decimal finalCost = selectedTour.Cost - (selectedTour.Cost * (selectedDiscount.DiscountPercent /100));
textBoxFinalCost.Text = finalCost.ToString();
_receiptRepository.CreateReceipt(Receipt.CreateEntity( (int)(comboBoxClientId.SelectedValue!), (int)(comboBoxTourId.SelectedValue!), (int)(comboBoxDIscountId.SelectedValue!),Convert.ToDecimal(finalCost)));
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e) => Close();
}

View File

@ -1,6 +1,6 @@
namespace ProjectTourAgency.Forms namespace ProjectTourAgency.Forms
{ {
partial class FormTour partial class FormRoute
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
@ -28,27 +28,18 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
dateTimePickerDepartureDate = new DateTimePicker();
textBoxDestination = new TextBox(); textBoxDestination = new TextBox();
labelDestination = new Label(); labelDestination = new Label();
labelDeparture = new Label(); labelDeparture = new Label();
textBoxDuration = new TextBox(); textBoxDuration = new TextBox();
labelPrice = new Label(); labelTourId = new Label();
textBoxDeparture = new TextBox(); textBoxDeparture = new TextBox();
labelDate = new Label();
labelDuration = new Label(); labelDuration = new Label();
textBoxPrice = new TextBox();
buttonSave = new Button(); buttonSave = new Button();
buttonCancel = new Button(); buttonCancel = new Button();
comboBoxTourId = new ComboBox();
SuspendLayout(); SuspendLayout();
// //
// dateTimePickerDepartureDate
//
dateTimePickerDepartureDate.Location = new Point(144, 114);
dateTimePickerDepartureDate.Name = "dateTimePickerDepartureDate";
dateTimePickerDepartureDate.Size = new Size(226, 23);
dateTimePickerDepartureDate.TabIndex = 2;
//
// textBoxDestination // textBoxDestination
// //
textBoxDestination.Location = new Point(144, 32); textBoxDestination.Location = new Point(144, 32);
@ -76,19 +67,19 @@
// //
// textBoxDuration // textBoxDuration
// //
textBoxDuration.Location = new Point(144, 162); textBoxDuration.Location = new Point(144, 114);
textBoxDuration.Name = "textBoxDuration"; textBoxDuration.Name = "textBoxDuration";
textBoxDuration.Size = new Size(226, 23); textBoxDuration.Size = new Size(226, 23);
textBoxDuration.TabIndex = 7; textBoxDuration.TabIndex = 7;
// //
// labelPrice // labelTourId
// //
labelPrice.AutoSize = true; labelTourId.AutoSize = true;
labelPrice.Location = new Point(35, 205); labelTourId.Location = new Point(38, 163);
labelPrice.Name = "labelPrice"; labelTourId.Name = "labelTourId";
labelPrice.Size = new Size(94, 15); labelTourId.Size = new Size(94, 15);
labelPrice.TabIndex = 6; labelTourId.TabIndex = 6;
labelPrice.Text = "Стоимость тура"; labelTourId.Text = "Стоимость тура";
// //
// textBoxDeparture // textBoxDeparture
// //
@ -97,31 +88,15 @@
textBoxDeparture.Size = new Size(226, 23); textBoxDeparture.Size = new Size(226, 23);
textBoxDeparture.TabIndex = 8; textBoxDeparture.TabIndex = 8;
// //
// labelDate
//
labelDate.AutoSize = true;
labelDate.Location = new Point(38, 120);
labelDate.Name = "labelDate";
labelDate.Size = new Size(84, 15);
labelDate.TabIndex = 9;
labelDate.Text = "Дата отбытия";
//
// labelDuration // labelDuration
// //
labelDuration.AutoSize = true; labelDuration.AutoSize = true;
labelDuration.Location = new Point(38, 162); labelDuration.Location = new Point(45, 117);
labelDuration.Name = "labelDuration"; labelDuration.Name = "labelDuration";
labelDuration.Size = new Size(84, 15); labelDuration.Size = new Size(84, 15);
labelDuration.TabIndex = 10; labelDuration.TabIndex = 10;
labelDuration.Text = "Дата отбытия"; labelDuration.Text = "Дата отбытия";
// //
// textBoxPrice
//
textBoxPrice.Location = new Point(144, 205);
textBoxPrice.Name = "textBoxPrice";
textBoxPrice.Size = new Size(226, 23);
textBoxPrice.TabIndex = 11;
//
// buttonSave // buttonSave
// //
buttonSave.Location = new Point(63, 251); buttonSave.Location = new Point(63, 251);
@ -142,24 +117,30 @@
buttonCancel.UseVisualStyleBackColor = true; buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click; buttonCancel.Click += buttonCancel_Click;
// //
// FormTour // comboBoxTourId
//
comboBoxTourId.FormattingEnabled = true;
comboBoxTourId.Location = new Point(144, 163);
comboBoxTourId.Name = "comboBoxTourId";
comboBoxTourId.Size = new Size(226, 23);
comboBoxTourId.TabIndex = 14;
//
// FormRoute
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(414, 301); ClientSize = new Size(414, 284);
Controls.Add(comboBoxTourId);
Controls.Add(buttonCancel); Controls.Add(buttonCancel);
Controls.Add(buttonSave); Controls.Add(buttonSave);
Controls.Add(textBoxPrice);
Controls.Add(labelDuration); Controls.Add(labelDuration);
Controls.Add(labelDate);
Controls.Add(textBoxDeparture); Controls.Add(textBoxDeparture);
Controls.Add(textBoxDuration); Controls.Add(textBoxDuration);
Controls.Add(labelPrice); Controls.Add(labelTourId);
Controls.Add(labelDeparture); Controls.Add(labelDeparture);
Controls.Add(textBoxDestination); Controls.Add(textBoxDestination);
Controls.Add(labelDestination); Controls.Add(labelDestination);
Controls.Add(dateTimePickerDepartureDate); Name = "FormRoute";
Name = "FormTour";
StartPosition = FormStartPosition.CenterParent; StartPosition = FormStartPosition.CenterParent;
Text = "Тур"; Text = "Тур";
ResumeLayout(false); ResumeLayout(false);
@ -172,12 +153,13 @@
private Label labelDestination; private Label labelDestination;
private Label labelDeparture; private Label labelDeparture;
private TextBox textBoxDuration; private TextBox textBoxDuration;
private Label labelPrice; private Label labelTourId;
private TextBox textBoxDeparture; private TextBox textBoxDeparture;
private Label labelDate; private Label labelDate;
private Label labelDuration; private Label labelDuration;
private TextBox textBoxPrice; private TextBox textBoxPrice;
private Button buttonSave; private Button buttonSave;
private Button buttonCancel; private Button buttonCancel;
private ComboBox comboBoxTourId;
} }
} }

View File

@ -1,4 +1,6 @@
using ProjectTourAgency.Enities; 
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Implementations; using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories; using ProjectTourAgency.Repositories;
using System; using System;
@ -13,27 +15,26 @@ using System.Windows.Forms;
namespace ProjectTourAgency.Forms namespace ProjectTourAgency.Forms
{ {
public partial class FormTour : Form public partial class FormRoute : Form
{ {
private readonly ITourRepository _tourRepository; private readonly IRouteRepository _routeRepository;
private int? _tourId; private int? _routeId;
public int Id public int Id
{ {
set set
{ {
try try
{ {
var tour = _tourRepository.ReadTourById(value); var route = _routeRepository.ReadRouteById(value);
if (tour == null) if (route == null)
{ {
throw new InvalidOperationException(nameof(tour)); throw new InvalidOperationException(nameof(route));
} }
textBoxDestination.Text = tour.Destination; textBoxDestination.Text = route.Destination;
textBoxDeparture.Text = tour.Departure; textBoxDeparture.Text = route.Departure;
dateTimePickerDepartureDate.Value = tour.DepartureDate; textBoxDuration.Text = route.Duration.ToString();
textBoxDuration.Text = tour.Duration.ToString();
textBoxPrice.Text = tour.Cost.ToString();
} }
catch(Exception ex) catch(Exception ex)
{ {
@ -43,11 +44,14 @@ namespace ProjectTourAgency.Forms
} }
} }
public FormTour(ITourRepository tourRepository) public FormRoute(IRouteRepository routeRepository, ITourRepository tourRepository)
{ {
InitializeComponent(); InitializeComponent();
_tourRepository = tourRepository ?? _routeRepository = routeRepository ??
throw new ArgumentNullException(nameof(tourRepository)); throw new ArgumentNullException(nameof(routeRepository));
comboBoxTourId.DataSource = tourRepository.ReadTours();
comboBoxTourId.DisplayMember = "FullName";
comboBoxTourId.ValueMember = "Id";
} }
@ -62,13 +66,13 @@ namespace ProjectTourAgency.Forms
throw new Exception("Имеются незаполненные поля"); throw new Exception("Имеются незаполненные поля");
} }
if (_tourId.HasValue) if (_routeId.HasValue)
{ {
_tourRepository.UpdateTour(CreateTour(_tourId.Value)); _routeRepository.UpdateRoute(CreateRoute(_routeId.Value));
} }
else else
{ {
_tourRepository.CreateTour(CreateTour(_tourId.Value)); _routeRepository.CreateRoute(CreateRoute(_routeId.Value));
} }
Close(); Close();
} }
@ -81,8 +85,7 @@ namespace ProjectTourAgency.Forms
private void buttonCancel_Click(object sender, EventArgs e) => Close(); private void buttonCancel_Click(object sender, EventArgs e) => Close();
private Tour CreateTour(int id) => Tour.CreateEntity(id, textBoxDestination.Text, dateTimePickerDepartureDate.Value, private Route CreateRoute(int id) => Route.CreateEntity(id, (int)comboBoxTourId.SelectedValue!, textBoxDestination.Text,
textBoxDeparture.Text, int.Parse(textBoxPrice.Text), textBoxDeparture.Text, int.Parse(textBoxDuration.Text));
int.Parse(textBoxDuration.Text));
} }
} }

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,6 +1,6 @@
namespace ProjectTourAgency.Forms namespace ProjectTourAgency.Forms
{ {
partial class FormDiscounts partial class FormRoutes
{ {
/// <summary> /// <summary>
/// Required designer variable. /// Required designer variable.
@ -99,16 +99,16 @@
buttonAdd.UseVisualStyleBackColor = true; buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += buttonAdd_Click; buttonAdd.Click += buttonAdd_Click;
// //
// FormDiscounts // FormTours
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(924, 371); ClientSize = new Size(924, 371);
Controls.Add(dataGridViewData); Controls.Add(dataGridViewData);
Controls.Add(panel1); Controls.Add(panel1);
Name = "FormDiscounts"; Name = "FormTours";
Text = "FormDiscounts"; Text = "Туры";
Load += FormDiscounts_Load; Load += FormRoutes_Load;
((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
panel1.ResumeLayout(false); panel1.ResumeLayout(false);
ResumeLayout(false); ResumeLayout(false);

View File

@ -0,0 +1,111 @@
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Repositories;
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;
using Unity;
namespace ProjectTourAgency.Forms
{
public partial class FormRoutes : Form
{
private readonly IUnityContainer _container;
private readonly IRouteRepository _routeRepository;
public FormRoutes(IRouteRepository routeRepository, IUnityContainer container)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_routeRepository = routeRepository ?? throw new ArgumentNullException(nameof(_routeRepository));
}
private void FormRoutes_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormRoute>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка рот добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonUpdate_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormRoute>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonDelete_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_routeRepository.DeleteRoute(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _routeRepository.ReadRoutes();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["ID"].Value);
return true;
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -31,7 +31,6 @@
dataGridViewData = new DataGridView(); dataGridViewData = new DataGridView();
panel1 = new Panel(); panel1 = new Panel();
buttonDelete = new Button(); buttonDelete = new Button();
buttonUpdate = new Button();
buttonAdd = new Button(); buttonAdd = new Button();
((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit(); ((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
panel1.SuspendLayout(); panel1.SuspendLayout();
@ -52,18 +51,17 @@
dataGridViewData.ReadOnly = true; dataGridViewData.ReadOnly = true;
dataGridViewData.RowHeadersVisible = false; dataGridViewData.RowHeadersVisible = false;
dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewData.Size = new Size(775, 371); dataGridViewData.Size = new Size(746, 462);
dataGridViewData.TabIndex = 3; dataGridViewData.TabIndex = 3;
// //
// panel1 // panel1
// //
panel1.Controls.Add(buttonDelete); panel1.Controls.Add(buttonDelete);
panel1.Controls.Add(buttonUpdate);
panel1.Controls.Add(buttonAdd); panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right; panel1.Dock = DockStyle.Right;
panel1.Location = new Point(775, 0); panel1.Location = new Point(746, 0);
panel1.Name = "panel1"; panel1.Name = "panel1";
panel1.Size = new Size(149, 371); panel1.Size = new Size(149, 462);
panel1.TabIndex = 2; panel1.TabIndex = 2;
// //
// buttonDelete // buttonDelete
@ -77,17 +75,6 @@
buttonDelete.UseVisualStyleBackColor = true; buttonDelete.UseVisualStyleBackColor = true;
buttonDelete.Click += buttonDelete_Click; buttonDelete.Click += buttonDelete_Click;
// //
// buttonUpdate
//
buttonUpdate.BackgroundImage = Properties.Resources.free_icon_edit_8679935;
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(43, 142);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(61, 59);
buttonUpdate.TabIndex = 2;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += buttonUpdate_Click;
//
// buttonAdd // buttonAdd
// //
buttonAdd.BackgroundImage = Properties.Resources.free_icon_add_button_5974633; buttonAdd.BackgroundImage = Properties.Resources.free_icon_add_button_5974633;
@ -103,11 +90,11 @@
// //
AutoScaleDimensions = new SizeF(7F, 15F); AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(924, 371); ClientSize = new Size(895, 462);
Controls.Add(dataGridViewData); Controls.Add(dataGridViewData);
Controls.Add(panel1); Controls.Add(panel1);
Name = "FormTours"; Name = "FormTours";
Text = "Туры"; Text = "FormTours";
Load += FormTours_Load; Load += FormTours_Load;
((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit(); ((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
panel1.ResumeLayout(false); panel1.ResumeLayout(false);
@ -119,7 +106,6 @@
private DataGridView dataGridViewData; private DataGridView dataGridViewData;
private Panel panel1; private Panel panel1;
private Button buttonDelete; private Button buttonDelete;
private Button buttonUpdate;
private Button buttonAdd; private Button buttonAdd;
} }
} }

View File

@ -41,34 +41,15 @@ namespace ProjectTourAgency.Forms
{ {
try try
{ {
_container.Resolve<FormTour>().ShowDialog(); _container.Resolve<FormClientTour>().ShowDialog();
LoadList(); LoadList();
} }
catch (Exception ex) catch (Exception ex)
{ {
MessageBox.Show(ex.Message, "Ошибка рот добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
} }
} }
private void buttonUpdate_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormTour>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonDelete_Click(object sender, EventArgs e) private void buttonDelete_Click(object sender, EventArgs e)
{ {

View File

@ -0,0 +1,39 @@
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations
{
internal class AddMoneyRepository : IAddMoneyRepository
{
public void CreateAddMoney(AddMoney client)
{
}
public void DeleteAddMoney(int id)
{
}
public AddMoney ReadAddMoneyById(int id)
{
return AddMoney.CreateEntity(0,0,DateTime.Now,0);
}
public IEnumerable<AddMoney> ReadAddMoneys()
{
return [];
}
public void UpdateAddMoney(AddMoney client)
{
}
}
}

View File

@ -1,36 +0,0 @@
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations;
public class DiscountRepository : IDiscountRepository
{
public void CreateDiscount(Discount discount)
{
}
public void DeleteDiscount(int id)
{
}
public Discount ReadDiscountById(int id)
{
return Discount.CreateEntity(0, 0, 0);
}
public IEnumerable<Discount> ReadDiscounts()
{
return [];
}
public void UpdateDiscount(Discount discount)
{
}
}

View File

@ -0,0 +1,35 @@
using ProjectEmployeeAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations;
public class EmployeeRepository : IEmployeeRepository
{
public void CreateEmployee(Employee employee)
{
}
public void DeleteEmployee(int id)
{
}
public Employee ReadEmployeeById(int id)
{
return Employee.CreateEntity(0, string.Empty,0);
}
public IEnumerable<Employee> ReadEmployees()
{
return [];
}
public void UpdateEmployee(Employee employee)
{
}
}

View File

@ -1,21 +0,0 @@
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations;
public class ReceiptRepository : IReceiptRepository
{
public void CreateReceipt(Receipt receipt)
{
}
public IEnumerable<Receipt> ReadReceipts(DateTime? dateFrom = null, DateTime? dateTo = null, int? clientId = null, int? tourId = null)
{
return [];
}
}

View File

@ -0,0 +1,37 @@
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations;
public class RouteRepository : IRouteRepository
{
public void CreateRoute(Route route)
{
}
public void DeleteRoute(int id)
{
}
public Route ReadRouteById(int id)
{
return Route.CreateEntity(0,0, string.Empty,string.Empty, 0);
}
public IEnumerable<Route> ReadRoutes()
{
return [];
}
public void UpdateRoute(Route route)
{
}
}

View File

@ -0,0 +1,35 @@
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations;
public class TourRepository : ITourRepository
{
public void CreateTour(Tour tour)
{
}
public void DeleteTour(int id)
{
}
public Tour ReadTourById(int id)
{
return Tour.CreateEntity(0,0, 0,DateTime.Now, []);
}
public IEnumerable<Tour> ReadTours()
{
return [];
}
public void UpdateTour(Tour tour)
{
}
}

View File

@ -1,3 +1,5 @@
using ProjectEmployeeAgency.Repositories;
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Implementations; using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories; using ProjectTourAgency.Repositories;
using Unity; using Unity;
@ -22,10 +24,12 @@ namespace ProjectTourAgency
{ {
var container = new UnityContainer(); var container = new UnityContainer();
container.RegisterType<ITourRepository, TourRepository>();
container.RegisterType<IAddMoneyRepository, AddMoneyRepository>();
container.RegisterType<IClientRepository, ClientRepository>(); container.RegisterType<IClientRepository, ClientRepository>();
container.RegisterType<IDiscountRepository, DiscountRepository>(); container.RegisterType<IRouteRepository, RouteRepository>();
container.RegisterType<IReceiptRepository, ReceiptRepository>(); container.RegisterType<IEmployeeRepository, EmployeeRepository>();
container.RegisterType<ITourRepository, TourRepositiry>(); container.RegisterType<ITourRepository, TourRepository>();
return container; return container;
} }

View File

@ -0,0 +1,20 @@
using ProjectTourAgency.Enities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Repositories;
public interface IAddMoneyRepository
{
IEnumerable<AddMoney> ReadAddMoneys();
AddMoney ReadAddMoneyById(int id);
void CreateAddMoney(AddMoney client);
void UpdateAddMoney(AddMoney client);
void DeleteAddMoney(int id);
}

View File

@ -1,18 +0,0 @@
using ProjectTourAgency.Enities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Repositories
{
public interface IClientTourRepisitory
{
IEnumerable<ClientTour> ReadClientTours(DateTime? dateFrom = null,
DateTime? dateTo = null, int? clientId = null, int? tourId = null);
void CreateReceipt(Receipt receipt);
}
}

View File

@ -0,0 +1,17 @@
using ProjectTourAgency.Enities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Repositories
{
public interface IClientTourRepository
{
IEnumerable<ClientTour> ReadClientTours(int? clientId = null, int? tourId = null);
void CreateReceipt(ClientTour clientTour);
}
}

View File

@ -1,20 +0,0 @@
using ProjectTourAgency.Enities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Repositories;
public interface IDiscountRepository
{
IEnumerable<Discount> ReadDiscounts();
Discount ReadDiscountById(int id);
void CreateDiscount(Discount discount);
void UpdateDiscount(Discount discount);
void DeleteDiscount(int id);
}

View File

@ -0,0 +1,16 @@
using ProjectTourAgency.Enities;
namespace ProjectEmployeeAgency.Repositories;
public interface IEmployeeRepository
{
IEnumerable<Employee> ReadEmployees();
Employee ReadEmployeeById(int id);
void CreateEmployee(Employee tour);
void UpdateEmployee(Employee tour);
void DeleteEmployee(int id);
}

View File

@ -1,18 +0,0 @@
using ProjectTourAgency.Enities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Repositories;
public interface IReceiptRepository
{
IEnumerable<Receipt> ReadReceipts(DateTime? dateFrom = null,
DateTime? dateTo = null, int? clientId = null,int? tourId = null);
void CreateReceipt(Receipt receipt);
}

View File

@ -0,0 +1,21 @@
using ProjectTourAgency.Enities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectRouteAgency.Repositories;
public interface IRouteRepository
{
IEnumerable<Route> ReadRoutes();
Route ReadRouteById(int id);
void CreateRoute(Route tour);
void UpdateRoute(Route tour);
void DeleteRoute(int id);
}

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities
{
public class AddMoney
{
public int Id { get; private set; }
public int ClientId { get; private set; }
public DateTime Date { get; private set; }
public int MoneyAmount{ get; private set; }
public static AddMoney CreateEntity(int id,int cId,
DateTime date, int money)
{
return new AddMoney
{
Id = id,
ClientId = cId,
Date = date,
MoneyAmount = money
};
}
}
}

View File

@ -0,0 +1,31 @@
using ProjectTourAgency.Enities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities;
public class Client
{
public int Id { get;private set; }
public string FullName { get; private set; } = string.Empty;
public DateTime BirthDate { get; private set; }
public string PhoneNumber { get; private set; } = string.Empty;
public int Money { get; private set; }
public static Client CreateEntity(int id, string fullName,
DateTime birthDate, string phoneNumber, int money)
{
return new Client
{
Id = id,
FullName = fullName,
BirthDate = birthDate,
PhoneNumber = phoneNumber,
Money = money
};
}
}

View File

@ -0,0 +1,27 @@
using ProjectTourAgency.Enities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities;
public class ClientTour
{
public int ClientId { get; private set; }
public int TourId { get; private set; }
public int Count { get; private set; }
public static ClientTour CreateEntity(int clientId, int tourId, int count)
{
return new ClientTour
{
ClientId = clientId,
TourId = tourId,
Count = count
};
}
}

View File

@ -0,0 +1,28 @@
using ProjectTourAgency.Enities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities;
public class Employee
{
public int Id { get; private set; }
public string FullName { get; private set; } = string.Empty;
public EmpoyeeJob EmployeeJob { get; private set; }
public static Employee CreateEntity(int id, string fullName,
EmpoyeeJob job)
{
return new Employee
{
Id = id,
FullName = fullName,
EmployeeJob = job
};
}
}

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.Tracing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities.Enums;
public enum EmpoyeeJob
{
None = 0,
Driver = 1,
Archeologist = 2,
ETC = 3
}

View File

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities;
public class Route
{
public int Id { get; private set; }
public int TourId { get; private set; }
public string Destination { get; private set; } = string.Empty;
public string Departure { get; private set; } = string.Empty;
public int Duration { get; private set; }
public static Route CreateEntity(int id, int TourId, string destination,
string departure, int duration)
{
return new Route
{
Id = id,
TourId = TourId,
Destination = destination,
Departure = departure,
Duration = duration
};
}
}

View File

@ -0,0 +1,25 @@
using ProjectTourAgency.Enities.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Enities;
public class Tour
{
public int Id { get; private set; }
public DateTime DepartureDate { get; private set; }
public int Cost { get; private set; }
public static Tour CreateEntity(int id,
DateTime date,int cost)
{
return new Tour
{
Id = id,
DepartureDate = date,
Cost = cost
};
}
}

View File

@ -0,0 +1,137 @@
namespace ProjectTourAgency
{
partial class FormTourAgency
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
menuStrip1 = new MenuStrip();
MenuToolStripMenuItem = new ToolStripMenuItem();
ClientsToolStripMenuItem = new ToolStripMenuItem();
RotesToolStripMenuItem = new ToolStripMenuItem();
EmployeesToolStripMenuItem = new ToolStripMenuItem();
OperationsToolStripMenuItem = new ToolStripMenuItem();
пополнитьБалансПользователяToolStripMenuItem = new ToolStripMenuItem();
турToolStripMenuItem = new ToolStripMenuItem();
отчетыToolStripMenuItem = new ToolStripMenuItem();
menuStrip1.SuspendLayout();
SuspendLayout();
//
// menuStrip1
//
menuStrip1.Items.AddRange(new ToolStripItem[] { MenuToolStripMenuItem, OperationsToolStripMenuItem, отчетыToolStripMenuItem });
menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(784, 24);
menuStrip1.TabIndex = 0;
menuStrip1.Text = "menuStrip1";
//
// MenuToolStripMenuItem
//
MenuToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { ClientsToolStripMenuItem, RotesToolStripMenuItem, EmployeesToolStripMenuItem });
MenuToolStripMenuItem.Name = "MenuToolStripMenuItem";
MenuToolStripMenuItem.Size = new Size(94, 20);
MenuToolStripMenuItem.Text = "Справочники";
//
// ClientsToolStripMenuItem
//
ClientsToolStripMenuItem.Name = "ClientsToolStripMenuItem";
ClientsToolStripMenuItem.Size = new Size(140, 22);
ClientsToolStripMenuItem.Text = "Клиенты";
ClientsToolStripMenuItem.Click += ClientsToolStripMenuItem_Click;
//
// RotesToolStripMenuItem
//
RotesToolStripMenuItem.Name = "RotesToolStripMenuItem";
RotesToolStripMenuItem.Size = new Size(140, 22);
RotesToolStripMenuItem.Text = "маршруты";
RotesToolStripMenuItem.Click += RotesToolStripMenuItem_Click;
//
// EmployeesToolStripMenuItem
//
EmployeesToolStripMenuItem.Name = "EmployeesToolStripMenuItem";
EmployeesToolStripMenuItem.Size = new Size(140, 22);
EmployeesToolStripMenuItem.Text = "Сотрудники";
EmployeesToolStripMenuItem.Click += EmployeesToolStripMenuItem_Click;
//
// OperationsToolStripMenuItem
//
OperationsToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { пополнитьБалансПользователяToolStripMenuItem, турToolStripMenuItem });
OperationsToolStripMenuItem.Name = "OperationsToolStripMenuItem";
OperationsToolStripMenuItem.Size = new Size(75, 20);
OperationsToolStripMenuItem.Text = "Операции";
//
// пополнитьБалансПользователяToolStripMenuItem
//
пополнитьБалансПользователяToolStripMenuItem.Name = "пополнитьБалансПользователяToolStripMenuItem";
пополнитьБалансПользователяToolStripMenuItem.Size = new Size(256, 22);
пополнитьБалансПользователяToolStripMenuItem.Text = "Пополнить баланс пользователя";
пополнитьБалансПользователяToolStripMenuItem.Click += пополнитьБалансПользователяToolStripMenuItem_Click;
//
// турToolStripMenuItem
//
турToolStripMenuItem.Name = урToolStripMenuItem";
турToolStripMenuItem.Size = new Size(256, 22);
турToolStripMenuItem.Text = "Тур";
//
// отчетыToolStripMenuItem
//
отчетыToolStripMenuItem.Name = "отчетыToolStripMenuItem";
отчетыToolStripMenuItem.Size = new Size(60, 20);
отчетыToolStripMenuItem.Text = "Отчеты";
//
// FormTourAgency
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
BackgroundImage = Properties.Resources.Снимок_экрана_2024_11_08_2139261;
BackgroundImageLayout = ImageLayout.Stretch;
ClientSize = new Size(784, 411);
Controls.Add(menuStrip1);
DoubleBuffered = true;
MainMenuStrip = menuStrip1;
Name = "FormTourAgency";
StartPosition = FormStartPosition.CenterScreen;
Text = "Тур Агенство";
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
#endregion
private MenuStrip menuStrip1;
private ToolStripMenuItem MenuToolStripMenuItem;
private ToolStripMenuItem OperationsToolStripMenuItem;
private ToolStripMenuItem отчетыToolStripMenuItem;
private ToolStripMenuItem ClientsToolStripMenuItem;
private ToolStripMenuItem RotesToolStripMenuItem;
private ToolStripMenuItem EmployeesToolStripMenuItem;
private ToolStripMenuItem пополнитьБалансПользователяToolStripMenuItem;
private ToolStripMenuItem турToolStripMenuItem;
}
}

View File

@ -0,0 +1,64 @@
using ProjectTourAgency.Forms;
using Unity;
namespace ProjectTourAgency;
public partial class FormTourAgency : Form
{
private readonly IUnityContainer _container;
public FormTourAgency(IUnityContainer container)
{
InitializeComponent();
_container = container ??
throw new ArgumentNullException(nameof(container));
}
private void ClientsToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormClients>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void RotesToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormRoutes>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void EmployeesToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormEmployees>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ïîïîëíèòüÁàëàíñÏîëüçîâàòåëÿToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormAddMoney>().ShowDialog();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Îøèáêà ïðè çàãðóçêå", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,118 @@
namespace ProjectTourAgency.Forms
{
partial class FormAddMoney
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelClient = new Label();
labelMoney = new Label();
comboBoxClientId = new ComboBox();
textBoxMoney = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// labelClient
//
labelClient.AutoSize = true;
labelClient.Location = new Point(32, 28);
labelClient.Name = "labelClient";
labelClient.Size = new Size(66, 15);
labelClient.TabIndex = 0;
labelClient.Text = "ID Клиента";
//
// labelMoney
//
labelMoney.AutoSize = true;
labelMoney.Location = new Point(32, 79);
labelMoney.Name = "labelMoney";
labelMoney.Size = new Size(173, 15);
labelMoney.TabIndex = 1;
labelMoney.Text = "на сколько пополнить баланс";
//
// comboBoxClientId
//
comboBoxClientId.FormattingEnabled = true;
comboBoxClientId.Location = new Point(231, 28);
comboBoxClientId.Name = "comboBoxClientId";
comboBoxClientId.Size = new Size(121, 23);
comboBoxClientId.TabIndex = 2;
//
// textBoxMoney
//
textBoxMoney.Location = new Point(231, 71);
textBoxMoney.Name = "textBoxMoney";
textBoxMoney.Size = new Size(126, 23);
textBoxMoney.TabIndex = 3;
//
// buttonSave
//
buttonSave.Location = new Point(32, 128);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(75, 23);
buttonSave.TabIndex = 4;
buttonSave.Text = "Пополнить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(242, 128);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(89, 26);
buttonCancel.TabIndex = 5;
buttonCancel.Text = "Отмнить";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormAddMoney
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(386, 184);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxMoney);
Controls.Add(comboBoxClientId);
Controls.Add(labelMoney);
Controls.Add(labelClient);
Name = "FormAddMoney";
Text = "FormAddMoney";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelClient;
private Label labelMoney;
private ComboBox comboBoxClientId;
private TextBox textBoxMoney;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,48 @@
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
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 ProjectTourAgency.Forms
{
public partial class FormAddMoney : Form
{
private readonly IAddMoneyRepository _addMoneyRepository;
public FormAddMoney(IAddMoneyRepository addMoneyRepository, IClientRepository clientRepository)
{
InitializeComponent();
_addMoneyRepository = addMoneyRepository ??
throw new ArgumentNullException(nameof(addMoneyRepository));
comboBoxClientId.DataSource = clientRepository.ReadClients();
comboBoxClientId.DisplayMember = "Name";
comboBoxClientId.ValueMember = "Id";
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if (comboBoxClientId.SelectedIndex < 0 || String.IsNullOrWhiteSpace(textBoxMoney.Text))
{
throw new Exception("Имеются незаполненные поля");
}
_addMoneyRepository.CreateAddMoney(AddMoney.CreateEntity(0, (int)comboBoxClientId.SelectedValue!, DateTime.Now, Convert.ToInt32(textBoxMoney.Text)));
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e) => Close();
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,161 @@
namespace ProjectTourAgency.Forms
{
partial class FormClient
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelName = new Label();
labelDate = new Label();
labelNumber = new Label();
labelMoney = new Label();
textBoxName = new TextBox();
dateTimePickerDate = new DateTimePicker();
textBoxNumber = new TextBox();
textBoxMoney = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// labelName
//
labelName.AutoSize = true;
labelName.Location = new Point(12, 9);
labelName.Name = "labelName";
labelName.Size = new Size(75, 15);
labelName.TabIndex = 0;
labelName.Text = "Полное имя";
//
// labelDate
//
labelDate.AutoSize = true;
labelDate.Location = new Point(12, 45);
labelDate.Name = "labelDate";
labelDate.Size = new Size(90, 15);
labelDate.TabIndex = 1;
labelDate.Text = "Дата рождения";
//
// labelNumber
//
labelNumber.AutoSize = true;
labelNumber.Location = new Point(12, 88);
labelNumber.Name = "labelNumber";
labelNumber.Size = new Size(101, 15);
labelNumber.TabIndex = 2;
labelNumber.Text = "Номер телефона";
//
// labelMoney
//
labelMoney.AutoSize = true;
labelMoney.Location = new Point(12, 128);
labelMoney.Name = "labelMoney";
labelMoney.Size = new Size(46, 15);
labelMoney.TabIndex = 3;
labelMoney.Text = "Баланс";
//
// textBoxName
//
textBoxName.Location = new Point(131, 9);
textBoxName.Name = "textBoxName";
textBoxName.Size = new Size(100, 23);
textBoxName.TabIndex = 4;
//
// dateTimePickerDate
//
dateTimePickerDate.Location = new Point(131, 45);
dateTimePickerDate.Name = "dateTimePickerDate";
dateTimePickerDate.Size = new Size(200, 23);
dateTimePickerDate.TabIndex = 5;
//
// textBoxNumber
//
textBoxNumber.Location = new Point(131, 85);
textBoxNumber.Name = "textBoxNumber";
textBoxNumber.Size = new Size(100, 23);
textBoxNumber.TabIndex = 6;
//
// textBoxMoney
//
textBoxMoney.Location = new Point(131, 125);
textBoxMoney.Name = "textBoxMoney";
textBoxMoney.Size = new Size(100, 23);
textBoxMoney.TabIndex = 7;
//
// buttonSave
//
buttonSave.Location = new Point(49, 198);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(75, 23);
buttonSave.TabIndex = 8;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(173, 198);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(75, 23);
buttonCancel.TabIndex = 9;
buttonCancel.Text = "Отменить";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormClient
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(389, 251);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxMoney);
Controls.Add(textBoxNumber);
Controls.Add(dateTimePickerDate);
Controls.Add(textBoxName);
Controls.Add(labelMoney);
Controls.Add(labelNumber);
Controls.Add(labelDate);
Controls.Add(labelName);
Name = "FormClient";
Text = "FormClient";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelName;
private Label labelDate;
private Label labelNumber;
private Label labelMoney;
private TextBox textBoxName;
private DateTimePicker dateTimePickerDate;
private TextBox textBoxNumber;
private TextBox textBoxMoney;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,88 @@

using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories;
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 ProjectTourAgency.Forms
{
public partial class FormClient : Form
{
private readonly IClientRepository _clientRepository;
private int? _clientId;
public int Id
{
set
{
try
{
var client = _clientRepository.ReadClientById(value);
if (client == null)
{
throw new InvalidOperationException(nameof(client));
}
textBoxName.Text = client.FullName;
textBoxNumber.Text = client.PhoneNumber;
textBoxMoney.Text = client.Money.ToString();
dateTimePickerDate.Value = client.BirthDate;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении ланных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormClient(IClientRepository clientRepository)
{
InitializeComponent();
_clientRepository = clientRepository ??
throw new ArgumentNullException(nameof(clientRepository));
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(textBoxName.Text) ||
string.IsNullOrWhiteSpace(textBoxNumber.Text)
|| string.IsNullOrWhiteSpace(textBoxMoney.Text) || string.IsNullOrWhiteSpace(dateTimePickerDate.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_clientId.HasValue)
{
_clientRepository.UpdateClient(CreateClient(_clientId.Value));
}
else
{
_clientRepository.CreateClient(CreateClient(_clientId.Value));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e) => Close();
private Client CreateClient(int id) => Client.CreateEntity(id, textBoxName.Text, dateTimePickerDate.Value,textBoxNumber.Text, Convert.ToInt32(textBoxMoney.Text));
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,126 @@
namespace ProjectTourAgency.Forms
{
partial class FormClients
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
panel1 = new Panel();
buttonDelete = new Button();
buttonUpdate = new Button();
buttonAdd = new Button();
dataGridViewData = new DataGridView();
panel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
SuspendLayout();
//
// panel1
//
panel1.Controls.Add(buttonDelete);
panel1.Controls.Add(buttonUpdate);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(775, 0);
panel1.Name = "panel1";
panel1.Size = new Size(149, 371);
panel1.TabIndex = 0;
//
// buttonDelete
//
buttonDelete.BackgroundImage = Properties.Resources.free_icon_delete_3807871;
buttonDelete.BackgroundImageLayout = ImageLayout.Stretch;
buttonDelete.Location = new Point(43, 276);
buttonDelete.Name = "buttonDelete";
buttonDelete.Size = new Size(61, 59);
buttonDelete.TabIndex = 3;
buttonDelete.UseVisualStyleBackColor = true;
buttonDelete.Click += buttonDelete_Click;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = Properties.Resources.free_icon_edit_8679935;
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(43, 142);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(61, 59);
buttonUpdate.TabIndex = 2;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += buttonUpdate_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.free_icon_add_button_5974633;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(43, 25);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(61, 59);
buttonAdd.TabIndex = 1;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += buttonAdd_Click;
//
// dataGridViewData
//
dataGridViewData.AllowUserToAddRows = false;
dataGridViewData.AllowUserToDeleteRows = false;
dataGridViewData.AllowUserToResizeColumns = false;
dataGridViewData.AllowUserToResizeRows = false;
dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewData.Dock = DockStyle.Fill;
dataGridViewData.Location = new Point(0, 0);
dataGridViewData.MultiSelect = false;
dataGridViewData.Name = "dataGridViewData";
dataGridViewData.ReadOnly = true;
dataGridViewData.RowHeadersVisible = false;
dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewData.Size = new Size(775, 371);
dataGridViewData.TabIndex = 1;
//
// FormClients
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(924, 371);
Controls.Add(dataGridViewData);
Controls.Add(panel1);
Name = "FormClients";
StartPosition = FormStartPosition.CenterParent;
Text = "Клиенты";
Load += FormClients_Load;
panel1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
ResumeLayout(false);
}
#endregion
private Panel panel1;
private Button buttonDelete;
private Button buttonUpdate;
private Button buttonAdd;
private DataGridView dataGridViewData;
}
}

View File

@ -12,20 +12,20 @@ using Unity;
namespace ProjectTourAgency.Forms namespace ProjectTourAgency.Forms
{ {
public partial class FormDiscounts : Form public partial class FormClients : Form
{ {
private readonly IUnityContainer _container; private readonly IUnityContainer _container;
private readonly IDiscountRepository _discountRepository; private readonly IClientRepository _clientRepository;
public FormDiscounts(IDiscountRepository discountRepository, IUnityContainer container) public FormClients(IClientRepository clientRepository, IUnityContainer container)
{ {
InitializeComponent(); InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container)); _container = container ?? throw new ArgumentNullException(nameof(container));
_discountRepository = discountRepository ?? throw new ArgumentNullException(nameof(_discountRepository)); _clientRepository = clientRepository ?? throw new ArgumentNullException(nameof(_clientRepository));
} }
private void FormDiscounts_Load(object sender, EventArgs e) private void FormClients_Load(object sender, EventArgs e)
{ {
try try
{ {
@ -41,7 +41,7 @@ namespace ProjectTourAgency.Forms
{ {
try try
{ {
_container.Resolve<FormDiscount>().ShowDialog(); _container.Resolve<FormClient>().ShowDialog();
LoadList(); LoadList();
} }
catch (Exception ex) catch (Exception ex)
@ -58,7 +58,7 @@ namespace ProjectTourAgency.Forms
} }
try try
{ {
var form = _container.Resolve<FormDiscount>(); var form = _container.Resolve<FormClient>();
form.Id = findId; form.Id = findId;
form.ShowDialog(); form.ShowDialog();
LoadList(); LoadList();
@ -84,7 +84,7 @@ namespace ProjectTourAgency.Forms
try try
{ {
_discountRepository.DeleteDiscount(findId); _clientRepository.DeleteClient(findId);
LoadList(); LoadList();
} }
catch(Exception ex) catch(Exception ex)
@ -93,7 +93,7 @@ namespace ProjectTourAgency.Forms
} }
} }
private void LoadList() => dataGridViewData.DataSource = _discountRepository.ReadDiscounts(); private void LoadList() => dataGridViewData.DataSource = _clientRepository.ReadClients();
private bool TryGetIdentifierFromSelectedRow(out int id) private bool TryGetIdentifierFromSelectedRow(out int id)
{ {

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,118 @@
namespace ProjectTourAgency.Forms
{
partial class FormEmployee
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
comboBoxJob = new ComboBox();
label1 = new Label();
label2 = new Label();
textBoxName = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// comboBoxJob
//
comboBoxJob.FormattingEnabled = true;
comboBoxJob.Location = new Point(130, 75);
comboBoxJob.Name = "comboBoxJob";
comboBoxJob.Size = new Size(121, 23);
comboBoxJob.TabIndex = 0;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(12, 75);
label1.Name = "label1";
label1.Size = new Size(69, 15);
label1.TabIndex = 1;
label1.Text = "Должность";
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(12, 31);
label2.Name = "label2";
label2.Size = new Size(31, 15);
label2.TabIndex = 2;
label2.Text = "Имя";
//
// textBoxName
//
textBoxName.Location = new Point(130, 28);
textBoxName.Name = "textBoxName";
textBoxName.Size = new Size(100, 23);
textBoxName.TabIndex = 3;
//
// buttonSave
//
buttonSave.Location = new Point(42, 148);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(75, 23);
buttonSave.TabIndex = 4;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(155, 148);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(75, 23);
buttonCancel.TabIndex = 5;
buttonCancel.Text = "Отменить";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormEmployee
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(338, 224);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxName);
Controls.Add(label2);
Controls.Add(label1);
Controls.Add(comboBoxJob);
Name = "FormEmployee";
Text = "FormEmployee";
ResumeLayout(false);
PerformLayout();
}
#endregion
private ComboBox comboBoxJob;
private Label label1;
private Label label2;
private TextBox textBoxName;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,87 @@

using ProjectEmployeeAgency.Repositories;
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories;
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 ProjectTourAgency.Forms
{
public partial class FormEmployee: Form
{
private readonly IEmployeeRepository _employeeRepository;
private int? _employeeId;
public int Id
{
set
{
try
{
var employee = _employeeRepository.ReadEmployeeById(value);
if (employee == null)
{
throw new InvalidOperationException(nameof(employee));
}
textBoxName.Text = employee.FullName;
comboBoxJob.SelectedItem = employee.EmployeeJob;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при получении ланных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormEmployee(IEmployeeRepository employeeRepository)
{
InitializeComponent();
_employeeRepository = employeeRepository ??
throw new ArgumentNullException(nameof(employeeRepository));
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(textBoxName.Text) ||
string.IsNullOrWhiteSpace(comboBoxJob.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_employeeId.HasValue)
{
_employeeRepository.UpdateEmployee(CreateEmployee(_employeeId.Value));
}
else
{
_employeeRepository.CreateEmployee(CreateEmployee(_employeeId.Value));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e) => Close();
private Employee CreateEmployee(int id) => Employee.CreateEntity(id, textBoxName.Text, (Enities.Enums.EmpoyeeJob)comboBoxJob.SelectedItem!);
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,125 @@
namespace ProjectTourAgency.Forms
{
partial class FormEmployees
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridViewData = new DataGridView();
panel1 = new Panel();
buttonDelete = new Button();
buttonUpdate = new Button();
buttonAdd = new Button();
((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
panel1.SuspendLayout();
SuspendLayout();
//
// dataGridViewData
//
dataGridViewData.AllowUserToAddRows = false;
dataGridViewData.AllowUserToDeleteRows = false;
dataGridViewData.AllowUserToResizeColumns = false;
dataGridViewData.AllowUserToResizeRows = false;
dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewData.Dock = DockStyle.Fill;
dataGridViewData.Location = new Point(0, 0);
dataGridViewData.MultiSelect = false;
dataGridViewData.Name = "dataGridViewData";
dataGridViewData.ReadOnly = true;
dataGridViewData.RowHeadersVisible = false;
dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewData.Size = new Size(783, 450);
dataGridViewData.TabIndex = 3;
//
// panel1
//
panel1.Controls.Add(buttonDelete);
panel1.Controls.Add(buttonUpdate);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(783, 0);
panel1.Name = "panel1";
panel1.Size = new Size(149, 450);
panel1.TabIndex = 2;
//
// buttonDelete
//
buttonDelete.BackgroundImage = Properties.Resources.free_icon_delete_3807871;
buttonDelete.BackgroundImageLayout = ImageLayout.Stretch;
buttonDelete.Location = new Point(43, 276);
buttonDelete.Name = "buttonDelete";
buttonDelete.Size = new Size(61, 59);
buttonDelete.TabIndex = 3;
buttonDelete.UseVisualStyleBackColor = true;
buttonDelete.Click += buttonDelete_Click;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = Properties.Resources.free_icon_edit_8679935;
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(43, 142);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(61, 59);
buttonUpdate.TabIndex = 2;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += buttonUpdate_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.free_icon_add_button_5974633;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(43, 25);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(61, 59);
buttonAdd.TabIndex = 1;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += buttonAdd_Click;
//
// FormEmployees
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(932, 450);
Controls.Add(dataGridViewData);
Controls.Add(panel1);
Name = "FormEmployees";
Text = "FormEmployees";
Load += FormEmployees_Load;
((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
panel1.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
private DataGridView dataGridViewData;
private Panel panel1;
private Button buttonDelete;
private Button buttonUpdate;
private Button buttonAdd;
}
}

View File

@ -0,0 +1,112 @@
using ProjectEmployeeAgency.Repositories;
using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories;
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;
using Unity;
namespace ProjectTourAgency.Forms
{
public partial class FormEmployees: Form
{
private readonly IUnityContainer _container;
private readonly IEmployeeRepository _employeeRepository;
public FormEmployees(IEmployeeRepository employeeRepository, IUnityContainer container)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_employeeRepository = employeeRepository ?? throw new ArgumentNullException(nameof(_employeeRepository));
}
private void FormEmployees_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormClient>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonUpdate_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormEmployee>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonDelete_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_employeeRepository.DeleteEmployee(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _employeeRepository.ReadEmployees();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["ID"].Value);
return true;
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,165 @@
namespace ProjectTourAgency.Forms
{
partial class FormRoute
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
textBoxDestination = new TextBox();
labelDestination = new Label();
labelDeparture = new Label();
textBoxDuration = new TextBox();
labelTourId = new Label();
textBoxDeparture = new TextBox();
labelDuration = new Label();
buttonSave = new Button();
buttonCancel = new Button();
comboBoxTourId = new ComboBox();
SuspendLayout();
//
// textBoxDestination
//
textBoxDestination.Location = new Point(144, 32);
textBoxDestination.Name = "textBoxDestination";
textBoxDestination.Size = new Size(226, 23);
textBoxDestination.TabIndex = 4;
//
// labelDestination
//
labelDestination.AutoSize = true;
labelDestination.Location = new Point(38, 32);
labelDestination.Name = "labelDestination";
labelDestination.Size = new Size(100, 15);
labelDestination.TabIndex = 3;
labelDestination.Text = "Место прибытия";
//
// labelDeparture
//
labelDeparture.AutoSize = true;
labelDeparture.Location = new Point(38, 78);
labelDeparture.Name = "labelDeparture";
labelDeparture.Size = new Size(91, 15);
labelDeparture.TabIndex = 5;
labelDeparture.Text = "Место отбытия";
//
// textBoxDuration
//
textBoxDuration.Location = new Point(144, 114);
textBoxDuration.Name = "textBoxDuration";
textBoxDuration.Size = new Size(226, 23);
textBoxDuration.TabIndex = 7;
//
// labelTourId
//
labelTourId.AutoSize = true;
labelTourId.Location = new Point(38, 163);
labelTourId.Name = "labelTourId";
labelTourId.Size = new Size(94, 15);
labelTourId.TabIndex = 6;
labelTourId.Text = "Стоимость тура";
//
// textBoxDeparture
//
textBoxDeparture.Location = new Point(144, 75);
textBoxDeparture.Name = "textBoxDeparture";
textBoxDeparture.Size = new Size(226, 23);
textBoxDeparture.TabIndex = 8;
//
// labelDuration
//
labelDuration.AutoSize = true;
labelDuration.Location = new Point(45, 117);
labelDuration.Name = "labelDuration";
labelDuration.Size = new Size(84, 15);
labelDuration.TabIndex = 10;
labelDuration.Text = "Дата отбытия";
//
// buttonSave
//
buttonSave.Location = new Point(63, 251);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(75, 23);
buttonSave.TabIndex = 12;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(256, 251);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(75, 23);
buttonCancel.TabIndex = 13;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// comboBoxTourId
//
comboBoxTourId.FormattingEnabled = true;
comboBoxTourId.Location = new Point(144, 163);
comboBoxTourId.Name = "comboBoxTourId";
comboBoxTourId.Size = new Size(226, 23);
comboBoxTourId.TabIndex = 14;
//
// FormRoute
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(414, 284);
Controls.Add(comboBoxTourId);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(labelDuration);
Controls.Add(textBoxDeparture);
Controls.Add(textBoxDuration);
Controls.Add(labelTourId);
Controls.Add(labelDeparture);
Controls.Add(textBoxDestination);
Controls.Add(labelDestination);
Name = "FormRoute";
StartPosition = FormStartPosition.CenterParent;
Text = "Тур";
ResumeLayout(false);
PerformLayout();
}
#endregion
private DateTimePicker dateTimePickerDepartureDate;
private TextBox textBoxDestination;
private Label labelDestination;
private Label labelDeparture;
private TextBox textBoxDuration;
private Label labelTourId;
private TextBox textBoxDeparture;
private Label labelDate;
private Label labelDuration;
private TextBox textBoxPrice;
private Button buttonSave;
private Button buttonCancel;
private ComboBox comboBoxTourId;
}
}

View File

@ -0,0 +1,91 @@

using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories;
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 ProjectTourAgency.Forms
{
public partial class FormRoute : Form
{
private readonly IRouteRepository _routeRepository;
private int? _routeId;
public int Id
{
set
{
try
{
var route = _routeRepository.ReadRouteById(value);
if (route == null)
{
throw new InvalidOperationException(nameof(route));
}
textBoxDestination.Text = route.Destination;
textBoxDeparture.Text = route.Departure;
textBoxDuration.Text = route.Duration.ToString();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message,"Ошибка при получении ланных", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
public FormRoute(IRouteRepository routeRepository, ITourRepository tourRepository)
{
InitializeComponent();
_routeRepository = routeRepository ??
throw new ArgumentNullException(nameof(routeRepository));
comboBoxTourId.DataSource = tourRepository.ReadTours();
comboBoxTourId.DisplayMember = "FullName";
comboBoxTourId.ValueMember = "Id";
}
private void buttonSave_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(textBoxDestination.Text) ||
string.IsNullOrWhiteSpace(textBoxDeparture.Text) || string.IsNullOrWhiteSpace(textBoxDuration.Text)
|| string.IsNullOrWhiteSpace(textBoxPrice.Text) || string.IsNullOrWhiteSpace(dateTimePickerDepartureDate.Text))
{
throw new Exception("Имеются незаполненные поля");
}
if (_routeId.HasValue)
{
_routeRepository.UpdateRoute(CreateRoute(_routeId.Value));
}
else
{
_routeRepository.CreateRoute(CreateRoute(_routeId.Value));
}
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при сохранении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e) => Close();
private Route CreateRoute(int id) => Route.CreateEntity(id, (int)comboBoxTourId.SelectedValue!, textBoxDestination.Text,
textBoxDeparture.Text, int.Parse(textBoxDuration.Text));
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,125 @@
namespace ProjectTourAgency.Forms
{
partial class FormRoutes
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridViewData = new DataGridView();
panel1 = new Panel();
buttonDelete = new Button();
buttonUpdate = new Button();
buttonAdd = new Button();
((System.ComponentModel.ISupportInitialize)dataGridViewData).BeginInit();
panel1.SuspendLayout();
SuspendLayout();
//
// dataGridViewData
//
dataGridViewData.AllowUserToAddRows = false;
dataGridViewData.AllowUserToDeleteRows = false;
dataGridViewData.AllowUserToResizeColumns = false;
dataGridViewData.AllowUserToResizeRows = false;
dataGridViewData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridViewData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridViewData.Dock = DockStyle.Fill;
dataGridViewData.Location = new Point(0, 0);
dataGridViewData.MultiSelect = false;
dataGridViewData.Name = "dataGridViewData";
dataGridViewData.ReadOnly = true;
dataGridViewData.RowHeadersVisible = false;
dataGridViewData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridViewData.Size = new Size(775, 371);
dataGridViewData.TabIndex = 3;
//
// panel1
//
panel1.Controls.Add(buttonDelete);
panel1.Controls.Add(buttonUpdate);
panel1.Controls.Add(buttonAdd);
panel1.Dock = DockStyle.Right;
panel1.Location = new Point(775, 0);
panel1.Name = "panel1";
panel1.Size = new Size(149, 371);
panel1.TabIndex = 2;
//
// buttonDelete
//
buttonDelete.BackgroundImage = Properties.Resources.free_icon_delete_3807871;
buttonDelete.BackgroundImageLayout = ImageLayout.Stretch;
buttonDelete.Location = new Point(43, 276);
buttonDelete.Name = "buttonDelete";
buttonDelete.Size = new Size(61, 59);
buttonDelete.TabIndex = 3;
buttonDelete.UseVisualStyleBackColor = true;
buttonDelete.Click += buttonDelete_Click;
//
// buttonUpdate
//
buttonUpdate.BackgroundImage = Properties.Resources.free_icon_edit_8679935;
buttonUpdate.BackgroundImageLayout = ImageLayout.Stretch;
buttonUpdate.Location = new Point(43, 142);
buttonUpdate.Name = "buttonUpdate";
buttonUpdate.Size = new Size(61, 59);
buttonUpdate.TabIndex = 2;
buttonUpdate.UseVisualStyleBackColor = true;
buttonUpdate.Click += buttonUpdate_Click;
//
// buttonAdd
//
buttonAdd.BackgroundImage = Properties.Resources.free_icon_add_button_5974633;
buttonAdd.BackgroundImageLayout = ImageLayout.Stretch;
buttonAdd.Location = new Point(43, 25);
buttonAdd.Name = "buttonAdd";
buttonAdd.Size = new Size(61, 59);
buttonAdd.TabIndex = 1;
buttonAdd.UseVisualStyleBackColor = true;
buttonAdd.Click += buttonAdd_Click;
//
// FormTours
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(924, 371);
Controls.Add(dataGridViewData);
Controls.Add(panel1);
Name = "FormTours";
Text = "Туры";
Load += FormRoutes_Load;
((System.ComponentModel.ISupportInitialize)dataGridViewData).EndInit();
panel1.ResumeLayout(false);
ResumeLayout(false);
}
#endregion
private DataGridView dataGridViewData;
private Panel panel1;
private Button buttonDelete;
private Button buttonUpdate;
private Button buttonAdd;
}
}

View File

@ -0,0 +1,111 @@
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Repositories;
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;
using Unity;
namespace ProjectTourAgency.Forms
{
public partial class FormRoutes : Form
{
private readonly IUnityContainer _container;
private readonly IRouteRepository _routeRepository;
public FormRoutes(IRouteRepository routeRepository, IUnityContainer container)
{
InitializeComponent();
_container = container ?? throw new ArgumentNullException(nameof(container));
_routeRepository = routeRepository ?? throw new ArgumentNullException(nameof(_routeRepository));
}
private void FormRoutes_Load(object sender, EventArgs e)
{
try
{
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при загрузке", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
try
{
_container.Resolve<FormRoute>().ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка рот добавлении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonUpdate_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
try
{
var form = _container.Resolve<FormRoute>();
form.Id = findId;
form.ShowDialog();
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при изменении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonDelete_Click(object sender, EventArgs e)
{
if (!TryGetIdentifierFromSelectedRow(out var findId))
{
return;
}
if (MessageBox.Show("Удалить запись?", "Удаление", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
try
{
_routeRepository.DeleteRoute(findId);
LoadList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка при удалении", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void LoadList() => dataGridViewData.DataSource = _routeRepository.ReadRoutes();
private bool TryGetIdentifierFromSelectedRow(out int id)
{
id = 0;
if (dataGridViewData.SelectedRows.Count < 1)
{
MessageBox.Show("Нет выбранной записи", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
id = Convert.ToInt32(dataGridViewData.SelectedRows[0].Cells["ID"].Value);
return true;
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,39 @@
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations
{
internal class AddMoneyRepository : IAddMoneyRepository
{
public void CreateAddMoney(AddMoney client)
{
}
public void DeleteAddMoney(int id)
{
}
public AddMoney ReadAddMoneyById(int id)
{
return AddMoney.CreateEntity(0,0,DateTime.Now,0);
}
public IEnumerable<AddMoney> ReadAddMoneys()
{
return [];
}
public void UpdateAddMoney(AddMoney client)
{
}
}
}

View File

@ -0,0 +1,34 @@
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations;
public class ClientRepository : IClientRepository
{
public void CreateClient(Client client)
{
}
public void DeleteClient(int id)
{
}
public Client ReadClientById(int id)
{
return Client.CreateEntity(0, string.Empty, DateTime.Now, string.Empty, 0);
}
public IEnumerable<Client> ReadClients()
{
return [];
}
public void UpdateClient(Client client)
{
}
}

View File

@ -0,0 +1,35 @@
using ProjectEmployeeAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations;
public class EmployeeRepository : IEmployeeRepository
{
public void CreateEmployee(Employee employee)
{
}
public void DeleteEmployee(int id)
{
}
public Employee ReadEmployeeById(int id)
{
return Employee.CreateEntity(0, string.Empty,0);
}
public IEnumerable<Employee> ReadEmployees()
{
return [];
}
public void UpdateEmployee(Employee employee)
{
}
}

View File

@ -0,0 +1,37 @@
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Enities;
using ProjectTourAgency.Repositories;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Implementations;
public class RouteRepository : IRouteRepository
{
public void CreateRoute(Route route)
{
}
public void DeleteRoute(int id)
{
}
public Route ReadRouteById(int id)
{
return Route.CreateEntity(0,0, string.Empty,string.Empty, 0);
}
public IEnumerable<Route> ReadRoutes()
{
return [];
}
public void UpdateRoute(Route route)
{
}
}

View File

@ -21,7 +21,7 @@ public class TourRepositiry : ITourRepository
public Tour ReadTourById(int id) public Tour ReadTourById(int id)
{ {
return Tour.CreateEntity(0, string.Empty, DateTime.Now, string.Empty, 0,0); return Tour.CreateEntity(0,DateTime.Now,0);
} }
public IEnumerable<Tour> ReadTours() public IEnumerable<Tour> ReadTours()

View File

@ -0,0 +1,36 @@
using ProjectEmployeeAgency.Repositories;
using ProjectRouteAgency.Repositories;
using ProjectTourAgency.Implementations;
using ProjectTourAgency.Repositories;
using Unity;
namespace ProjectTourAgency
{
internal static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(CreateContainer().Resolve<FormTourAgency>());
}
private static IUnityContainer CreateContainer()
{
var container = new UnityContainer();
container.RegisterType<IAddMoneyRepository, AddMoneyRepository>();
container.RegisterType<IClientRepository, ClientRepository>();
container.RegisterType<IRouteRepository, RouteRepository>();
container.RegisterType<IEmployeeRepository, EmployeeRepository>();
container.RegisterType<ITourRepository, TourRepositiry>();
return container;
}
}
}

View File

@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Unity" Version="5.11.10" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
</Project>

View File

@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.8.34525.116
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectTourAgency", "ProjectTourAgency.csproj", "{1DF30EE1-3015-4980-A3F9-153C7A11049F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{1DF30EE1-3015-4980-A3F9-153C7A11049F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1DF30EE1-3015-4980-A3F9-153C7A11049F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1DF30EE1-3015-4980-A3F9-153C7A11049F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1DF30EE1-3015-4980-A3F9-153C7A11049F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {E81AC68F-76E2-40C7-8F94-77E003A138B0}
EndGlobalSection
EndGlobal

View File

@ -0,0 +1,113 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Этот код создан программой.
// Исполняемая версия:4.0.30319.42000
//
// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
// повторной генерации кода.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ProjectTourAgency.Properties {
using System;
/// <summary>
/// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
/// </summary>
// Этот класс создан автоматически классом StronglyTypedResourceBuilder
// с помощью такого средства, как ResGen или Visual Studio.
// Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
// с параметром /str или перестройте свой проект VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ProjectTourAgency.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Перезаписывает свойство CurrentUICulture текущего потока для всех
/// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap free_icon_add_button_5974633 {
get {
object obj = ResourceManager.GetObject("free-icon-add-button-5974633", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap free_icon_delete_3807871 {
get {
object obj = ResourceManager.GetObject("free-icon-delete-3807871", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap free_icon_edit_8679935 {
get {
object obj = ResourceManager.GetObject("free-icon-edit-8679935", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Снимок_экрана_2024_11_08_213926 {
get {
object obj = ResourceManager.GetObject("Снимок экрана 2024-11-08 213926", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Поиск локализованного ресурса типа System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap Снимок_экрана_2024_11_08_2139261 {
get {
object obj = ResourceManager.GetObject("Снимок экрана 2024-11-08 2139261", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="free-icon-edit-8679935" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\free-icon-edit-8679935.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Снимок экрана 2024-11-08 213926" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Снимок экрана 2024-11-08 213926.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="free-icon-add-button-5974633" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\free-icon-add-button-5974633.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Снимок экрана 2024-11-08 2139261" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Снимок экрана 2024-11-08 2139261.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="free-icon-delete-3807871" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\free-icon-delete-3807871.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -0,0 +1,20 @@
using ProjectTourAgency.Enities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Repositories;
public interface IAddMoneyRepository
{
IEnumerable<AddMoney> ReadAddMoneys();
AddMoney ReadAddMoneyById(int id);
void CreateAddMoney(AddMoney client);
void UpdateAddMoney(AddMoney client);
void DeleteAddMoney(int id);
}

View File

@ -0,0 +1,20 @@
using ProjectTourAgency.Enities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Repositories;
public interface IClientRepository
{
IEnumerable<Client> ReadClients();
Client ReadClientById(int id);
void CreateClient(Client client);
void UpdateClient(Client client);
void DeleteClient(int id);
}

View File

@ -0,0 +1,17 @@
using ProjectTourAgency.Enities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ProjectTourAgency.Repositories
{
public interface IClientTourRepository
{
IEnumerable<ClientTour> ReadClientTours(int? clientId = null, int? tourId = null);
void CreateReceipt(ClientTour clientTour);
}
}

Some files were not shown because too many files have changed in this diff Show More