diff --git a/VetClinic/VetClinic.sln b/VetClinic/VetClinic.sln index 5024667..a6f1dc9 100644 --- a/VetClinic/VetClinic.sln +++ b/VetClinic/VetClinic.sln @@ -5,6 +5,8 @@ VisualStudioVersion = 17.3.32922.545 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VetClinicView", "VetClinicView\VetClinicView.csproj", "{278BCF5A-EAE2-41FF-A5FC-5376AB7FE6E2}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VetClinicBusinessLogic", "VetClinicBusinessLogic\VetClinicBusinessLogic.csproj", "{E3827255-F30E-4DD8-A18E-A542280F631F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,6 +17,10 @@ Global {278BCF5A-EAE2-41FF-A5FC-5376AB7FE6E2}.Debug|Any CPU.Build.0 = Debug|Any CPU {278BCF5A-EAE2-41FF-A5FC-5376AB7FE6E2}.Release|Any CPU.ActiveCfg = Release|Any CPU {278BCF5A-EAE2-41FF-A5FC-5376AB7FE6E2}.Release|Any CPU.Build.0 = Release|Any CPU + {E3827255-F30E-4DD8-A18E-A542280F631F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E3827255-F30E-4DD8-A18E-A542280F631F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E3827255-F30E-4DD8-A18E-A542280F631F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E3827255-F30E-4DD8-A18E-A542280F631F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/VetClinic/VetClinicBusinessLogic/BindingModels/ClientBindingModel.cs b/VetClinic/VetClinicBusinessLogic/BindingModels/ClientBindingModel.cs new file mode 100644 index 0000000..70ec8da --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BindingModels/ClientBindingModel.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.Enums; +using System.Runtime.Serialization; + + +namespace VetClinicBusinessLogic.BindingModels +{ + public class ClientBindingModel + { + public int? Id { get; set; } + public string Name { get; set; } + public string Pet { get; set; } + public string PetName { get; set; } + public string Email { get; set; } + public string Phone { get; set; } + public string Password { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BindingModels/EmployeeBindingModel.cs b/VetClinic/VetClinicBusinessLogic/BindingModels/EmployeeBindingModel.cs new file mode 100644 index 0000000..4ac71ca --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BindingModels/EmployeeBindingModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.BindingModels +{ + public class EmployeeBindingModel + { + public int? Id { get; set; } + public string Name { get; set; } + public string Specialization { get; set; } + public string Password { get; set; } + public string Email { get; set; } + public string Phone { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BindingModels/MailConfigBindingModel.cs b/VetClinic/VetClinicBusinessLogic/BindingModels/MailConfigBindingModel.cs new file mode 100644 index 0000000..88b9730 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BindingModels/MailConfigBindingModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.BindingModels +{ + public class MailConfigBindingModel + { + public string MailLogin { get; set; } + public string MailPassword { get; set; } + public string SmtpClientHost { get; set; } + public int SmtpClientPort { get; set; } + public string PopHost { get; set; } + public int PopPort { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BindingModels/MailSendInfoBindingModel.cs b/VetClinic/VetClinicBusinessLogic/BindingModels/MailSendInfoBindingModel.cs new file mode 100644 index 0000000..0699b0a --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BindingModels/MailSendInfoBindingModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.BindingModels +{ + public class MailSendInfoBindingModel + { + public string MailAddress { get; set; } + public string Subject { get; set; } + public string Text { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BindingModels/PaymentBindingModel.cs b/VetClinic/VetClinicBusinessLogic/BindingModels/PaymentBindingModel.cs new file mode 100644 index 0000000..8bc9906 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BindingModels/PaymentBindingModel.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Runtime.Serialization; + +namespace VetClinicBusinessLogic.BindingModels +{ + public class PaymentBindingModel + { + public int Id { get; set; } + public decimal Sum { get; set; } + public decimal Remains { get; set; } + public DateTime DateOfPayment { get; set; } + public int VisitId { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BindingModels/PaymentDateBindingModel.cs b/VetClinic/VetClinicBusinessLogic/BindingModels/PaymentDateBindingModel.cs new file mode 100644 index 0000000..e3d139f --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BindingModels/PaymentDateBindingModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.BindingModels +{ + public class PaymentDateBindingModel + { + public DateTime DateTo { get; set; } + public DateTime DateFrom { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BindingModels/ReportBindingModel.cs b/VetClinic/VetClinicBusinessLogic/BindingModels/ReportBindingModel.cs new file mode 100644 index 0000000..d76077e --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BindingModels/ReportBindingModel.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.BindingModels +{ + public class ReportBindingModel + { + public string FileName { get; set; } + public DateTime? DateFrom { get; set; } + public DateTime? DateTo { get; set; } + public int UserId { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BindingModels/ServiceBindingModel.cs b/VetClinic/VetClinicBusinessLogic/BindingModels/ServiceBindingModel.cs new file mode 100644 index 0000000..a0fa7dd --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BindingModels/ServiceBindingModel.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Runtime.Serialization; + +namespace VetClinicBusinessLogic.BindingModels +{ + public class ServiceBindingModel + { + public int? Id { get; set; } + public string Name { get; set; } + public decimal Cost { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BindingModels/VisitBindingModel.cs b/VetClinic/VetClinicBusinessLogic/BindingModels/VisitBindingModel.cs new file mode 100644 index 0000000..f90e161 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BindingModels/VisitBindingModel.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Runtime.Serialization; + +namespace VetClinicBusinessLogic.BindingModels +{ + public class VisitBindingModel + { + public int? Id { get; set; } + public DateTime VisitsDate { get; set; } + public decimal Sum { get; set; } + public int? EmployeeId { get; set; } + public int ClientId { get; set; } + public int ServiceId { get; set; } + public Dictionary VisitServices { get; set; } + public DateTime? DateFrom { get; set; } + public DateTime? DateTo { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogic/ClientLogic.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogic/ClientLogic.cs new file mode 100644 index 0000000..314dafc --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogic/ClientLogic.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.Interfaces; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.BusinessLogic +{ + public class ClientLogic + { + private IClientStorage clientStorage; + public ClientLogic(IClientStorage clientS) + { + clientStorage = clientS; + } + public void CreateOrUpdate(ClientBindingModel model) + { + var element = clientStorage.GetElement(new ClientBindingModel + { + Phone = model.Phone + }); + if (element != null && element.Id != model.Id) + { + throw new Exception("Уже есть пользователь с таким телефоном"); + } + if (model.Id.HasValue) + { + clientStorage.Update(model); + } + else + { + clientStorage.Insert(model); + } + } + + public void Delete(ClientBindingModel model) + { + var element = clientStorage.GetElement(new ClientBindingModel + { + Id = + model.Id + }); + if (element == null) + { + throw new Exception("Элемент не найден"); + } + clientStorage.Delete(model); + } + + public List Read(ClientBindingModel model) + { + if (model == null) + { + return clientStorage.GetFullList(); + } + if (model.Id.HasValue) + { + return new List { clientStorage.GetElement(model) +}; + } + return clientStorage.GetFilteredList(model); + } + public ClientViewModel GetClient(ClientBindingModel binding) + { + return clientStorage.GetElement(binding); + } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogic/EmployeeLogic.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogic/EmployeeLogic.cs new file mode 100644 index 0000000..ef37c6a --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogic/EmployeeLogic.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.Interfaces; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.BusinessLogic +{ + public class EmployeeLogic + { + private readonly IEmployeeStorage _employeeStorage; + public EmployeeLogic(IEmployeeStorage employeeStorage) + { + _employeeStorage = employeeStorage; + } + public List Read(EmployeeBindingModel model) + { + if (model == null) + { + return _employeeStorage.GetFullList(); + } + if (model.Id.HasValue) + { + return new List { _employeeStorage.GetElement(model) +}; + } + return _employeeStorage.GetFilteredList(model); + } + + public EmployeeViewModel Check(EmployeeBindingModel model) + { + return _employeeStorage.GetElement(model); + } + public void CreateOrUpdate(EmployeeBindingModel model) + { + var element = _employeeStorage.GetElement(new EmployeeBindingModel + { + Phone = model.Phone + }); + if (element != null && element.Id != model.Id) + { + throw new Exception("Уже есть сотрудник с таким телефоном"); + } + if (model.Id.HasValue) + { + _employeeStorage.Update(model); + } + else + { + _employeeStorage.Insert(model); + } + } + public void Delete(EmployeeBindingModel model) + { + var element = _employeeStorage.GetElement(new EmployeeBindingModel + { + Id = + model.Id + }); + if (element == null) + { + throw new Exception("Элемент не найден"); + } + _employeeStorage.Delete(model); + } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogic/MailWorker.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogic/MailWorker.cs new file mode 100644 index 0000000..096374d --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogic/MailWorker.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Mail; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; + +namespace VetClinicBusinessLogic.BusinessLogic +{ + public class MailWorker + { + protected string _mailLogin; + protected string _mailPassword; + protected string _smtpClientHost; + protected int _smtpClientPort; + protected string _popHost; + protected int _popPort; + public void MailConfig(MailConfigBindingModel config) + { + _mailLogin = config.MailLogin; + _mailPassword = config.MailPassword; + _smtpClientHost = config.SmtpClientHost; + _smtpClientPort = config.SmtpClientPort; + _popHost = config.PopHost; + _popPort = config.PopPort; + } + public async void MailSendAsync(MailSendInfoBindingModel info) + { + if (string.IsNullOrEmpty(_mailLogin) || string.IsNullOrEmpty(_mailPassword)) + { + return; + } + if (string.IsNullOrEmpty(_smtpClientHost) || _smtpClientPort == 0) + { + return; + } + if (string.IsNullOrEmpty(info.MailAddress) || + string.IsNullOrEmpty(info.Subject) || string.IsNullOrEmpty(info.Text)) + { + return; + } + await SendMailAsync(info); + } + private async Task SendMailAsync(MailSendInfoBindingModel info) + { + using var objMailMessage = new MailMessage(); + using var objSmtpClient = new SmtpClient(_smtpClientHost, + _smtpClientPort); + try + { + objMailMessage.From = new MailAddress(_mailLogin); + objMailMessage.To.Add(new MailAddress(info.MailAddress)); + objMailMessage.Subject = info.Subject; + objMailMessage.Body = info.Text; + objMailMessage.SubjectEncoding = Encoding.UTF8; + objMailMessage.BodyEncoding = Encoding.UTF8; + objSmtpClient.UseDefaultCredentials = false; + objSmtpClient.EnableSsl = true; + objSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; + objSmtpClient.Credentials = new NetworkCredential(_mailLogin, _mailPassword); + await Task.Run(() => objSmtpClient.Send(objMailMessage)); + } + catch (Exception) + { + throw; + } + } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogic/PaymentLogic.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogic/PaymentLogic.cs new file mode 100644 index 0000000..fe98940 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogic/PaymentLogic.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.Interfaces; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.BusinessLogic +{ + public class PaymentLogic + { + private readonly IPaymentStorage _PaymentsStorage; + + public PaymentLogic(IPaymentStorage PaymentsStorage) + { + _PaymentsStorage = PaymentsStorage; + } + + public List Read(PaymentBindingModel model) + { + if (model == null) + { + return _PaymentsStorage.GetFullList(); + } + if (model.Id != 0) + { + return new List { _PaymentsStorage.GetElement(model) }; + } + return _PaymentsStorage.GetFilteredList(model); + } + + public void CreateOrUpdate(PaymentBindingModel model) + { + if (model.Id != 0) + { + _PaymentsStorage.Update(model); + } + else + { + _PaymentsStorage.Insert(model); + } + + } + + public void Delete(PaymentBindingModel model) + { + var element = _PaymentsStorage.GetElement(new PaymentBindingModel + { + Id = model.Id + }); + if (element == null) + { + throw new Exception("Услуга не найдена"); + } + _PaymentsStorage.Delete(model); + } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogic/ReportLogic.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogic/ReportLogic.cs new file mode 100644 index 0000000..229167c --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogic/ReportLogic.cs @@ -0,0 +1,182 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.BusinessLogic.OfficePackage; +using VetClinicBusinessLogic.BusinessLogic.OfficePackage.Models; +using VetClinicBusinessLogic.Interfaces; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.BusinessLogic +{ + public class ReportLogic + { + private readonly IServiceStorage _serviceStorage; + private readonly IVisitStorage _VisitStorage; + private readonly ReportToExcel _saveToExcel; + private readonly ReportToWord _saveToWord; + private readonly ReportToPdf _saveToPdf; + private readonly IPaymentStorage paymentStorage; + public ReportLogic(IVisitStorage VisitStorage, IPaymentStorage paymentStorage, IServiceStorage serviceStorage, + ReportToExcel saveToExcel, ReportToWord saveToWord, ReportToPdf saveToPdf) + { + this.paymentStorage = paymentStorage; + _VisitStorage = VisitStorage; + _serviceStorage = serviceStorage; + _saveToExcel = saveToExcel; + _saveToWord = saveToWord; + _saveToPdf = saveToPdf; + } + public List GetVisitService(int UserId) + { + var Visits = _VisitStorage.GetFilteredList(new VisitBindingModel() + { + ClientId = UserId + }); + var list = new List(); + foreach (var Visit in Visits) + { + var record = new ReportVisitServiceViewModel + { + VisitDate = Visit.VisitsDate, + Services = new List(), + TotalCount = 0 + }; + foreach (var service in Visit.VisitServices) + { + record.Services.Add(service.Value); + record.TotalCount += 1; + } + list.Add(record); + } + return list; + } + public List GetServiceVisit(int UserId) + { + var services = _serviceStorage.GetFullList(); + var list = new List(); + foreach (var service in services) + { + var record = new ReportServiceVisitViewModel + { + Name = service.Name, + Visits = new List(), + TotalCount = 0 + }; + foreach (var visit in service.VisitServices) + { + record.Visits.Add(visit.Value); + record.TotalCount += 1; + } + list.Add(record); + } + return list; + } + public void SaveVisitServiceToExcelFile(ReportBindingModel model) + { + _saveToExcel.CreateReportVisitService(new ExcelInfoVisitService + { + FileName = model.FileName, + Title = "Список визитов", + VisitServices = GetVisitService(model.UserId) + }); + } + public void SaveServiceVisitToExcelFile(ReportBindingModel model) + { + _saveToExcel.CreateReportServiceVisit(new ExcelInfoServiceVisit + { + FileName = model.FileName, + Title = "Список услуг", + VisitServices = GetServiceVisit(model.UserId) + }); + } + public void SaveVisitServiceToWordFile(ReportBindingModel model) + { + _saveToWord.CreateDocVisitService(new WordInfoVisitService + { + FileName = model.FileName, + Title = "Визиты по услугам", + VisitServices = GetVisitService(model.UserId) + }); + } + public void SaveServiceVisitToWordFile(ReportBindingModel model) + { + _saveToWord.CreateDocServiceVisit(new WordInfoServiceVisit + { + FileName = model.FileName, + Title = "Услуги по визитам", + VisitServices = GetServiceVisit(model.UserId) + }); + } + public List GetOrders(ReportBindingModel model) + { + return _VisitStorage.GetFilteredListDate(new VisitBindingModel + { + DateFrom = + model.DateFrom, + DateTo = model.DateTo + }) + .Select(x => new ReportVisitViewModel + { + DateCreate = x.VisitsDate, + ClientName = x.ClientName, + Sum = x.Sum + }) + .ToList(); + } + public ReportServiceViewModel GetServices(ReportBindingModel model) + { + var list = _VisitStorage.GetFilteredListDate(new VisitBindingModel + { + DateFrom = + model.DateFrom, + DateTo = model.DateTo + }); + Dictionary dic = new Dictionary(); + foreach (var item in list) + { + foreach (var item2 in item.VisitServices) + { + if (dic.ContainsKey(item2.Value)) + { + dic[item2.Value]++; + } + else + { + dic[item2.Value] = 1; + } + } + + } + return new ReportServiceViewModel() + { + Sum = paymentStorage.GetElementFirstLast(new PaymentDateBindingModel()).Remains, + Services = dic + }; + } + public void SaveOrdersToPdfFileVisit(ReportBindingModel model) + { + _saveToPdf.CreateDoc(new PdfInfo + { + FileName = model.FileName, + Title = "Список визитов", + DateFrom = model.DateFrom.Value, + DateTo = model.DateTo.Value, + Visits = GetOrders(model) + }); + } + public void SaveOrdersToPdfFileService(ReportBindingModel model) + { + _saveToPdf.CreateDocService(new PdfInfoService + { + FileName = model.FileName, + Title = "Список визитов", + DateFrom = model.DateFrom.Value, + DateTo = model.DateTo.Value, + Services = GetServices(model) + }); + } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogic/ServiceLogic.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogic/ServiceLogic.cs new file mode 100644 index 0000000..17943bf --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogic/ServiceLogic.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.Interfaces; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.BusinessLogic +{ + public class ServiceLogic + { + private readonly IServiceStorage _ServicesStorage; + + public ServiceLogic(IServiceStorage ServicesStorage) + { + _ServicesStorage = ServicesStorage; + } + + public List Read(ServiceBindingModel model) + { + if (model == null) + { + return _ServicesStorage.GetFullList(); + } + if (model.Id.HasValue) + { + return new List { _ServicesStorage.GetElement(model) }; + } + return _ServicesStorage.GetFilteredList(model); + } + + public void CreateOrUpdate(ServiceBindingModel model) + { + if (model.Id.HasValue) + { + _ServicesStorage.Update(model); + } + else + { + _ServicesStorage.Insert(model); + } + + } + + public void Delete(ServiceBindingModel model) + { + var element = _ServicesStorage.GetElement(new ServiceBindingModel + { + Id = model.Id + }); + if (element == null) + { + throw new Exception("Услуга не найдена"); + } + _ServicesStorage.Delete(model); + } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/BusinessLogic/VisitLogic.cs b/VetClinic/VetClinicBusinessLogic/BusinessLogic/VisitLogic.cs new file mode 100644 index 0000000..9cb1e59 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/BusinessLogic/VisitLogic.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.Interfaces; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.BusinessLogic +{ + internal class VisitLogic + { + private readonly IVisitStorage _VisitsStorage; + private readonly IServiceStorage serviceStorage; + + public VisitLogic(IVisitStorage VisitsStorage, IServiceStorage serviceStorage) + { + this.serviceStorage = serviceStorage; + _VisitsStorage = VisitsStorage; + } + + public List Read(VisitBindingModel model) + { + if (model == null) + { + return _VisitsStorage.GetFullList(); + } + if (model.Id.HasValue) + { + return new List { _VisitsStorage.GetElement(model) }; + } + return _VisitsStorage.GetFilteredList(model); + } + + public void CreateOrUpdate(VisitBindingModel model) + { + + if (model.Id.HasValue) + { + _VisitsStorage.Update(model); + } + else + { + _VisitsStorage.Insert(model); + } + + } + + public void Delete(VisitBindingModel model) + { + var element = _VisitsStorage.GetElement(new VisitBindingModel + { + Id = model.Id + }); + if (element == null) + { + throw new Exception("Услуга не найдена"); + } + _VisitsStorage.Delete(model); + } + public List ReadEmployee(VisitBindingModel model) + { + return _VisitsStorage.GetFilteredListEmployee(model); + } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/Enums/Enums.cs b/VetClinic/VetClinicBusinessLogic/Enums/Enums.cs new file mode 100644 index 0000000..3cd3efc --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/Enums/Enums.cs @@ -0,0 +1,9 @@ +namespace VetClinicBusinessLogic.Enums +{ + public enum Role + { + Клиент = 0, + + Сотрудник = 1 + } +} diff --git a/VetClinic/VetClinicBusinessLogic/Interfaces/IClientStorage.cs b/VetClinic/VetClinicBusinessLogic/Interfaces/IClientStorage.cs new file mode 100644 index 0000000..e670482 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/Interfaces/IClientStorage.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.Interfaces +{ + public interface IClientStorage + { + List GetFullList(); + + List GetFilteredList(ClientBindingModel model); + + ClientViewModel GetElement(ClientBindingModel model); + + void Insert(ClientBindingModel model); + + void Update(ClientBindingModel model); + + void Delete(ClientBindingModel model); + } +} diff --git a/VetClinic/VetClinicBusinessLogic/Interfaces/IEmployeeStorage.cs b/VetClinic/VetClinicBusinessLogic/Interfaces/IEmployeeStorage.cs new file mode 100644 index 0000000..0ee6fbf --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/Interfaces/IEmployeeStorage.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.Interfaces +{ + public interface IEmployeeStorage + { + List GetFullList(); + + List GetFilteredList(EmployeeBindingModel model); + + EmployeeViewModel GetElement(EmployeeBindingModel model); + + void Insert(EmployeeBindingModel model); + + void Update(EmployeeBindingModel model); + + void Delete(EmployeeBindingModel model); + } +} diff --git a/VetClinic/VetClinicBusinessLogic/Interfaces/IPaymentStorage.cs b/VetClinic/VetClinicBusinessLogic/Interfaces/IPaymentStorage.cs new file mode 100644 index 0000000..5b131bb --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/Interfaces/IPaymentStorage.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.Interfaces +{ + public interface IPaymentStorage + { + List GetFullList(); + + List GetFilteredList(PaymentBindingModel model); + + PaymentViewModel GetElement(PaymentBindingModel model); + + void Insert(PaymentBindingModel model); + + void Update(PaymentBindingModel model); + + PaymentViewModel GetElementFirstLast(PaymentDateBindingModel model); + void Delete(PaymentBindingModel model); + } +} diff --git a/VetClinic/VetClinicBusinessLogic/Interfaces/IServiceStorage.cs b/VetClinic/VetClinicBusinessLogic/Interfaces/IServiceStorage.cs new file mode 100644 index 0000000..2b3eed2 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/Interfaces/IServiceStorage.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.Interfaces +{ + public interface IServiceStorage + { + List GetFullList(); + + List GetFilteredList(ServiceBindingModel model); + + ServiceViewModel GetElement(ServiceBindingModel model); + + void Insert(ServiceBindingModel model); + + void Update(ServiceBindingModel model); + + void Delete(ServiceBindingModel model); + } +} diff --git a/VetClinic/VetClinicBusinessLogic/Interfaces/IVisitStorage.cs b/VetClinic/VetClinicBusinessLogic/Interfaces/IVisitStorage.cs new file mode 100644 index 0000000..aaab353 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/Interfaces/IVisitStorage.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VetClinicBusinessLogic.BindingModels; +using VetClinicBusinessLogic.ViewModels; + +namespace VetClinicBusinessLogic.Interfaces +{ + public interface IVisitStorage + { + List GetFullList(); + + List GetFilteredList(VisitBindingModel model); + VisitViewModel GetElement(VisitBindingModel model); + List GetFilteredListEmployee(VisitBindingModel model); + List GetFilteredListDate(VisitBindingModel model); + + void Insert(VisitBindingModel model); + + void Update(VisitBindingModel model); + + void Delete(VisitBindingModel model); + } +} diff --git a/VetClinic/VetClinicBusinessLogic/VetClinicBusinessLogic.csproj b/VetClinic/VetClinicBusinessLogic/VetClinicBusinessLogic.csproj new file mode 100644 index 0000000..132c02c --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/VetClinicBusinessLogic.csproj @@ -0,0 +1,9 @@ + + + + net6.0 + enable + enable + + + diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/ClientViewModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/ClientViewModel.cs new file mode 100644 index 0000000..dffb5ac --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/ClientViewModel.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + [DataContract] + public class ClientViewModel + { + public int Id { get; set; } + public string Name { get; set; } + public string Pet { get; set; } + public string PetName { get; set; } + public string Email { get; set; } + public string Phone { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/EmployeeViewModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/EmployeeViewModel.cs new file mode 100644 index 0000000..fca99db --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/EmployeeViewModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + public class EmployeeViewModel + { + public int Id { get; set; } + public string Name { get; set; } + public string Specialization { get; set; } + public string Email { get; set; } + public string Phone { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/PaymentViewModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/PaymentViewModel.cs new file mode 100644 index 0000000..5f0be21 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/PaymentViewModel.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + public class PaymentViewModel + { + public int Id { get; set; } + public decimal Sum { get; set; } + public decimal Remains { get; set; } + public DateTime? DateOfPayment { get; set; } + public int VisitId { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/ReportServiceViewModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportServiceViewModel.cs new file mode 100644 index 0000000..194441c --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportServiceViewModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + public class ReportServiceViewModel + { + public decimal Sum { get; set; } + public Dictionary Services { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/ReportServiceVisitViewModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportServiceVisitViewModel.cs new file mode 100644 index 0000000..8bb3d3c --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportServiceVisitViewModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + public class ReportServiceVisitViewModel + { + public string Name { get; set; } + public List Visits { get; set; } + public int TotalCount { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/ReportViewerServiceModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportViewerServiceModel.cs new file mode 100644 index 0000000..5bade6f --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportViewerServiceModel.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + public class ReportViewerServiceModel + { + public string Name { get; set; } + public int Count { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/ReportVisitServiceViewModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportVisitServiceViewModel.cs new file mode 100644 index 0000000..cd2757e --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportVisitServiceViewModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + public class ReportVisitServiceViewModel + { + public DateTime? VisitDate { get; set; } + public List Services { get; set; } + public int TotalCount { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/ReportVisitViewModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportVisitViewModel.cs new file mode 100644 index 0000000..7d0b5d6 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/ReportVisitViewModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + public class ReportVisitViewModel + { + public DateTime DateCreate { get; set; } + public string ClientName { get; set; } + public decimal Sum { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/ServiceViewModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/ServiceViewModel.cs new file mode 100644 index 0000000..dd074f4 --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/ServiceViewModel.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + public class ServiceViewModel + { + public int Id { get; set; } + public string Name { get; set; } + public decimal Cost { get; set; } + public Dictionary VisitServices { get; set; } + } +} diff --git a/VetClinic/VetClinicBusinessLogic/ViewModels/VisitViewModel.cs b/VetClinic/VetClinicBusinessLogic/ViewModels/VisitViewModel.cs new file mode 100644 index 0000000..6e3f78d --- /dev/null +++ b/VetClinic/VetClinicBusinessLogic/ViewModels/VisitViewModel.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VetClinicBusinessLogic.ViewModels +{ + public class VisitViewModel + { + public int Id { get; set; } + public DateTime VisitsDate { get; set; } + public decimal Sum { get; set; } + public int? EmployeeId { get; set; } + public int ClientId { get; set; } + public int ServiceId { get; set; } + public string ServiceName { get; set; } + public string ClientName { get; set; } + public string? EmployeeName { get; set; } + public Dictionary VisitServices { get; set; } + } +}