Project Details Page + Employees

This commit is contained in:
Marc Wieland 2025-10-15 15:01:00 +02:00
parent 910ed8b8f8
commit de2c369350
66 changed files with 367 additions and 128 deletions

View File

@ -90,7 +90,7 @@
[Parameter] public EventCallback<ProjectCreateDto> OnProjectCreated { get; set; }
[Parameter] public string SearchText { get; set; } = "";
private List<User>? users;
private List<UserDto>? users;
private string? errorMessage;
protected override async Task OnInitializedAsync()
@ -112,8 +112,8 @@
}
}
private IEnumerable<User> FilteredUsers => users is null || string.IsNullOrWhiteSpace(SearchText)
? Enumerable.Empty<User>()
private IEnumerable<UserDto> FilteredUsers => users is null || string.IsNullOrWhiteSpace(SearchText)
? Enumerable.Empty<UserDto>()
: users.Where(u => $"{u.FirstName} {u.LastName} {u.Username}"
.Contains(SearchText, StringComparison.OrdinalIgnoreCase));

View File

@ -139,8 +139,17 @@ else
<td>@o.Planstunden</td>
<td>@o.Iststunden</td>
<td>
<!-- Mitarbeiter-Zuordnung (später) -->
<span class="text-muted small">noch offen</span>
@if (o.Mitarbeiter?.Any() == true)
{
@foreach (var m in o.Mitarbeiter)
{
<span class="badge bg-info text-dark me-1">@m.FirstName @m.LastName</span>
}
}
else
{
<span class="text-muted small">keine zugewiesen</span>
}
</td>
<td class="text-end">
<button class="btn btn-outline-danger btn-sm" @onclick="() => DeleteOrder(o.Id)">
@ -232,10 +241,38 @@ else
case "members":
<div>
<h5>Mitarbeiter</h5>
<p>Teamzuordnung, Rollenverwaltung, People Picker.</p>
@if (projectMembers == null || !projectMembers.Any())
{
<div class="alert alert-info mt-3 text-center">
Keine Mitarbeiter zugewiesen.
</div>
}
else
{
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 g-3 mt-3">
@foreach (var member in projectMembers)
{
<div class="col">
<div class="card h-100 shadow-sm border-0">
<div class="card-body">
<h6 class="card-title mb-1 text-primary">
@member.FirstName @member.LastName
</h6>
<p class="card-text text-muted small mb-1">@member.Username</p>
<p class="card-text text-muted small mb-0">
<i class="bi bi-envelope"></i> @member.Email
</p>
</div>
</div>
</div>
}
</div>
}
</div>
break;
case "documents":
<div>
<h5>Dokumente</h5>
@ -275,9 +312,10 @@ else
protected override async Task OnInitializedAsync()
{
await LoadProjectAsync();
await LoadOrderAsync();
await LoadUsersAsync();
var result = await OrderService.GetOrdersByProjectAsync(1);
Console.WriteLine($"Orders loaded: {result.Data?.Count}");
}
@ -361,6 +399,7 @@ else
if(result.Success)
{
orders = result.Data;
RefreshProjectMembers();
}
else
{
@ -370,8 +409,11 @@ else
private async Task CreateOrderAsync()
{
// Mitarbeiter mit reinpacken
newOrder.Mitarbeiter = users.Where(u => selectedUserIds.Contains(u.Id)).ToList();
var result = await OrderService.CreateOrderAsync(newOrder);
if(!result.Success)
if (!result.Success)
{
errorMessage = result.Error;
return;
@ -395,6 +437,35 @@ else
}
}
private async Task LoadUsersAsync()
{
var result = await UserService.GetUsersAsync();
if (result.Success && result.Data != null)
{
users = result.Data;
Console.WriteLine($"Loaded {users.Count} users.");
}
else
{
errorMessage = result.Error ?? "Fehler beim Laden der Benutzer.";
}
}
private List<UserDto> projectMembers = new();
private void RefreshProjectMembers()
{
if (orders == null) return;
projectMembers = orders
.Where(o => o.Mitarbeiter != null)
.SelectMany(o => o.Mitarbeiter!)
.GroupBy(u => u.Id)
.Select(g => g.First())
.OrderBy(u => u.LastName)
.ThenBy(u => u.FirstName)
.ToList();
}
}
<style>

View File

@ -184,10 +184,10 @@ else
private string? errorMessage;
private bool showAddModal = false;
private ProjectCreateDto newProject = new();
private List<User> users = new();
private List<UserDto> users = new();
private string searchText = "";
private IEnumerable<User> FilteredUsers => string.IsNullOrWhiteSpace(searchText)
private IEnumerable<UserDto> FilteredUsers => string.IsNullOrWhiteSpace(searchText)
? users
: users.Where(u => $"{u.FirstName} {u.LastName} {u.Username}"
.Contains(searchText, StringComparison.OrdinalIgnoreCase));

View File

@ -1,6 +1,7 @@
@page "/users"
@using OnProfNext.Client.Services
@using OnProfNext.Shared.Models
@using OnProfNext.Shared.Models.DTOs
@inject UserApiService UserService
@inject AuthService AuthService
@inject NavigationManager Nav
@ -139,9 +140,9 @@ else
@code {
private List<User>? users;
private List<UserDto>? users;
private string? errorMessage;
private User? selectedUser;
private UserDto? selectedUser;
private bool showDeleteConfirm = false;
private string deleteConfirmInput = string.Empty;

View File

@ -19,13 +19,9 @@ namespace OnProfNext.Client.Services
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}");
return (false, null, ex.Message);
}
}
@ -47,19 +43,25 @@ namespace OnProfNext.Client.Services
}
//Auftrag erstellen
public async Task<(bool Success, string? Error)> CreateOrderAsync(OrderDto newOrder)
public async Task<(bool Success, string? Error)> CreateOrderAsync(OrderDto order)
{
try
{
var response = await _httpClient.PostAsJsonAsync("api/orders", newOrder);
if (!response.IsSuccessStatusCode)
return (false, $"Fehler beim Erstellen: {response.ReasonPhrase}");
return (true, null);
}
catch (HttpRequestException)
var createDto = new OrderCreateDto
{
return (false, "Server nicht erreichbar.");
ProjectId = order.ProjectId,
Auftragsnummer = order.Auftragsnummer,
Titel = order.Titel,
Status = order.Status,
Planstunden = order.Planstunden,
MandantId = order.MandantId,
UserIds = order.Mitarbeiter.Select(u => u.Id).ToList()
};
var response = await _httpClient.PostAsJsonAsync("api/orders", createDto);
return response.IsSuccessStatusCode
? (true, null)
: (false, $"Fehler beim Anlegen: {response.ReasonPhrase}");
}
catch (Exception ex)
{
@ -105,6 +107,24 @@ namespace OnProfNext.Client.Services
}
}
//Set Order Users Async
public async Task<(bool Success, string? Error)> SetOrderUsersAsync(int orderId, List<int> userIds)
{
try
{
var payload = new { OrderId = orderId, UserIds = userIds };
var response = await _httpClient.PostAsJsonAsync("api/orderusers", payload);
if (!response.IsSuccessStatusCode)
return (false, $"Fehler beim Speichern: {response.ReasonPhrase}");
return (true, null);
}
catch (Exception ex)
{
return (false, ex.Message);
}
}
}
}

View File

@ -17,7 +17,7 @@ namespace OnProfNext.Client.Services
{
try
{
var projects = await _httpClient.GetFromJsonAsync<List<ProjectDto>>("api/project");
var projects = await _httpClient.GetFromJsonAsync<List<ProjectDto>>("api/projects");
return (true, projects ?? new(), null);
}
catch (HttpRequestException)
@ -35,7 +35,7 @@ namespace OnProfNext.Client.Services
{
try
{
var project = await _httpClient.GetFromJsonAsync<ProjectDto>($"api/project/{id}");
var project = await _httpClient.GetFromJsonAsync<ProjectDto>($"api/projects/{id}");
if (project == null)
return (false, null, "Projekt nicht gefunden.");
@ -56,7 +56,7 @@ namespace OnProfNext.Client.Services
{
try
{
var response = await _httpClient.PostAsJsonAsync("api/project", dto);
var response = await _httpClient.PostAsJsonAsync("api/projects", dto);
if (!response.IsSuccessStatusCode)
{
return (false, $"Fehler beim Anlegen: {response.ReasonPhrase}");
@ -78,7 +78,7 @@ namespace OnProfNext.Client.Services
{
try
{
var response = await _httpClient.PutAsJsonAsync($"api/project/{id}", dto);
var response = await _httpClient.PutAsJsonAsync($"api/projects/{id}", dto);
if (!response.IsSuccessStatusCode)
{
return (false, $"Fehler beim Aktualisieren: {response.ReasonPhrase}");
@ -100,7 +100,7 @@ namespace OnProfNext.Client.Services
{
try
{
var response = await _httpClient.DeleteAsync($"api/project/{id}");
var response = await _httpClient.DeleteAsync($"api/projects/{id}");
if (!response.IsSuccessStatusCode)
{
return (false, $"Fehler beim Löschen: {response.ReasonPhrase}");

View File

@ -1,4 +1,5 @@
using OnProfNext.Shared.Models;
using OnProfNext.Shared.Models.DTOs;
using System.Net.Http.Json;
namespace OnProfNext.Client.Services
@ -12,20 +13,20 @@ namespace OnProfNext.Client.Services
_httpClient = httpClient;
}
public async Task<(bool Success, List<User>? Data, string? Error)> GetUsersAsync()
public async Task<(bool Success, List<UserDto>? Data, string? Error)> GetUsersAsync()
{
try
{
var users = await _httpClient.GetFromJsonAsync<List<User>>("api/users");
return (true, users ?? new List<User>(), null);
var users = await _httpClient.GetFromJsonAsync<List<UserDto>>("api/users");
return (true, users ?? new List<UserDto>(), null);
}
catch (HttpRequestException ex)
catch (HttpRequestException)
{
return (false, null, "Keine Verbindung zum Server. Bitte später erneut versuchen.");
}
catch (Exception ex)
{
return(false, null, $"Unerwarteter Fehler: {ex.Message}");
return (false, null, $"Unerwarteter Fehler: {ex.Message}");
}
}
@ -48,7 +49,7 @@ namespace OnProfNext.Client.Services
}
public async Task<(bool Success, string? Error)> UpdateUserAsync(User user)
public async Task<(bool Success, string? Error)> UpdateUserAsync(UserDto user)
{
try
{

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,7 @@
{
"mainAssemblyName": "OnProfNext.Client",
"resources": {
"hash": "sha256-SaR622VBzkbZ3Cn15m/brI2xuJEupmhtVwEx8wa/rI4=",
"hash": "sha256-7KW3Qfm9CxYkbtb9+tRJYPyzmuj07fziiiVYwg4iZ/Y=",
"fingerprinting": {
"BlazorBootstrap.ym6tnrklwx.wasm": "BlazorBootstrap.wasm",
"Blazored.Typeahead.5g65vcuhxb.wasm": "Blazored.Typeahead.wasm",
@ -215,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.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"
"OnProfNext.Shared.ycdkuu8x8h.wasm": "OnProfNext.Shared.wasm",
"OnProfNext.Shared.bi3s6hw0ov.pdb": "OnProfNext.Shared.pdb",
"OnProfNext.Client.xxw7n209sx.wasm": "OnProfNext.Client.wasm",
"OnProfNext.Client.mwqxl9mbte.pdb": "OnProfNext.Client.pdb"
},
"jsModuleNative": {
"dotnet.native.9ih887ebfz.js": "sha256-oS7IRiQoVt9ThQ7Y2UM3XoeY0JqPD02cg9IvRdufn2w="
@ -442,12 +442,12 @@
"WindowsBase.vy2l5u79y6.wasm": "sha256-ufB9Mo5joMyUs3DzXWWBFFIZNEVrt6h9N5stYB6Oln4=",
"mscorlib.xd6mv31d55.wasm": "sha256-1YSLR2eZt3ceALFV//vZUF2AloxVil3VlrW1zZYPSEI=",
"netstandard.kaml52uspo.wasm": "sha256-HLEwBpLfzKw2/zGSVzHzFJxznCkt/WIjahrziiMrOpA=",
"OnProfNext.Shared.2mfi0vbe9l.wasm": "sha256-dtTuHimLAmvGF8qILy/wJ/+ayEzY7dCE84UPpHBOASA=",
"OnProfNext.Client.5wq5yy3l8s.wasm": "sha256-m066gnQLM/+y1wYYFW4kr2hCQmPEE259N81Fky7+CwU="
"OnProfNext.Shared.ycdkuu8x8h.wasm": "sha256-olapogpfRGpDGxXuzau/hIQ5o4cyZhq8h7xg3+iq8E4=",
"OnProfNext.Client.xxw7n209sx.wasm": "sha256-haEY6AqSymUCGlI0dfz7DhNA7AgCZibKuDrAYQRP8YA="
},
"pdb": {
"OnProfNext.Shared.t3qtrvr78n.pdb": "sha256-aXAxhpJUbAJFfkq3FS2JtRPFp2plRnylMovNt92Xwwo=",
"OnProfNext.Client.4rg9bpcr9v.pdb": "sha256-ECxFZzQ6HqVe1zWc13ioyvpjeuXnoVabpsyS62HMv+I="
"OnProfNext.Shared.bi3s6hw0ov.pdb": "sha256-PVU32sYeYWTHZ/OZrfTWLqQEkEcm060yrjFwRiK7vs4=",
"OnProfNext.Client.mwqxl9mbte.pdb": "sha256-dh/Pyivioxp3QQaW9jirXIoZFcucZBQ24pD2oJva5IQ="
}
},
"cacheBootResources": true,

View File

@ -13,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+789d44a34459f0132cb03433abffa66c9ff48824")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+910ed8b8f84357d5f19f7be7f67be8f98b22e9c9")]
[assembly: System.Reflection.AssemblyProductAttribute("OnProfNext.Client")]
[assembly: System.Reflection.AssemblyTitleAttribute("OnProfNext.Client")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
a6d164127922e05929c86ac8b818b177b550a13e63904451ca14283aeb814edd
23ad94e3cb51159ce56923b4c951a2f464f99f297debd052bd2c2b60700174d6

View File

@ -1159,16 +1159,16 @@ C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\scopedcss\Compone
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
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.mwqxl9mbte.pdb
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.xxw7n209sx.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.bi3s6hw0ov.pdb
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.ycdkuu8x8h.wasm
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.mwqxl9mbte.pdb.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Client.xxw7n209sx.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.ycdkuu8x8h.wasm.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\bin\Debug\net9.0\wwwroot\_framework\OnProfNext.Shared.bi3s6hw0ov.pdb.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\kzp5jtqdfd-ycdkuu8x8h.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\po7udqtwl2-bi3s6hw0ov.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\cez1jk5yrk-xxw7n209sx.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\b9lx0cbjbg-mwqxl9mbte.gz
C:\DEVQPDC\Proj2\OnProfNext\OnProfNext.Client\obj\Debug\net9.0\compressed\xzgxwa2yd7-2n5b5i9hx5.gz

View File

@ -1,7 +1,7 @@
{
"mainAssemblyName": "OnProfNext.Client",
"resources": {
"hash": "sha256-SaR622VBzkbZ3Cn15m/brI2xuJEupmhtVwEx8wa/rI4=",
"hash": "sha256-7KW3Qfm9CxYkbtb9+tRJYPyzmuj07fziiiVYwg4iZ/Y=",
"fingerprinting": {
"BlazorBootstrap.ym6tnrklwx.wasm": "BlazorBootstrap.wasm",
"Blazored.Typeahead.5g65vcuhxb.wasm": "Blazored.Typeahead.wasm",
@ -215,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.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"
"OnProfNext.Shared.ycdkuu8x8h.wasm": "OnProfNext.Shared.wasm",
"OnProfNext.Shared.bi3s6hw0ov.pdb": "OnProfNext.Shared.pdb",
"OnProfNext.Client.xxw7n209sx.wasm": "OnProfNext.Client.wasm",
"OnProfNext.Client.mwqxl9mbte.pdb": "OnProfNext.Client.pdb"
},
"jsModuleNative": {
"dotnet.native.9ih887ebfz.js": "sha256-oS7IRiQoVt9ThQ7Y2UM3XoeY0JqPD02cg9IvRdufn2w="
@ -442,12 +442,12 @@
"WindowsBase.vy2l5u79y6.wasm": "sha256-ufB9Mo5joMyUs3DzXWWBFFIZNEVrt6h9N5stYB6Oln4=",
"mscorlib.xd6mv31d55.wasm": "sha256-1YSLR2eZt3ceALFV//vZUF2AloxVil3VlrW1zZYPSEI=",
"netstandard.kaml52uspo.wasm": "sha256-HLEwBpLfzKw2/zGSVzHzFJxznCkt/WIjahrziiMrOpA=",
"OnProfNext.Shared.2mfi0vbe9l.wasm": "sha256-dtTuHimLAmvGF8qILy/wJ/+ayEzY7dCE84UPpHBOASA=",
"OnProfNext.Client.5wq5yy3l8s.wasm": "sha256-m066gnQLM/+y1wYYFW4kr2hCQmPEE259N81Fky7+CwU="
"OnProfNext.Shared.ycdkuu8x8h.wasm": "sha256-olapogpfRGpDGxXuzau/hIQ5o4cyZhq8h7xg3+iq8E4=",
"OnProfNext.Client.xxw7n209sx.wasm": "sha256-haEY6AqSymUCGlI0dfz7DhNA7AgCZibKuDrAYQRP8YA="
},
"pdb": {
"OnProfNext.Shared.t3qtrvr78n.pdb": "sha256-aXAxhpJUbAJFfkq3FS2JtRPFp2plRnylMovNt92Xwwo=",
"OnProfNext.Client.4rg9bpcr9v.pdb": "sha256-ECxFZzQ6HqVe1zWc13ioyvpjeuXnoVabpsyS62HMv+I="
"OnProfNext.Shared.bi3s6hw0ov.pdb": "sha256-PVU32sYeYWTHZ/OZrfTWLqQEkEcm060yrjFwRiK7vs4=",
"OnProfNext.Client.mwqxl9mbte.pdb": "sha256-dh/Pyivioxp3QQaW9jirXIoZFcucZBQ24pD2oJva5IQ="
}
},
"cacheBootResources": true,

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"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":{}}
{"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=","y2O\u002BMtvYW\u002BJsiXwnsSGokrtLoPU1BZKq/Rs6jBLWkBA=","XfkTfnoOOODr5Ke\u002BIvlGksb7y1tdjO9D3cio6nfgb6o=","sbScjs7uLbfBbWbJKERtvGeL8se13w0V5s0ufS/zDaQ=","9hC0wthPXB9k40lIbDKdWYtaw2axqBb91\u002BojeVYtTEY=","xLFIqNnTxWnQP99MmbgJqozQM9NzpZ0mMYZdGkZnBU4=","qOlED1ak4sYSTrFn1g6Y7mnsz3UFQEQ/RV3qKJGx0DQ=","Ijp03RBmTBHzhcCv1Sg/aWUghcNgib2sblPmYlOuDYk=","HCsDlEON4uTuZHQ/mLhoZSnOhDE/0YmD0\u002BPzbGk55jk=","DIlQgc8O3Rampq4\u002BuAU34qvAhOQ76ih6rEWZRuXbpGs=","87pLnLY3BRAM5qVJkJZ6NFQjQse85QaOsaRqbVei3f8=","gb5K/PglhYNjQ6udVditV5mmWe8pBL0bkbfqmDZJR3Q=","c//884XNSMx2fHCDDouqzztU4ZLBdyPK5IazFjEu3xg=","A5FwpPfGidgr2NgPt1ofZxg2nxXAcuozNEFd9BE7nsk="],"CachedAssets":{},"CachedCopyCandidates":{}}

View File

@ -1 +1 @@
{"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":{}}
{"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=","y2O\u002BMtvYW\u002BJsiXwnsSGokrtLoPU1BZKq/Rs6jBLWkBA=","XfkTfnoOOODr5Ke\u002BIvlGksb7y1tdjO9D3cio6nfgb6o=","sbScjs7uLbfBbWbJKERtvGeL8se13w0V5s0ufS/zDaQ=","9hC0wthPXB9k40lIbDKdWYtaw2axqBb91\u002BojeVYtTEY=","xLFIqNnTxWnQP99MmbgJqozQM9NzpZ0mMYZdGkZnBU4=","qOlED1ak4sYSTrFn1g6Y7mnsz3UFQEQ/RV3qKJGx0DQ=","Ijp03RBmTBHzhcCv1Sg/aWUghcNgib2sblPmYlOuDYk=","HCsDlEON4uTuZHQ/mLhoZSnOhDE/0YmD0\u002BPzbGk55jk=","DIlQgc8O3Rampq4\u002BuAU34qvAhOQ76ih6rEWZRuXbpGs=","87pLnLY3BRAM5qVJkJZ6NFQjQse85QaOsaRqbVei3f8=","gb5K/PglhYNjQ6udVditV5mmWe8pBL0bkbfqmDZJR3Q=","c//884XNSMx2fHCDDouqzztU4ZLBdyPK5IazFjEu3xg=","A5FwpPfGidgr2NgPt1ofZxg2nxXAcuozNEFd9BE7nsk="],"CachedAssets":{},"CachedCopyCandidates":{}}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
LQIR0vaCUe8ZURwOfXvPmxpSP8m1Mmgdc3YqN7XRVew=
uItkRxd8HGmDpOGXSZUcgBl9qNJmoTF2VPg7ZNs3V00=

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,56 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using OnProfNext.Server.Data;
using OnProfNext.Shared.Models;
namespace OnProfNext.Server.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class OrderUsersController : ControllerBase
{
private readonly AppDbContext _context;
public OrderUsersController(AppDbContext context)
{
_context = context;
}
//GET: api/orderusers/{orderId}
[HttpGet("{orderId}")]
public async Task<ActionResult<IEnumerable<int>>> GetUsersForOrder(int orderId)
{
var userIds = await _context.OrderUsers.Where(ou => ou.OrderId == orderId).Select(ou => ou.UserId).ToListAsync();
return Ok(userIds);
}
//POST: api/orderusers
[HttpPost]
public async Task<IActionResult> SetUsersForOrder([FromBody] OrderUserAssignmentDto dto)
{
var existing = await _context.OrderUsers
.Where(ou => ou.OrderId == dto.OrderId)
.ToListAsync();
_context.OrderUsers.RemoveRange(existing);
var newRelations = dto.UserIds.Select(uid => new OrderUser
{
OrderId = dto.OrderId,
UserId = uid
});
_context.OrderUsers.AddRange(newRelations);
await _context.SaveChangesAsync();
return NoContent();
}
public class OrderUserAssignmentDto
{
public int OrderId { get; set; }
public List<int> UserIds { get; set; } = new();
}
}
}

View File

@ -19,12 +19,14 @@ namespace OnProfNext.Server.Controllers
_context = context;
}
//Get: api/orders/byproject/5
[HttpGet("byproject/{projectId}")]
public async Task<ActionResult<IEnumerable<OrderDto>>> GetOrdersByProject(int projectId)
{
var orders = await _context.Orders
.Include(o => o.OrderUsers)
.ThenInclude(ou => ou.User)
.Where(o => o.ProjectId == projectId)
.AsNoTracking()
.Select(o => new OrderDto
{
Id = o.Id,
@ -34,42 +36,65 @@ namespace OnProfNext.Server.Controllers
Status = o.Status,
Planstunden = o.Planstunden,
Iststunden = o.Iststunden,
Projektcode = o.Projektcode,
MandantId = o.MandantId,
CreatedAt = o.CreatedAt,
UpdatedAt = o.UpdatedAt
Mitarbeiter = o.OrderUsers
.Select(ou => new UserDto
{
Id = ou.User!.Id,
Username = ou.User.Username,
FirstName = ou.User.FirstName,
LastName = ou.User.LastName,
Email = ou.User.Email
}).ToList()
})
.ToListAsync();
return Ok(orders);
}
//GET: api/orders/5
// 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();
var order = await _context.Orders
.Include(o => o.OrderUsers)
.ThenInclude(ou => ou.User)
.AsNoTracking()
.FirstOrDefaultAsync(o => o.Id == id);
return new OrderDto
if (order == null)
return NotFound();
var dto = 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
Id = order.Id,
ProjectId = order.ProjectId,
Auftragsnummer = order.Auftragsnummer,
Titel = order.Titel,
Status = order.Status,
Planstunden = order.Planstunden,
Iststunden = order.Iststunden,
Projektcode = order.Projektcode,
MandantId = order.MandantId,
CreatedAt = order.CreatedAt,
UpdatedAt = order.UpdatedAt,
Mitarbeiter = order.OrderUsers
.Select(ou => new UserDto
{
Id = ou.User!.Id,
Username = ou.User.Username,
FirstName = ou.User.FirstName,
LastName = ou.User.LastName,
Email = ou.User.Email
}).ToList()
};
return Ok(dto);
}
//POST: api/orders
// POST: api/orders
[HttpPost]
public async Task<ActionResult<OrderDto>> CreateOrder(OrderDto dto)
public async Task<ActionResult<OrderDto>> CreateOrder(OrderCreateDto dto)
{
var order = new Order
{
@ -78,8 +103,7 @@ namespace OnProfNext.Server.Controllers
Titel = dto.Titel,
Status = dto.Status,
Planstunden = dto.Planstunden,
Iststunden = dto.Iststunden,
Projektcode = dto.Projektcode,
Iststunden = 0,
MandantId = dto.MandantId,
CreatedAt = DateTime.UtcNow,
UpdatedAt = DateTime.UtcNow
@ -88,11 +112,35 @@ namespace OnProfNext.Server.Controllers
_context.Orders.Add(order);
await _context.SaveChangesAsync();
dto.Id = order.Id;
dto.CreatedAt = order.CreatedAt;
dto.UpdatedAt = order.UpdatedAt;
// Mitarbeiter zuordnen
if (dto.UserIds != null && dto.UserIds.Any())
{
var relations = dto.UserIds.Select(uid => new OrderUser
{
OrderId = order.Id,
UserId = uid
});
return CreatedAtAction(nameof(GetOrder), new { id = order.Id }, dto);
_context.OrderUsers.AddRange(relations);
await _context.SaveChangesAsync();
}
// Antwort zusammenbauen
var createdDto = new OrderDto
{
Id = order.Id,
ProjectId = order.ProjectId,
Auftragsnummer = order.Auftragsnummer,
Titel = order.Titel,
Status = order.Status,
Planstunden = order.Planstunden,
Iststunden = order.Iststunden,
MandantId = order.MandantId,
CreatedAt = order.CreatedAt,
UpdatedAt = order.UpdatedAt
};
return CreatedAtAction(nameof(GetOrder), new { id = order.Id }, createdDto);
}
//PUT: api/orders/5
@ -117,13 +165,18 @@ namespace OnProfNext.Server.Controllers
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteOrder(int id)
{
var order = await _context.Orders.FindAsync(id);
if (order == null) return NotFound();
var order = await _context.Orders
.Include(o => o.OrderUsers)
.FirstOrDefaultAsync(o => o.Id == id);
if (order == null)
return NotFound();
_context.OrderUsers.RemoveRange(order.OrderUsers);
_context.Orders.Remove(order);
await _context.SaveChangesAsync();
return NoContent();
}
}
}

View File

@ -8,11 +8,11 @@ namespace OnProfNext.Server.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ProjectController : ControllerBase
public class ProjectsController : ControllerBase
{
private readonly AppDbContext _context;
public ProjectController(AppDbContext context)
public ProjectsController(AppDbContext context)
{
_context = context;
}

View File

@ -5,6 +5,7 @@ using Microsoft.EntityFrameworkCore;
using OnProfNext.Server.Data;
using OnProfNext.Server.Services;
using OnProfNext.Shared.Models;
using OnProfNext.Shared.Models.DTOs;
namespace OnProfNext.Server.Controllers
{
@ -22,21 +23,45 @@ namespace OnProfNext.Server.Controllers
//GET: api/users
[HttpGet]
public async Task<ActionResult<IEnumerable<User>>> GetUsers()
public async Task<ActionResult<IEnumerable<UserDto>>> GetUsers()
{
return await _context.Users.AsNoTracking().ToListAsync();
var users = await _context.Users.AsNoTracking().Select(u => new UserDto
{
Id = u.Id,
Username = u.Username,
Email = u.Email,
FirstName = u.FirstName,
LastName = u.LastName,
MandantId = u.MandantId,
IsActive = u.IsActive
}).ToListAsync();
return Ok(users);
}
//GET: api/users/5
[HttpGet("{id}")]
public async Task<ActionResult<User>> GetUser(int id)
public async Task<ActionResult<UserDto>> GetUser(int id)
{
var user = await _context.Users.FindAsync(id);
var user = await _context.Users
.AsNoTracking()
.Where(u => u.Id == id)
.Select(u => new UserDto
{
Id = u.Id,
Username = u.Username,
Email = u.Email,
FirstName = u.FirstName,
LastName = u.LastName,
MandantId = u.MandantId,
IsActive = u.IsActive
})
.FirstOrDefaultAsync();
if (user == null)
{
return NotFound();
}
return user;
return Ok(user);
}
//POST: api/users

View File

@ -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+789d44a34459f0132cb03433abffa66c9ff48824")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+910ed8b8f84357d5f19f7be7f67be8f98b22e9c9")]
[assembly: System.Reflection.AssemblyProductAttribute("OnProfNext.Server")]
[assembly: System.Reflection.AssemblyTitleAttribute("OnProfNext.Server")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
0112fdf05bcbbdf85e9b7a9cb66a9b7812c7b77cd789cf405fa10334aba74a96
9c6fea68571aa14755a5757920f4a71a3ea78617a0cb2d16e4a85d871afee2d4

View File

@ -1 +1 @@
1649fe5519326da7f926266c5793daba5ff377a06b40397fb607e486ec674434
8805535874ac805970a5fc9ba19ba7716e78a205f536b46f85b434f940fcc2fa

View File

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

View File

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

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -9,14 +10,18 @@ namespace OnProfNext.Shared.Models.DTOs
public class OrderCreateDto
{
public int ProjectId { get; set; }
[Required]
public string Auftragsnummer { get; set; } = string.Empty;
[Required]
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();
public List<int> UserIds { get; set; } = new();
}
}

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -10,8 +11,13 @@ namespace OnProfNext.Shared.Models.DTOs
{
public int Id { get; set; }
public int ProjectId { get; set; }
[Required]
public string Auftragsnummer { get; set; } = string.Empty;
[Required]
public string Titel { get; set; } = string.Empty;
public string Status { get; set; } = "Geplant";
public decimal Planstunden { get; set; }
public decimal Iststunden { get; set; }
@ -22,4 +28,5 @@ namespace OnProfNext.Shared.Models.DTOs
public List<UserDto> Mitarbeiter { get; set; } = new();
}
}

View File

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

View File

@ -1 +1 @@
cb328140769e1134df8dab5c31eb1d8f2b6b2ea4a2c253028a328aa88903a27f
57cdff878469b70b9b012776a3c6832ee54e415f6e69489a92366cc8882adf20