Project Details Page

This commit is contained in:
Marc Wieland 2025-10-15 13:29:50 +02:00
parent 789d44a344
commit 910ed8b8f8
108 changed files with 3294 additions and 302 deletions

View File

@ -0,0 +1,148 @@
@using OnProfNext.Client.Services
@using OnProfNext.Shared.Models
@using OnProfNext.Shared.Models.DTOs
@inject ProjectApiService ProjectService
@inject UserApiService UserService
<div class="modal fade @(ShowModal ? "show d-block" : "")" tabindex="-1" style="background-color: rgba(0,0,0,0.5);">
<div class="modal-dialog modal-dialog-centered" @onclick:stopPropagation>
<div class="modal-content border-0 shadow">
<div class="modal-header bg-primary text-white">
<h5 class="modal-title">Neues Projekt anlegen</h5>
<button type="button" class="btn-close btn-close-white" @onclick="CloseModal"></button>
</div>
<div class="modal-body">
@if (users == null)
{
<div class="text-center mt-3">
<div class="spinner-border text-primary" role="status"></div>
<p class="mt-2 text-secondary">Benutzer werden geladen...</p>
</div>
@if (!string.IsNullOrEmpty(errorMessage))
{
<div class="alert alert-danger mt-3">@errorMessage</div>
}
}
else
{
<EditForm Model="NewProject" OnValidSubmit="CreateProjectAsync">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="mb-3">
<label class="form-label">Projektname</label>
<InputText class="form-control" @bind-Value="NewProject.ProjectName" />
</div>
<div class="mb-3">
<label class="form-label">Beschreibung</label>
<InputTextArea class="form-control" rows="3" @bind-Value="NewProject.Description" />
</div>
<div class="mb-3">
<label class="form-label">Projektleiter</label>
<InputText class="form-control mb-2" @bind-Value="SearchText" placeholder="Projektleiter suchen..." />
<div class="list-group" style="max-height: 150px; overflow-y: auto;">
@if (!FilteredUsers.Any())
{
<div class="list-group-item text-muted">Keine Benutzer gefunden</div>
}
else
{
@foreach (var user in FilteredUsers)
{
<label class="list-group-item">
<input type="checkbox"
value="@user.Id"
checked="@(NewProject.ProjectManagerIds.Contains(user.Id))"
@onchange="@(e => ToggleProjectManager(user.Id, e.Value != null && (bool)e.Value))" />
@user.FirstName @user.LastName (@user.Username)
</label>
}
}
</div>
</div>
<div class="mb-3">
<label class="form-label">Status</label>
<InputSelect class="form-select" @bind-Value="NewProject.Status">
<option value="Geplant">Geplant</option>
<option value="In Arbeit">In Arbeit</option>
<option value="Abgeschlossen">Abgeschlossen</option>
</InputSelect>
</div>
<div class="d-flex justify-content-end">
<button type="button" class="btn btn-secondary me-2" @onclick="CloseModal">Abbrechen</button>
<button type="submit" class="btn btn-success">Speichern</button>
</div>
</EditForm>
}
</div>
</div>
</div>
</div>
@code {
[Parameter] public bool ShowModal { get; set; }
[Parameter] public EventCallback<bool> ShowModalChanged { get; set; }
[Parameter] public ProjectCreateDto NewProject { get; set; } = new();
[Parameter] public EventCallback<ProjectCreateDto> OnProjectCreated { get; set; }
[Parameter] public string SearchText { get; set; } = "";
private List<User>? users;
private string? errorMessage;
protected override async Task OnInitializedAsync()
{
await LoadUsersAsync();
}
private async Task LoadUsersAsync()
{
var userResult = await UserService.GetUsersAsync();
Console.WriteLine($"UserService.GetUsersAsync result: Success={userResult.Success}, Data={userResult.Data?.Count}, Error={userResult.Error}");
if (userResult.Success && userResult.Data != null)
{
users = userResult.Data;
}
else
{
errorMessage = userResult.Error ?? "Fehler beim Laden der Benutzer.";
}
}
private IEnumerable<User> FilteredUsers => users is null || string.IsNullOrWhiteSpace(SearchText)
? Enumerable.Empty<User>()
: users.Where(u => $"{u.FirstName} {u.LastName} {u.Username}"
.Contains(SearchText, StringComparison.OrdinalIgnoreCase));
private void CloseModal()
{
ShowModal = false;
ShowModalChanged.InvokeAsync(ShowModal);
}
private void ToggleProjectManager(int userId, bool isChecked)
{
if (isChecked)
{
if (!NewProject.ProjectManagerIds.Contains(userId))
NewProject.ProjectManagerIds.Add(userId);
}
else
{
NewProject.ProjectManagerIds.Remove(userId);
}
}
private async Task CreateProjectAsync()
{
var result = await ProjectService.CreateProjectAsync(NewProject);
if (result.Success)
{
await OnProjectCreated.InvokeAsync(NewProject);
CloseModal();
}
}
}

View File

@ -7,9 +7,12 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Blazor.Bootstrap" Version="3.4.0" />
<PackageReference Include="Blazored.Typeahead" Version="4.7.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.9" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="9.0.9" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.9" PrivateAssets="all" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="9.0.9" PrivateAssets="all" />
<PackageReference Include="Microsoft.Extensions.Http" Version="9.0.9" /> <PackageReference Include="Microsoft.Extensions.Http" Version="9.0.9" />
<PackageReference Include="MudBlazor" Version="8.13.0" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" /> <PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="8.14.0" />
</ItemGroup> </ItemGroup>

View File

View File

@ -1,7 +1,106 @@
@page "/" @page "/"
@inject NavigationManager Nav
<PageTitle>Home</PageTitle> <h3 class="mb-4">Willkommen bei OnProf Next</h3>
<p class="text-muted">Wähle einen Bereich aus, um fortzufahren:</p>
<h1>Hello, world!</h1> <div class="row g-4 mt-3">
<div class="col-12 col-sm-6 col-lg-3">
<div class="card dashboard-card text-center" @onclick="() => GoToUsers()">
<div class="card-body">
<i class="bi bi-people fs-1 text-primary"></i>
<h5 class="card-title mt-3">Benutzer</h5>
<p class="text-muted small">Verwalte Benutzer und Rechte.</p>
</div>
</div>
</div>
Welcome to your new app. <div class="col-12 col-sm-6 col-lg-3">
<div class="card dashboard-card text-center" @onclick="() => GoToProjects()">
<div class="card-body">
<i class="bi bi-folder2-open fs-1 text-success"></i>
<h5 class="card-title mt-3">Projekte</h5>
<p class="text-muted small">Verwalte laufende Projekte und Aufträge.</p>
</div>
</div>
</div>
<div class="col-12 col-sm-6 col-lg-3">
<div class="card dashboard-card text-center" @onclick="() => GoToBookings()">
<div class="card-body">
<i class="bi bi-stopwatch fs-1 text-warning"></i>
<h5 class="card-title mt-3">Buchungen</h5>
<p class="text-muted small">Erfasse Arbeitszeiten auf Projekte.</p>
</div>
</div>
</div>
<div class="col-12 col-sm-6 col-lg-3">
<div class="card dashboard-card text-center" @onclick="() => GoToAnalysis()">
<div class="card-body">
<i class="bi bi-graph-up fs-1 text-danger"></i>
<h5 class="card-title mt-3">Auswertungen</h5>
<p class="text-muted small">Analysiere Projektzeiten und Fortschritt.</p>
</div>
</div>
</div>
<div class="col-12 col-sm-6 col-lg-3">
<div class="card dashboard-card text-center" @onclick="() => GoToMandants()">
<div class="card-body">
<i class="bi bi-graph-up fs-1 text-danger"></i>
<h5 class="card-title mt-3">Mandanten</h5>
<p class="text-muted small">Verwaltung von Mandanten</p>
</div>
</div>
</div>
</div>
@code{
private void GoToUsers()
{
Nav.NavigateTo("/users");
}
private void GoToProjects()
{
Nav.NavigateTo("/projects");
}
private void GoToBookings()
{
Nav.NavigateTo("/bookings");
}
private void GoToAnalysis()
{
Nav.NavigateTo("/analysis");
}
private void GoToMandants()
{
Nav.NavigateTo("/mandants");
}
}
<style>
.dashboard-card {
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
border-radius: 0.75rem;
}
.dashboard-card:hover {
transform: translateY(-4px);
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
.card-body i {
transition: transform 0.3s ease;
}
.dashboard-card:hover i {
transform: scale(1.1);
}
</style>

View File

@ -28,6 +28,11 @@
</div> </div>
<button type="submit" class="btn btn-primary w-100">Login</button> <button type="submit" class="btn btn-primary w-100">Login</button>
<div class="text-center mt-3">
<span>Noch keinen Account? </span>
<a href="/createuser" class="link-primary text-decoration-none">Registrieren</a>
</div>
</EditForm> </EditForm>
@ -49,7 +54,7 @@
var result = await response.Content.ReadFromJsonAsync<LoginResponse>(); var result = await response.Content.ReadFromJsonAsync<LoginResponse>();
await AuthService.LoginAsync(result!.Token); await AuthService.LoginAsync(result!.Token);
Nav.NavigateTo("/users"); Nav.NavigateTo("/");
} }
catch catch
{ {

View File

@ -0,0 +1,425 @@
@page "/projects/{id:int}"
@using OnProfNext.Client.Services
@inject ProjectApiService ProjectService
@inject NavigationManager Nav
@inject OrderApiService OrderService
@inject UserApiService UserService
@using OnProfNext.Shared.Models.DTOs
<h3 class="mb-4 d-flex justify-content-between align-items-center">
<span class="text-primary">📁 Projekt-Details</span>
<button class="btn btn-outline-secondary" @onclick="GoBack">
<i class="bi bi-arrow-left"></i> Zurück
</button>
</h3>
@if (isLoading)
{
<div class="text-center mt-5">
<div class="spinner-border text-primary" role="status"></div>
<p class="mt-3 text-secondary">Projekt wird geladen...</p>
</div>
}
else if (errorMessage is not null)
{
<div class="alert alert-danger">@errorMessage</div>
}
else if (project is null)
{
<div class="alert alert-warning">Projekt nicht gefunden.</div>
}
else
{
<!-- HEADER -->
<div class="card shadow-sm border-0 mb-4">
<div class="card-body">
<div class="d-flex justify-content-between align-items-start">
<div>
<h3 class="text-primary mb-1">@project.ProjectName</h3>
<span class="badge bg-@GetStatusColor(project.Status)">
@project.Status
</span>
<p class="mt-3 text-muted">@project.Description</p>
</div>
<div class="text-end">
<small class="text-muted d-block">
<i class="bi bi-calendar"></i>
@project.StartDate.ToString("dd.MM.yyyy")
@if (project.EndDate is not null)
{
<span> @project.EndDate?.ToString("dd.MM.yyyy")</span>
}
</small>
<small class="text-muted d-block mt-1">
<i class="bi bi-building"></i> Mandant: @project.MandantId
</small>
</div>
</div>
@if (project.ProjectManagers?.Any() == true)
{
<div class="mt-3">
<h6 class="fw-bold text-secondary">Projektleiter</h6>
@foreach (var manager in project.ProjectManagers)
{
<span class="badge bg-primary me-1">@manager.FullName</span>
}
</div>
}
</div>
</div>
<!-- TABS -->
<ul class="nav nav-tabs mb-3">
@foreach (var tab in tabs)
{
<li class="nav-item">
<button class="nav-link @(activeTab == tab.Key ? "active" : "")"
@onclick="() => SetActiveTab(tab.Key)">
<i class="@tab.Icon me-1"></i> @tab.Title
</button>
</li>
}
</ul>
<div class="tab-content p-3 border rounded bg-white shadow-sm">
@switch (activeTab)
{
case "overview":
<div>
<h5>Projektübersicht</h5>
<p>Hier kommt später ein Überblick über Fortschritt, KPIs und Aktivitäten.</p>
</div>
break;
case "tasks":
<div>
<div class="d-flex justify-content-between align-items-center mb-3">
<h5 class="m-0">Aufträge</h5>
<button class="btn btn-success btn-sm" @onclick="ShowAddOrderModal">
<i class="bi bi-plus-circle"></i> Neuer Auftrag
</button>
</div>
@if (orders is null)
{
<div class="text-center text-muted mt-3">
<div class="spinner-border spinner-border-sm text-primary"></div>
<p>Aufträge werden geladen...</p>
</div>
}
else if (!orders.Any())
{
<div class="alert alert-info text-center">Keine Aufträge vorhanden.</div>
}
else
{
<table class="table table-hover align-middle">
<thead class="table-light">
<tr>
<th>Nr.</th>
<th>Titel</th>
<th>Status</th>
<th>Plan (h)</th>
<th>Ist (h)</th>
<th>Mitarbeiter</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var o in orders)
{
<tr>
<td>@o.Auftragsnummer</td>
<td>@o.Titel</td>
<td>
<span class="badge bg-@GetStatusColor(o.Status)">@o.Status</span>
</td>
<td>@o.Planstunden</td>
<td>@o.Iststunden</td>
<td>
<!-- Mitarbeiter-Zuordnung (später) -->
<span class="text-muted small">noch offen</span>
</td>
<td class="text-end">
<button class="btn btn-outline-danger btn-sm" @onclick="() => DeleteOrder(o.Id)">
<i class="bi bi-trash"></i>
</button>
</td>
</tr>
}
</tbody>
</table>
}
</div>
@if (showAddOrderModal)
{
<div class="modal fade show d-block" tabindex="-1" style="background-color: rgba(0,0,0,0.5);">
<div class="modal-dialog modal-dialog-centered" @onclick:stopPropagation>
<div class="modal-content border-0 shadow">
<div class="modal-header bg-primary text-white">
<h5 class="modal-title">Neuen Auftrag anlegen</h5>
<button type="button" class="btn-close btn-close-white" @onclick="CloseAddOrderModal"></button>
</div>
<div class="modal-body">
<EditForm Model="newOrder" OnValidSubmit="CreateOrderAsync">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="mb-3">
<label class="form-label">Auftragsnummer</label>
<InputText class="form-control" @bind-Value="newOrder.Auftragsnummer" />
</div>
<div class="mb-3">
<label class="form-label">Titel</label>
<InputText class="form-control" @bind-Value="newOrder.Titel" />
</div>
<div class="mb-3">
<label class="form-label">Planstunden</label>
<InputNumber class="form-control" @bind-Value="newOrder.Planstunden" />
</div>
<div class="mb-3">
<label class="form-label">Status</label>
<InputSelect class="form-select" @bind-Value="newOrder.Status">
<option value="Geplant">Geplant</option>
<option value="In Arbeit">In Arbeit</option>
<option value="Abgeschlossen">Abgeschlossen</option>
</InputSelect>
</div>
<div class="mb-3">
<label class="form-label">Mitarbeiter zuweisen</label>
<InputText class="form-control mb-2" @bind-Value="searchText" placeholder="Mitarbeiter suchen..." />
<div class="list-group" style="max-height: 150px; overflow-y: auto;">
@foreach (var u in FilteredUsers)
{
<label class="list-group-item small">
<input type="checkbox"
value="@u.Id"
checked="@(selectedUserIds.Contains(u.Id))"
@onchange="(e => ToggleUser(u.Id, (bool)e.Value!))" />
@u.FirstName @u.LastName (@u.Username)
</label>
}
</div>
</div>
<div class="d-flex justify-content-end">
<button type="button" class="btn btn-secondary me-2" @onclick="CloseAddOrderModal">Abbrechen</button>
<button type="submit" class="btn btn-success">Speichern</button>
</div>
</EditForm>
</div>
</div>
</div>
</div>
}
break;
case "bookings":
<div>
<h5>Buchungen</h5>
<p>Zeiterfassungen und Plan/Ist-Vergleiche werden hier erscheinen.</p>
</div>
break;
case "members":
<div>
<h5>Mitarbeiter</h5>
<p>Teamzuordnung, Rollenverwaltung, People Picker.</p>
</div>
break;
case "documents":
<div>
<h5>Dokumente</h5>
<p>Dateiupload, SharePoint-Verknüpfung, Projektreports.</p>
</div>
break;
case "comments":
<div>
<h5>Kommentare</h5>
<p>Chat/Kommentarbereich für Projektkommunikation.</p>
</div>
break;
}
</div>
}
@code {
[Parameter] public int id { get; set; }
private ProjectDto? project;
private string? errorMessage;
private bool isLoading = true;
// Tabs
private string activeTab = "overview";
private readonly List<(string Key, string Title, string Icon)> tabs = new()
{
("overview", "Übersicht", "bi bi-house"),
("tasks", "Aufträge", "bi bi-list-task"),
("bookings", "Buchungen", "bi bi-clock-history"),
("members", "Mitarbeiter", "bi bi-people"),
("documents", "Dokumente", "bi bi-folder2-open"),
("comments", "Kommentare", "bi bi-chat-left-text")
};
protected override async Task OnInitializedAsync()
{
await LoadProjectAsync();
var result = await OrderService.GetOrdersByProjectAsync(1);
Console.WriteLine($"Orders loaded: {result.Data?.Count}");
}
private async Task LoadProjectAsync()
{
try
{
var result = await ProjectService.GetProjectAsync(id);
if (!result.Success)
{
errorMessage = result.Error;
return;
}
project = result.Data;
}
catch (Exception ex)
{
errorMessage = $"Fehler beim Laden: {ex.Message}";
}
finally
{
isLoading = false;
}
}
private string GetStatusColor(string? status) => status switch
{
"Geplant" => "secondary",
"In Arbeit" => "info",
"Abgeschlossen" => "success",
_ => "light"
};
private void SetActiveTab(string key) => activeTab = key;
private void GoBack() => Nav.NavigateTo("/projects");
private List<OrderDto>? orders;
private bool showAddOrderModal = false;
private OrderDto newOrder = new();
private List<UserDto> users = new();
private string searchText = "";
private List<int> selectedUserIds = new();
private IEnumerable<UserDto> FilteredUsers => string.IsNullOrWhiteSpace(searchText)
? users
: users.Where(u => $"{u.FirstName} {u.LastName} {u.Username}".Contains(searchText, StringComparison.OrdinalIgnoreCase));
private void ToggleUser(int id, bool selected)
{
if (selected)
{
selectedUserIds.Add(id);
}
else
{
selectedUserIds.Remove(id);
}
}
private void ShowAddOrderModal()
{
newOrder = new OrderDto
{
ProjectId = project!.Id,
Status = "Geplant",
MandantId = project.MandantId
};
selectedUserIds.Clear();
searchText = "";
showAddOrderModal = true;
}
private void CloseAddOrderModal() => showAddOrderModal = false;
private async Task LoadOrderAsync()
{
var result = await OrderService.GetOrdersByProjectAsync(project!.Id);
if(result.Success)
{
orders = result.Data;
}
else
{
errorMessage = result.Error;
}
}
private async Task CreateOrderAsync()
{
var result = await OrderService.CreateOrderAsync(newOrder);
if(!result.Success)
{
errorMessage = result.Error;
return;
}
CloseAddOrderModal();
await LoadOrderAsync();
}
private async Task DeleteOrder(int id)
{
var result = await OrderService.DeleteOrderAsync(id);
if (result.Success)
{
await LoadOrderAsync();
}
else
{
errorMessage = result.Error;
}
}
}
<style>
.nav-tabs .nav-link {
color: #495057;
border: none;
border-bottom: 3px solid transparent;
}
.nav-tabs .nav-link.active {
color: #0d6efd;
font-weight: 600;
border-color: #0d6efd;
background-color: transparent;
}
.tab-content {
border-radius: 0.5rem;
}
.modal-content {
border-radius: 0.75rem;
}
.list-group-item {
padding: 0.5rem 1rem;
}
</style>

View File

@ -0,0 +1,331 @@
@page "/projects"
@using OnProfNext.Client.Services
@using OnProfNext.Shared.Models
@using OnProfNext.Shared.Models.DTOs
@inject ProjectApiService ProjectService
@inject UserApiService UserService
@inject NavigationManager Nav
<h3 class="mb-4 text-primary d-flex justify-content-between align-items-center">
<span>📁 Projektübersicht</span>
<button class="btn btn-success" @onclick="ShowAddModal">
<i class="bi bi-plus-circle"></i> Neues Projekt
</button>
</h3>
@if (errorMessage is not null)
{
<div class="alert alert-danger">@errorMessage</div>
}
else if (projects is null)
{
<div class="text-center mt-5">
<div class="spinner-border text-primary" role="status"></div>
<p class="mt-3 text-secondary">Projekte werden geladen...</p>
</div>
}
else if (!projects.Any())
{
<div class="alert alert-info text-center">
Es sind aktuell keine Projekte vorhanden.
</div>
}
else
{
@foreach (var group in projects.GroupBy(p => p.Status))
{
<h5 class="mt-4 mb-3 fw-bold text-secondary">
<i class="bi bi-kanban"></i> @group.Key
</h5>
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-3">
@foreach (var p in group)
{
<div class="col">
<div class="card shadow-sm h-100 border-0 position-relative card-hover"
style="cursor: pointer;" @onclick="@(() => OpenProjectDetails(p.Id))"
>
<button class="btn btn-sm btn-outline-danger position-absolute top-0 end-0 m-2"
title="Projekt löschen"
@onclick="() => ConfirmDelete(p)">
<i class="bi bi-trash"></i>
</button>
<div class="card-body">
<h5 class="card-title text-primary">@p.ProjectName</h5>
@if (p.ProjectManagers?.Any() == true)
{
<div class="mb-2">
@foreach (var manager in p.ProjectManagers)
{
<span class="badge bg-primary me-1">@manager.FullName</span>
}
</div>
}
else
{
<p class="text-muted small mb-2"><i class="bi bi-person-circle"></i> Keine Projektleiter</p>
}
<p class="card-text">@p.Description</p>
</div>
<div class="card-footer bg-white border-0 text-end small text-muted">
<i class="bi bi-calendar"></i>
@p.StartDate.ToString("dd.MM.yyyy")
@if (p.EndDate is not null)
{
<span> @p.EndDate?.ToString("dd.MM.yyyy")</span>
}
</div>
</div>
</div>
}
</div>
}
}
<!-- Neues Projekt Modal -->
@if (showAddModal)
{
<div class="modal fade show d-block"
tabindex="-1"
style="background-color: rgba(0,0,0,0.5);">
<div class="modal-dialog modal-dialog-centered"
@onclick:stopPropagation>
<div class="modal-content border-0 shadow">
<div class="modal-header bg-primary text-white">
<h5 class="modal-title">Neues Projekt anlegen</h5>
<button type="button" class="btn-close btn-close-white" @onclick="CloseAddModal"></button>
</div>
<div class="modal-body">
<EditForm Model="newProject" OnValidSubmit="CreateProjectAsync">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="mb-3">
<label class="form-label">Projektname</label>
<InputText class="form-control" @bind-Value="newProject.ProjectName" />
</div>
<div class="mb-3">
<label class="form-label">Beschreibung</label>
<InputTextArea class="form-control" rows="3" @bind-Value="newProject.Description" />
</div>
<div class="mb-3">
<label class="form-label">Projektleiter</label>
<InputText class="form-control mb-2" @bind-Value="searchText" placeholder="Projektleiter suchen..." />
<div class="list-group" style="max-height: 150px; overflow-y: auto;">
@if (!FilteredUsers.Any())
{
<div class="list-group-item text-muted">Keine Benutzer gefunden</div>
}
else
{
@foreach (var user in FilteredUsers)
{
<label class="list-group-item">
<input type="checkbox"
value="@user.Id"
checked="@(newProject.ProjectManagerIds.Contains(user.Id))"
@onchange="@(e => ToggleProjectManager(user.Id, e.Value != null && (bool)e.Value))" />
@user.FirstName @user.LastName (@user.Username)
</label>
}
}
</div>
</div>
<div class="mb-3">
<label class="form-label">Status</label>
<InputSelect class="form-select" @bind-Value="newProject.Status">
<option value="Geplant">Geplant</option>
<option value="In Arbeit">In Arbeit</option>
<option value="Abgeschlossen">Abgeschlossen</option>
</InputSelect>
</div>
<div class="d-flex justify-content-end">
<button type="button" class="btn btn-secondary me-2" @onclick="CloseAddModal">Abbrechen</button>
<button type="submit" class="btn btn-success">Speichern</button>
</div>
</EditForm>
</div>
</div>
</div>
</div>
}
@if (showDeleteModal)
{
<div class="modal fade show d-block" tabindex="-1"
style="background-color: rgba(0,0,0,0.5);">
<div class="modal-dialog modal-dialog-centered" @onclick:stopPropagation>
<div class="modal-content border-0 shadow">
<div class="modal-header bg-danger text-white">
<h5 class="modal-title">Projekt löschen</h5>
<button type="button" class="btn-close btn-close-white" @onclick="CloseDeleteModal"></button>
</div>
<div class="modal-body">
<p>Möchten Sie das Projekt <strong>@projectToDelete?.ProjectName</strong> wirklich löschen?</p>
<p class="text-muted small">Dieser Vorgang kann nicht rückgängig gemacht werden.</p>
</div>
<div class="modal-footer">
<button class="btn btn-secondary" @onclick="CloseDeleteModal">Abbrechen</button>
<button class="btn btn-danger" @onclick="DeleteProjectAsync">Löschen</button>
</div>
</div>
</div>
</div>
}
@code {
private List<ProjectDto>? projects;
private string? errorMessage;
private bool showAddModal = false;
private ProjectCreateDto newProject = new();
private List<User> users = new();
private string searchText = "";
private IEnumerable<User> FilteredUsers => string.IsNullOrWhiteSpace(searchText)
? users
: users.Where(u => $"{u.FirstName} {u.LastName} {u.Username}"
.Contains(searchText, StringComparison.OrdinalIgnoreCase));
protected override async Task OnInitializedAsync()
{
await LoadProjectsAsync();
var userResult = await UserService.GetUsersAsync();
if (userResult.Success && userResult.Data != null)
users = userResult.Data;
}
private async Task LoadProjectsAsync()
{
var result = await ProjectService.GetProjectsAsync();
if (!result.Success)
{
errorMessage = result.Error;
return;
}
projects = result.Data?
.OrderBy(p => p.Status)
.ThenByDescending(p => p.StartDate)
.ToList();
}
private void ShowAddModal()
{
newProject = new ProjectCreateDto { Status = "Geplant", MandantId = 1 };
searchText = "";
showAddModal = true;
}
private void CloseAddModal()
{
showAddModal = false;
}
private void ToggleProjectManager(int userId, bool isChecked)
{
if (isChecked)
{
if (!newProject.ProjectManagerIds.Contains(userId))
newProject.ProjectManagerIds.Add(userId);
}
else
{
newProject.ProjectManagerIds.Remove(userId);
}
}
private async Task CreateProjectAsync()
{
var result = await ProjectService.CreateProjectAsync(newProject);
if (!result.Success)
{
errorMessage = result.Error;
return;
}
CloseAddModal();
await LoadProjectsAsync();
}
private bool showDeleteModal = false;
private ProjectDto? projectToDelete;
private void ConfirmDelete(ProjectDto project)
{
projectToDelete = project;
showDeleteModal = true;
}
private void CloseDeleteModal()
{
showDeleteModal = false;
projectToDelete = null;
}
private async Task DeleteProjectAsync()
{
if(projectToDelete is null)
return;
var result = await ProjectService.DeleteProjectAsync(projectToDelete.Id);
if(!result.Success)
{
errorMessage = result.Error;
return;
}
CloseDeleteModal();
await LoadProjectsAsync();
}
private void OpenProjectDetails(int projectId)
{
Nav.NavigateTo($"/projects/{projectId}");
}
}
<style>
.card {
transition: all 0.15s ease-in-out;
border-radius: 0.75rem;
}
.card:hover {
transform: scale(1.02);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.modal-content {
border-radius: 0.75rem;
}
.modal-header {
border-bottom: none;
}
.list-group-item {
padding: 0.5rem 1rem;
}
.list-group-item input[type="checkbox"] {
margin-right: 0.5rem;
}
.btn-outline-danger {
border: none;
color: #dc3545;
}
.btn-outline-danger:hover {
color: white;
background-color: #dc3545;
}
</style>

View File

@ -7,6 +7,8 @@ var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app"); builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after"); builder.RootComponents.Add<HeadOutlet>("head::after");
builder.Services.AddBlazorBootstrap();
//Auth + HTTP Config //Auth + HTTP Config
builder.Services.AddScoped<AuthService>(); builder.Services.AddScoped<AuthService>();
@ -17,6 +19,16 @@ builder.Services.AddHttpClient<UserApiService>(client =>
client.BaseAddress = new Uri("https://localhost:7271/"); client.BaseAddress = new Uri("https://localhost:7271/");
}).AddHttpMessageHandler<AuthorizationMessageHandler>(); }).AddHttpMessageHandler<AuthorizationMessageHandler>();
builder.Services.AddHttpClient<ProjectApiService>(client =>
{
client.BaseAddress = new Uri("https://localhost:7271/");
}).AddHttpMessageHandler<AuthorizationMessageHandler>();
builder.Services.AddHttpClient<OrderApiService>(client =>
{
client.BaseAddress = new Uri("https://localhost:7271/");
}).AddHttpMessageHandler<AuthorizationMessageHandler>();
builder.Services.AddScoped(sp => new HttpClient builder.Services.AddScoped(sp => new HttpClient
{ {
@ -24,6 +36,8 @@ builder.Services.AddScoped(sp => new HttpClient
}); });
await builder.Build().RunAsync(); await builder.Build().RunAsync();

View File

@ -0,0 +1,110 @@
using OnProfNext.Shared.Models.DTOs;
using System.Net.Http.Json;
namespace OnProfNext.Client.Services
{
public class OrderApiService
{
private readonly HttpClient _httpClient;
public OrderApiService(HttpClient httpClient)
{
_httpClient = httpClient;
}
// Alle Aufträge zu einem Projekt abrufen
public async Task<(bool Success, List<OrderDto>? Data, string? Error)> GetOrdersByProjectAsync(int projectId)
{
try
{
var orders = await _httpClient.GetFromJsonAsync<List<OrderDto>>($"api/orders/byproject/{projectId}");
return (true, orders ?? new List<OrderDto>(), null);
}
catch (HttpRequestException)
{
return (false, null, "Server nicht erreichbar. Bitte später erneut versuchen.");
}
catch (Exception ex)
{
return (false, null, $"Fehler: {ex.Message}");
}
}
// Einzelnen Auftrag abrufen
public async Task<(bool Success, OrderDto? Data, string? Error)> GetOrderAsync(int id)
{
try
{
var order = await _httpClient.GetFromJsonAsync<OrderDto>($"api/orders/{id}");
if (order == null)
return (false, null, "Auftrag nicht gefunden.");
return (true, order, null);
}
catch (Exception ex)
{
return (false, null, ex.Message);
}
}
//Auftrag erstellen
public async Task<(bool Success, string? Error)> CreateOrderAsync(OrderDto newOrder)
{
try
{
var response = await _httpClient.PostAsJsonAsync("api/orders", newOrder);
if (!response.IsSuccessStatusCode)
return (false, $"Fehler beim Erstellen: {response.ReasonPhrase}");
return (true, null);
}
catch (HttpRequestException)
{
return (false, "Server nicht erreichbar.");
}
catch (Exception ex)
{
return (false, ex.Message);
}
}
//Auftrag aktualisieren
public async Task<(bool Success, string? Error)> UpdateOrderAsync(OrderDto order)
{
try
{
var response = await _httpClient.PutAsJsonAsync($"api/orders/{order.Id}", order);
if (!response.IsSuccessStatusCode)
return (false, $"Fehler beim Aktualisieren: {response.ReasonPhrase}");
return (true, null);
}
catch (Exception ex)
{
return (false, ex.Message);
}
}
//Auftrag löschen
public async Task<(bool Success, string? Error)> DeleteOrderAsync(int id)
{
try
{
var response = await _httpClient.DeleteAsync($"api/orders/{id}");
if (!response.IsSuccessStatusCode)
return (false, $"Fehler beim Löschen: {response.ReasonPhrase}");
return (true, null);
}
catch (HttpRequestException)
{
return (false, "Server nicht erreichbar.");
}
catch (Exception ex)
{
return (false, ex.Message);
}
}
}
}

View File

@ -0,0 +1,120 @@
using OnProfNext.Shared.Models.DTOs;
using System.Net.Http.Json;
namespace OnProfNext.Client.Services
{
public class ProjectApiService
{
private readonly HttpClient _httpClient;
public ProjectApiService(HttpClient httpClient)
{
_httpClient = httpClient;
}
// GET: Alle Projekte abrufen
public async Task<(bool Success, List<ProjectDto>? Data, string? Error)> GetProjectsAsync()
{
try
{
var projects = await _httpClient.GetFromJsonAsync<List<ProjectDto>>("api/project");
return (true, projects ?? new(), null);
}
catch (HttpRequestException)
{
return (false, null, "Keine Verbindung zum Server. Bitte später erneut versuchen.");
}
catch (Exception ex)
{
return (false, null, $"Unerwarteter Fehler: {ex.Message}");
}
}
//GET: Ein einzelnes Projekt abrufen
public async Task<(bool Success, ProjectDto? Data, string? Error)> GetProjectAsync(int id)
{
try
{
var project = await _httpClient.GetFromJsonAsync<ProjectDto>($"api/project/{id}");
if (project == null)
return (false, null, "Projekt nicht gefunden.");
return (true, project, null);
}
catch (HttpRequestException)
{
return (false, null, "Keine Verbindung zum Server. Bitte später erneut versuchen.");
}
catch (Exception ex)
{
return (false, null, $"Unerwarteter Fehler: {ex.Message}");
}
}
// POST: Neues Projekt erstellen
public async Task<(bool Success, string? Error)> CreateProjectAsync(ProjectCreateDto dto)
{
try
{
var response = await _httpClient.PostAsJsonAsync("api/project", dto);
if (!response.IsSuccessStatusCode)
{
return (false, $"Fehler beim Anlegen: {response.ReasonPhrase}");
}
return (true, null);
}
catch (HttpRequestException)
{
return (false, "Server nicht erreichbar.");
}
catch (Exception ex)
{
return (false, ex.Message);
}
}
// PUT: Bestehendes Projekt aktualisieren
public async Task<(bool Success, string? Error)> UpdateProjectAsync(int id, ProjectCreateDto dto)
{
try
{
var response = await _httpClient.PutAsJsonAsync($"api/project/{id}", dto);
if (!response.IsSuccessStatusCode)
{
return (false, $"Fehler beim Aktualisieren: {response.ReasonPhrase}");
}
return (true, null);
}
catch (HttpRequestException)
{
return (false, "Server nicht erreichbar.");
}
catch (Exception ex)
{
return (false, ex.Message);
}
}
// DELETE: Projekt löschen
public async Task<(bool Success, string? Error)> DeleteProjectAsync(int id)
{
try
{
var response = await _httpClient.DeleteAsync($"api/project/{id}");
if (!response.IsSuccessStatusCode)
{
return (false, $"Fehler beim Löschen: {response.ReasonPhrase}");
}
return (true, null);
}
catch (HttpRequestException)
{
return (false, "Server nicht erreichbar.");
}
catch (Exception ex)
{
return (false, ex.Message);
}
}
}
}

View File

@ -7,4 +7,4 @@
@using Microsoft.AspNetCore.Components.WebAssembly.Http @using Microsoft.AspNetCore.Components.WebAssembly.Http
@using Microsoft.JSInterop @using Microsoft.JSInterop
@using OnProfNext.Client @using OnProfNext.Client
@using OnProfNext.Client.Layout @using OnProfNext.Client.Components.Layout

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,8 +1,10 @@
{ {
"mainAssemblyName": "OnProfNext.Client", "mainAssemblyName": "OnProfNext.Client",
"resources": { "resources": {
"hash": "sha256-sdgE1RAaUQc5n7OrH7o/T4IQOnorsuIC+/3tQRojPuM=", "hash": "sha256-SaR622VBzkbZ3Cn15m/brI2xuJEupmhtVwEx8wa/rI4=",
"fingerprinting": { "fingerprinting": {
"BlazorBootstrap.ym6tnrklwx.wasm": "BlazorBootstrap.wasm",
"Blazored.Typeahead.5g65vcuhxb.wasm": "Blazored.Typeahead.wasm",
"Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "Microsoft.AspNetCore.Authorization.wasm", "Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "Microsoft.AspNetCore.Authorization.wasm",
"Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "Microsoft.AspNetCore.Components.wasm", "Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "Microsoft.AspNetCore.Components.wasm",
"Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "Microsoft.AspNetCore.Components.Forms.wasm", "Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "Microsoft.AspNetCore.Components.Forms.wasm",
@ -22,6 +24,8 @@
"Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "Microsoft.Extensions.FileProviders.Physical.wasm", "Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "Microsoft.Extensions.FileProviders.Physical.wasm",
"Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "Microsoft.Extensions.FileSystemGlobbing.wasm", "Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "Microsoft.Extensions.FileSystemGlobbing.wasm",
"Microsoft.Extensions.Http.34jr7x6h7z.wasm": "Microsoft.Extensions.Http.wasm", "Microsoft.Extensions.Http.34jr7x6h7z.wasm": "Microsoft.Extensions.Http.wasm",
"Microsoft.Extensions.Localization.bvn14pws96.wasm": "Microsoft.Extensions.Localization.wasm",
"Microsoft.Extensions.Localization.Abstractions.o4jp2hcm79.wasm": "Microsoft.Extensions.Localization.Abstractions.wasm",
"Microsoft.Extensions.Logging.2h3t8m6coa.wasm": "Microsoft.Extensions.Logging.wasm", "Microsoft.Extensions.Logging.2h3t8m6coa.wasm": "Microsoft.Extensions.Logging.wasm",
"Microsoft.Extensions.Logging.Abstractions.ni4towxuts.wasm": "Microsoft.Extensions.Logging.Abstractions.wasm", "Microsoft.Extensions.Logging.Abstractions.ni4towxuts.wasm": "Microsoft.Extensions.Logging.Abstractions.wasm",
"Microsoft.Extensions.Options.2nlpwp09nn.wasm": "Microsoft.Extensions.Options.wasm", "Microsoft.Extensions.Options.2nlpwp09nn.wasm": "Microsoft.Extensions.Options.wasm",
@ -33,6 +37,7 @@
"Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "Microsoft.IdentityModel.Tokens.wasm", "Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "Microsoft.IdentityModel.Tokens.wasm",
"Microsoft.JSInterop.9ydsnriizw.wasm": "Microsoft.JSInterop.wasm", "Microsoft.JSInterop.9ydsnriizw.wasm": "Microsoft.JSInterop.wasm",
"Microsoft.JSInterop.WebAssembly.v6rnols3v9.wasm": "Microsoft.JSInterop.WebAssembly.wasm", "Microsoft.JSInterop.WebAssembly.v6rnols3v9.wasm": "Microsoft.JSInterop.WebAssembly.wasm",
"MudBlazor.845kbj1w9a.wasm": "MudBlazor.wasm",
"System.IdentityModel.Tokens.Jwt.5tt1rwyygx.wasm": "System.IdentityModel.Tokens.Jwt.wasm", "System.IdentityModel.Tokens.Jwt.5tt1rwyygx.wasm": "System.IdentityModel.Tokens.Jwt.wasm",
"Microsoft.CSharp.j3zkownjjr.wasm": "Microsoft.CSharp.wasm", "Microsoft.CSharp.j3zkownjjr.wasm": "Microsoft.CSharp.wasm",
"Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "Microsoft.VisualBasic.Core.wasm", "Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "Microsoft.VisualBasic.Core.wasm",
@ -210,10 +215,10 @@
"icudt_CJK.tjcz0u77k5.dat": "icudt_CJK.dat", "icudt_CJK.tjcz0u77k5.dat": "icudt_CJK.dat",
"icudt_EFIGS.tptq2av103.dat": "icudt_EFIGS.dat", "icudt_EFIGS.tptq2av103.dat": "icudt_EFIGS.dat",
"icudt_no_CJK.lfu7j35m59.dat": "icudt_no_CJK.dat", "icudt_no_CJK.lfu7j35m59.dat": "icudt_no_CJK.dat",
"OnProfNext.Shared.bjm5usq0dn.wasm": "OnProfNext.Shared.wasm", "OnProfNext.Shared.2mfi0vbe9l.wasm": "OnProfNext.Shared.wasm",
"OnProfNext.Shared.ngxoafdaut.pdb": "OnProfNext.Shared.pdb", "OnProfNext.Shared.t3qtrvr78n.pdb": "OnProfNext.Shared.pdb",
"OnProfNext.Client.9x22x36las.wasm": "OnProfNext.Client.wasm", "OnProfNext.Client.5wq5yy3l8s.wasm": "OnProfNext.Client.wasm",
"OnProfNext.Client.wxt0a0ecyb.pdb": "OnProfNext.Client.pdb" "OnProfNext.Client.4rg9bpcr9v.pdb": "OnProfNext.Client.pdb"
}, },
"jsModuleNative": { "jsModuleNative": {
"dotnet.native.9ih887ebfz.js": "sha256-oS7IRiQoVt9ThQ7Y2UM3XoeY0JqPD02cg9IvRdufn2w=" "dotnet.native.9ih887ebfz.js": "sha256-oS7IRiQoVt9ThQ7Y2UM3XoeY0JqPD02cg9IvRdufn2w="
@ -234,6 +239,8 @@
"System.Private.CoreLib.uqnhzdwypx.wasm": "sha256-dmlLyil2xqdBc+0yMfmACcDeIGVefS4QHjRT/9mLdNs=" "System.Private.CoreLib.uqnhzdwypx.wasm": "sha256-dmlLyil2xqdBc+0yMfmACcDeIGVefS4QHjRT/9mLdNs="
}, },
"assembly": { "assembly": {
"BlazorBootstrap.ym6tnrklwx.wasm": "sha256-JvZh7RjGQpT7CC6gfoLZbKPPkhcor/rhKKpkCt/2lfU=",
"Blazored.Typeahead.5g65vcuhxb.wasm": "sha256-GwHvrw5VqXbXdYF+BX0dOWgR9mMoIh0SLjRrafirlyY=",
"Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "sha256-K3j153B4Qx57/sHT4gOICXyadidNa4qEUflLPz/OgCU=", "Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "sha256-K3j153B4Qx57/sHT4gOICXyadidNa4qEUflLPz/OgCU=",
"Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "sha256-esbkeXi/0iIJjs+MdmPU6nulNqIzqOw5a4hLgs2f6+U=", "Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "sha256-esbkeXi/0iIJjs+MdmPU6nulNqIzqOw5a4hLgs2f6+U=",
"Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "sha256-8o1e7d2phwhchCrOcBV5r/UklI0sSixpCl8wQkEHNfE=", "Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "sha256-8o1e7d2phwhchCrOcBV5r/UklI0sSixpCl8wQkEHNfE=",
@ -253,6 +260,8 @@
"Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "sha256-j06UStE6FBwEz3CJbgLfbKKSePh0FaT4PK7wtDoUXs0=", "Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "sha256-j06UStE6FBwEz3CJbgLfbKKSePh0FaT4PK7wtDoUXs0=",
"Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "sha256-BC/MCU6S9BBMqOrRwZh0plnIpsYyZKyENCmb6p3Acsk=", "Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "sha256-BC/MCU6S9BBMqOrRwZh0plnIpsYyZKyENCmb6p3Acsk=",
"Microsoft.Extensions.Http.34jr7x6h7z.wasm": "sha256-fTu6J/dJP8yyhw48HS3g8ZOvSNcIA7ConcInauGbohA=", "Microsoft.Extensions.Http.34jr7x6h7z.wasm": "sha256-fTu6J/dJP8yyhw48HS3g8ZOvSNcIA7ConcInauGbohA=",
"Microsoft.Extensions.Localization.bvn14pws96.wasm": "sha256-6UgMJoVZBfDdfzYR0aKVK6BWArxpXC1qiQDDjiXw/L4=",
"Microsoft.Extensions.Localization.Abstractions.o4jp2hcm79.wasm": "sha256-GJNjpp2mlMIYboBhzukWw5r2Z24PsB0E9Gj9VoTGKEI=",
"Microsoft.Extensions.Logging.2h3t8m6coa.wasm": "sha256-1jYRjcDI2/MnB5Htgj4yUaHr8gA/poI4oLgWUMZYnV0=", "Microsoft.Extensions.Logging.2h3t8m6coa.wasm": "sha256-1jYRjcDI2/MnB5Htgj4yUaHr8gA/poI4oLgWUMZYnV0=",
"Microsoft.Extensions.Logging.Abstractions.ni4towxuts.wasm": "sha256-H+TpHvK/z4RGb8EfLe1cGb1TwnCKZAmNxt8e3s3CUSM=", "Microsoft.Extensions.Logging.Abstractions.ni4towxuts.wasm": "sha256-H+TpHvK/z4RGb8EfLe1cGb1TwnCKZAmNxt8e3s3CUSM=",
"Microsoft.Extensions.Options.2nlpwp09nn.wasm": "sha256-zp3zuBmKVlE6HjY0Br1uj3fY9sU7ET4ITzgpnpmj9V0=", "Microsoft.Extensions.Options.2nlpwp09nn.wasm": "sha256-zp3zuBmKVlE6HjY0Br1uj3fY9sU7ET4ITzgpnpmj9V0=",
@ -264,6 +273,7 @@
"Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "sha256-hQbBReIl6OvRCOLal9JHAiyQa9Zejqvl/Q03oc0DvyE=", "Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "sha256-hQbBReIl6OvRCOLal9JHAiyQa9Zejqvl/Q03oc0DvyE=",
"Microsoft.JSInterop.9ydsnriizw.wasm": "sha256-oZgTa/to3sE2tSzwcZQ0GIX1meeIGAYVE7IoJDL4RkI=", "Microsoft.JSInterop.9ydsnriizw.wasm": "sha256-oZgTa/to3sE2tSzwcZQ0GIX1meeIGAYVE7IoJDL4RkI=",
"Microsoft.JSInterop.WebAssembly.v6rnols3v9.wasm": "sha256-Z/XKvzIKcHVmnvT7y1f4/N5zSNqzNAfjsLaBDIyCkYs=", "Microsoft.JSInterop.WebAssembly.v6rnols3v9.wasm": "sha256-Z/XKvzIKcHVmnvT7y1f4/N5zSNqzNAfjsLaBDIyCkYs=",
"MudBlazor.845kbj1w9a.wasm": "sha256-6H3anvXkkN9V1Gxb+Ul/S1lH5SsXdXFbL0IXDHFkVlY=",
"System.IdentityModel.Tokens.Jwt.5tt1rwyygx.wasm": "sha256-15e9xXAMloW+NXhmC4dPppM4zlorit69Q+n8h3ToBSI=", "System.IdentityModel.Tokens.Jwt.5tt1rwyygx.wasm": "sha256-15e9xXAMloW+NXhmC4dPppM4zlorit69Q+n8h3ToBSI=",
"Microsoft.CSharp.j3zkownjjr.wasm": "sha256-r7YS8Hp01zUR3LoH5JsS7IrucOta+FnV199bCLii7Pk=", "Microsoft.CSharp.j3zkownjjr.wasm": "sha256-r7YS8Hp01zUR3LoH5JsS7IrucOta+FnV199bCLii7Pk=",
"Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "sha256-/jlp74GLHWhrCfjAmWlVClO68H3wIk+kVx9A/gjByls=", "Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "sha256-/jlp74GLHWhrCfjAmWlVClO68H3wIk+kVx9A/gjByls=",
@ -432,12 +442,12 @@
"WindowsBase.vy2l5u79y6.wasm": "sha256-ufB9Mo5joMyUs3DzXWWBFFIZNEVrt6h9N5stYB6Oln4=", "WindowsBase.vy2l5u79y6.wasm": "sha256-ufB9Mo5joMyUs3DzXWWBFFIZNEVrt6h9N5stYB6Oln4=",
"mscorlib.xd6mv31d55.wasm": "sha256-1YSLR2eZt3ceALFV//vZUF2AloxVil3VlrW1zZYPSEI=", "mscorlib.xd6mv31d55.wasm": "sha256-1YSLR2eZt3ceALFV//vZUF2AloxVil3VlrW1zZYPSEI=",
"netstandard.kaml52uspo.wasm": "sha256-HLEwBpLfzKw2/zGSVzHzFJxznCkt/WIjahrziiMrOpA=", "netstandard.kaml52uspo.wasm": "sha256-HLEwBpLfzKw2/zGSVzHzFJxznCkt/WIjahrziiMrOpA=",
"OnProfNext.Shared.bjm5usq0dn.wasm": "sha256-qZCgoqiTQV2LhVgD6wblo5h+IaRY56ZvOfi7JExbXSU=", "OnProfNext.Shared.2mfi0vbe9l.wasm": "sha256-dtTuHimLAmvGF8qILy/wJ/+ayEzY7dCE84UPpHBOASA=",
"OnProfNext.Client.9x22x36las.wasm": "sha256-TcgeL1nbqCETQa0KBBDGBKQeu90A6mTJ1Ggz1YA/kTI=" "OnProfNext.Client.5wq5yy3l8s.wasm": "sha256-m066gnQLM/+y1wYYFW4kr2hCQmPEE259N81Fky7+CwU="
}, },
"pdb": { "pdb": {
"OnProfNext.Shared.ngxoafdaut.pdb": "sha256-mQq6ePqyQ0WFocesus6NyVnqfp9+qtbtuxGK4FI3N1I=", "OnProfNext.Shared.t3qtrvr78n.pdb": "sha256-aXAxhpJUbAJFfkq3FS2JtRPFp2plRnylMovNt92Xwwo=",
"OnProfNext.Client.wxt0a0ecyb.pdb": "sha256-bD7zFXZKUWLcO9WTXcKpdRRf+limKaZyhizkASw9lkA=" "OnProfNext.Client.4rg9bpcr9v.pdb": "sha256-ECxFZzQ6HqVe1zWc13ioyvpjeuXnoVabpsyS62HMv+I="
} }
}, },
"cacheBootResources": true, "cacheBootResources": true,

View File

@ -1,7 +1,6 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // This code was generated by a tool.
// Runtime Version:4.0.30319.42000
// //
// Changes to this file may cause incorrect behavior and will be lost if // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
@ -14,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OnProfNext.Client")] [assembly: System.Reflection.AssemblyCompanyAttribute("OnProfNext.Client")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+dc83bd10a42fe82cf68f3dee268950e72b74a4e3")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+789d44a34459f0132cb03433abffa66c9ff48824")]
[assembly: System.Reflection.AssemblyProductAttribute("OnProfNext.Client")] [assembly: System.Reflection.AssemblyProductAttribute("OnProfNext.Client")]
[assembly: System.Reflection.AssemblyTitleAttribute("OnProfNext.Client")] [assembly: System.Reflection.AssemblyTitleAttribute("OnProfNext.Client")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
49292a426d1b2f7c4f3398ed6db8a7bf6d69d33940ea55b0f7ccf80fe3c561b5 a6d164127922e05929c86ac8b818b177b550a13e63904451ca14283aeb814edd

View File

@ -3,6 +3,9 @@ build_property.EnableAotAnalyzer =
build_property.EnableSingleFileAnalyzer = build_property.EnableSingleFileAnalyzer =
build_property.EnableTrimAnalyzer = false build_property.EnableTrimAnalyzer = false
build_property.IncludeAllContentForSelfExtract = build_property.IncludeAllContentForSelfExtract =
build_property.MudDebugAnalyzer =
build_property.MudAllowedAttributePattern =
build_property.MudAllowedAttributeList =
build_property.TargetFramework = net9.0 build_property.TargetFramework = net9.0
build_property.TargetPlatformMinVersion = build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb = build_property.UsingMicrosoftNETSdkWeb =
@ -28,6 +31,18 @@ build_property.EnableCodeStyleSeverity =
build_metadata.AdditionalFiles.TargetPath = QXBwLnJhem9y build_metadata.AdditionalFiles.TargetPath = QXBwLnJhem9y
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Components/Modals/ProjectModal.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xNb2RhbHNcUHJvamVjdE1vZGFsLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Components/Shared/RedirectToLogin.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xTaGFyZWRcUmVkaXJlY3RUb0xvZ2luLnJhem9y
build_metadata.AdditionalFiles.CssScope =
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/Component.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQ29tcG9uZW50LnJhem9y
build_metadata.AdditionalFiles.CssScope =
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/CreateUser.razor] [C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/CreateUser.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQ3JlYXRlVXNlci5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQ3JlYXRlVXNlci5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
@ -40,22 +55,26 @@ build_metadata.AdditionalFiles.CssScope =
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcTG9naW4ucmF6b3I= build_metadata.AdditionalFiles.TargetPath = UGFnZXNcTG9naW4ucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/Users.razor] [C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/Projects/ProjectDetails.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcVXNlcnMucmF6b3I= build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUHJvamVjdHNcUHJvamVjdERldGFpbHMucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Shared/RedirectToLogin.razor] [C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/Projects/Projects.razor]
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXFJlZGlyZWN0VG9Mb2dpbi5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUHJvamVjdHNcUHJvamVjdHMucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/Users.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcVXNlcnMucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/_Imports.razor] [C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/_Imports.razor]
build_metadata.AdditionalFiles.TargetPath = X0ltcG9ydHMucmF6b3I= build_metadata.AdditionalFiles.TargetPath = X0ltcG9ydHMucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Layout/MainLayout.razor] [C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Components/Layout/MainLayout.razor]
build_metadata.AdditionalFiles.TargetPath = TGF5b3V0XE1haW5MYXlvdXQucmF6b3I= build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcTWFpbkxheW91dC5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = b-se1kx51m2b build_metadata.AdditionalFiles.CssScope = b-4ckihtz3s1
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Layout/NavMenu.razor] [C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Components/Layout/NavMenu.razor]
build_metadata.AdditionalFiles.TargetPath = TGF5b3V0XE5hdk1lbnUucmF6b3I= build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcTmF2TWVudS5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = b-z0fmt146ub build_metadata.AdditionalFiles.CssScope = b-c1psfyttma

View File

@ -1 +1 @@
6ea2ac6c7f9e979ce26a9538bb98c0bd6b6ecb3771454fa3d410910ae571aaee b0b466ffbae46d8d02c9d283d2f26aafd6ee7de33cb9196e648f9e322f4b5669

View File

@ -827,8 +827,6 @@ C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\webcil\OnProfNext
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\rjimswa.dswa.cache.json C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\rjimswa.dswa.cache.json
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\rjsmrazor.dswa.cache.json C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\rjsmrazor.dswa.cache.json
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\rjsmcshtml.dswa.cache.json C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\rjsmcshtml.dswa.cache.json
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\scopedcss\Layout\MainLayout.razor.rz.scp.css
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\scopedcss\Layout\NavMenu.razor.rz.scp.css
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\scopedcss\bundle\OnProfNext.Client.styles.css C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\scopedcss\bundle\OnProfNext.Client.styles.css
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\scopedcss\projectbundle\OnProfNext.Client.bundle.scp.css C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\scopedcss\projectbundle\OnProfNext.Client.bundle.scp.css
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\blazor.build.boot-extension.json C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\blazor.build.boot-extension.json
@ -880,8 +878,6 @@ C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\kq26va
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\gjrhunsew4-76mbc4pefm.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\gjrhunsew4-76mbc4pefm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\mn3dn5oro4-iag0ou56lh.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\mn3dn5oro4-iag0ou56lh.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\vbwtfewq79-md9yvkcqlf.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\vbwtfewq79-md9yvkcqlf.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\cmx4u86mij-lndxon4b9l.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\b3tztoi1cm-lndxon4b9l.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\qj52mxliu6-z6jo10m0rd.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\qj52mxliu6-z6jo10m0rd.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\19sycpf3d4-65wbz7t8mt.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\19sycpf3d4-65wbz7t8mt.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\f9hzge3k1m-ysqd97eroy.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\f9hzge3k1m-ysqd97eroy.gz
@ -1120,18 +1116,59 @@ C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\yxyyot
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\66hyae12zs-lzotatrep2.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\66hyae12zs-lzotatrep2.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\ebg5gkjd7d-zeqz59uvkx.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\ebg5gkjd7d-zeqz59uvkx.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\7voc7hmlzb-5tt1rwyygx.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\7voc7hmlzb-5tt1rwyygx.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.ngxoafdaut.pdb
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.bjm5usq0dn.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.bjm5usq0dn.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.ngxoafdaut.pdb.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\9988w5h4ds-oz0bvqozi5.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\m58axigd6e-cu8qyyjvx6.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\m58axigd6e-cu8qyyjvx6.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\kzp5jtqdfd-bjm5usq0dn.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\BlazorBootstrap.ym6tnrklwx.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\po7udqtwl2-ngxoafdaut.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\BlazorBootstrap.ym6tnrklwx.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.wxt0a0ecyb.pdb C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\BlazorBootstrap.dll
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.9x22x36las.wasm C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\webcil\BlazorBootstrap.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.wxt0a0ecyb.pdb.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\yxfdm33bor-63oqyoiiv4.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.9x22x36las.wasm.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\refgsao5tb-5vmds449nb.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\cez1jk5yrk-9x22x36las.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\d5o4a4wkq9-ct0ej5e0q0.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\b9lx0cbjbg-wxt0a0ecyb.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\sismm8xg1l-ezlxc6gzv3.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\xzgxwa2yd7-l5ikistiiv.gz C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\q8v6i1uv3e-pisakkcwob.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\36w3eu0hkb-j8zp7bt7w3.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\mfzx4sb2rv-79hai7knhw.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\eojifsclv0-7t9tbfaemk.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\m2wv0pszba-ym6tnrklwx.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\9988w5h4ds-d03dgo8viw.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\Blazored.Typeahead.5g65vcuhxb.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\Microsoft.Extensions.Localization.Abstractions.o4jp2hcm79.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\Microsoft.Extensions.Localization.bvn14pws96.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\MudBlazor.845kbj1w9a.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\Microsoft.Extensions.Localization.Abstractions.o4jp2hcm79.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\Microsoft.Extensions.Localization.bvn14pws96.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\Blazored.Typeahead.5g65vcuhxb.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\MudBlazor.845kbj1w9a.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\Blazored.Typeahead.dll
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\Microsoft.Extensions.Localization.dll
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\Microsoft.Extensions.Localization.Abstractions.dll
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\MudBlazor.dll
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\webcil\Blazored.Typeahead.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\webcil\Microsoft.Extensions.Localization.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\webcil\Microsoft.Extensions.Localization.Abstractions.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\webcil\MudBlazor.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\tzxjg6is5z-jk5eo7zo4m.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\0wz98yz2xy-tjzqk7tnel.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\9a5c0hw7xq-vy4gn6vj78.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\4x50nu10m9-uv12w7whvw.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\rzn0fbfgqs-5g65vcuhxb.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\mn4vfgvxyw-bvn14pws96.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\lmz1wn3azf-o4jp2hcm79.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\stzox4d6il-845kbj1w9a.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\scopedcss\Components\Layout\MainLayout.razor.rz.scp.css
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\scopedcss\Components\Layout\NavMenu.razor.rz.scp.css
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\cmx4u86mij-jq0bgzcoc4.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\b3tztoi1cm-ob0l47m3ye.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.t3qtrvr78n.pdb
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.2mfi0vbe9l.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.2mfi0vbe9l.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.t3qtrvr78n.pdb.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\kzp5jtqdfd-2mfi0vbe9l.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\po7udqtwl2-t3qtrvr78n.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.4rg9bpcr9v.pdb
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.5wq5yy3l8s.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.4rg9bpcr9v.pdb.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.5wq5yy3l8s.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\cez1jk5yrk-5wq5yy3l8s.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\b9lx0cbjbg-4rg9bpcr9v.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\xzgxwa2yd7-wfeicy0di7.gz

View File

@ -1,8 +1,10 @@
{ {
"mainAssemblyName": "OnProfNext.Client", "mainAssemblyName": "OnProfNext.Client",
"resources": { "resources": {
"hash": "sha256-sdgE1RAaUQc5n7OrH7o/T4IQOnorsuIC+/3tQRojPuM=", "hash": "sha256-SaR622VBzkbZ3Cn15m/brI2xuJEupmhtVwEx8wa/rI4=",
"fingerprinting": { "fingerprinting": {
"BlazorBootstrap.ym6tnrklwx.wasm": "BlazorBootstrap.wasm",
"Blazored.Typeahead.5g65vcuhxb.wasm": "Blazored.Typeahead.wasm",
"Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "Microsoft.AspNetCore.Authorization.wasm", "Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "Microsoft.AspNetCore.Authorization.wasm",
"Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "Microsoft.AspNetCore.Components.wasm", "Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "Microsoft.AspNetCore.Components.wasm",
"Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "Microsoft.AspNetCore.Components.Forms.wasm", "Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "Microsoft.AspNetCore.Components.Forms.wasm",
@ -22,6 +24,8 @@
"Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "Microsoft.Extensions.FileProviders.Physical.wasm", "Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "Microsoft.Extensions.FileProviders.Physical.wasm",
"Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "Microsoft.Extensions.FileSystemGlobbing.wasm", "Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "Microsoft.Extensions.FileSystemGlobbing.wasm",
"Microsoft.Extensions.Http.34jr7x6h7z.wasm": "Microsoft.Extensions.Http.wasm", "Microsoft.Extensions.Http.34jr7x6h7z.wasm": "Microsoft.Extensions.Http.wasm",
"Microsoft.Extensions.Localization.bvn14pws96.wasm": "Microsoft.Extensions.Localization.wasm",
"Microsoft.Extensions.Localization.Abstractions.o4jp2hcm79.wasm": "Microsoft.Extensions.Localization.Abstractions.wasm",
"Microsoft.Extensions.Logging.2h3t8m6coa.wasm": "Microsoft.Extensions.Logging.wasm", "Microsoft.Extensions.Logging.2h3t8m6coa.wasm": "Microsoft.Extensions.Logging.wasm",
"Microsoft.Extensions.Logging.Abstractions.ni4towxuts.wasm": "Microsoft.Extensions.Logging.Abstractions.wasm", "Microsoft.Extensions.Logging.Abstractions.ni4towxuts.wasm": "Microsoft.Extensions.Logging.Abstractions.wasm",
"Microsoft.Extensions.Options.2nlpwp09nn.wasm": "Microsoft.Extensions.Options.wasm", "Microsoft.Extensions.Options.2nlpwp09nn.wasm": "Microsoft.Extensions.Options.wasm",
@ -33,6 +37,7 @@
"Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "Microsoft.IdentityModel.Tokens.wasm", "Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "Microsoft.IdentityModel.Tokens.wasm",
"Microsoft.JSInterop.9ydsnriizw.wasm": "Microsoft.JSInterop.wasm", "Microsoft.JSInterop.9ydsnriizw.wasm": "Microsoft.JSInterop.wasm",
"Microsoft.JSInterop.WebAssembly.v6rnols3v9.wasm": "Microsoft.JSInterop.WebAssembly.wasm", "Microsoft.JSInterop.WebAssembly.v6rnols3v9.wasm": "Microsoft.JSInterop.WebAssembly.wasm",
"MudBlazor.845kbj1w9a.wasm": "MudBlazor.wasm",
"System.IdentityModel.Tokens.Jwt.5tt1rwyygx.wasm": "System.IdentityModel.Tokens.Jwt.wasm", "System.IdentityModel.Tokens.Jwt.5tt1rwyygx.wasm": "System.IdentityModel.Tokens.Jwt.wasm",
"Microsoft.CSharp.j3zkownjjr.wasm": "Microsoft.CSharp.wasm", "Microsoft.CSharp.j3zkownjjr.wasm": "Microsoft.CSharp.wasm",
"Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "Microsoft.VisualBasic.Core.wasm", "Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "Microsoft.VisualBasic.Core.wasm",
@ -210,10 +215,10 @@
"icudt_CJK.tjcz0u77k5.dat": "icudt_CJK.dat", "icudt_CJK.tjcz0u77k5.dat": "icudt_CJK.dat",
"icudt_EFIGS.tptq2av103.dat": "icudt_EFIGS.dat", "icudt_EFIGS.tptq2av103.dat": "icudt_EFIGS.dat",
"icudt_no_CJK.lfu7j35m59.dat": "icudt_no_CJK.dat", "icudt_no_CJK.lfu7j35m59.dat": "icudt_no_CJK.dat",
"OnProfNext.Shared.bjm5usq0dn.wasm": "OnProfNext.Shared.wasm", "OnProfNext.Shared.2mfi0vbe9l.wasm": "OnProfNext.Shared.wasm",
"OnProfNext.Shared.ngxoafdaut.pdb": "OnProfNext.Shared.pdb", "OnProfNext.Shared.t3qtrvr78n.pdb": "OnProfNext.Shared.pdb",
"OnProfNext.Client.9x22x36las.wasm": "OnProfNext.Client.wasm", "OnProfNext.Client.5wq5yy3l8s.wasm": "OnProfNext.Client.wasm",
"OnProfNext.Client.wxt0a0ecyb.pdb": "OnProfNext.Client.pdb" "OnProfNext.Client.4rg9bpcr9v.pdb": "OnProfNext.Client.pdb"
}, },
"jsModuleNative": { "jsModuleNative": {
"dotnet.native.9ih887ebfz.js": "sha256-oS7IRiQoVt9ThQ7Y2UM3XoeY0JqPD02cg9IvRdufn2w=" "dotnet.native.9ih887ebfz.js": "sha256-oS7IRiQoVt9ThQ7Y2UM3XoeY0JqPD02cg9IvRdufn2w="
@ -234,6 +239,8 @@
"System.Private.CoreLib.uqnhzdwypx.wasm": "sha256-dmlLyil2xqdBc+0yMfmACcDeIGVefS4QHjRT/9mLdNs=" "System.Private.CoreLib.uqnhzdwypx.wasm": "sha256-dmlLyil2xqdBc+0yMfmACcDeIGVefS4QHjRT/9mLdNs="
}, },
"assembly": { "assembly": {
"BlazorBootstrap.ym6tnrklwx.wasm": "sha256-JvZh7RjGQpT7CC6gfoLZbKPPkhcor/rhKKpkCt/2lfU=",
"Blazored.Typeahead.5g65vcuhxb.wasm": "sha256-GwHvrw5VqXbXdYF+BX0dOWgR9mMoIh0SLjRrafirlyY=",
"Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "sha256-K3j153B4Qx57/sHT4gOICXyadidNa4qEUflLPz/OgCU=", "Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "sha256-K3j153B4Qx57/sHT4gOICXyadidNa4qEUflLPz/OgCU=",
"Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "sha256-esbkeXi/0iIJjs+MdmPU6nulNqIzqOw5a4hLgs2f6+U=", "Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "sha256-esbkeXi/0iIJjs+MdmPU6nulNqIzqOw5a4hLgs2f6+U=",
"Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "sha256-8o1e7d2phwhchCrOcBV5r/UklI0sSixpCl8wQkEHNfE=", "Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "sha256-8o1e7d2phwhchCrOcBV5r/UklI0sSixpCl8wQkEHNfE=",
@ -253,6 +260,8 @@
"Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "sha256-j06UStE6FBwEz3CJbgLfbKKSePh0FaT4PK7wtDoUXs0=", "Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "sha256-j06UStE6FBwEz3CJbgLfbKKSePh0FaT4PK7wtDoUXs0=",
"Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "sha256-BC/MCU6S9BBMqOrRwZh0plnIpsYyZKyENCmb6p3Acsk=", "Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "sha256-BC/MCU6S9BBMqOrRwZh0plnIpsYyZKyENCmb6p3Acsk=",
"Microsoft.Extensions.Http.34jr7x6h7z.wasm": "sha256-fTu6J/dJP8yyhw48HS3g8ZOvSNcIA7ConcInauGbohA=", "Microsoft.Extensions.Http.34jr7x6h7z.wasm": "sha256-fTu6J/dJP8yyhw48HS3g8ZOvSNcIA7ConcInauGbohA=",
"Microsoft.Extensions.Localization.bvn14pws96.wasm": "sha256-6UgMJoVZBfDdfzYR0aKVK6BWArxpXC1qiQDDjiXw/L4=",
"Microsoft.Extensions.Localization.Abstractions.o4jp2hcm79.wasm": "sha256-GJNjpp2mlMIYboBhzukWw5r2Z24PsB0E9Gj9VoTGKEI=",
"Microsoft.Extensions.Logging.2h3t8m6coa.wasm": "sha256-1jYRjcDI2/MnB5Htgj4yUaHr8gA/poI4oLgWUMZYnV0=", "Microsoft.Extensions.Logging.2h3t8m6coa.wasm": "sha256-1jYRjcDI2/MnB5Htgj4yUaHr8gA/poI4oLgWUMZYnV0=",
"Microsoft.Extensions.Logging.Abstractions.ni4towxuts.wasm": "sha256-H+TpHvK/z4RGb8EfLe1cGb1TwnCKZAmNxt8e3s3CUSM=", "Microsoft.Extensions.Logging.Abstractions.ni4towxuts.wasm": "sha256-H+TpHvK/z4RGb8EfLe1cGb1TwnCKZAmNxt8e3s3CUSM=",
"Microsoft.Extensions.Options.2nlpwp09nn.wasm": "sha256-zp3zuBmKVlE6HjY0Br1uj3fY9sU7ET4ITzgpnpmj9V0=", "Microsoft.Extensions.Options.2nlpwp09nn.wasm": "sha256-zp3zuBmKVlE6HjY0Br1uj3fY9sU7ET4ITzgpnpmj9V0=",
@ -264,6 +273,7 @@
"Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "sha256-hQbBReIl6OvRCOLal9JHAiyQa9Zejqvl/Q03oc0DvyE=", "Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "sha256-hQbBReIl6OvRCOLal9JHAiyQa9Zejqvl/Q03oc0DvyE=",
"Microsoft.JSInterop.9ydsnriizw.wasm": "sha256-oZgTa/to3sE2tSzwcZQ0GIX1meeIGAYVE7IoJDL4RkI=", "Microsoft.JSInterop.9ydsnriizw.wasm": "sha256-oZgTa/to3sE2tSzwcZQ0GIX1meeIGAYVE7IoJDL4RkI=",
"Microsoft.JSInterop.WebAssembly.v6rnols3v9.wasm": "sha256-Z/XKvzIKcHVmnvT7y1f4/N5zSNqzNAfjsLaBDIyCkYs=", "Microsoft.JSInterop.WebAssembly.v6rnols3v9.wasm": "sha256-Z/XKvzIKcHVmnvT7y1f4/N5zSNqzNAfjsLaBDIyCkYs=",
"MudBlazor.845kbj1w9a.wasm": "sha256-6H3anvXkkN9V1Gxb+Ul/S1lH5SsXdXFbL0IXDHFkVlY=",
"System.IdentityModel.Tokens.Jwt.5tt1rwyygx.wasm": "sha256-15e9xXAMloW+NXhmC4dPppM4zlorit69Q+n8h3ToBSI=", "System.IdentityModel.Tokens.Jwt.5tt1rwyygx.wasm": "sha256-15e9xXAMloW+NXhmC4dPppM4zlorit69Q+n8h3ToBSI=",
"Microsoft.CSharp.j3zkownjjr.wasm": "sha256-r7YS8Hp01zUR3LoH5JsS7IrucOta+FnV199bCLii7Pk=", "Microsoft.CSharp.j3zkownjjr.wasm": "sha256-r7YS8Hp01zUR3LoH5JsS7IrucOta+FnV199bCLii7Pk=",
"Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "sha256-/jlp74GLHWhrCfjAmWlVClO68H3wIk+kVx9A/gjByls=", "Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "sha256-/jlp74GLHWhrCfjAmWlVClO68H3wIk+kVx9A/gjByls=",
@ -432,12 +442,12 @@
"WindowsBase.vy2l5u79y6.wasm": "sha256-ufB9Mo5joMyUs3DzXWWBFFIZNEVrt6h9N5stYB6Oln4=", "WindowsBase.vy2l5u79y6.wasm": "sha256-ufB9Mo5joMyUs3DzXWWBFFIZNEVrt6h9N5stYB6Oln4=",
"mscorlib.xd6mv31d55.wasm": "sha256-1YSLR2eZt3ceALFV//vZUF2AloxVil3VlrW1zZYPSEI=", "mscorlib.xd6mv31d55.wasm": "sha256-1YSLR2eZt3ceALFV//vZUF2AloxVil3VlrW1zZYPSEI=",
"netstandard.kaml52uspo.wasm": "sha256-HLEwBpLfzKw2/zGSVzHzFJxznCkt/WIjahrziiMrOpA=", "netstandard.kaml52uspo.wasm": "sha256-HLEwBpLfzKw2/zGSVzHzFJxznCkt/WIjahrziiMrOpA=",
"OnProfNext.Shared.bjm5usq0dn.wasm": "sha256-qZCgoqiTQV2LhVgD6wblo5h+IaRY56ZvOfi7JExbXSU=", "OnProfNext.Shared.2mfi0vbe9l.wasm": "sha256-dtTuHimLAmvGF8qILy/wJ/+ayEzY7dCE84UPpHBOASA=",
"OnProfNext.Client.9x22x36las.wasm": "sha256-TcgeL1nbqCETQa0KBBDGBKQeu90A6mTJ1Ggz1YA/kTI=" "OnProfNext.Client.5wq5yy3l8s.wasm": "sha256-m066gnQLM/+y1wYYFW4kr2hCQmPEE259N81Fky7+CwU="
}, },
"pdb": { "pdb": {
"OnProfNext.Shared.ngxoafdaut.pdb": "sha256-mQq6ePqyQ0WFocesus6NyVnqfp9+qtbtuxGK4FI3N1I=", "OnProfNext.Shared.t3qtrvr78n.pdb": "sha256-aXAxhpJUbAJFfkq3FS2JtRPFp2plRnylMovNt92Xwwo=",
"OnProfNext.Client.wxt0a0ecyb.pdb": "sha256-bD7zFXZKUWLcO9WTXcKpdRRf+limKaZyhizkASw9lkA=" "OnProfNext.Client.4rg9bpcr9v.pdb": "sha256-ECxFZzQ6HqVe1zWc13ioyvpjeuXnoVabpsyS62HMv+I="
} }
}, },
"cacheBootResources": true, "cacheBootResources": true,

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"GlobalPropertiesHash":"mM8eeq7khgiV1Ho7QUmOpk+VtYcA7aET/3LQ1YVdmDk=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"R7Rea/YQmcweqCbKffD9oUelggfpJQX85r65aYZsas0=","InputHashes":["C0eOV9gOfsDqwL4SXmPo6JNLJCydTRLhkcoGopWE9zQ=","vH/H9umpzRku3bgc\u002BiW4S4uDtfRsbDxcDhLs2PsS30Q=","7WZ82wMbbKcJw5Bzbb6647eKVFT/bZswI1Tk5t/ft5c=","maHYT74sI3flam514\u002Bu23bXPvW7O8IrFTwBA99vnNg4=","1e6daLPfiNZ0xKyqXPZvlwnXNr5eNjSY9c8Z3RnpvOs=","DZJCRz9YgqDdyZ\u002B/alouUKBy2KmMsXUiWCxebbKZcLY=","vWEBwblz5Jyt6V3p5EhyGwNxk3wMO63rfUkzfFOe3Co=","C9OcPNxT/zZbgwoL1WFZpq/GpBvLVPp8hPakIqiapo4=","Kx8ACKSK3MtMAbYi7KCFurKiYppxi7vo\u002BEhh02NZdzQ=","yxPUUzlxTy4BFltCWE3KIA\u002BWyQYUg/IIzcE3ijpMcYA=","ImICJyEJwrMtMlwpdR3TUm1zynu8xRKgqQt/SKRWgb0=","TjgCDOh\u002B6hXrsF/SShk3ow5T50/kMKkKCND23t3bb\u002BE=","e9PcF/sfWnqLkh3xeQ7K0Y4jCrIxSFd3uA1X1PFIM5I=","Btp7jyWETg/2eqdAkcMf9vwDjYzaNjWz3CqRvFY2M/Y=","ceaaFJWn2DLR\u002BtltiUns0zSUqZdF95jtCiE8BsA8jCk=","HcuvE7OIR66cL63FjKUiVO27/7jyrWAkalbBFAty5\u002BY=","DLbhHN0wNZ5TZTU/daLOgA6HIQdIppdZ\u002B3ix\u002Bs0q00A=","h/xl0jd8/ccKraqSbuHrqHDKWlgX6yEhialHDeLi9Iw=","IWYbnI783m87kixei3nIgUzSgOSdvDKjZB7TBy1gZnw=","s580H7QKmm/8JfqJ1qQutyar6VmBZ2AS0yK3JBkUhEU=","cjzijXWkKx5xmzo7UM2\u002B\u002BlKHuiTCUBC6DbZKzZzvXRc=","y/HHWIq4FmFCjw1i5XGnkQFK9XF2josRhuQY2UApulw=","JsDoy0qI9Uyk0tJTn0NDNkmt4UmamBvAatx4XlfUC7o=","CvbWU7Giprnv46eIMwfS2bczbDe733bXEYIdjr9jRnc=","Q2XlrbHGFatJOngyPfc6Zcrv1B67MTXKJ\u002BIDqO25R00=","c814YcgxmsuSE3XnK1Nq1Hpb/DSHdHv707R8\u002BsMQUbw=","Tx7xdcxtqfZTa7P9vSMOGgAjrEUDs6YGz/BCDc9zoGs=","qhVXZuy2nCiZw2Uis/Ugu\u002BiclH4afrFxFZCNa2yxE74=","OSAu0TIFhkdeb0xVLS6et8a4aUHkzeUWk3v3s\u002BUn/Y8=","gQojZbGh9zdA6sHRPQKxtDLqvqsJtMNWSvtPxM60tlk=","ue76wb7ZOtUAF2M1UT3LzQtfATbywtmhro/\u002BDVQFo2E=","ujshobx1Okba2\u002BKCptByJRdUhAjHCnL7OEilWHSxvSE=","IMLMtCoq94G/iom6Kc9QnMjl26QBzo9A\u002BUpe\u002Bir5hSk=","cKIyhiSlhxBTpm0tfQp0N73HmTJ0PSk6OasdMHHU6hg=","5/pQTkPDIDKVOIdLIr8K2pqUMYjedXEDzrx/8i2FyMc=","ie4elz0/Yt0Jor8ZOASn7uqtUMQVIIi7iyxpmc\u002BP/3A=","/eDlK\u002BJ5ECzHYnnwNfs1ll7OzscxHc/T9AXptg3xTII=","iZtB7IwVOScbKME8XNDUHe8/LADtOuBuD5iUzZ\u002BTBHA=","VI7hpNtzA0lQFbtSBh2M5HmTFjxD4uLPevcNJtBDECY=","vpPBvnXuysK0e8FBbSO7k6I35HOVZLmZfMhVxlKPzck=","hdgfzdMO3XxPwCGNKDabyl/9YRagIr9KXozaMve1DE4=","4UP6pofGTsyh1E5XO2QVGfORoUAttdjUWvf1A4Mgngw=","AuV7BOj9roSnoQn4CCZRgJiQ9aP\u002Buuc3FxUaAtL4FUk=","3KIGpeODnLLCBrAStJV1hHEo7FwY/hgl7zW1wNeg/Wc=","a2NEK0jnyneLb7plUPbXxhY8oQ9LD9Lc35UnzZUXwJI=","2DvTDD9FORsb164IPm6/PKUGfxUsYAOheM6lMXeQcuQ=","B2ua8h4cGI1Vv8qhyD7sFVXpbxEgmYZbecw9dY4/rFA=","sp9HgH8YqRbHdraJhNz5JJIDCLSscO457uul374ES4I=","wMHpeMWv1hOAkS9kqsiqEALVMDdWAsC3p85glRB/FqI=","/KUhUbxyo/3Nrk2MhF57PAEu8wbud9Cg8Bp1MbxsxoA="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"mM8eeq7khgiV1Ho7QUmOpk+VtYcA7aET/3LQ1YVdmDk=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"R7Rea/YQmcweqCbKffD9oUelggfpJQX85r65aYZsas0=","InputHashes":["C0eOV9gOfsDqwL4SXmPo6JNLJCydTRLhkcoGopWE9zQ=","vH/H9umpzRku3bgc\u002BiW4S4uDtfRsbDxcDhLs2PsS30Q=","7WZ82wMbbKcJw5Bzbb6647eKVFT/bZswI1Tk5t/ft5c=","ic5b/oaCLRQ\u002BvimSCWMq87l01yIcHTPJx4IuEZbLqrQ=","1e6daLPfiNZ0xKyqXPZvlwnXNr5eNjSY9c8Z3RnpvOs=","DZJCRz9YgqDdyZ\u002B/alouUKBy2KmMsXUiWCxebbKZcLY=","vWEBwblz5Jyt6V3p5EhyGwNxk3wMO63rfUkzfFOe3Co=","C9OcPNxT/zZbgwoL1WFZpq/GpBvLVPp8hPakIqiapo4=","Kx8ACKSK3MtMAbYi7KCFurKiYppxi7vo\u002BEhh02NZdzQ=","yxPUUzlxTy4BFltCWE3KIA\u002BWyQYUg/IIzcE3ijpMcYA=","ImICJyEJwrMtMlwpdR3TUm1zynu8xRKgqQt/SKRWgb0=","TjgCDOh\u002B6hXrsF/SShk3ow5T50/kMKkKCND23t3bb\u002BE=","e9PcF/sfWnqLkh3xeQ7K0Y4jCrIxSFd3uA1X1PFIM5I=","Btp7jyWETg/2eqdAkcMf9vwDjYzaNjWz3CqRvFY2M/Y=","ceaaFJWn2DLR\u002BtltiUns0zSUqZdF95jtCiE8BsA8jCk=","HcuvE7OIR66cL63FjKUiVO27/7jyrWAkalbBFAty5\u002BY=","DLbhHN0wNZ5TZTU/daLOgA6HIQdIppdZ\u002B3ix\u002Bs0q00A=","h/xl0jd8/ccKraqSbuHrqHDKWlgX6yEhialHDeLi9Iw=","IWYbnI783m87kixei3nIgUzSgOSdvDKjZB7TBy1gZnw=","s580H7QKmm/8JfqJ1qQutyar6VmBZ2AS0yK3JBkUhEU=","cjzijXWkKx5xmzo7UM2\u002B\u002BlKHuiTCUBC6DbZKzZzvXRc=","y/HHWIq4FmFCjw1i5XGnkQFK9XF2josRhuQY2UApulw=","JsDoy0qI9Uyk0tJTn0NDNkmt4UmamBvAatx4XlfUC7o=","CvbWU7Giprnv46eIMwfS2bczbDe733bXEYIdjr9jRnc=","Q2XlrbHGFatJOngyPfc6Zcrv1B67MTXKJ\u002BIDqO25R00=","c814YcgxmsuSE3XnK1Nq1Hpb/DSHdHv707R8\u002BsMQUbw=","Tx7xdcxtqfZTa7P9vSMOGgAjrEUDs6YGz/BCDc9zoGs=","qhVXZuy2nCiZw2Uis/Ugu\u002BiclH4afrFxFZCNa2yxE74=","OSAu0TIFhkdeb0xVLS6et8a4aUHkzeUWk3v3s\u002BUn/Y8=","gQojZbGh9zdA6sHRPQKxtDLqvqsJtMNWSvtPxM60tlk=","ue76wb7ZOtUAF2M1UT3LzQtfATbywtmhro/\u002BDVQFo2E=","ujshobx1Okba2\u002BKCptByJRdUhAjHCnL7OEilWHSxvSE=","IMLMtCoq94G/iom6Kc9QnMjl26QBzo9A\u002BUpe\u002Bir5hSk=","cKIyhiSlhxBTpm0tfQp0N73HmTJ0PSk6OasdMHHU6hg=","5/pQTkPDIDKVOIdLIr8K2pqUMYjedXEDzrx/8i2FyMc=","ie4elz0/Yt0Jor8ZOASn7uqtUMQVIIi7iyxpmc\u002BP/3A=","/eDlK\u002BJ5ECzHYnnwNfs1ll7OzscxHc/T9AXptg3xTII=","iZtB7IwVOScbKME8XNDUHe8/LADtOuBuD5iUzZ\u002BTBHA=","VI7hpNtzA0lQFbtSBh2M5HmTFjxD4uLPevcNJtBDECY=","vpPBvnXuysK0e8FBbSO7k6I35HOVZLmZfMhVxlKPzck=","hdgfzdMO3XxPwCGNKDabyl/9YRagIr9KXozaMve1DE4=","4UP6pofGTsyh1E5XO2QVGfORoUAttdjUWvf1A4Mgngw=","AuV7BOj9roSnoQn4CCZRgJiQ9aP\u002Buuc3FxUaAtL4FUk=","3KIGpeODnLLCBrAStJV1hHEo7FwY/hgl7zW1wNeg/Wc=","a2NEK0jnyneLb7plUPbXxhY8oQ9LD9Lc35UnzZUXwJI=","B2ua8h4cGI1Vv8qhyD7sFVXpbxEgmYZbecw9dY4/rFA=","sp9HgH8YqRbHdraJhNz5JJIDCLSscO457uul374ES4I=","wMHpeMWv1hOAkS9kqsiqEALVMDdWAsC3p85glRB/FqI=","/KUhUbxyo/3Nrk2MhF57PAEu8wbud9Cg8Bp1MbxsxoA=","2DvTDD9FORsb164IPm6/PKUGfxUsYAOheM6lMXeQcuQ="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@ -1 +1 @@
{"GlobalPropertiesHash":"HQrK/c2YdUjsysKaYGSoybSEyDguxRws1HNGGkzNr68=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["wMWPZGfJtGeKkPw89r\u002BuOnYPKqx9sEcbqVKHPoYpTbg=","puDy0dzI5QvIsFKrWO6hrkZZcZnbTNSWaBqIyd5vS9E=","bNNyXhlBr3jQbNMkCOe8xcZdSkB7XoUpSNnehjUQlxA=","TmueuvMCgXMa1JvT5oA8ZJzQ4rx183XDhKg1JiRN\u002BjQ=","TDAOXjznXPMZY6da8pxBF7r\u002BgikX9nuv6RoxA3r\u002BE1M=","HwFAFTSvCp26cdo1kx5ecfdA/\u002BXAkxgIq5fu6m8nIA0=","SHr5eqYzJxZNE5/PlzkQfEBMjakT5PcfDexn2iCZjyI=","rovhGZeu5lwGm9t06s1govZ9ZDUAyhGquT/zYxV9EMA=","n90/VXHLh5f/b\u002BenXJx5LvC2wVhxMsmGXsKTtLP1rGE=","M2F\u002BdirWJXRBR8xTEBUsBQq5ZBlMsGLrQuDu2Xoflo8=","QQfqB2d2lyRaoRCXHlFI1qDyAV8sb3YBC6sabNep4T8=","sCLTILGPMYZmM4Cq6VeXFDRKEU4zUeqi0zh34Zyl1\u002Bg=","KPtl\u002BIcYzJanv3TdGEjfu/58zjjSte7onQyK1z2UpSs=","UOD2algC0YxakRPAo\u002BdHBxw2nz\u002Bf3inCW8K/2sYv4hk=","2a4AqN7uSgiGGPijKrbGYp3zTiFaYviYMC4je9251Gg=","S1JDFpdG6oeT7HQg1q6p3OLFEq6MSuMk9DrbZZf85U0=","FcAp\u002BB\u002BMdtU4Jqt1qd8ZU0XGQCyIO1UaSwwwKyFcuRI=","KicT\u002BJLs/7POfopY2e6knubWrx25hvaxJ1zNKezbz9Y=","xL7/ma/CChAYqsGMi59uK6yIstcESmcirrh1RzpvMEw=","dnRdnpQc61NJ56ASQrUFLZkDTGNM0KNu\u002BtR3NDDE34A=","Grv4g6vNrL73s12N910v2w8Bfa5b3fgn3knYM4SPbTo=","biFvXP\u002Bh3VCB//g0WfQTKnZXpYAq5NNK8FOtNrSlluc=","JbXwwQIUN/GSNZKsNiMjv4ebWU2SviyhnVdlqdpCpmg=","nz\u002BZycBj/r0qxn/lLFHWJ8J6wFGlMsV/1mlRmZUo/4I=","aQycidQhGUbn4VCw/EJfF5iFRrN1xIgwHoIJjbOVZps=","qgUM6A/uKHiUkWc1/Ln9WXX1SAX8JoRvV74Ma6ZFmng=","iKkyE9MQsJaeQ\u002BwNmzP/yqlnE0DgDcGv\u002BmjdLoDxrRo=","uTVPNnHOvOCd/yTop9dVCWOMKn4tFTh\u002B\u002BvDB36ISZPs=","mfZpFq\u002BvCmodLP7zO9b0YsEWC/OcDyBoxhYqFD56fFk=","YWOs7JAKIsqIOVQG0w8okz7vUzx0CLjYsgFSeEvd8dY=","mhyeOUDBL5xq9Rlm12fZKRW\u002BewVdAloH3HpGO\u002B7GqeM=","dwYRUoBX6sjNOpgOukCSK6FYozMx5nQPuanV9jF0pug=","ozbr8RdoOPcWGZFTphPnXiPHqUXsUX48rNHT9DPxQQQ=","zNy/\u002Beenwd4rP3KmszLj/P9L4RfeJcIG51tiUMGKZUI=","JqnKg76tBTEDi4ygNmSbT8906THHzJuCJTZbK0K6Oe8=","JcACn0ymzW4JpJ5CgWCxT1NdaSHZxnxp\u002BAiJJM/kC6k=","k71DltJbtRqVXA3rGahMZgUq0B9sodbz2R43hsUcD1I=","aouiJcQV84ezpO9Cwpg\u002BId9XaiZVlGhgxGvxD6PaAGM=","b/Jk0Mr/B4BWzcJa6nZHbXC\u002BzU0I1a30M2AcH5fdjKY=","aK2OxKAVYxUxIEDqZnknDAW9qelpdYKLvlGPA3\u002B5OIE=","E4QT\u002B435PZZ\u002BRTzgvECRD1bOtElnkqeWREaoDzYrMdc=","FBxckgU98gb7vgTEM5V4Q\u002BEWV1Ztcp3Bssbx92n1keA=","gv3iSaKsj0CmcWFWMhUhYcA7l4\u002BnVTp1Jj85xAmbA8E=","mRQfJZfYrp6FVuPsI1970i6\u002Bg1zC7cMX1qaaf5X\u002BoCQ=","5BtfX2AAiOmDTGL34icHscY4eUpH3nbfHN/rb4e62rY=","6rueZEktdPrxLkoO8WfJXCckClsIUsg6sBnN1LTessM=","SZJz\u002B71xnWFevxgzVgPPCqih4KkGwhQhHvoh6BgiWFc=","u2aOXUOrTOrwIgVam12G9HzaU7QEbOQG66Q7IDjlMYY=","8DlE0XjBA/lhOGHaXiPZ5cQswwpo6NEUaebI9my2F4s=","1ldijbG/u6m3Wwq0OUgI3unhWdjWhqvOD\u002BI1PauI9GI=","WtqR0aLtM7t6m3NDyJiTfyz81jhBwyuQkg/iDou5f/k=","GFbH56zPW8w/vQJiqpjblF8DH1wqIBfhQhRc7Hosw10=","htYyraM18aOUKQ1Tqg2LWYBgfZen3TdcXku9aKv7q0M=","9hC0wthPXB9k40lIbDKdWYtaw2axqBb91\u002BojeVYtTEY=","TqYSD0yZOIvmoqS7yqGoF3gOa8r34ClAk7\u002BtPdl9Xw0=","7NztDGxnb1Cz0opIKXfkgSzz2h0LyUFOT7wQNrMageQ=","kEPWaTEgcSvuVRYmq9OKVA\u002BlpOmTKkV3fpY5ByqOqFk=","4Z6NbZCHvoNJmFB0UDo9VAbGMti5FbYlOZgrz6CDFPY=","Ncs4XlqbjiOXHFOWs\u002BlDFNyDIeXvLTQrBH/4oQGZuIc=","P1JuwJ4/BytYPLxV\u002BhrJ5\u002BvbS8NeGlaBLiincn/y6m0=","2At\u002BRo2tqG3Zuc8oFrmuJ2h4FtOISqCbue1\u002B\u002B1jDpYw=","A5FwpPfGidgr2NgPt1ofZxg2nxXAcuozNEFd9BE7nsk="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"HQrK/c2YdUjsysKaYGSoybSEyDguxRws1HNGGkzNr68=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["wMWPZGfJtGeKkPw89r\u002BuOnYPKqx9sEcbqVKHPoYpTbg=","puDy0dzI5QvIsFKrWO6hrkZZcZnbTNSWaBqIyd5vS9E=","bNNyXhlBr3jQbNMkCOe8xcZdSkB7XoUpSNnehjUQlxA=","3Q171G9uNkjZ3lAgJDZDLi2eJw/8ixjkaHrw3rOC/vo=","TDAOXjznXPMZY6da8pxBF7r\u002BgikX9nuv6RoxA3r\u002BE1M=","HwFAFTSvCp26cdo1kx5ecfdA/\u002BXAkxgIq5fu6m8nIA0=","SHr5eqYzJxZNE5/PlzkQfEBMjakT5PcfDexn2iCZjyI=","rovhGZeu5lwGm9t06s1govZ9ZDUAyhGquT/zYxV9EMA=","n90/VXHLh5f/b\u002BenXJx5LvC2wVhxMsmGXsKTtLP1rGE=","M2F\u002BdirWJXRBR8xTEBUsBQq5ZBlMsGLrQuDu2Xoflo8=","QQfqB2d2lyRaoRCXHlFI1qDyAV8sb3YBC6sabNep4T8=","sCLTILGPMYZmM4Cq6VeXFDRKEU4zUeqi0zh34Zyl1\u002Bg=","KPtl\u002BIcYzJanv3TdGEjfu/58zjjSte7onQyK1z2UpSs=","UOD2algC0YxakRPAo\u002BdHBxw2nz\u002Bf3inCW8K/2sYv4hk=","2a4AqN7uSgiGGPijKrbGYp3zTiFaYviYMC4je9251Gg=","S1JDFpdG6oeT7HQg1q6p3OLFEq6MSuMk9DrbZZf85U0=","FcAp\u002BB\u002BMdtU4Jqt1qd8ZU0XGQCyIO1UaSwwwKyFcuRI=","KicT\u002BJLs/7POfopY2e6knubWrx25hvaxJ1zNKezbz9Y=","xL7/ma/CChAYqsGMi59uK6yIstcESmcirrh1RzpvMEw=","dnRdnpQc61NJ56ASQrUFLZkDTGNM0KNu\u002BtR3NDDE34A=","Grv4g6vNrL73s12N910v2w8Bfa5b3fgn3knYM4SPbTo=","biFvXP\u002Bh3VCB//g0WfQTKnZXpYAq5NNK8FOtNrSlluc=","JbXwwQIUN/GSNZKsNiMjv4ebWU2SviyhnVdlqdpCpmg=","nz\u002BZycBj/r0qxn/lLFHWJ8J6wFGlMsV/1mlRmZUo/4I=","aQycidQhGUbn4VCw/EJfF5iFRrN1xIgwHoIJjbOVZps=","qgUM6A/uKHiUkWc1/Ln9WXX1SAX8JoRvV74Ma6ZFmng=","iKkyE9MQsJaeQ\u002BwNmzP/yqlnE0DgDcGv\u002BmjdLoDxrRo=","uTVPNnHOvOCd/yTop9dVCWOMKn4tFTh\u002B\u002BvDB36ISZPs=","mfZpFq\u002BvCmodLP7zO9b0YsEWC/OcDyBoxhYqFD56fFk=","YWOs7JAKIsqIOVQG0w8okz7vUzx0CLjYsgFSeEvd8dY=","mhyeOUDBL5xq9Rlm12fZKRW\u002BewVdAloH3HpGO\u002B7GqeM=","dwYRUoBX6sjNOpgOukCSK6FYozMx5nQPuanV9jF0pug=","ozbr8RdoOPcWGZFTphPnXiPHqUXsUX48rNHT9DPxQQQ=","zNy/\u002Beenwd4rP3KmszLj/P9L4RfeJcIG51tiUMGKZUI=","JqnKg76tBTEDi4ygNmSbT8906THHzJuCJTZbK0K6Oe8=","JcACn0ymzW4JpJ5CgWCxT1NdaSHZxnxp\u002BAiJJM/kC6k=","k71DltJbtRqVXA3rGahMZgUq0B9sodbz2R43hsUcD1I=","aouiJcQV84ezpO9Cwpg\u002BId9XaiZVlGhgxGvxD6PaAGM=","b/Jk0Mr/B4BWzcJa6nZHbXC\u002BzU0I1a30M2AcH5fdjKY=","aK2OxKAVYxUxIEDqZnknDAW9qelpdYKLvlGPA3\u002B5OIE=","E4QT\u002B435PZZ\u002BRTzgvECRD1bOtElnkqeWREaoDzYrMdc=","FBxckgU98gb7vgTEM5V4Q\u002BEWV1Ztcp3Bssbx92n1keA=","gv3iSaKsj0CmcWFWMhUhYcA7l4\u002BnVTp1Jj85xAmbA8E=","mRQfJZfYrp6FVuPsI1970i6\u002Bg1zC7cMX1qaaf5X\u002BoCQ=","5BtfX2AAiOmDTGL34icHscY4eUpH3nbfHN/rb4e62rY=","6rueZEktdPrxLkoO8WfJXCckClsIUsg6sBnN1LTessM=","SZJz\u002B71xnWFevxgzVgPPCqih4KkGwhQhHvoh6BgiWFc=","u2aOXUOrTOrwIgVam12G9HzaU7QEbOQG66Q7IDjlMYY=","8DlE0XjBA/lhOGHaXiPZ5cQswwpo6NEUaebI9my2F4s=","1ldijbG/u6m3Wwq0OUgI3unhWdjWhqvOD\u002BI1PauI9GI=","WtqR0aLtM7t6m3NDyJiTfyz81jhBwyuQkg/iDou5f/k=","aNqGJzJ5xa0dNxSytzanVzqK6xNl85ZkIZfdb\u002BKhxHY=","TpcHV4OB3FaN8hILgTJGBWj6cGx2APNuu6cH90cA2Yw=","jUDUzGIKHCleWWpzHVl3AT4E4/\u002BiG6ks0UJVoC3TXgo=","XfkTfnoOOODr5Ke\u002BIvlGksb7y1tdjO9D3cio6nfgb6o=","sbScjs7uLbfBbWbJKERtvGeL8se13w0V5s0ufS/zDaQ=","9hC0wthPXB9k40lIbDKdWYtaw2axqBb91\u002BojeVYtTEY=","xLFIqNnTxWnQP99MmbgJqozQM9NzpZ0mMYZdGkZnBU4=","qOlED1ak4sYSTrFn1g6Y7mnsz3UFQEQ/RV3qKJGx0DQ=","foWeQlUvvndX4pfDJltcGaBo1koaw\u002BElLUUybC5gBsk=","KQensXLeeaWOn3V5Wpr7X3rpnnA8NBDaOZJpNCvEAKM=","kEPWaTEgcSvuVRYmq9OKVA\u002BlpOmTKkV3fpY5ByqOqFk=","87pLnLY3BRAM5qVJkJZ6NFQjQse85QaOsaRqbVei3f8=","gb5K/PglhYNjQ6udVditV5mmWe8pBL0bkbfqmDZJR3Q=","c//884XNSMx2fHCDDouqzztU4ZLBdyPK5IazFjEu3xg=","A5FwpPfGidgr2NgPt1ofZxg2nxXAcuozNEFd9BE7nsk="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@ -1 +1 @@
{"GlobalPropertiesHash":"Q5kcht8XOSaXwErDHawVS9gd2nNuRy7EEG55Mop5u7E=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["wMWPZGfJtGeKkPw89r\u002BuOnYPKqx9sEcbqVKHPoYpTbg=","puDy0dzI5QvIsFKrWO6hrkZZcZnbTNSWaBqIyd5vS9E=","bNNyXhlBr3jQbNMkCOe8xcZdSkB7XoUpSNnehjUQlxA=","TmueuvMCgXMa1JvT5oA8ZJzQ4rx183XDhKg1JiRN\u002BjQ=","TDAOXjznXPMZY6da8pxBF7r\u002BgikX9nuv6RoxA3r\u002BE1M=","HwFAFTSvCp26cdo1kx5ecfdA/\u002BXAkxgIq5fu6m8nIA0=","SHr5eqYzJxZNE5/PlzkQfEBMjakT5PcfDexn2iCZjyI=","rovhGZeu5lwGm9t06s1govZ9ZDUAyhGquT/zYxV9EMA=","n90/VXHLh5f/b\u002BenXJx5LvC2wVhxMsmGXsKTtLP1rGE=","M2F\u002BdirWJXRBR8xTEBUsBQq5ZBlMsGLrQuDu2Xoflo8=","QQfqB2d2lyRaoRCXHlFI1qDyAV8sb3YBC6sabNep4T8=","sCLTILGPMYZmM4Cq6VeXFDRKEU4zUeqi0zh34Zyl1\u002Bg=","KPtl\u002BIcYzJanv3TdGEjfu/58zjjSte7onQyK1z2UpSs=","UOD2algC0YxakRPAo\u002BdHBxw2nz\u002Bf3inCW8K/2sYv4hk=","2a4AqN7uSgiGGPijKrbGYp3zTiFaYviYMC4je9251Gg=","S1JDFpdG6oeT7HQg1q6p3OLFEq6MSuMk9DrbZZf85U0=","FcAp\u002BB\u002BMdtU4Jqt1qd8ZU0XGQCyIO1UaSwwwKyFcuRI=","KicT\u002BJLs/7POfopY2e6knubWrx25hvaxJ1zNKezbz9Y=","xL7/ma/CChAYqsGMi59uK6yIstcESmcirrh1RzpvMEw=","dnRdnpQc61NJ56ASQrUFLZkDTGNM0KNu\u002BtR3NDDE34A=","Grv4g6vNrL73s12N910v2w8Bfa5b3fgn3knYM4SPbTo=","biFvXP\u002Bh3VCB//g0WfQTKnZXpYAq5NNK8FOtNrSlluc=","JbXwwQIUN/GSNZKsNiMjv4ebWU2SviyhnVdlqdpCpmg=","nz\u002BZycBj/r0qxn/lLFHWJ8J6wFGlMsV/1mlRmZUo/4I=","aQycidQhGUbn4VCw/EJfF5iFRrN1xIgwHoIJjbOVZps=","qgUM6A/uKHiUkWc1/Ln9WXX1SAX8JoRvV74Ma6ZFmng=","iKkyE9MQsJaeQ\u002BwNmzP/yqlnE0DgDcGv\u002BmjdLoDxrRo=","uTVPNnHOvOCd/yTop9dVCWOMKn4tFTh\u002B\u002BvDB36ISZPs=","mfZpFq\u002BvCmodLP7zO9b0YsEWC/OcDyBoxhYqFD56fFk=","YWOs7JAKIsqIOVQG0w8okz7vUzx0CLjYsgFSeEvd8dY=","mhyeOUDBL5xq9Rlm12fZKRW\u002BewVdAloH3HpGO\u002B7GqeM=","dwYRUoBX6sjNOpgOukCSK6FYozMx5nQPuanV9jF0pug=","ozbr8RdoOPcWGZFTphPnXiPHqUXsUX48rNHT9DPxQQQ=","zNy/\u002Beenwd4rP3KmszLj/P9L4RfeJcIG51tiUMGKZUI=","JqnKg76tBTEDi4ygNmSbT8906THHzJuCJTZbK0K6Oe8=","JcACn0ymzW4JpJ5CgWCxT1NdaSHZxnxp\u002BAiJJM/kC6k=","k71DltJbtRqVXA3rGahMZgUq0B9sodbz2R43hsUcD1I=","aouiJcQV84ezpO9Cwpg\u002BId9XaiZVlGhgxGvxD6PaAGM=","b/Jk0Mr/B4BWzcJa6nZHbXC\u002BzU0I1a30M2AcH5fdjKY=","aK2OxKAVYxUxIEDqZnknDAW9qelpdYKLvlGPA3\u002B5OIE=","E4QT\u002B435PZZ\u002BRTzgvECRD1bOtElnkqeWREaoDzYrMdc=","FBxckgU98gb7vgTEM5V4Q\u002BEWV1Ztcp3Bssbx92n1keA=","gv3iSaKsj0CmcWFWMhUhYcA7l4\u002BnVTp1Jj85xAmbA8E=","mRQfJZfYrp6FVuPsI1970i6\u002Bg1zC7cMX1qaaf5X\u002BoCQ=","5BtfX2AAiOmDTGL34icHscY4eUpH3nbfHN/rb4e62rY=","6rueZEktdPrxLkoO8WfJXCckClsIUsg6sBnN1LTessM=","SZJz\u002B71xnWFevxgzVgPPCqih4KkGwhQhHvoh6BgiWFc=","u2aOXUOrTOrwIgVam12G9HzaU7QEbOQG66Q7IDjlMYY=","8DlE0XjBA/lhOGHaXiPZ5cQswwpo6NEUaebI9my2F4s=","1ldijbG/u6m3Wwq0OUgI3unhWdjWhqvOD\u002BI1PauI9GI=","WtqR0aLtM7t6m3NDyJiTfyz81jhBwyuQkg/iDou5f/k=","GFbH56zPW8w/vQJiqpjblF8DH1wqIBfhQhRc7Hosw10=","htYyraM18aOUKQ1Tqg2LWYBgfZen3TdcXku9aKv7q0M=","9hC0wthPXB9k40lIbDKdWYtaw2axqBb91\u002BojeVYtTEY=","TqYSD0yZOIvmoqS7yqGoF3gOa8r34ClAk7\u002BtPdl9Xw0=","7NztDGxnb1Cz0opIKXfkgSzz2h0LyUFOT7wQNrMageQ=","kEPWaTEgcSvuVRYmq9OKVA\u002BlpOmTKkV3fpY5ByqOqFk=","4Z6NbZCHvoNJmFB0UDo9VAbGMti5FbYlOZgrz6CDFPY=","Ncs4XlqbjiOXHFOWs\u002BlDFNyDIeXvLTQrBH/4oQGZuIc=","P1JuwJ4/BytYPLxV\u002BhrJ5\u002BvbS8NeGlaBLiincn/y6m0=","2At\u002BRo2tqG3Zuc8oFrmuJ2h4FtOISqCbue1\u002B\u002B1jDpYw=","A5FwpPfGidgr2NgPt1ofZxg2nxXAcuozNEFd9BE7nsk="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"Q5kcht8XOSaXwErDHawVS9gd2nNuRy7EEG55Mop5u7E=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["wMWPZGfJtGeKkPw89r\u002BuOnYPKqx9sEcbqVKHPoYpTbg=","puDy0dzI5QvIsFKrWO6hrkZZcZnbTNSWaBqIyd5vS9E=","bNNyXhlBr3jQbNMkCOe8xcZdSkB7XoUpSNnehjUQlxA=","3Q171G9uNkjZ3lAgJDZDLi2eJw/8ixjkaHrw3rOC/vo=","TDAOXjznXPMZY6da8pxBF7r\u002BgikX9nuv6RoxA3r\u002BE1M=","HwFAFTSvCp26cdo1kx5ecfdA/\u002BXAkxgIq5fu6m8nIA0=","SHr5eqYzJxZNE5/PlzkQfEBMjakT5PcfDexn2iCZjyI=","rovhGZeu5lwGm9t06s1govZ9ZDUAyhGquT/zYxV9EMA=","n90/VXHLh5f/b\u002BenXJx5LvC2wVhxMsmGXsKTtLP1rGE=","M2F\u002BdirWJXRBR8xTEBUsBQq5ZBlMsGLrQuDu2Xoflo8=","QQfqB2d2lyRaoRCXHlFI1qDyAV8sb3YBC6sabNep4T8=","sCLTILGPMYZmM4Cq6VeXFDRKEU4zUeqi0zh34Zyl1\u002Bg=","KPtl\u002BIcYzJanv3TdGEjfu/58zjjSte7onQyK1z2UpSs=","UOD2algC0YxakRPAo\u002BdHBxw2nz\u002Bf3inCW8K/2sYv4hk=","2a4AqN7uSgiGGPijKrbGYp3zTiFaYviYMC4je9251Gg=","S1JDFpdG6oeT7HQg1q6p3OLFEq6MSuMk9DrbZZf85U0=","FcAp\u002BB\u002BMdtU4Jqt1qd8ZU0XGQCyIO1UaSwwwKyFcuRI=","KicT\u002BJLs/7POfopY2e6knubWrx25hvaxJ1zNKezbz9Y=","xL7/ma/CChAYqsGMi59uK6yIstcESmcirrh1RzpvMEw=","dnRdnpQc61NJ56ASQrUFLZkDTGNM0KNu\u002BtR3NDDE34A=","Grv4g6vNrL73s12N910v2w8Bfa5b3fgn3knYM4SPbTo=","biFvXP\u002Bh3VCB//g0WfQTKnZXpYAq5NNK8FOtNrSlluc=","JbXwwQIUN/GSNZKsNiMjv4ebWU2SviyhnVdlqdpCpmg=","nz\u002BZycBj/r0qxn/lLFHWJ8J6wFGlMsV/1mlRmZUo/4I=","aQycidQhGUbn4VCw/EJfF5iFRrN1xIgwHoIJjbOVZps=","qgUM6A/uKHiUkWc1/Ln9WXX1SAX8JoRvV74Ma6ZFmng=","iKkyE9MQsJaeQ\u002BwNmzP/yqlnE0DgDcGv\u002BmjdLoDxrRo=","uTVPNnHOvOCd/yTop9dVCWOMKn4tFTh\u002B\u002BvDB36ISZPs=","mfZpFq\u002BvCmodLP7zO9b0YsEWC/OcDyBoxhYqFD56fFk=","YWOs7JAKIsqIOVQG0w8okz7vUzx0CLjYsgFSeEvd8dY=","mhyeOUDBL5xq9Rlm12fZKRW\u002BewVdAloH3HpGO\u002B7GqeM=","dwYRUoBX6sjNOpgOukCSK6FYozMx5nQPuanV9jF0pug=","ozbr8RdoOPcWGZFTphPnXiPHqUXsUX48rNHT9DPxQQQ=","zNy/\u002Beenwd4rP3KmszLj/P9L4RfeJcIG51tiUMGKZUI=","JqnKg76tBTEDi4ygNmSbT8906THHzJuCJTZbK0K6Oe8=","JcACn0ymzW4JpJ5CgWCxT1NdaSHZxnxp\u002BAiJJM/kC6k=","k71DltJbtRqVXA3rGahMZgUq0B9sodbz2R43hsUcD1I=","aouiJcQV84ezpO9Cwpg\u002BId9XaiZVlGhgxGvxD6PaAGM=","b/Jk0Mr/B4BWzcJa6nZHbXC\u002BzU0I1a30M2AcH5fdjKY=","aK2OxKAVYxUxIEDqZnknDAW9qelpdYKLvlGPA3\u002B5OIE=","E4QT\u002B435PZZ\u002BRTzgvECRD1bOtElnkqeWREaoDzYrMdc=","FBxckgU98gb7vgTEM5V4Q\u002BEWV1Ztcp3Bssbx92n1keA=","gv3iSaKsj0CmcWFWMhUhYcA7l4\u002BnVTp1Jj85xAmbA8E=","mRQfJZfYrp6FVuPsI1970i6\u002Bg1zC7cMX1qaaf5X\u002BoCQ=","5BtfX2AAiOmDTGL34icHscY4eUpH3nbfHN/rb4e62rY=","6rueZEktdPrxLkoO8WfJXCckClsIUsg6sBnN1LTessM=","SZJz\u002B71xnWFevxgzVgPPCqih4KkGwhQhHvoh6BgiWFc=","u2aOXUOrTOrwIgVam12G9HzaU7QEbOQG66Q7IDjlMYY=","8DlE0XjBA/lhOGHaXiPZ5cQswwpo6NEUaebI9my2F4s=","1ldijbG/u6m3Wwq0OUgI3unhWdjWhqvOD\u002BI1PauI9GI=","WtqR0aLtM7t6m3NDyJiTfyz81jhBwyuQkg/iDou5f/k=","aNqGJzJ5xa0dNxSytzanVzqK6xNl85ZkIZfdb\u002BKhxHY=","TpcHV4OB3FaN8hILgTJGBWj6cGx2APNuu6cH90cA2Yw=","jUDUzGIKHCleWWpzHVl3AT4E4/\u002BiG6ks0UJVoC3TXgo=","XfkTfnoOOODr5Ke\u002BIvlGksb7y1tdjO9D3cio6nfgb6o=","sbScjs7uLbfBbWbJKERtvGeL8se13w0V5s0ufS/zDaQ=","9hC0wthPXB9k40lIbDKdWYtaw2axqBb91\u002BojeVYtTEY=","xLFIqNnTxWnQP99MmbgJqozQM9NzpZ0mMYZdGkZnBU4=","qOlED1ak4sYSTrFn1g6Y7mnsz3UFQEQ/RV3qKJGx0DQ=","foWeQlUvvndX4pfDJltcGaBo1koaw\u002BElLUUybC5gBsk=","KQensXLeeaWOn3V5Wpr7X3rpnnA8NBDaOZJpNCvEAKM=","kEPWaTEgcSvuVRYmq9OKVA\u002BlpOmTKkV3fpY5ByqOqFk=","87pLnLY3BRAM5qVJkJZ6NFQjQse85QaOsaRqbVei3f8=","gb5K/PglhYNjQ6udVditV5mmWe8pBL0bkbfqmDZJR3Q=","c//884XNSMx2fHCDDouqzztU4ZLBdyPK5IazFjEu3xg=","A5FwpPfGidgr2NgPt1ofZxg2nxXAcuozNEFd9BE7nsk="],"CachedAssets":{},"CachedCopyCandidates":{}}

File diff suppressed because one or more lines are too long

View File

@ -1,77 +0,0 @@
.page[b-se1kx51m2b] {
position: relative;
display: flex;
flex-direction: column;
}
main[b-se1kx51m2b] {
flex: 1;
}
.sidebar[b-se1kx51m2b] {
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
}
.top-row[b-se1kx51m2b] {
background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5;
justify-content: flex-end;
height: 3.5rem;
display: flex;
align-items: center;
}
.top-row[b-se1kx51m2b] a, .top-row[b-se1kx51m2b] .btn-link {
white-space: nowrap;
margin-left: 1.5rem;
text-decoration: none;
}
.top-row[b-se1kx51m2b] a:hover, .top-row[b-se1kx51m2b] .btn-link:hover {
text-decoration: underline;
}
.top-row[b-se1kx51m2b] a:first-child {
overflow: hidden;
text-overflow: ellipsis;
}
@media (max-width: 640.98px) {
.top-row[b-se1kx51m2b] {
justify-content: space-between;
}
.top-row[b-se1kx51m2b] a, .top-row[b-se1kx51m2b] .btn-link {
margin-left: 0;
}
}
@media (min-width: 641px) {
.page[b-se1kx51m2b] {
flex-direction: row;
}
.sidebar[b-se1kx51m2b] {
width: 250px;
height: 100vh;
position: sticky;
top: 0;
}
.top-row[b-se1kx51m2b] {
position: sticky;
top: 0;
z-index: 1;
}
.top-row.auth[b-se1kx51m2b] a:first-child {
flex: 1;
text-align: right;
width: 0;
}
.top-row[b-se1kx51m2b], article[b-se1kx51m2b] {
padding-left: 2rem !important;
padding-right: 1.5rem !important;
}
}

View File

@ -1,83 +0,0 @@
.navbar-toggler[b-z0fmt146ub] {
background-color: rgba(255, 255, 255, 0.1);
}
.top-row[b-z0fmt146ub] {
min-height: 3.5rem;
background-color: rgba(0,0,0,0.4);
}
.navbar-brand[b-z0fmt146ub] {
font-size: 1.1rem;
}
.bi[b-z0fmt146ub] {
display: inline-block;
position: relative;
width: 1.25rem;
height: 1.25rem;
margin-right: 0.75rem;
top: -1px;
background-size: cover;
}
.bi-house-door-fill-nav-menu[b-z0fmt146ub] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
}
.bi-plus-square-fill-nav-menu[b-z0fmt146ub] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
}
.bi-list-nested-nav-menu[b-z0fmt146ub] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
}
.nav-item[b-z0fmt146ub] {
font-size: 0.9rem;
padding-bottom: 0.5rem;
}
.nav-item:first-of-type[b-z0fmt146ub] {
padding-top: 1rem;
}
.nav-item:last-of-type[b-z0fmt146ub] {
padding-bottom: 1rem;
}
.nav-item[b-z0fmt146ub] a {
color: #d7d7d7;
border-radius: 4px;
height: 3rem;
display: flex;
align-items: center;
line-height: 3rem;
}
.nav-item[b-z0fmt146ub] a.active {
background-color: rgba(255,255,255,0.37);
color: white;
}
.nav-item[b-z0fmt146ub] a:hover {
background-color: rgba(255,255,255,0.1);
color: white;
}
@media (min-width: 641px) {
.navbar-toggler[b-z0fmt146ub] {
display: none;
}
.collapse[b-z0fmt146ub] {
/* Never collapse the sidebar for wide screens */
display: block;
}
.nav-scrollable[b-z0fmt146ub] {
/* Allow sidebar to scroll for tall menus */
height: calc(100vh - 3.5rem);
overflow-y: auto;
}
}

View File

@ -1,19 +1,21 @@
/* /Layout/MainLayout.razor.rz.scp.css */ @import '_content/Blazor.Bootstrap/Blazor.Bootstrap.7t9tbfaemk.bundle.scp.css';
.page[b-se1kx51m2b] {
/* /Components/Layout/MainLayout.razor.rz.scp.css */
.page[b-4ckihtz3s1] {
position: relative; position: relative;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
main[b-se1kx51m2b] { main[b-4ckihtz3s1] {
flex: 1; flex: 1;
} }
.sidebar[b-se1kx51m2b] { .sidebar[b-4ckihtz3s1] {
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
} }
.top-row[b-se1kx51m2b] { .top-row[b-4ckihtz3s1] {
background-color: #f7f7f7; background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5; border-bottom: 1px solid #d6d5d5;
justify-content: flex-end; justify-content: flex-end;
@ -22,75 +24,75 @@ main[b-se1kx51m2b] {
align-items: center; align-items: center;
} }
.top-row[b-se1kx51m2b] a, .top-row[b-se1kx51m2b] .btn-link { .top-row[b-4ckihtz3s1] a, .top-row[b-4ckihtz3s1] .btn-link {
white-space: nowrap; white-space: nowrap;
margin-left: 1.5rem; margin-left: 1.5rem;
text-decoration: none; text-decoration: none;
} }
.top-row[b-se1kx51m2b] a:hover, .top-row[b-se1kx51m2b] .btn-link:hover { .top-row[b-4ckihtz3s1] a:hover, .top-row[b-4ckihtz3s1] .btn-link:hover {
text-decoration: underline; text-decoration: underline;
} }
.top-row[b-se1kx51m2b] a:first-child { .top-row[b-4ckihtz3s1] a:first-child {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
@media (max-width: 640.98px) { @media (max-width: 640.98px) {
.top-row[b-se1kx51m2b] { .top-row[b-4ckihtz3s1] {
justify-content: space-between; justify-content: space-between;
} }
.top-row[b-se1kx51m2b] a, .top-row[b-se1kx51m2b] .btn-link { .top-row[b-4ckihtz3s1] a, .top-row[b-4ckihtz3s1] .btn-link {
margin-left: 0; margin-left: 0;
} }
} }
@media (min-width: 641px) { @media (min-width: 641px) {
.page[b-se1kx51m2b] { .page[b-4ckihtz3s1] {
flex-direction: row; flex-direction: row;
} }
.sidebar[b-se1kx51m2b] { .sidebar[b-4ckihtz3s1] {
width: 250px; width: 250px;
height: 100vh; height: 100vh;
position: sticky; position: sticky;
top: 0; top: 0;
} }
.top-row[b-se1kx51m2b] { .top-row[b-4ckihtz3s1] {
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 1; z-index: 1;
} }
.top-row.auth[b-se1kx51m2b] a:first-child { .top-row.auth[b-4ckihtz3s1] a:first-child {
flex: 1; flex: 1;
text-align: right; text-align: right;
width: 0; width: 0;
} }
.top-row[b-se1kx51m2b], article[b-se1kx51m2b] { .top-row[b-4ckihtz3s1], article[b-4ckihtz3s1] {
padding-left: 2rem !important; padding-left: 2rem !important;
padding-right: 1.5rem !important; padding-right: 1.5rem !important;
} }
} }
/* /Layout/NavMenu.razor.rz.scp.css */ /* /Components/Layout/NavMenu.razor.rz.scp.css */
.navbar-toggler[b-z0fmt146ub] { .navbar-toggler[b-c1psfyttma] {
background-color: rgba(255, 255, 255, 0.1); background-color: rgba(255, 255, 255, 0.1);
} }
.top-row[b-z0fmt146ub] { .top-row[b-c1psfyttma] {
min-height: 3.5rem; min-height: 3.5rem;
background-color: rgba(0,0,0,0.4); background-color: rgba(0,0,0,0.4);
} }
.navbar-brand[b-z0fmt146ub] { .navbar-brand[b-c1psfyttma] {
font-size: 1.1rem; font-size: 1.1rem;
} }
.bi[b-z0fmt146ub] { .bi[b-c1psfyttma] {
display: inline-block; display: inline-block;
position: relative; position: relative;
width: 1.25rem; width: 1.25rem;
@ -100,32 +102,32 @@ main[b-se1kx51m2b] {
background-size: cover; background-size: cover;
} }
.bi-house-door-fill-nav-menu[b-z0fmt146ub] { .bi-house-door-fill-nav-menu[b-c1psfyttma] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
} }
.bi-plus-square-fill-nav-menu[b-z0fmt146ub] { .bi-plus-square-fill-nav-menu[b-c1psfyttma] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
} }
.bi-list-nested-nav-menu[b-z0fmt146ub] { .bi-list-nested-nav-menu[b-c1psfyttma] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
} }
.nav-item[b-z0fmt146ub] { .nav-item[b-c1psfyttma] {
font-size: 0.9rem; font-size: 0.9rem;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
} }
.nav-item:first-of-type[b-z0fmt146ub] { .nav-item:first-of-type[b-c1psfyttma] {
padding-top: 1rem; padding-top: 1rem;
} }
.nav-item:last-of-type[b-z0fmt146ub] { .nav-item:last-of-type[b-c1psfyttma] {
padding-bottom: 1rem; padding-bottom: 1rem;
} }
.nav-item[b-z0fmt146ub] a { .nav-item[b-c1psfyttma] a {
color: #d7d7d7; color: #d7d7d7;
border-radius: 4px; border-radius: 4px;
height: 3rem; height: 3rem;
@ -134,27 +136,27 @@ main[b-se1kx51m2b] {
line-height: 3rem; line-height: 3rem;
} }
.nav-item[b-z0fmt146ub] a.active { .nav-item[b-c1psfyttma] a.active {
background-color: rgba(255,255,255,0.37); background-color: rgba(255,255,255,0.37);
color: white; color: white;
} }
.nav-item[b-z0fmt146ub] a:hover { .nav-item[b-c1psfyttma] a:hover {
background-color: rgba(255,255,255,0.1); background-color: rgba(255,255,255,0.1);
color: white; color: white;
} }
@media (min-width: 641px) { @media (min-width: 641px) {
.navbar-toggler[b-z0fmt146ub] { .navbar-toggler[b-c1psfyttma] {
display: none; display: none;
} }
.collapse[b-z0fmt146ub] { .collapse[b-c1psfyttma] {
/* Never collapse the sidebar for wide screens */ /* Never collapse the sidebar for wide screens */
display: block; display: block;
} }
.nav-scrollable[b-z0fmt146ub] { .nav-scrollable[b-c1psfyttma] {
/* Allow sidebar to scroll for tall menus */ /* Allow sidebar to scroll for tall menus */
height: calc(100vh - 3.5rem); height: calc(100vh - 3.5rem);
overflow-y: auto; overflow-y: auto;

View File

@ -1,19 +1,19 @@
/* /Layout/MainLayout.razor.rz.scp.css */ /* /Components/Layout/MainLayout.razor.rz.scp.css */
.page[b-se1kx51m2b] { .page[b-4ckihtz3s1] {
position: relative; position: relative;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
main[b-se1kx51m2b] { main[b-4ckihtz3s1] {
flex: 1; flex: 1;
} }
.sidebar[b-se1kx51m2b] { .sidebar[b-4ckihtz3s1] {
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
} }
.top-row[b-se1kx51m2b] { .top-row[b-4ckihtz3s1] {
background-color: #f7f7f7; background-color: #f7f7f7;
border-bottom: 1px solid #d6d5d5; border-bottom: 1px solid #d6d5d5;
justify-content: flex-end; justify-content: flex-end;
@ -22,75 +22,75 @@ main[b-se1kx51m2b] {
align-items: center; align-items: center;
} }
.top-row[b-se1kx51m2b] a, .top-row[b-se1kx51m2b] .btn-link { .top-row[b-4ckihtz3s1] a, .top-row[b-4ckihtz3s1] .btn-link {
white-space: nowrap; white-space: nowrap;
margin-left: 1.5rem; margin-left: 1.5rem;
text-decoration: none; text-decoration: none;
} }
.top-row[b-se1kx51m2b] a:hover, .top-row[b-se1kx51m2b] .btn-link:hover { .top-row[b-4ckihtz3s1] a:hover, .top-row[b-4ckihtz3s1] .btn-link:hover {
text-decoration: underline; text-decoration: underline;
} }
.top-row[b-se1kx51m2b] a:first-child { .top-row[b-4ckihtz3s1] a:first-child {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
@media (max-width: 640.98px) { @media (max-width: 640.98px) {
.top-row[b-se1kx51m2b] { .top-row[b-4ckihtz3s1] {
justify-content: space-between; justify-content: space-between;
} }
.top-row[b-se1kx51m2b] a, .top-row[b-se1kx51m2b] .btn-link { .top-row[b-4ckihtz3s1] a, .top-row[b-4ckihtz3s1] .btn-link {
margin-left: 0; margin-left: 0;
} }
} }
@media (min-width: 641px) { @media (min-width: 641px) {
.page[b-se1kx51m2b] { .page[b-4ckihtz3s1] {
flex-direction: row; flex-direction: row;
} }
.sidebar[b-se1kx51m2b] { .sidebar[b-4ckihtz3s1] {
width: 250px; width: 250px;
height: 100vh; height: 100vh;
position: sticky; position: sticky;
top: 0; top: 0;
} }
.top-row[b-se1kx51m2b] { .top-row[b-4ckihtz3s1] {
position: sticky; position: sticky;
top: 0; top: 0;
z-index: 1; z-index: 1;
} }
.top-row.auth[b-se1kx51m2b] a:first-child { .top-row.auth[b-4ckihtz3s1] a:first-child {
flex: 1; flex: 1;
text-align: right; text-align: right;
width: 0; width: 0;
} }
.top-row[b-se1kx51m2b], article[b-se1kx51m2b] { .top-row[b-4ckihtz3s1], article[b-4ckihtz3s1] {
padding-left: 2rem !important; padding-left: 2rem !important;
padding-right: 1.5rem !important; padding-right: 1.5rem !important;
} }
} }
/* /Layout/NavMenu.razor.rz.scp.css */ /* /Components/Layout/NavMenu.razor.rz.scp.css */
.navbar-toggler[b-z0fmt146ub] { .navbar-toggler[b-c1psfyttma] {
background-color: rgba(255, 255, 255, 0.1); background-color: rgba(255, 255, 255, 0.1);
} }
.top-row[b-z0fmt146ub] { .top-row[b-c1psfyttma] {
min-height: 3.5rem; min-height: 3.5rem;
background-color: rgba(0,0,0,0.4); background-color: rgba(0,0,0,0.4);
} }
.navbar-brand[b-z0fmt146ub] { .navbar-brand[b-c1psfyttma] {
font-size: 1.1rem; font-size: 1.1rem;
} }
.bi[b-z0fmt146ub] { .bi[b-c1psfyttma] {
display: inline-block; display: inline-block;
position: relative; position: relative;
width: 1.25rem; width: 1.25rem;
@ -100,32 +100,32 @@ main[b-se1kx51m2b] {
background-size: cover; background-size: cover;
} }
.bi-house-door-fill-nav-menu[b-z0fmt146ub] { .bi-house-door-fill-nav-menu[b-c1psfyttma] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
} }
.bi-plus-square-fill-nav-menu[b-z0fmt146ub] { .bi-plus-square-fill-nav-menu[b-c1psfyttma] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
} }
.bi-list-nested-nav-menu[b-z0fmt146ub] { .bi-list-nested-nav-menu[b-c1psfyttma] {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E"); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
} }
.nav-item[b-z0fmt146ub] { .nav-item[b-c1psfyttma] {
font-size: 0.9rem; font-size: 0.9rem;
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
} }
.nav-item:first-of-type[b-z0fmt146ub] { .nav-item:first-of-type[b-c1psfyttma] {
padding-top: 1rem; padding-top: 1rem;
} }
.nav-item:last-of-type[b-z0fmt146ub] { .nav-item:last-of-type[b-c1psfyttma] {
padding-bottom: 1rem; padding-bottom: 1rem;
} }
.nav-item[b-z0fmt146ub] a { .nav-item[b-c1psfyttma] a {
color: #d7d7d7; color: #d7d7d7;
border-radius: 4px; border-radius: 4px;
height: 3rem; height: 3rem;
@ -134,27 +134,27 @@ main[b-se1kx51m2b] {
line-height: 3rem; line-height: 3rem;
} }
.nav-item[b-z0fmt146ub] a.active { .nav-item[b-c1psfyttma] a.active {
background-color: rgba(255,255,255,0.37); background-color: rgba(255,255,255,0.37);
color: white; color: white;
} }
.nav-item[b-z0fmt146ub] a:hover { .nav-item[b-c1psfyttma] a:hover {
background-color: rgba(255,255,255,0.1); background-color: rgba(255,255,255,0.1);
color: white; color: white;
} }
@media (min-width: 641px) { @media (min-width: 641px) {
.navbar-toggler[b-z0fmt146ub] { .navbar-toggler[b-c1psfyttma] {
display: none; display: none;
} }
.collapse[b-z0fmt146ub] { .collapse[b-c1psfyttma] {
/* Never collapse the sidebar for wide screens */ /* Never collapse the sidebar for wide screens */
display: block; display: block;
} }
.nav-scrollable[b-z0fmt146ub] { .nav-scrollable[b-c1psfyttma] {
/* Allow sidebar to scroll for tall menus */ /* Allow sidebar to scroll for tall menus */
height: calc(100vh - 3.5rem); height: calc(100vh - 3.5rem);
overflow-y: auto; overflow-y: auto;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
p7eipGUbJw36IXtyKOJ7E011H1vfpkvwmmEeqGwAkOo= LQIR0vaCUe8ZURwOfXvPmxpSP8m1Mmgdc3YqN7XRVew=

File diff suppressed because one or more lines are too long

View File

@ -55,6 +55,14 @@
"net9.0": { "net9.0": {
"targetAlias": "net9.0", "targetAlias": "net9.0",
"dependencies": { "dependencies": {
"Blazor.Bootstrap": {
"target": "Package",
"version": "[3.4.0, )"
},
"Blazored.Typeahead": {
"target": "Package",
"version": "[4.7.0, )"
},
"Microsoft.AspNetCore.Components.WebAssembly": { "Microsoft.AspNetCore.Components.WebAssembly": {
"target": "Package", "target": "Package",
"version": "[9.0.9, )" "version": "[9.0.9, )"
@ -80,6 +88,10 @@
"version": "[9.0.9, )", "version": "[9.0.9, )",
"autoReferenced": true "autoReferenced": true
}, },
"MudBlazor": {
"target": "Package",
"version": "[8.13.0, )"
},
"System.IdentityModel.Tokens.Jwt": { "System.IdentityModel.Tokens.Jwt": {
"target": "Package", "target": "Package",
"version": "[8.14.0, )" "version": "[8.14.0, )"

View File

@ -14,9 +14,12 @@
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" /> <SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup> </ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)mudblazor\8.13.0\buildTransitive\MudBlazor.props" Condition="Exists('$(NuGetPackageRoot)mudblazor\8.13.0\buildTransitive\MudBlazor.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.9\build\Microsoft.NET.Sdk.WebAssembly.Pack.props" Condition="Exists('$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.9\build\Microsoft.NET.Sdk.WebAssembly.Pack.props')" /> <Import Project="$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.9\build\Microsoft.NET.Sdk.WebAssembly.Pack.props" Condition="Exists('$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.9\build\Microsoft.NET.Sdk.WebAssembly.Pack.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.net.illink.tasks\9.0.9\build\Microsoft.NET.ILLink.Tasks.props" Condition="Exists('$(NuGetPackageRoot)microsoft.net.illink.tasks\9.0.9\build\Microsoft.NET.ILLink.Tasks.props')" /> <Import Project="$(NuGetPackageRoot)microsoft.net.illink.tasks\9.0.9\build\Microsoft.NET.ILLink.Tasks.props" Condition="Exists('$(NuGetPackageRoot)microsoft.net.illink.tasks\9.0.9\build\Microsoft.NET.ILLink.Tasks.props')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.components.webassembly\9.0.9\build\net9.0\Microsoft.AspNetCore.Components.WebAssembly.props" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.components.webassembly\9.0.9\build\net9.0\Microsoft.AspNetCore.Components.WebAssembly.props')" /> <Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.components.webassembly\9.0.9\build\net9.0\Microsoft.AspNetCore.Components.WebAssembly.props" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.components.webassembly\9.0.9\build\net9.0\Microsoft.AspNetCore.Components.WebAssembly.props')" />
<Import Project="$(NuGetPackageRoot)blazored.typeahead\4.7.0\buildTransitive\Blazored.Typeahead.props" Condition="Exists('$(NuGetPackageRoot)blazored.typeahead\4.7.0\buildTransitive\Blazored.Typeahead.props')" />
<Import Project="$(NuGetPackageRoot)blazor.bootstrap\3.4.0\buildTransitive\Blazor.Bootstrap.props" Condition="Exists('$(NuGetPackageRoot)blazor.bootstrap\3.4.0\buildTransitive\Blazor.Bootstrap.props')" />
</ImportGroup> </ImportGroup>
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<PkgMicrosoft_NET_Sdk_WebAssembly_Pack Condition=" '$(PkgMicrosoft_NET_Sdk_WebAssembly_Pack)' == '' ">C:\Users\MarcWieland\.nuget\packages\microsoft.net.sdk.webassembly.pack\9.0.9</PkgMicrosoft_NET_Sdk_WebAssembly_Pack> <PkgMicrosoft_NET_Sdk_WebAssembly_Pack Condition=" '$(PkgMicrosoft_NET_Sdk_WebAssembly_Pack)' == '' ">C:\Users\MarcWieland\.nuget\packages\microsoft.net.sdk.webassembly.pack\9.0.9</PkgMicrosoft_NET_Sdk_WebAssembly_Pack>

View File

@ -2,10 +2,11 @@
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' "> <ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.9\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.9\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" /> <Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.9\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\9.0.9\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.9\build\Microsoft.NET.Sdk.WebAssembly.Pack.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.9\build\Microsoft.NET.Sdk.WebAssembly.Pack.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\9.0.9\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\9.0.9\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" /> <Import Project="$(NuGetPackageRoot)microsoft.extensions.options\9.0.9\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\9.0.9\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers\9.0.9\buildTransitive\netstandard2.0\Microsoft.AspNetCore.Components.Analyzers.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers\9.0.9\buildTransitive\netstandard2.0\Microsoft.AspNetCore.Components.Analyzers.targets')" />
<Import Project="$(NuGetPackageRoot)mudblazor\8.13.0\build\MudBlazor.targets" Condition="Exists('$(NuGetPackageRoot)mudblazor\8.13.0\build\MudBlazor.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.9\build\Microsoft.NET.Sdk.WebAssembly.Pack.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.net.sdk.webassembly.pack\9.0.9\build\Microsoft.NET.Sdk.WebAssembly.Pack.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\9.0.9\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\9.0.9\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" /> <Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\9.0.9\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\9.0.9\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.components.webassembly.devserver\9.0.9\build\Microsoft.AspNetCore.Components.WebAssembly.DevServer.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.components.webassembly.devserver\9.0.9\build\Microsoft.AspNetCore.Components.WebAssembly.DevServer.targets')" /> <Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.components.webassembly.devserver\9.0.9\build\Microsoft.AspNetCore.Components.WebAssembly.DevServer.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.components.webassembly.devserver\9.0.9\build\Microsoft.AspNetCore.Components.WebAssembly.DevServer.targets')" />
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers\9.0.9\buildTransitive\netstandard2.0\Microsoft.AspNetCore.Components.Analyzers.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.components.analyzers\9.0.9\buildTransitive\netstandard2.0\Microsoft.AspNetCore.Components.Analyzers.targets')" />
</ImportGroup> </ImportGroup>
</Project> </Project>

View File

@ -2,6 +2,43 @@
"version": 3, "version": 3,
"targets": { "targets": {
"net9.0": { "net9.0": {
"Blazor.Bootstrap/3.4.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Components.Web": "9.0.0"
},
"compile": {
"lib/net9.0/BlazorBootstrap.dll": {}
},
"runtime": {
"lib/net9.0/BlazorBootstrap.dll": {}
},
"build": {
"buildTransitive/Blazor.Bootstrap.props": {}
},
"buildMultiTargeting": {
"buildMultiTargeting/Blazor.Bootstrap.props": {}
}
},
"Blazored.Typeahead/4.7.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Components": "6.0.3",
"Microsoft.AspNetCore.Components.Web": "6.0.3"
},
"compile": {
"lib/net6.0/Blazored.Typeahead.dll": {}
},
"runtime": {
"lib/net6.0/Blazored.Typeahead.dll": {}
},
"build": {
"buildTransitive/Blazored.Typeahead.props": {}
},
"buildMultiTargeting": {
"buildMultiTargeting/Blazored.Typeahead.props": {}
}
},
"Microsoft.AspNetCore.Authorization/9.0.9": { "Microsoft.AspNetCore.Authorization/9.0.9": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
@ -380,6 +417,38 @@
"buildTransitive/net8.0/_._": {} "buildTransitive/net8.0/_._": {}
} }
}, },
"Microsoft.Extensions.Localization/9.0.1": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
"Microsoft.Extensions.Localization.Abstractions": "9.0.1",
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
"Microsoft.Extensions.Options": "9.0.1"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Localization.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Localization.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.Localization.Abstractions/9.0.1": {
"type": "package",
"compile": {
"lib/net9.0/Microsoft.Extensions.Localization.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Localization.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.Logging/9.0.9": { "Microsoft.Extensions.Logging/9.0.9": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
@ -583,6 +652,31 @@
"build/Microsoft.NET.Sdk.WebAssembly.Pack.targets": {} "build/Microsoft.NET.Sdk.WebAssembly.Pack.targets": {}
} }
}, },
"MudBlazor/8.13.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Components": "9.0.1",
"Microsoft.AspNetCore.Components.Web": "9.0.1",
"Microsoft.Extensions.Localization": "9.0.1"
},
"compile": {
"lib/net9.0/MudBlazor.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/MudBlazor.dll": {
"related": ".xml"
}
},
"build": {
"build/MudBlazor.targets": {},
"buildTransitive/MudBlazor.props": {}
},
"buildMultiTargeting": {
"buildMultiTargeting/MudBlazor.props": {}
}
},
"System.IdentityModel.Tokens.Jwt/8.14.0": { "System.IdentityModel.Tokens.Jwt/8.14.0": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
@ -612,6 +706,43 @@
} }
}, },
"net9.0/browser-wasm": { "net9.0/browser-wasm": {
"Blazor.Bootstrap/3.4.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Components.Web": "9.0.0"
},
"compile": {
"lib/net9.0/BlazorBootstrap.dll": {}
},
"runtime": {
"lib/net9.0/BlazorBootstrap.dll": {}
},
"build": {
"buildTransitive/Blazor.Bootstrap.props": {}
},
"buildMultiTargeting": {
"buildMultiTargeting/Blazor.Bootstrap.props": {}
}
},
"Blazored.Typeahead/4.7.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Components": "6.0.3",
"Microsoft.AspNetCore.Components.Web": "6.0.3"
},
"compile": {
"lib/net6.0/Blazored.Typeahead.dll": {}
},
"runtime": {
"lib/net6.0/Blazored.Typeahead.dll": {}
},
"build": {
"buildTransitive/Blazored.Typeahead.props": {}
},
"buildMultiTargeting": {
"buildMultiTargeting/Blazored.Typeahead.props": {}
}
},
"Microsoft.AspNetCore.Authorization/9.0.9": { "Microsoft.AspNetCore.Authorization/9.0.9": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
@ -990,6 +1121,38 @@
"buildTransitive/net8.0/_._": {} "buildTransitive/net8.0/_._": {}
} }
}, },
"Microsoft.Extensions.Localization/9.0.1": {
"type": "package",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.1",
"Microsoft.Extensions.Localization.Abstractions": "9.0.1",
"Microsoft.Extensions.Logging.Abstractions": "9.0.1",
"Microsoft.Extensions.Options": "9.0.1"
},
"compile": {
"lib/net9.0/Microsoft.Extensions.Localization.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Localization.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.Localization.Abstractions/9.0.1": {
"type": "package",
"compile": {
"lib/net9.0/Microsoft.Extensions.Localization.Abstractions.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/Microsoft.Extensions.Localization.Abstractions.dll": {
"related": ".xml"
}
}
},
"Microsoft.Extensions.Logging/9.0.9": { "Microsoft.Extensions.Logging/9.0.9": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
@ -1193,6 +1356,31 @@
"build/Microsoft.NET.Sdk.WebAssembly.Pack.targets": {} "build/Microsoft.NET.Sdk.WebAssembly.Pack.targets": {}
} }
}, },
"MudBlazor/8.13.0": {
"type": "package",
"dependencies": {
"Microsoft.AspNetCore.Components": "9.0.1",
"Microsoft.AspNetCore.Components.Web": "9.0.1",
"Microsoft.Extensions.Localization": "9.0.1"
},
"compile": {
"lib/net9.0/MudBlazor.dll": {
"related": ".xml"
}
},
"runtime": {
"lib/net9.0/MudBlazor.dll": {
"related": ".xml"
}
},
"build": {
"build/MudBlazor.targets": {},
"buildTransitive/MudBlazor.props": {}
},
"buildMultiTargeting": {
"buildMultiTargeting/MudBlazor.props": {}
}
},
"System.IdentityModel.Tokens.Jwt/8.14.0": { "System.IdentityModel.Tokens.Jwt/8.14.0": {
"type": "package", "type": "package",
"dependencies": { "dependencies": {
@ -1223,6 +1411,55 @@
} }
}, },
"libraries": { "libraries": {
"Blazor.Bootstrap/3.4.0": {
"sha512": "RlK531tJCXGEoESwjDIARttoRPtOCXXQqrNwfaai7sIWir2pqsBop0gySBqN742m+K2vY9p9J7Mwwl6XcNXm6g==",
"type": "package",
"path": "blazor.bootstrap/3.4.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"128X128.png",
"README.md",
"blazor.bootstrap.3.4.0.nupkg.sha512",
"blazor.bootstrap.nuspec",
"build/Blazor.Bootstrap.props",
"build/Microsoft.AspNetCore.StaticWebAssetEndpoints.props",
"build/Microsoft.AspNetCore.StaticWebAssets.props",
"buildMultiTargeting/Blazor.Bootstrap.props",
"buildTransitive/Blazor.Bootstrap.props",
"lib/net6.0/BlazorBootstrap.dll",
"lib/net8.0/BlazorBootstrap.dll",
"lib/net9.0/BlazorBootstrap.dll",
"staticwebassets/Blazor.Bootstrap.7t9tbfaemk.bundle.scp.css",
"staticwebassets/blazor.bootstrap.css",
"staticwebassets/blazor.bootstrap.js",
"staticwebassets/blazor.bootstrap.pdf.js",
"staticwebassets/blazor.bootstrap.sortable-list.js",
"staticwebassets/blazor.bootstrap.theme-switcher.js",
"staticwebassets/icon/128X128.png",
"staticwebassets/pdfjs-4.0.379.min.js",
"staticwebassets/pdfjs-4.0.379.worker.min.js"
]
},
"Blazored.Typeahead/4.7.0": {
"sha512": "fTN4Bt9rwEE/d33FXFd+h/DBjVtsFJLRf9B8mu0zJWMWG5Mk2tU2il3aK0+laUxNgBNBgEL0jW/831I+oapd6A==",
"type": "package",
"path": "blazored.typeahead/4.7.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"blazored.typeahead.4.7.0.nupkg.sha512",
"blazored.typeahead.nuspec",
"build/Blazored.Typeahead.props",
"build/Microsoft.AspNetCore.StaticWebAssets.props",
"buildMultiTargeting/Blazored.Typeahead.props",
"buildTransitive/Blazored.Typeahead.props",
"icon.png",
"lib/net6.0/Blazored.Typeahead.dll",
"staticwebassets/blazored-typeahead.css",
"staticwebassets/blazored-typeahead.js"
]
},
"Microsoft.AspNetCore.Authorization/9.0.9": { "Microsoft.AspNetCore.Authorization/9.0.9": {
"sha512": "OVUDsnJDBhCuyJtjkQXObWbBGjh4kyxL/pl/5RqtZHnSJcpEr1eD6l4vbFIdRHg4bFI59vTTrfHKQ3zwfR4KCw==", "sha512": "OVUDsnJDBhCuyJtjkQXObWbBGjh4kyxL/pl/5RqtZHnSJcpEr1eD6l4vbFIdRHg4bFI59vTTrfHKQ3zwfR4KCw==",
"type": "package", "type": "package",
@ -1886,6 +2123,44 @@
"useSharedDesignerContext.txt" "useSharedDesignerContext.txt"
] ]
}, },
"Microsoft.Extensions.Localization/9.0.1": {
"sha512": "UgvX4Yb2T3tEsKT30ktZr0H7kTRPapCgEH0bdTwxiEGSdA39/hAQMvvb+vgHpqmevDU5+puyI9ujRkmmbF946w==",
"type": "package",
"path": "microsoft.extensions.localization/9.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"THIRD-PARTY-NOTICES.TXT",
"lib/net462/Microsoft.Extensions.Localization.dll",
"lib/net462/Microsoft.Extensions.Localization.xml",
"lib/net9.0/Microsoft.Extensions.Localization.dll",
"lib/net9.0/Microsoft.Extensions.Localization.xml",
"lib/netstandard2.0/Microsoft.Extensions.Localization.dll",
"lib/netstandard2.0/Microsoft.Extensions.Localization.xml",
"microsoft.extensions.localization.9.0.1.nupkg.sha512",
"microsoft.extensions.localization.nuspec"
]
},
"Microsoft.Extensions.Localization.Abstractions/9.0.1": {
"sha512": "CABog43lyaZQMjmlktuImCy6zmAzRBaXqN81uPaMQjlp//ISDVYItZPh6KWpWRF4MY/B67X5oDc3JTUpfdocZw==",
"type": "package",
"path": "microsoft.extensions.localization.abstractions/9.0.1",
"files": [
".nupkg.metadata",
".signature.p7s",
"Icon.png",
"THIRD-PARTY-NOTICES.TXT",
"lib/net462/Microsoft.Extensions.Localization.Abstractions.dll",
"lib/net462/Microsoft.Extensions.Localization.Abstractions.xml",
"lib/net9.0/Microsoft.Extensions.Localization.Abstractions.dll",
"lib/net9.0/Microsoft.Extensions.Localization.Abstractions.xml",
"lib/netstandard2.0/Microsoft.Extensions.Localization.Abstractions.dll",
"lib/netstandard2.0/Microsoft.Extensions.Localization.Abstractions.xml",
"microsoft.extensions.localization.abstractions.9.0.1.nupkg.sha512",
"microsoft.extensions.localization.abstractions.nuspec"
]
},
"Microsoft.Extensions.Logging/9.0.9": { "Microsoft.Extensions.Logging/9.0.9": {
"sha512": "MaCB0Y9hNDs4YLu3HCJbo199WnJT8xSgajG1JYGANz9FkseQ5f3v/llu3HxLI6mjDlu7pa7ps9BLPWjKzsAAzQ==", "sha512": "MaCB0Y9hNDs4YLu3HCJbo199WnJT8xSgajG1JYGANz9FkseQ5f3v/llu3HxLI6mjDlu7pa7ps9BLPWjKzsAAzQ==",
"type": "package", "type": "package",
@ -2307,6 +2582,33 @@
"tools/net9.0/Microsoft.NET.WebAssembly.Webcil.dll" "tools/net9.0/Microsoft.NET.WebAssembly.Webcil.dll"
] ]
}, },
"MudBlazor/8.13.0": {
"sha512": "Y6JW93zf8tiVhMSkkL0mZ3ruqjOTNftvVoX3sik6NEnIye+Gs0FXI8rhXfrH2LU79Mw/fOtT5ms3L/Q4TKx2kA==",
"type": "package",
"path": "mudblazor/8.13.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"LICENSE",
"Nuget.png",
"README.md",
"analyzers/dotnet/cs/MudBlazor.Analyzers.dll",
"build/Microsoft.AspNetCore.StaticWebAssetEndpoints.props",
"build/Microsoft.AspNetCore.StaticWebAssets.props",
"build/MudBlazor.props",
"build/MudBlazor.targets",
"buildMultiTargeting/MudBlazor.props",
"buildTransitive/MudBlazor.props",
"lib/net8.0/MudBlazor.dll",
"lib/net8.0/MudBlazor.xml",
"lib/net9.0/MudBlazor.dll",
"lib/net9.0/MudBlazor.xml",
"mudblazor.8.13.0.nupkg.sha512",
"mudblazor.nuspec",
"staticwebassets/MudBlazor.min.css",
"staticwebassets/MudBlazor.min.js"
]
},
"System.IdentityModel.Tokens.Jwt/8.14.0": { "System.IdentityModel.Tokens.Jwt/8.14.0": {
"sha512": "EYGgN/S+HK7S6F3GaaPLFAfK0UzMrkXFyWCvXpQWFYmZln3dqtbyIO7VuTM/iIIPMzkelg8ZLlBPvMhxj6nOAA==", "sha512": "EYGgN/S+HK7S6F3GaaPLFAfK0UzMrkXFyWCvXpQWFYmZln3dqtbyIO7VuTM/iIIPMzkelg8ZLlBPvMhxj6nOAA==",
"type": "package", "type": "package",
@ -2339,11 +2641,14 @@
}, },
"projectFileDependencyGroups": { "projectFileDependencyGroups": {
"net9.0": [ "net9.0": [
"Blazor.Bootstrap >= 3.4.0",
"Blazored.Typeahead >= 4.7.0",
"Microsoft.AspNetCore.Components.WebAssembly >= 9.0.9", "Microsoft.AspNetCore.Components.WebAssembly >= 9.0.9",
"Microsoft.AspNetCore.Components.WebAssembly.DevServer >= 9.0.9", "Microsoft.AspNetCore.Components.WebAssembly.DevServer >= 9.0.9",
"Microsoft.Extensions.Http >= 9.0.9", "Microsoft.Extensions.Http >= 9.0.9",
"Microsoft.NET.ILLink.Tasks >= 9.0.9", "Microsoft.NET.ILLink.Tasks >= 9.0.9",
"Microsoft.NET.Sdk.WebAssembly.Pack >= 9.0.9", "Microsoft.NET.Sdk.WebAssembly.Pack >= 9.0.9",
"MudBlazor >= 8.13.0",
"OnProfNext.Shared >= 1.0.0", "OnProfNext.Shared >= 1.0.0",
"System.IdentityModel.Tokens.Jwt >= 8.14.0" "System.IdentityModel.Tokens.Jwt >= 8.14.0"
] ]
@ -2403,6 +2708,14 @@
"net9.0": { "net9.0": {
"targetAlias": "net9.0", "targetAlias": "net9.0",
"dependencies": { "dependencies": {
"Blazor.Bootstrap": {
"target": "Package",
"version": "[3.4.0, )"
},
"Blazored.Typeahead": {
"target": "Package",
"version": "[4.7.0, )"
},
"Microsoft.AspNetCore.Components.WebAssembly": { "Microsoft.AspNetCore.Components.WebAssembly": {
"target": "Package", "target": "Package",
"version": "[9.0.9, )" "version": "[9.0.9, )"
@ -2428,6 +2741,10 @@
"version": "[9.0.9, )", "version": "[9.0.9, )",
"autoReferenced": true "autoReferenced": true
}, },
"MudBlazor": {
"target": "Package",
"version": "[8.13.0, )"
},
"System.IdentityModel.Tokens.Jwt": { "System.IdentityModel.Tokens.Jwt": {
"target": "Package", "target": "Package",
"version": "[8.14.0, )" "version": "[8.14.0, )"

View File

@ -1,9 +1,11 @@
{ {
"version": 2, "version": 2,
"dgSpecHash": "J3t2sm//lQ8=", "dgSpecHash": "NE5DfiP76Cc=",
"success": true, "success": true,
"projectFilePath": "C:\\DEVQPDC\\Proj2\\OnProfNext\\OnProfNext.Client\\OnProfNext.Client.csproj", "projectFilePath": "C:\\DEVQPDC\\Proj2\\OnProfNext\\OnProfNext.Client\\OnProfNext.Client.csproj",
"expectedPackageFiles": [ "expectedPackageFiles": [
"C:\\Users\\MarcWieland\\.nuget\\packages\\blazor.bootstrap\\3.4.0\\blazor.bootstrap.3.4.0.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\blazored.typeahead\\4.7.0\\blazored.typeahead.4.7.0.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.aspnetcore.authorization\\9.0.9\\microsoft.aspnetcore.authorization.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.aspnetcore.authorization\\9.0.9\\microsoft.aspnetcore.authorization.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.aspnetcore.components\\9.0.9\\microsoft.aspnetcore.components.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.aspnetcore.components\\9.0.9\\microsoft.aspnetcore.components.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.aspnetcore.components.analyzers\\9.0.9\\microsoft.aspnetcore.components.analyzers.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.aspnetcore.components.analyzers\\9.0.9\\microsoft.aspnetcore.components.analyzers.9.0.9.nupkg.sha512",
@ -25,6 +27,8 @@
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\9.0.9\\microsoft.extensions.fileproviders.physical.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\9.0.9\\microsoft.extensions.fileproviders.physical.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\9.0.9\\microsoft.extensions.filesystemglobbing.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\9.0.9\\microsoft.extensions.filesystemglobbing.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.http\\9.0.9\\microsoft.extensions.http.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.http\\9.0.9\\microsoft.extensions.http.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.localization\\9.0.1\\microsoft.extensions.localization.9.0.1.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.localization.abstractions\\9.0.1\\microsoft.extensions.localization.abstractions.9.0.1.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.logging\\9.0.9\\microsoft.extensions.logging.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.logging\\9.0.9\\microsoft.extensions.logging.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\9.0.9\\microsoft.extensions.logging.abstractions.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.logging.abstractions\\9.0.9\\microsoft.extensions.logging.abstractions.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.options\\9.0.9\\microsoft.extensions.options.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.extensions.options\\9.0.9\\microsoft.extensions.options.9.0.9.nupkg.sha512",
@ -38,6 +42,7 @@
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.jsinterop.webassembly\\9.0.9\\microsoft.jsinterop.webassembly.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.jsinterop.webassembly\\9.0.9\\microsoft.jsinterop.webassembly.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.net.illink.tasks\\9.0.9\\microsoft.net.illink.tasks.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.net.illink.tasks\\9.0.9\\microsoft.net.illink.tasks.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.net.sdk.webassembly.pack\\9.0.9\\microsoft.net.sdk.webassembly.pack.9.0.9.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.net.sdk.webassembly.pack\\9.0.9\\microsoft.net.sdk.webassembly.pack.9.0.9.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\mudblazor\\8.13.0\\mudblazor.8.13.0.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\system.identitymodel.tokens.jwt\\8.14.0\\system.identitymodel.tokens.jwt.8.14.0.nupkg.sha512", "C:\\Users\\MarcWieland\\.nuget\\packages\\system.identitymodel.tokens.jwt\\8.14.0\\system.identitymodel.tokens.jwt.8.14.0.nupkg.sha512",
"C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.netcore.app.runtime.mono.browser-wasm\\9.0.9\\microsoft.netcore.app.runtime.mono.browser-wasm.9.0.9.nupkg.sha512" "C:\\Users\\MarcWieland\\.nuget\\packages\\microsoft.netcore.app.runtime.mono.browser-wasm\\9.0.9\\microsoft.netcore.app.runtime.mono.browser-wasm.9.0.9.nupkg.sha512"
], ],

View File

@ -10,6 +10,9 @@
<link rel="stylesheet" href="css/app.css" /> <link rel="stylesheet" href="css/app.css" />
<link rel="icon" type="image/png" href="favicon.png" /> <link rel="icon" type="image/png" href="favicon.png" />
<link href="OnProfNext.Client.styles.css" rel="stylesheet" /> <link href="OnProfNext.Client.styles.css" rel="stylesheet" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css">
<link href="_content/Blazor.Bootstrap/blazor.bootstrap.css" rel="stylesheet" />
</head> </head>
<body> <body>
@ -38,6 +41,7 @@
<script src="js/init.js"></script> <script src="js/init.js"></script>
<script src="_framework/blazor.webassembly.js"></script> <script src="_framework/blazor.webassembly.js"></script>
<script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script>
</body> </body>

View File

@ -0,0 +1,59 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using OnProfNext.Shared.Models;
namespace OnProfNext.Server.Configurations
{
public class OrderConfiguration : IEntityTypeConfiguration<Order>
{
public void Configure(EntityTypeBuilder<Order> entity)
{
entity.ToTable("Orders");
entity.HasKey(o => o.Id);
entity.Property(o => o.Auftragsnummer)
.IsRequired()
.HasMaxLength(50);
entity.Property(o => o.Titel)
.IsRequired()
.HasMaxLength(255);
entity.Property(o => o.Status)
.IsRequired()
.HasMaxLength(50)
.HasDefaultValue("Geplant");
entity.Property(o => o.Planstunden)
.HasPrecision(10, 2)
.HasDefaultValue(0);
entity.Property(o => o.Iststunden)
.HasPrecision(10, 2)
.HasDefaultValue(0);
entity.Property(o => o.MandantId)
.IsRequired();
entity.Property(o => o.CreatedAt)
.HasDefaultValueSql("GETUTCDATE()");
entity.Property(o => o.UpdatedAt)
.HasDefaultValueSql("GETUTCDATE()");
entity.HasOne(o => o.Project)
.WithMany(p => p.Orders)
.HasForeignKey(o => o.ProjectId)
.OnDelete(DeleteBehavior.Cascade);
entity.HasMany(o => o.OrderUsers)
.WithOne(ou => ou.Order)
.HasForeignKey(ou => ou.OrderId)
.OnDelete(DeleteBehavior.Cascade);
}
}
}

View File

@ -0,0 +1,25 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using OnProfNext.Shared.Models;
namespace OnProfNext.Server.Configurations
{
public class OrderUserConfiguration : IEntityTypeConfiguration<OrderUser>
{
public void Configure(EntityTypeBuilder<OrderUser> entity)
{
entity.ToTable("OrderUsers");
entity.HasKey(ou => new { ou.OrderId, ou.UserId });
entity.HasOne(ou => ou.Order)
.WithMany(o => o.OrderUsers)
.HasForeignKey(ou => ou.OrderId)
.OnDelete(DeleteBehavior.Cascade);
entity.HasOne(ou => ou.User)
.WithMany()
.HasForeignKey(ou => ou.UserId)
.OnDelete(DeleteBehavior.Cascade);
}
}
}

View File

@ -0,0 +1,47 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using OnProfNext.Shared.Models;
namespace OnProfNext.Server.Configurations
{
public class ProjectConfiguration : IEntityTypeConfiguration<Project>
{
public void Configure(EntityTypeBuilder<Project> entity)
{
entity.ToTable("Projects");
// Primary Key
entity.HasKey(p => p.Id);
// Project Name
entity.Property(p => p.ProjectName)
.IsRequired()
.HasMaxLength(200);
// Description
entity.Property(p => p.Description)
.HasMaxLength(1000);
// Project Manager
entity.Property(p => p.ProjectManager)
.HasMaxLength(100);
// Status
entity.Property(p => p.Status)
.IsRequired()
.HasMaxLength(50)
.HasDefaultValue("Geplant");
// Start Date
entity.Property(p => p.StartDate)
.IsRequired()
.HasDefaultValueSql("SYSDATETIME()");
// End Date
entity.Property(p => p.EndDate);
// Mandant
entity.Property(p => p.MandantId)
.HasDefaultValue(1);
// Timestamps
entity.Property(p => p.CreatedAt)
.HasDefaultValueSql("SYSDATETIME()")
.ValueGeneratedOnAdd();
entity.Property(p => p.UpdatedAt)
.HasDefaultValueSql("SYSDATETIME()")
.ValueGeneratedOnAddOrUpdate();
}
}
}

View File

@ -0,0 +1,28 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using OnProfNext.Shared.Models;
namespace OnProfNext.Server.Configurations
{
public class ProjectUserConfiguration : IEntityTypeConfiguration<ProjectUser>
{
public void Configure(EntityTypeBuilder<ProjectUser> entity)
{
entity.ToTable("ProjectUsers");
// Composite Primary Key
entity.HasKey(pu => new { pu.ProjectId, pu.UserId });
entity.HasOne(pu => pu.Project)
.WithMany(p => p.ProjectUsers)
.HasForeignKey(pu => pu.ProjectId)
.OnDelete(DeleteBehavior.Cascade);
entity.HasOne(pu => pu.User)
.WithMany(u => u.ProjectUsers)
.HasForeignKey(pu => pu.UserId)
.OnDelete(DeleteBehavior.Cascade);
}
}
}

View File

@ -0,0 +1,129 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using OnProfNext.Server.Data;
using OnProfNext.Shared.Models;
using OnProfNext.Shared.Models.DTOs;
namespace OnProfNext.Server.Controllers
{
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class OrdersController : ControllerBase
{
private readonly AppDbContext _context;
public OrdersController(AppDbContext context)
{
_context = context;
}
//Get: api/orders/byproject/5
[HttpGet("byproject/{projectId}")]
public async Task<ActionResult<IEnumerable<OrderDto>>> GetOrdersByProject(int projectId)
{
var orders = await _context.Orders
.Where(o => o.ProjectId == projectId)
.Select(o => new OrderDto
{
Id = o.Id,
ProjectId = o.ProjectId,
Auftragsnummer = o.Auftragsnummer,
Titel = o.Titel,
Status = o.Status,
Planstunden = o.Planstunden,
Iststunden = o.Iststunden,
Projektcode = o.Projektcode,
MandantId = o.MandantId,
CreatedAt = o.CreatedAt,
UpdatedAt = o.UpdatedAt
})
.ToListAsync();
return Ok(orders);
}
//GET: api/orders/5
[HttpGet("{id}")]
public async Task<ActionResult<OrderDto>> GetOrder(int id)
{
var o = await _context.Orders.FindAsync(id);
if (o == null) return NotFound();
return new OrderDto
{
Id = o.Id,
ProjectId = o.ProjectId,
Auftragsnummer = o.Auftragsnummer,
Titel = o.Titel,
Status = o.Status,
Planstunden = o.Planstunden,
Iststunden = o.Iststunden,
Projektcode = o.Projektcode,
MandantId = o.MandantId,
CreatedAt = o.CreatedAt,
UpdatedAt = o.UpdatedAt
};
}
//POST: api/orders
[HttpPost]
public async Task<ActionResult<OrderDto>> CreateOrder(OrderDto dto)
{
var order = new Order
{
ProjectId = dto.ProjectId,
Auftragsnummer = dto.Auftragsnummer,
Titel = dto.Titel,
Status = dto.Status,
Planstunden = dto.Planstunden,
Iststunden = dto.Iststunden,
Projektcode = dto.Projektcode,
MandantId = dto.MandantId,
CreatedAt = DateTime.UtcNow,
UpdatedAt = DateTime.UtcNow
};
_context.Orders.Add(order);
await _context.SaveChangesAsync();
dto.Id = order.Id;
dto.CreatedAt = order.CreatedAt;
dto.UpdatedAt = order.UpdatedAt;
return CreatedAtAction(nameof(GetOrder), new { id = order.Id }, dto);
}
//PUT: api/orders/5
[HttpPut("{id}")]
public async Task<IActionResult> UpdateOrder(int id, OrderDto dto)
{
var order = await _context.Orders.FindAsync(id);
if (order == null) return NotFound();
order.Titel = dto.Titel;
order.Status = dto.Status;
order.Planstunden = dto.Planstunden;
order.Iststunden = dto.Iststunden;
order.Projektcode = dto.Projektcode;
order.UpdatedAt = DateTime.UtcNow;
await _context.SaveChangesAsync();
return NoContent();
}
// DELETE: api/orders/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteOrder(int id)
{
var order = await _context.Orders.FindAsync(id);
if (order == null) return NotFound();
_context.Orders.Remove(order);
await _context.SaveChangesAsync();
return NoContent();
}
}
}

View File

@ -0,0 +1,147 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using OnProfNext.Server.Data;
using OnProfNext.Shared.Models;
using OnProfNext.Shared.Models.DTOs;
namespace OnProfNext.Server.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ProjectController : ControllerBase
{
private readonly AppDbContext _context;
public ProjectController(AppDbContext context)
{
_context = context;
}
//GET api/project
[HttpGet]
public async Task<ActionResult<IEnumerable<ProjectDto>>> GetProjects()
{
var projects = await _context.Set<Project>().Include(p => p.ProjectUsers).ThenInclude(pu => pu.User).ToListAsync();
var result = projects.Select(p => new ProjectDto
{
Id = p.Id,
ProjectName = p.ProjectName,
Description = p.Description,
Status = p.Status,
StartDate = p.StartDate,
EndDate = p.EndDate,
MandantId = p.MandantId,
CreatedAt = p.CreatedAt,
UpdatedAt = p.UpdatedAt,
ProjectManagers = p.ProjectUsers
.Select(pu => new UserShortDto
{
Id = pu.User.Id,
Username = pu.User.Username,
FirstName = pu.User.FirstName,
LastName = pu.User.LastName
}).ToList()
}).ToList();
return Ok(result);
}
//GET: api/project/5
[HttpGet("{id}")]
public async Task<ActionResult<Project>> GetProject(int id)
{
var project = await _context.Set<Project>().FindAsync(id);
if (project == null)
{
return NotFound();
}
return project;
}
//POST : api/project
[HttpPost]
public async Task<ActionResult<ProjectDto>> CreateProject(ProjectCreateDto dto)
{
var project = new Project
{
ProjectName = dto.ProjectName,
Description = dto.Description,
Status = dto.Status,
StartDate = dto.StartDate,
EndDate = dto.EndDate,
MandantId = dto.MandantId,
CreatedAt = DateTime.UtcNow,
UpdatedAt = DateTime.UtcNow
};
_context.Projects.Add(project);
await _context.SaveChangesAsync();
// Relationseinträge hinzufügen
foreach (var userId in dto.ProjectManagerIds)
{
_context.ProjectUsers.Add(new ProjectUser
{
ProjectId = project.Id,
UserId = userId
});
}
await _context.SaveChangesAsync();
return CreatedAtAction(nameof(GetProjects), new { id = project.Id }, dto);
}
//PUT: api/project/5
[HttpPut("{id}")]
public async Task<IActionResult> UpdateProject(int id, ProjectCreateDto dto)
{
var project = await _context.Projects
.Include(p => p.ProjectUsers)
.FirstOrDefaultAsync(p => p.Id == id);
if (project == null)
return NotFound();
// Grunddaten aktualisieren
project.ProjectName = dto.ProjectName;
project.Description = dto.Description;
project.Status = dto.Status;
project.StartDate = dto.StartDate;
project.EndDate = dto.EndDate;
project.UpdatedAt = DateTime.UtcNow;
// Projektleiter aktualisieren
project.ProjectUsers.Clear();
foreach (var userId in dto.ProjectManagerIds)
{
project.ProjectUsers.Add(new ProjectUser
{
ProjectId = project.Id,
UserId = userId
});
}
await _context.SaveChangesAsync();
return NoContent();
}
//DELETE: api/project/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteProject(int id)
{
var project = await _context.Projects.FindAsync(id);
if (project == null)
return NotFound();
_context.Projects.Remove(project);
await _context.SaveChangesAsync();
return NoContent();
}
}
}

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using OnProfNext.Server.Data; using OnProfNext.Server.Data;
@ -39,6 +40,7 @@ namespace OnProfNext.Server.Controllers
} }
//POST: api/users //POST: api/users
[AllowAnonymous]
[HttpPost] [HttpPost]
public async Task<ActionResult<User>> CreateUser(User user) public async Task<ActionResult<User>> CreateUser(User user)
{ {

View File

@ -11,6 +11,10 @@ namespace OnProfNext.Server.Data
} }
public DbSet<User> Users => Set<User>(); public DbSet<User> Users => Set<User>();
public DbSet<Project> Projects => Set<Project>();
public DbSet<ProjectUser> ProjectUsers => Set<ProjectUser>();
public DbSet<OrderUser> OrderUsers => Set<OrderUser>();
public DbSet<Order> Orders => Set<Order>();
protected override void OnModelCreating(ModelBuilder modelBuilder) protected override void OnModelCreating(ModelBuilder modelBuilder)
{ {
@ -18,6 +22,10 @@ namespace OnProfNext.Server.Data
//Leitet aus UserConfiguration die Konfiguration der User-Entität ab //Leitet aus UserConfiguration die Konfiguration der User-Entität ab
modelBuilder.ApplyConfiguration(new UserConfiguration()); modelBuilder.ApplyConfiguration(new UserConfiguration());
modelBuilder.ApplyConfiguration(new ProjectConfiguration());
modelBuilder.ApplyConfiguration(new ProjectUserConfiguration());
modelBuilder.ApplyConfiguration(new OrderUserConfiguration());
modelBuilder.ApplyConfiguration(new OrderConfiguration());
} }
} }
} }

View File

@ -0,0 +1,144 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using OnProfNext.Server.Data;
#nullable disable
namespace OnProfNext.Server.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20251014114821_AddProjectsTable")]
partial class AddProjectsTable
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.9")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("OnProfNext.Shared.Models.Project", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Description")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<DateTime?>("EndDate")
.HasColumnType("datetime2");
b.Property<int>("MandantId")
.ValueGeneratedOnAdd()
.HasColumnType("int")
.HasDefaultValue(1);
b.Property<string>("ProjectManager")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("ProjectName")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTime>("StartDate")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Status")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)")
.HasDefaultValue("Geplant");
b.Property<DateTime>("UpdatedAt")
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.HasKey("Id");
b.ToTable("Projects", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Email")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("FirstName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<bool>("IsActive")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(true);
b.Property<string>("LastName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<int>("MandantId")
.ValueGeneratedOnAdd()
.HasColumnType("int")
.HasDefaultValue(1);
b.Property<string>("PasswordHash")
.IsRequired()
.HasMaxLength(512)
.HasColumnType("nvarchar(512)");
b.Property<DateTime>("UpdatedAt")
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.HasKey("Id");
b.ToTable("Users", (string)null);
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,43 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OnProfNext.Server.Migrations
{
/// <inheritdoc />
public partial class AddProjectsTable : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Projects",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ProjectName = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
Description = table.Column<string>(type: "nvarchar(1000)", maxLength: 1000, nullable: true),
ProjectManager = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
Status = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false, defaultValue: "Geplant"),
StartDate = table.Column<DateTime>(type: "datetime2", nullable: false, defaultValueSql: "SYSDATETIME()"),
EndDate = table.Column<DateTime>(type: "datetime2", nullable: true),
MandantId = table.Column<int>(type: "int", nullable: false, defaultValue: 1),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, defaultValueSql: "SYSDATETIME()"),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, defaultValueSql: "SYSDATETIME()")
},
constraints: table =>
{
table.PrimaryKey("PK_Projects", x => x.Id);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Projects");
}
}
}

View File

@ -0,0 +1,303 @@
// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using OnProfNext.Server.Data;
#nullable disable
namespace OnProfNext.Server.Migrations
{
[DbContext(typeof(AppDbContext))]
[Migration("20251015102708_FixProjectUserRelation")]
partial class FixProjectUserRelation
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "9.0.9")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("OnProfNext.Shared.Models.Order", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("Auftragsnummer")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<DateTime>("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("GETUTCDATE()");
b.Property<decimal>("Iststunden")
.ValueGeneratedOnAdd()
.HasPrecision(10, 2)
.HasColumnType("decimal(10,2)")
.HasDefaultValue(0m);
b.Property<int>("MandantId")
.HasColumnType("int");
b.Property<decimal>("Planstunden")
.ValueGeneratedOnAdd()
.HasPrecision(10, 2)
.HasColumnType("decimal(10,2)")
.HasDefaultValue(0m);
b.Property<int>("ProjectId")
.HasColumnType("int");
b.Property<string>("Projektcode")
.HasColumnType("nvarchar(max)");
b.Property<string>("Status")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)")
.HasDefaultValue("Geplant");
b.Property<string>("Titel")
.IsRequired()
.HasMaxLength(255)
.HasColumnType("nvarchar(255)");
b.Property<DateTime>("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("GETUTCDATE()");
b.HasKey("Id");
b.HasIndex("ProjectId");
b.ToTable("Orders", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.OrderUser", b =>
{
b.Property<int>("OrderId")
.HasColumnType("int");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("OrderId", "UserId");
b.HasIndex("UserId");
b.ToTable("OrderUsers", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.Project", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Description")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<DateTime?>("EndDate")
.HasColumnType("datetime2");
b.Property<int>("MandantId")
.ValueGeneratedOnAdd()
.HasColumnType("int")
.HasDefaultValue(1);
b.Property<string>("ProjectManager")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("ProjectName")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTime>("StartDate")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Status")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)")
.HasDefaultValue("Geplant");
b.Property<DateTime>("UpdatedAt")
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.HasKey("Id");
b.ToTable("Projects", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.ProjectUser", b =>
{
b.Property<int>("ProjectId")
.HasColumnType("int");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("ProjectId", "UserId");
b.HasIndex("UserId");
b.ToTable("ProjectUsers", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.User", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Email")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("FirstName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<bool>("IsActive")
.ValueGeneratedOnAdd()
.HasColumnType("bit")
.HasDefaultValue(true);
b.Property<string>("LastName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<int>("MandantId")
.ValueGeneratedOnAdd()
.HasColumnType("int")
.HasDefaultValue(1);
b.Property<string>("PasswordHash")
.IsRequired()
.HasMaxLength(512)
.HasColumnType("nvarchar(512)");
b.Property<DateTime>("UpdatedAt")
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Username")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.HasKey("Id");
b.ToTable("Users", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.Order", b =>
{
b.HasOne("OnProfNext.Shared.Models.Project", "Project")
.WithMany("Orders")
.HasForeignKey("ProjectId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Project");
});
modelBuilder.Entity("OnProfNext.Shared.Models.OrderUser", b =>
{
b.HasOne("OnProfNext.Shared.Models.Order", "Order")
.WithMany("OrderUsers")
.HasForeignKey("OrderId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OnProfNext.Shared.Models.User", "User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Order");
b.Navigation("User");
});
modelBuilder.Entity("OnProfNext.Shared.Models.ProjectUser", b =>
{
b.HasOne("OnProfNext.Shared.Models.Project", "Project")
.WithMany("ProjectUsers")
.HasForeignKey("ProjectId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OnProfNext.Shared.Models.User", "User")
.WithMany("ProjectUsers")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Project");
b.Navigation("User");
});
modelBuilder.Entity("OnProfNext.Shared.Models.Order", b =>
{
b.Navigation("OrderUsers");
});
modelBuilder.Entity("OnProfNext.Shared.Models.Project", b =>
{
b.Navigation("Orders");
b.Navigation("ProjectUsers");
});
modelBuilder.Entity("OnProfNext.Shared.Models.User", b =>
{
b.Navigation("ProjectUsers");
});
#pragma warning restore 612, 618
}
}
}

View File

@ -0,0 +1,119 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace OnProfNext.Server.Migrations
{
/// <inheritdoc />
public partial class FixProjectUserRelation : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Orders",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ProjectId = table.Column<int>(type: "int", nullable: false),
Auftragsnummer = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
Titel = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: false),
Status = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false, defaultValue: "Geplant"),
Planstunden = table.Column<decimal>(type: "decimal(10,2)", precision: 10, scale: 2, nullable: false, defaultValue: 0m),
Iststunden = table.Column<decimal>(type: "decimal(10,2)", precision: 10, scale: 2, nullable: false, defaultValue: 0m),
Projektcode = table.Column<string>(type: "nvarchar(max)", nullable: true),
MandantId = table.Column<int>(type: "int", nullable: false),
CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, defaultValueSql: "GETUTCDATE()"),
UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false, defaultValueSql: "GETUTCDATE()")
},
constraints: table =>
{
table.PrimaryKey("PK_Orders", x => x.Id);
table.ForeignKey(
name: "FK_Orders_Projects_ProjectId",
column: x => x.ProjectId,
principalTable: "Projects",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "ProjectUsers",
columns: table => new
{
ProjectId = table.Column<int>(type: "int", nullable: false),
UserId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_ProjectUsers", x => new { x.ProjectId, x.UserId });
table.ForeignKey(
name: "FK_ProjectUsers_Projects_ProjectId",
column: x => x.ProjectId,
principalTable: "Projects",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_ProjectUsers_Users_UserId",
column: x => x.UserId,
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "OrderUsers",
columns: table => new
{
OrderId = table.Column<int>(type: "int", nullable: false),
UserId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_OrderUsers", x => new { x.OrderId, x.UserId });
table.ForeignKey(
name: "FK_OrderUsers_Orders_OrderId",
column: x => x.OrderId,
principalTable: "Orders",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_OrderUsers_Users_UserId",
column: x => x.UserId,
principalTable: "Users",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_Orders_ProjectId",
table: "Orders",
column: "ProjectId");
migrationBuilder.CreateIndex(
name: "IX_OrderUsers_UserId",
table: "OrderUsers",
column: "UserId");
migrationBuilder.CreateIndex(
name: "IX_ProjectUsers_UserId",
table: "ProjectUsers",
column: "UserId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "OrderUsers");
migrationBuilder.DropTable(
name: "ProjectUsers");
migrationBuilder.DropTable(
name: "Orders");
}
}
}

View File

@ -22,6 +22,155 @@ namespace OnProfNext.Server.Migrations
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("OnProfNext.Shared.Models.Order", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<string>("Auftragsnummer")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<DateTime>("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("GETUTCDATE()");
b.Property<decimal>("Iststunden")
.ValueGeneratedOnAdd()
.HasPrecision(10, 2)
.HasColumnType("decimal(10,2)")
.HasDefaultValue(0m);
b.Property<int>("MandantId")
.HasColumnType("int");
b.Property<decimal>("Planstunden")
.ValueGeneratedOnAdd()
.HasPrecision(10, 2)
.HasColumnType("decimal(10,2)")
.HasDefaultValue(0m);
b.Property<int>("ProjectId")
.HasColumnType("int");
b.Property<string>("Projektcode")
.HasColumnType("nvarchar(max)");
b.Property<string>("Status")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)")
.HasDefaultValue("Geplant");
b.Property<string>("Titel")
.IsRequired()
.HasMaxLength(255)
.HasColumnType("nvarchar(255)");
b.Property<DateTime>("UpdatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("GETUTCDATE()");
b.HasKey("Id");
b.HasIndex("ProjectId");
b.ToTable("Orders", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.OrderUser", b =>
{
b.Property<int>("OrderId")
.HasColumnType("int");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("OrderId", "UserId");
b.HasIndex("UserId");
b.ToTable("OrderUsers", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.Project", b =>
{
b.Property<int>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("int");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<DateTime>("CreatedAt")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Description")
.HasMaxLength(1000)
.HasColumnType("nvarchar(1000)");
b.Property<DateTime?>("EndDate")
.HasColumnType("datetime2");
b.Property<int>("MandantId")
.ValueGeneratedOnAdd()
.HasColumnType("int")
.HasDefaultValue(1);
b.Property<string>("ProjectManager")
.HasMaxLength(100)
.HasColumnType("nvarchar(100)");
b.Property<string>("ProjectName")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<DateTime>("StartDate")
.ValueGeneratedOnAdd()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.Property<string>("Status")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)")
.HasDefaultValue("Geplant");
b.Property<DateTime>("UpdatedAt")
.ValueGeneratedOnAddOrUpdate()
.HasColumnType("datetime2")
.HasDefaultValueSql("SYSDATETIME()");
b.HasKey("Id");
b.ToTable("Projects", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.ProjectUser", b =>
{
b.Property<int>("ProjectId")
.HasColumnType("int");
b.Property<int>("UserId")
.HasColumnType("int");
b.HasKey("ProjectId", "UserId");
b.HasIndex("UserId");
b.ToTable("ProjectUsers", (string)null);
});
modelBuilder.Entity("OnProfNext.Shared.Models.User", b => modelBuilder.Entity("OnProfNext.Shared.Models.User", b =>
{ {
b.Property<int>("Id") b.Property<int>("Id")
@ -79,6 +228,72 @@ namespace OnProfNext.Server.Migrations
b.ToTable("Users", (string)null); b.ToTable("Users", (string)null);
}); });
modelBuilder.Entity("OnProfNext.Shared.Models.Order", b =>
{
b.HasOne("OnProfNext.Shared.Models.Project", "Project")
.WithMany("Orders")
.HasForeignKey("ProjectId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Project");
});
modelBuilder.Entity("OnProfNext.Shared.Models.OrderUser", b =>
{
b.HasOne("OnProfNext.Shared.Models.Order", "Order")
.WithMany("OrderUsers")
.HasForeignKey("OrderId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OnProfNext.Shared.Models.User", "User")
.WithMany()
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Order");
b.Navigation("User");
});
modelBuilder.Entity("OnProfNext.Shared.Models.ProjectUser", b =>
{
b.HasOne("OnProfNext.Shared.Models.Project", "Project")
.WithMany("ProjectUsers")
.HasForeignKey("ProjectId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("OnProfNext.Shared.Models.User", "User")
.WithMany("ProjectUsers")
.HasForeignKey("UserId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Project");
b.Navigation("User");
});
modelBuilder.Entity("OnProfNext.Shared.Models.Order", b =>
{
b.Navigation("OrderUsers");
});
modelBuilder.Entity("OnProfNext.Shared.Models.Project", b =>
{
b.Navigation("Orders");
b.Navigation("ProjectUsers");
});
modelBuilder.Entity("OnProfNext.Shared.Models.User", b =>
{
b.Navigation("ProjectUsers");
});
#pragma warning restore 612, 618 #pragma warning restore 612, 618
} }
} }

View File

@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("OnProfNext.Server")] [assembly: System.Reflection.AssemblyCompanyAttribute("OnProfNext.Server")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6bcf3e881b1402add0ceb5d438103536834114dd")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+789d44a34459f0132cb03433abffa66c9ff48824")]
[assembly: System.Reflection.AssemblyProductAttribute("OnProfNext.Server")] [assembly: System.Reflection.AssemblyProductAttribute("OnProfNext.Server")]
[assembly: System.Reflection.AssemblyTitleAttribute("OnProfNext.Server")] [assembly: System.Reflection.AssemblyTitleAttribute("OnProfNext.Server")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
28f7dc6265a3f6468f736cd5c924596d9867077f5ca73729a232bb1a9c8b4edf 0112fdf05bcbbdf85e9b7a9cb66a9b7812c7b77cd789cf405fa10334aba74a96

View File

@ -1 +1 @@
237c758b889ba96bbafce38135c8813505d8d59eece50137f5595ffc16cd4f0e 1649fe5519326da7f926266c5793daba5ff377a06b40397fb607e486ec674434

View File

@ -1 +1 @@
{"GlobalPropertiesHash":"FgKIeBZ9Ztoqric5Nb7d8Ix++iErS9q0YOlj6fkVIbM=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["PmzPzDLX5kem67gWwuODY2y/hyQd8nKfjwCe/ukzc7c=","LY\u002BzkbCH4BDCRNsN4e4hLpvYL/q343HA7aPqxLAnut4=","JcRKU2Zb4DUaR9Im1Nhj21bq9CS6zqrEyUlIptRQGPk=","oWGMgCB3vBEn8UDnk8gLGSmHUQp9nje0xZwa9jbcJds=","j4zvFombPCFDsE\u002BVLdnMhkrq8OLrHidrxFTLuLU5vMQ=","KJJmmS83E4AFqRDn5z9krFmkNtj5EIaWLgIS37POGr8=","xQg7Ozplq1cFDQPPrR5U6g5tfTz0Tx8zEGJriilBzbY=","xXIxgYvMtC9sEkafVNlrcH1Pv5l0FLdyBQPAp5BPAeY=","tf9mfbbiGyrn8DwXufw5UsDjSSX2bb4/v03tlENYAyQ=","HCEmdDnOaqxSVlCudFM7kXBMB\u002BTnSOIqCZaIDo2\u002BkmY=","OKkUjMjTxHumPV8kCwmKIe5EWTGXpicq5nPdBf1UjgU=","nGJ1y3WFrH56ZKC6r2VTpPKOcPajDLQnhXocDhcXmRg=","cGx77cv7nA0DdmaIS2X36NmMdiNb53a\u002BFYrSSYo5FuI=","FtlA9l0oAxySvxoKIT9fzLZajRC\u002Bb\u002B5TJipa9p57wiQ=","eFkUF78KbACBytwdzYneghMgzZWrsA02z0/ACTjf1LY=","YMmNzNRYlNUaY02cz66xLjTOWrv1loEdDwImShCe1jo=","PeS/S8mByULK0UONqH\u002ByZPgxm1uqX9tdeBSbGFZXR4s=","jKTJ7g0eCxEdDl05oVJEtlTpRXiB2qnvMi2PxRdZ9zc=","rzYf1UGwzK\u002Bt/dnYYqlMR7QuKGfkx/vU7t8YI/Qdey0=","Ww0AK17g0XIkjndgpYH6uveAS5QZvgE6TKFMPxHZgK8=","GA1u7GN8CpPjgtVF9p5meRcHD1sfLghHWP4j/Dqg1Lg=","SF9qmJCiNAHDHHnVc2cEt2z1mO82I0VggENUI8NSZqk=","qCDwNzaKuXnkV0G76t21N4pVOCPzJWmMDrEdjFbCXoc=","iMVw0eiXFIR8VogqY0SuhHCe3w\u002BRtCVecwImsxPMzTw=","HZFxsQaTWeyRUw50nxUt9gRfpEPRI3OFp6NOU5frds0=","2E2DXizaWyyz5hJGy5kQ608yc9QroQLLKm2qQtr4/kU=","GJfwFUk2fZZkZmk0TMk\u002BrB1iqzGaYrLg7MFHXI9oaQM=","XFwG7JLxXxSp7GJoSb8NffDaAy8YL0bpfxI4XZ0qH0s=","rpaQmELSXW5qZL9CsRJ8FOFKY1yeKUdSxG9xjxoX0is=","XVHzMEKdTXTKmEzFc4wyTQm4pXfy5\u002BzCWIcX5YVPqEc="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"FgKIeBZ9Ztoqric5Nb7d8Ix++iErS9q0YOlj6fkVIbM=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["PmzPzDLX5kem67gWwuODY2y/hyQd8nKfjwCe/ukzc7c=","LY\u002BzkbCH4BDCRNsN4e4hLpvYL/q343HA7aPqxLAnut4=","JcRKU2Zb4DUaR9Im1Nhj21bq9CS6zqrEyUlIptRQGPk=","oWGMgCB3vBEn8UDnk8gLGSmHUQp9nje0xZwa9jbcJds=","j4zvFombPCFDsE\u002BVLdnMhkrq8OLrHidrxFTLuLU5vMQ=","KJJmmS83E4AFqRDn5z9krFmkNtj5EIaWLgIS37POGr8=","xQg7Ozplq1cFDQPPrR5U6g5tfTz0Tx8zEGJriilBzbY=","xXIxgYvMtC9sEkafVNlrcH1Pv5l0FLdyBQPAp5BPAeY=","tf9mfbbiGyrn8DwXufw5UsDjSSX2bb4/v03tlENYAyQ=","HCEmdDnOaqxSVlCudFM7kXBMB\u002BTnSOIqCZaIDo2\u002BkmY=","OKkUjMjTxHumPV8kCwmKIe5EWTGXpicq5nPdBf1UjgU=","nGJ1y3WFrH56ZKC6r2VTpPKOcPajDLQnhXocDhcXmRg=","cGx77cv7nA0DdmaIS2X36NmMdiNb53a\u002BFYrSSYo5FuI=","FtlA9l0oAxySvxoKIT9fzLZajRC\u002Bb\u002B5TJipa9p57wiQ=","eFkUF78KbACBytwdzYneghMgzZWrsA02z0/ACTjf1LY=","YMmNzNRYlNUaY02cz66xLjTOWrv1loEdDwImShCe1jo=","PeS/S8mByULK0UONqH\u002ByZPgxm1uqX9tdeBSbGFZXR4s=","jKTJ7g0eCxEdDl05oVJEtlTpRXiB2qnvMi2PxRdZ9zc=","rzYf1UGwzK\u002Bt/dnYYqlMR7QuKGfkx/vU7t8YI/Qdey0=","Ww0AK17g0XIkjndgpYH6uveAS5QZvgE6TKFMPxHZgK8=","GA1u7GN8CpPjgtVF9p5meRcHD1sfLghHWP4j/Dqg1Lg=","SF9qmJCiNAHDHHnVc2cEt2z1mO82I0VggENUI8NSZqk=","qCDwNzaKuXnkV0G76t21N4pVOCPzJWmMDrEdjFbCXoc=","iMVw0eiXFIR8VogqY0SuhHCe3w\u002BRtCVecwImsxPMzTw=","HZFxsQaTWeyRUw50nxUt9gRfpEPRI3OFp6NOU5frds0=","2E2DXizaWyyz5hJGy5kQ608yc9QroQLLKm2qQtr4/kU=","GJfwFUk2fZZkZmk0TMk\u002BrB1iqzGaYrLg7MFHXI9oaQM=","XFwG7JLxXxSp7GJoSb8NffDaAy8YL0bpfxI4XZ0qH0s=","rpaQmELSXW5qZL9CsRJ8FOFKY1yeKUdSxG9xjxoX0is=","L8osGMPfA4plP8\u002BDGlloF818jpj8bQjUIRsSPqAmmLM="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@ -1 +1 @@
{"GlobalPropertiesHash":"TJ2LTRuPMY5dh+Ys0sp6meZCDAgoVVT755nQ9dkxJ+U=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["PmzPzDLX5kem67gWwuODY2y/hyQd8nKfjwCe/ukzc7c=","LY\u002BzkbCH4BDCRNsN4e4hLpvYL/q343HA7aPqxLAnut4=","JcRKU2Zb4DUaR9Im1Nhj21bq9CS6zqrEyUlIptRQGPk=","oWGMgCB3vBEn8UDnk8gLGSmHUQp9nje0xZwa9jbcJds=","j4zvFombPCFDsE\u002BVLdnMhkrq8OLrHidrxFTLuLU5vMQ=","KJJmmS83E4AFqRDn5z9krFmkNtj5EIaWLgIS37POGr8=","xQg7Ozplq1cFDQPPrR5U6g5tfTz0Tx8zEGJriilBzbY=","xXIxgYvMtC9sEkafVNlrcH1Pv5l0FLdyBQPAp5BPAeY=","tf9mfbbiGyrn8DwXufw5UsDjSSX2bb4/v03tlENYAyQ=","HCEmdDnOaqxSVlCudFM7kXBMB\u002BTnSOIqCZaIDo2\u002BkmY=","OKkUjMjTxHumPV8kCwmKIe5EWTGXpicq5nPdBf1UjgU=","nGJ1y3WFrH56ZKC6r2VTpPKOcPajDLQnhXocDhcXmRg=","cGx77cv7nA0DdmaIS2X36NmMdiNb53a\u002BFYrSSYo5FuI=","FtlA9l0oAxySvxoKIT9fzLZajRC\u002Bb\u002B5TJipa9p57wiQ=","eFkUF78KbACBytwdzYneghMgzZWrsA02z0/ACTjf1LY=","YMmNzNRYlNUaY02cz66xLjTOWrv1loEdDwImShCe1jo=","PeS/S8mByULK0UONqH\u002ByZPgxm1uqX9tdeBSbGFZXR4s=","jKTJ7g0eCxEdDl05oVJEtlTpRXiB2qnvMi2PxRdZ9zc=","rzYf1UGwzK\u002Bt/dnYYqlMR7QuKGfkx/vU7t8YI/Qdey0=","Ww0AK17g0XIkjndgpYH6uveAS5QZvgE6TKFMPxHZgK8=","GA1u7GN8CpPjgtVF9p5meRcHD1sfLghHWP4j/Dqg1Lg=","SF9qmJCiNAHDHHnVc2cEt2z1mO82I0VggENUI8NSZqk=","qCDwNzaKuXnkV0G76t21N4pVOCPzJWmMDrEdjFbCXoc=","iMVw0eiXFIR8VogqY0SuhHCe3w\u002BRtCVecwImsxPMzTw=","HZFxsQaTWeyRUw50nxUt9gRfpEPRI3OFp6NOU5frds0=","2E2DXizaWyyz5hJGy5kQ608yc9QroQLLKm2qQtr4/kU=","GJfwFUk2fZZkZmk0TMk\u002BrB1iqzGaYrLg7MFHXI9oaQM=","XFwG7JLxXxSp7GJoSb8NffDaAy8YL0bpfxI4XZ0qH0s=","rpaQmELSXW5qZL9CsRJ8FOFKY1yeKUdSxG9xjxoX0is=","XVHzMEKdTXTKmEzFc4wyTQm4pXfy5\u002BzCWIcX5YVPqEc="],"CachedAssets":{},"CachedCopyCandidates":{}} {"GlobalPropertiesHash":"TJ2LTRuPMY5dh+Ys0sp6meZCDAgoVVT755nQ9dkxJ+U=","FingerprintPatternsHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","PropertyOverridesHash":"8ZRc1sGeVrPBx4lD717BgRaQekyh78QKV9SKsdt638U=","InputHashes":["PmzPzDLX5kem67gWwuODY2y/hyQd8nKfjwCe/ukzc7c=","LY\u002BzkbCH4BDCRNsN4e4hLpvYL/q343HA7aPqxLAnut4=","JcRKU2Zb4DUaR9Im1Nhj21bq9CS6zqrEyUlIptRQGPk=","oWGMgCB3vBEn8UDnk8gLGSmHUQp9nje0xZwa9jbcJds=","j4zvFombPCFDsE\u002BVLdnMhkrq8OLrHidrxFTLuLU5vMQ=","KJJmmS83E4AFqRDn5z9krFmkNtj5EIaWLgIS37POGr8=","xQg7Ozplq1cFDQPPrR5U6g5tfTz0Tx8zEGJriilBzbY=","xXIxgYvMtC9sEkafVNlrcH1Pv5l0FLdyBQPAp5BPAeY=","tf9mfbbiGyrn8DwXufw5UsDjSSX2bb4/v03tlENYAyQ=","HCEmdDnOaqxSVlCudFM7kXBMB\u002BTnSOIqCZaIDo2\u002BkmY=","OKkUjMjTxHumPV8kCwmKIe5EWTGXpicq5nPdBf1UjgU=","nGJ1y3WFrH56ZKC6r2VTpPKOcPajDLQnhXocDhcXmRg=","cGx77cv7nA0DdmaIS2X36NmMdiNb53a\u002BFYrSSYo5FuI=","FtlA9l0oAxySvxoKIT9fzLZajRC\u002Bb\u002B5TJipa9p57wiQ=","eFkUF78KbACBytwdzYneghMgzZWrsA02z0/ACTjf1LY=","YMmNzNRYlNUaY02cz66xLjTOWrv1loEdDwImShCe1jo=","PeS/S8mByULK0UONqH\u002ByZPgxm1uqX9tdeBSbGFZXR4s=","jKTJ7g0eCxEdDl05oVJEtlTpRXiB2qnvMi2PxRdZ9zc=","rzYf1UGwzK\u002Bt/dnYYqlMR7QuKGfkx/vU7t8YI/Qdey0=","Ww0AK17g0XIkjndgpYH6uveAS5QZvgE6TKFMPxHZgK8=","GA1u7GN8CpPjgtVF9p5meRcHD1sfLghHWP4j/Dqg1Lg=","SF9qmJCiNAHDHHnVc2cEt2z1mO82I0VggENUI8NSZqk=","qCDwNzaKuXnkV0G76t21N4pVOCPzJWmMDrEdjFbCXoc=","iMVw0eiXFIR8VogqY0SuhHCe3w\u002BRtCVecwImsxPMzTw=","HZFxsQaTWeyRUw50nxUt9gRfpEPRI3OFp6NOU5frds0=","2E2DXizaWyyz5hJGy5kQ608yc9QroQLLKm2qQtr4/kU=","GJfwFUk2fZZkZmk0TMk\u002BrB1iqzGaYrLg7MFHXI9oaQM=","XFwG7JLxXxSp7GJoSb8NffDaAy8YL0bpfxI4XZ0qH0s=","rpaQmELSXW5qZL9CsRJ8FOFKY1yeKUdSxG9xjxoX0is=","L8osGMPfA4plP8\u002BDGlloF818jpj8bQjUIRsSPqAmmLM="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@ -0,0 +1,22 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnProfNext.Shared.Models.DTOs
{
public class OrderCreateDto
{
public int ProjectId { get; set; }
public string Auftragsnummer { get; set; } = string.Empty;
public string Titel { get; set; } = string.Empty;
public string Status { get; set; } = "Geplant";
public decimal Planstunden { get; set; }
public string? Projektcode { get; set; }
public int MandantId { get; set; }
// User, die an dem Auftrag beteiligt sind
public List<int> MitarbeiterIds { get; set; } = new();
}
}

View File

@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnProfNext.Shared.Models.DTOs
{
public class OrderDto
{
public int Id { get; set; }
public int ProjectId { get; set; }
public string Auftragsnummer { get; set; } = string.Empty;
public string Titel { get; set; } = string.Empty;
public string Status { get; set; } = "Geplant";
public decimal Planstunden { get; set; }
public decimal Iststunden { get; set; }
public string? Projektcode { get; set; }
public int MandantId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
public List<UserDto> Mitarbeiter { get; set; } = new();
}
}

View File

@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnProfNext.Shared.Models.DTOs
{
public class ProjectDto
{
public int Id { get; set; }
public string ProjectName { get; set; } = string.Empty;
public string? Description { get; set; }
public string Status { get; set; } = "Geplant";
public DateTime StartDate { get; set; } = DateTime.UtcNow;
public DateTime? EndDate { get; set; }
public int MandantId { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; }
// Liste der Projektleiter (reduziert auf das, was das Frontend braucht)
public List<UserShortDto> ProjectManagers { get; set; } = new();
}
public class ProjectCreateDto
{
public string ProjectName { get; set; } = string.Empty;
public string? Description { get; set; }
public string Status { get; set; } = "Geplant";
public DateTime StartDate { get; set; } = DateTime.UtcNow;
public DateTime? EndDate { get; set; }
public int MandantId { get; set; } = 1;
// IDs der gewählten Projektleiter
public List<int> ProjectManagerIds { get; set; } = new();
}
public class UserShortDto
{
public int Id { get; set; }
public string Username { get; set; } = string.Empty;
public string? FirstName { get; set; }
public string? LastName { get; set; }
public string FullName => $"{FirstName} {LastName}".Trim();
}
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnProfNext.Shared.Models.DTOs
{
public class UserDto
{
public int Id { get; set; }
public string Username { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
public int MandantId { get; set; }
public bool IsActive { get; set; }
public string FullName => $"{FirstName} {LastName}".Trim();
}
}

View File

@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnProfNext.Shared.Models
{
public class Order
{
public int Id { get; set; }
public int ProjectId { get; set; }
public string Auftragsnummer { get; set; } = string.Empty;
public string Titel { get; set; } = string.Empty;
public string Status { get; set; } = "Geplant";
public decimal Planstunden { get; set; } = 0;
public decimal Iststunden { get; set; } = 0;
public string? Projektcode { get; set; }
public int MandantId { get; set; } = 1;
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
//Relations
public Project? Project { get; set; }
public ICollection<OrderUser> OrderUsers { get; set; } = new List<OrderUser>();
}
}

View File

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnProfNext.Shared.Models
{
public class OrderUser
{
public int OrderId { get; set; }
public int UserId { get; set; }
public Order? Order { get; set; }
public User? User { get; set; }
}
}

View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnProfNext.Shared.Models
{
public class Project
{
public int Id { get; set; }
public string ProjectName { get; set; } = string.Empty;
public string? Description { get; set; }
public string? ProjectManager { get; set; }
public string Status { get; set; } = "Geplant";
public DateTime StartDate { get; set; } = DateTime.UtcNow;
public DateTime? EndDate { get; set; }
public int MandantId { get; set; } = 1;
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
//Multiple Projectleader per Project
public ICollection<ProjectUser> ProjectUsers { get; set; } = new List<ProjectUser>();
//Mehrere Aufträge pro Projekt
public ICollection<Order> Orders { get; set; } = new List<Order>();
}
}

View File

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OnProfNext.Shared.Models
{
public class ProjectUser
{
public int ProjectId { get; set; }
public Project Project { get; set; } = null!;
public int UserId { get; set; }
public User User { get; set; } = null!;
}
}

View File

@ -18,5 +18,7 @@ namespace OnProfNext.Shared.Models
public bool IsActive { get; set; } = true; public bool IsActive { get; set; } = true;
public DateTime CreatedAt { get; set; } public DateTime CreatedAt { get; set; }
public DateTime UpdatedAt { get; set; } public DateTime UpdatedAt { get; set; }
public ICollection<ProjectUser> ProjectUsers { get; set; } = new List<ProjectUser>();
} }
} }

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