From b287e4b40e19b1eb5926081fd4a2a8b222883d89 Mon Sep 17 00:00:00 2001 From: Kristina Date: Tue, 30 Apr 2024 22:26:13 +0400 Subject: [PATCH] =?UTF-8?q?2=20=D1=8D=D1=82=D0=B0=D0=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BindingModels/ItemBindingModel.cs | 2 + .../BindingModels/ItemForStudyBindingModel.cs | 2 + .../Models/IItemForStudyModel.cs | 2 + School/SchoolContracts/Models/IItemModels.cs | 3 + .../StorageContracts/IPaymentStorage.cs | 1 - .../ViewModels/ItemForStudyViewModel.cs | 2 + .../ViewModels/ItemViewModel.cs | 4 +- .../Implements/CoursesForStudyStorage.cs | 85 ++++++++++++++ .../Implements/CoursesStorage.cs | 92 ++++++++++++++++ .../Implements/CustumerStorage.cs | 84 ++++++++++++++ .../Implements/ItemForStudyStorage.cs | 86 +++++++++++++++ .../SchoolDatabase/Implements/ItemStorage.cs | 93 ++++++++++++++++ .../Implements/PaymentStorage.cs | 87 +++++++++++++++ .../SchoolDatabase/Implements/StudyStorage.cs | 83 ++++++++++++++ .../Implements/WorkerStorage.cs | 93 ++++++++++++++++ School/SchoolDatabase/Models/Item.cs | 18 ++- School/SchoolDatabase/SchoolDbContext.cs | 2 +- School/SchoolWebApp/Models/CurrentUser.cs | 7 ++ School/SchoolWebApp/Program.cs | 14 +++ School/SchoolWebApp/SchoolWebApp.csproj | 11 ++ School/SchoolWebApp/Views/Home/Course.cshtml | 28 +++++ .../SchoolWebApp/Views/Home/Coursess.cshtml | 34 ++++++ .../Views/Home/CreateCourses.cshtml | 23 ++++ .../SchoolWebApp/Views/Home/CreateItem.cshtml | 19 ++++ School/SchoolWebApp/Views/Home/Enter.cshtml | 21 ++++ School/SchoolWebApp/Views/Home/Index.cshtml | 9 +- School/SchoolWebApp/Views/Home/Item.cshtml | 24 ++++ School/SchoolWebApp/Views/Home/Items.cshtml | 32 ++++++ .../SchoolWebApp/Views/Home/Register.cshtml | 36 ++++++ .../SchoolWebApp/Views/Shared/_Layout.cshtml | 104 ++++++++++++------ School/SchoolWebApp/log4net.config | 16 +++ 31 files changed, 1077 insertions(+), 40 deletions(-) create mode 100644 School/SchoolDatabase/Implements/CoursesForStudyStorage.cs create mode 100644 School/SchoolDatabase/Implements/CoursesStorage.cs create mode 100644 School/SchoolDatabase/Implements/CustumerStorage.cs create mode 100644 School/SchoolDatabase/Implements/ItemForStudyStorage.cs create mode 100644 School/SchoolDatabase/Implements/ItemStorage.cs create mode 100644 School/SchoolDatabase/Implements/PaymentStorage.cs create mode 100644 School/SchoolDatabase/Implements/StudyStorage.cs create mode 100644 School/SchoolDatabase/Implements/WorkerStorage.cs create mode 100644 School/SchoolWebApp/Models/CurrentUser.cs create mode 100644 School/SchoolWebApp/Views/Home/Course.cshtml create mode 100644 School/SchoolWebApp/Views/Home/Coursess.cshtml create mode 100644 School/SchoolWebApp/Views/Home/CreateCourses.cshtml create mode 100644 School/SchoolWebApp/Views/Home/CreateItem.cshtml create mode 100644 School/SchoolWebApp/Views/Home/Enter.cshtml create mode 100644 School/SchoolWebApp/Views/Home/Item.cshtml create mode 100644 School/SchoolWebApp/Views/Home/Items.cshtml create mode 100644 School/SchoolWebApp/Views/Home/Register.cshtml create mode 100644 School/SchoolWebApp/log4net.config diff --git a/School/SchoolContracts/BindingModels/ItemBindingModel.cs b/School/SchoolContracts/BindingModels/ItemBindingModel.cs index 71f921a..78c844b 100644 --- a/School/SchoolContracts/BindingModels/ItemBindingModel.cs +++ b/School/SchoolContracts/BindingModels/ItemBindingModel.cs @@ -15,6 +15,8 @@ namespace SchoolContracts.BindingModels public decimal Price { get; } + public int Count { get; set; } + public int WorkerId { get; } } } diff --git a/School/SchoolContracts/BindingModels/ItemForStudyBindingModel.cs b/School/SchoolContracts/BindingModels/ItemForStudyBindingModel.cs index 317f983..2dd107c 100644 --- a/School/SchoolContracts/BindingModels/ItemForStudyBindingModel.cs +++ b/School/SchoolContracts/BindingModels/ItemForStudyBindingModel.cs @@ -11,6 +11,8 @@ namespace SchoolContracts.BindingModels { public int Id { get; set; } + public int Count { get; set; } + public int ItemId { get; } public int StudyId { get; } diff --git a/School/SchoolContracts/Models/IItemForStudyModel.cs b/School/SchoolContracts/Models/IItemForStudyModel.cs index cd63819..fec63a6 100644 --- a/School/SchoolContracts/Models/IItemForStudyModel.cs +++ b/School/SchoolContracts/Models/IItemForStudyModel.cs @@ -10,6 +10,8 @@ namespace SchoolContracts.Models // Затрата на обучение public interface IItemForStudyModel : IId { + // Количество + int Count { get; } // Id затрат int ItemId { get; } diff --git a/School/SchoolContracts/Models/IItemModels.cs b/School/SchoolContracts/Models/IItemModels.cs index 2281491..e699f2c 100644 --- a/School/SchoolContracts/Models/IItemModels.cs +++ b/School/SchoolContracts/Models/IItemModels.cs @@ -16,6 +16,9 @@ namespace SchoolContracts.Models // Цена decimal Price { get; } + // Количество + int Count { get; } + // Id сотрудника int WorkerId { get; } } diff --git a/School/SchoolContracts/StorageContracts/IPaymentStorage.cs b/School/SchoolContracts/StorageContracts/IPaymentStorage.cs index 6ce9b36..04a2b19 100644 --- a/School/SchoolContracts/StorageContracts/IPaymentStorage.cs +++ b/School/SchoolContracts/StorageContracts/IPaymentStorage.cs @@ -14,7 +14,6 @@ namespace SchoolContracts.StorageContracts List GetFullList(); List GetFilteredList(PaymentSearchModel model); PaymentViewModel? GetElement(PaymentSearchModel model); - List GetPaymentsByCourses(PaymentSearchModel model); PaymentViewModel? Insert(PaymentBindingModel model); PaymentViewModel? Update(PaymentBindingModel model); PaymentViewModel? Delete(PaymentBindingModel model); diff --git a/School/SchoolContracts/ViewModels/ItemForStudyViewModel.cs b/School/SchoolContracts/ViewModels/ItemForStudyViewModel.cs index 1a2bc11..b70b4c2 100644 --- a/School/SchoolContracts/ViewModels/ItemForStudyViewModel.cs +++ b/School/SchoolContracts/ViewModels/ItemForStudyViewModel.cs @@ -11,6 +11,8 @@ namespace SchoolContracts.ViewModels public class ItemForStudyViewModel: IItemForStudyModel { public int Id { get; set; } + [DisplayName("Количество")] + public int Count { get; set; } public int ItemId { get; set; } [DisplayName("Номер обучения")] public int StudyId { get; set; } diff --git a/School/SchoolContracts/ViewModels/ItemViewModel.cs b/School/SchoolContracts/ViewModels/ItemViewModel.cs index 8788b3a..5bd2318 100644 --- a/School/SchoolContracts/ViewModels/ItemViewModel.cs +++ b/School/SchoolContracts/ViewModels/ItemViewModel.cs @@ -15,8 +15,10 @@ namespace SchoolContracts.ViewModels public string Name { get; set; } = string.Empty; [DisplayName("Цена")] public decimal Price { get; set; } + [DisplayName("Количество")] + public int Count { get; set; } public int WorkerId { get; set; } [DisplayName("Сотрудник")] - public string WorkerName { get; set; } = string.Empty; + public string WorkerFIO { get; set; } = string.Empty; } } diff --git a/School/SchoolDatabase/Implements/CoursesForStudyStorage.cs b/School/SchoolDatabase/Implements/CoursesForStudyStorage.cs new file mode 100644 index 0000000..8129c0b --- /dev/null +++ b/School/SchoolDatabase/Implements/CoursesForStudyStorage.cs @@ -0,0 +1,85 @@ +using SchoolContracts.BindingModels; +using SchoolContracts.SearchModels; +using SchoolContracts.StorageContracts; +using SchoolContracts.ViewModels; +using SchoolDatabase.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolDatabase.Implements +{ + public class CoursesForStudyStorage: ICoursesForStudyStorage + { + public List GetFullList() + { + using var context = new SchoolDbContext(); + return context.CoursesForStudys + .Select(x => x.GetViewModel) + .ToList(); + } + public List GetFilteredList(CoursesForStudySearchModel model) + { + using var context = new SchoolDbContext(); + return context.CoursesForStudys + .Where(x => x.Id == model.Id) + .Select(x => x.GetViewModel) + .ToList(); + } + public CoursesForStudyViewModel? GetElement(CoursesForStudySearchModel model) + { + if (model == null) + { + return null; + } + using var context = new SchoolDbContext(); + if (model.Id.HasValue)//ищем по Id + { + return context.CoursesForStudys.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + } + //другие варианты поиска не реализуются (заглушка для роли клиента) + return null; + } + public CoursesForStudyViewModel? Insert(CoursesForStudyBindingModel model) + { + using var context = new SchoolDbContext(); + var newCoursesForStudys = CoursesForStudy.Create(model); + if (newCoursesForStudys != null) + { + context.CoursesForStudys.Add(newCoursesForStudys); + context.SaveChanges(); + return newCoursesForStudys.GetViewModel; + } + return null; + } + public CoursesForStudyViewModel? Update(CoursesForStudyBindingModel model) + { + using var context = new SchoolDbContext(); + var coursesForStudys = context.CoursesForStudys + .FirstOrDefault(x => x.Id == model.Id); + if (coursesForStudys == null) + { + return null; + } + coursesForStudys.Update(model); + context.SaveChanges(); + return coursesForStudys.GetViewModel; + } + public CoursesForStudyViewModel? Delete(CoursesForStudyBindingModel model) + { + using var context = new SchoolDbContext(); + var coursesForStudys = context.CoursesForStudys + .FirstOrDefault(x => x.Id == model.Id); + if (coursesForStudys == null) + { + return null; + } + context.CoursesForStudys.Remove(coursesForStudys); + context.SaveChanges(); + return coursesForStudys.GetViewModel; + } + } +} diff --git a/School/SchoolDatabase/Implements/CoursesStorage.cs b/School/SchoolDatabase/Implements/CoursesStorage.cs new file mode 100644 index 0000000..5474f06 --- /dev/null +++ b/School/SchoolDatabase/Implements/CoursesStorage.cs @@ -0,0 +1,92 @@ +using SchoolContracts.BindingModels; +using SchoolContracts.SearchModels; +using SchoolContracts.StorageContracts; +using SchoolContracts.ViewModels; +using SchoolDatabase.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolDatabase.Implements +{ + public class CoursesStorage : ICoursesStorage + { + public List GetFullList() + { + using var context = new SchoolDbContext(); + return context.Coursess + .Include(x => x.Worker) + .Select(x => x.GetViewModel) + .ToList(); + } + public List GetFilteredList(CoursesSearchModel model) + { + using var context = new SchoolDbContext(); + return context.Coursess + .Where(x => x.Id == model.Id) + .Include(x => x.Worker) + .Select(x => x.GetViewModel) + .ToList(); + } + public CoursesViewModel? GetElement(CoursesSearchModel model) + { + if (model == null) + { + return null; + } + using var context = new SchoolDbContext(); + if (model.Id.HasValue)//сначала ищем по Id + { + return context.Coursess + .Include(x => x.Worker) + .FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + } + if (!string.IsNullOrEmpty(model.Name))//затем по названию + { + return context.Coursess + .Include(x => x.Worker) + .FirstOrDefault(x => x.Name == model.Name)?.GetViewModel; + } + return null; + } + public CoursesViewModel? Insert(CoursesBindingModel model) + { + using var context = new SchoolDbContext(); + var newCourses = Courses.Create(context, model); + if (newCourses != null) + { + context.Coursess.Add(newCourses); + context.SaveChanges(); + return newCourses.GetViewModel; + } + return null; + } + public CoursesViewModel? Update(CoursesBindingModel model) + { + using var context = new SchoolDbContext(); + var courses = context.Coursess.FirstOrDefault(x => x.Id == model.Id); + if (courses == null) + { + return null; + } + courses.Update(context, model); + context.SaveChanges(); + return courses.GetViewModel; + } + public CoursesViewModel? Delete(CoursesBindingModel model) + { + using var context = new SchoolDbContext(); + var work = context.Coursess.FirstOrDefault(x => x.Id == model.Id); + if (work == null) + { + return null; + } + context.Coursess.Remove(work); + context.SaveChanges(); + return work.GetViewModel; + } + } +} diff --git a/School/SchoolDatabase/Implements/CustumerStorage.cs b/School/SchoolDatabase/Implements/CustumerStorage.cs new file mode 100644 index 0000000..5c2b777 --- /dev/null +++ b/School/SchoolDatabase/Implements/CustumerStorage.cs @@ -0,0 +1,84 @@ +using SchoolContracts.BindingModels; +using SchoolContracts.SearchModels; +using SchoolContracts.StorageContracts; +using SchoolContracts.ViewModels; +using SchoolDatabase.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolDatabase.Implements +{ + public class CustumerStorage: ICustumerStorage + { + public List GetFullList() + { + using var context = new SchoolDbContext(); + return context.Custumers + .Select(x => x.GetViewModel) + .ToList(); + } + public List GetFilteredList(CustumerSearchModel model) + { + using var context = new SchoolDbContext(); + return context.Custumers + .Where(x => x.Id == model.Id) + .Select(x => x.GetViewModel) + .ToList(); + } + public CustumerViewModel? GetElement(CustumerSearchModel model) + { + if (model == null) + { + return null; + } + using var context = new SchoolDbContext(); + if (model.Id.HasValue)//ищем по Id + { + return context.Custumers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + } + //другие варианты поиска не реализуются (заглушка для роли клиента) + return null; + } + public CustumerViewModel? Insert(CustomerBindingModel model) + { + using var context = new SchoolDbContext(); + var newCustomer = Custumer.Create(model); + if (newCustomer != null) + { + context.Custumers.Add(newCustomer); + context.SaveChanges(); + return newCustomer.GetViewModel; + } + return null; + } + public CustumerViewModel? Update(CustomerBindingModel model) + { + using var context = new SchoolDbContext(); + var customer = context.Custumers + .FirstOrDefault(x => x.Id == model.Id); + if (customer == null) + { + return null; + } + customer.Update(model); + context.SaveChanges(); + return customer.GetViewModel; + } + public CustumerViewModel? Delete(CustomerBindingModel model) + { + using var context = new SchoolDbContext(); + var customer = context.Custumers + .FirstOrDefault(x => x.Id == model.Id); + if (customer == null) + { + return null; + } + context.Custumers.Remove(customer); + context.SaveChanges(); + return customer.GetViewModel; + } + } +} diff --git a/School/SchoolDatabase/Implements/ItemForStudyStorage.cs b/School/SchoolDatabase/Implements/ItemForStudyStorage.cs new file mode 100644 index 0000000..7c93d47 --- /dev/null +++ b/School/SchoolDatabase/Implements/ItemForStudyStorage.cs @@ -0,0 +1,86 @@ +using SchoolContracts.BindingModels; +using SchoolContracts.SearchModels; +using SchoolContracts.StorageContracts; +using SchoolContracts.ViewModels; +using SchoolDatabase.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolDatabase.Implements +{ + public class ItemForStudyStorage: IItemForStudyStorage + { + public List GetFullList() + { + using var context = new SchoolDbContext(); + return context.ItemForStudys + .Include(x => x.Item) + .Select(x => x.GetViewModel) + .ToList(); + } + public List GetFilteredList(ItemForStudySearchModel model) + { + using var context = new SchoolDbContext(); + return context.ItemForStudys + .Where(x => x.Id == model.Id) + .Include(x => x.Item) + .Select(x => x.GetViewModel) + .ToList(); + } + public ItemForStudyViewModel? GetElement(ItemForStudySearchModel model) + { + if (model == null) + { + return null; + } + using var context = new SchoolDbContext(); + if (model.Id.HasValue) + { + return context.ItemForStudys + .Include(x => x.Item) + .FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + } + return null; + } + public ItemForStudyViewModel? Insert(ItemForStudyBindingModel model) + { + using var context = new SchoolDbContext(); + var newItemForStudy = ItemForStudy.Create(context, model); + if (newItemForStudy != null) + { + context.ItemForStudys.Add(newItemForStudy); + context.SaveChanges(); + return newItemForStudy.GetViewModel; + } + return null; + } + public ItemForStudyViewModel? Update(ItemForStudyBindingModel model) + { + using var context = new SchoolDbContext(); + var itemForStudy = context.ItemForStudys.FirstOrDefault(x => x.Id == model.Id); + if (itemForStudy == null) + { + return null; + } + itemForStudy.Update(context, model); + context.SaveChanges(); + return itemForStudy.GetViewModel; + } + public ItemForStudyViewModel? Delete(ItemForStudyBindingModel model) + { + using var context = new SchoolDbContext(); + var itemForStudy = context.ItemForStudys.FirstOrDefault(x => x.Id == model.Id); + if (itemForStudy == null) + { + return null; + } + context.ItemForStudys.Remove(itemForStudy); + context.SaveChanges(); + return itemForStudy.GetViewModel; + } + } +} diff --git a/School/SchoolDatabase/Implements/ItemStorage.cs b/School/SchoolDatabase/Implements/ItemStorage.cs new file mode 100644 index 0000000..5b2b719 --- /dev/null +++ b/School/SchoolDatabase/Implements/ItemStorage.cs @@ -0,0 +1,93 @@ +using SchoolContracts.BindingModels; +using SchoolContracts.Models; +using SchoolContracts.SearchModels; +using SchoolContracts.StorageContracts; +using SchoolContracts.ViewModels; +using SchoolDatabase.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolDatabase.Implements +{ + public class ItemStorage : IItemStorage + { + public List GetFullList() + { + using var context = new SchoolDbContext(); + return context.Items + .Include(x => x.Worker) + .Select(x => x.GetViewModel) + .ToList(); + } + public List GetFilteredList(ItemSearchModel model) + { + using var context = new SchoolDbContext(); + return context.Items + .Where(x => x.WorkerId == model.Id) + .Include(x => x.Worker) + .Select(x => x.GetViewModel) + .ToList(); + } + public ItemViewModel? GetElement(ItemSearchModel model) + { + if (model == null) + { + return null; + } + using var context = new SchoolDbContext(); + if (model.Id.HasValue)//сначала ищем по Id + { + return context.Items + .Include(x => x.Worker) + .FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + } + if (!string.IsNullOrEmpty(model.Name))//затем по названию + { + return context.Items + .Include(x => x.Worker) + .FirstOrDefault(x => x.Name == model.Name)?.GetViewModel; + } + return null; + } + public ItemViewModel? Insert(ItemBindingModel model) + { + using var context = new SchoolDbContext(); + var newItem = Item.Create(context, model); + if (newItem != null) + { + context.Items.Add(newItem); + context.SaveChanges(); + return newItem.GetViewModel; + } + return null; + } + public ItemViewModel? Update(ItemBindingModel model) + { + using var context = new SchoolDbContext(); + var item = context.Items.FirstOrDefault(x => x.Id == model.Id); + if (item == null) + { + return null; + } + item.Update(context, model); + context.SaveChanges(); + return item.GetViewModel; + } + public ItemViewModel? Delete(ItemBindingModel model) + { + using var context = new SchoolDbContext(); + var item = context.Items.FirstOrDefault(x => x.Id == model.Id); + if (item == null) + { + return null; + } + context.Items.Remove(item); + context.SaveChanges(); + return item.GetViewModel; + } + } +} diff --git a/School/SchoolDatabase/Implements/PaymentStorage.cs b/School/SchoolDatabase/Implements/PaymentStorage.cs new file mode 100644 index 0000000..168cd0a --- /dev/null +++ b/School/SchoolDatabase/Implements/PaymentStorage.cs @@ -0,0 +1,87 @@ +using SchoolContracts.BindingModels; +using SchoolContracts.SearchModels; +using SchoolContracts.StorageContracts; +using SchoolContracts.ViewModels; +using SchoolDatabase.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolDatabase.Implements +{ + public class PaymentStorage: IPaymentStorage + { + public List GetFullList() + { + using var context = new SchoolDbContext(); + return context.Payments + .Select(x => x.GetViewModel) + .ToList(); + } + + public List GetFilteredList(PaymentSearchModel model) + { + using var context = new SchoolDbContext(); + return context.Payments + .Where(x => x.Id == model.Id) + .Select(x => x.GetViewModel) + .ToList(); + } + + public PaymentViewModel? GetElement(PaymentSearchModel model) + { + if (model == null) + { + return null; + } + using var context = new SchoolDbContext(); + if (model.Id.HasValue) + { + return context.Payments + .FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + } + return null; + } + + public PaymentViewModel? Insert(PaymentBindingModel model) + { + using var context = new SchoolDbContext(); + var newPayment = Payment.Create(context, model); + if (newPayment != null) + { + context.Payments.Add(newPayment); + context.SaveChanges(); + return newPayment.GetViewModel; + } + return null; + } + public PaymentViewModel? Update(PaymentBindingModel model) + { + using var context = new SchoolDbContext(); + var Payment = context.Payments.FirstOrDefault(x => x.Id == model.Id); + if (Payment == null) + { + return null; + } + Payment.Update(context, model); + context.SaveChanges(); + return Payment.GetViewModel; + } + + public PaymentViewModel? Delete(PaymentBindingModel model) + { + using var context = new SchoolDbContext(); + var Payment = context.Payments.FirstOrDefault(x => x.Id == model.Id); + if (Payment == null) + { + return null; + } + context.Payments.Remove(Payment); + context.SaveChanges(); + return Payment.GetViewModel; + } + } +} diff --git a/School/SchoolDatabase/Implements/StudyStorage.cs b/School/SchoolDatabase/Implements/StudyStorage.cs new file mode 100644 index 0000000..1492562 --- /dev/null +++ b/School/SchoolDatabase/Implements/StudyStorage.cs @@ -0,0 +1,83 @@ +using SchoolContracts.BindingModels; +using SchoolContracts.SearchModels; +using SchoolContracts.StorageContracts; +using SchoolContracts.ViewModels; +using SchoolDatabase.Models; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolDatabase.Implements +{ + public class StudyStorage: IStudyStorage + { + public List GetFullList() + { + using var context = new SchoolDbContext(); + return context.Studys + .Select(x => x.GetViewModel) + .ToList(); + } + public List GetFilteredList(StudySearchModel model) + { + using var context = new SchoolDbContext(); + return context.Studys + .Where(x => x.Id == model.Id) + .Select(x => x.GetViewModel) + .ToList(); + } + public StudyViewModel? GetElement(StudySearchModel model) + { + if (model == null) + { + return null; + } + using var context = new SchoolDbContext(); + if (model.Id.HasValue) + { + return context.Studys + .FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + } + return null; + } + public StudyViewModel? Insert(StudyBindingModel model) + { + using var context = new SchoolDbContext(); + var newStudy = Study.Create(context, model); + if (newStudy != null) + { + context.Studys.Add(newStudy); + context.SaveChanges(); + return newStudy.GetViewModel; + } + return null; + } + public StudyViewModel? Update(StudyBindingModel model) + { + using var context = new SchoolDbContext(); + var study = context.Studys.FirstOrDefault(x => x.Id == model.Id); + if (study == null) + { + return null; + } + study.Update(context, model); + context.SaveChanges(); + return study.GetViewModel; + } + public StudyViewModel? Delete(StudyBindingModel model) + { + using var context = new SchoolDbContext(); + var study = context.Studys.FirstOrDefault(x => x.Id == model.Id); + if (study == null) + { + return null; + } + context.Studys.Remove(study); + context.SaveChanges(); + return study.GetViewModel; + } + } +} diff --git a/School/SchoolDatabase/Implements/WorkerStorage.cs b/School/SchoolDatabase/Implements/WorkerStorage.cs new file mode 100644 index 0000000..131e677 --- /dev/null +++ b/School/SchoolDatabase/Implements/WorkerStorage.cs @@ -0,0 +1,93 @@ +using SchoolContracts.BindingModels; +using SchoolContracts.SearchModels; +using SchoolContracts.StorageContracts; +using SchoolContracts.ViewModels; +using SchoolDatabase.Models; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SchoolDatabase.Implements +{ + public class WorkerStorage : IWorkerStorage + { + public List GetFullList() + { + using var context = new SchoolDbContext(); + return context.Workers + .Select(x => x.GetViewModel) + .ToList(); + } + public List GetFilteredList(WorkerSearchModel model) + { + using var context = new SchoolDbContext(); + return context.Workers + .Where(x => x.Id == model.Id) + .Select(x => x.GetViewModel) + .ToList(); + } + public WorkerViewModel? GetElement(WorkerSearchModel model) + { + if (model == null) + { + return null; + } + using var context = new SchoolDbContext(); + if (model.Id.HasValue)//Сначала ищем по Id + { + return context.Workers.FirstOrDefault(x => x.Id == model.Id)?.GetViewModel; + } + else if (!string.IsNullOrEmpty(model.Login) && string.IsNullOrEmpty(model.Password))//Затем по логину (для проверки уникальности) + { + return context.Workers + .FirstOrDefault(x => x.Login == model.Login)?.GetViewModel; + } + else if (!string.IsNullOrEmpty(model.Login) && !string.IsNullOrEmpty(model.Password))//Затем по логину и паролю (для входа) + { + return context.Workers + .FirstOrDefault(x => x.Login == model.Login && x.Password == model.Password)?.GetViewModel; + } + return null; + } + public WorkerViewModel? Insert(WorkerBindingModel model) + { + using var context = new SchoolDbContext(); + var newWorker = Worker.Create(model); + if (newWorker != null) + { + context.Workers.Add(newWorker); + context.SaveChanges(); + return newWorker.GetViewModel; + } + return null; + } + public WorkerViewModel? Update(WorkerBindingModel model) + { + using var context = new SchoolDbContext(); + var worker = context.Workers + .FirstOrDefault(x => x.Id == model.Id); + if (worker == null) + { + return null; + } + worker.Update(model); + context.SaveChanges(); + return worker.GetViewModel; + } + public WorkerViewModel? Delete(WorkerBindingModel model) + { + using var context = new SchoolDbContext(); + var worker = context.Workers + .FirstOrDefault(x => x.Id == model.Id); + if (worker == null) + { + return null; + } + context.Workers.Remove(worker); + context.SaveChanges(); + return worker.GetViewModel; + } + } +} diff --git a/School/SchoolDatabase/Models/Item.cs b/School/SchoolDatabase/Models/Item.cs index f1bcddb..0803a84 100644 --- a/School/SchoolDatabase/Models/Item.cs +++ b/School/SchoolDatabase/Models/Item.cs @@ -8,6 +8,7 @@ using SchoolContracts.Models; using SchoolContracts.ViewModels; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using Microsoft.EntityFrameworkCore; namespace SchoolDatabase.Models { @@ -19,6 +20,8 @@ namespace SchoolDatabase.Models [Required, Column(TypeName = "decimal (10,2)")] public decimal Price { get; private set; } [Required] + public int Count { get; private set; } + [Required] public int WorkerId { get; private set; } // Затраты на обучение @@ -35,6 +38,7 @@ namespace SchoolDatabase.Models { Name = model.Name, Price = model.Price, + Count = model.Count, Worker = context.Workers.First(x => x.Id == model.WorkerId) }; } @@ -46,16 +50,26 @@ namespace SchoolDatabase.Models } Name = model.Name; Price = model.Price; + Count = model.Count; Worker = context.Workers.First(x => x.Id == model.WorkerId); } + public void UpdateCount(IItemModel? model, int count) + { + if (model == null) + { + return; + } + Count -= model.Count; + } public ItemViewModel GetViewModel => new() { Id = Id, Name = Name, Price = Price, - WorkerId = WorkerId - //,WorkerFIO = Worker.FIO + Count = Count, + WorkerId = WorkerId, + WorkerFIO = Worker.FIO }; } } diff --git a/School/SchoolDatabase/SchoolDbContext.cs b/School/SchoolDatabase/SchoolDbContext.cs index 4d143da..34a93aa 100644 --- a/School/SchoolDatabase/SchoolDbContext.cs +++ b/School/SchoolDatabase/SchoolDbContext.cs @@ -30,7 +30,7 @@ namespace SchoolDatabase public virtual DbSet ItemForStudys { get; set; } public virtual DbSet Studys { get; set; } public virtual DbSet Coursess { get; set; } - public virtual DbSet CoursessForStudys { get; set; } + public virtual DbSet CoursesForStudys { get; set; } public virtual DbSet Workers { get; set; } public virtual DbSet Payments { get; set; } } diff --git a/School/SchoolWebApp/Models/CurrentUser.cs b/School/SchoolWebApp/Models/CurrentUser.cs new file mode 100644 index 0000000..84b156c --- /dev/null +++ b/School/SchoolWebApp/Models/CurrentUser.cs @@ -0,0 +1,7 @@ +namespace SchoolWebApp.Models +{ + public static class CurrentUser + { + public static int UserId = 0; + } +} diff --git a/School/SchoolWebApp/Program.cs b/School/SchoolWebApp/Program.cs index 559dd3a..bb64f41 100644 --- a/School/SchoolWebApp/Program.cs +++ b/School/SchoolWebApp/Program.cs @@ -1,5 +1,19 @@ +using SchoolBusinessLogic.BusinessLogic; +using SchoolContracts.BusinessLogicsContracts; +using SchoolContracts.StorageContracts; +using SchoolDatabase.Implements; + var builder = WebApplication.CreateBuilder(args); +// Add services to the container. +builder.Logging.SetMinimumLevel(LogLevel.Trace); +builder.Logging.AddLog4Net("log4net.config"); +builder.Services.AddControllersWithViews(); +builder.Services.AddTransient(); +builder.Services.AddTransient(); +builder.Services.AddTransient(); +builder.Services.AddTransient(); + // Add services to the container. builder.Services.AddControllersWithViews(); diff --git a/School/SchoolWebApp/SchoolWebApp.csproj b/School/SchoolWebApp/SchoolWebApp.csproj index 1b28a01..45058ab 100644 --- a/School/SchoolWebApp/SchoolWebApp.csproj +++ b/School/SchoolWebApp/SchoolWebApp.csproj @@ -6,4 +6,15 @@ enable + + + + + + + + + + + diff --git a/School/SchoolWebApp/Views/Home/Course.cshtml b/School/SchoolWebApp/Views/Home/Course.cshtml new file mode 100644 index 0000000..d405bba --- /dev/null +++ b/School/SchoolWebApp/Views/Home/Course.cshtml @@ -0,0 +1,28 @@ +@{ + ViewData["Title"] = "Редактирование курса"; +} +
+ + +
+
Название:
+
+
+
+
Цена:
+
+
+
+
Продолжительность:
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/School/SchoolWebApp/Views/Home/Coursess.cshtml b/School/SchoolWebApp/Views/Home/Coursess.cshtml new file mode 100644 index 0000000..ded74be --- /dev/null +++ b/School/SchoolWebApp/Views/Home/Coursess.cshtml @@ -0,0 +1,34 @@ +@{ + ViewData["Title"] = "Курсы"; +} + +
+

Курсы

+ @if (ViewBag.Works.Count != 0) + { +
+ + + + + + + + + + @foreach (var courses in ViewBag.Coursess) + { + + + + + + + } + +
НазваниеЦена (в рублях)Продолжительность (в часах)
@courses.Name@courses.Price@courses.DurationИзменить
+
+ } + +
@ViewBag.Exception
+
diff --git a/School/SchoolWebApp/Views/Home/CreateCourses.cshtml b/School/SchoolWebApp/Views/Home/CreateCourses.cshtml new file mode 100644 index 0000000..17931bd --- /dev/null +++ b/School/SchoolWebApp/Views/Home/CreateCourses.cshtml @@ -0,0 +1,23 @@ +@{ + ViewData["Title"] = "Создание курсов"; +} +
+ + +
+
Название:
+
+
+
+
Цена:
+
+
+
+
Длительность:
+
+
+
+
+
+
+
@ViewBag.Exception
\ No newline at end of file diff --git a/School/SchoolWebApp/Views/Home/CreateItem.cshtml b/School/SchoolWebApp/Views/Home/CreateItem.cshtml new file mode 100644 index 0000000..80ae190 --- /dev/null +++ b/School/SchoolWebApp/Views/Home/CreateItem.cshtml @@ -0,0 +1,19 @@ +@{ + ViewData["Title"] = "Создание занятия"; +} +
+ + +
+
Название:
+
+
+
+
Цена:
+
+
+
+
+
+
+
@ViewBag.Exception
\ No newline at end of file diff --git a/School/SchoolWebApp/Views/Home/Enter.cshtml b/School/SchoolWebApp/Views/Home/Enter.cshtml new file mode 100644 index 0000000..106d3d5 --- /dev/null +++ b/School/SchoolWebApp/Views/Home/Enter.cshtml @@ -0,0 +1,21 @@ +@{ + ViewData["Title"] = "Enter"; +} + +
+

Вход в приложение

+
+
+
+
Логин:
+
+
+
+
Пароль:
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/School/SchoolWebApp/Views/Home/Index.cshtml b/School/SchoolWebApp/Views/Home/Index.cshtml index bcfd79a..d8d2871 100644 --- a/School/SchoolWebApp/Views/Home/Index.cshtml +++ b/School/SchoolWebApp/Views/Home/Index.cshtml @@ -1,8 +1,11 @@ @{ - ViewData["Title"] = "Home Page"; + ViewData["Title"] = "Главная"; }
-

Welcome

-

Learn about building Web apps with ASP.NET Core.

+

Главная страница

+ + +
+
\ No newline at end of file diff --git a/School/SchoolWebApp/Views/Home/Item.cshtml b/School/SchoolWebApp/Views/Home/Item.cshtml new file mode 100644 index 0000000..158776a --- /dev/null +++ b/School/SchoolWebApp/Views/Home/Item.cshtml @@ -0,0 +1,24 @@ +@{ + ViewData["Title"] = "Редактирование занятия"; +} +
+ + +
+
Название:
+
+
+
+
Цена:
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/School/SchoolWebApp/Views/Home/Items.cshtml b/School/SchoolWebApp/Views/Home/Items.cshtml new file mode 100644 index 0000000..9fce9eb --- /dev/null +++ b/School/SchoolWebApp/Views/Home/Items.cshtml @@ -0,0 +1,32 @@ +@{ + ViewData["Title"] = "Занятия"; +} + +
+

Занятия

+ @if (ViewBag.Items.Count != 0) + { +
+ + + + + + + + + @foreach (var item in ViewBag.Items) + { + + + + + + } + +
НазваниеЦена (в рублях)
@item.Name@item.PriceИзменить
+
+ } + +
@ViewBag.Exception
+
diff --git a/School/SchoolWebApp/Views/Home/Register.cshtml b/School/SchoolWebApp/Views/Home/Register.cshtml new file mode 100644 index 0000000..2cc7d30 --- /dev/null +++ b/School/SchoolWebApp/Views/Home/Register.cshtml @@ -0,0 +1,36 @@ +@{ + ViewData["Title"] = "Регистрация"; +} + +
+

Регистрация

+
+
+
+
Логин:
+
+
+
+
Почта:
+
+
+
+
ФИО:
+
+
+
+
Должность:
+
+
+
+
Пароль:
+
+
+
+
+
+
+
+
+
@ViewBag.Exception
+
diff --git a/School/SchoolWebApp/Views/Shared/_Layout.cshtml b/School/SchoolWebApp/Views/Shared/_Layout.cshtml index d623e93..7cca99e 100644 --- a/School/SchoolWebApp/Views/Shared/_Layout.cshtml +++ b/School/SchoolWebApp/Views/Shared/_Layout.cshtml @@ -3,47 +3,87 @@ - @ViewData["Title"] - SchoolWebApp + @ViewData["Title"] - + -
- -
-
-
- @RenderBody() -
-
+ +
+
+ +
- © 2024 - SchoolWebApp - Privacy +
+ @RenderBody() +
- + +
@await RenderSectionAsync("Scripts", required: false) - + \ No newline at end of file diff --git a/School/SchoolWebApp/log4net.config b/School/SchoolWebApp/log4net.config new file mode 100644 index 0000000..cd5281e --- /dev/null +++ b/School/SchoolWebApp/log4net.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file