init
parent
8feb1afc41
commit
4b66724b9b
|
|
@ -2,8 +2,7 @@
|
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
x:Class="CourseProject1125.App"
|
||||
xmlns:local="using:CourseProject1125"
|
||||
RequestedThemeVariant="Default">
|
||||
<!-- "Default" ThemeVariant follows system theme variant. "Dark" or "Light" are other available options. -->
|
||||
RequestedThemeVariant="Light">
|
||||
|
||||
<Application.DataTemplates>
|
||||
<local:ViewLocator/>
|
||||
|
|
|
|||
|
|
@ -33,10 +33,7 @@ public partial class App : Application
|
|||
// Avoid duplicate validations from both Avalonia and the CommunityToolkit.
|
||||
// More info: https://docs.avaloniaui.net/docs/guides/development-guides/data-validation#manage-validationplugins
|
||||
DisableAvaloniaDataAnnotationValidation();
|
||||
desktop.MainWindow = new MainWindow
|
||||
{
|
||||
DataContext = new MainWindowViewModel(),
|
||||
};
|
||||
desktop.MainWindow = new MainWindow();
|
||||
}
|
||||
|
||||
base.OnFrameworkInitializationCompleted();
|
||||
|
|
|
|||
|
|
@ -3,5 +3,5 @@ namespace CourseProject1125.DB;
|
|||
public class Connection
|
||||
{
|
||||
public static string ConnectionString =
|
||||
@"server=127.0.0.1; userid=root; password=; database=courseproject1125; port=3306; characterset=utf8";
|
||||
@"server=192.168.200.13; userid=student; password=student; database=1125_CourseSolop; port=3306; characterset=utf8; Convert Zero Datetime=True";
|
||||
}
|
||||
|
|
@ -517,8 +517,8 @@ public static class DatabaseService
|
|||
FROM loans l
|
||||
JOIN book_copies c ON l.copy_id = c.id
|
||||
JOIN books b ON c.book_id = b.id
|
||||
JOIN users r ON l.reader_id = r.id
|
||||
JOIN users lib ON l.librarian_id = lib.id
|
||||
LEFT JOIN users r ON l.reader_id = r.id
|
||||
LEFT JOIN users lib ON l.librarian_id = lib.id
|
||||
ORDER BY l.issue_date DESC";
|
||||
using var cmd = new MySqlCommand(sql, conn);
|
||||
using var reader = cmd.ExecuteReader();
|
||||
|
|
@ -542,19 +542,19 @@ public static class DatabaseService
|
|||
|
||||
var readerUser = new User
|
||||
{
|
||||
Id = Convert.ToInt32(reader["reader_id"]),
|
||||
Full_name = reader["reader_name"].ToString() ?? "",
|
||||
Email = reader["reader_email"].ToString() ?? ""
|
||||
Id = reader["reader_id"] != DBNull.Value ? Convert.ToInt32(reader["reader_id"]) : 0,
|
||||
Full_name = reader["reader_name"]?.ToString() ?? "",
|
||||
Email = reader["reader_email"]?.ToString() ?? ""
|
||||
};
|
||||
|
||||
var librarianUser = new User
|
||||
{
|
||||
Id = Convert.ToInt32(reader["librarian_id"]),
|
||||
Full_name = reader["librarian_name"].ToString() ?? ""
|
||||
Id = reader["librarian_id"] != DBNull.Value ? Convert.ToInt32(reader["librarian_id"]) : 0,
|
||||
Full_name = reader["librarian_name"]?.ToString() ?? ""
|
||||
};
|
||||
|
||||
var returnDateVal = reader["return_date"];
|
||||
DateTime retDate = DateTime.MinValue;
|
||||
DateTime? retDate = null;
|
||||
if (returnDateVal != DBNull.Value)
|
||||
{
|
||||
// Check if it's '0000-00-00 00:00:00' or default MySQL empty timestamp
|
||||
|
|
@ -612,6 +612,18 @@ public static class DatabaseService
|
|||
cmdUpdate.Parameters.AddWithValue("@copyId", copyId);
|
||||
cmdUpdate.ExecuteNonQuery();
|
||||
|
||||
// 3. Deactivate reservation for this reader for the issued book if it exists
|
||||
string sqlDeactivateReservation = @"
|
||||
UPDATE reservations
|
||||
SET is_active = 0
|
||||
WHERE reader_id = @readerId
|
||||
AND is_active = 1
|
||||
AND book_id = (SELECT book_id FROM book_copies WHERE id = @copyId LIMIT 1)";
|
||||
using var cmdDeactivateRes = new MySqlCommand(sqlDeactivateReservation, conn, tr);
|
||||
cmdDeactivateRes.Parameters.AddWithValue("@readerId", readerId);
|
||||
cmdDeactivateRes.Parameters.AddWithValue("@copyId", copyId);
|
||||
cmdDeactivateRes.ExecuteNonQuery();
|
||||
|
||||
tr.Commit();
|
||||
return true;
|
||||
}
|
||||
|
|
@ -623,6 +635,24 @@ public static class DatabaseService
|
|||
}
|
||||
}
|
||||
|
||||
public static bool RequestBookReturn(int loanId)
|
||||
{
|
||||
try
|
||||
{
|
||||
using var conn = GetConnection();
|
||||
conn.Open();
|
||||
string sql = "UPDATE loans SET status = 'pending_return' WHERE id = @loanId";
|
||||
using var cmd = new MySqlCommand(sql, conn);
|
||||
cmd.Parameters.AddWithValue("@loanId", loanId);
|
||||
return cmd.ExecuteNonQuery() > 0;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Error in RequestBookReturn: " + ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static decimal ReturnLoan(int loanId, DateTime returnDate)
|
||||
{
|
||||
MySqlTransaction? tr = null;
|
||||
|
|
@ -712,12 +742,13 @@ public static class DatabaseService
|
|||
string sql = @"
|
||||
SELECT f.id, f.loan_id, f.amount, f.is_paid, f.created_at,
|
||||
b.title AS book_title, r.full_name AS reader_name,
|
||||
l.issue_date, l.due_date, l.return_date, l.status AS loan_status
|
||||
l.issue_date, l.due_date, l.return_date, l.status AS loan_status,
|
||||
l.reader_id
|
||||
FROM fines f
|
||||
JOIN loans l ON f.loan_id = l.id
|
||||
JOIN book_copies c ON l.copy_id = c.id
|
||||
JOIN books b ON c.book_id = b.id
|
||||
JOIN users r ON l.reader_id = r.id
|
||||
LEFT JOIN loans l ON f.loan_id = l.id
|
||||
LEFT JOIN book_copies c ON l.copy_id = c.id
|
||||
LEFT JOIN books b ON c.book_id = b.id
|
||||
LEFT JOIN users r ON l.reader_id = r.id
|
||||
ORDER BY f.created_at DESC";
|
||||
using var cmd = new MySqlCommand(sql, conn);
|
||||
using var reader = cmd.ExecuteReader();
|
||||
|
|
@ -725,7 +756,7 @@ public static class DatabaseService
|
|||
{
|
||||
var book = new Book
|
||||
{
|
||||
Title = reader["book_title"].ToString() ?? ""
|
||||
Title = reader["book_title"]?.ToString() ?? ""
|
||||
};
|
||||
|
||||
var copy = new Book_copies
|
||||
|
|
@ -735,11 +766,12 @@ public static class DatabaseService
|
|||
|
||||
var readerUser = new User
|
||||
{
|
||||
Full_name = reader["reader_name"].ToString() ?? ""
|
||||
Id = reader["reader_id"] != DBNull.Value ? Convert.ToInt32(reader["reader_id"]) : 0,
|
||||
Full_name = reader["reader_name"]?.ToString() ?? ""
|
||||
};
|
||||
|
||||
var returnDateVal = reader["return_date"];
|
||||
DateTime retDate = DateTime.MinValue;
|
||||
DateTime? retDate = null;
|
||||
if (returnDateVal != DBNull.Value)
|
||||
{
|
||||
string strVal = returnDateVal.ToString() ?? "";
|
||||
|
|
@ -751,10 +783,10 @@ public static class DatabaseService
|
|||
|
||||
var loan = new Loan
|
||||
{
|
||||
Id = Convert.ToInt32(reader["loan_id"]),
|
||||
Status = reader["loan_status"].ToString() ?? "",
|
||||
Issue_date = Convert.ToDateTime(reader["issue_date"]),
|
||||
Due_date = Convert.ToDateTime(reader["due_date"]),
|
||||
Id = reader["loan_id"] != DBNull.Value ? Convert.ToInt32(reader["loan_id"]) : 0,
|
||||
Status = reader["loan_status"]?.ToString() ?? "",
|
||||
Issue_date = reader["issue_date"] != DBNull.Value ? Convert.ToDateTime(reader["issue_date"]) : DateTime.MinValue,
|
||||
Due_date = reader["due_date"] != DBNull.Value ? Convert.ToDateTime(reader["due_date"]) : DateTime.MinValue,
|
||||
Return_date = retDate,
|
||||
CopyId = copy,
|
||||
ReaderId = readerUser
|
||||
|
|
|
|||
|
|
@ -7,5 +7,11 @@ public class Book_copies
|
|||
public string Status { get; set; }
|
||||
public string Shelf_location { get; set; }
|
||||
public Book BookId { get; set; }
|
||||
|
||||
public string StatusText => Status switch
|
||||
{
|
||||
"available" => "Доступна",
|
||||
"issued" => "Выдана",
|
||||
"repair" => "В ремонте",
|
||||
_ => Status
|
||||
};
|
||||
}
|
||||
|
|
@ -9,4 +9,5 @@ public class Fine
|
|||
public int Is_paid { get; set; }
|
||||
public DateTime Created_at { get; set; }
|
||||
public Loan LoanId { get; set; }
|
||||
public string StatusText => Is_paid == 1 ? "Оплачен" : "Не оплачен";
|
||||
}
|
||||
|
|
@ -8,9 +8,15 @@ public class Loan
|
|||
public string Status { get; set; }
|
||||
public DateTime Issue_date { get; set; }
|
||||
public DateTime Due_date { get; set; }
|
||||
public DateTime Return_date { get; set; }
|
||||
public DateTime? Return_date { get; set; }
|
||||
public Book_copies CopyId { get; set; }
|
||||
public User ReaderId { get; set; }
|
||||
public User LibrarianId { get; set; }
|
||||
|
||||
public string StatusText => Status switch
|
||||
{
|
||||
"active" => "На руках",
|
||||
"pending_return" => "Ожидает возврата",
|
||||
"returned" => "Возвращена",
|
||||
_ => Status
|
||||
};
|
||||
}
|
||||
|
|
@ -10,20 +10,15 @@ namespace CourseProject1125;
|
|||
|
||||
sealed class Program
|
||||
{
|
||||
// Initialization code. Don't use any Avalonia, third-party APIs or any
|
||||
// SynchronizationContext-reliant code before AppMain is called: things aren't initialized
|
||||
// yet and stuff might break.
|
||||
[STAThread]
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
var host = Host.CreateDefaultBuilder(args) // Добавили args для порядка
|
||||
// --- ДОБАВЬ ЭТОТ БЛОК ---
|
||||
var host = Host.CreateDefaultBuilder(args)
|
||||
.ConfigureLogging(logging =>
|
||||
{
|
||||
logging.ClearProviders(); // Удаляет EventLog, который не работает на Linux
|
||||
logging.AddConsole(); // Оставляет вывод в консоль
|
||||
logging.ClearProviders();
|
||||
logging.AddConsole();
|
||||
})
|
||||
// ------------------------
|
||||
.ConfigureAppConfiguration((context, config) =>
|
||||
{
|
||||
config.SetBasePath(AppContext.BaseDirectory)
|
||||
|
|
@ -39,11 +34,46 @@ sealed class Program
|
|||
}
|
||||
}).Build();
|
||||
|
||||
if (args.Length > 0 && args[0] == "--diagnose")
|
||||
{
|
||||
RunDiagnostics();
|
||||
return;
|
||||
}
|
||||
|
||||
BuildAvaloniaApp(host.Services)
|
||||
.StartWithClassicDesktopLifetime(args);
|
||||
}
|
||||
|
||||
// Avalonia configuration, don't remove; also used by visual designer.
|
||||
private static void RunDiagnostics()
|
||||
{
|
||||
try
|
||||
{
|
||||
Console.WriteLine("=== DIAGNOSTICS START ===");
|
||||
using var conn = new MySqlConnector.MySqlConnection(Connection.ConnectionString);
|
||||
conn.Open();
|
||||
Console.WriteLine("Connected to database successfully!");
|
||||
|
||||
Console.WriteLine("Printing all users...");
|
||||
var users = DatabaseService.GetUsers();
|
||||
foreach (var u in users)
|
||||
{
|
||||
Console.WriteLine($"- User: {u.Login}, Pass: {u.Password_hash}, RoleId: {u.RoleId?.id} ({u.RoleId?.Name})");
|
||||
}
|
||||
|
||||
Console.WriteLine("Testing DatabaseService.GetLoans()...");
|
||||
var loans = DatabaseService.GetLoans();
|
||||
Console.WriteLine($"GetLoans returned {loans.Count} loans.");
|
||||
foreach (var l in loans)
|
||||
{
|
||||
Console.WriteLine($"- Loan ID: {l.Id}, Book: {l.CopyId?.BookId?.Title}, Reader: {l.ReaderId?.Full_name} (ID: {l.ReaderId?.Id}), Status: {l.Status}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Diagnostics error: " + ex);
|
||||
}
|
||||
}
|
||||
|
||||
public static AppBuilder BuildAvaloniaApp(IServiceProvider hostServices)
|
||||
=> AppBuilder.Configure(() => new App(hostServices))
|
||||
.UsePlatformDetect()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,708 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using CourseProject1125.DB;
|
||||
using CourseProject1125.Models;
|
||||
|
||||
namespace CourseProject1125.ViewModels
|
||||
{
|
||||
public class PopularBookItem
|
||||
{
|
||||
public string Title { get; set; } = string.Empty;
|
||||
public int BorrowCount { get; set; }
|
||||
}
|
||||
|
||||
public class OverdueLoanItem
|
||||
{
|
||||
public string Title { get; set; } = string.Empty;
|
||||
public string Reader { get; set; } = string.Empty;
|
||||
public string IssueDate { get; set; } = string.Empty;
|
||||
public string DueDate { get; set; } = string.Empty;
|
||||
public int OverdueDays { get; set; }
|
||||
}
|
||||
|
||||
public partial class AdminWindowViewModel : ViewModelBase
|
||||
{
|
||||
private List<Author> _allAuthors = new();
|
||||
private List<Book> _allBooks = new();
|
||||
private List<Role> _allRoles = new();
|
||||
|
||||
public Action? OnLogoutRequested { get; set; }
|
||||
|
||||
public string AdminName => UserSession.UserName;
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(BooksTabBackground), nameof(BooksTabForeground), nameof(IsBooksVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(AuthorsTabBackground), nameof(AuthorsTabForeground), nameof(IsAuthorsVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(CopiesTabBackground), nameof(CopiesTabForeground), nameof(IsCopiesVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(UsersTabBackground), nameof(UsersTabForeground), nameof(IsUsersVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(ReportsTabBackground), nameof(ReportsTabForeground), nameof(IsReportsVisible))]
|
||||
private string _currentTab = "Books";
|
||||
|
||||
[ObservableProperty] private string _activeTabHeader = "Управление книгами";
|
||||
|
||||
public string BooksTabBackground => CurrentTab == "Books" ? "LightGray" : "Transparent";
|
||||
public string BooksTabForeground => CurrentTab == "Books" ? "Black" : "Gray";
|
||||
public bool IsBooksVisible => CurrentTab == "Books";
|
||||
|
||||
public string AuthorsTabBackground => CurrentTab == "Authors" ? "LightGray" : "Transparent";
|
||||
public string AuthorsTabForeground => CurrentTab == "Authors" ? "Black" : "Gray";
|
||||
public bool IsAuthorsVisible => CurrentTab == "Authors";
|
||||
|
||||
public string CopiesTabBackground => CurrentTab == "Copies" ? "LightGray" : "Transparent";
|
||||
public string CopiesTabForeground => CurrentTab == "Copies" ? "Black" : "Gray";
|
||||
public bool IsCopiesVisible => CurrentTab == "Copies";
|
||||
|
||||
public string UsersTabBackground => CurrentTab == "Users" ? "LightGray" : "Transparent";
|
||||
public string UsersTabForeground => CurrentTab == "Users" ? "Black" : "Gray";
|
||||
public bool IsUsersVisible => CurrentTab == "Users";
|
||||
|
||||
public string ReportsTabBackground => CurrentTab == "Reports" ? "LightGray" : "Transparent";
|
||||
public string ReportsTabForeground => CurrentTab == "Reports" ? "Black" : "Gray";
|
||||
public bool IsReportsVisible => CurrentTab == "Reports";
|
||||
|
||||
[ObservableProperty] private List<Author> _authorsList = new();
|
||||
[ObservableProperty] private Author? _selectedAuthor;
|
||||
[ObservableProperty] private string _authorName = string.Empty;
|
||||
[ObservableProperty] private string _authorStatus = string.Empty;
|
||||
[ObservableProperty] private string _authorStatusColor = "Black";
|
||||
|
||||
[ObservableProperty] private List<Book> _booksList = new();
|
||||
[ObservableProperty] private Book? _selectedBook;
|
||||
[ObservableProperty] private string _bookTitle = string.Empty;
|
||||
[ObservableProperty] private string _searchBookAuthorText = string.Empty;
|
||||
[ObservableProperty] private List<Author> _filteredBookAuthors = new();
|
||||
[ObservableProperty] private Author? _selectedBookAuthor;
|
||||
[ObservableProperty] private string _bookIsbn = string.Empty;
|
||||
[ObservableProperty] private string _bookYear = string.Empty;
|
||||
[ObservableProperty] private string _bookDesc = string.Empty;
|
||||
[ObservableProperty] private string _bookStatus = string.Empty;
|
||||
[ObservableProperty] private string _bookStatusColor = "Black";
|
||||
|
||||
[ObservableProperty] private List<Book_copies> _copiesList = new();
|
||||
[ObservableProperty] private Book_copies? _selectedCopy;
|
||||
[ObservableProperty] private string _searchCopyBookText = string.Empty;
|
||||
[ObservableProperty] private List<Book> _filteredCopyBooks = new();
|
||||
[ObservableProperty] private Book? _selectedCopyBook;
|
||||
[ObservableProperty] private string _copyInv = string.Empty;
|
||||
[ObservableProperty] private string _copyStatusField = string.Empty;
|
||||
[ObservableProperty] private string _copyShelf = string.Empty;
|
||||
[ObservableProperty] private string _copyStatus = string.Empty;
|
||||
[ObservableProperty] private string _copyStatusColor = "Black";
|
||||
|
||||
[ObservableProperty] private List<User> _usersList = new();
|
||||
[ObservableProperty] private User? _selectedUser;
|
||||
[ObservableProperty] private string _userFullName = string.Empty;
|
||||
[ObservableProperty] private string _searchUserRoleText = string.Empty;
|
||||
[ObservableProperty] private List<Role> _filteredUserRoles = new();
|
||||
[ObservableProperty] private Role? _selectedUserRole;
|
||||
[ObservableProperty] private string _userLogin = string.Empty;
|
||||
[ObservableProperty] private string _userPass = string.Empty;
|
||||
[ObservableProperty] private string _userEmail = string.Empty;
|
||||
[ObservableProperty] private string _userPhone = string.Empty;
|
||||
[ObservableProperty] private string _userStatus = string.Empty;
|
||||
[ObservableProperty] private string _userStatusColor = "Black";
|
||||
|
||||
[ObservableProperty] private string _finesCollected = "0.00 руб.";
|
||||
[ObservableProperty] private string _finesUnpaid = "0.00 руб.";
|
||||
[ObservableProperty] private List<PopularBookItem> _popularBooksList = new();
|
||||
[ObservableProperty] private List<OverdueLoanItem> _overdueLoansList = new();
|
||||
|
||||
public AdminWindowViewModel()
|
||||
{
|
||||
LoadAllData();
|
||||
ShowTab("Books");
|
||||
}
|
||||
|
||||
private void LoadAllData()
|
||||
{
|
||||
RefreshAuthors();
|
||||
RefreshBooks();
|
||||
RefreshCopies();
|
||||
RefreshUsers();
|
||||
RefreshReports();
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ShowTab(string tabName)
|
||||
{
|
||||
CurrentTab = tabName;
|
||||
|
||||
switch (tabName)
|
||||
{
|
||||
case "Books":
|
||||
ActiveTabHeader = "Управление книгами";
|
||||
RefreshBooks();
|
||||
break;
|
||||
case "Authors":
|
||||
ActiveTabHeader = "Управление авторами";
|
||||
RefreshAuthors();
|
||||
break;
|
||||
case "Copies":
|
||||
ActiveTabHeader = "Управление экземплярами";
|
||||
RefreshCopies();
|
||||
break;
|
||||
case "Users":
|
||||
ActiveTabHeader = "Управление пользователями";
|
||||
RefreshUsers();
|
||||
break;
|
||||
case "Reports":
|
||||
ActiveTabHeader = "Аналитические отчеты";
|
||||
RefreshReports();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void Logout()
|
||||
{
|
||||
OnLogoutRequested?.Invoke();
|
||||
}
|
||||
|
||||
private void RefreshAuthors()
|
||||
{
|
||||
_allAuthors = DatabaseService.GetAuthors();
|
||||
AuthorsList = _allAuthors;
|
||||
FilterBookAuthors();
|
||||
}
|
||||
|
||||
partial void OnSelectedAuthorChanged(Author? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
AuthorName = value.Name;
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void AddAuthor()
|
||||
{
|
||||
string name = AuthorName?.Trim() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(name))
|
||||
{
|
||||
AuthorStatusColor = "Red";
|
||||
AuthorStatus = "Имя автора не может быть пустым.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.AddAuthor(name))
|
||||
{
|
||||
RefreshAuthors();
|
||||
ClearAuthor();
|
||||
AuthorStatusColor = "Green";
|
||||
AuthorStatus = "Автор добавлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
AuthorStatusColor = "Red";
|
||||
AuthorStatus = "Ошибка добавления автора.";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void EditAuthor()
|
||||
{
|
||||
if (SelectedAuthor == null)
|
||||
{
|
||||
AuthorStatusColor = "Red";
|
||||
AuthorStatus = "Выберите автора для редактирования.";
|
||||
return;
|
||||
}
|
||||
string name = AuthorName?.Trim() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(name)) return;
|
||||
|
||||
if (DatabaseService.UpdateAuthor(SelectedAuthor.Id, name))
|
||||
{
|
||||
RefreshAuthors();
|
||||
ClearAuthor();
|
||||
AuthorStatusColor = "Green";
|
||||
AuthorStatus = "Автор обновлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
AuthorStatusColor = "Red";
|
||||
AuthorStatus = "Ошибка обновления автора.";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void DeleteAuthor()
|
||||
{
|
||||
if (SelectedAuthor == null) return;
|
||||
if (DatabaseService.DeleteAuthor(SelectedAuthor.Id))
|
||||
{
|
||||
RefreshAuthors();
|
||||
ClearAuthor();
|
||||
AuthorStatusColor = "Green";
|
||||
AuthorStatus = "Автор удален!";
|
||||
}
|
||||
else
|
||||
{
|
||||
AuthorStatusColor = "Red";
|
||||
AuthorStatus = "Ошибка удаления автора (возможно, он связан с книгами).";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ClearAuthor()
|
||||
{
|
||||
SelectedAuthor = null;
|
||||
AuthorName = string.Empty;
|
||||
AuthorStatus = string.Empty;
|
||||
}
|
||||
|
||||
private void RefreshBooks()
|
||||
{
|
||||
_allBooks = DatabaseService.GetBooks();
|
||||
BooksList = _allBooks;
|
||||
FilterCopyBooks();
|
||||
}
|
||||
|
||||
partial void OnSearchBookAuthorTextChanged(string value)
|
||||
{
|
||||
FilterBookAuthors();
|
||||
}
|
||||
|
||||
private void FilterBookAuthors()
|
||||
{
|
||||
string filter = SearchBookAuthorText?.Trim() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(filter))
|
||||
{
|
||||
FilteredBookAuthors = _allAuthors.Take(20).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
FilteredBookAuthors = _allAuthors.Where(a =>
|
||||
a.Name.Contains(filter, StringComparison.OrdinalIgnoreCase)
|
||||
).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
partial void OnSelectedBookChanged(Book? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
BookTitle = value.Title;
|
||||
BookIsbn = value.Isbn;
|
||||
BookYear = value.Year_published.ToString();
|
||||
BookDesc = value.Description;
|
||||
|
||||
SearchBookAuthorText = value.AuthorId?.Name ?? string.Empty;
|
||||
SelectedBookAuthor = _allAuthors.FirstOrDefault(a => a.Id == value.AuthorId?.Id);
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void AddBook()
|
||||
{
|
||||
string title = BookTitle?.Trim() ?? string.Empty;
|
||||
string isbn = BookIsbn?.Trim() ?? string.Empty;
|
||||
string desc = BookDesc?.Trim() ?? string.Empty;
|
||||
int.TryParse(BookYear?.Trim(), out int year);
|
||||
var author = SelectedBookAuthor;
|
||||
|
||||
if (string.IsNullOrEmpty(title))
|
||||
{
|
||||
BookStatusColor = "Red";
|
||||
BookStatus = "Название книги не может быть пустым.";
|
||||
return;
|
||||
}
|
||||
if (author == null)
|
||||
{
|
||||
BookStatusColor = "Red";
|
||||
BookStatus = "Выберите автора из списка (введите имя для поиска).";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.AddBook(title, isbn, desc, year, author.Id))
|
||||
{
|
||||
RefreshBooks();
|
||||
ClearBook();
|
||||
BookStatusColor = "Green";
|
||||
BookStatus = "Книга добавлена!";
|
||||
}
|
||||
else
|
||||
{
|
||||
BookStatusColor = "Red";
|
||||
BookStatus = "Ошибка добавления (проверьте ISBN на уникальность).";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void EditBook()
|
||||
{
|
||||
if (SelectedBook == null)
|
||||
{
|
||||
BookStatusColor = "Red";
|
||||
BookStatus = "Выберите книгу для редактирования.";
|
||||
return;
|
||||
}
|
||||
string title = BookTitle?.Trim() ?? string.Empty;
|
||||
string isbn = BookIsbn?.Trim() ?? string.Empty;
|
||||
string desc = BookDesc?.Trim() ?? string.Empty;
|
||||
int.TryParse(BookYear?.Trim(), out int year);
|
||||
var author = SelectedBookAuthor;
|
||||
|
||||
if (string.IsNullOrEmpty(title) || author == null)
|
||||
{
|
||||
BookStatusColor = "Red";
|
||||
BookStatus = "Заполните название и выберите автора.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.UpdateBook(SelectedBook.Id, title, isbn, desc, year, author.Id))
|
||||
{
|
||||
RefreshBooks();
|
||||
ClearBook();
|
||||
BookStatusColor = "Green";
|
||||
BookStatus = "Книга обновлена!";
|
||||
}
|
||||
else
|
||||
{
|
||||
BookStatusColor = "Red";
|
||||
BookStatus = "Ошибка обновления книги.";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void DeleteBook()
|
||||
{
|
||||
if (SelectedBook == null) return;
|
||||
if (DatabaseService.DeleteBook(SelectedBook.Id))
|
||||
{
|
||||
RefreshBooks();
|
||||
ClearBook();
|
||||
BookStatusColor = "Green";
|
||||
BookStatus = "Книга удалена!";
|
||||
}
|
||||
else
|
||||
{
|
||||
BookStatusColor = "Red";
|
||||
BookStatus = "Ошибка удаления книги (возможно, есть выданные экземпляры).";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ClearBook()
|
||||
{
|
||||
SelectedBook = null;
|
||||
BookTitle = string.Empty;
|
||||
BookIsbn = string.Empty;
|
||||
BookYear = string.Empty;
|
||||
BookDesc = string.Empty;
|
||||
SearchBookAuthorText = string.Empty;
|
||||
SelectedBookAuthor = null;
|
||||
BookStatus = string.Empty;
|
||||
}
|
||||
|
||||
private void RefreshCopies()
|
||||
{
|
||||
CopiesList = DatabaseService.GetBookCopies();
|
||||
}
|
||||
|
||||
partial void OnSearchCopyBookTextChanged(string value)
|
||||
{
|
||||
FilterCopyBooks();
|
||||
}
|
||||
|
||||
private void FilterCopyBooks()
|
||||
{
|
||||
string filter = SearchCopyBookText?.Trim() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(filter))
|
||||
{
|
||||
FilteredCopyBooks = _allBooks.Take(20).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
FilteredCopyBooks = _allBooks.Where(b =>
|
||||
b.Title.Contains(filter, StringComparison.OrdinalIgnoreCase) ||
|
||||
(b.AuthorId?.Name != null && b.AuthorId.Name.Contains(filter, StringComparison.OrdinalIgnoreCase))
|
||||
).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
partial void OnSelectedCopyChanged(Book_copies? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
CopyInv = value.Inventory_number ?? string.Empty;
|
||||
CopyShelf = value.Shelf_location ?? string.Empty;
|
||||
CopyStatusField = value.Status ?? string.Empty;
|
||||
|
||||
SearchCopyBookText = value.BookId?.Title ?? string.Empty;
|
||||
SelectedCopyBook = _allBooks.FirstOrDefault(b => b.Id == value.BookId?.Id);
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void AddCopy()
|
||||
{
|
||||
var book = SelectedCopyBook;
|
||||
string inv = CopyInv?.Trim() ?? string.Empty;
|
||||
string shelf = CopyShelf?.Trim() ?? string.Empty;
|
||||
string status = CopyStatusField?.Trim() ?? "available";
|
||||
if (string.IsNullOrEmpty(status)) status = "available";
|
||||
|
||||
if (book == null)
|
||||
{
|
||||
CopyStatusColor = "Red";
|
||||
CopyStatus = "Выберите книгу из списка (введите название для поиска).";
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(inv))
|
||||
{
|
||||
CopyStatusColor = "Red";
|
||||
CopyStatus = "Инвентарный номер обязателен.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.AddBookCopy(book.Id, inv, status, shelf))
|
||||
{
|
||||
RefreshCopies();
|
||||
ClearCopy();
|
||||
CopyStatusColor = "Green";
|
||||
CopyStatus = "Экземпляр добавлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
CopyStatusColor = "Red";
|
||||
CopyStatus = "Ошибка добавления (проверьте уникальность инв. номера).";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void EditCopy()
|
||||
{
|
||||
if (SelectedCopy == null)
|
||||
{
|
||||
CopyStatusColor = "Red";
|
||||
CopyStatus = "Выберите экземпляр для редактирования.";
|
||||
return;
|
||||
}
|
||||
var book = SelectedCopyBook;
|
||||
string inv = CopyInv?.Trim() ?? string.Empty;
|
||||
string shelf = CopyShelf?.Trim() ?? string.Empty;
|
||||
string status = CopyStatusField?.Trim() ?? "available";
|
||||
if (string.IsNullOrEmpty(status)) status = "available";
|
||||
|
||||
if (book == null || string.IsNullOrEmpty(inv))
|
||||
{
|
||||
CopyStatusColor = "Red";
|
||||
CopyStatus = "Выберите книгу и заполните инв. номер.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.UpdateBookCopy(SelectedCopy.Id, book.Id, inv, status, shelf))
|
||||
{
|
||||
RefreshCopies();
|
||||
ClearCopy();
|
||||
CopyStatusColor = "Green";
|
||||
CopyStatus = "Экземпляр обновлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
CopyStatusColor = "Red";
|
||||
CopyStatus = "Ошибка обновления.";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void DeleteCopy()
|
||||
{
|
||||
if (SelectedCopy == null) return;
|
||||
if (DatabaseService.DeleteBookCopy(SelectedCopy.Id))
|
||||
{
|
||||
RefreshCopies();
|
||||
ClearCopy();
|
||||
CopyStatusColor = "Green";
|
||||
CopyStatus = "Экземпляр удален!";
|
||||
}
|
||||
else
|
||||
{
|
||||
CopyStatusColor = "Red";
|
||||
CopyStatus = "Ошибка удаления экземпляра.";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ClearCopy()
|
||||
{
|
||||
SelectedCopy = null;
|
||||
CopyInv = string.Empty;
|
||||
CopyShelf = string.Empty;
|
||||
SearchCopyBookText = string.Empty;
|
||||
SelectedCopyBook = null;
|
||||
CopyStatusField = string.Empty;
|
||||
CopyStatus = string.Empty;
|
||||
}
|
||||
|
||||
private void RefreshUsers()
|
||||
{
|
||||
UsersList = DatabaseService.GetUsers();
|
||||
_allRoles = DatabaseService.GetRoles();
|
||||
FilterUserRoles();
|
||||
}
|
||||
|
||||
partial void OnSearchUserRoleTextChanged(string value)
|
||||
{
|
||||
FilterUserRoles();
|
||||
}
|
||||
|
||||
private void FilterUserRoles()
|
||||
{
|
||||
string filter = SearchUserRoleText?.Trim() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(filter))
|
||||
{
|
||||
FilteredUserRoles = _allRoles.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
FilteredUserRoles = _allRoles.Where(r =>
|
||||
r.Name.Contains(filter, StringComparison.OrdinalIgnoreCase)
|
||||
).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
partial void OnSelectedUserChanged(User? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
UserFullName = value.Full_name ?? string.Empty;
|
||||
UserLogin = value.Login ?? string.Empty;
|
||||
UserPass = value.Password_hash ?? string.Empty;
|
||||
UserEmail = value.Email ?? string.Empty;
|
||||
UserPhone = value.Phone ?? string.Empty;
|
||||
|
||||
SearchUserRoleText = value.RoleId?.Name ?? string.Empty;
|
||||
SelectedUserRole = _allRoles.FirstOrDefault(r => r.id == value.RoleId?.id);
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void AddUser()
|
||||
{
|
||||
string name = UserFullName?.Trim() ?? string.Empty;
|
||||
string login = UserLogin?.Trim() ?? string.Empty;
|
||||
string pass = UserPass?.Trim() ?? string.Empty;
|
||||
string email = UserEmail?.Trim() ?? string.Empty;
|
||||
string phone = UserPhone?.Trim() ?? string.Empty;
|
||||
var role = SelectedUserRole;
|
||||
|
||||
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(login) || string.IsNullOrEmpty(pass) || role == null)
|
||||
{
|
||||
UserStatusColor = "Red";
|
||||
UserStatus = "Заполните обязательные поля (ФИО, Логин, Пароль, Роль).";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.AddUser(name, email, phone, login, pass, role.id))
|
||||
{
|
||||
RefreshUsers();
|
||||
ClearUser();
|
||||
UserStatusColor = "Green";
|
||||
UserStatus = "Пользователь добавлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
UserStatusColor = "Red";
|
||||
UserStatus = "Ошибка добавления (проверьте уникальность Логина/Email).";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void EditUser()
|
||||
{
|
||||
if (SelectedUser == null)
|
||||
{
|
||||
UserStatusColor = "Red";
|
||||
UserStatus = "Выберите пользователя для редактирования.";
|
||||
return;
|
||||
}
|
||||
string name = UserFullName?.Trim() ?? string.Empty;
|
||||
string login = UserLogin?.Trim() ?? string.Empty;
|
||||
string pass = UserPass?.Trim() ?? string.Empty;
|
||||
string email = UserEmail?.Trim() ?? string.Empty;
|
||||
string phone = UserPhone?.Trim() ?? string.Empty;
|
||||
var role = SelectedUserRole;
|
||||
|
||||
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(login) || string.IsNullOrEmpty(pass) || role == null)
|
||||
{
|
||||
UserStatusColor = "Red";
|
||||
UserStatus = "Заполните все обязательные поля и выберите роль.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.UpdateUser(SelectedUser.Id, name, email, phone, login, pass, role.id))
|
||||
{
|
||||
RefreshUsers();
|
||||
ClearUser();
|
||||
UserStatusColor = "Green";
|
||||
UserStatus = "Пользователь обновлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
UserStatusColor = "Red";
|
||||
UserStatus = "Ошибка обновления пользователя.";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void DeleteUser()
|
||||
{
|
||||
if (SelectedUser == null) return;
|
||||
if (DatabaseService.DeleteUser(SelectedUser.Id))
|
||||
{
|
||||
RefreshUsers();
|
||||
ClearUser();
|
||||
UserStatusColor = "Green";
|
||||
UserStatus = "Пользователь удален!";
|
||||
}
|
||||
else
|
||||
{
|
||||
UserStatusColor = "Red";
|
||||
UserStatus = "Ошибка удаления пользователя.";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ClearUser()
|
||||
{
|
||||
SelectedUser = null;
|
||||
UserFullName = string.Empty;
|
||||
UserLogin = string.Empty;
|
||||
UserPass = string.Empty;
|
||||
UserEmail = string.Empty;
|
||||
UserPhone = string.Empty;
|
||||
SearchUserRoleText = string.Empty;
|
||||
SelectedUserRole = null;
|
||||
UserStatus = string.Empty;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void RefreshReports()
|
||||
{
|
||||
decimal collected = DatabaseService.GetTotalFinesCollected();
|
||||
decimal unpaid = DatabaseService.GetTotalFinesUnpaid();
|
||||
|
||||
FinesCollected = $"{collected:N2} руб.";
|
||||
FinesUnpaid = $"{unpaid:N2} руб.";
|
||||
|
||||
PopularBooksList = DatabaseService.GetPopularBooks().Rows.Cast<System.Data.DataRow>().Select(r => new PopularBookItem
|
||||
{
|
||||
Title = r["Title"]?.ToString() ?? string.Empty,
|
||||
BorrowCount = r["BorrowCount"] != DBNull.Value ? Convert.ToInt32(r["BorrowCount"]) : 0
|
||||
}).ToList();
|
||||
|
||||
OverdueLoansList = DatabaseService.GetOverdueLoans().Rows.Cast<System.Data.DataRow>().Select(r => new OverdueLoanItem
|
||||
{
|
||||
Title = r["Title"]?.ToString() ?? string.Empty,
|
||||
Reader = r["Reader"]?.ToString() ?? string.Empty,
|
||||
IssueDate = r["IssueDate"] != DBNull.Value ? Convert.ToDateTime(r["IssueDate"]).ToString("dd.MM.yyyy") : string.Empty,
|
||||
DueDate = r["DueDate"] != DBNull.Value ? Convert.ToDateTime(r["DueDate"]).ToString("dd.MM.yyyy") : string.Empty,
|
||||
OverdueDays = r["OverdueDays"] != DBNull.Value ? Convert.ToInt32(r["OverdueDays"]) : 0
|
||||
}).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,413 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using CourseProject1125.DB;
|
||||
using CourseProject1125.Models;
|
||||
|
||||
namespace CourseProject1125.ViewModels
|
||||
{
|
||||
public partial class LibrarianWindowViewModel : ViewModelBase
|
||||
{
|
||||
private List<Book_copies> _availableCopies = new();
|
||||
private List<User> _readers = new();
|
||||
|
||||
public Action? OnLogoutRequested { get; set; }
|
||||
|
||||
public string LibrarianName => UserSession.UserName;
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(IssueTabBackground), nameof(IssueTabForeground), nameof(IsIssueVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(ReturnsTabBackground), nameof(ReturnsTabForeground), nameof(IsReturnsVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(RegisterTabBackground), nameof(RegisterTabForeground), nameof(IsRegisterVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(FinesTabBackground), nameof(FinesTabForeground), nameof(IsFinesVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(ReservationsTabBackground), nameof(ReservationsTabForeground), nameof(IsReservationsVisible))]
|
||||
private string _currentTab = "Issue";
|
||||
|
||||
[ObservableProperty] private string _activeTabHeader = "📖 Оформление выдачи книг";
|
||||
|
||||
public string IssueTabBackground => CurrentTab == "Issue" ? "LightGray" : "Transparent";
|
||||
public string IssueTabForeground => CurrentTab == "Issue" ? "Black" : "Gray";
|
||||
public bool IsIssueVisible => CurrentTab == "Issue";
|
||||
|
||||
public string ReturnsTabBackground => CurrentTab == "Returns" ? "LightGray" : "Transparent";
|
||||
public string ReturnsTabForeground => CurrentTab == "Returns" ? "Black" : "Gray";
|
||||
public bool IsReturnsVisible => CurrentTab == "Returns";
|
||||
|
||||
public string RegisterTabBackground => CurrentTab == "Register" ? "LightGray" : "Transparent";
|
||||
public string RegisterTabForeground => CurrentTab == "Register" ? "Black" : "Gray";
|
||||
public bool IsRegisterVisible => CurrentTab == "Register";
|
||||
|
||||
public string FinesTabBackground => CurrentTab == "Fines" ? "LightGray" : "Transparent";
|
||||
public string FinesTabForeground => CurrentTab == "Fines" ? "Black" : "Gray";
|
||||
public bool IsFinesVisible => CurrentTab == "Fines";
|
||||
|
||||
public string ReservationsTabBackground => CurrentTab == "Reservations" ? "LightGray" : "Transparent";
|
||||
public string ReservationsTabForeground => CurrentTab == "Reservations" ? "Black" : "Gray";
|
||||
public bool IsReservationsVisible => CurrentTab == "Reservations";
|
||||
|
||||
[ObservableProperty] private string _searchCopyText = string.Empty;
|
||||
[ObservableProperty] private List<Book_copies> _filteredCopies = new();
|
||||
[ObservableProperty] private Book_copies? _selectedAvailableCopy;
|
||||
[ObservableProperty] private string _searchReaderText = string.Empty;
|
||||
[ObservableProperty] private List<User> _filteredReaders = new();
|
||||
[ObservableProperty] private User? _selectedReader;
|
||||
[ObservableProperty] private DateTime? _issueDueDate = DateTime.Now.AddDays(14);
|
||||
[ObservableProperty] private string _issueStatus = string.Empty;
|
||||
[ObservableProperty] private string _issueStatusColor = "Black";
|
||||
|
||||
[ObservableProperty] private List<Loan> _activeLoansList = new();
|
||||
[ObservableProperty] private Loan? _selectedActiveLoan;
|
||||
[ObservableProperty] private string _returnDetails = "Выберите выдачу из списка слева.";
|
||||
[ObservableProperty] private string _returnStatus = string.Empty;
|
||||
[ObservableProperty] private string _returnStatusColor = "Black";
|
||||
[ObservableProperty] private bool _isReturnEnabled;
|
||||
|
||||
[ObservableProperty] private string _regFullName = string.Empty;
|
||||
[ObservableProperty] private string _regEmail = string.Empty;
|
||||
[ObservableProperty] private string _regPhone = string.Empty;
|
||||
[ObservableProperty] private string _regLogin = string.Empty;
|
||||
[ObservableProperty] private string _regPass = string.Empty;
|
||||
[ObservableProperty] private string _regStatus = string.Empty;
|
||||
[ObservableProperty] private string _regStatusColor = "Black";
|
||||
|
||||
[ObservableProperty] private List<Fine> _finesList = new();
|
||||
[ObservableProperty] private Fine? _selectedFine;
|
||||
[ObservableProperty] private string _fineDetails = "Выберите штраф из списка.";
|
||||
[ObservableProperty] private string _fineStatus = string.Empty;
|
||||
[ObservableProperty] private string _fineStatusColor = "Black";
|
||||
[ObservableProperty] private bool _isPayFineEnabled;
|
||||
|
||||
[ObservableProperty] private List<Reservation> _reservationsList = new();
|
||||
[ObservableProperty] private Reservation? _selectedReservation;
|
||||
[ObservableProperty] private string _reservationDetails = "Выберите бронь из списка.";
|
||||
[ObservableProperty] private string _reservationStatus = string.Empty;
|
||||
[ObservableProperty] private string _reservationStatusColor = "Black";
|
||||
[ObservableProperty] private bool _isCancelReservationEnabled;
|
||||
|
||||
public LibrarianWindowViewModel()
|
||||
{
|
||||
LoadAllData();
|
||||
ShowTab("Issue");
|
||||
}
|
||||
|
||||
private void LoadAllData()
|
||||
{
|
||||
RefreshIssueCombos();
|
||||
RefreshActiveLoans();
|
||||
RefreshFines();
|
||||
RefreshReservations();
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ShowTab(string tabName)
|
||||
{
|
||||
CurrentTab = tabName;
|
||||
|
||||
switch (tabName)
|
||||
{
|
||||
case "Issue":
|
||||
ActiveTabHeader = "Оформление выдачи книг";
|
||||
RefreshIssueCombos();
|
||||
break;
|
||||
case "Returns":
|
||||
ActiveTabHeader = "Приём возврата книг";
|
||||
RefreshActiveLoans();
|
||||
break;
|
||||
case "Register":
|
||||
ActiveTabHeader = "Регистрация читателей";
|
||||
break;
|
||||
case "Fines":
|
||||
ActiveTabHeader = "Управление штрафами";
|
||||
RefreshFines();
|
||||
break;
|
||||
case "Reservations":
|
||||
ActiveTabHeader = "Бронирования читателей";
|
||||
RefreshReservations();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void Logout()
|
||||
{
|
||||
OnLogoutRequested?.Invoke();
|
||||
}
|
||||
|
||||
private void RefreshIssueCombos()
|
||||
{
|
||||
var allCopies = DatabaseService.GetBookCopies();
|
||||
_availableCopies = allCopies.Where(c => string.Equals(c.Status, "available", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
var allUsers = DatabaseService.GetUsers();
|
||||
_readers = allUsers.Where(u => u.RoleId?.id == 3 || string.Equals(u.RoleId?.Name, "Читатель", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
FilterIssueCopies();
|
||||
FilterIssueReaders();
|
||||
|
||||
IssueStatus = string.Empty;
|
||||
}
|
||||
|
||||
partial void OnSearchCopyTextChanged(string value)
|
||||
{
|
||||
FilterIssueCopies();
|
||||
}
|
||||
|
||||
partial void OnSearchReaderTextChanged(string value)
|
||||
{
|
||||
FilterIssueReaders();
|
||||
}
|
||||
|
||||
private void FilterIssueCopies()
|
||||
{
|
||||
var filter = SearchCopyText?.Trim() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(filter))
|
||||
{
|
||||
FilteredCopies = _availableCopies.Take(15).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
FilteredCopies = _availableCopies.Where(c =>
|
||||
(c.BookId?.Title != null && c.BookId.Title.Contains(filter, StringComparison.OrdinalIgnoreCase)) ||
|
||||
(c.Inventory_number != null && c.Inventory_number.Contains(filter, StringComparison.OrdinalIgnoreCase)) ||
|
||||
(c.BookId?.AuthorId?.Name != null && c.BookId.AuthorId.Name.Contains(filter, StringComparison.OrdinalIgnoreCase))
|
||||
).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
private void FilterIssueReaders()
|
||||
{
|
||||
var filter = SearchReaderText?.Trim() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(filter))
|
||||
{
|
||||
FilteredReaders = _readers.Take(15).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
FilteredReaders = _readers.Where(r =>
|
||||
(r.Full_name != null && r.Full_name.Contains(filter, StringComparison.OrdinalIgnoreCase)) ||
|
||||
(r.Login != null && r.Login.Contains(filter, StringComparison.OrdinalIgnoreCase))
|
||||
).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void IssueBook()
|
||||
{
|
||||
if (SelectedAvailableCopy == null || SelectedReader == null || IssueDueDate == null)
|
||||
{
|
||||
IssueStatusColor = "Red";
|
||||
IssueStatus = "Ошибка: Выберите книгу, читателя и укажите дату сдачи.";
|
||||
return;
|
||||
}
|
||||
|
||||
var dueDate = IssueDueDate.Value;
|
||||
|
||||
if (dueDate <= DateTime.Now)
|
||||
{
|
||||
IssueStatusColor = "Red";
|
||||
IssueStatus = "Ошибка: Срок возврата должен быть в будущем.";
|
||||
return;
|
||||
}
|
||||
|
||||
int librarianId = UserSession.UserId;
|
||||
|
||||
if (DatabaseService.IssueLoan(SelectedAvailableCopy.Id, SelectedReader.Id, librarianId, dueDate))
|
||||
{
|
||||
IssueStatusColor = "Green";
|
||||
IssueStatus = $"Успешно! Книга '{SelectedAvailableCopy.BookId?.Title}' выдана читателю '{SelectedReader.Full_name}'.";
|
||||
SearchCopyText = string.Empty;
|
||||
SearchReaderText = string.Empty;
|
||||
RefreshIssueCombos();
|
||||
}
|
||||
else
|
||||
{
|
||||
IssueStatusColor = "Red";
|
||||
IssueStatus = "Ошибка при оформлении выдачи в базе данных.";
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshActiveLoans()
|
||||
{
|
||||
var allLoans = DatabaseService.GetLoans();
|
||||
ActiveLoansList = allLoans.Where(l =>
|
||||
string.Equals(l.Status, "active", StringComparison.OrdinalIgnoreCase) ||
|
||||
string.Equals(l.Status, "pending_return", StringComparison.OrdinalIgnoreCase)
|
||||
).ToList();
|
||||
|
||||
SelectedActiveLoan = null;
|
||||
}
|
||||
|
||||
partial void OnSelectedActiveLoanChanged(Loan? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
ReturnDetails = $"Книга: {value.CopyId?.BookId?.Title}\n" +
|
||||
$"Инвентарный номер: {value.CopyId?.Inventory_number}\n" +
|
||||
$"Читатель: {value.ReaderId?.Full_name}\n" +
|
||||
$"Дата выдачи: {value.Issue_date:dd.MM.yyyy}\n" +
|
||||
$"Срок сдачи: {value.Due_date:dd.MM.yyyy}\n" +
|
||||
$"Статус: {value.StatusText}";
|
||||
IsReturnEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ReturnDetails = "Выберите выдачу из списка слева.";
|
||||
IsReturnEnabled = false;
|
||||
}
|
||||
ReturnStatus = string.Empty;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ReturnBook()
|
||||
{
|
||||
if (SelectedActiveLoan == null) return;
|
||||
|
||||
DateTime returnDate = DateTime.Now;
|
||||
decimal fine = DatabaseService.ReturnLoan(SelectedActiveLoan.Id, returnDate);
|
||||
|
||||
if (fine >= 0)
|
||||
{
|
||||
RefreshActiveLoans();
|
||||
if (fine > 0)
|
||||
{
|
||||
ReturnStatusColor = "Red";
|
||||
ReturnStatus = $"Книга возвращена! Зафиксирована просрочка. Выписан штраф: {fine:N2} руб.";
|
||||
}
|
||||
else
|
||||
{
|
||||
ReturnStatusColor = "Green";
|
||||
ReturnStatus = "Книга возвращена успешно! Просрочек нет.";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ReturnStatusColor = "Red";
|
||||
ReturnStatus = "Ошибка выполнения возврата книги.";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void RegisterReader()
|
||||
{
|
||||
string name = RegFullName?.Trim() ?? string.Empty;
|
||||
string email = RegEmail?.Trim() ?? string.Empty;
|
||||
string phone = RegPhone?.Trim() ?? string.Empty;
|
||||
string login = RegLogin?.Trim() ?? string.Empty;
|
||||
string pass = RegPass?.Trim() ?? string.Empty;
|
||||
|
||||
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(login) || string.IsNullOrEmpty(pass))
|
||||
{
|
||||
RegStatusColor = "Red";
|
||||
RegStatus = "Пожалуйста, заполните ФИО, логин и пароль.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.AddUser(name, email, phone, login, pass, 3))
|
||||
{
|
||||
RegStatusColor = "Green";
|
||||
RegStatus = $"Успешно! Читатель '{name}' зарегистрирован.";
|
||||
|
||||
RegFullName = string.Empty;
|
||||
RegEmail = string.Empty;
|
||||
RegPhone = string.Empty;
|
||||
RegLogin = string.Empty;
|
||||
RegPass = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
RegStatusColor = "Red";
|
||||
RegStatus = "Ошибка: Пользователь с таким логином или Email уже существует.";
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshFines()
|
||||
{
|
||||
FinesList = DatabaseService.GetFines().Where(f => f.Is_paid == 0).ToList();
|
||||
SelectedFine = null;
|
||||
}
|
||||
|
||||
partial void OnSelectedFineChanged(Fine? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
string paidStr = value.Is_paid == 1 ? "Оплачен" : "НЕ оплачен";
|
||||
FineDetails = $"Читатель: {value.LoanId?.ReaderId?.Full_name}\n" +
|
||||
$"Книга: {value.LoanId?.CopyId?.BookId?.Title}\n" +
|
||||
$"Сумма штрафа: {value.Amount:N2} руб.\n" +
|
||||
$"Статус: {paidStr}\n" +
|
||||
$"Дата начисления: {value.Created_at:dd.MM.yyyy}";
|
||||
IsPayFineEnabled = value.Is_paid == 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
FineDetails = "Выберите штраф из списка.";
|
||||
IsPayFineEnabled = false;
|
||||
}
|
||||
FineStatus = string.Empty;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void PayFine()
|
||||
{
|
||||
if (SelectedFine == null) return;
|
||||
|
||||
if (DatabaseService.PayFine(SelectedFine.Id))
|
||||
{
|
||||
RefreshFines();
|
||||
FineStatusColor = "Green";
|
||||
FineStatus = "Штраф успешно отмечен как оплаченный!";
|
||||
}
|
||||
else
|
||||
{
|
||||
FineStatusColor = "Red";
|
||||
FineStatus = "Ошибка при оплате штрафа.";
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshReservations()
|
||||
{
|
||||
ReservationsList = DatabaseService.GetReservations().Where(r => r.is_active == 1 && r.Expiry_date >= DateTime.Now).ToList();
|
||||
SelectedReservation = null;
|
||||
}
|
||||
|
||||
partial void OnSelectedReservationChanged(Reservation? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
string activeStr = value.is_active == 1 ? "Активна" : "Неактивна/Отменена";
|
||||
ReservationDetails = $"Книга: {value.BookId?.Title}\n" +
|
||||
$"Читатель: {value.ReaderId?.Full_name}\n" +
|
||||
$"Дата бронирования: {value.Reservation_date:dd.MM.yyyy}\n" +
|
||||
$"Истекает: {value.Expiry_date:dd.MM.yyyy}\n" +
|
||||
$"Статус: {activeStr}";
|
||||
IsCancelReservationEnabled = value.is_active == 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ReservationDetails = "Выберите бронь из списка.";
|
||||
IsCancelReservationEnabled = false;
|
||||
}
|
||||
ReservationStatus = string.Empty;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void CancelReservation()
|
||||
{
|
||||
if (SelectedReservation == null) return;
|
||||
|
||||
if (DatabaseService.CancelReservation(SelectedReservation.Id))
|
||||
{
|
||||
RefreshReservations();
|
||||
ReservationStatusColor = "Green";
|
||||
ReservationStatus = "Бронирование успешно отменено!";
|
||||
}
|
||||
else
|
||||
{
|
||||
ReservationStatusColor = "Red";
|
||||
ReservationStatus = "Ошибка при отмене бронирования.";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,20 +1,55 @@
|
|||
using System;
|
||||
using System.Data;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.CompilerServices;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using System;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using CourseProject1125.DB;
|
||||
using Tmds.DBus.Protocol;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Connection = CourseProject1125.DB.Connection;
|
||||
|
||||
namespace CourseProject1125.ViewModels
|
||||
{
|
||||
public partial class MainWindowViewModel
|
||||
public partial class MainWindowViewModel : ViewModelBase
|
||||
{
|
||||
[ObservableProperty]
|
||||
private string _loginInput = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _passwordInput = string.Empty;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _errorMessage = string.Empty;
|
||||
|
||||
public Action<int>? OnLoginSuccess { get; set; }
|
||||
|
||||
[RelayCommand]
|
||||
private void Login()
|
||||
{
|
||||
ErrorMessage = string.Empty;
|
||||
|
||||
var login = LoginInput?.Trim() ?? string.Empty;
|
||||
var password = PasswordInput?.Trim() ?? string.Empty;
|
||||
|
||||
if (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(password))
|
||||
{
|
||||
ErrorMessage = "Пожалуйста, введите логин и пароль.";
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var user = DatabaseService.AuthenticateUser(login, password);
|
||||
if (user != null)
|
||||
{
|
||||
OnLoginSuccess?.Invoke(user.RoleId.id);
|
||||
}
|
||||
else
|
||||
{
|
||||
ErrorMessage = "Неверный логин или пароль.";
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ErrorMessage = $"Ошибка: {ex.Message}";
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void FullExit()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,357 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.Input;
|
||||
using CourseProject1125.DB;
|
||||
using CourseProject1125.Models;
|
||||
|
||||
namespace CourseProject1125.ViewModels
|
||||
{
|
||||
public partial class ReaderWindowViewModel : ViewModelBase
|
||||
{
|
||||
private List<Book> _allBooks = new();
|
||||
private List<Book_copies> _allCopies = new();
|
||||
|
||||
public Action? OnLogoutRequested { get; set; }
|
||||
|
||||
public string ReaderName => UserSession.UserName;
|
||||
|
||||
[ObservableProperty]
|
||||
[NotifyPropertyChangedFor(nameof(CatalogTabBackground), nameof(CatalogTabForeground), nameof(IsCatalogVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(MyLoansTabBackground), nameof(MyLoansTabForeground), nameof(IsMyLoansVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(ReturnBookTabBackground), nameof(ReturnBookTabForeground), nameof(IsReturnBookVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(MyFinesTabBackground), nameof(MyFinesTabForeground), nameof(IsMyFinesVisible))]
|
||||
[NotifyPropertyChangedFor(nameof(MyReservationsTabBackground), nameof(MyReservationsTabForeground), nameof(IsMyReservationsVisible))]
|
||||
private string _currentTab = "Catalog";
|
||||
|
||||
[ObservableProperty] private string _activeTabHeader = "Каталог и бронирование книг";
|
||||
|
||||
public string CatalogTabBackground => CurrentTab == "Catalog" ? "LightGray" : "Transparent";
|
||||
public string CatalogTabForeground => CurrentTab == "Catalog" ? "Black" : "Gray";
|
||||
public bool IsCatalogVisible => CurrentTab == "Catalog";
|
||||
|
||||
public string MyLoansTabBackground => CurrentTab == "MyLoans" ? "LightGray" : "Transparent";
|
||||
public string MyLoansTabForeground => CurrentTab == "MyLoans" ? "Black" : "Gray";
|
||||
public bool IsMyLoansVisible => CurrentTab == "MyLoans";
|
||||
|
||||
public string ReturnBookTabBackground => CurrentTab == "ReturnBook" ? "LightGray" : "Transparent";
|
||||
public string ReturnBookTabForeground => CurrentTab == "ReturnBook" ? "Black" : "Gray";
|
||||
public bool IsReturnBookVisible => CurrentTab == "ReturnBook";
|
||||
|
||||
public string MyFinesTabBackground => CurrentTab == "MyFines" ? "LightGray" : "Transparent";
|
||||
public string MyFinesTabForeground => CurrentTab == "MyFines" ? "Black" : "Gray";
|
||||
public bool IsMyFinesVisible => CurrentTab == "MyFines";
|
||||
|
||||
public string MyReservationsTabBackground => CurrentTab == "MyReservations" ? "LightGray" : "Transparent";
|
||||
public string MyReservationsTabForeground => CurrentTab == "MyReservations" ? "Black" : "Gray";
|
||||
public bool IsMyReservationsVisible => CurrentTab == "MyReservations";
|
||||
|
||||
[ObservableProperty] private string _searchQuery = string.Empty;
|
||||
[ObservableProperty] private List<Book> _booksList = new();
|
||||
[ObservableProperty] private Book? _selectedBook;
|
||||
[ObservableProperty] private string _catalogBookTitle = "Выберите книгу из списка.";
|
||||
[ObservableProperty] private string _catalogBookAuthor = string.Empty;
|
||||
[ObservableProperty] private string _catalogBookDesc = string.Empty;
|
||||
[ObservableProperty] private string _catalogAvailability = "Доступно копий: -";
|
||||
[ObservableProperty] private string _catalogStatus = string.Empty;
|
||||
[ObservableProperty] private string _catalogStatusColor = "Black";
|
||||
[ObservableProperty] private bool _isReserveEnabled;
|
||||
|
||||
[ObservableProperty] private List<Loan> _myLoansList = new();
|
||||
|
||||
[ObservableProperty] private List<Loan> _activeLoansList = new();
|
||||
[ObservableProperty] private Loan? _selectedReturnLoan;
|
||||
[ObservableProperty] private string _returnBookDetails = "Выберите выданную книгу из списка слева.";
|
||||
[ObservableProperty] private string _returnBookStatus = string.Empty;
|
||||
[ObservableProperty] private string _returnBookStatusColor = "Black";
|
||||
[ObservableProperty] private bool _isSubmitReturnEnabled;
|
||||
|
||||
[ObservableProperty] private List<Fine> _myFinesList = new();
|
||||
[ObservableProperty] private Fine? _selectedFine;
|
||||
[ObservableProperty] private string _myFineDetails = "Выберите штраф из списка слева.";
|
||||
[ObservableProperty] private string _myFineStatus = string.Empty;
|
||||
[ObservableProperty] private string _myFineStatusColor = "Black";
|
||||
[ObservableProperty] private bool _isPayMyFineEnabled;
|
||||
|
||||
[ObservableProperty] private List<Reservation> _myReservationsList = new();
|
||||
[ObservableProperty] private Reservation? _selectedReservation;
|
||||
[ObservableProperty] private string _myReservationDetails = "Выберите бронь из списка.";
|
||||
[ObservableProperty] private string _myReservationStatus = string.Empty;
|
||||
[ObservableProperty] private string _myReservationStatusColor = "Black";
|
||||
[ObservableProperty] private bool _isCancelMyReservationEnabled;
|
||||
|
||||
public ReaderWindowViewModel()
|
||||
{
|
||||
LoadAllData();
|
||||
ShowTab("Catalog");
|
||||
}
|
||||
|
||||
private void LoadAllData()
|
||||
{
|
||||
_allBooks = DatabaseService.GetBooks();
|
||||
_allCopies = DatabaseService.GetBookCopies();
|
||||
|
||||
RefreshCatalog();
|
||||
RefreshMyLoans();
|
||||
RefreshMyFines();
|
||||
RefreshMyReservations();
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ShowTab(string tabName)
|
||||
{
|
||||
CurrentTab = tabName;
|
||||
|
||||
switch (tabName)
|
||||
{
|
||||
case "Catalog":
|
||||
ActiveTabHeader = "Каталог и бронирование книг";
|
||||
LoadAllData();
|
||||
break;
|
||||
case "MyLoans":
|
||||
ActiveTabHeader = "Мои выданные книги";
|
||||
RefreshMyLoans();
|
||||
break;
|
||||
case "ReturnBook":
|
||||
ActiveTabHeader = "Сдать книгу";
|
||||
RefreshReturnLoans();
|
||||
break;
|
||||
case "MyFines":
|
||||
ActiveTabHeader = "Мои штрафы";
|
||||
RefreshMyFines();
|
||||
break;
|
||||
case "MyReservations":
|
||||
ActiveTabHeader = "Мои бронирования";
|
||||
RefreshMyReservations();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void Logout()
|
||||
{
|
||||
OnLogoutRequested?.Invoke();
|
||||
}
|
||||
|
||||
private void RefreshCatalog()
|
||||
{
|
||||
BooksList = _allBooks;
|
||||
SelectedBook = null;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void Search()
|
||||
{
|
||||
var query = SearchQuery?.Trim() ?? string.Empty;
|
||||
if (string.IsNullOrEmpty(query))
|
||||
{
|
||||
BooksList = _allBooks;
|
||||
}
|
||||
else
|
||||
{
|
||||
BooksList = _allBooks.Where(b =>
|
||||
b.Title.Contains(query, StringComparison.OrdinalIgnoreCase) ||
|
||||
(b.AuthorId?.Name != null && b.AuthorId.Name.Contains(query, StringComparison.OrdinalIgnoreCase)) ||
|
||||
(b.Isbn != null && b.Isbn.Contains(query, StringComparison.OrdinalIgnoreCase))
|
||||
).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
partial void OnSelectedBookChanged(Book? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
CatalogBookTitle = value.Title;
|
||||
CatalogBookAuthor = $"Автор: {value.AuthorId?.Name} | ISBN: {value.Isbn} | Год: {value.Year_published}";
|
||||
CatalogBookDesc = string.IsNullOrEmpty(value.Description) ? "Описание отсутствует." : value.Description;
|
||||
|
||||
int totalCopies = _allCopies.Count(c => c.BookId?.Id == value.Id);
|
||||
int availableCopies = _allCopies.Count(c => c.BookId?.Id == value.Id && string.Equals(c.Status, "available", StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
CatalogAvailability = $"Всего экземпляров: {totalCopies} | Доступно для выдачи: {availableCopies}";
|
||||
IsReserveEnabled = availableCopies > 0;
|
||||
CatalogStatus = string.Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
CatalogBookTitle = "Выберите книгу из списка.";
|
||||
CatalogBookAuthor = string.Empty;
|
||||
CatalogBookDesc = string.Empty;
|
||||
CatalogAvailability = "Доступно копий: -";
|
||||
IsReserveEnabled = false;
|
||||
CatalogStatus = string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ReserveBook()
|
||||
{
|
||||
if (SelectedBook == null) return;
|
||||
|
||||
int readerId = UserSession.UserId;
|
||||
DateTime expiryDate = DateTime.Now.AddDays(3);
|
||||
|
||||
if (DatabaseService.CreateReservation(SelectedBook.Id, readerId, expiryDate))
|
||||
{
|
||||
_allCopies = DatabaseService.GetBookCopies();
|
||||
|
||||
var currentBook = SelectedBook;
|
||||
SelectedBook = null;
|
||||
SelectedBook = currentBook;
|
||||
|
||||
CatalogStatusColor = "Green";
|
||||
CatalogStatus = "Успешно! Книга забронирована на 3 дня. Заберите её на стойке выдачи.";
|
||||
}
|
||||
else
|
||||
{
|
||||
CatalogStatusColor = "Red";
|
||||
CatalogStatus = "Ошибка создания бронирования.";
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshMyLoans()
|
||||
{
|
||||
int readerId = UserSession.UserId;
|
||||
var allLoans = DatabaseService.GetLoans();
|
||||
MyLoansList = allLoans.Where(l => l.ReaderId?.Id == readerId).ToList();
|
||||
}
|
||||
|
||||
private void RefreshReturnLoans()
|
||||
{
|
||||
int readerId = UserSession.UserId;
|
||||
var allLoans = DatabaseService.GetLoans();
|
||||
ActiveLoansList = allLoans.Where(l => l.ReaderId?.Id == readerId && string.Equals(l.Status, "active", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
SelectedReturnLoan = null;
|
||||
}
|
||||
|
||||
partial void OnSelectedReturnLoanChanged(Loan? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
ReturnBookDetails = $"Книга: {value.CopyId?.BookId?.Title}\n" +
|
||||
$"Инвентарный номер: {value.CopyId?.Inventory_number}\n" +
|
||||
$"Дата выдачи: {value.Issue_date:dd.MM.yyyy}\n" +
|
||||
$"Срок сдачи: {value.Due_date:dd.MM.yyyy}";
|
||||
IsSubmitReturnEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ReturnBookDetails = "Выберите выданную книгу из списка слева.";
|
||||
IsSubmitReturnEnabled = false;
|
||||
}
|
||||
ReturnBookStatus = string.Empty;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void SubmitReturn()
|
||||
{
|
||||
if (SelectedReturnLoan == null) return;
|
||||
|
||||
if (DatabaseService.RequestBookReturn(SelectedReturnLoan.Id))
|
||||
{
|
||||
RefreshReturnLoans();
|
||||
RefreshMyLoans();
|
||||
ReturnBookStatusColor = "Green";
|
||||
ReturnBookStatus = "Запрос на возврат успешно отправлен. Пожалуйста, передайте книгу библиотекарю для подтверждения.";
|
||||
}
|
||||
else
|
||||
{
|
||||
ReturnBookStatusColor = "Red";
|
||||
ReturnBookStatus = "Ошибка при отправке запроса на возврат.";
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshMyFines()
|
||||
{
|
||||
int readerId = UserSession.UserId;
|
||||
var allFines = DatabaseService.GetFines();
|
||||
MyFinesList = allFines.Where(f => f.LoanId?.ReaderId?.Id == readerId && f.Is_paid == 0).ToList();
|
||||
|
||||
SelectedFine = null;
|
||||
}
|
||||
|
||||
partial void OnSelectedFineChanged(Fine? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
MyFineDetails = $"Книга: {value.LoanId?.CopyId?.BookId?.Title}\n" +
|
||||
$"Инвентарный номер: {value.LoanId?.CopyId?.Inventory_number}\n" +
|
||||
$"Сумма штрафа: {value.Amount:N2} руб.\n" +
|
||||
$"Дата начисления: {value.Created_at:dd.MM.yyyy}";
|
||||
IsPayMyFineEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
MyFineDetails = "Выберите штраф из списка слева.";
|
||||
IsPayMyFineEnabled = false;
|
||||
}
|
||||
MyFineStatus = string.Empty;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void PayMyFine()
|
||||
{
|
||||
if (SelectedFine == null) return;
|
||||
|
||||
if (DatabaseService.PayFine(SelectedFine.Id))
|
||||
{
|
||||
RefreshMyFines();
|
||||
MyFineStatusColor = "Green";
|
||||
MyFineStatus = "Штраф успешно оплачен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
MyFineStatusColor = "Red";
|
||||
MyFineStatus = "Ошибка при оплате штрафа.";
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshMyReservations()
|
||||
{
|
||||
int readerId = UserSession.UserId;
|
||||
var allRes = DatabaseService.GetReservations();
|
||||
MyReservationsList = allRes.Where(r => r.ReaderId?.Id == readerId && r.is_active == 1 && r.Expiry_date >= DateTime.Now).ToList();
|
||||
|
||||
SelectedReservation = null;
|
||||
}
|
||||
|
||||
partial void OnSelectedReservationChanged(Reservation? value)
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
string activeStr = value.is_active == 1 ? "Активна" : "Неактивна/Отменена";
|
||||
MyReservationDetails = $"Книга: {value.BookId?.Title}\n" +
|
||||
$"Дата брони: {value.Reservation_date:dd.MM.yyyy}\n" +
|
||||
$"Истекает: {value.Expiry_date:dd.MM.yyyy}\n" +
|
||||
$"Статус: {activeStr}";
|
||||
IsCancelMyReservationEnabled = value.is_active == 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
MyReservationDetails = "Выберите бронь из списка.";
|
||||
IsCancelMyReservationEnabled = false;
|
||||
}
|
||||
MyReservationStatus = string.Empty;
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void CancelMyReservation()
|
||||
{
|
||||
if (SelectedReservation == null) return;
|
||||
|
||||
if (DatabaseService.CancelReservation(SelectedReservation.Id))
|
||||
{
|
||||
RefreshMyReservations();
|
||||
MyReservationStatusColor = "Green";
|
||||
MyReservationStatus = "Бронирование успешно отменено!";
|
||||
}
|
||||
else
|
||||
{
|
||||
MyReservationStatusColor = "Red";
|
||||
MyReservationStatus = "Ошибка при отмене бронирования.";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,50 +1,50 @@
|
|||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:CourseProject1125.ViewModels"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d" d:DesignWidth="1100" d:DesignHeight="650"
|
||||
x:Class="CourseProject1125.Views.AdminWindow"
|
||||
x:DataType="vm:AdminWindowViewModel"
|
||||
Title="Панель администратора - Библиотека"
|
||||
Width="1100" Height="650"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
Background="#0f172a">
|
||||
Background="White">
|
||||
|
||||
<Grid ColumnDefinitions="240, *">
|
||||
<Border Grid.Column="0" Background="#1e293b" BorderBrush="#334155" BorderThickness="0,0,1,0" Padding="15">
|
||||
<Border Grid.Column="0" Background="LightGray" BorderBrush="Gray" BorderThickness="0,0,1,0" Padding="15">
|
||||
<Grid RowDefinitions="Auto, *, Auto">
|
||||
<StackPanel Grid.Row="0" Margin="0,10,0,30">
|
||||
<TextBlock Text="БИБЛИОТЕКА" Foreground="#38bdf8" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" LetterSpacing="1"/>
|
||||
<TextBlock Text="Панель администратора" Foreground="#94a3b8" FontSize="11" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtAdminName" Foreground="#cbd5e1" FontSize="12" FontWeight="SemiBold" HorizontalAlignment="Center" Margin="0,10,0,0"/>
|
||||
<TextBlock Text="БИБЛИОТЕКА" Foreground="Black" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" LetterSpacing="1"/>
|
||||
<TextBlock Text="Панель администратора" Foreground="Black" FontSize="11" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtAdminName" Text="{Binding AdminName}" Foreground="Black" FontSize="12" FontWeight="SemiBold" HorizontalAlignment="Center" Margin="0,10,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
|
||||
<StackPanel Grid.Row="1">
|
||||
<Button Name="BtnTabBooks" Content=" Книги" Click="BtnTab_Click" Tag="Books" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabAuthors" Content=" Авторы" Click="BtnTab_Click" Tag="Authors" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabCopies" Content=" Экземпляры" Click="BtnTab_Click" Tag="Copies" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabUsers" Content=" Пользователи" Click="BtnTab_Click" Tag="Users" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabReports" Content=" Отчеты" Click="BtnTab_Click" Tag="Reports" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabBooks" Content=" Книги" Command="{Binding ShowTabCommand}" CommandParameter="Books" Background="{Binding BooksTabBackground}" Foreground="{Binding BooksTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabAuthors" Content=" Авторы" Command="{Binding ShowTabCommand}" CommandParameter="Authors" Background="{Binding AuthorsTabBackground}" Foreground="{Binding AuthorsTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabCopies" Content=" Экземпляры" Command="{Binding ShowTabCommand}" CommandParameter="Copies" Background="{Binding CopiesTabBackground}" Foreground="{Binding CopiesTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabUsers" Content=" Пользователи" Command="{Binding ShowTabCommand}" CommandParameter="Users" Background="{Binding UsersTabBackground}" Foreground="{Binding UsersTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabReports" Content=" Отчеты" Command="{Binding ShowTabCommand}" CommandParameter="Reports" Background="{Binding ReportsTabBackground}" Foreground="{Binding ReportsTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<Button Grid.Row="3" Content=" Выйти из системы" Click="BtnLogout_Click" HorizontalAlignment="Stretch" Height="40" Background="#ef4444" Foreground="White" FontWeight="Bold" CornerRadius="6" HorizontalContentAlignment="Center"/>
|
||||
<Button Grid.Row="3" Content=" Выйти из системы" Command="{Binding LogoutCommand}" HorizontalAlignment="Stretch" Height="40" Background="Red" Foreground="White" FontWeight="Bold" CornerRadius="6" HorizontalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Grid Grid.Column="1" RowDefinitions="Auto, *">
|
||||
<Border Grid.Row="0" Background="#1e293b" Height="60" Padding="20,0" BorderBrush="#334155" BorderThickness="0,0,0,1">
|
||||
<Border Grid.Row="0" Background="LightGray" Height="60" Padding="20,0" BorderBrush="Gray" BorderThickness="0,0,0,1">
|
||||
<Grid ColumnDefinitions="*, Auto">
|
||||
<TextBlock Name="TxtActiveTabHeader" Text="📚 Управление книгами" Foreground="White" FontSize="18" FontWeight="Bold" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="Роль: Администратор" Foreground="#94a3b8" FontSize="12" VerticalAlignment="Center"/>
|
||||
<TextBlock Name="TxtActiveTabHeader" Text="{Binding ActiveTabHeader}" Foreground="Black" FontSize="18" FontWeight="Bold" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="Роль: Администратор" Foreground="Black" FontSize="12" VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Grid Grid.Row="1" Margin="20">
|
||||
<Grid Name="GridBooks" ColumnDefinitions="*, 320">
|
||||
<Grid Name="GridBooks" ColumnDefinitions="*, 320" IsVisible="{Binding IsBooksVisible}">
|
||||
<Grid Grid.Column="0" RowDefinitions="*, Auto">
|
||||
<DataGrid Name="DgBooks" Grid.Row="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b" SelectionChanged="DgBooks_SelectionChanged">
|
||||
<DataGrid Name="DgBooks" ItemsSource="{Binding BooksList}" SelectedItem="{Binding SelectedBook, Mode=TwoWay}" Grid.Row="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="ID" Binding="{Binding Id}" Width="50"/>
|
||||
<DataGridTextColumn Header="Название" Binding="{Binding Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Автор" Binding="{Binding AuthorId.Name}" Width="1.5*"/>
|
||||
<DataGridTextColumn Header="ISBN" Binding="{Binding Isbn}" Width="1*"/>
|
||||
|
|
@ -52,115 +52,122 @@
|
|||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1">
|
||||
<ScrollViewer>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Редактирование Книги" Foreground="#38bdf8" FontSize="15" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<TextBlock Text="Редактирование Книги" Foreground="Black" FontSize="15" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Название" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtBookTitle" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Название" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtBookTitle" Text="{Binding BookTitle, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Автор" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<ComboBox Name="CbBookAuthor" HorizontalAlignment="Stretch" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Автор (поиск)" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtSearchBookAuthor" Text="{Binding SearchBookAuthorText, Mode=TwoWay}" Height="34" CornerRadius="4" Watermark="Начните вводить имя автора..."/>
|
||||
<ListBox Name="LbBookAuthors" ItemsSource="{Binding FilteredBookAuthors}" SelectedItem="{Binding SelectedBookAuthor, Mode=TwoWay}" Height="80" Margin="0,2,0,0" CornerRadius="4" Background="White" BorderBrush="LightGray" BorderThickness="1">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Name}" Foreground="Black" FontSize="12"/>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="ISBN" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtBookIsbn" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="ISBN" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtBookIsbn" Text="{Binding BookIsbn, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Год издания" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtBookYear" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Год издания" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtBookYear" Text="{Binding BookYear, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Описание" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtBookDesc" Height="80" TextWrapping="Wrap" AcceptsReturn="True" CornerRadius="4"/>
|
||||
<TextBlock Text="Описание" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtBookDesc" Text="{Binding BookDesc, Mode=TwoWay}" Height="80" TextWrapping="Wrap" AcceptsReturn="True" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel Margin="0,10,0,0">
|
||||
<Button Content=" Добавить" Click="BtnAddBook_Click" Background="#22c55e" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Сохранить" Click="BtnEditBook_Click" Background="#3b82f6" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Удалить" Click="BtnDeleteBook_Click" Background="#ef4444" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Очистить поля" Click="BtnClearBook_Click" Background="#64748b" Foreground="White" HorizontalAlignment="Stretch" Height="34" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<TextBlock Name="TxtBookStatus" Foreground="#ef4444" FontSize="12" Margin="0,10,0,0" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
<Button Content=" Добавить" Command="{Binding AddBookCommand}" Background="Green" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Сохранить" Command="{Binding EditBookCommand}" Background="Blue" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Удалить" Command="{Binding DeleteBookCommand}" Background="Red" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Очистить поля" Command="{Binding ClearBookCommand}" Background="Gray" Foreground="White" HorizontalAlignment="Stretch" Height="34" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<TextBlock Name="TxtBookStatus" Text="{Binding BookStatus}" Foreground="{Binding BookStatusColor}" FontSize="12" Margin="0,10,0,0" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridAuthors" ColumnDefinitions="*, 320" IsVisible="False">
|
||||
<DataGrid Name="DgAuthors" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b" SelectionChanged="DgAuthors_SelectionChanged">
|
||||
<Grid Name="GridAuthors" ColumnDefinitions="*, 320" IsVisible="{Binding IsAuthorsVisible}">
|
||||
<DataGrid Name="DgAuthors" ItemsSource="{Binding AuthorsList}" SelectedItem="{Binding SelectedAuthor, Mode=TwoWay}" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="ID" Binding="{Binding Id}" Width="80"/>
|
||||
<DataGridTextColumn Header="Имя Автора" Binding="{Binding Name}" Width="*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Редактирование Автора" Foreground="#38bdf8" FontSize="15" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<TextBlock Text="Редактирование Автора" Foreground="Black" FontSize="15" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Имя Автора" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtAuthorName" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Имя Автора" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtAuthorName" Text="{Binding AuthorName, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel Margin="0,10,0,0">
|
||||
<Button Content=" Добавить" Click="BtnAddAuthor_Click" Background="#22c55e" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Сохранить" Click="BtnEditAuthor_Click" Background="#3b82f6" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Удалить" Click="BtnDeleteAuthor_Click" Background="#ef4444" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Очистить поля" Click="BtnClearAuthor_Click" Background="#64748b" Foreground="White" HorizontalAlignment="Stretch" Height="34" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<TextBlock Name="TxtAuthorStatus" Foreground="#ef4444" FontSize="12" Margin="0,10,0,0" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
<Button Content=" Добавить" Command="{Binding AddAuthorCommand}" Background="Green" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Сохранить" Command="{Binding EditAuthorCommand}" Background="Blue" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Удалить" Command="{Binding DeleteAuthorCommand}" Background="Red" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Очистить поля" Command="{Binding ClearAuthorCommand}" Background="Gray" Foreground="White" HorizontalAlignment="Stretch" Height="34" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<TextBlock Name="TxtAuthorStatus" Text="{Binding AuthorStatus}" Foreground="{Binding AuthorStatusColor}" FontSize="12" Margin="0,10,0,0" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridCopies" ColumnDefinitions="*, 320" IsVisible="False">
|
||||
<DataGrid Name="DgCopies" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b" SelectionChanged="DgCopies_SelectionChanged">
|
||||
<Grid Name="GridCopies" ColumnDefinitions="*, 320" IsVisible="{Binding IsCopiesVisible}">
|
||||
<DataGrid Name="DgCopies" ItemsSource="{Binding CopiesList}" SelectedItem="{Binding SelectedCopy, Mode=TwoWay}" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="ID" Binding="{Binding Id}" Width="50"/>
|
||||
<DataGridTextColumn Header="Книга" Binding="{Binding BookId.Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Инв. номер" Binding="{Binding Inventory_number}" Width="1*"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding Status}" Width="100"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding StatusText}" Width="100"/>
|
||||
<DataGridTextColumn Header="Полка" Binding="{Binding Shelf_location}" Width="100"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Редактирование Экземпляра" Foreground="#38bdf8" FontSize="15" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<TextBlock Text="Редактирование Экземпляра" Foreground="Black" FontSize="15" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Книга" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<ComboBox Name="CbCopyBook" HorizontalAlignment="Stretch" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Книга (поиск)" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtSearchCopyBook" Text="{Binding SearchCopyBookText, Mode=TwoWay}" Height="34" CornerRadius="4" Watermark="Начните вводить название книги..."/>
|
||||
<ListBox Name="LbCopyBooks" ItemsSource="{Binding FilteredCopyBooks}" SelectedItem="{Binding SelectedCopyBook, Mode=TwoWay}" Height="80" Margin="0,2,0,0" CornerRadius="4" Background="White" BorderBrush="LightGray" BorderThickness="1">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Title}" Foreground="Black" FontSize="12"/>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Инвентарный номер" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtCopyInv" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Инвентарный номер" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtCopyInv" Text="{Binding CopyInv, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Статус" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<ComboBox Name="CbCopyStatus" HorizontalAlignment="Stretch" Height="34" CornerRadius="4">
|
||||
<ComboBoxItem Content="available"/>
|
||||
<ComboBoxItem Content="issued"/>
|
||||
<ComboBoxItem Content="repair"/>
|
||||
</ComboBox>
|
||||
<TextBlock Text="Статус (available - доступна / issued - выдана / repair - в ремонте)" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtCopyStatusField" Text="{Binding CopyStatusField, Mode=TwoWay}" Height="34" CornerRadius="4" Watermark="available (доступна)"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Расположение (Полка)" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtCopyShelf" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Расположение (Полка)" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtCopyShelf" Text="{Binding CopyShelf, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel Margin="0,10,0,0">
|
||||
<Button Content=" Добавить" Click="BtnAddCopy_Click" Background="#22c55e" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Сохранить" Click="BtnEditCopy_Click" Background="#3b82f6" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Удалить" Click="BtnDeleteCopy_Click" Background="#ef4444" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Очистить поля" Click="BtnClearCopy_Click" Background="#64748b" Foreground="White" HorizontalAlignment="Stretch" Height="34" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<TextBlock Name="TxtCopyStatus" Foreground="#ef4444" FontSize="12" Margin="0,10,0,0" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
<Button Content=" Добавить" Command="{Binding AddCopyCommand}" Background="Green" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Сохранить" Command="{Binding EditCopyCommand}" Background="Blue" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Удалить" Command="{Binding DeleteCopyCommand}" Background="Red" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Очистить поля" Command="{Binding ClearCopyCommand}" Background="Gray" Foreground="White" HorizontalAlignment="Stretch" Height="34" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<TextBlock Name="TxtCopyStatus" Text="{Binding CopyStatus}" Foreground="{Binding CopyStatusColor}" FontSize="12" Margin="0,10,0,0" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridUsers" ColumnDefinitions="*, 320" IsVisible="False">
|
||||
<DataGrid Name="DgUsers" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b" SelectionChanged="DgUsers_SelectionChanged">
|
||||
<Grid Name="GridUsers" ColumnDefinitions="*, 320" IsVisible="{Binding IsUsersVisible}">
|
||||
<DataGrid Name="DgUsers" ItemsSource="{Binding UsersList}" SelectedItem="{Binding SelectedUser, Mode=TwoWay}" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="ID" Binding="{Binding Id}" Width="50"/>
|
||||
<DataGridTextColumn Header="ФИО" Binding="{Binding Full_name}" Width="1.5*"/>
|
||||
<DataGridTextColumn Header="Логин" Binding="{Binding Login}" Width="1*"/>
|
||||
<DataGridTextColumn Header="Роль" Binding="{Binding RoleId.Name}" Width="100"/>
|
||||
|
|
@ -168,75 +175,95 @@
|
|||
<DataGridTextColumn Header="Телефон" Binding="{Binding Phone}" Width="100"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1">
|
||||
<ScrollViewer>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Редактирование Пользователя" Foreground="#38bdf8" FontSize="15" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<TextBlock Text="Редактирование Пользователя" Foreground="Black" FontSize="15" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<StackPanel>
|
||||
<TextBlock Text="ФИО" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtUserFullName" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="ФИО" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtUserFullName" Text="{Binding UserFullName, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Роль" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<ComboBox Name="CbUserRole" HorizontalAlignment="Stretch" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Роль (поиск)" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtSearchUserRole" Text="{Binding SearchUserRoleText, Mode=TwoWay}" Height="34" CornerRadius="4" Watermark="Начните вводить название роли..."/>
|
||||
<ListBox Name="LbUserRoles" ItemsSource="{Binding FilteredUserRoles}" SelectedItem="{Binding SelectedUserRole, Mode=TwoWay}" Height="60" Margin="0,2,0,0" CornerRadius="4" Background="White" BorderBrush="LightGray" BorderThickness="1">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Name}" Foreground="Black" FontSize="12"/>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Логин" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtUserLogin" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Логин" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtUserLogin" Text="{Binding UserLogin, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Пароль" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtUserPass" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Пароль" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtUserPass" Text="{Binding UserPass, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Email" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtUserEmail" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Email" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtUserEmail" Text="{Binding UserEmail, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel>
|
||||
<TextBlock Text="Телефон" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtUserPhone" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Телефон" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtUserPhone" Text="{Binding UserPhone, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
<StackPanel Margin="0,10,0,0">
|
||||
<Button Content=" Добавить" Click="BtnAddUser_Click" Background="#22c55e" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Сохранить" Click="BtnEditUser_Click" Background="#3b82f6" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Удалить" Click="BtnDeleteUser_Click" Background="#ef4444" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Очистить поля" Click="BtnClearUser_Click" Background="#64748b" Foreground="White" HorizontalAlignment="Stretch" Height="34" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<TextBlock Name="TxtUserStatus" Foreground="#ef4444" FontSize="12" Margin="0,10,0,0" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
<Button Content=" Добавить" Command="{Binding AddUserCommand}" Background="Green" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Сохранить" Command="{Binding EditUserCommand}" Background="Blue" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Удалить" Command="{Binding DeleteUserCommand}" Background="Red" Foreground="White" HorizontalAlignment="Stretch" Height="36" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<Button Content=" Очистить поля" Command="{Binding ClearUserCommand}" Background="Gray" Foreground="White" HorizontalAlignment="Stretch" Height="34" CornerRadius="4" HorizontalContentAlignment="Center"/>
|
||||
<TextBlock Name="TxtUserStatus" Text="{Binding UserStatus}" Foreground="{Binding UserStatusColor}" FontSize="12" Margin="0,10,0,0" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridReports" RowDefinitions="Auto, *" IsVisible="False">
|
||||
<Grid Name="GridReports" RowDefinitions="Auto, *" IsVisible="{Binding IsReportsVisible}">
|
||||
<Grid Grid.Row="0" ColumnDefinitions="*, *, Auto">
|
||||
<Border Grid.Column="0" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1">
|
||||
<Border Grid.Column="0" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Собрано штрафов" Foreground="#94a3b8" FontSize="12" FontWeight="SemiBold"/>
|
||||
<TextBlock Name="TxtFinesCollected" Text="0.00 руб." Foreground="#22c55e" FontSize="22" FontWeight="Bold"/>
|
||||
<TextBlock Text="Собрано штрафов" Foreground="Black" FontSize="12" FontWeight="SemiBold"/>
|
||||
<TextBlock Name="TxtFinesCollected" Text="{Binding FinesCollected}" Foreground="Green" FontSize="22" FontWeight="Bold"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Невыплаченные штрафы" Foreground="#94a3b8" FontSize="12" FontWeight="SemiBold"/>
|
||||
<TextBlock Name="TxtFinesUnpaid" Text="0.00 руб." Foreground="#ef4444" FontSize="22" FontWeight="Bold"/>
|
||||
<TextBlock Text="Невыплаченные штрафы" Foreground="Black" FontSize="12" FontWeight="SemiBold"/>
|
||||
<TextBlock Name="TxtFinesUnpaid" Text="{Binding FinesUnpaid}" Foreground="Red" FontSize="22" FontWeight="Bold"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Button Grid.Column="2" Content="🔄 Обновить отчеты" Click="BtnRefreshReports_Click" Background="#3b82f6" Foreground="White" Height="60" Width="160" FontWeight="Bold" CornerRadius="8" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
<Button Grid.Column="2" Content="🔄 Обновить отчеты" Command="{Binding RefreshReportsCommand}" Background="Blue" Foreground="White" Height="60" Width="160" FontWeight="Bold" CornerRadius="8" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" ColumnDefinitions="*, *">
|
||||
<Border Grid.Column="0" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1">
|
||||
<Border Grid.Column="0" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1">
|
||||
<Grid RowDefinitions="Auto, *">
|
||||
<TextBlock Grid.Row="0" Text="Самые популярные книги (Топ 5)" Foreground="#38bdf8" FontSize="15" FontWeight="Bold" Margin="0,0,0,10"/>
|
||||
<DataGrid Name="DgPopularBooks" Grid.Row="1" AutoGenerateColumns="True" IsReadOnly="True" GridLinesVisibility="All" Background="Transparent"/>
|
||||
<TextBlock Grid.Row="0" Text="Самые популярные книги (Топ 5)" Foreground="Black" FontSize="15" FontWeight="Bold" Margin="0,0,0,10"/>
|
||||
<DataGrid Name="DgPopularBooks" ItemsSource="{Binding PopularBooksList}" Grid.Row="1" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" Background="Transparent">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Название книги" Binding="{Binding Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Кол-во выдач" Binding="{Binding BorrowCount}" Width="1*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1">
|
||||
<Grid RowDefinitions="Auto, *">
|
||||
<TextBlock Grid.Row="0" Text="Просроченные выдачи книг" Foreground="#ef4444" FontSize="15" FontWeight="Bold" Margin="0,0,0,10"/>
|
||||
<DataGrid Name="DgOverdueLoans" Grid.Row="1" AutoGenerateColumns="True" IsReadOnly="True" GridLinesVisibility="All" Background="Transparent"/>
|
||||
<TextBlock Grid.Row="0" Text="Просроченные выдачи книг" Foreground="Red" FontSize="15" FontWeight="Bold" Margin="0,0,0,10"/>
|
||||
<DataGrid Name="DgOverdueLoans" ItemsSource="{Binding OverdueLoansList}" Grid.Row="1" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" Background="Transparent">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Название книги" Binding="{Binding Title}" Width="1.5*"/>
|
||||
<DataGridTextColumn Header="Читатель" Binding="{Binding Reader}" Width="1.5*"/>
|
||||
<DataGridTextColumn Header="Дата выдачи" Binding="{Binding IssueDate}" Width="1*"/>
|
||||
<DataGridTextColumn Header="Срок сдачи" Binding="{Binding DueDate}" Width="1*"/>
|
||||
<DataGridTextColumn Header="Дней просрочки" Binding="{Binding OverdueDays}" Width="1*"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
|
|
|||
|
|
@ -1,609 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Media;
|
||||
using CourseProject1125.DB;
|
||||
using CourseProject1125.Models;
|
||||
using CourseProject1125.ViewModels;
|
||||
|
||||
namespace CourseProject1125.Views;
|
||||
|
||||
public partial class AdminWindow : Window
|
||||
namespace CourseProject1125.Views
|
||||
{
|
||||
private Author? _selectedAuthor;
|
||||
private Book? _selectedBook;
|
||||
private Book_copies? _selectedCopy;
|
||||
private User? _selectedUser;
|
||||
|
||||
private List<Author> _allAuthors = new();
|
||||
private List<Book> _allBooks = new();
|
||||
private List<Role> _allRoles = new();
|
||||
|
||||
public AdminWindow()
|
||||
public partial class AdminWindow : Window
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
// Show current logged-in user name
|
||||
TxtAdminName.Text = UserSession.UserName;
|
||||
|
||||
// Initialize view
|
||||
LoadAllData();
|
||||
ShowTab("Books");
|
||||
}
|
||||
|
||||
private void LoadAllData()
|
||||
{
|
||||
RefreshAuthors();
|
||||
RefreshBooks();
|
||||
RefreshCopies();
|
||||
RefreshUsers();
|
||||
RefreshReports();
|
||||
}
|
||||
|
||||
#region Tab Navigation
|
||||
private void BtnTab_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is Button btn && btn.Tag is string tabName)
|
||||
public AdminWindow()
|
||||
{
|
||||
ShowTab(tabName);
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowTab(string tabName)
|
||||
{
|
||||
// Set all tab panels visibility to false
|
||||
GridBooks.IsVisible = false;
|
||||
GridAuthors.IsVisible = false;
|
||||
GridCopies.IsVisible = false;
|
||||
GridUsers.IsVisible = false;
|
||||
GridReports.IsVisible = false;
|
||||
|
||||
// Set all buttons background and foreground to default
|
||||
ResetButtonStyles(BtnTabBooks);
|
||||
ResetButtonStyles(BtnTabAuthors);
|
||||
ResetButtonStyles(BtnTabCopies);
|
||||
ResetButtonStyles(BtnTabUsers);
|
||||
ResetButtonStyles(BtnTabReports);
|
||||
|
||||
switch (tabName)
|
||||
{
|
||||
case "Books":
|
||||
GridBooks.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "📚 Управление книгами";
|
||||
SetActiveButtonStyles(BtnTabBooks);
|
||||
RefreshBooks();
|
||||
break;
|
||||
case "Authors":
|
||||
GridAuthors.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "✍️ Управление авторами";
|
||||
SetActiveButtonStyles(BtnTabAuthors);
|
||||
RefreshAuthors();
|
||||
break;
|
||||
case "Copies":
|
||||
GridCopies.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "🔢 Управление экземплярами";
|
||||
SetActiveButtonStyles(BtnTabCopies);
|
||||
RefreshCopies();
|
||||
break;
|
||||
case "Users":
|
||||
GridUsers.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "👥 Управление пользователями";
|
||||
SetActiveButtonStyles(BtnTabUsers);
|
||||
RefreshUsers();
|
||||
break;
|
||||
case "Reports":
|
||||
GridReports.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "📊 Аналитические отчеты";
|
||||
SetActiveButtonStyles(BtnTabReports);
|
||||
RefreshReports();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void ResetButtonStyles(Button btn)
|
||||
{
|
||||
btn.Background = Brushes.Transparent;
|
||||
btn.Foreground = Brush.Parse("#94a3b8");
|
||||
}
|
||||
|
||||
private void SetActiveButtonStyles(Button btn)
|
||||
{
|
||||
btn.Background = Brush.Parse("#0f172a");
|
||||
btn.Foreground = Brush.Parse("#38bdf8");
|
||||
}
|
||||
|
||||
private void BtnLogout_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var mainWin = new MainWindow();
|
||||
mainWin.Show();
|
||||
this.Close();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CRUD Authors
|
||||
private void RefreshAuthors()
|
||||
{
|
||||
_allAuthors = DatabaseService.GetAuthors();
|
||||
DgAuthors.ItemsSource = null;
|
||||
DgAuthors.ItemsSource = _allAuthors;
|
||||
|
||||
// Update Author Combobox in Books Editor
|
||||
CbBookAuthor.ItemsSource = null;
|
||||
CbBookAuthor.ItemsSource = _allAuthors;
|
||||
}
|
||||
|
||||
private void DgAuthors_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (DgAuthors.SelectedItem is Author author)
|
||||
{
|
||||
_selectedAuthor = author;
|
||||
TxtAuthorName.Text = author.Name;
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnAddAuthor_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
string name = TxtAuthorName.Text?.Trim() ?? "";
|
||||
if (string.IsNullOrEmpty(name))
|
||||
{
|
||||
TxtAuthorStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtAuthorStatus.Text = "Имя автора не может быть пустым.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.AddAuthor(name))
|
||||
{
|
||||
RefreshAuthors();
|
||||
BtnClearAuthor_Click(null, e);
|
||||
TxtAuthorStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtAuthorStatus.Text = "Автор добавлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtAuthorStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtAuthorStatus.Text = "Ошибка добавления автора.";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnEditAuthor_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedAuthor == null)
|
||||
{
|
||||
TxtAuthorStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtAuthorStatus.Text = "Выберите автора для редактирования.";
|
||||
return;
|
||||
}
|
||||
string name = TxtAuthorName.Text?.Trim() ?? "";
|
||||
if (string.IsNullOrEmpty(name)) return;
|
||||
|
||||
if (DatabaseService.UpdateAuthor(_selectedAuthor.Id, name))
|
||||
{
|
||||
RefreshAuthors();
|
||||
BtnClearAuthor_Click(null, e);
|
||||
TxtAuthorStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtAuthorStatus.Text = "Автор обновлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtAuthorStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtAuthorStatus.Text = "Ошибка обновления автора.";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnDeleteAuthor_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedAuthor == null) return;
|
||||
if (DatabaseService.DeleteAuthor(_selectedAuthor.Id))
|
||||
{
|
||||
RefreshAuthors();
|
||||
BtnClearAuthor_Click(null, e);
|
||||
TxtAuthorStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtAuthorStatus.Text = "Автор удален!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtAuthorStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtAuthorStatus.Text = "Ошибка удаления автора (возможно, он связан с книгами).";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnClearAuthor_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
_selectedAuthor = null;
|
||||
TxtAuthorName.Text = "";
|
||||
DgAuthors.SelectedItem = null;
|
||||
TxtAuthorStatus.Text = "";
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CRUD Books
|
||||
private void RefreshBooks()
|
||||
{
|
||||
_allBooks = DatabaseService.GetBooks();
|
||||
DgBooks.ItemsSource = null;
|
||||
DgBooks.ItemsSource = _allBooks;
|
||||
|
||||
// Update Books Combobox in Copies Editor
|
||||
CbCopyBook.ItemsSource = null;
|
||||
CbCopyBook.ItemsSource = _allBooks;
|
||||
}
|
||||
|
||||
private void DgBooks_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (DgBooks.SelectedItem is Book book)
|
||||
{
|
||||
_selectedBook = book;
|
||||
TxtBookTitle.Text = book.Title;
|
||||
TxtBookIsbn.Text = book.Isbn;
|
||||
TxtBookYear.Text = book.Year_published.ToString();
|
||||
TxtBookDesc.Text = book.Description;
|
||||
|
||||
// Select matching author in ComboBox
|
||||
CbBookAuthor.SelectedItem = _allAuthors.FirstOrDefault(a => a.Id == book.AuthorId.Id);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnAddBook_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
string title = TxtBookTitle.Text?.Trim() ?? "";
|
||||
string isbn = TxtBookIsbn.Text?.Trim() ?? "";
|
||||
string desc = TxtBookDesc.Text?.Trim() ?? "";
|
||||
int.TryParse(TxtBookYear.Text?.Trim(), out int year);
|
||||
var author = CbBookAuthor.SelectedItem as Author;
|
||||
|
||||
if (string.IsNullOrEmpty(title))
|
||||
{
|
||||
TxtBookStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtBookStatus.Text = "Название книги не может быть пустым.";
|
||||
return;
|
||||
}
|
||||
if (author == null)
|
||||
{
|
||||
TxtBookStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtBookStatus.Text = "Выберите автора (сначала добавьте его во вкладке 'Авторы').";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.AddBook(title, isbn, desc, year, author.Id))
|
||||
{
|
||||
RefreshBooks();
|
||||
BtnClearBook_Click(null, e);
|
||||
TxtBookStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtBookStatus.Text = "Книга добавлена!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtBookStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtBookStatus.Text = "Ошибка добавления (проверьте ISBN на уникальность).";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnEditBook_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedBook == null)
|
||||
{
|
||||
TxtBookStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtBookStatus.Text = "Выберите книгу для редактирования.";
|
||||
return;
|
||||
}
|
||||
string title = TxtBookTitle.Text?.Trim() ?? "";
|
||||
string isbn = TxtBookIsbn.Text?.Trim() ?? "";
|
||||
string desc = TxtBookDesc.Text?.Trim() ?? "";
|
||||
int.TryParse(TxtBookYear.Text?.Trim(), out int year);
|
||||
var author = CbBookAuthor.SelectedItem as Author;
|
||||
|
||||
if (string.IsNullOrEmpty(title) || author == null) return;
|
||||
|
||||
if (DatabaseService.UpdateBook(_selectedBook.Id, title, isbn, desc, year, author.Id))
|
||||
{
|
||||
RefreshBooks();
|
||||
BtnClearBook_Click(null, e);
|
||||
TxtBookStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtBookStatus.Text = "Книга обновлена!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtBookStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtBookStatus.Text = "Ошибка обновления книги.";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnDeleteBook_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedBook == null) return;
|
||||
if (DatabaseService.DeleteBook(_selectedBook.Id))
|
||||
{
|
||||
RefreshBooks();
|
||||
BtnClearBook_Click(null, e);
|
||||
TxtBookStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtBookStatus.Text = "Книга удалена!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtBookStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtBookStatus.Text = "Ошибка удаления книги (возможно, есть выданные экземпляры).";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnClearBook_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
_selectedBook = null;
|
||||
TxtBookTitle.Text = "";
|
||||
TxtBookIsbn.Text = "";
|
||||
TxtBookYear.Text = "";
|
||||
TxtBookDesc.Text = "";
|
||||
CbBookAuthor.SelectedItem = null;
|
||||
DgBooks.SelectedItem = null;
|
||||
TxtBookStatus.Text = "";
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CRUD Copies
|
||||
private void RefreshCopies()
|
||||
{
|
||||
var copies = DatabaseService.GetBookCopies();
|
||||
DgCopies.ItemsSource = null;
|
||||
DgCopies.ItemsSource = copies;
|
||||
}
|
||||
|
||||
private void DgCopies_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (DgCopies.SelectedItem is Book_copies copy)
|
||||
{
|
||||
_selectedCopy = copy;
|
||||
TxtCopyInv.Text = copy.Inventory_number;
|
||||
TxtCopyShelf.Text = copy.Shelf_location;
|
||||
|
||||
CbCopyBook.SelectedItem = _allBooks.FirstOrDefault(b => b.Id == copy.BookId.Id);
|
||||
|
||||
// Select matching status in combobox
|
||||
foreach (ComboBoxItem item in CbCopyStatus.Items)
|
||||
var viewModel = new AdminWindowViewModel();
|
||||
viewModel.OnLogoutRequested = () =>
|
||||
{
|
||||
if (item.Content?.ToString() == copy.Status)
|
||||
{
|
||||
CbCopyStatus.SelectedItem = item;
|
||||
break;
|
||||
}
|
||||
}
|
||||
var mainWin = new MainWindow();
|
||||
mainWin.Show();
|
||||
this.Close();
|
||||
};
|
||||
DataContext = viewModel;
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnAddCopy_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var book = CbCopyBook.SelectedItem as Book;
|
||||
string inv = TxtCopyInv.Text?.Trim() ?? "";
|
||||
string shelf = TxtCopyShelf.Text?.Trim() ?? "";
|
||||
var statusItem = CbCopyStatus.SelectedItem as ComboBoxItem;
|
||||
string status = statusItem?.Content?.ToString() ?? "available";
|
||||
|
||||
if (book == null)
|
||||
{
|
||||
TxtCopyStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtCopyStatus.Text = "Выберите книгу.";
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(inv))
|
||||
{
|
||||
TxtCopyStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtCopyStatus.Text = "Инвентарный номер обязателен.";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.AddBookCopy(book.Id, inv, status, shelf))
|
||||
{
|
||||
RefreshCopies();
|
||||
BtnClearCopy_Click(null, e);
|
||||
TxtCopyStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtCopyStatus.Text = "Экземпляр добавлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtCopyStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtCopyStatus.Text = "Ошибка добавления (проверьте уникальность инв. номера).";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnEditCopy_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedCopy == null)
|
||||
{
|
||||
TxtCopyStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtCopyStatus.Text = "Выберите экземпляр для редактирования.";
|
||||
return;
|
||||
}
|
||||
var book = CbCopyBook.SelectedItem as Book;
|
||||
string inv = TxtCopyInv.Text?.Trim() ?? "";
|
||||
string shelf = TxtCopyShelf.Text?.Trim() ?? "";
|
||||
var statusItem = CbCopyStatus.SelectedItem as ComboBoxItem;
|
||||
string status = statusItem?.Content?.ToString() ?? "available";
|
||||
|
||||
if (book == null || string.IsNullOrEmpty(inv)) return;
|
||||
|
||||
if (DatabaseService.UpdateBookCopy(_selectedCopy.Id, book.Id, inv, status, shelf))
|
||||
{
|
||||
RefreshCopies();
|
||||
BtnClearCopy_Click(null, e);
|
||||
TxtCopyStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtCopyStatus.Text = "Экземпляр обновлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtCopyStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtCopyStatus.Text = "Ошибка обновления.";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnDeleteCopy_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedCopy == null) return;
|
||||
if (DatabaseService.DeleteBookCopy(_selectedCopy.Id))
|
||||
{
|
||||
RefreshCopies();
|
||||
BtnClearCopy_Click(null, e);
|
||||
TxtCopyStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtCopyStatus.Text = "Экземпляр удален!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtCopyStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtCopyStatus.Text = "Ошибка удаления экземпляра.";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnClearCopy_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
_selectedCopy = null;
|
||||
TxtCopyInv.Text = "";
|
||||
TxtCopyShelf.Text = "";
|
||||
CbCopyBook.SelectedItem = null;
|
||||
CbCopyStatus.SelectedIndex = 0;
|
||||
DgCopies.SelectedItem = null;
|
||||
TxtCopyStatus.Text = "";
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region CRUD Users
|
||||
private void RefreshUsers()
|
||||
{
|
||||
var users = DatabaseService.GetUsers();
|
||||
DgUsers.ItemsSource = null;
|
||||
DgUsers.ItemsSource = users;
|
||||
|
||||
_allRoles = DatabaseService.GetRoles();
|
||||
CbUserRole.ItemsSource = null;
|
||||
CbUserRole.ItemsSource = _allRoles;
|
||||
}
|
||||
|
||||
private void DgUsers_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (DgUsers.SelectedItem is User user)
|
||||
{
|
||||
_selectedUser = user;
|
||||
TxtUserFullName.Text = user.Full_name;
|
||||
TxtUserLogin.Text = user.Login;
|
||||
TxtUserPass.Text = user.Password_hash; // Plain compare standard
|
||||
TxtUserEmail.Text = user.Email;
|
||||
TxtUserPhone.Text = user.Phone;
|
||||
|
||||
CbUserRole.SelectedItem = _allRoles.FirstOrDefault(r => r.id == user.RoleId.id);
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnAddUser_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
string name = TxtUserFullName.Text?.Trim() ?? "";
|
||||
string login = TxtUserLogin.Text?.Trim() ?? "";
|
||||
string pass = TxtUserPass.Text?.Trim() ?? "";
|
||||
string email = TxtUserEmail.Text?.Trim() ?? "";
|
||||
string phone = TxtUserPhone.Text?.Trim() ?? "";
|
||||
var role = CbUserRole.SelectedItem as Role;
|
||||
|
||||
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(login) || string.IsNullOrEmpty(pass) || role == null)
|
||||
{
|
||||
TxtUserStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtUserStatus.Text = "Заполните обязательные поля (ФИО, Логин, Пароль, Роль).";
|
||||
return;
|
||||
}
|
||||
|
||||
if (DatabaseService.AddUser(name, email, phone, login, pass, role.id))
|
||||
{
|
||||
RefreshUsers();
|
||||
BtnClearUser_Click(null, e);
|
||||
TxtUserStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtUserStatus.Text = "Пользователь добавлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtUserStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtUserStatus.Text = "Ошибка добавления (проверьте уникальность Логина/Email).";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnEditUser_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedUser == null)
|
||||
{
|
||||
TxtUserStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtUserStatus.Text = "Выберите пользователя для редактирования.";
|
||||
return;
|
||||
}
|
||||
string name = TxtUserFullName.Text?.Trim() ?? "";
|
||||
string login = TxtUserLogin.Text?.Trim() ?? "";
|
||||
string pass = TxtUserPass.Text?.Trim() ?? "";
|
||||
string email = TxtUserEmail.Text?.Trim() ?? "";
|
||||
string phone = TxtUserPhone.Text?.Trim() ?? "";
|
||||
var role = CbUserRole.SelectedItem as Role;
|
||||
|
||||
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(login) || string.IsNullOrEmpty(pass) || role == null) return;
|
||||
|
||||
if (DatabaseService.UpdateUser(_selectedUser.Id, name, email, phone, login, pass, role.id))
|
||||
{
|
||||
RefreshUsers();
|
||||
BtnClearUser_Click(null, e);
|
||||
TxtUserStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtUserStatus.Text = "Пользователь обновлен!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtUserStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtUserStatus.Text = "Ошибка обновления пользователя.";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnDeleteUser_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedUser == null) return;
|
||||
if (DatabaseService.DeleteUser(_selectedUser.Id))
|
||||
{
|
||||
RefreshUsers();
|
||||
BtnClearUser_Click(null, e);
|
||||
TxtUserStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtUserStatus.Text = "Пользователь удален!";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtUserStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtUserStatus.Text = "Ошибка удаления пользователя.";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnClearUser_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
_selectedUser = null;
|
||||
TxtUserFullName.Text = "";
|
||||
TxtUserLogin.Text = "";
|
||||
TxtUserPass.Text = "";
|
||||
TxtUserEmail.Text = "";
|
||||
TxtUserPhone.Text = "";
|
||||
CbUserRole.SelectedItem = null;
|
||||
DgUsers.SelectedItem = null;
|
||||
TxtUserStatus.Text = "";
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Reports
|
||||
private void RefreshReports()
|
||||
{
|
||||
// 1. Stats card
|
||||
decimal collected = DatabaseService.GetTotalFinesCollected();
|
||||
decimal unpaid = DatabaseService.GetTotalFinesUnpaid();
|
||||
|
||||
TxtFinesCollected.Text = $"{collected:N2} руб.";
|
||||
TxtFinesUnpaid.Text = $"{unpaid:N2} руб.";
|
||||
|
||||
// 2. DataGrids
|
||||
DgPopularBooks.ItemsSource = null;
|
||||
DgPopularBooks.ItemsSource = DatabaseService.GetPopularBooks().DefaultView;
|
||||
|
||||
DgOverdueLoans.ItemsSource = null;
|
||||
DgOverdueLoans.ItemsSource = DatabaseService.GetOverdueLoans().DefaultView;
|
||||
}
|
||||
|
||||
private void BtnRefreshReports_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
RefreshReports();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
|
@ -1,171 +1,191 @@
|
|||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:CourseProject1125.ViewModels"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d" d:DesignWidth="1100" d:DesignHeight="650"
|
||||
x:Class="CourseProject1125.Views.LibrarianWindow"
|
||||
x:DataType="vm:LibrarianWindowViewModel"
|
||||
Title="Панель библиотекаря - Библиотека"
|
||||
Width="1100" Height="650"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
Background="#0f172a">
|
||||
Background="White">
|
||||
|
||||
<Grid ColumnDefinitions="240, *">
|
||||
<Border Grid.Column="0" Background="#1e293b" BorderBrush="#334155" BorderThickness="0,0,1,0" Padding="15">
|
||||
<Border Grid.Column="0" Background="LightGray" BorderBrush="Gray" BorderThickness="0,0,1,0" Padding="15">
|
||||
<Grid RowDefinitions="Auto, *, Auto">
|
||||
<StackPanel Grid.Row="0" Margin="0,10,0,30">
|
||||
<TextBlock Text="БИБЛИОТЕКА" Foreground="#38bdf8" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" LetterSpacing="1"/>
|
||||
<TextBlock Text="Панель библиотекаря" Foreground="#94a3b8" FontSize="11" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtLibrarianName" Foreground="#cbd5e1" FontSize="12" FontWeight="SemiBold" HorizontalAlignment="Center" Margin="0,10,0,0"/>
|
||||
<TextBlock Text="БИБЛИОТЕКА" Foreground="Black" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" LetterSpacing="1"/>
|
||||
<TextBlock Text="Панель библиотекаря" Foreground="Black" FontSize="11" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtLibrarianName" Text="{Binding LibrarianName}" Foreground="Black" FontSize="12" FontWeight="SemiBold" HorizontalAlignment="Center" Margin="0,10,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="1">
|
||||
<Button Name="BtnTabIssue" Content=" Выдача книг" Click="BtnTab_Click" Tag="Issue" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabReturns" Content=" Возврат книг" Click="BtnTab_Click" Tag="Returns" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabRegister" Content=" Регистрация читателей" Click="BtnTab_Click" Tag="Register" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabFines" Content=" Штрафы" Click="BtnTab_Click" Tag="Fines" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabReservations" Content=" Бронирования" Click="BtnTab_Click" Tag="Reservations" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabIssue" Content=" Выдача книг" Command="{Binding ShowTabCommand}" CommandParameter="Issue" Background="{Binding IssueTabBackground}" Foreground="{Binding IssueTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabReturns" Content=" Возврат книг" Command="{Binding ShowTabCommand}" CommandParameter="Returns" Background="{Binding ReturnsTabBackground}" Foreground="{Binding ReturnsTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabRegister" Content=" Регистрация читателей" Command="{Binding ShowTabCommand}" CommandParameter="Register" Background="{Binding RegisterTabBackground}" Foreground="{Binding RegisterTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabFines" Content=" Штрафы" Command="{Binding ShowTabCommand}" CommandParameter="Fines" Background="{Binding FinesTabBackground}" Foreground="{Binding FinesTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabReservations" Content=" Бронирования" Command="{Binding ShowTabCommand}" CommandParameter="Reservations" Background="{Binding ReservationsTabBackground}" Foreground="{Binding ReservationsTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<Button Grid.Row="3" Content=" Выйти из системы" Click="BtnLogout_Click" HorizontalAlignment="Stretch" Height="40" Background="#ef4444" Foreground="White" FontWeight="Bold" CornerRadius="6" HorizontalContentAlignment="Center"/>
|
||||
<Button Grid.Row="3" Content=" Выйти из системы" Command="{Binding LogoutCommand}" HorizontalAlignment="Stretch" Height="40" Background="Red" Foreground="White" FontWeight="Bold" CornerRadius="6" HorizontalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Grid Grid.Column="1" RowDefinitions="Auto, *">
|
||||
<Border Grid.Row="0" Background="#1e293b" Height="60" Padding="20,0" BorderBrush="#334155" BorderThickness="0,0,0,1">
|
||||
<Border Grid.Row="0" Background="LightGray" Height="60" Padding="20,0" BorderBrush="Gray" BorderThickness="0,0,0,1">
|
||||
<Grid ColumnDefinitions="*, Auto">
|
||||
<TextBlock Name="TxtActiveTabHeader" Text=" Оформление выдачи книг" Foreground="White" FontSize="18" FontWeight="Bold" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="Роль: Библиотекарь" Foreground="#94a3b8" FontSize="12" VerticalAlignment="Center"/>
|
||||
<TextBlock Name="TxtActiveTabHeader" Text="{Binding ActiveTabHeader}" Foreground="Black" FontSize="18" FontWeight="Bold" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="Роль: Библиотекарь" Foreground="Black" FontSize="12" VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Grid Grid.Row="1" Margin="20">
|
||||
<Grid Name="GridIssue" ColumnDefinitions="450, *">
|
||||
<Border Grid.Column="0" Background="#1e293b" CornerRadius="8" Padding="20" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
<Grid Name="GridIssue" ColumnDefinitions="450, *" IsVisible="{Binding IsIssueVisible}">
|
||||
<Border Grid.Column="0" Background="White" CornerRadius="8" Padding="20" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Выдача книги читателю" Foreground="#38bdf8" FontSize="16" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<TextBlock Text="Выдача книги читателю" Foreground="Black" FontSize="16" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Выберите экземпляр книги (доступные)" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<ComboBox Name="CbIssueCopy" HorizontalAlignment="Stretch" Height="36" CornerRadius="4"/>
|
||||
<StackPanel Margin="0,0,0,10">
|
||||
<TextBlock Text="Поиск и выбор книги" Foreground="Black" FontSize="12" Margin="0,0,0,4"/>
|
||||
<TextBox Name="TxtSearchCopy" Text="{Binding SearchCopyText, Mode=TwoWay}" Watermark="Введите название, инв. номер или автора..." Height="36" CornerRadius="4"/>
|
||||
<ListBox Name="LbIssueCopies" ItemsSource="{Binding FilteredCopies}" SelectedItem="{Binding SelectedAvailableCopy, Mode=TwoWay}" Height="120" Margin="0,4,0,0" CornerRadius="4" Background="White" BorderBrush="LightGray" BorderThickness="1">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Margin="4">
|
||||
<TextBlock Text="{Binding BookId.Title}" Foreground="Black" FontSize="13" FontWeight="Bold"/>
|
||||
<TextBlock Text="{Binding Inventory_number}" Foreground="Black" FontSize="11"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Margin="0,0,0,10">
|
||||
<TextBlock Text="Поиск и выбор читателя" Foreground="Black" FontSize="12" Margin="0,0,0,4"/>
|
||||
<TextBox Name="TxtSearchReader" Text="{Binding SearchReaderText, Mode=TwoWay}" Watermark="Введите ФИО или логин читателя..." Height="36" CornerRadius="4"/>
|
||||
<ListBox Name="LbIssueReaders" ItemsSource="{Binding FilteredReaders}" SelectedItem="{Binding SelectedReader, Mode=TwoWay}" Height="120" Margin="0,4,0,0" CornerRadius="4" Background="White" BorderBrush="LightGray" BorderThickness="1">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<StackPanel Margin="4">
|
||||
<TextBlock Text="{Binding Full_name}" Foreground="Black" FontSize="13" FontWeight="Bold"/>
|
||||
<TextBlock Text="{Binding Login}" Foreground="Black" FontSize="11"/>
|
||||
</StackPanel>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Выберите читателя" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<ComboBox Name="CbIssueReader" HorizontalAlignment="Stretch" Height="36" CornerRadius="4"/>
|
||||
<TextBlock Text="Срок возврата" Foreground="Black" FontSize="12"/>
|
||||
<CalendarDatePicker Name="DpIssueDueDate" SelectedDate="{Binding IssueDueDate, Mode=TwoWay}" HorizontalAlignment="Stretch" Height="36" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Срок возврата" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<CalendarDatePicker Name="DpIssueDueDate" HorizontalAlignment="Stretch" Height="36" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
|
||||
<Button Content=" Оформить выдачу" Click="BtnIssueBook_Click" Background="#22c55e" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="0,10,0,0"/>
|
||||
<Button Content=" Оформить выдачу" Command="{Binding IssueBookCommand}" Background="Green" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="0,10,0,0"/>
|
||||
|
||||
<TextBlock Name="TxtIssueStatus" Text="" Foreground="#cbd5e1" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtIssueStatus" Text="{Binding IssueStatus}" Foreground="{Binding IssueStatusColor}" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="20" BorderBrush="#334155" BorderThickness="1">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="20" BorderBrush="LightGray" BorderThickness="1">
|
||||
<StackPanel>
|
||||
<TextBlock Text="ℹ️ Памятка библиотекаря" Foreground="#38bdf8" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Text="1. Книга выдается только зарегистрированным читателям." Foreground="#cbd5e1" TextWrapping="Wrap"/>
|
||||
<TextBlock Text="2. Рекомендуемый срок выдачи — 14 дней." Foreground="#cbd5e1" TextWrapping="Wrap"/>
|
||||
<TextBlock Text="3. При просрочке сдачи книги система автоматически начислит штраф в размере 15 руб. за каждый день задержки при возврате." Foreground="#cbd5e1" TextWrapping="Wrap"/>
|
||||
<TextBlock Text="Памятка библиотекаря" Foreground="Black" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Text="1. Книга выдается только зарегистрированным читателям." Foreground="Black" TextWrapping="Wrap"/>
|
||||
<TextBlock Text="2. Рекомендуемый срок выдачи — 14 дней." Foreground="Black" TextWrapping="Wrap"/>
|
||||
<TextBlock Text="3. При просрочке сдачи книги система автоматически начислит штраф в размере 15 руб. за каждый день задержки при возврате." Foreground="Black" TextWrapping="Wrap"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridReturns" RowDefinitions="*, Auto" IsVisible="False">
|
||||
<Grid Name="GridReturns" RowDefinitions="*, Auto" IsVisible="{Binding IsReturnsVisible}">
|
||||
<Grid Grid.Row="0" ColumnDefinitions="*, 320">
|
||||
<DataGrid Name="DgActiveLoans" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b" SelectionChanged="DgActiveLoans_SelectionChanged">
|
||||
<DataGrid Name="DgActiveLoans" Grid.Column="0" ItemsSource="{Binding ActiveLoansList}" SelectedItem="{Binding SelectedActiveLoan, Mode=TwoWay}" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="ID" Binding="{Binding Id}" Width="50"/>
|
||||
<DataGridTextColumn Header="Инв. номер" Binding="{Binding CopyId.Inventory_number}" Width="120"/>
|
||||
<DataGridTextColumn Header="Книга" Binding="{Binding CopyId.BookId.Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Читатель" Binding="{Binding ReaderId.Full_name}" Width="1.5*"/>
|
||||
<DataGridTextColumn Header="Дата выдачи" Binding="{Binding Issue_date, StringFormat={}{0:dd.MM.yyyy}}" Width="110"/>
|
||||
<DataGridTextColumn Header="Срок сдачи" Binding="{Binding Due_date, StringFormat={}{0:dd.MM.yyyy}}" Width="110"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding StatusText}" Width="120"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Приём возврата" Foreground="#38bdf8" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtReturnDetails" Text="Выберите выдачу из списка слева." Foreground="#cbd5e1" TextWrapping="Wrap" FontSize="13"/>
|
||||
<TextBlock Text="Приём возврата" Foreground="Black" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtReturnDetails" Text="{Binding ReturnDetails}" Foreground="Black" TextWrapping="Wrap" FontSize="13"/>
|
||||
|
||||
<Button Name="BtnReturnBook" Content=" Принять возврат" Click="BtnReturnBook_Click" Background="#3b82f6" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" IsEnabled="False"/>
|
||||
<Button Name="BtnReturnBook" Content=" Принять возврат" Command="{Binding ReturnBookCommand}" IsEnabled="{Binding IsReturnEnabled}" Background="Blue" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
|
||||
<TextBlock Name="TxtReturnStatus" Text="" Foreground="#22c55e" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center" FontWeight="SemiBold"/>
|
||||
<TextBlock Name="TxtReturnStatus" Text="{Binding ReturnStatus}" Foreground="{Binding ReturnStatusColor}" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center" FontWeight="SemiBold"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridRegister" ColumnDefinitions="450, *" IsVisible="False">
|
||||
<Border Grid.Column="0" Background="#1e293b" CornerRadius="8" Padding="20" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
<Grid Name="GridRegister" ColumnDefinitions="450, *" IsVisible="{Binding IsRegisterVisible}">
|
||||
<Border Grid.Column="0" Background="White" CornerRadius="8" Padding="20" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Регистрация нового читателя" Foreground="#38bdf8" FontSize="16" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
<TextBlock Text="Регистрация нового читателя" Foreground="Black" FontSize="16" FontWeight="Bold" Margin="0,0,0,5"/>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="ФИО читателя" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtRegFullName" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="ФИО читателя" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtRegFullName" Text="{Binding RegFullName, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Email" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtRegEmail" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Email" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtRegEmail" Text="{Binding RegEmail, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Телефон" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtRegPhone" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Телефон" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtRegPhone" Text="{Binding RegPhone, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Логин для входа" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtRegLogin" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Логин для входа" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtRegLogin" Text="{Binding RegLogin, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Пароль" Foreground="#cbd5e1" FontSize="12"/>
|
||||
<TextBox Name="TxtRegPass" Height="34" CornerRadius="4"/>
|
||||
<TextBlock Text="Пароль" Foreground="Black" FontSize="12"/>
|
||||
<TextBox Name="TxtRegPass" Text="{Binding RegPass, Mode=TwoWay}" Height="34" CornerRadius="4"/>
|
||||
</StackPanel>
|
||||
|
||||
<Button Content=" Зарегистрировать" Click="BtnRegisterReader_Click" Background="#22c55e" Foreground="White" HorizontalAlignment="Stretch" Height="38" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="0,10,0,0"/>
|
||||
<Button Content=" Зарегистрировать" Command="{Binding RegisterReaderCommand}" Background="Green" Foreground="White" HorizontalAlignment="Stretch" Height="38" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Margin="0,10,0,0"/>
|
||||
|
||||
<TextBlock Name="TxtRegStatus" Text="" Foreground="#cbd5e1" FontSize="13" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtRegStatus" Text="{Binding RegStatus}" Foreground="{Binding RegStatusColor}" FontSize="13" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridFines" ColumnDefinitions="*, 320" IsVisible="False">
|
||||
<DataGrid Name="DgFines" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b" SelectionChanged="DgFines_SelectionChanged">
|
||||
<Grid Name="GridFines" ColumnDefinitions="*, 320" IsVisible="{Binding IsFinesVisible}">
|
||||
<DataGrid Name="DgFines" Grid.Column="0" ItemsSource="{Binding FinesList}" SelectedItem="{Binding SelectedFine, Mode=TwoWay}" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="ID" Binding="{Binding Id}" Width="50"/>
|
||||
<DataGridTextColumn Header="Читатель" Binding="{Binding LoanId.ReaderId.Full_name}" Width="1.5*"/>
|
||||
<DataGridTextColumn Header="Книга" Binding="{Binding LoanId.CopyId.BookId.Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Сумма" Binding="{Binding Amount}" Width="90"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding Is_paid, Converter={x:Null}}" Width="100"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding StatusText}" Width="100"/>
|
||||
<DataGridTextColumn Header="Дата выписки" Binding="{Binding Created_at, StringFormat={}{0:dd.MM.yyyy}}" Width="110"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Управление штрафами" Foreground="#38bdf8" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtFineDetails" Text="Выберите штраф из списка." Foreground="#cbd5e1" TextWrapping="Wrap" FontSize="13"/>
|
||||
<TextBlock Text="Управление штрафами" Foreground="Black" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtFineDetails" Text="{Binding FineDetails}" Foreground="Black" TextWrapping="Wrap" FontSize="13"/>
|
||||
|
||||
<Button Name="BtnPayFine" Content=" Отметить как оплаченный" Click="BtnPayFine_Click" Background="#22c55e" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" IsEnabled="False"/>
|
||||
<Button Name="BtnPayFine" Content=" Отметить как оплаченный" Command="{Binding PayFineCommand}" IsEnabled="{Binding IsPayFineEnabled}" Background="Green" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
|
||||
<TextBlock Name="TxtFineStatus" Text="" Foreground="#22c55e" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtFineStatus" Text="{Binding FineStatus}" Foreground="{Binding FineStatusColor}" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridReservations" RowDefinitions="*, Auto" IsVisible="False">
|
||||
<Grid Name="GridReservations" RowDefinitions="*, Auto" IsVisible="{Binding IsReservationsVisible}">
|
||||
<Grid Grid.Row="0" ColumnDefinitions="*, 320">
|
||||
<DataGrid Name="DgReservations" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b" SelectionChanged="DgReservations_SelectionChanged">
|
||||
<DataGrid Name="DgReservations" Grid.Column="0" ItemsSource="{Binding ReservationsList}" SelectedItem="{Binding SelectedReservation, Mode=TwoWay}" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="ID" Binding="{Binding Id}" Width="50"/>
|
||||
<DataGridTextColumn Header="Книга" Binding="{Binding BookId.Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Читатель" Binding="{Binding ReaderId.Full_name}" Width="1.5*"/>
|
||||
<DataGridTextColumn Header="Дата брони" Binding="{Binding Reservation_date, StringFormat={}{0:dd.MM.yyyy}}" Width="110"/>
|
||||
|
|
@ -174,14 +194,14 @@
|
|||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Детали бронирования" Foreground="#38bdf8" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtReservationDetails" Text="Выберите бронь из списка." Foreground="#cbd5e1" TextWrapping="Wrap" FontSize="13"/>
|
||||
<TextBlock Text="Детали бронирования" Foreground="Black" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtReservationDetails" Text="{Binding ReservationDetails}" Foreground="Black" TextWrapping="Wrap" FontSize="13"/>
|
||||
|
||||
<Button Name="BtnCancelReservation" Content=" Отменить бронь" Click="BtnCancelReservation_Click" Background="#ef4444" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" IsEnabled="False"/>
|
||||
<Button Name="BtnCancelReservation" Content=" Отменить бронь" Command="{Binding CancelReservationCommand}" IsEnabled="{Binding IsCancelReservationEnabled}" Background="Red" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
|
||||
<TextBlock Name="TxtReservationStatus" Text="" Foreground="#cbd5e1" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtReservationStatus" Text="{Binding ReservationStatus}" Foreground="{Binding ReservationStatusColor}" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
|
|
|||
|
|
@ -1,377 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Media;
|
||||
using CourseProject1125.DB;
|
||||
using CourseProject1125.Models;
|
||||
using CourseProject1125.ViewModels;
|
||||
|
||||
namespace CourseProject1125.Views;
|
||||
|
||||
public partial class LibrarianWindow : Window
|
||||
namespace CourseProject1125.Views
|
||||
{
|
||||
private Book_copies? _selectedAvailableCopy;
|
||||
private User? _selectedReader;
|
||||
private Loan? _selectedActiveLoan;
|
||||
private Fine? _selectedFine;
|
||||
private Reservation? _selectedReservation;
|
||||
|
||||
private List<Book_copies> _availableCopies = new();
|
||||
private List<User> _readers = new();
|
||||
private List<Loan> _activeLoans = new();
|
||||
private List<Fine> _fines = new();
|
||||
private List<Reservation> _reservations = new();
|
||||
|
||||
public LibrarianWindow()
|
||||
public partial class LibrarianWindow : Window
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
// Show current logged-in librarian name
|
||||
TxtLibrarianName.Text = UserSession.UserName;
|
||||
|
||||
// Initialize defaults
|
||||
DpIssueDueDate.SelectedDate = DateTime.Now.AddDays(14);
|
||||
|
||||
LoadAllData();
|
||||
ShowTab("Issue");
|
||||
}
|
||||
|
||||
private void LoadAllData()
|
||||
{
|
||||
RefreshIssueCombos();
|
||||
RefreshActiveLoans();
|
||||
RefreshFines();
|
||||
RefreshReservations();
|
||||
}
|
||||
|
||||
#region Navigation
|
||||
private void BtnTab_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is Button btn && btn.Tag is string tabName)
|
||||
public LibrarianWindow()
|
||||
{
|
||||
ShowTab(tabName);
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowTab(string tabName)
|
||||
{
|
||||
// Hide all grids
|
||||
GridIssue.IsVisible = false;
|
||||
GridReturns.IsVisible = false;
|
||||
GridRegister.IsVisible = false;
|
||||
GridFines.IsVisible = false;
|
||||
GridReservations.IsVisible = false;
|
||||
|
||||
// Reset styles
|
||||
ResetButtonStyles(BtnTabIssue);
|
||||
ResetButtonStyles(BtnTabReturns);
|
||||
ResetButtonStyles(BtnTabRegister);
|
||||
ResetButtonStyles(BtnTabFines);
|
||||
ResetButtonStyles(BtnTabReservations);
|
||||
|
||||
switch (tabName)
|
||||
{
|
||||
case "Issue":
|
||||
GridIssue.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "📖 Оформление выдачи книг";
|
||||
SetActiveButtonStyles(BtnTabIssue);
|
||||
RefreshIssueCombos();
|
||||
break;
|
||||
case "Returns":
|
||||
GridReturns.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "🔄 Приём возврата книг";
|
||||
SetActiveButtonStyles(BtnTabReturns);
|
||||
RefreshActiveLoans();
|
||||
break;
|
||||
case "Register":
|
||||
GridRegister.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "👤 Регистрация читателей";
|
||||
SetActiveButtonStyles(BtnTabRegister);
|
||||
break;
|
||||
case "Fines":
|
||||
GridFines.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "💰 Управление штрафами";
|
||||
SetActiveButtonStyles(BtnTabFines);
|
||||
RefreshFines();
|
||||
break;
|
||||
case "Reservations":
|
||||
GridReservations.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "🛎️ Бронирования читателей";
|
||||
SetActiveButtonStyles(BtnTabReservations);
|
||||
RefreshReservations();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void ResetButtonStyles(Button btn)
|
||||
{
|
||||
btn.Background = Brushes.Transparent;
|
||||
btn.Foreground = Brush.Parse("#94a3b8");
|
||||
}
|
||||
|
||||
private void SetActiveButtonStyles(Button btn)
|
||||
{
|
||||
btn.Background = Brush.Parse("#0f172a");
|
||||
btn.Foreground = Brush.Parse("#38bdf8");
|
||||
}
|
||||
|
||||
private void BtnLogout_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var mainWin = new MainWindow();
|
||||
mainWin.Show();
|
||||
this.Close();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Issue Book Tab
|
||||
private void RefreshIssueCombos()
|
||||
{
|
||||
// 1. Get copies and filter those that are available
|
||||
var allCopies = DatabaseService.GetBookCopies();
|
||||
_availableCopies = allCopies.Where(c => c.Status.Equals("available", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
CbIssueCopy.ItemsSource = null;
|
||||
CbIssueCopy.ItemsSource = _availableCopies.Select(c => $"{c.Inventory_number} - {c.BookId.Title}").ToList();
|
||||
|
||||
// 2. Get readers
|
||||
var allUsers = DatabaseService.GetUsers();
|
||||
_readers = allUsers.Where(u => u.RoleId.id == 3 || u.RoleId.Name.Equals("Читатель", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
CbIssueReader.ItemsSource = null;
|
||||
CbIssueReader.ItemsSource = _readers.Select(r => $"{r.Full_name} (Логин: {r.Login})").ToList();
|
||||
|
||||
TxtIssueStatus.Text = "";
|
||||
}
|
||||
|
||||
private void BtnIssueBook_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
int copyIndex = CbIssueCopy.SelectedIndex;
|
||||
int readerIndex = CbIssueReader.SelectedIndex;
|
||||
var selectedDate = DpIssueDueDate.SelectedDate;
|
||||
|
||||
if (copyIndex < 0 || readerIndex < 0 || selectedDate == null)
|
||||
{
|
||||
TxtIssueStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtIssueStatus.Text = "Ошибка: Выберите книгу, читателя и укажите дату сдачи.";
|
||||
return;
|
||||
}
|
||||
|
||||
var copy = _availableCopies[copyIndex];
|
||||
var reader = _readers[readerIndex];
|
||||
var dueDate = selectedDate.Value;
|
||||
|
||||
if (dueDate <= DateTime.Now)
|
||||
{
|
||||
TxtIssueStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtIssueStatus.Text = "Ошибка: Срок возврата должен быть в будущем.";
|
||||
return;
|
||||
}
|
||||
|
||||
// LibrarianId comes from UserSession.UserId
|
||||
int librarianId = UserSession.UserId;
|
||||
|
||||
if (DatabaseService.IssueLoan(copy.Id, reader.Id, librarianId, dueDate))
|
||||
{
|
||||
TxtIssueStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtIssueStatus.Text = $"Успешно! Книга '{copy.BookId.Title}' выдана читателю '{reader.Full_name}'.";
|
||||
RefreshIssueCombos();
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtIssueStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtIssueStatus.Text = "Ошибка при оформлении выдачи в базе данных.";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Returns Tab
|
||||
private void RefreshActiveLoans()
|
||||
{
|
||||
var allLoans = DatabaseService.GetLoans();
|
||||
_activeLoans = allLoans.Where(l => l.Status.Equals("active", StringComparison.OrdinalIgnoreCase)).ToList();
|
||||
|
||||
DgActiveLoans.ItemsSource = null;
|
||||
DgActiveLoans.ItemsSource = _activeLoans;
|
||||
|
||||
BtnReturnBook.IsEnabled = false;
|
||||
TxtReturnDetails.Text = "Выберите выдачу из списка слева.";
|
||||
TxtReturnStatus.Text = "";
|
||||
_selectedActiveLoan = null;
|
||||
}
|
||||
|
||||
private void DgActiveLoans_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (DgActiveLoans.SelectedItem is Loan loan)
|
||||
{
|
||||
_selectedActiveLoan = loan;
|
||||
TxtReturnDetails.Text = $"Книга: {loan.CopyId.BookId.Title}\n" +
|
||||
$"Инвентарный номер: {loan.CopyId.Inventory_number}\n" +
|
||||
$"Читатель: {loan.ReaderId.Full_name}\n" +
|
||||
$"Дата выдачи: {loan.Issue_date:dd.MM.yyyy}\n" +
|
||||
$"Срок сдачи: {loan.Due_date:dd.MM.yyyy}";
|
||||
|
||||
BtnReturnBook.IsEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnReturnBook_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedActiveLoan == null) return;
|
||||
|
||||
DateTime returnDate = DateTime.Now;
|
||||
decimal fine = DatabaseService.ReturnLoan(_selectedActiveLoan.Id, returnDate);
|
||||
|
||||
if (fine >= 0)
|
||||
{
|
||||
if (fine > 0)
|
||||
var viewModel = new LibrarianWindowViewModel();
|
||||
viewModel.OnLogoutRequested = () =>
|
||||
{
|
||||
TxtReturnStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtReturnStatus.Text = $"Книга возвращена! Зафиксирована просрочка. Выписан штраф: {fine:N2} руб.";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtReturnStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtReturnStatus.Text = "Книга возвращена успешно! Просрочек нет.";
|
||||
}
|
||||
RefreshActiveLoans();
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtReturnStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtReturnStatus.Text = "Ошибка выполнения возврата книги.";
|
||||
var mainWin = new MainWindow();
|
||||
mainWin.Show();
|
||||
this.Close();
|
||||
};
|
||||
DataContext = viewModel;
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Register Reader Tab
|
||||
private void BtnRegisterReader_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
string name = TxtRegFullName.Text?.Trim() ?? "";
|
||||
string email = TxtRegEmail.Text?.Trim() ?? "";
|
||||
string phone = TxtRegPhone.Text?.Trim() ?? "";
|
||||
string login = TxtRegLogin.Text?.Trim() ?? "";
|
||||
string pass = TxtRegPass.Text?.Trim() ?? "";
|
||||
|
||||
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(login) || string.IsNullOrEmpty(pass))
|
||||
{
|
||||
TxtRegStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtRegStatus.Text = "Пожалуйста, заполните ФИО, логин и пароль.";
|
||||
return;
|
||||
}
|
||||
|
||||
// Reader role ID is 3
|
||||
if (DatabaseService.AddUser(name, email, phone, login, pass, 3))
|
||||
{
|
||||
TxtRegStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtRegStatus.Text = $"Успешно! Читатель '{name}' зарегистрирован.";
|
||||
|
||||
TxtRegFullName.Text = "";
|
||||
TxtRegEmail.Text = "";
|
||||
TxtRegPhone.Text = "";
|
||||
TxtRegLogin.Text = "";
|
||||
TxtRegPass.Text = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtRegStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtRegStatus.Text = "Ошибка: Пользователь с таким логином или Email уже существует.";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Fines Tab
|
||||
private void RefreshFines()
|
||||
{
|
||||
_fines = DatabaseService.GetFines();
|
||||
DgFines.ItemsSource = null;
|
||||
DgFines.ItemsSource = _fines;
|
||||
|
||||
BtnPayFine.IsEnabled = false;
|
||||
TxtFineDetails.Text = "Выберите штраф из списка.";
|
||||
TxtFineStatus.Text = "";
|
||||
_selectedFine = null;
|
||||
}
|
||||
|
||||
private void DgFines_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (DgFines.SelectedItem is Fine fine)
|
||||
{
|
||||
_selectedFine = fine;
|
||||
string paidStr = fine.Is_paid == 1 ? "Оплачен" : "НЕ оплачен";
|
||||
TxtFineDetails.Text = $"Читатель: {fine.LoanId.ReaderId.Full_name}\n" +
|
||||
$"Книга: {fine.LoanId.CopyId.BookId.Title}\n" +
|
||||
$"Сумма штрафа: {fine.Amount:N2} руб.\n" +
|
||||
$"Статус: {paidStr}\n" +
|
||||
$"Дата начисления: {fine.Created_at:dd.MM.yyyy}";
|
||||
|
||||
BtnPayFine.IsEnabled = fine.Is_paid == 0;
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnPayFine_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedFine == null) return;
|
||||
|
||||
if (DatabaseService.PayFine(_selectedFine.Id))
|
||||
{
|
||||
TxtFineStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtFineStatus.Text = "Штраф успешно отмечен как оплаченный!";
|
||||
RefreshFines();
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtFineStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtFineStatus.Text = "Ошибка при оплате штрафа.";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Reservations Tab
|
||||
private void RefreshReservations()
|
||||
{
|
||||
_reservations = DatabaseService.GetReservations();
|
||||
DgReservations.ItemsSource = null;
|
||||
DgReservations.ItemsSource = _reservations;
|
||||
|
||||
BtnCancelReservation.IsEnabled = false;
|
||||
TxtReservationDetails.Text = "Выберите бронь из списка.";
|
||||
TxtReservationStatus.Text = "";
|
||||
_selectedReservation = null;
|
||||
}
|
||||
|
||||
private void DgReservations_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (DgReservations.SelectedItem is Reservation res)
|
||||
{
|
||||
_selectedReservation = res;
|
||||
string activeStr = res.is_active == 1 ? "Активна" : "Неактивна/Отменена";
|
||||
TxtReservationDetails.Text = $"Книга: {res.BookId.Title}\n" +
|
||||
$"Читатель: {res.ReaderId.Full_name}\n" +
|
||||
$"Дата бронирования: {res.Reservation_date:dd.MM.yyyy}\n" +
|
||||
$"Истекает: {res.Expiry_date:dd.MM.yyyy}\n" +
|
||||
$"Статус: {activeStr}";
|
||||
|
||||
BtnCancelReservation.IsEnabled = res.is_active == 1;
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnCancelReservation_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedReservation == null) return;
|
||||
|
||||
if (DatabaseService.CancelReservation(_selectedReservation.Id))
|
||||
{
|
||||
TxtReservationStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtReservationStatus.Text = "Бронирование успешно отменено!";
|
||||
RefreshReservations();
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtReservationStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtReservationStatus.Text = "Ошибка при отмене бронирования.";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
|
@ -11,35 +11,27 @@
|
|||
Width="600" Height="400"
|
||||
WindowStartupLocation="CenterScreen">
|
||||
|
||||
<Grid>
|
||||
<!-- Background Gradient -->
|
||||
<Grid.Background>
|
||||
<LinearGradientBrush StartPoint="0%,0%" EndPoint="100%,100%">
|
||||
<GradientStop Color="#0f172a" Offset="0"/>
|
||||
<GradientStop Color="#1e293b" Offset="1"/>
|
||||
</LinearGradientBrush>
|
||||
</Grid.Background>
|
||||
|
||||
<Border Margin="30" Padding="30" CornerRadius="12" Background="#1e293b" Width="360" VerticalAlignment="Center" HorizontalAlignment="Center" BoxShadow="0 4 20 #000000">
|
||||
<Grid Background="White">
|
||||
<Border Margin="30" Padding="30" CornerRadius="12" Background="LightGray" BorderBrush="Gray" BorderThickness="1" Width="360" VerticalAlignment="Center" HorizontalAlignment="Center" BoxShadow="0 4 20 Black">
|
||||
<StackPanel>
|
||||
<TextBlock Text="БИБЛИОТЕКА" Foreground="#38bdf8" FontSize="24" FontWeight="Bold" HorizontalAlignment="Center"/>
|
||||
<TextBlock Text="Панель авторизации" Foreground="#94a3b8" FontSize="14" HorizontalAlignment="Center" Margin="0,0,0,10"/>
|
||||
<TextBlock Text="БИБЛИОТЕКА" Foreground="Black" FontSize="24" FontWeight="Bold" HorizontalAlignment="Center"/>
|
||||
<TextBlock Text="Панель авторизации" Foreground="Black" FontSize="14" HorizontalAlignment="Center" Margin="0,0,0,10"/>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Логин" Foreground="#cbd5e1" FontSize="12" FontWeight="SemiBold"/>
|
||||
<TextBox Name="TxtLogin" Watermark="Введите ваш логин" Height="40" Background="#0f172a" Foreground="White" BorderBrush="#475569" CornerRadius="6" VerticalContentAlignment="Center"/>
|
||||
<TextBlock Text="Логин" Foreground="Black" FontSize="12" FontWeight="SemiBold"/>
|
||||
<TextBox Name="TxtLogin" Text="{Binding LoginInput, Mode=TwoWay}" Watermark="Введите ваш логин" Height="40" Background="White" Foreground="Black" BorderBrush="Gray" CornerRadius="6" VerticalContentAlignment="Center"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel>
|
||||
<TextBlock Text="Пароль" Foreground="#cbd5e1" FontSize="12" FontWeight="SemiBold"/>
|
||||
<TextBox Name="TxtPassword" Watermark="Введите ваш пароль" PasswordChar="*" Height="40" Background="#0f172a" Foreground="White" BorderBrush="#475569" CornerRadius="6" VerticalContentAlignment="Center"/>
|
||||
<TextBlock Text="Пароль" Foreground="Black" FontSize="12" FontWeight="SemiBold"/>
|
||||
<TextBox Name="TxtPassword" Text="{Binding PasswordInput, Mode=TwoWay}" Watermark="Введите ваш пароль" PasswordChar="*" Height="40" Background="White" Foreground="Black" BorderBrush="Gray" CornerRadius="6" VerticalContentAlignment="Center"/>
|
||||
</StackPanel>
|
||||
|
||||
<Button Content="Войти"
|
||||
Click="BtnLogin_Click"
|
||||
Command="{Binding LoginCommand}"
|
||||
HorizontalAlignment="Stretch"
|
||||
Height="40"
|
||||
Background="#0284c7"
|
||||
Background="Blue"
|
||||
Foreground="White"
|
||||
CornerRadius="6"
|
||||
FontWeight="Bold"
|
||||
|
|
@ -47,7 +39,7 @@
|
|||
VerticalContentAlignment="Center"
|
||||
Margin="0,10,0,0"/>
|
||||
|
||||
<TextBlock Name="LblError" Foreground="#ef4444" FontSize="12" HorizontalAlignment="Center" TextWrapping="Wrap" Margin="0,5,0,0"/>
|
||||
<TextBlock Name="LblError" Text="{Binding ErrorMessage}" Foreground="Red" FontSize="12" HorizontalAlignment="Center" TextWrapping="Wrap" Margin="0,5,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
using System;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using CourseProject1125.DB;
|
||||
using CourseProject1125.ViewModels;
|
||||
|
||||
namespace CourseProject1125.Views;
|
||||
|
||||
|
|
@ -10,43 +8,12 @@ public partial class MainWindow : Window
|
|||
{
|
||||
public MainWindow()
|
||||
{
|
||||
var viewModel = new MainWindowViewModel();
|
||||
viewModel.OnLoginSuccess = (roleId) => NavigateByRole(roleId);
|
||||
DataContext = viewModel;
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void BtnLogin_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
var loginInput = this.FindControl<TextBox>("TxtLogin")?.Text?.Trim();
|
||||
var passwordInput = this.FindControl<TextBox>("TxtPassword")?.Text?.Trim();
|
||||
var lblError = this.FindControl<TextBlock>("LblError");
|
||||
|
||||
if (lblError != null)
|
||||
{
|
||||
lblError.Text = "";
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(loginInput) || string.IsNullOrEmpty(passwordInput))
|
||||
{
|
||||
if (lblError != null) lblError.Text = "Пожалуйста, введите логин и пароль.";
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var user = DatabaseService.AuthenticateUser(loginInput, passwordInput);
|
||||
if (user != null)
|
||||
{
|
||||
NavigateByRole(user.RoleId.id);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (lblError != null) lblError.Text = "Неверный логин или пароль.";
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (lblError != null) lblError.Text = $"Ошибка: {ex.Message}";
|
||||
}
|
||||
}
|
||||
|
||||
private void NavigateByRole(int roleId)
|
||||
{
|
||||
|
|
@ -63,8 +30,10 @@ public partial class MainWindow : Window
|
|||
nextWindow = new ReaderWindow();
|
||||
break;
|
||||
default:
|
||||
var lblError = this.FindControl<TextBlock>("LblError");
|
||||
if (lblError != null) lblError.Text = "Неизвестная роль пользователя.";
|
||||
if (DataContext is MainWindowViewModel vm)
|
||||
{
|
||||
vm.ErrorMessage = "Неизвестная роль пользователя.";
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,51 +1,54 @@
|
|||
<Window xmlns="https://github.com/avaloniaui"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:vm="using:CourseProject1125.ViewModels"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
mc:Ignorable="d" d:DesignWidth="1100" d:DesignHeight="650"
|
||||
x:Class="CourseProject1125.Views.ReaderWindow"
|
||||
x:DataType="vm:ReaderWindowViewModel"
|
||||
Title="Личный кабинет читателя - Библиотека"
|
||||
Width="1100" Height="650"
|
||||
WindowStartupLocation="CenterScreen"
|
||||
Background="#0f172a">
|
||||
Background="White">
|
||||
|
||||
<Grid ColumnDefinitions="240, *">
|
||||
<Border Grid.Column="0" Background="#1e293b" BorderBrush="#334155" BorderThickness="0,0,1,0" Padding="15">
|
||||
<Border Grid.Column="0" Background="LightGray" BorderBrush="Gray" BorderThickness="0,0,1,0" Padding="15">
|
||||
<Grid RowDefinitions="Auto, *, Auto">
|
||||
<StackPanel Grid.Row="0" Margin="0,10,0,30">
|
||||
<TextBlock Text="БИБЛИОТЕКА" Foreground="#38bdf8" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" LetterSpacing="1"/>
|
||||
<TextBlock Text="Личный кабинет" Foreground="#94a3b8" FontSize="11" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtReaderName" Foreground="#cbd5e1" FontSize="12" FontWeight="SemiBold" HorizontalAlignment="Center" Margin="0,10,0,0"/>
|
||||
<TextBlock Text="БИБЛИОТЕКА" Foreground="Black" FontSize="20" FontWeight="Bold" HorizontalAlignment="Center" LetterSpacing="1"/>
|
||||
<TextBlock Text="Личный кабинет" Foreground="Black" FontSize="11" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtReaderName" Text="{Binding ReaderName}" Foreground="Black" FontSize="12" FontWeight="SemiBold" HorizontalAlignment="Center" Margin="0,10,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<StackPanel Grid.Row="1">
|
||||
<Button Name="BtnTabCatalog" Content=" Поиск книг" Click="BtnTab_Click" Tag="Catalog" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabMyLoans" Content=" Мои выдачи" Click="BtnTab_Click" Tag="MyLoans" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabMyFines" Content=" Мои штрафы" Click="BtnTab_Click" Tag="MyFines" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabMyReservations" Content=" Мои брони" Click="BtnTab_Click" Tag="MyReservations" HorizontalAlignment="Stretch" Height="40" Background="Transparent" Foreground="#94a3b8" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabCatalog" Content=" Поиск книг" Command="{Binding ShowTabCommand}" CommandParameter="Catalog" Background="{Binding CatalogTabBackground}" Foreground="{Binding CatalogTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabMyLoans" Content=" Мои выдачи" Command="{Binding ShowTabCommand}" CommandParameter="MyLoans" Background="{Binding MyLoansTabBackground}" Foreground="{Binding MyLoansTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabReturnBook" Content=" Сдать книгу" Command="{Binding ShowTabCommand}" CommandParameter="ReturnBook" Background="{Binding ReturnBookTabBackground}" Foreground="{Binding ReturnBookTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabMyFines" Content=" Мои штрафы" Command="{Binding ShowTabCommand}" CommandParameter="MyFines" Background="{Binding MyFinesTabBackground}" Foreground="{Binding MyFinesTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
<Button Name="BtnTabMyReservations" Content=" Мои брони" Command="{Binding ShowTabCommand}" CommandParameter="MyReservations" Background="{Binding MyReservationsTabBackground}" Foreground="{Binding MyReservationsTabForeground}" HorizontalAlignment="Stretch" Height="40" FontWeight="SemiBold" CornerRadius="6" HorizontalContentAlignment="Left" Padding="15,0,0,0"/>
|
||||
</StackPanel>
|
||||
|
||||
<Button Grid.Row="3" Content=" Выйти из системы" Click="BtnLogout_Click" HorizontalAlignment="Stretch" Height="40" Background="#ef4444" Foreground="White" FontWeight="Bold" CornerRadius="6" HorizontalContentAlignment="Center"/>
|
||||
<Button Grid.Row="3" Content=" Выйти из системы" Command="{Binding LogoutCommand}" HorizontalAlignment="Stretch" Height="40" Background="Red" Foreground="White" FontWeight="Bold" CornerRadius="6" HorizontalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Grid Grid.Column="1" RowDefinitions="Auto, *">
|
||||
<Border Grid.Row="0" Background="#1e293b" Height="60" Padding="20,0" BorderBrush="#334155" BorderThickness="0,0,0,1">
|
||||
<Border Grid.Row="0" Background="LightGray" Height="60" Padding="20,0" BorderBrush="Gray" BorderThickness="0,0,0,1">
|
||||
<Grid ColumnDefinitions="*, Auto">
|
||||
<TextBlock Name="TxtActiveTabHeader" Text="🔍 Каталог и бронирование книг" Foreground="White" FontSize="18" FontWeight="Bold" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="Роль: Читатель" Foreground="#94a3b8" FontSize="12" VerticalAlignment="Center"/>
|
||||
<TextBlock Name="TxtActiveTabHeader" Text="{Binding ActiveTabHeader}" Foreground="Black" FontSize="18" FontWeight="Bold" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="Роль: Читатель" Foreground="Black" FontSize="12" VerticalAlignment="Center"/>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
<Grid Grid.Row="1" Margin="20">
|
||||
<Grid Name="GridCatalog" RowDefinitions="Auto, *">
|
||||
<Grid Name="GridCatalog" RowDefinitions="Auto, *" IsVisible="{Binding IsCatalogVisible}">
|
||||
<Grid Grid.Row="0" ColumnDefinitions="*, Auto">
|
||||
<TextBox Name="TxtSearchQuery" Watermark="Введите название книги, автора или ISBN для поиска..." Height="40" CornerRadius="6" VerticalContentAlignment="Center"/>
|
||||
<Button Grid.Column="1" Content="🔍 Поиск" Click="BtnSearch_Click" Background="#3b82f6" Foreground="White" Width="120" Height="40" FontWeight="Bold" CornerRadius="6" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
<TextBox Name="TxtSearchQuery" Text="{Binding SearchQuery, Mode=TwoWay}" Watermark="Введите название книги, автора или ISBN для поиска..." Height="40" CornerRadius="6" VerticalContentAlignment="Center"/>
|
||||
<Button Grid.Column="1" Content="🔍 Поиск" Command="{Binding SearchCommand}" Background="Blue" Foreground="White" Width="120" Height="40" FontWeight="Bold" CornerRadius="6" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
</Grid>
|
||||
|
||||
<Grid Grid.Row="1" ColumnDefinitions="*, 320">
|
||||
<DataGrid Name="DgCatalog" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b" SelectionChanged="DgCatalog_SelectionChanged">
|
||||
<DataGrid Name="DgCatalog" Grid.Column="0" ItemsSource="{Binding BooksList}" SelectedItem="{Binding SelectedBook, Mode=TwoWay}" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Название книги" Binding="{Binding Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Автор" Binding="{Binding AuthorId.Name}" Width="1.5*"/>
|
||||
|
|
@ -54,58 +57,84 @@
|
|||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Информация о книге" Foreground="#38bdf8" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtCatalogBookTitle" Text="Выберите книгу из списка." Foreground="White" FontSize="14" FontWeight="SemiBold" TextWrapping="Wrap"/>
|
||||
<TextBlock Name="TxtCatalogBookAuthor" Text="" Foreground="#cbd5e1" FontSize="13" TextWrapping="Wrap"/>
|
||||
<TextBlock Name="TxtCatalogBookDesc" Text="" Foreground="#94a3b8" FontSize="12" TextWrapping="Wrap" MaxHeight="120"/>
|
||||
<TextBlock Text="Информация о книге" Foreground="Black" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtCatalogBookTitle" Text="{Binding CatalogBookTitle}" Foreground="Black" FontSize="14" FontWeight="SemiBold" TextWrapping="Wrap"/>
|
||||
<TextBlock Name="TxtCatalogBookAuthor" Text="{Binding CatalogBookAuthor}" Foreground="Black" FontSize="13" TextWrapping="Wrap"/>
|
||||
<TextBlock Name="TxtCatalogBookDesc" Text="{Binding CatalogBookDesc}" Foreground="Black" FontSize="12" TextWrapping="Wrap" MaxHeight="120"/>
|
||||
|
||||
<Separator Background="#334155"/>
|
||||
<TextBlock Name="TxtCatalogAvailability" Text="Доступно копий: -" Foreground="#cbd5e1" FontSize="13"/>
|
||||
<Separator Background="LightGray"/>
|
||||
<TextBlock Name="TxtCatalogAvailability" Text="{Binding CatalogAvailability}" Foreground="Black" FontSize="13"/>
|
||||
|
||||
<Button Name="BtnReserveBook" Content=" Забронировать" Click="BtnReserveBook_Click" Background="#22c55e" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" IsEnabled="False"/>
|
||||
<Button Name="BtnReserveBook" Content=" Забронировать" Command="{Binding ReserveBookCommand}" IsEnabled="{Binding IsReserveEnabled}" Background="Green" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
|
||||
<TextBlock Name="TxtCatalogStatus" Text="" Foreground="#22c55e" FontSize="12" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtCatalogStatus" Text="{Binding CatalogStatus}" Foreground="{Binding CatalogStatusColor}" FontSize="12" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridMyLoans" IsVisible="False">
|
||||
<DataGrid Name="DgMyLoans" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b">
|
||||
<Grid Name="GridMyLoans" IsVisible="{Binding IsMyLoansVisible}">
|
||||
<DataGrid Name="DgMyLoans" ItemsSource="{Binding MyLoansList}" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Книга" Binding="{Binding CopyId.BookId.Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Инв. Номер" Binding="{Binding CopyId.Inventory_number}" Width="120"/>
|
||||
<DataGridTextColumn Header="Дата выдачи" Binding="{Binding Issue_date, StringFormat={}{0:dd.MM.yyyy}}" Width="120"/>
|
||||
<DataGridTextColumn Header="Срок сдачи" Binding="{Binding Due_date, StringFormat={}{0:dd.MM.yyyy}}" Width="120"/>
|
||||
<DataGridTextColumn Header="Дата сдачи" Binding="{Binding Return_date, StringFormat={}{0:dd.MM.yyyy}}" Width="120"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding Status}" Width="110"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding StatusText}" Width="130"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridMyFines" ColumnDefinitions="*, 320" IsVisible="False">
|
||||
<DataGrid Name="DgMyFines" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b">
|
||||
|
||||
<Grid Name="GridReturnBook" ColumnDefinitions="*, 320" IsVisible="{Binding IsReturnBookVisible}">
|
||||
<DataGrid Name="DgReturnLoans" Grid.Column="0" ItemsSource="{Binding ActiveLoansList}" SelectedItem="{Binding SelectedReturnLoan, Mode=TwoWay}" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Книга" Binding="{Binding LoanId.CopyId.BookId.Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Сумма штрафа" Binding="{Binding Amount}" Width="120"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding Is_paid}" Width="110"/>
|
||||
<DataGridTextColumn Header="Дата начисления" Binding="{Binding Created_at, StringFormat={}{0:dd.MM.yyyy}}" Width="130"/>
|
||||
<DataGridTextColumn Header="Книга" Binding="{Binding CopyId.BookId.Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Инв. Номер" Binding="{Binding CopyId.Inventory_number}" Width="120"/>
|
||||
<DataGridTextColumn Header="Дата выдачи" Binding="{Binding Issue_date, StringFormat={}{0:dd.MM.yyyy}}" Width="120"/>
|
||||
<DataGridTextColumn Header="Срок сдачи" Binding="{Binding Due_date, StringFormat={}{0:dd.MM.yyyy}}" Width="120"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding StatusText}" Width="110"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="ℹ️ Оплата штрафов" Foreground="#38bdf8" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Text="Штрафы начисляются за несвоевременный возврат книг (15 руб./день)." Foreground="#cbd5e1" TextWrapping="Wrap"/>
|
||||
<TextBlock Text="Для оплаты штрафа обратитесь к библиотекарю в физический филиал библиотеки." Foreground="#cbd5e1" TextWrapping="Wrap" Margin="0,5,0,0"/>
|
||||
<TextBlock Text="Возврат книги" Foreground="Black" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtReturnBookDetails" Text="{Binding ReturnBookDetails}" Foreground="Black" TextWrapping="Wrap" FontSize="13" Margin="0,5,0,10"/>
|
||||
|
||||
<Button Name="BtnSubmitReturn" Content=" Сдать книгу" Command="{Binding SubmitReturnCommand}" IsEnabled="{Binding IsSubmitReturnEnabled}" Background="Blue" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
|
||||
<TextBlock Name="TxtReturnBookStatus" Text="{Binding ReturnBookStatus}" Foreground="{Binding ReturnBookStatusColor}" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center" FontWeight="SemiBold" Margin="0,10,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridMyReservations" ColumnDefinitions="*, 320" IsVisible="False">
|
||||
<DataGrid Name="DgMyReservations" Grid.Column="0" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="#334155" Background="#1e293b" SelectionChanged="DgMyReservations_SelectionChanged">
|
||||
<Grid Name="GridMyFines" ColumnDefinitions="*, 320" IsVisible="{Binding IsMyFinesVisible}">
|
||||
<DataGrid Name="DgMyFines" Grid.Column="0" ItemsSource="{Binding MyFinesList}" SelectedItem="{Binding SelectedFine, Mode=TwoWay}" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Книга" Binding="{Binding LoanId.CopyId.BookId.Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Сумма штрафа" Binding="{Binding Amount}" Width="120"/>
|
||||
<DataGridTextColumn Header="Статус" Binding="{Binding StatusText}" Width="110"/>
|
||||
<DataGridTextColumn Header="Дата начисления" Binding="{Binding Created_at, StringFormat={}{0:dd.MM.yyyy}}" Width="130"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Оплата штрафа" Foreground="Black" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtMyFineDetails" Text="{Binding MyFineDetails}" Foreground="Black" TextWrapping="Wrap" FontSize="13" Margin="0,5,0,10"/>
|
||||
|
||||
<Button Name="BtnPayMyFine" Content=" Оплатить штраф" Command="{Binding PayMyFineCommand}" IsEnabled="{Binding IsPayMyFineEnabled}" Background="Green" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
|
||||
<TextBlock Name="TxtMyFineStatus" Text="{Binding MyFineStatus}" Foreground="{Binding MyFineStatusColor}" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center" FontWeight="SemiBold" Margin="0,10,0,0"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
||||
<Grid Name="GridMyReservations" ColumnDefinitions="*, 320" IsVisible="{Binding IsMyReservationsVisible}">
|
||||
<DataGrid Name="DgMyReservations" Grid.Column="0" ItemsSource="{Binding MyReservationsList}" SelectedItem="{Binding SelectedReservation, Mode=TwoWay}" AutoGenerateColumns="False" IsReadOnly="True" GridLinesVisibility="All" BorderThickness="1" BorderBrush="LightGray" Background="White">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn Header="Книга" Binding="{Binding BookId.Title}" Width="2*"/>
|
||||
<DataGridTextColumn Header="Дата бронирования" Binding="{Binding Reservation_date, StringFormat={}{0:dd.MM.yyyy}}" Width="150"/>
|
||||
|
|
@ -114,14 +143,14 @@
|
|||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
|
||||
<Border Grid.Column="1" Background="#1e293b" CornerRadius="8" Padding="15" BorderBrush="#334155" BorderThickness="1" VerticalAlignment="Top">
|
||||
<Border Grid.Column="1" Background="White" CornerRadius="8" Padding="15" BorderBrush="LightGray" BorderThickness="1" VerticalAlignment="Top">
|
||||
<StackPanel>
|
||||
<TextBlock Text="Действия с бронью" Foreground="#38bdf8" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtMyReservationDetails" Text="Выберите бронь из списка." Foreground="#cbd5e1" TextWrapping="Wrap" FontSize="13"/>
|
||||
<TextBlock Text="Действия с бронью" Foreground="Black" FontSize="15" FontWeight="Bold"/>
|
||||
<TextBlock Name="TxtMyReservationDetails" Text="{Binding MyReservationDetails}" Foreground="Black" TextWrapping="Wrap" FontSize="13"/>
|
||||
|
||||
<Button Name="BtnCancelMyReservation" Content=" Отменить бронь" Click="BtnCancelMyReservation_Click" Background="#ef4444" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" IsEnabled="False"/>
|
||||
<Button Name="BtnCancelMyReservation" Content=" Отменить бронь" Command="{Binding CancelMyReservationCommand}" IsEnabled="{Binding IsCancelMyReservationEnabled}" Background="Red" Foreground="White" HorizontalAlignment="Stretch" Height="40" FontWeight="Bold" CornerRadius="4" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"/>
|
||||
|
||||
<TextBlock Name="TxtMyReservationStatus" Text="" Foreground="#cbd5e1" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
<TextBlock Name="TxtMyReservationStatus" Text="{Binding MyReservationStatus}" Foreground="{Binding MyReservationStatusColor}" FontSize="13" TextWrapping="Wrap" HorizontalAlignment="Center"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
|
|
|
|||
|
|
@ -1,276 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Avalonia;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Media;
|
||||
using CourseProject1125.DB;
|
||||
using CourseProject1125.Models;
|
||||
using CourseProject1125.ViewModels;
|
||||
|
||||
namespace CourseProject1125.Views;
|
||||
|
||||
public partial class ReaderWindow : Window
|
||||
namespace CourseProject1125.Views
|
||||
{
|
||||
private Book? _selectedBook;
|
||||
private Reservation? _selectedReservation;
|
||||
|
||||
private List<Book> _allBooks = new();
|
||||
private List<Book_copies> _allCopies = new();
|
||||
private List<Loan> _myLoans = new();
|
||||
private List<Fine> _myFines = new();
|
||||
private List<Reservation> _myReservations = new();
|
||||
|
||||
public ReaderWindow()
|
||||
public partial class ReaderWindow : Window
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
// Show reader's name
|
||||
TxtReaderName.Text = UserSession.UserName;
|
||||
|
||||
LoadAllData();
|
||||
ShowTab("Catalog");
|
||||
}
|
||||
|
||||
private void LoadAllData()
|
||||
{
|
||||
_allBooks = DatabaseService.GetBooks();
|
||||
_allCopies = DatabaseService.GetBookCopies();
|
||||
|
||||
RefreshCatalog();
|
||||
RefreshMyLoans();
|
||||
RefreshMyFines();
|
||||
RefreshMyReservations();
|
||||
}
|
||||
|
||||
#region Navigation
|
||||
private void BtnTab_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (sender is Button btn && btn.Tag is string tabName)
|
||||
public ReaderWindow()
|
||||
{
|
||||
ShowTab(tabName);
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowTab(string tabName)
|
||||
{
|
||||
// Hide all grids
|
||||
GridCatalog.IsVisible = false;
|
||||
GridMyLoans.IsVisible = false;
|
||||
GridMyFines.IsVisible = false;
|
||||
GridMyReservations.IsVisible = false;
|
||||
|
||||
// Reset button styles
|
||||
ResetButtonStyles(BtnTabCatalog);
|
||||
ResetButtonStyles(BtnTabMyLoans);
|
||||
ResetButtonStyles(BtnTabMyFines);
|
||||
ResetButtonStyles(BtnTabMyReservations);
|
||||
|
||||
switch (tabName)
|
||||
{
|
||||
case "Catalog":
|
||||
GridCatalog.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "🔍 Каталог и бронирование книг";
|
||||
SetActiveButtonStyles(BtnTabCatalog);
|
||||
LoadAllData(); // Reload catalog to get latest availability
|
||||
break;
|
||||
case "MyLoans":
|
||||
GridMyLoans.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "📚 Мои выданные книги";
|
||||
SetActiveButtonStyles(BtnTabMyLoans);
|
||||
RefreshMyLoans();
|
||||
break;
|
||||
case "MyFines":
|
||||
GridMyFines.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "💰 Мои штрафы";
|
||||
SetActiveButtonStyles(BtnTabMyFines);
|
||||
RefreshMyFines();
|
||||
break;
|
||||
case "MyReservations":
|
||||
GridMyReservations.IsVisible = true;
|
||||
TxtActiveTabHeader.Text = "🛎️ Мои бронирования";
|
||||
SetActiveButtonStyles(BtnTabMyReservations);
|
||||
RefreshMyReservations();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void ResetButtonStyles(Button btn)
|
||||
{
|
||||
btn.Background = Brushes.Transparent;
|
||||
btn.Foreground = Brush.Parse("#94a3b8");
|
||||
}
|
||||
|
||||
private void SetActiveButtonStyles(Button btn)
|
||||
{
|
||||
btn.Background = Brush.Parse("#0f172a");
|
||||
btn.Foreground = Brush.Parse("#38bdf8");
|
||||
}
|
||||
|
||||
private void BtnLogout_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
var mainWin = new MainWindow();
|
||||
mainWin.Show();
|
||||
this.Close();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Catalog Tab (Search & Reserve)
|
||||
private void RefreshCatalog()
|
||||
{
|
||||
DgCatalog.ItemsSource = null;
|
||||
DgCatalog.ItemsSource = _allBooks;
|
||||
|
||||
_selectedBook = null;
|
||||
TxtCatalogBookTitle.Text = "Выберите книгу из списка.";
|
||||
TxtCatalogBookAuthor.Text = "";
|
||||
TxtCatalogBookDesc.Text = "";
|
||||
TxtCatalogAvailability.Text = "Доступно копий: -";
|
||||
BtnReserveBook.IsEnabled = false;
|
||||
TxtCatalogStatus.Text = "";
|
||||
}
|
||||
|
||||
private void BtnSearch_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
string query = TxtSearchQuery.Text?.Trim() ?? "";
|
||||
if (string.IsNullOrEmpty(query))
|
||||
{
|
||||
DgCatalog.ItemsSource = _allBooks;
|
||||
}
|
||||
else
|
||||
{
|
||||
var filtered = _allBooks.Where(b =>
|
||||
b.Title.Contains(query, StringComparison.OrdinalIgnoreCase) ||
|
||||
b.AuthorId.Name.Contains(query, StringComparison.OrdinalIgnoreCase) ||
|
||||
b.Isbn.Contains(query, StringComparison.OrdinalIgnoreCase)
|
||||
).ToList();
|
||||
DgCatalog.ItemsSource = filtered;
|
||||
}
|
||||
}
|
||||
|
||||
private void DgCatalog_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (DgCatalog.SelectedItem is Book book)
|
||||
{
|
||||
_selectedBook = book;
|
||||
TxtCatalogBookTitle.Text = book.Title;
|
||||
TxtCatalogBookAuthor.Text = $"Автор: {book.AuthorId.Name} | ISBN: {book.Isbn} | Год: {book.Year_published}";
|
||||
TxtCatalogBookDesc.Text = string.IsNullOrEmpty(book.Description) ? "Описание отсутствует." : book.Description;
|
||||
|
||||
// Calculate availability
|
||||
int totalCopies = _allCopies.Count(c => c.BookId.Id == book.Id);
|
||||
int availableCopies = _allCopies.Count(c => c.BookId.Id == book.Id && c.Status.Equals("available", StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
TxtCatalogAvailability.Text = $"Всего экземпляров: {totalCopies} | Доступно для выдачи: {availableCopies}";
|
||||
|
||||
// Enable reservation button only if there is at least one copy available
|
||||
BtnReserveBook.IsEnabled = availableCopies > 0;
|
||||
TxtCatalogStatus.Text = "";
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnReserveBook_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedBook == null) return;
|
||||
|
||||
int readerId = UserSession.UserId;
|
||||
DateTime expiryDate = DateTime.Now.AddDays(3); // Reserve valid for 3 days
|
||||
|
||||
if (DatabaseService.CreateReservation(_selectedBook.Id, readerId, expiryDate))
|
||||
{
|
||||
TxtCatalogStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtCatalogStatus.Text = "Успешно! Книга забронирована на 3 дня. Заберите её на стойке выдачи.";
|
||||
|
||||
// Reload copies to update lists
|
||||
_allCopies = DatabaseService.GetBookCopies();
|
||||
|
||||
// Update UI details
|
||||
if (DgCatalog.SelectedItem is Book currentBook)
|
||||
var viewModel = new ReaderWindowViewModel();
|
||||
viewModel.OnLogoutRequested = () =>
|
||||
{
|
||||
int totalCopies = _allCopies.Count(c => c.BookId.Id == currentBook.Id);
|
||||
int availableCopies = _allCopies.Count(c => c.BookId.Id == currentBook.Id && c.Status.Equals("available", StringComparison.OrdinalIgnoreCase));
|
||||
TxtCatalogAvailability.Text = $"Всего экземпляров: {totalCopies} | Доступно для выдачи: {availableCopies}";
|
||||
BtnReserveBook.IsEnabled = availableCopies > 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtCatalogStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtCatalogStatus.Text = "Ошибка создания бронирования.";
|
||||
var mainWin = new MainWindow();
|
||||
mainWin.Show();
|
||||
this.Close();
|
||||
};
|
||||
DataContext = viewModel;
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region My Loans Tab
|
||||
private void RefreshMyLoans()
|
||||
{
|
||||
int readerId = UserSession.UserId;
|
||||
var allLoans = DatabaseService.GetLoans();
|
||||
_myLoans = allLoans.Where(l => l.ReaderId.Id == readerId).ToList();
|
||||
|
||||
DgMyLoans.ItemsSource = null;
|
||||
DgMyLoans.ItemsSource = _myLoans;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region My Fines Tab
|
||||
private void RefreshMyFines()
|
||||
{
|
||||
int readerId = UserSession.UserId;
|
||||
var allFines = DatabaseService.GetFines();
|
||||
_myFines = allFines.Where(f => f.LoanId.ReaderId.Id == readerId).ToList();
|
||||
|
||||
DgMyFines.ItemsSource = null;
|
||||
DgMyFines.ItemsSource = _myFines;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region My Reservations Tab
|
||||
private void RefreshMyReservations()
|
||||
{
|
||||
int readerId = UserSession.UserId;
|
||||
var allRes = DatabaseService.GetReservations();
|
||||
_myReservations = allRes.Where(r => r.ReaderId.Id == readerId).ToList();
|
||||
|
||||
DgMyReservations.ItemsSource = null;
|
||||
DgMyReservations.ItemsSource = _myReservations;
|
||||
|
||||
BtnCancelMyReservation.IsEnabled = false;
|
||||
TxtMyReservationDetails.Text = "Выберите бронь из списка.";
|
||||
TxtMyReservationStatus.Text = "";
|
||||
_selectedReservation = null;
|
||||
}
|
||||
|
||||
private void DgMyReservations_SelectionChanged(object? sender, SelectionChangedEventArgs e)
|
||||
{
|
||||
if (DgMyReservations.SelectedItem is Reservation res)
|
||||
{
|
||||
_selectedReservation = res;
|
||||
string activeStr = res.is_active == 1 ? "Активна" : "Неактивна/Отменена";
|
||||
TxtMyReservationDetails.Text = $"Книга: {res.BookId.Title}\n" +
|
||||
$"Дата брони: {res.Reservation_date:dd.MM.yyyy}\n" +
|
||||
$"Истекает: {res.Expiry_date:dd.MM.yyyy}\n" +
|
||||
$"Статус: {activeStr}";
|
||||
|
||||
BtnCancelMyReservation.IsEnabled = res.is_active == 1;
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnCancelMyReservation_Click(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_selectedReservation == null) return;
|
||||
|
||||
if (DatabaseService.CancelReservation(_selectedReservation.Id))
|
||||
{
|
||||
TxtMyReservationStatus.Foreground = Brush.Parse("#22c55e");
|
||||
TxtMyReservationStatus.Text = "Бронирование успешно отменено!";
|
||||
RefreshMyReservations();
|
||||
}
|
||||
else
|
||||
{
|
||||
TxtMyReservationStatus.Foreground = Brush.Parse("#ef4444");
|
||||
TxtMyReservationStatus.Text = "Ошибка при отмене бронирования.";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"DatabaseConnection": {
|
||||
"ConnectionString": "server=127.0.0.1; userid=root; password=; database=courseproject1125; port=3306; characterset=utf8"
|
||||
"ConnectionString": "server=192.168.200.13; userid=student; password=student; database=1125_CourseSolop; port=3306; characterset=utf8; Convert Zero Datetime=True"
|
||||
}
|
||||
}
|
||||
|
|
@ -25,7 +25,6 @@
|
|||
},
|
||||
"Avalonia/11.3.4": {
|
||||
"dependencies": {
|
||||
"Avalonia.BuildServices": "0.0.31",
|
||||
"Avalonia.Remote.Protocol": "11.3.4",
|
||||
"MicroCom.Runtime": "0.11.0"
|
||||
},
|
||||
|
|
@ -95,7 +94,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"Avalonia.BuildServices/0.0.31": {},
|
||||
"Avalonia.Controls.ColorPicker/11.3.4": {
|
||||
"dependencies": {
|
||||
"Avalonia": "11.3.4",
|
||||
|
|
@ -201,10 +199,8 @@
|
|||
"Avalonia": "11.3.4",
|
||||
"HarfBuzzSharp": "8.3.1.1",
|
||||
"HarfBuzzSharp.NativeAssets.Linux": "8.3.1.1",
|
||||
"HarfBuzzSharp.NativeAssets.WebAssembly": "8.3.1.1",
|
||||
"SkiaSharp": "2.88.9",
|
||||
"SkiaSharp.NativeAssets.Linux": "2.88.9",
|
||||
"SkiaSharp.NativeAssets.WebAssembly": "2.88.9"
|
||||
"SkiaSharp.NativeAssets.Linux": "2.88.9"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Avalonia.Skia.dll": {
|
||||
|
|
@ -352,7 +348,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"HarfBuzzSharp.NativeAssets.WebAssembly/8.3.1.1": {},
|
||||
"HarfBuzzSharp.NativeAssets.Win32/8.3.1.1": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-arm64/native/libHarfBuzzSharp.dll": {
|
||||
|
|
@ -605,8 +600,7 @@
|
|||
"Microsoft.Extensions.Configuration": "8.0.0",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "8.0.0",
|
||||
"Microsoft.Extensions.Configuration.FileExtensions": "8.0.0",
|
||||
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0",
|
||||
"System.Text.Json": "8.0.0"
|
||||
"Microsoft.Extensions.FileProviders.Abstractions": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Configuration.Json.dll": {
|
||||
|
|
@ -664,8 +658,7 @@
|
|||
"Microsoft.Extensions.Diagnostics.Abstractions/8.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"System.Diagnostics.DiagnosticSource": "8.0.0"
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
|
||||
|
|
@ -801,8 +794,7 @@
|
|||
"Microsoft.Extensions.Logging": "8.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Logging.Configuration": "8.0.0",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"System.Text.Json": "8.0.0"
|
||||
"Microsoft.Extensions.Options": "8.0.2"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.Console.dll": {
|
||||
|
|
@ -845,8 +837,7 @@
|
|||
"Microsoft.Extensions.Logging": "8.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "8.0.2",
|
||||
"Microsoft.Extensions.Options": "8.0.2",
|
||||
"Microsoft.Extensions.Primitives": "8.0.0",
|
||||
"System.Text.Json": "8.0.0"
|
||||
"Microsoft.Extensions.Primitives": "8.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Extensions.Logging.EventSource.dll": {
|
||||
|
|
@ -1023,7 +1014,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"SkiaSharp.NativeAssets.WebAssembly/2.88.9": {},
|
||||
"SkiaSharp.NativeAssets.Win32/2.88.9": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-arm64/native/libSkiaSharp.dll": {
|
||||
|
|
@ -1055,7 +1045,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/8.0.0": {},
|
||||
"System.Diagnostics.EventLog/8.0.1": {
|
||||
"runtime": {
|
||||
"lib/net8.0/System.Diagnostics.EventLog.dll": {
|
||||
|
|
@ -1122,12 +1111,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"System.Text.Encodings.Web/8.0.0": {},
|
||||
"System.Text.Json/8.0.0": {
|
||||
"dependencies": {
|
||||
"System.Text.Encodings.Web": "8.0.0"
|
||||
}
|
||||
},
|
||||
"Tmds.DBus.Protocol/0.21.2": {
|
||||
"dependencies": {
|
||||
"System.IO.Pipelines": "8.0.0"
|
||||
|
|
@ -1161,13 +1144,6 @@
|
|||
"path": "avalonia.angle.windows.natives/2.1.25547.20250602",
|
||||
"hashPath": "avalonia.angle.windows.natives.2.1.25547.20250602.nupkg.sha512"
|
||||
},
|
||||
"Avalonia.BuildServices/0.0.31": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KmCN6Hc+45q4OnF10ge450yVUvWuxU6bdQiyKqiSvrHKpahNrEdk0kG6Ip6GHk2SKOCttGQuA206JVdkldEENg==",
|
||||
"path": "avalonia.buildservices/0.0.31",
|
||||
"hashPath": "avalonia.buildservices.0.0.31.nupkg.sha512"
|
||||
},
|
||||
"Avalonia.Controls.ColorPicker/11.3.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
|
|
@ -1287,13 +1263,6 @@
|
|||
"path": "harfbuzzsharp.nativeassets.macos/8.3.1.1",
|
||||
"hashPath": "harfbuzzsharp.nativeassets.macos.8.3.1.1.nupkg.sha512"
|
||||
},
|
||||
"HarfBuzzSharp.NativeAssets.WebAssembly/8.3.1.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-loJweK2u/mH/3C2zBa0ggJlITIszOkK64HLAZB7FUT670dTg965whLFYHDQo69NmC4+d9UN0icLC9VHidXaVCA==",
|
||||
"path": "harfbuzzsharp.nativeassets.webassembly/8.3.1.1",
|
||||
"hashPath": "harfbuzzsharp.nativeassets.webassembly.8.3.1.1.nupkg.sha512"
|
||||
},
|
||||
"HarfBuzzSharp.NativeAssets.Win32/8.3.1.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
|
|
@ -1623,13 +1592,6 @@
|
|||
"path": "skiasharp.nativeassets.macos/2.88.9",
|
||||
"hashPath": "skiasharp.nativeassets.macos.2.88.9.nupkg.sha512"
|
||||
},
|
||||
"SkiaSharp.NativeAssets.WebAssembly/2.88.9": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-kt06RccBHSnAs2wDYdBSfsjIDbY3EpsOVqnlDgKdgvyuRA8ZFDaHRdWNx1VHjGgYzmnFCGiTJBnXFl5BqGwGnA==",
|
||||
"path": "skiasharp.nativeassets.webassembly/2.88.9",
|
||||
"hashPath": "skiasharp.nativeassets.webassembly.2.88.9.nupkg.sha512"
|
||||
},
|
||||
"SkiaSharp.NativeAssets.Win32/2.88.9": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
|
|
@ -1644,13 +1606,6 @@
|
|||
"path": "system.configuration.configurationmanager/8.0.1",
|
||||
"hashPath": "system.configuration.configurationmanager.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Diagnostics.DiagnosticSource/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-c9xLpVz6PL9lp/djOWtk5KPDZq3cSYpmXoJQY524EOtuFl5z9ZtsotpsyrDW40U1DRnQSYvcPKEUV0X//u6gkQ==",
|
||||
"path": "system.diagnostics.diagnosticsource/8.0.0",
|
||||
"hashPath": "system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Diagnostics.EventLog/8.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
|
|
@ -1686,20 +1641,6 @@
|
|||
"path": "system.security.cryptography.protecteddata/8.0.0",
|
||||
"hashPath": "system.security.cryptography.protecteddata.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Text.Encodings.Web/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
|
||||
"path": "system.text.encodings.web/8.0.0",
|
||||
"hashPath": "system.text.encodings.web.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Text.Json/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-OdrZO2WjkiEG6ajEFRABTRCi/wuXQPxeV6g8xvUJqdxMvvuCCEk86zPla8UiIQJz3durtUEbNyY/3lIhS0yZvQ==",
|
||||
"path": "system.text.json/8.0.0",
|
||||
"hashPath": "system.text.json.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Tmds.DBus.Protocol/0.21.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"DatabaseConnection": {
|
||||
"ConnectionString": "server=127.0.0.1; userid=root; password=; database=courseproject1125; port=3306; characterset=utf8"
|
||||
"ConnectionString": "server=192.168.200.13; userid=student; password=student; database=1125_CourseSolop; port=3306; characterset=utf8; Convert Zero Datetime=True"
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"DatabaseConnection": {
|
||||
"ConnectionString": "server=127.0.0.1; userid=root; password=; database=courseproject1125; port=3306; characterset=utf8"
|
||||
"ConnectionString": "server=127.0.0.1; userid=root; password=; database=courseproject1125; port=3306; characterset=utf8; Convert Zero Datetime=True"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,26 +1,33 @@
|
|||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj": {}
|
||||
"C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj": {
|
||||
"C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"projectUniqueName": "C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"projectName": "CourseProject1125",
|
||||
"projectPath": "C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"packagesPath": "C:\\Users\\danii\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\obj\\",
|
||||
"projectPath": "C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"packagesPath": "C:\\Users\\student\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\danii\\AppData\\Roaming\\NuGet\\NuGet.Config"
|
||||
"C:\\Users\\student\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net8.0"
|
||||
],
|
||||
"sources": {
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"http://192.168.200.81:8081/repository/nuget.org-proxy/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
|
|
@ -38,7 +45,7 @@
|
|||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.300"
|
||||
"SdkAnalysisLevel": "10.0.300"
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
|
|
@ -119,7 +126,7 @@
|
|||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Users\\danii\\.dotnet\\sdk\\9.0.314/PortableRuntimeIdentifierGraph.json"
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,12 +5,13 @@
|
|||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\danii\.nuget\packages\</NuGetPackageFolders>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\student\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
|
||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="C:\Users\danii\.nuget\packages\" />
|
||||
<SourceRoot Include="C:\Users\student\.nuget\packages\" />
|
||||
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||
</ItemGroup>
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)skiasharp.nativeassets.webassembly\2.88.9\buildTransitive\netstandard1.0\SkiaSharp.NativeAssets.WebAssembly.props" Condition="Exists('$(NuGetPackageRoot)skiasharp.nativeassets.webassembly\2.88.9\buildTransitive\netstandard1.0\SkiaSharp.NativeAssets.WebAssembly.props')" />
|
||||
|
|
@ -19,7 +20,7 @@
|
|||
<Import Project="$(NuGetPackageRoot)avalonia\11.3.4\buildTransitive\Avalonia.props" Condition="Exists('$(NuGetPackageRoot)avalonia\11.3.4\buildTransitive\Avalonia.props')" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<PkgAvalonia_BuildServices Condition=" '$(PkgAvalonia_BuildServices)' == '' ">C:\Users\danii\.nuget\packages\avalonia.buildservices\0.0.31</PkgAvalonia_BuildServices>
|
||||
<PkgAvalonia Condition=" '$(PkgAvalonia)' == '' ">C:\Users\danii\.nuget\packages\avalonia\11.3.4</PkgAvalonia>
|
||||
<PkgAvalonia_BuildServices Condition=" '$(PkgAvalonia_BuildServices)' == '' ">C:\Users\student\.nuget\packages\avalonia.buildservices\0.0.31</PkgAvalonia_BuildServices>
|
||||
<PkgAvalonia Condition=" '$(PkgAvalonia)' == '' ">C:\Users\student\.nuget\packages\avalonia\11.3.4</PkgAvalonia>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -1 +1 @@
|
|||
294271ec211234fd079b4594ff340682c693cd43445f59eb9b6345b1035925e6
|
||||
fa28311452cd50c3f966bd5240424614abe3050f072b61080a48759c142d79fe
|
||||
|
|
|
|||
|
|
@ -1,236 +1,236 @@
|
|||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Base.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.controls.colorpicker\11.3.4\lib\net8.0\Avalonia.Controls.ColorPicker.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.controls.datagrid\11.3.4\lib\net8.0\Avalonia.Controls.DataGrid.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Controls.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.DesignerSupport.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.desktop\11.3.4\lib\net8.0\Avalonia.Desktop.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.diagnostics\11.3.4\lib\net8.0\Avalonia.Diagnostics.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Dialogs.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.fonts.inter\11.3.4\lib\net8.0\Avalonia.Fonts.Inter.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.freedesktop\11.3.4\lib\net8.0\Avalonia.FreeDesktop.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Markup.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Markup.Xaml.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Metal.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.MicroCom.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.native\11.3.4\lib\net8.0\Avalonia.Native.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.OpenGL.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.remote.protocol\11.3.4\lib\net8.0\Avalonia.Remote.Protocol.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.skia\11.3.4\lib\net8.0\Avalonia.Skia.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.themes.fluent\11.3.4\lib\net8.0\Avalonia.Themes.Fluent.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.themes.simple\11.3.4\lib\net8.0\Avalonia.Themes.Simple.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Vulkan.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.win32\11.3.4\lib\net8.0\Avalonia.Win32.Automation.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.win32\11.3.4\lib\net8.0\Avalonia.Win32.dll
|
||||
C:\Users\danii\.nuget\packages\avalonia.x11\11.3.4\lib\net8.0\Avalonia.X11.dll
|
||||
C:\Users\danii\.nuget\packages\communitytoolkit.mvvm\8.2.1\lib\net6.0\CommunityToolkit.Mvvm.dll
|
||||
C:\Users\danii\.nuget\packages\harfbuzzsharp\8.3.1.1\lib\net8.0\HarfBuzzSharp.dll
|
||||
C:\Users\danii\.nuget\packages\microcom.runtime\0.11.0\lib\net5.0\MicroCom.Runtime.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.bcl.cryptography\8.0.0\lib\net8.0\Microsoft.Bcl.Cryptography.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.CSharp.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.data.sqlclient\7.0.1\ref\net8.0\Microsoft.Data.SqlClient.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.data.sqlclient.extensions.abstractions\1.0.0\lib\netstandard2.0\Microsoft.Data.SqlClient.Extensions.Abstractions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.data.sqlclient.internal.logging\1.0.0\lib\netstandard2.0\Microsoft.Data.SqlClient.Internal.Logging.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.configuration.abstractions\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.configuration.binder\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.Binder.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.configuration.commandline\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.CommandLine.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.configuration\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.configuration.environmentvariables\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.EnvironmentVariables.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.configuration.fileextensions\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.FileExtensions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.configuration.json\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.Json.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.configuration.usersecrets\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.UserSecrets.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.dependencyinjection.abstractions\8.0.2\lib\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.dependencyinjection\8.0.0\lib\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.diagnostics.abstractions\8.0.0\lib\net8.0\Microsoft.Extensions.Diagnostics.Abstractions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.diagnostics\8.0.0\lib\net8.0\Microsoft.Extensions.Diagnostics.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.fileproviders.abstractions\8.0.0\lib\net8.0\Microsoft.Extensions.FileProviders.Abstractions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.fileproviders.physical\8.0.0\lib\net8.0\Microsoft.Extensions.FileProviders.Physical.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.filesystemglobbing\8.0.0\lib\net8.0\Microsoft.Extensions.FileSystemGlobbing.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.hosting.abstractions\8.0.0\lib\net8.0\Microsoft.Extensions.Hosting.Abstractions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.hosting\8.0.0\lib\net8.0\Microsoft.Extensions.Hosting.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.logging.abstractions\8.0.2\lib\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.logging.configuration\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.Configuration.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.logging.console\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.Console.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.logging.debug\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.Debug.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.logging\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.logging.eventlog\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.EventLog.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.logging.eventsource\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.EventSource.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.options.configurationextensions\8.0.0\lib\net8.0\Microsoft.Extensions.Options.ConfigurationExtensions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.options\8.0.2\lib\net8.0\Microsoft.Extensions.Options.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.extensions.primitives\8.0.0\lib\net8.0\Microsoft.Extensions.Primitives.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.identitymodel.abstractions\8.16.0\lib\net8.0\Microsoft.IdentityModel.Abstractions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.identitymodel.jsonwebtokens\8.16.0\lib\net8.0\Microsoft.IdentityModel.JsonWebTokens.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.identitymodel.logging\8.16.0\lib\net8.0\Microsoft.IdentityModel.Logging.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.identitymodel.protocols\8.16.0\lib\net8.0\Microsoft.IdentityModel.Protocols.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.identitymodel.protocols.openidconnect\8.16.0\lib\net8.0\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.identitymodel.tokens\8.16.0\lib\net8.0\Microsoft.IdentityModel.Tokens.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.sqlserver.server\1.0.0\lib\netstandard2.0\Microsoft.SqlServer.Server.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.VisualBasic.Core.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.VisualBasic.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.Win32.Primitives.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.Win32.Registry.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\mscorlib.dll
|
||||
C:\Users\danii\.nuget\packages\mysqlconnector\2.5.0\lib\net8.0\MySqlConnector.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\netstandard.dll
|
||||
C:\Users\danii\.nuget\packages\skiasharp\2.88.9\lib\net6.0\SkiaSharp.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.AppContext.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Buffers.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.Concurrent.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.Immutable.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.NonGeneric.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.Specialized.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.Annotations.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.DataAnnotations.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.EventBasedAsync.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.Primitives.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.TypeConverter.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Configuration.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Console.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Core.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Data.Common.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Data.DataSetExtensions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Data.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Contracts.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Debug.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.DiagnosticSource.dll
|
||||
C:\Users\danii\.nuget\packages\system.diagnostics.eventlog\8.0.1\lib\net8.0\System.Diagnostics.EventLog.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.FileVersionInfo.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Process.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.StackTrace.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.TextWriterTraceListener.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Tools.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.TraceSource.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Tracing.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Drawing.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Drawing.Primitives.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Dynamic.Runtime.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Formats.Asn1.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Formats.Tar.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Globalization.Calendars.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Globalization.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Globalization.Extensions.dll
|
||||
C:\Users\danii\.nuget\packages\system.identitymodel.tokens.jwt\8.16.0\lib\net8.0\System.IdentityModel.Tokens.Jwt.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Compression.Brotli.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Compression.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Compression.FileSystem.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Compression.ZipFile.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.AccessControl.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.DriveInfo.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.Primitives.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.Watcher.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.IsolatedStorage.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.MemoryMappedFiles.dll
|
||||
C:\Users\danii\.nuget\packages\system.io.pipelines\8.0.0\lib\net8.0\System.IO.Pipelines.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Pipes.AccessControl.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Pipes.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.UnmanagedMemoryStream.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Linq.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Linq.Expressions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Linq.Parallel.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Linq.Queryable.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Memory.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Http.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Http.Json.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.HttpListener.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Mail.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.NameResolution.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.NetworkInformation.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Ping.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Primitives.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Quic.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Requests.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Security.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.ServicePoint.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Sockets.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebClient.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebHeaderCollection.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebProxy.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebSockets.Client.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebSockets.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Numerics.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Numerics.Vectors.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ObjectModel.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.DispatchProxy.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Emit.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Emit.ILGeneration.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Emit.Lightweight.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Extensions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Metadata.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Primitives.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.TypeExtensions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Resources.Reader.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Resources.ResourceManager.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Resources.Writer.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.CompilerServices.Unsafe.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.CompilerServices.VisualC.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Extensions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Handles.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.InteropServices.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.InteropServices.JavaScript.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.InteropServices.RuntimeInformation.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Intrinsics.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Loader.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Numerics.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.Formatters.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.Json.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.Primitives.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.Xml.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.AccessControl.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Claims.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Algorithms.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Cng.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Csp.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Encoding.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.OpenSsl.dll
|
||||
C:\Users\danii\.nuget\packages\system.security.cryptography.pkcs\8.0.1\lib\net8.0\System.Security.Cryptography.Pkcs.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Primitives.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.X509Certificates.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Principal.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Principal.Windows.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.SecureString.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ServiceModel.Web.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ServiceProcess.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Encoding.CodePages.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Encoding.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Encoding.Extensions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Encodings.Web.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Json.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.RegularExpressions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Channels.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Overlapped.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Tasks.Dataflow.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Tasks.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Tasks.Extensions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Tasks.Parallel.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Thread.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.ThreadPool.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Timer.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Transactions.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Transactions.Local.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ValueTuple.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Web.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Web.HttpUtility.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Windows.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.Linq.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.ReaderWriter.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.Serialization.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XDocument.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XmlDocument.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XmlSerializer.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XPath.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XPath.XDocument.dll
|
||||
C:\Users\danii\.nuget\packages\tmds.dbus.protocol\0.21.2\lib\net8.0\Tmds.DBus.Protocol.dll
|
||||
C:\Users\danii\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\WindowsBase.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Base.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.controls.colorpicker\11.3.4\lib\net8.0\Avalonia.Controls.ColorPicker.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.controls.datagrid\11.3.4\lib\net8.0\Avalonia.Controls.DataGrid.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Controls.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.DesignerSupport.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.desktop\11.3.4\lib\net8.0\Avalonia.Desktop.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.diagnostics\11.3.4\lib\net8.0\Avalonia.Diagnostics.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Dialogs.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.fonts.inter\11.3.4\lib\net8.0\Avalonia.Fonts.Inter.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.freedesktop\11.3.4\lib\net8.0\Avalonia.FreeDesktop.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Markup.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Markup.Xaml.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Metal.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.MicroCom.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.native\11.3.4\lib\net8.0\Avalonia.Native.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.OpenGL.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.remote.protocol\11.3.4\lib\net8.0\Avalonia.Remote.Protocol.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.skia\11.3.4\lib\net8.0\Avalonia.Skia.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.themes.fluent\11.3.4\lib\net8.0\Avalonia.Themes.Fluent.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.themes.simple\11.3.4\lib\net8.0\Avalonia.Themes.Simple.dll
|
||||
C:\Users\student\.nuget\packages\avalonia\11.3.4\ref\net8.0\Avalonia.Vulkan.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.win32\11.3.4\lib\net8.0\Avalonia.Win32.Automation.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.win32\11.3.4\lib\net8.0\Avalonia.Win32.dll
|
||||
C:\Users\student\.nuget\packages\avalonia.x11\11.3.4\lib\net8.0\Avalonia.X11.dll
|
||||
C:\Users\student\.nuget\packages\communitytoolkit.mvvm\8.2.1\lib\net6.0\CommunityToolkit.Mvvm.dll
|
||||
C:\Users\student\.nuget\packages\harfbuzzsharp\8.3.1.1\lib\net8.0\HarfBuzzSharp.dll
|
||||
C:\Users\student\.nuget\packages\microcom.runtime\0.11.0\lib\net5.0\MicroCom.Runtime.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.bcl.cryptography\8.0.0\lib\net8.0\Microsoft.Bcl.Cryptography.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.CSharp.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.data.sqlclient\7.0.1\ref\net8.0\Microsoft.Data.SqlClient.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.data.sqlclient.extensions.abstractions\1.0.0\lib\netstandard2.0\Microsoft.Data.SqlClient.Extensions.Abstractions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.data.sqlclient.internal.logging\1.0.0\lib\netstandard2.0\Microsoft.Data.SqlClient.Internal.Logging.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.configuration.abstractions\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.configuration.binder\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.Binder.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.configuration.commandline\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.CommandLine.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.configuration\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.configuration.environmentvariables\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.EnvironmentVariables.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.configuration.fileextensions\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.FileExtensions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.configuration.json\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.Json.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.configuration.usersecrets\8.0.0\lib\net8.0\Microsoft.Extensions.Configuration.UserSecrets.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.dependencyinjection.abstractions\8.0.2\lib\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.dependencyinjection\8.0.0\lib\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.diagnostics.abstractions\8.0.0\lib\net8.0\Microsoft.Extensions.Diagnostics.Abstractions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.diagnostics\8.0.0\lib\net8.0\Microsoft.Extensions.Diagnostics.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.fileproviders.abstractions\8.0.0\lib\net8.0\Microsoft.Extensions.FileProviders.Abstractions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.fileproviders.physical\8.0.0\lib\net8.0\Microsoft.Extensions.FileProviders.Physical.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.filesystemglobbing\8.0.0\lib\net8.0\Microsoft.Extensions.FileSystemGlobbing.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.hosting.abstractions\8.0.0\lib\net8.0\Microsoft.Extensions.Hosting.Abstractions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.hosting\8.0.0\lib\net8.0\Microsoft.Extensions.Hosting.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.logging.abstractions\8.0.2\lib\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.logging.configuration\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.Configuration.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.logging.console\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.Console.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.logging.debug\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.Debug.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.logging\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.logging.eventlog\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.EventLog.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.logging.eventsource\8.0.0\lib\net8.0\Microsoft.Extensions.Logging.EventSource.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.options.configurationextensions\8.0.0\lib\net8.0\Microsoft.Extensions.Options.ConfigurationExtensions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.options\8.0.2\lib\net8.0\Microsoft.Extensions.Options.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.extensions.primitives\8.0.0\lib\net8.0\Microsoft.Extensions.Primitives.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.identitymodel.abstractions\8.16.0\lib\net8.0\Microsoft.IdentityModel.Abstractions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.identitymodel.jsonwebtokens\8.16.0\lib\net8.0\Microsoft.IdentityModel.JsonWebTokens.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.identitymodel.logging\8.16.0\lib\net8.0\Microsoft.IdentityModel.Logging.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.identitymodel.protocols\8.16.0\lib\net8.0\Microsoft.IdentityModel.Protocols.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.identitymodel.protocols.openidconnect\8.16.0\lib\net8.0\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.identitymodel.tokens\8.16.0\lib\net8.0\Microsoft.IdentityModel.Tokens.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.sqlserver.server\1.0.0\lib\netstandard2.0\Microsoft.SqlServer.Server.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.VisualBasic.Core.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.VisualBasic.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.Win32.Primitives.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\Microsoft.Win32.Registry.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\mscorlib.dll
|
||||
C:\Users\student\.nuget\packages\mysqlconnector\2.5.0\lib\net8.0\MySqlConnector.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\netstandard.dll
|
||||
C:\Users\student\.nuget\packages\skiasharp\2.88.9\lib\net6.0\SkiaSharp.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.AppContext.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Buffers.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.Concurrent.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.Immutable.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.NonGeneric.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Collections.Specialized.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.Annotations.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.DataAnnotations.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.EventBasedAsync.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.Primitives.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ComponentModel.TypeConverter.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Configuration.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Console.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Core.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Data.Common.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Data.DataSetExtensions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Data.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Contracts.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Debug.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.DiagnosticSource.dll
|
||||
C:\Users\student\.nuget\packages\system.diagnostics.eventlog\8.0.1\lib\net8.0\System.Diagnostics.EventLog.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.FileVersionInfo.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Process.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.StackTrace.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.TextWriterTraceListener.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Tools.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.TraceSource.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Diagnostics.Tracing.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Drawing.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Drawing.Primitives.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Dynamic.Runtime.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Formats.Asn1.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Formats.Tar.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Globalization.Calendars.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Globalization.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Globalization.Extensions.dll
|
||||
C:\Users\student\.nuget\packages\system.identitymodel.tokens.jwt\8.16.0\lib\net8.0\System.IdentityModel.Tokens.Jwt.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Compression.Brotli.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Compression.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Compression.FileSystem.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Compression.ZipFile.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.AccessControl.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.DriveInfo.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.Primitives.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.FileSystem.Watcher.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.IsolatedStorage.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.MemoryMappedFiles.dll
|
||||
C:\Users\student\.nuget\packages\system.io.pipelines\8.0.0\lib\net8.0\System.IO.Pipelines.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Pipes.AccessControl.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.Pipes.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.IO.UnmanagedMemoryStream.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Linq.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Linq.Expressions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Linq.Parallel.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Linq.Queryable.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Memory.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Http.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Http.Json.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.HttpListener.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Mail.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.NameResolution.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.NetworkInformation.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Ping.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Primitives.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Quic.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Requests.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Security.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.ServicePoint.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.Sockets.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebClient.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebHeaderCollection.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebProxy.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebSockets.Client.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Net.WebSockets.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Numerics.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Numerics.Vectors.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ObjectModel.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.DispatchProxy.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Emit.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Emit.ILGeneration.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Emit.Lightweight.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Extensions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Metadata.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.Primitives.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Reflection.TypeExtensions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Resources.Reader.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Resources.ResourceManager.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Resources.Writer.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.CompilerServices.Unsafe.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.CompilerServices.VisualC.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Extensions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Handles.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.InteropServices.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.InteropServices.JavaScript.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.InteropServices.RuntimeInformation.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Intrinsics.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Loader.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Numerics.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.Formatters.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.Json.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.Primitives.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Runtime.Serialization.Xml.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.AccessControl.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Claims.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Algorithms.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Cng.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Csp.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Encoding.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.OpenSsl.dll
|
||||
C:\Users\student\.nuget\packages\system.security.cryptography.pkcs\8.0.1\lib\net8.0\System.Security.Cryptography.Pkcs.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.Primitives.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Cryptography.X509Certificates.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Principal.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.Principal.Windows.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Security.SecureString.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ServiceModel.Web.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ServiceProcess.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Encoding.CodePages.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Encoding.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Encoding.Extensions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Encodings.Web.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.Json.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Text.RegularExpressions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Channels.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Overlapped.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Tasks.Dataflow.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Tasks.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Tasks.Extensions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Tasks.Parallel.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Thread.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.ThreadPool.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Threading.Timer.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Transactions.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Transactions.Local.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.ValueTuple.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Web.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Web.HttpUtility.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Windows.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.Linq.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.ReaderWriter.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.Serialization.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XDocument.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XmlDocument.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XmlSerializer.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XPath.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\System.Xml.XPath.XDocument.dll
|
||||
C:\Users\student\.nuget\packages\tmds.dbus.protocol\0.21.2\lib\net8.0\Tmds.DBus.Protocol.dll
|
||||
C:\Users\student\.nuget\packages\microsoft.netcore.app.ref\8.0.27\ref\net8.0\WindowsBase.dll
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -13,10 +13,10 @@ using System.Reflection;
|
|||
[assembly: System.Reflection.AssemblyCompanyAttribute("CourseProject1125")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8a542dab9a38ef76bd9f1d3f21c3efa28fec406b")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8feb1afc41ab0268c0655bdf1f0c0c50fe4e0e27")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("CourseProject1125")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("CourseProject1125")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Создано классом WriteCodeFragment MSBuild.
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
9a4025adff3d649d85b89675111898ab0bc2a30a8f4af1b135b7e618fe0229bf
|
||||
ee16a13c8d80696a1409757858a26b0cc6ab98af091aafd19fd898a3fe69a60c
|
||||
|
|
|
|||
|
|
@ -7,31 +7,34 @@ build_property.AvaloniaNameGeneratorFilterByNamespace = *
|
|||
build_property.AvaloniaNameGeneratorViewFileNamingStrategy = NamespaceAndClassName
|
||||
build_property.AvaloniaNameGeneratorAttachDevTools = true
|
||||
build_property.TargetFramework = net8.0
|
||||
build_property.TargetFrameworkIdentifier = .NETCoreApp
|
||||
build_property.TargetFrameworkVersion = v8.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property.EntryPointFilePath =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = CourseProject1125
|
||||
build_property.ProjectDir = C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\
|
||||
build_property.ProjectDir = C:\Users\student\Desktop\Project\CourseProject1125\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.EffectiveAnalysisLevelStyle = 8.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
|
||||
[C:/Users/danii/OneDrive/Desktop/Project/CourseProject1125/App.axaml]
|
||||
[C:/Users/student/Desktop/Project/CourseProject1125/App.axaml]
|
||||
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
|
||||
|
||||
[C:/Users/danii/OneDrive/Desktop/Project/CourseProject1125/Views/AdminWindow.axaml]
|
||||
[C:/Users/student/Desktop/Project/CourseProject1125/Views/AdminWindow.axaml]
|
||||
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
|
||||
|
||||
[C:/Users/danii/OneDrive/Desktop/Project/CourseProject1125/Views/LibrarianWindow.axaml]
|
||||
[C:/Users/student/Desktop/Project/CourseProject1125/Views/LibrarianWindow.axaml]
|
||||
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
|
||||
|
||||
[C:/Users/danii/OneDrive/Desktop/Project/CourseProject1125/Views/MainWindow.axaml]
|
||||
[C:/Users/student/Desktop/Project/CourseProject1125/Views/MainWindow.axaml]
|
||||
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
|
||||
|
||||
[C:/Users/danii/OneDrive/Desktop/Project/CourseProject1125/Views/ReaderWindow.axaml]
|
||||
[C:/Users/student/Desktop/Project/CourseProject1125/Views/ReaderWindow.axaml]
|
||||
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
934eb599446bfddb12088eff59fa7ca51412e2c09fb67767b78244ebb5fc3969
|
||||
7ddebecfdef30b1b546334067783a94e59af5883a01072dee889cf21917cd434
|
||||
|
|
|
|||
|
|
@ -143,3 +143,148 @@ C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\obj\Debug\net8.0\Cours
|
|||
C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.genruntimeconfig.cache
|
||||
C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\obj\Debug\net8.0\ref\CourseProject1125.dll
|
||||
C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.sourcelink.json
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\appsettings.json
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\CourseProject1125.exe
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\CourseProject1125.deps.json
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\CourseProject1125.runtimeconfig.json
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\CourseProject1125.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\CourseProject1125.pdb
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Base.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Controls.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.DesignerSupport.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Dialogs.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Markup.Xaml.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Markup.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Metal.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.MicroCom.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.OpenGL.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Vulkan.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Controls.ColorPicker.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Controls.DataGrid.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Desktop.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Diagnostics.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Fonts.Inter.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.FreeDesktop.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Native.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Remote.Protocol.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Skia.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Themes.Fluent.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Themes.Simple.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Win32.Automation.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.Win32.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Avalonia.X11.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\CommunityToolkit.Mvvm.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\HarfBuzzSharp.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\MicroCom.Runtime.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Bcl.Cryptography.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Data.SqlClient.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Data.SqlClient.Extensions.Abstractions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Data.SqlClient.Internal.Logging.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Caching.Abstractions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Caching.Memory.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Configuration.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Configuration.Abstractions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Configuration.Binder.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Configuration.CommandLine.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Configuration.EnvironmentVariables.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Configuration.FileExtensions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Configuration.Json.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Configuration.UserSecrets.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Diagnostics.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Diagnostics.Abstractions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.FileProviders.Abstractions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.FileProviders.Physical.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.FileSystemGlobbing.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Hosting.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Hosting.Abstractions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Logging.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Logging.Abstractions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Logging.Configuration.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Logging.Console.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Logging.Debug.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Logging.EventLog.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Logging.EventSource.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Options.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Options.ConfigurationExtensions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.Extensions.Primitives.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.IdentityModel.Abstractions.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.IdentityModel.JsonWebTokens.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.IdentityModel.Logging.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.IdentityModel.Protocols.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.IdentityModel.Tokens.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Microsoft.SqlServer.Server.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\MySqlConnector.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\SkiaSharp.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\System.Configuration.ConfigurationManager.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\System.Diagnostics.EventLog.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\System.IdentityModel.Tokens.Jwt.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\System.IO.Pipelines.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\System.Security.Cryptography.Pkcs.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\System.Security.Cryptography.ProtectedData.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\Tmds.DBus.Protocol.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\cs\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\de\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\es\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\fr\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\it\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\ja\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\ko\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\pl\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\pt-BR\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\ru\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\tr\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\zh-Hans\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\zh-Hant\Microsoft.Data.SqlClient.resources.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-arm64\native\av_libglesv2.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-x64\native\av_libglesv2.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-x86\native\av_libglesv2.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\osx\native\libAvaloniaNative.dylib
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-arm\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-arm64\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-loongarch64\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-musl-arm\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-musl-arm64\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-musl-loongarch64\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-musl-riscv64\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-musl-x64\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-riscv64\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-x64\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-x86\native\libHarfBuzzSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\osx\native\libHarfBuzzSharp.dylib
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-arm64\native\libHarfBuzzSharp.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-x64\native\libHarfBuzzSharp.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-x86\native\libHarfBuzzSharp.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\unix\lib\net8.0\Microsoft.Data.SqlClient.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win\lib\net8.0\Microsoft.Data.SqlClient.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-arm64\native\Microsoft.Data.SqlClient.SNI.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-x64\native\Microsoft.Data.SqlClient.SNI.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-x86\native\Microsoft.Data.SqlClient.SNI.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-arm\native\libSkiaSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-arm64\native\libSkiaSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-musl-x64\native\libSkiaSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\linux-x64\native\libSkiaSharp.so
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\osx\native\libSkiaSharp.dylib
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-arm64\native\libSkiaSharp.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-x64\native\libSkiaSharp.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win-x86\native\libSkiaSharp.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win\lib\net8.0\System.Diagnostics.EventLog.Messages.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win\lib\net8.0\System.Diagnostics.EventLog.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\bin\Debug\net8.0\runtimes\win\lib\net8.0\System.Security.Cryptography.Pkcs.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.csproj.AssemblyReference.cache
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\Avalonia\Resources.Inputs.cache
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\Avalonia\resources
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.AssemblyInfoInputs.cache
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.AssemblyInfo.cs
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.csproj.CoreCompileInputs.cache
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.sourcelink.json
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CoursePr.26FDDDF7.Up2Date
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\refint\CourseProject1125.dll
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.pdb
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\CourseProject1125.genruntimeconfig.cache
|
||||
C:\Users\student\Desktop\Project\CourseProject1125\obj\Debug\net8.0\ref\CourseProject1125.dll
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
9896a188e684aeedb31b7a8f88f8521d94f6bf7b1d5e61f1f45d20d690580446
|
||||
a1309d5791342db5a8674cc0944d7ad17782fe7bb707d27e32a6fb3f870507ef
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -13,7 +13,7 @@ using System.Reflection;
|
|||
[assembly: System.Reflection.AssemblyCompanyAttribute("CourseProject1125")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+8feb1afc41ab0268c0655bdf1f0c0c50fe4e0e27")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("CourseProject1125")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("CourseProject1125")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
3143da7a9898d8f7eb03faab55b0f25d554966f0b3b51c2a3275e4d0d9dd1331
|
||||
cd3b7678dcf92e2e829678347e602af12da8fd45bdeea413aa2fea91825f9b80
|
||||
|
|
|
|||
|
|
@ -291,3 +291,4 @@ C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\obj\Release\net8.0\win
|
|||
C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\obj\Release\net8.0\win-x64\CourseProject1125.pdb
|
||||
C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\obj\Release\net8.0\win-x64\CourseProject1125.genruntimeconfig.cache
|
||||
C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\obj\Release\net8.0\win-x64\ref\CourseProject1125.dll
|
||||
C:\Users\danii\OneDrive\Desktop\Project\CourseProject1125\obj\Release\net8.0\win-x64\CourseProject1125.sourcelink.json
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1 +1 @@
|
|||
035840ac61047c0edf0defbc8902d40519923fb4851b8f3dc12fb39162d5ec96
|
||||
23b442f6ac6917d790427dbb563fb0973c7f4dff6143d7949ac361c65054e556
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -4151,25 +4151,33 @@
|
|||
]
|
||||
},
|
||||
"packageFolders": {
|
||||
"C:\\Users\\danii\\.nuget\\packages\\": {}
|
||||
"C:\\Users\\student\\.nuget\\packages\\": {},
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
|
||||
},
|
||||
"project": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"projectUniqueName": "C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"projectName": "CourseProject1125",
|
||||
"projectPath": "C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"packagesPath": "C:\\Users\\danii\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\obj\\",
|
||||
"projectPath": "C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"packagesPath": "C:\\Users\\student\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
"fallbackFolders": [
|
||||
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
||||
],
|
||||
"configFilePaths": [
|
||||
"C:\\Users\\danii\\AppData\\Roaming\\NuGet\\NuGet.Config"
|
||||
"C:\\Users\\student\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
||||
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net8.0"
|
||||
],
|
||||
"sources": {
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
||||
"C:\\Program Files\\dotnet\\library-packs": {},
|
||||
"http://192.168.200.81:8081/repository/nuget.org-proxy/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
|
|
@ -4187,7 +4195,7 @@
|
|||
"auditLevel": "low",
|
||||
"auditMode": "direct"
|
||||
},
|
||||
"SdkAnalysisLevel": "9.0.300"
|
||||
"SdkAnalysisLevel": "10.0.300"
|
||||
},
|
||||
"frameworks": {
|
||||
"net8.0": {
|
||||
|
|
@ -4268,7 +4276,7 @@
|
|||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "C:\\Users\\danii\\.dotnet\\sdk\\9.0.314/PortableRuntimeIdentifierGraph.json"
|
||||
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\10.0.300/PortableRuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,93 +1,93 @@
|
|||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "UkVq0d5pW7M=",
|
||||
"dgSpecHash": "U84BEbBS94Q=",
|
||||
"success": true,
|
||||
"projectFilePath": "C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"projectFilePath": "C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj",
|
||||
"expectedPackageFiles": [
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia\\11.3.4\\avalonia.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.angle.windows.natives\\2.1.25547.20250602\\avalonia.angle.windows.natives.2.1.25547.20250602.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.buildservices\\0.0.31\\avalonia.buildservices.0.0.31.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.controls.colorpicker\\11.3.4\\avalonia.controls.colorpicker.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.controls.datagrid\\11.3.4\\avalonia.controls.datagrid.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.desktop\\11.3.4\\avalonia.desktop.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.diagnostics\\11.3.4\\avalonia.diagnostics.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.fonts.inter\\11.3.4\\avalonia.fonts.inter.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.freedesktop\\11.3.4\\avalonia.freedesktop.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.native\\11.3.4\\avalonia.native.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.remote.protocol\\11.3.4\\avalonia.remote.protocol.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.skia\\11.3.4\\avalonia.skia.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.themes.fluent\\11.3.4\\avalonia.themes.fluent.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.themes.simple\\11.3.4\\avalonia.themes.simple.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.win32\\11.3.4\\avalonia.win32.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\avalonia.x11\\11.3.4\\avalonia.x11.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\communitytoolkit.mvvm\\8.2.1\\communitytoolkit.mvvm.8.2.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\harfbuzzsharp\\8.3.1.1\\harfbuzzsharp.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\harfbuzzsharp.nativeassets.linux\\8.3.1.1\\harfbuzzsharp.nativeassets.linux.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\harfbuzzsharp.nativeassets.macos\\8.3.1.1\\harfbuzzsharp.nativeassets.macos.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\harfbuzzsharp.nativeassets.webassembly\\8.3.1.1\\harfbuzzsharp.nativeassets.webassembly.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\harfbuzzsharp.nativeassets.win32\\8.3.1.1\\harfbuzzsharp.nativeassets.win32.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microcom.runtime\\0.11.0\\microcom.runtime.0.11.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.bcl.cryptography\\8.0.0\\microsoft.bcl.cryptography.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.data.sqlclient\\7.0.1\\microsoft.data.sqlclient.7.0.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.data.sqlclient.extensions.abstractions\\1.0.0\\microsoft.data.sqlclient.extensions.abstractions.1.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.data.sqlclient.internal.logging\\1.0.0\\microsoft.data.sqlclient.internal.logging.1.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.data.sqlclient.sni.runtime\\6.0.2\\microsoft.data.sqlclient.sni.runtime.6.0.2.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\8.0.0\\microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.caching.memory\\8.0.1\\microsoft.extensions.caching.memory.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.configuration\\8.0.0\\microsoft.extensions.configuration.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\8.0.0\\microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.configuration.binder\\8.0.0\\microsoft.extensions.configuration.binder.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.configuration.commandline\\8.0.0\\microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.configuration.environmentvariables\\8.0.0\\microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\8.0.0\\microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.configuration.json\\8.0.0\\microsoft.extensions.configuration.json.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.configuration.usersecrets\\8.0.0\\microsoft.extensions.configuration.usersecrets.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\8.0.0\\microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.2\\microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.diagnostics\\8.0.0\\microsoft.extensions.diagnostics.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.diagnostics.abstractions\\8.0.0\\microsoft.extensions.diagnostics.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\8.0.0\\microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\8.0.0\\microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\8.0.0\\microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.hosting\\8.0.0\\microsoft.extensions.hosting.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.hosting.abstractions\\8.0.0\\microsoft.extensions.hosting.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.logging\\8.0.0\\microsoft.extensions.logging.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\8.0.2\\microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.logging.configuration\\8.0.0\\microsoft.extensions.logging.configuration.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.logging.console\\8.0.0\\microsoft.extensions.logging.console.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.logging.debug\\8.0.0\\microsoft.extensions.logging.debug.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.logging.eventlog\\8.0.0\\microsoft.extensions.logging.eventlog.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.logging.eventsource\\8.0.0\\microsoft.extensions.logging.eventsource.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.options\\8.0.2\\microsoft.extensions.options.8.0.2.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.options.configurationextensions\\8.0.0\\microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.extensions.primitives\\8.0.0\\microsoft.extensions.primitives.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.identitymodel.abstractions\\8.16.0\\microsoft.identitymodel.abstractions.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.identitymodel.jsonwebtokens\\8.16.0\\microsoft.identitymodel.jsonwebtokens.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.identitymodel.logging\\8.16.0\\microsoft.identitymodel.logging.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.identitymodel.protocols\\8.16.0\\microsoft.identitymodel.protocols.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.identitymodel.protocols.openidconnect\\8.16.0\\microsoft.identitymodel.protocols.openidconnect.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.identitymodel.tokens\\8.16.0\\microsoft.identitymodel.tokens.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.sqlserver.server\\1.0.0\\microsoft.sqlserver.server.1.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\mysqlconnector\\2.5.0\\mysqlconnector.2.5.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\skiasharp\\2.88.9\\skiasharp.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\skiasharp.nativeassets.linux\\2.88.9\\skiasharp.nativeassets.linux.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\skiasharp.nativeassets.macos\\2.88.9\\skiasharp.nativeassets.macos.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\skiasharp.nativeassets.webassembly\\2.88.9\\skiasharp.nativeassets.webassembly.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\skiasharp.nativeassets.win32\\2.88.9\\skiasharp.nativeassets.win32.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\system.configuration.configurationmanager\\8.0.1\\system.configuration.configurationmanager.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\system.diagnostics.diagnosticsource\\8.0.0\\system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\system.diagnostics.eventlog\\8.0.1\\system.diagnostics.eventlog.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\system.identitymodel.tokens.jwt\\8.16.0\\system.identitymodel.tokens.jwt.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\system.io.pipelines\\8.0.0\\system.io.pipelines.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\system.security.cryptography.pkcs\\8.0.1\\system.security.cryptography.pkcs.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\system.security.cryptography.protecteddata\\8.0.0\\system.security.cryptography.protecteddata.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\system.text.encodings.web\\8.0.0\\system.text.encodings.web.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\system.text.json\\8.0.0\\system.text.json.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\tmds.dbus.protocol\\0.21.2\\tmds.dbus.protocol.0.21.2.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\microsoft.netcore.app.ref.8.0.27.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\microsoft.windowsdesktop.app.ref.8.0.27.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\8.0.27\\microsoft.aspnetcore.app.ref.8.0.27.nupkg.sha512",
|
||||
"C:\\Users\\danii\\.nuget\\packages\\microsoft.netcore.app.host.win-x64\\8.0.27\\microsoft.netcore.app.host.win-x64.8.0.27.nupkg.sha512"
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia\\11.3.4\\avalonia.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.angle.windows.natives\\2.1.25547.20250602\\avalonia.angle.windows.natives.2.1.25547.20250602.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.buildservices\\0.0.31\\avalonia.buildservices.0.0.31.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.controls.colorpicker\\11.3.4\\avalonia.controls.colorpicker.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.controls.datagrid\\11.3.4\\avalonia.controls.datagrid.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.desktop\\11.3.4\\avalonia.desktop.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.diagnostics\\11.3.4\\avalonia.diagnostics.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.fonts.inter\\11.3.4\\avalonia.fonts.inter.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.freedesktop\\11.3.4\\avalonia.freedesktop.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.native\\11.3.4\\avalonia.native.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.remote.protocol\\11.3.4\\avalonia.remote.protocol.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.skia\\11.3.4\\avalonia.skia.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.themes.fluent\\11.3.4\\avalonia.themes.fluent.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.themes.simple\\11.3.4\\avalonia.themes.simple.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.win32\\11.3.4\\avalonia.win32.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\avalonia.x11\\11.3.4\\avalonia.x11.11.3.4.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\communitytoolkit.mvvm\\8.2.1\\communitytoolkit.mvvm.8.2.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\harfbuzzsharp\\8.3.1.1\\harfbuzzsharp.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\harfbuzzsharp.nativeassets.linux\\8.3.1.1\\harfbuzzsharp.nativeassets.linux.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\harfbuzzsharp.nativeassets.macos\\8.3.1.1\\harfbuzzsharp.nativeassets.macos.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\harfbuzzsharp.nativeassets.webassembly\\8.3.1.1\\harfbuzzsharp.nativeassets.webassembly.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\harfbuzzsharp.nativeassets.win32\\8.3.1.1\\harfbuzzsharp.nativeassets.win32.8.3.1.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microcom.runtime\\0.11.0\\microcom.runtime.0.11.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.bcl.cryptography\\8.0.0\\microsoft.bcl.cryptography.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.data.sqlclient\\7.0.1\\microsoft.data.sqlclient.7.0.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.data.sqlclient.extensions.abstractions\\1.0.0\\microsoft.data.sqlclient.extensions.abstractions.1.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.data.sqlclient.internal.logging\\1.0.0\\microsoft.data.sqlclient.internal.logging.1.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.data.sqlclient.sni.runtime\\6.0.2\\microsoft.data.sqlclient.sni.runtime.6.0.2.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.caching.abstractions\\8.0.0\\microsoft.extensions.caching.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.caching.memory\\8.0.1\\microsoft.extensions.caching.memory.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.configuration\\8.0.0\\microsoft.extensions.configuration.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\8.0.0\\microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.configuration.binder\\8.0.0\\microsoft.extensions.configuration.binder.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.configuration.commandline\\8.0.0\\microsoft.extensions.configuration.commandline.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.configuration.environmentvariables\\8.0.0\\microsoft.extensions.configuration.environmentvariables.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\8.0.0\\microsoft.extensions.configuration.fileextensions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.configuration.json\\8.0.0\\microsoft.extensions.configuration.json.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.configuration.usersecrets\\8.0.0\\microsoft.extensions.configuration.usersecrets.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.dependencyinjection\\8.0.0\\microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.dependencyinjection.abstractions\\8.0.2\\microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.diagnostics\\8.0.0\\microsoft.extensions.diagnostics.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.diagnostics.abstractions\\8.0.0\\microsoft.extensions.diagnostics.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\8.0.0\\microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\8.0.0\\microsoft.extensions.fileproviders.physical.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\8.0.0\\microsoft.extensions.filesystemglobbing.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.hosting\\8.0.0\\microsoft.extensions.hosting.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.hosting.abstractions\\8.0.0\\microsoft.extensions.hosting.abstractions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.logging\\8.0.0\\microsoft.extensions.logging.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\8.0.2\\microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.logging.configuration\\8.0.0\\microsoft.extensions.logging.configuration.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.logging.console\\8.0.0\\microsoft.extensions.logging.console.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.logging.debug\\8.0.0\\microsoft.extensions.logging.debug.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.logging.eventlog\\8.0.0\\microsoft.extensions.logging.eventlog.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.logging.eventsource\\8.0.0\\microsoft.extensions.logging.eventsource.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.options\\8.0.2\\microsoft.extensions.options.8.0.2.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.options.configurationextensions\\8.0.0\\microsoft.extensions.options.configurationextensions.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.extensions.primitives\\8.0.0\\microsoft.extensions.primitives.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.identitymodel.abstractions\\8.16.0\\microsoft.identitymodel.abstractions.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.identitymodel.jsonwebtokens\\8.16.0\\microsoft.identitymodel.jsonwebtokens.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.identitymodel.logging\\8.16.0\\microsoft.identitymodel.logging.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.identitymodel.protocols\\8.16.0\\microsoft.identitymodel.protocols.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.identitymodel.protocols.openidconnect\\8.16.0\\microsoft.identitymodel.protocols.openidconnect.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.identitymodel.tokens\\8.16.0\\microsoft.identitymodel.tokens.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.sqlserver.server\\1.0.0\\microsoft.sqlserver.server.1.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\mysqlconnector\\2.5.0\\mysqlconnector.2.5.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\skiasharp\\2.88.9\\skiasharp.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\skiasharp.nativeassets.linux\\2.88.9\\skiasharp.nativeassets.linux.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\skiasharp.nativeassets.macos\\2.88.9\\skiasharp.nativeassets.macos.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\skiasharp.nativeassets.webassembly\\2.88.9\\skiasharp.nativeassets.webassembly.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\skiasharp.nativeassets.win32\\2.88.9\\skiasharp.nativeassets.win32.2.88.9.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\system.configuration.configurationmanager\\8.0.1\\system.configuration.configurationmanager.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\system.diagnostics.diagnosticsource\\8.0.0\\system.diagnostics.diagnosticsource.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\system.diagnostics.eventlog\\8.0.1\\system.diagnostics.eventlog.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\system.identitymodel.tokens.jwt\\8.16.0\\system.identitymodel.tokens.jwt.8.16.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\system.io.pipelines\\8.0.0\\system.io.pipelines.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\system.security.cryptography.pkcs\\8.0.1\\system.security.cryptography.pkcs.8.0.1.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\system.security.cryptography.protecteddata\\8.0.0\\system.security.cryptography.protecteddata.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\system.text.encodings.web\\8.0.0\\system.text.encodings.web.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\system.text.json\\8.0.0\\system.text.json.8.0.0.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\tmds.dbus.protocol\\0.21.2\\tmds.dbus.protocol.0.21.2.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.netcore.app.ref\\8.0.27\\microsoft.netcore.app.ref.8.0.27.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\8.0.27\\microsoft.windowsdesktop.app.ref.8.0.27.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\8.0.27\\microsoft.aspnetcore.app.ref.8.0.27.nupkg.sha512",
|
||||
"C:\\Users\\student\\.nuget\\packages\\microsoft.netcore.app.host.win-x64\\8.0.27\\microsoft.netcore.app.host.win-x64.8.0.27.nupkg.sha512"
|
||||
],
|
||||
"logs": []
|
||||
}
|
||||
|
|
@ -1 +1 @@
|
|||
"restore":{"projectUniqueName":"C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj","projectName":"CourseProject1125","projectPath":"C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj","outputPath":"C:\\Users\\danii\\OneDrive\\Desktop\\Project\\CourseProject1125\\obj\\","projectStyle":"PackageReference","originalTargetFrameworks":["net8.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"9.0.300"}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"Avalonia":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Controls.DataGrid":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Desktop":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Diagnostics":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Fonts.Inter":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Themes.Fluent":{"target":"Package","version":"[11.3.4, )"},"CommunityToolkit.Mvvm":{"target":"Package","version":"[8.2.1, )"},"Microsoft.Data.SqlClient":{"target":"Package","version":"[7.0.1, )"},"Microsoft.Extensions.Hosting":{"target":"Package","version":"[8.0.0, )"},"MySqlConnector":{"target":"Package","version":"[2.5.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"downloadDependencies":[{"name":"Microsoft.AspNetCore.App.Ref","version":"[8.0.27, 8.0.27]"},{"name":"Microsoft.NETCore.App.Host.win-x64","version":"[8.0.27, 8.0.27]"},{"name":"Microsoft.NETCore.App.Ref","version":"[8.0.27, 8.0.27]"},{"name":"Microsoft.WindowsDesktop.App.Ref","version":"[8.0.27, 8.0.27]"}],"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Users\\danii\\.dotnet\\sdk\\9.0.314/PortableRuntimeIdentifierGraph.json"}}
|
||||
"restore":{"projectUniqueName":"C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj","projectName":"CourseProject1125","projectPath":"C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\CourseProject1125.csproj","packagesPath":"","outputPath":"C:\\Users\\student\\Desktop\\Project\\CourseProject1125\\obj\\","projectStyle":"PackageReference","fallbackFolders":["C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"],"originalTargetFrameworks":["net8.0"],"sources":{"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\":{},"C:\\Program Files\\dotnet\\library-packs":{},"http://192.168.200.81:8081/repository/nuget.org-proxy/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"},"SdkAnalysisLevel":"10.0.300"}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"Avalonia":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Controls.DataGrid":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Desktop":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Diagnostics":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Fonts.Inter":{"target":"Package","version":"[11.3.4, )"},"Avalonia.Themes.Fluent":{"target":"Package","version":"[11.3.4, )"},"CommunityToolkit.Mvvm":{"target":"Package","version":"[8.2.1, )"},"Microsoft.Data.SqlClient":{"target":"Package","version":"[7.0.1, )"},"Microsoft.Extensions.Hosting":{"target":"Package","version":"[8.0.0, )"},"MySqlConnector":{"target":"Package","version":"[2.5.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"downloadDependencies":[{"name":"Microsoft.AspNetCore.App.Ref","version":"[8.0.27, 8.0.27]"},{"name":"Microsoft.NETCore.App.Host.win-x64","version":"[8.0.27, 8.0.27]"},{"name":"Microsoft.NETCore.App.Ref","version":"[8.0.27, 8.0.27]"},{"name":"Microsoft.WindowsDesktop.App.Ref","version":"[8.0.27, 8.0.27]"}],"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"C:\\Program Files\\dotnet\\sdk\\10.0.300/PortableRuntimeIdentifierGraph.json"}}
|
||||
|
|
@ -1 +1 @@
|
|||
17793773331207376
|
||||
17810233640385401
|
||||
|
|
@ -1 +1 @@
|
|||
17793773331207376
|
||||
17810234653456215
|
||||
Loading…
Reference in New Issue