Project Details Page
This commit is contained in:
parent
789d44a344
commit
910ed8b8f8
148
OnProfNext.Client/Components/Modals/ProjectModal.razor
Normal file
148
OnProfNext.Client/Components/Modals/ProjectModal.razor
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7,9 +7,12 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<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.DevServer" Version="9.0.9" PrivateAssets="all" />
|
||||
<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" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
0
OnProfNext.Client/Pages/Component.razor
Normal file
0
OnProfNext.Client/Pages/Component.razor
Normal file
@ -1,7 +1,106 @@
|
||||
@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>
|
||||
|
||||
@ -28,6 +28,11 @@
|
||||
</div>
|
||||
|
||||
<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>
|
||||
|
||||
|
||||
@ -49,7 +54,7 @@
|
||||
var result = await response.Content.ReadFromJsonAsync<LoginResponse>();
|
||||
|
||||
await AuthService.LoginAsync(result!.Token);
|
||||
Nav.NavigateTo("/users");
|
||||
Nav.NavigateTo("/");
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
||||
425
OnProfNext.Client/Pages/Projects/ProjectDetails.razor
Normal file
425
OnProfNext.Client/Pages/Projects/ProjectDetails.razor
Normal 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>
|
||||
331
OnProfNext.Client/Pages/Projects/Projects.razor
Normal file
331
OnProfNext.Client/Pages/Projects/Projects.razor
Normal 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>
|
||||
@ -7,6 +7,8 @@ var builder = WebAssemblyHostBuilder.CreateDefault(args);
|
||||
builder.RootComponents.Add<App>("#app");
|
||||
builder.RootComponents.Add<HeadOutlet>("head::after");
|
||||
|
||||
builder.Services.AddBlazorBootstrap();
|
||||
|
||||
//Auth + HTTP Config
|
||||
|
||||
builder.Services.AddScoped<AuthService>();
|
||||
@ -17,6 +19,16 @@ builder.Services.AddHttpClient<UserApiService>(client =>
|
||||
client.BaseAddress = new Uri("https://localhost:7271/");
|
||||
}).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
|
||||
{
|
||||
@ -24,6 +36,8 @@ builder.Services.AddScoped(sp => new HttpClient
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
await builder.Build().RunAsync();
|
||||
|
||||
|
||||
|
||||
110
OnProfNext.Client/Services/OrderApiService.cs
Normal file
110
OnProfNext.Client/Services/OrderApiService.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
120
OnProfNext.Client/Services/ProjectApiService.cs
Normal file
120
OnProfNext.Client/Services/ProjectApiService.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7,4 +7,4 @@
|
||||
@using Microsoft.AspNetCore.Components.WebAssembly.Http
|
||||
@using Microsoft.JSInterop
|
||||
@using OnProfNext.Client
|
||||
@using OnProfNext.Client.Layout
|
||||
@using OnProfNext.Client.Components.Layout
|
||||
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@ -1,8 +1,10 @@
|
||||
{
|
||||
"mainAssemblyName": "OnProfNext.Client",
|
||||
"resources": {
|
||||
"hash": "sha256-sdgE1RAaUQc5n7OrH7o/T4IQOnorsuIC+/3tQRojPuM=",
|
||||
"hash": "sha256-SaR622VBzkbZ3Cn15m/brI2xuJEupmhtVwEx8wa/rI4=",
|
||||
"fingerprinting": {
|
||||
"BlazorBootstrap.ym6tnrklwx.wasm": "BlazorBootstrap.wasm",
|
||||
"Blazored.Typeahead.5g65vcuhxb.wasm": "Blazored.Typeahead.wasm",
|
||||
"Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "Microsoft.AspNetCore.Authorization.wasm",
|
||||
"Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "Microsoft.AspNetCore.Components.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.FileSystemGlobbing.wpqn02ct4s.wasm": "Microsoft.Extensions.FileSystemGlobbing.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.Abstractions.ni4towxuts.wasm": "Microsoft.Extensions.Logging.Abstractions.wasm",
|
||||
"Microsoft.Extensions.Options.2nlpwp09nn.wasm": "Microsoft.Extensions.Options.wasm",
|
||||
@ -33,6 +37,7 @@
|
||||
"Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "Microsoft.IdentityModel.Tokens.wasm",
|
||||
"Microsoft.JSInterop.9ydsnriizw.wasm": "Microsoft.JSInterop.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",
|
||||
"Microsoft.CSharp.j3zkownjjr.wasm": "Microsoft.CSharp.wasm",
|
||||
"Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "Microsoft.VisualBasic.Core.wasm",
|
||||
@ -210,10 +215,10 @@
|
||||
"icudt_CJK.tjcz0u77k5.dat": "icudt_CJK.dat",
|
||||
"icudt_EFIGS.tptq2av103.dat": "icudt_EFIGS.dat",
|
||||
"icudt_no_CJK.lfu7j35m59.dat": "icudt_no_CJK.dat",
|
||||
"OnProfNext.Shared.bjm5usq0dn.wasm": "OnProfNext.Shared.wasm",
|
||||
"OnProfNext.Shared.ngxoafdaut.pdb": "OnProfNext.Shared.pdb",
|
||||
"OnProfNext.Client.9x22x36las.wasm": "OnProfNext.Client.wasm",
|
||||
"OnProfNext.Client.wxt0a0ecyb.pdb": "OnProfNext.Client.pdb"
|
||||
"OnProfNext.Shared.2mfi0vbe9l.wasm": "OnProfNext.Shared.wasm",
|
||||
"OnProfNext.Shared.t3qtrvr78n.pdb": "OnProfNext.Shared.pdb",
|
||||
"OnProfNext.Client.5wq5yy3l8s.wasm": "OnProfNext.Client.wasm",
|
||||
"OnProfNext.Client.4rg9bpcr9v.pdb": "OnProfNext.Client.pdb"
|
||||
},
|
||||
"jsModuleNative": {
|
||||
"dotnet.native.9ih887ebfz.js": "sha256-oS7IRiQoVt9ThQ7Y2UM3XoeY0JqPD02cg9IvRdufn2w="
|
||||
@ -234,6 +239,8 @@
|
||||
"System.Private.CoreLib.uqnhzdwypx.wasm": "sha256-dmlLyil2xqdBc+0yMfmACcDeIGVefS4QHjRT/9mLdNs="
|
||||
},
|
||||
"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.Components.65wbz7t8mt.wasm": "sha256-esbkeXi/0iIJjs+MdmPU6nulNqIzqOw5a4hLgs2f6+U=",
|
||||
"Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "sha256-8o1e7d2phwhchCrOcBV5r/UklI0sSixpCl8wQkEHNfE=",
|
||||
@ -253,6 +260,8 @@
|
||||
"Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "sha256-j06UStE6FBwEz3CJbgLfbKKSePh0FaT4PK7wtDoUXs0=",
|
||||
"Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "sha256-BC/MCU6S9BBMqOrRwZh0plnIpsYyZKyENCmb6p3Acsk=",
|
||||
"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.Abstractions.ni4towxuts.wasm": "sha256-H+TpHvK/z4RGb8EfLe1cGb1TwnCKZAmNxt8e3s3CUSM=",
|
||||
"Microsoft.Extensions.Options.2nlpwp09nn.wasm": "sha256-zp3zuBmKVlE6HjY0Br1uj3fY9sU7ET4ITzgpnpmj9V0=",
|
||||
@ -264,6 +273,7 @@
|
||||
"Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "sha256-hQbBReIl6OvRCOLal9JHAiyQa9Zejqvl/Q03oc0DvyE=",
|
||||
"Microsoft.JSInterop.9ydsnriizw.wasm": "sha256-oZgTa/to3sE2tSzwcZQ0GIX1meeIGAYVE7IoJDL4RkI=",
|
||||
"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=",
|
||||
"Microsoft.CSharp.j3zkownjjr.wasm": "sha256-r7YS8Hp01zUR3LoH5JsS7IrucOta+FnV199bCLii7Pk=",
|
||||
"Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "sha256-/jlp74GLHWhrCfjAmWlVClO68H3wIk+kVx9A/gjByls=",
|
||||
@ -432,12 +442,12 @@
|
||||
"WindowsBase.vy2l5u79y6.wasm": "sha256-ufB9Mo5joMyUs3DzXWWBFFIZNEVrt6h9N5stYB6Oln4=",
|
||||
"mscorlib.xd6mv31d55.wasm": "sha256-1YSLR2eZt3ceALFV//vZUF2AloxVil3VlrW1zZYPSEI=",
|
||||
"netstandard.kaml52uspo.wasm": "sha256-HLEwBpLfzKw2/zGSVzHzFJxznCkt/WIjahrziiMrOpA=",
|
||||
"OnProfNext.Shared.bjm5usq0dn.wasm": "sha256-qZCgoqiTQV2LhVgD6wblo5h+IaRY56ZvOfi7JExbXSU=",
|
||||
"OnProfNext.Client.9x22x36las.wasm": "sha256-TcgeL1nbqCETQa0KBBDGBKQeu90A6mTJ1Ggz1YA/kTI="
|
||||
"OnProfNext.Shared.2mfi0vbe9l.wasm": "sha256-dtTuHimLAmvGF8qILy/wJ/+ayEzY7dCE84UPpHBOASA=",
|
||||
"OnProfNext.Client.5wq5yy3l8s.wasm": "sha256-m066gnQLM/+y1wYYFW4kr2hCQmPEE259N81Fky7+CwU="
|
||||
},
|
||||
"pdb": {
|
||||
"OnProfNext.Shared.ngxoafdaut.pdb": "sha256-mQq6ePqyQ0WFocesus6NyVnqfp9+qtbtuxGK4FI3N1I=",
|
||||
"OnProfNext.Client.wxt0a0ecyb.pdb": "sha256-bD7zFXZKUWLcO9WTXcKpdRRf+limKaZyhizkASw9lkA="
|
||||
"OnProfNext.Shared.t3qtrvr78n.pdb": "sha256-aXAxhpJUbAJFfkq3FS2JtRPFp2plRnylMovNt92Xwwo=",
|
||||
"OnProfNext.Client.4rg9bpcr9v.pdb": "sha256-ECxFZzQ6HqVe1zWc13ioyvpjeuXnoVabpsyS62HMv+I="
|
||||
}
|
||||
},
|
||||
"cacheBootResources": true,
|
||||
|
||||
Binary file not shown.
@ -1,7 +1,6 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 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
|
||||
// the code is regenerated.
|
||||
@ -14,7 +13,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("OnProfNext.Client")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[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.AssemblyTitleAttribute("OnProfNext.Client")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
@ -1 +1 @@
|
||||
49292a426d1b2f7c4f3398ed6db8a7bf6d69d33940ea55b0f7ccf80fe3c561b5
|
||||
a6d164127922e05929c86ac8b818b177b550a13e63904451ca14283aeb814edd
|
||||
|
||||
@ -3,6 +3,9 @@ build_property.EnableAotAnalyzer =
|
||||
build_property.EnableSingleFileAnalyzer =
|
||||
build_property.EnableTrimAnalyzer = false
|
||||
build_property.IncludeAllContentForSelfExtract =
|
||||
build_property.MudDebugAnalyzer =
|
||||
build_property.MudAllowedAttributePattern =
|
||||
build_property.MudAllowedAttributeList =
|
||||
build_property.TargetFramework = net9.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
@ -28,6 +31,18 @@ build_property.EnableCodeStyleSeverity =
|
||||
build_metadata.AdditionalFiles.TargetPath = QXBwLnJhem9y
|
||||
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]
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQ3JlYXRlVXNlci5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
@ -40,22 +55,26 @@ build_metadata.AdditionalFiles.CssScope =
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcTG9naW4ucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/Users.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcVXNlcnMucmF6b3I=
|
||||
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/Projects/ProjectDetails.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUHJvamVjdHNcUHJvamVjdERldGFpbHMucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Shared/RedirectToLogin.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXFJlZGlyZWN0VG9Mb2dpbi5yYXpvcg==
|
||||
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Pages/Projects/Projects.razor]
|
||||
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 =
|
||||
|
||||
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/_Imports.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = X0ltcG9ydHMucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Layout/MainLayout.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = TGF5b3V0XE1haW5MYXlvdXQucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope = b-se1kx51m2b
|
||||
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Components/Layout/MainLayout.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcTWFpbkxheW91dC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope = b-4ckihtz3s1
|
||||
|
||||
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Layout/NavMenu.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = TGF5b3V0XE5hdk1lbnUucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope = b-z0fmt146ub
|
||||
[C:/DEVQPDC/Proj2/OnProfNext/OnProfNext.Client/Components/Layout/NavMenu.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcTmF2TWVudS5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope = b-c1psfyttma
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
||||
6ea2ac6c7f9e979ce26a9538bb98c0bd6b6ecb3771454fa3d410910ae571aaee
|
||||
b0b466ffbae46d8d02c9d283d2f26aafd6ee7de33cb9196e648f9e322f4b5669
|
||||
|
||||
@ -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\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\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\projectbundle\OnProfNext.Client.bundle.scp.css
|
||||
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\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\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\19sycpf3d4-65wbz7t8mt.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\ebg5gkjd7d-zeqz59uvkx.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\kzp5jtqdfd-bjm5usq0dn.gz
|
||||
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\OnProfNext.Client.wxt0a0ecyb.pdb
|
||||
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.9x22x36las.wasm
|
||||
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.wxt0a0ecyb.pdb.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\cez1jk5yrk-9x22x36las.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\xzgxwa2yd7-l5ikistiiv.gz
|
||||
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\BlazorBootstrap.ym6tnrklwx.wasm
|
||||
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\BlazorBootstrap.dll
|
||||
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\webcil\BlazorBootstrap.wasm
|
||||
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\yxfdm33bor-63oqyoiiv4.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\d5o4a4wkq9-ct0ej5e0q0.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\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
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -1,8 +1,10 @@
|
||||
{
|
||||
"mainAssemblyName": "OnProfNext.Client",
|
||||
"resources": {
|
||||
"hash": "sha256-sdgE1RAaUQc5n7OrH7o/T4IQOnorsuIC+/3tQRojPuM=",
|
||||
"hash": "sha256-SaR622VBzkbZ3Cn15m/brI2xuJEupmhtVwEx8wa/rI4=",
|
||||
"fingerprinting": {
|
||||
"BlazorBootstrap.ym6tnrklwx.wasm": "BlazorBootstrap.wasm",
|
||||
"Blazored.Typeahead.5g65vcuhxb.wasm": "Blazored.Typeahead.wasm",
|
||||
"Microsoft.AspNetCore.Authorization.z6jo10m0rd.wasm": "Microsoft.AspNetCore.Authorization.wasm",
|
||||
"Microsoft.AspNetCore.Components.65wbz7t8mt.wasm": "Microsoft.AspNetCore.Components.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.FileSystemGlobbing.wpqn02ct4s.wasm": "Microsoft.Extensions.FileSystemGlobbing.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.Abstractions.ni4towxuts.wasm": "Microsoft.Extensions.Logging.Abstractions.wasm",
|
||||
"Microsoft.Extensions.Options.2nlpwp09nn.wasm": "Microsoft.Extensions.Options.wasm",
|
||||
@ -33,6 +37,7 @@
|
||||
"Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "Microsoft.IdentityModel.Tokens.wasm",
|
||||
"Microsoft.JSInterop.9ydsnriizw.wasm": "Microsoft.JSInterop.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",
|
||||
"Microsoft.CSharp.j3zkownjjr.wasm": "Microsoft.CSharp.wasm",
|
||||
"Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "Microsoft.VisualBasic.Core.wasm",
|
||||
@ -210,10 +215,10 @@
|
||||
"icudt_CJK.tjcz0u77k5.dat": "icudt_CJK.dat",
|
||||
"icudt_EFIGS.tptq2av103.dat": "icudt_EFIGS.dat",
|
||||
"icudt_no_CJK.lfu7j35m59.dat": "icudt_no_CJK.dat",
|
||||
"OnProfNext.Shared.bjm5usq0dn.wasm": "OnProfNext.Shared.wasm",
|
||||
"OnProfNext.Shared.ngxoafdaut.pdb": "OnProfNext.Shared.pdb",
|
||||
"OnProfNext.Client.9x22x36las.wasm": "OnProfNext.Client.wasm",
|
||||
"OnProfNext.Client.wxt0a0ecyb.pdb": "OnProfNext.Client.pdb"
|
||||
"OnProfNext.Shared.2mfi0vbe9l.wasm": "OnProfNext.Shared.wasm",
|
||||
"OnProfNext.Shared.t3qtrvr78n.pdb": "OnProfNext.Shared.pdb",
|
||||
"OnProfNext.Client.5wq5yy3l8s.wasm": "OnProfNext.Client.wasm",
|
||||
"OnProfNext.Client.4rg9bpcr9v.pdb": "OnProfNext.Client.pdb"
|
||||
},
|
||||
"jsModuleNative": {
|
||||
"dotnet.native.9ih887ebfz.js": "sha256-oS7IRiQoVt9ThQ7Y2UM3XoeY0JqPD02cg9IvRdufn2w="
|
||||
@ -234,6 +239,8 @@
|
||||
"System.Private.CoreLib.uqnhzdwypx.wasm": "sha256-dmlLyil2xqdBc+0yMfmACcDeIGVefS4QHjRT/9mLdNs="
|
||||
},
|
||||
"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.Components.65wbz7t8mt.wasm": "sha256-esbkeXi/0iIJjs+MdmPU6nulNqIzqOw5a4hLgs2f6+U=",
|
||||
"Microsoft.AspNetCore.Components.Forms.ysqd97eroy.wasm": "sha256-8o1e7d2phwhchCrOcBV5r/UklI0sSixpCl8wQkEHNfE=",
|
||||
@ -253,6 +260,8 @@
|
||||
"Microsoft.Extensions.FileProviders.Physical.fwg0p8qiey.wasm": "sha256-j06UStE6FBwEz3CJbgLfbKKSePh0FaT4PK7wtDoUXs0=",
|
||||
"Microsoft.Extensions.FileSystemGlobbing.wpqn02ct4s.wasm": "sha256-BC/MCU6S9BBMqOrRwZh0plnIpsYyZKyENCmb6p3Acsk=",
|
||||
"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.Abstractions.ni4towxuts.wasm": "sha256-H+TpHvK/z4RGb8EfLe1cGb1TwnCKZAmNxt8e3s3CUSM=",
|
||||
"Microsoft.Extensions.Options.2nlpwp09nn.wasm": "sha256-zp3zuBmKVlE6HjY0Br1uj3fY9sU7ET4ITzgpnpmj9V0=",
|
||||
@ -264,6 +273,7 @@
|
||||
"Microsoft.IdentityModel.Tokens.zeqz59uvkx.wasm": "sha256-hQbBReIl6OvRCOLal9JHAiyQa9Zejqvl/Q03oc0DvyE=",
|
||||
"Microsoft.JSInterop.9ydsnriizw.wasm": "sha256-oZgTa/to3sE2tSzwcZQ0GIX1meeIGAYVE7IoJDL4RkI=",
|
||||
"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=",
|
||||
"Microsoft.CSharp.j3zkownjjr.wasm": "sha256-r7YS8Hp01zUR3LoH5JsS7IrucOta+FnV199bCLii7Pk=",
|
||||
"Microsoft.VisualBasic.Core.qljjwgjnrn.wasm": "sha256-/jlp74GLHWhrCfjAmWlVClO68H3wIk+kVx9A/gjByls=",
|
||||
@ -432,12 +442,12 @@
|
||||
"WindowsBase.vy2l5u79y6.wasm": "sha256-ufB9Mo5joMyUs3DzXWWBFFIZNEVrt6h9N5stYB6Oln4=",
|
||||
"mscorlib.xd6mv31d55.wasm": "sha256-1YSLR2eZt3ceALFV//vZUF2AloxVil3VlrW1zZYPSEI=",
|
||||
"netstandard.kaml52uspo.wasm": "sha256-HLEwBpLfzKw2/zGSVzHzFJxznCkt/WIjahrziiMrOpA=",
|
||||
"OnProfNext.Shared.bjm5usq0dn.wasm": "sha256-qZCgoqiTQV2LhVgD6wblo5h+IaRY56ZvOfi7JExbXSU=",
|
||||
"OnProfNext.Client.9x22x36las.wasm": "sha256-TcgeL1nbqCETQa0KBBDGBKQeu90A6mTJ1Ggz1YA/kTI="
|
||||
"OnProfNext.Shared.2mfi0vbe9l.wasm": "sha256-dtTuHimLAmvGF8qILy/wJ/+ayEzY7dCE84UPpHBOASA=",
|
||||
"OnProfNext.Client.5wq5yy3l8s.wasm": "sha256-m066gnQLM/+y1wYYFW4kr2hCQmPEE259N81Fky7+CwU="
|
||||
},
|
||||
"pdb": {
|
||||
"OnProfNext.Shared.ngxoafdaut.pdb": "sha256-mQq6ePqyQ0WFocesus6NyVnqfp9+qtbtuxGK4FI3N1I=",
|
||||
"OnProfNext.Client.wxt0a0ecyb.pdb": "sha256-bD7zFXZKUWLcO9WTXcKpdRRf+limKaZyhizkASw9lkA="
|
||||
"OnProfNext.Shared.t3qtrvr78n.pdb": "sha256-aXAxhpJUbAJFfkq3FS2JtRPFp2plRnylMovNt92Xwwo=",
|
||||
"OnProfNext.Client.4rg9bpcr9v.pdb": "sha256-ECxFZzQ6HqVe1zWc13ioyvpjeuXnoVabpsyS62HMv+I="
|
||||
}
|
||||
},
|
||||
"cacheBootResources": true,
|
||||
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@ -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":{}}
|
||||
@ -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":{}}
|
||||
@ -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
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -1,19 +1,21 @@
|
||||
/* /Layout/MainLayout.razor.rz.scp.css */
|
||||
.page[b-se1kx51m2b] {
|
||||
@import '_content/Blazor.Bootstrap/Blazor.Bootstrap.7t9tbfaemk.bundle.scp.css';
|
||||
|
||||
/* /Components/Layout/MainLayout.razor.rz.scp.css */
|
||||
.page[b-4ckihtz3s1] {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main[b-se1kx51m2b] {
|
||||
main[b-4ckihtz3s1] {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.sidebar[b-se1kx51m2b] {
|
||||
.sidebar[b-4ckihtz3s1] {
|
||||
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
|
||||
}
|
||||
|
||||
.top-row[b-se1kx51m2b] {
|
||||
.top-row[b-4ckihtz3s1] {
|
||||
background-color: #f7f7f7;
|
||||
border-bottom: 1px solid #d6d5d5;
|
||||
justify-content: flex-end;
|
||||
@ -22,75 +24,75 @@ main[b-se1kx51m2b] {
|
||||
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;
|
||||
margin-left: 1.5rem;
|
||||
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;
|
||||
}
|
||||
|
||||
.top-row[b-se1kx51m2b] a:first-child {
|
||||
.top-row[b-4ckihtz3s1] a:first-child {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
@media (max-width: 640.98px) {
|
||||
.top-row[b-se1kx51m2b] {
|
||||
.top-row[b-4ckihtz3s1] {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 641px) {
|
||||
.page[b-se1kx51m2b] {
|
||||
.page[b-4ckihtz3s1] {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.sidebar[b-se1kx51m2b] {
|
||||
.sidebar[b-4ckihtz3s1] {
|
||||
width: 250px;
|
||||
height: 100vh;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.top-row[b-se1kx51m2b] {
|
||||
.top-row[b-4ckihtz3s1] {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.top-row.auth[b-se1kx51m2b] a:first-child {
|
||||
.top-row.auth[b-4ckihtz3s1] a:first-child {
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.top-row[b-se1kx51m2b], article[b-se1kx51m2b] {
|
||||
.top-row[b-4ckihtz3s1], article[b-4ckihtz3s1] {
|
||||
padding-left: 2rem !important;
|
||||
padding-right: 1.5rem !important;
|
||||
}
|
||||
}
|
||||
/* /Layout/NavMenu.razor.rz.scp.css */
|
||||
.navbar-toggler[b-z0fmt146ub] {
|
||||
/* /Components/Layout/NavMenu.razor.rz.scp.css */
|
||||
.navbar-toggler[b-c1psfyttma] {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.top-row[b-z0fmt146ub] {
|
||||
.top-row[b-c1psfyttma] {
|
||||
min-height: 3.5rem;
|
||||
background-color: rgba(0,0,0,0.4);
|
||||
}
|
||||
|
||||
.navbar-brand[b-z0fmt146ub] {
|
||||
.navbar-brand[b-c1psfyttma] {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.bi[b-z0fmt146ub] {
|
||||
.bi[b-c1psfyttma] {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 1.25rem;
|
||||
@ -100,32 +102,32 @@ main[b-se1kx51m2b] {
|
||||
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");
|
||||
}
|
||||
|
||||
.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");
|
||||
}
|
||||
|
||||
.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");
|
||||
}
|
||||
|
||||
.nav-item[b-z0fmt146ub] {
|
||||
.nav-item[b-c1psfyttma] {
|
||||
font-size: 0.9rem;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.nav-item:first-of-type[b-z0fmt146ub] {
|
||||
.nav-item:first-of-type[b-c1psfyttma] {
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.nav-item:last-of-type[b-z0fmt146ub] {
|
||||
.nav-item:last-of-type[b-c1psfyttma] {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.nav-item[b-z0fmt146ub] a {
|
||||
.nav-item[b-c1psfyttma] a {
|
||||
color: #d7d7d7;
|
||||
border-radius: 4px;
|
||||
height: 3rem;
|
||||
@ -134,27 +136,27 @@ main[b-se1kx51m2b] {
|
||||
line-height: 3rem;
|
||||
}
|
||||
|
||||
.nav-item[b-z0fmt146ub] a.active {
|
||||
.nav-item[b-c1psfyttma] a.active {
|
||||
background-color: rgba(255,255,255,0.37);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav-item[b-z0fmt146ub] a:hover {
|
||||
.nav-item[b-c1psfyttma] a:hover {
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
color: white;
|
||||
}
|
||||
|
||||
@media (min-width: 641px) {
|
||||
.navbar-toggler[b-z0fmt146ub] {
|
||||
.navbar-toggler[b-c1psfyttma] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.collapse[b-z0fmt146ub] {
|
||||
.collapse[b-c1psfyttma] {
|
||||
/* Never collapse the sidebar for wide screens */
|
||||
display: block;
|
||||
}
|
||||
|
||||
.nav-scrollable[b-z0fmt146ub] {
|
||||
.nav-scrollable[b-c1psfyttma] {
|
||||
/* Allow sidebar to scroll for tall menus */
|
||||
height: calc(100vh - 3.5rem);
|
||||
overflow-y: auto;
|
||||
|
||||
@ -1,19 +1,19 @@
|
||||
/* /Layout/MainLayout.razor.rz.scp.css */
|
||||
.page[b-se1kx51m2b] {
|
||||
/* /Components/Layout/MainLayout.razor.rz.scp.css */
|
||||
.page[b-4ckihtz3s1] {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main[b-se1kx51m2b] {
|
||||
main[b-4ckihtz3s1] {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.sidebar[b-se1kx51m2b] {
|
||||
.sidebar[b-4ckihtz3s1] {
|
||||
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
|
||||
}
|
||||
|
||||
.top-row[b-se1kx51m2b] {
|
||||
.top-row[b-4ckihtz3s1] {
|
||||
background-color: #f7f7f7;
|
||||
border-bottom: 1px solid #d6d5d5;
|
||||
justify-content: flex-end;
|
||||
@ -22,75 +22,75 @@ main[b-se1kx51m2b] {
|
||||
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;
|
||||
margin-left: 1.5rem;
|
||||
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;
|
||||
}
|
||||
|
||||
.top-row[b-se1kx51m2b] a:first-child {
|
||||
.top-row[b-4ckihtz3s1] a:first-child {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
@media (max-width: 640.98px) {
|
||||
.top-row[b-se1kx51m2b] {
|
||||
.top-row[b-4ckihtz3s1] {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 641px) {
|
||||
.page[b-se1kx51m2b] {
|
||||
.page[b-4ckihtz3s1] {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.sidebar[b-se1kx51m2b] {
|
||||
.sidebar[b-4ckihtz3s1] {
|
||||
width: 250px;
|
||||
height: 100vh;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.top-row[b-se1kx51m2b] {
|
||||
.top-row[b-4ckihtz3s1] {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.top-row.auth[b-se1kx51m2b] a:first-child {
|
||||
.top-row.auth[b-4ckihtz3s1] a:first-child {
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.top-row[b-se1kx51m2b], article[b-se1kx51m2b] {
|
||||
.top-row[b-4ckihtz3s1], article[b-4ckihtz3s1] {
|
||||
padding-left: 2rem !important;
|
||||
padding-right: 1.5rem !important;
|
||||
}
|
||||
}
|
||||
/* /Layout/NavMenu.razor.rz.scp.css */
|
||||
.navbar-toggler[b-z0fmt146ub] {
|
||||
/* /Components/Layout/NavMenu.razor.rz.scp.css */
|
||||
.navbar-toggler[b-c1psfyttma] {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.top-row[b-z0fmt146ub] {
|
||||
.top-row[b-c1psfyttma] {
|
||||
min-height: 3.5rem;
|
||||
background-color: rgba(0,0,0,0.4);
|
||||
}
|
||||
|
||||
.navbar-brand[b-z0fmt146ub] {
|
||||
.navbar-brand[b-c1psfyttma] {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.bi[b-z0fmt146ub] {
|
||||
.bi[b-c1psfyttma] {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 1.25rem;
|
||||
@ -100,32 +100,32 @@ main[b-se1kx51m2b] {
|
||||
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");
|
||||
}
|
||||
|
||||
.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");
|
||||
}
|
||||
|
||||
.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");
|
||||
}
|
||||
|
||||
.nav-item[b-z0fmt146ub] {
|
||||
.nav-item[b-c1psfyttma] {
|
||||
font-size: 0.9rem;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.nav-item:first-of-type[b-z0fmt146ub] {
|
||||
.nav-item:first-of-type[b-c1psfyttma] {
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.nav-item:last-of-type[b-z0fmt146ub] {
|
||||
.nav-item:last-of-type[b-c1psfyttma] {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.nav-item[b-z0fmt146ub] a {
|
||||
.nav-item[b-c1psfyttma] a {
|
||||
color: #d7d7d7;
|
||||
border-radius: 4px;
|
||||
height: 3rem;
|
||||
@ -134,27 +134,27 @@ main[b-se1kx51m2b] {
|
||||
line-height: 3rem;
|
||||
}
|
||||
|
||||
.nav-item[b-z0fmt146ub] a.active {
|
||||
.nav-item[b-c1psfyttma] a.active {
|
||||
background-color: rgba(255,255,255,0.37);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav-item[b-z0fmt146ub] a:hover {
|
||||
.nav-item[b-c1psfyttma] a:hover {
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
color: white;
|
||||
}
|
||||
|
||||
@media (min-width: 641px) {
|
||||
.navbar-toggler[b-z0fmt146ub] {
|
||||
.navbar-toggler[b-c1psfyttma] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.collapse[b-z0fmt146ub] {
|
||||
.collapse[b-c1psfyttma] {
|
||||
/* Never collapse the sidebar for wide screens */
|
||||
display: block;
|
||||
}
|
||||
|
||||
.nav-scrollable[b-z0fmt146ub] {
|
||||
.nav-scrollable[b-c1psfyttma] {
|
||||
/* Allow sidebar to scroll for tall menus */
|
||||
height: calc(100vh - 3.5rem);
|
||||
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
@ -1 +1 @@
|
||||
p7eipGUbJw36IXtyKOJ7E011H1vfpkvwmmEeqGwAkOo=
|
||||
LQIR0vaCUe8ZURwOfXvPmxpSP8m1Mmgdc3YqN7XRVew=
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -55,6 +55,14 @@
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"dependencies": {
|
||||
"Blazor.Bootstrap": {
|
||||
"target": "Package",
|
||||
"version": "[3.4.0, )"
|
||||
},
|
||||
"Blazored.Typeahead": {
|
||||
"target": "Package",
|
||||
"version": "[4.7.0, )"
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.WebAssembly": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.9, )"
|
||||
@ -80,6 +88,10 @@
|
||||
"version": "[9.0.9, )",
|
||||
"autoReferenced": true
|
||||
},
|
||||
"MudBlazor": {
|
||||
"target": "Package",
|
||||
"version": "[8.13.0, )"
|
||||
},
|
||||
"System.IdentityModel.Tokens.Jwt": {
|
||||
"target": "Package",
|
||||
"version": "[8.14.0, )"
|
||||
|
||||
@ -14,9 +14,12 @@
|
||||
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||
</ItemGroup>
|
||||
<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.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)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>
|
||||
<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>
|
||||
|
||||
@ -2,10 +2,11 @@
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<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.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.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.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>
|
||||
</Project>
|
||||
@ -2,6 +2,43 @@
|
||||
"version": 3,
|
||||
"targets": {
|
||||
"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": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@ -380,6 +417,38 @@
|
||||
"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": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@ -583,6 +652,31 @@
|
||||
"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": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@ -612,6 +706,43 @@
|
||||
}
|
||||
},
|
||||
"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": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@ -990,6 +1121,38 @@
|
||||
"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": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@ -1193,6 +1356,31 @@
|
||||
"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": {
|
||||
"type": "package",
|
||||
"dependencies": {
|
||||
@ -1223,6 +1411,55 @@
|
||||
}
|
||||
},
|
||||
"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": {
|
||||
"sha512": "OVUDsnJDBhCuyJtjkQXObWbBGjh4kyxL/pl/5RqtZHnSJcpEr1eD6l4vbFIdRHg4bFI59vTTrfHKQ3zwfR4KCw==",
|
||||
"type": "package",
|
||||
@ -1886,6 +2123,44 @@
|
||||
"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": {
|
||||
"sha512": "MaCB0Y9hNDs4YLu3HCJbo199WnJT8xSgajG1JYGANz9FkseQ5f3v/llu3HxLI6mjDlu7pa7ps9BLPWjKzsAAzQ==",
|
||||
"type": "package",
|
||||
@ -2307,6 +2582,33 @@
|
||||
"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": {
|
||||
"sha512": "EYGgN/S+HK7S6F3GaaPLFAfK0UzMrkXFyWCvXpQWFYmZln3dqtbyIO7VuTM/iIIPMzkelg8ZLlBPvMhxj6nOAA==",
|
||||
"type": "package",
|
||||
@ -2339,11 +2641,14 @@
|
||||
},
|
||||
"projectFileDependencyGroups": {
|
||||
"net9.0": [
|
||||
"Blazor.Bootstrap >= 3.4.0",
|
||||
"Blazored.Typeahead >= 4.7.0",
|
||||
"Microsoft.AspNetCore.Components.WebAssembly >= 9.0.9",
|
||||
"Microsoft.AspNetCore.Components.WebAssembly.DevServer >= 9.0.9",
|
||||
"Microsoft.Extensions.Http >= 9.0.9",
|
||||
"Microsoft.NET.ILLink.Tasks >= 9.0.9",
|
||||
"Microsoft.NET.Sdk.WebAssembly.Pack >= 9.0.9",
|
||||
"MudBlazor >= 8.13.0",
|
||||
"OnProfNext.Shared >= 1.0.0",
|
||||
"System.IdentityModel.Tokens.Jwt >= 8.14.0"
|
||||
]
|
||||
@ -2403,6 +2708,14 @@
|
||||
"net9.0": {
|
||||
"targetAlias": "net9.0",
|
||||
"dependencies": {
|
||||
"Blazor.Bootstrap": {
|
||||
"target": "Package",
|
||||
"version": "[3.4.0, )"
|
||||
},
|
||||
"Blazored.Typeahead": {
|
||||
"target": "Package",
|
||||
"version": "[4.7.0, )"
|
||||
},
|
||||
"Microsoft.AspNetCore.Components.WebAssembly": {
|
||||
"target": "Package",
|
||||
"version": "[9.0.9, )"
|
||||
@ -2428,6 +2741,10 @@
|
||||
"version": "[9.0.9, )",
|
||||
"autoReferenced": true
|
||||
},
|
||||
"MudBlazor": {
|
||||
"target": "Package",
|
||||
"version": "[8.13.0, )"
|
||||
},
|
||||
"System.IdentityModel.Tokens.Jwt": {
|
||||
"target": "Package",
|
||||
"version": "[8.14.0, )"
|
||||
|
||||
@ -1,9 +1,11 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "J3t2sm//lQ8=",
|
||||
"dgSpecHash": "NE5DfiP76Cc=",
|
||||
"success": true,
|
||||
"projectFilePath": "C:\\DEVQPDC\\Proj2\\OnProfNext\\OnProfNext.Client\\OnProfNext.Client.csproj",
|
||||
"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.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",
|
||||
@ -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.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.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.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",
|
||||
@ -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.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\\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\\microsoft.netcore.app.runtime.mono.browser-wasm\\9.0.9\\microsoft.netcore.app.runtime.mono.browser-wasm.9.0.9.nupkg.sha512"
|
||||
],
|
||||
|
||||
@ -10,6 +10,9 @@
|
||||
<link rel="stylesheet" href="css/app.css" />
|
||||
<link rel="icon" type="image/png" href="favicon.png" />
|
||||
<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>
|
||||
|
||||
<body>
|
||||
@ -38,6 +41,7 @@
|
||||
|
||||
<script src="js/init.js"></script>
|
||||
<script src="_framework/blazor.webassembly.js"></script>
|
||||
<script src="_content/Blazor.Bootstrap/blazor.bootstrap.js"></script>
|
||||
</body>
|
||||
|
||||
|
||||
|
||||
59
OnProfNext.Server/Configurations/OrderConfiguration.cs
Normal file
59
OnProfNext.Server/Configurations/OrderConfiguration.cs
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
25
OnProfNext.Server/Configurations/OrderUserConfiguration.cs
Normal file
25
OnProfNext.Server/Configurations/OrderUserConfiguration.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
47
OnProfNext.Server/Configurations/ProjectConfiguration.cs
Normal file
47
OnProfNext.Server/Configurations/ProjectConfiguration.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
28
OnProfNext.Server/Configurations/ProjectUserConfiguration.cs
Normal file
28
OnProfNext.Server/Configurations/ProjectUserConfiguration.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
129
OnProfNext.Server/Controllers/OrdersController.cs
Normal file
129
OnProfNext.Server/Controllers/OrdersController.cs
Normal 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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
147
OnProfNext.Server/Controllers/ProjectController.cs
Normal file
147
OnProfNext.Server/Controllers/ProjectController.cs
Normal 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();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using OnProfNext.Server.Data;
|
||||
@ -39,6 +40,7 @@ namespace OnProfNext.Server.Controllers
|
||||
}
|
||||
|
||||
//POST: api/users
|
||||
[AllowAnonymous]
|
||||
[HttpPost]
|
||||
public async Task<ActionResult<User>> CreateUser(User user)
|
||||
{
|
||||
|
||||
@ -11,6 +11,10 @@ namespace OnProfNext.Server.Data
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@ -18,6 +22,10 @@ namespace OnProfNext.Server.Data
|
||||
|
||||
//Leitet aus UserConfiguration die Konfiguration der User-Entität ab
|
||||
modelBuilder.ApplyConfiguration(new UserConfiguration());
|
||||
modelBuilder.ApplyConfiguration(new ProjectConfiguration());
|
||||
modelBuilder.ApplyConfiguration(new ProjectUserConfiguration());
|
||||
modelBuilder.ApplyConfiguration(new OrderUserConfiguration());
|
||||
modelBuilder.ApplyConfiguration(new OrderConfiguration());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
144
OnProfNext.Server/Migrations/20251014114821_AddProjectsTable.Designer.cs
generated
Normal file
144
OnProfNext.Server/Migrations/20251014114821_AddProjectsTable.Designer.cs
generated
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
303
OnProfNext.Server/Migrations/20251015102708_FixProjectUserRelation.Designer.cs
generated
Normal file
303
OnProfNext.Server/Migrations/20251015102708_FixProjectUserRelation.Designer.cs
generated
Normal 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
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -22,6 +22,155 @@ namespace OnProfNext.Server.Migrations
|
||||
|
||||
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")
|
||||
@ -79,6 +228,72 @@ namespace OnProfNext.Server.Migrations
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -13,7 +13,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("OnProfNext.Server")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[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.AssemblyTitleAttribute("OnProfNext.Server")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
@ -1 +1 @@
|
||||
28f7dc6265a3f6468f736cd5c924596d9867077f5ca73729a232bb1a9c8b4edf
|
||||
0112fdf05bcbbdf85e9b7a9cb66a9b7812c7b77cd789cf405fa10334aba74a96
|
||||
|
||||
Binary file not shown.
@ -1 +1 @@
|
||||
237c758b889ba96bbafce38135c8813505d8d59eece50137f5595ffc16cd4f0e
|
||||
1649fe5519326da7f926266c5793daba5ff377a06b40397fb607e486ec674434
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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":{}}
|
||||
@ -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":{}}
|
||||
22
OnProfNext.Shared/Models/DTOs/OrderCreateDto.cs
Normal file
22
OnProfNext.Shared/Models/DTOs/OrderCreateDto.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
25
OnProfNext.Shared/Models/DTOs/OrderDto.cs
Normal file
25
OnProfNext.Shared/Models/DTOs/OrderDto.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
47
OnProfNext.Shared/Models/DTOs/ProjectDtos.cs
Normal file
47
OnProfNext.Shared/Models/DTOs/ProjectDtos.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
21
OnProfNext.Shared/Models/DTOs/UserDto.cs
Normal file
21
OnProfNext.Shared/Models/DTOs/UserDto.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
27
OnProfNext.Shared/Models/Order.cs
Normal file
27
OnProfNext.Shared/Models/Order.cs
Normal 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>();
|
||||
}
|
||||
}
|
||||
16
OnProfNext.Shared/Models/OrderUser.cs
Normal file
16
OnProfNext.Shared/Models/OrderUser.cs
Normal 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; }
|
||||
}
|
||||
}
|
||||
32
OnProfNext.Shared/Models/Project.cs
Normal file
32
OnProfNext.Shared/Models/Project.cs
Normal 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>();
|
||||
|
||||
}
|
||||
}
|
||||
17
OnProfNext.Shared/Models/ProjectUser.cs
Normal file
17
OnProfNext.Shared/Models/ProjectUser.cs
Normal 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!;
|
||||
}
|
||||
}
|
||||
@ -18,5 +18,7 @@ namespace OnProfNext.Shared.Models
|
||||
public bool IsActive { get; set; } = true;
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
|
||||
public ICollection<ProjectUser> ProjectUsers { get; set; } = new List<ProjectUser>();
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user