diff --git a/LibraryDBproject/LDBproj/AdditionalForms/CustomerListF.cs b/LibraryDBproject/LDBproj/AdditionalForms/CustomerListF.cs index 2315f47..956b7cb 100644 --- a/LibraryDBproject/LDBproj/AdditionalForms/CustomerListF.cs +++ b/LibraryDBproject/LDBproj/AdditionalForms/CustomerListF.cs @@ -63,8 +63,11 @@ public partial class CustomerListF : Form } } - private void ReloadList() => + private void ReloadList() + { DataGV.DataSource = _custR.GetCards(); + DataGV.Columns["FIO"].Visible = false; + } private bool GetIDFromRow(out int id) { diff --git a/LibraryDBproject/LDBproj/AdditionalForms/EmployeesF.cs b/LibraryDBproject/LDBproj/AdditionalForms/EmployeesF.cs index 19a1e97..f470eb3 100644 --- a/LibraryDBproject/LDBproj/AdditionalForms/EmployeesF.cs +++ b/LibraryDBproject/LDBproj/AdditionalForms/EmployeesF.cs @@ -83,7 +83,11 @@ public partial class EmployeesF : Form } } - private void ReloadList() => DataGV.DataSource = _libR.GetCards(); + private void ReloadList() + { + DataGV.DataSource = _libR.GetCards(); + // DataGV.Columns["CardID"].Visible = false; + } private bool GetiDFromRow(out int id) { diff --git a/LibraryDBproject/LDBproj/AdditionalForms/OrdersF.cs b/LibraryDBproject/LDBproj/AdditionalForms/OrdersF.cs index df97440..9a8fd7d 100644 --- a/LibraryDBproject/LDBproj/AdditionalForms/OrdersF.cs +++ b/LibraryDBproject/LDBproj/AdditionalForms/OrdersF.cs @@ -63,8 +63,12 @@ public partial class OrdersF : Form } } - private void ReloadList() => + private void ReloadList() + { DataGV.DataSource = _regR.GetOrdersInfo(); + DataGV.Columns["OrderID"].Visible = false; + DataGV.Columns["BorrowDate"].DefaultCellStyle.Format = "dd MMMM yyyy hh:mm"; + } private bool GetIDFromRow(out int id) { diff --git a/LibraryDBproject/LDBproj/AdditionalForms/RegOrderF.cs b/LibraryDBproject/LDBproj/AdditionalForms/RegOrderF.cs index a0bc9b5..44dde5f 100644 --- a/LibraryDBproject/LDBproj/AdditionalForms/RegOrderF.cs +++ b/LibraryDBproject/LDBproj/AdditionalForms/RegOrderF.cs @@ -1,6 +1,5 @@ using LDBproject.Entities; using LDBproject.Repositories; -using LDBproject.Repositories.Implementations; namespace LDBproject.AdditionalForms; @@ -23,7 +22,7 @@ public partial class RegOrderF : Form CardCBox.ValueMember = "CardID"; BookColumnCBox.DataSource = bookRep.GetBookList(); - BookColumnCBox.DisplayMember = "Title"; + BookColumnCBox.DisplayMember = "MainBookInfo"; // MainBookInfo \ BookInfo BookColumnCBox.ValueMember = "BookID"; } diff --git a/LibraryDBproject/LDBproj/AdditionalForms/UpdateF.cs b/LibraryDBproject/LDBproj/AdditionalForms/UpdateF.cs index 71fe140..5c269cb 100644 --- a/LibraryDBproject/LDBproj/AdditionalForms/UpdateF.cs +++ b/LibraryDBproject/LDBproj/AdditionalForms/UpdateF.cs @@ -16,8 +16,7 @@ public partial class UpdateF : Form LibrarianCBox.DisplayMember = "FIO"; LibrarianCBox.ValueMember = "CardID"; CardCBox.DataSource = customersRep.GetCards(); - CardCBox.DisplayMember = "FIO"; - CardCBox.DisplayMember = "CardID"; + CardCBox.DisplayMember = "FullReaderInfo"; // FullReaderInfo \ ReaderName CardCBox.ValueMember = "CardID"; } diff --git a/LibraryDBproject/LDBproj/AdditionalForms/UpdatesListF.cs b/LibraryDBproject/LDBproj/AdditionalForms/UpdatesListF.cs index 6659cde..c217cca 100644 --- a/LibraryDBproject/LDBproj/AdditionalForms/UpdatesListF.cs +++ b/LibraryDBproject/LDBproj/AdditionalForms/UpdatesListF.cs @@ -63,8 +63,13 @@ public partial class UpdatesListF : Form } } - private void ReloadList() => + private void ReloadList() + { DataGV.DataSource = _updR.GetUpdateList(); + DataGV.Columns["ID"].Visible = false; + DataGV.Columns["LastUpdate"].DefaultCellStyle.Format = "dd.MM.yyyy"; + DataGV.Columns["UpdBoundary"].DefaultCellStyle.Format = "dd.MM.yyyy"; + } private bool GetIDFromRow(out int id) { diff --git a/LibraryDBproject/LDBproj/Entities/Book.cs b/LibraryDBproject/LDBproj/Entities/Book.cs index 75f5354..b0475f2 100644 --- a/LibraryDBproject/LDBproj/Entities/Book.cs +++ b/LibraryDBproject/LDBproj/Entities/Book.cs @@ -1,14 +1,24 @@ -using LDBproject.Entities.Enums; +using System.ComponentModel; +using LDBproject.Entities.Enums; namespace LDBproject.Entities; public class Book { public int BookID { get; private set; } + + [DisplayName("< title >")] public string Title { get; private set; } + [DisplayName("< author >")] public string Author { get; private set; } + [DisplayName("< year of print >")] + + public string MainBookInfo => $"<<{Title}>>; {Author}"; + public int PublishYear { get; private set; } + [DisplayName("< current position >")] public BookStat Status { get; private set; } + [DisplayName("< genres >")] public Genres GenreMask { get; private set; } = Genres.None; public static Book AddBook( diff --git a/LibraryDBproject/LDBproj/Entities/CustomerCard.cs b/LibraryDBproject/LDBproj/Entities/CustomerCard.cs index c58bae5..ebe924b 100644 --- a/LibraryDBproject/LDBproj/Entities/CustomerCard.cs +++ b/LibraryDBproject/LDBproj/Entities/CustomerCard.cs @@ -1,11 +1,18 @@ -namespace LDBproject.Entities; +using System.ComponentModel; + +namespace LDBproject.Entities; public class CustomerCard { + [DisplayName("Reader's index")] public int CardID { get; private set; } + [DisplayName("Reader's full name")] public string FIO { get; private set; } + public string FullReaderInfo => $"{CardID} : {FIO}"; + + [DisplayName("Birthday date")] public DateTime AgeBirthday { get; private set; } public static CustomerCard AddCustomer( diff --git a/LibraryDBproject/LDBproj/Entities/LibrarianCard.cs b/LibraryDBproject/LDBproj/Entities/LibrarianCard.cs index 09d2dfb..1136628 100644 --- a/LibraryDBproject/LDBproj/Entities/LibrarianCard.cs +++ b/LibraryDBproject/LDBproj/Entities/LibrarianCard.cs @@ -1,4 +1,5 @@ -using LDBproject.Entities.Enums; +using System.ComponentModel; +using LDBproject.Entities.Enums; namespace LDBproject.Entities; @@ -6,8 +7,10 @@ public class LibrarianCard { public int CardID { get; private set; } + [DisplayName("Employee full name")] public string FIO { get; private set; } + [DisplayName("Connected genres")] public Genres GenreMask { get; private set; } public static LibrarianCard AddWorker( diff --git a/LibraryDBproject/LDBproj/Entities/Order.cs b/LibraryDBproject/LDBproj/Entities/Order.cs index 41602c7..0f70304 100644 --- a/LibraryDBproject/LDBproj/Entities/Order.cs +++ b/LibraryDBproject/LDBproj/Entities/Order.cs @@ -1,15 +1,27 @@ -namespace LDBproject.Entities; +using System.ComponentModel; + +namespace LDBproject.Entities; public class Order { public int OrderID { get; private set; } - + [Browsable(false)] public int CardID { get; private set; } - + [Browsable(false)] public int LibrarianID { get; private set; } + [DisplayName("Reader")] + public string ReaderName { get; private set; } = string.Empty; + [DisplayName("Librarian")] + public string EmployeeName { get; private set; } = string.Empty; + [DisplayName("Book")] + public string BookInfo { get; private set; } = string.Empty; + + [DisplayName("Date of borrow")] public DateTime BorrowDate { get; private set; } - + [DisplayName("List of borrowed books")] + public string BookList => Registrations != null ? string.Join(", ", Registrations.Select(x => $"{x.BookID} {x.Note}")) : string.Empty; + [Browsable(false)] public IEnumerable Registrations { get; set; } = []; public static Order NewOrder( @@ -33,7 +45,15 @@ public class Order CardID = order.CardID, LibrarianID = order.LibrarianID, Registrations = regs, - BorrowDate= order.BorrowDate + BorrowDate = order.BorrowDate }; } + + public void SetRegs(IEnumerable regs) + { + if (regs != null && regs.Any()) + { + Registrations = regs; + } + } } diff --git a/LibraryDBproject/LDBproj/Entities/Registration.cs b/LibraryDBproject/LDBproj/Entities/Registration.cs index 6890f15..fab7c59 100644 --- a/LibraryDBproject/LDBproj/Entities/Registration.cs +++ b/LibraryDBproject/LDBproj/Entities/Registration.cs @@ -3,11 +3,9 @@ public class Registration { public int ID { get; private set; } - public int OrderID { get; private set; } - public int BookID { get; private set; } - + public string BookInfo { get; private set; } = string.Empty; public string Note { get; private set; } public static Registration OrderReg( diff --git a/LibraryDBproject/LDBproj/Entities/TemprOrderReg.cs b/LibraryDBproject/LDBproj/Entities/TemprOrderReg.cs deleted file mode 100644 index e46fdb4..0000000 --- a/LibraryDBproject/LDBproj/Entities/TemprOrderReg.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace LDBproject.Entities; - -public class TemprOrderReg -{ - // from Order class - public int OrderID { get; private set; } - - public int CardID { get; private set; } - - public int LibrarianID { get; private set; } - - public DateTime BorrowDate { get; private set; } - - // from Registration class - public int ID { get; private set; } - - public int BookID { get; private set; } - - public string Note { get; private set; } -} diff --git a/LibraryDBproject/LDBproj/Entities/UpdateC.cs b/LibraryDBproject/LDBproj/Entities/UpdateC.cs index de2444d..ac0d037 100644 --- a/LibraryDBproject/LDBproj/Entities/UpdateC.cs +++ b/LibraryDBproject/LDBproj/Entities/UpdateC.cs @@ -1,17 +1,24 @@ -namespace LDBproject.Entities; +using System.ComponentModel; + +namespace LDBproject.Entities; public class UpdateC { public int ID { get; private set; } + [Browsable(false)] public int CardID { get; private set; } - + [Browsable(false)] public int LibrarianID { get; private set; } - + [DisplayName("Reader")] + public string ReaderName { get; private set; } = string.Empty; + [DisplayName("Librarian")] + public string EmployeeName { get; private set; } = string.Empty; + [DisplayName("Date of last upd")] public DateTime LastUpdate { get; private set; } - + [DisplayName("upd active till")] public DateTime UpdBoundary { get; private set; } - + [DisplayName("Notes")] public string Note { get; private set; } public static UpdateC CustomerUpd( diff --git a/LibraryDBproject/LDBproj/Repositories/Implementations/OrderR.cs b/LibraryDBproject/LDBproj/Repositories/Implementations/OrderR.cs index 13f6ea0..816a8c7 100644 --- a/LibraryDBproject/LDBproj/Repositories/Implementations/OrderR.cs +++ b/LibraryDBproject/LDBproj/Repositories/Implementations/OrderR.cs @@ -132,18 +132,44 @@ public class OrderR : IOrderRep public IEnumerable GetOrdersInfo() { - _logger.LogInformation("< Getting ORDERS based on a date >"); + _logger.LogInformation("< Getting ORDERS >"); try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); connection.Open(); - var querySelectAll = @"SELECT orders.*, regs.BookID, regs.Note FROM Orders orders - INNER JOIN Registrations regs ON regs.OrderID = orders.OrderID"; - var orders = connection.Query(querySelectAll); + var querySelectAll = @"SELECT + orders.*, + lc.FIO as 'EmployeeName', + CONCAT(books.Title, ' ', books.Author) as BookInfo, + CONCAT(cc.FIO, ' ', cc.AnimalNickName) as ReaderName, + regs.BookID, regs.Note + FROM Orders orders + LEFT JOIN LibrarianCards lc ON lc.CardID = orders.LibrarianID + LEFT JOIN CustomerCards cc ON cc.CardID = orders.CardID + INNER JOIN Registrations regs ON regs.OrderID = orders.OrderID + LEFT JOIN Books books ON books.BookID = orders.BookID"; + + var regsDict = new Dictionary>(); + var orders = connection.Query(querySelectAll, (order, orders) => + { + if (!regsDict.TryGetValue(order.OrderID, out var reg)) + { + reg = []; + regsDict.Add(order.OrderID, reg); + } + reg.Add(orders); + return order; + }, splitOn: "BookID"); // params: ... - variables parameters from GetOrdersInfo(...) [ ! ] + // unnessessary - [ + ] _logger.LogDebug("Aimed objects: {json}", JsonConvert.SerializeObject(orders)); - return orders.GroupBy(x => x.OrderID, y => y, (key, value) => Order.NewOrder(value.First(), - value.Select(z => Registration.OrderReg(z.OrderID, z.BookID, z.Note)))).ToList(); + + return regsDict.Select(x => + { + var odr = orders.First(y => y.OrderID == x.Key); + odr.SetRegs(x.Value); + return odr; + }); } catch (Exception ex) { diff --git a/LibraryDBproject/LDBproj/Repositories/Implementations/QueryBuilder.cs b/LibraryDBproject/LDBproj/Repositories/Implementations/QueryBuilder.cs new file mode 100644 index 0000000..acc9aee --- /dev/null +++ b/LibraryDBproject/LDBproj/Repositories/Implementations/QueryBuilder.cs @@ -0,0 +1,34 @@ +using System.Text; + +namespace LDBproject.Repositories.Implementations; +internal class QueryBuilder +{ + private readonly StringBuilder _builder; + + public QueryBuilder() + { + _builder = new(); + } + + public QueryBuilder AddCondition(string condition) + { + if (_builder.Length > 0) + { + _builder.Append(" AND "); + } + + _builder.Append(condition); + + return this; + } + + public string Build() + { + if (_builder.Length == 0) + { + return string.Empty; + } + + return $"WHERE {_builder}"; + } +} diff --git a/LibraryDBproject/LDBproj/Repositories/Implementations/UpdateR.cs b/LibraryDBproject/LDBproj/Repositories/Implementations/UpdateR.cs index e13f4ec..14b6b94 100644 --- a/LibraryDBproject/LDBproj/Repositories/Implementations/UpdateR.cs +++ b/LibraryDBproject/LDBproj/Repositories/Implementations/UpdateR.cs @@ -76,7 +76,15 @@ public class UpdateR : IUpdateRep try { using var connection = new NpgsqlConnection(_connectionString.ConnectionString); - var querySelectAll = @"SELECT * FROM Updates"; + + var querySelectAll = @"SELECT + upd.*, + lc.FIO as 'EmployeeName', + CONCAT(cc.CardID, ' ', cc.FIO) as ReaderName + FROM Updates upd + LEFT JOIN LibrarianCards lc ON lc.CardID = orders.LibrarianID + LEFT JOIN CustomerCards cc ON cc.CardID = orders.CardID"; + var upds = connection.Query(querySelectAll); _logger.LogDebug("Aimed objects: {json}", JsonConvert.SerializeObject(upds)); return upds;