From 0a96c9c640ba98c77258a3a75db014d2d9d31394 Mon Sep 17 00:00:00 2001 From: Frede Hundewadt Date: Sun, 2 Apr 2023 14:39:23 +0200 Subject: [PATCH] WIP: workplaces and documents --- .../Components/WorkplaceListComponent.razor | 48 ------- .../WorkplaceListComponent.razor.cs | 26 ---- Wonky.Client/Helpers/Utils.cs | 62 +++++++++ .../AdvisorWorkplaceRepository.cs | 36 +----- .../IAdvisorWorkplaceRepository.cs | 8 ++ .../IOfficeUserInfoRepository.cs | 2 +- .../HttpRepository/ISystemUserRepository.cs | 2 +- .../IWorkplaceHttpRepository.cs | 28 ---- .../OfficeUserInfoRepository.cs | 4 +- .../HttpRepository/OrderProcessRepository.cs | 4 +- .../HttpRepository/SystemUserRepository.cs | 3 +- .../HttpRepository/WorkplaceHttpRepository.cs | 80 ------------ .../{AssignedRoles.cs => RoleAssignment.cs} | 2 +- .../Pages/AdvisorCustomerViewEditPage.razor | 9 ++ .../AdvisorWorkplaceDocumentListPage.razor | 36 ++++++ .../AdvisorWorkplaceDocumentListPage.razor.cs | 60 ++++++++- .../Pages/AdvisorWorkplaceListPage.razor | 60 +++++++-- .../Pages/AdvisorWorkplaceListPage.razor.cs | 4 +- ...zor => AdvisorWorkplaceViewEditPage.razor} | 2 +- ... => AdvisorWorkplaceViewEditPage.razor.cs} | 53 ++++++-- ...fficeAdvisorCustomerPagedListPage.razor.cs | 2 +- .../Pages/OfficeAdvisorReportListPage.razor | 4 +- .../OfficeAdvisorReportListPage.razor.cs | 6 +- .../Pages/OfficeOrderCreatePage.razor.cs | 2 +- .../Pages/SupervisorAdvisorViewPage.razor | 4 +- .../Pages/SupervisorAdvisorViewPage.razor.cs | 6 +- Wonky.Client/Pages/SystemUserCreatePage.razor | 6 +- .../Pages/SystemUserCreatePage.razor.cs | 60 ++++----- .../Pages/SystemUserViewEditPage.razor | 86 ++++++++----- .../Pages/SystemUserViewEditPage.razor.cs | 65 +++++++--- .../Pages/WorkplaceDocumentListPage.razor | 6 - .../Pages/WorkplaceDocumentListPage.razor.cs | 35 ----- Wonky.Client/Pages/WorkplaceListPage.razor | 30 ----- Wonky.Client/Pages/WorkplaceListPage.razor.cs | 60 --------- Wonky.Client/Pages/WorkplaceViewPage.razor | 121 ------------------ Wonky.Client/Pages/WorkplaceViewPage.razor.cs | 75 ----------- Wonky.Client/wwwroot/appsettings.json | 4 +- ...agerCreate.cs => UserManagerCreateView.cs} | 39 ++++-- Wonky.Entity/DTO/WorkplaceDto.cs | 46 +++++-- ...isorInfoView.cs => UserInfoAdvisorView.cs} | 2 +- ...merInfoView.cs => UserInfoCustomerView.cs} | 2 +- Wonky.Entity/Views/WorkplaceInventory.cs | 12 ++ Wonky.Entity/Views/WorkplaceProduct.cs | 8 ++ Wonky.Entity/Views/WorkplaceProductVariant.cs | 8 ++ .../Views/WorkplaceProductVariantDoc.cs | 10 ++ 45 files changed, 537 insertions(+), 691 deletions(-) delete mode 100644 Wonky.Client/Components/WorkplaceListComponent.razor delete mode 100644 Wonky.Client/Components/WorkplaceListComponent.razor.cs delete mode 100644 Wonky.Client/HttpRepository/IWorkplaceHttpRepository.cs delete mode 100644 Wonky.Client/HttpRepository/WorkplaceHttpRepository.cs rename Wonky.Client/Models/{AssignedRoles.cs => RoleAssignment.cs} (97%) rename Wonky.Client/Pages/{AdvisorWorkplaceViewPage.razor => AdvisorWorkplaceViewEditPage.razor} (99%) rename Wonky.Client/Pages/{AdvisorWorkplaceViewPage.razor.cs => AdvisorWorkplaceViewEditPage.razor.cs} (64%) delete mode 100644 Wonky.Client/Pages/WorkplaceDocumentListPage.razor delete mode 100644 Wonky.Client/Pages/WorkplaceDocumentListPage.razor.cs delete mode 100644 Wonky.Client/Pages/WorkplaceListPage.razor delete mode 100644 Wonky.Client/Pages/WorkplaceListPage.razor.cs delete mode 100644 Wonky.Client/Pages/WorkplaceViewPage.razor delete mode 100644 Wonky.Client/Pages/WorkplaceViewPage.razor.cs rename Wonky.Entity/DTO/{UserManagerCreate.cs => UserManagerCreateView.cs} (52%) rename Wonky.Entity/Views/{UserAdvisorInfoView.cs => UserInfoAdvisorView.cs} (93%) rename Wonky.Entity/Views/{UserCustomerInfoView.cs => UserInfoCustomerView.cs} (93%) create mode 100644 Wonky.Entity/Views/WorkplaceInventory.cs create mode 100644 Wonky.Entity/Views/WorkplaceProduct.cs create mode 100644 Wonky.Entity/Views/WorkplaceProductVariant.cs create mode 100644 Wonky.Entity/Views/WorkplaceProductVariantDoc.cs diff --git a/Wonky.Client/Components/WorkplaceListComponent.razor b/Wonky.Client/Components/WorkplaceListComponent.razor deleted file mode 100644 index c6668580..00000000 --- a/Wonky.Client/Components/WorkplaceListComponent.razor +++ /dev/null @@ -1,48 +0,0 @@ -@* Copyright (C) 2022 FCS Frede's Computer Services. -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] -*@ - -@using Wonky.Entity.DTO -@using Wonky.Entity.Views - -@if (Workplaces.Any()) -{ -
-
-
- Arbejdssted -
-
- Note -
-
- @foreach (var workplace in Workplaces) - { - -
-
- @workplace.Name -
-
- @workplace.Description -
-
-
- } -
-} -else -{ -
Ingen data
-} diff --git a/Wonky.Client/Components/WorkplaceListComponent.razor.cs b/Wonky.Client/Components/WorkplaceListComponent.razor.cs deleted file mode 100644 index 022fdfeb..00000000 --- a/Wonky.Client/Components/WorkplaceListComponent.razor.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (C) 2022 FCS Frede's Computer Services. -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] -// - -using Microsoft.AspNetCore.Components; -using Wonky.Entity.Views; - -namespace Wonky.Client.Components; - -public partial class WorkplaceListComponent -{ - [Parameter] public List Workplaces { get; set; } = new(); - - [Parameter] public string CompanyId { get; set; } = ""; -} \ No newline at end of file diff --git a/Wonky.Client/Helpers/Utils.cs b/Wonky.Client/Helpers/Utils.cs index e457fb65..3a4985ae 100644 --- a/Wonky.Client/Helpers/Utils.cs +++ b/Wonky.Client/Helpers/Utils.cs @@ -16,6 +16,7 @@ using System.Net.Mail; using System.Text.RegularExpressions; using Wonky.Client.Models; +using Wonky.Entity.DTO; namespace Wonky.Client.Helpers; @@ -24,6 +25,67 @@ namespace Wonky.Client.Helpers; /// public static class Utils { + /// + /// map user role edit model to role assignment model + /// + /// + /// + public static List MapSaveAssignedRoles(RoleAssignment model) + { + return new List() + { + new (){ Name = "Admin", Assigned = model.Admin}, + new (){ Name = "Advisor", Assigned = model.Advisor}, + new (){ Name = "EDoc", Assigned = model.EDoc}, + new (){ Name = "EShop", Assigned = model.EShop}, + new (){ Name = "Managment", Assigned = model.Management}, + new (){ Name = "Office", Assigned = model.Office}, + new (){ Name = "Supervisor", Assigned = model.Supervisor}, + new (){ Name = "Warehouse", Assigned = model.Warehouse} + }; + } + + /// + /// map user role assignment to edit model + /// + /// + /// + public static RoleAssignment MapEditAssignedRoles(UserManagerEditView model) + { + var x = new RoleAssignment(); + foreach (var role in model.AssignedRoles) + { + switch (role.Name.ToLower()) + { + case "admin": + x.Admin = role.Assigned; + break; + case "advisor": + x.Advisor = role.Assigned; + break; + case "edoc": + x.EDoc = role.Assigned; + break; + case "eshop": + x.EShop = role.Assigned; + break; + case "management": + x.Management = role.Assigned; + break; + case "office": + x.Office = role.Assigned; + break; + case "supervisor": + x.Supervisor = role.Assigned; + break; + case "warehouse": + x.Warehouse = role.Assigned; + break; + } + } + return x; + } + /// /// Sanitize string by removing everything but digits /// diff --git a/Wonky.Client/HttpRepository/AdvisorWorkplaceRepository.cs b/Wonky.Client/HttpRepository/AdvisorWorkplaceRepository.cs index 863e2592..2486ae51 100644 --- a/Wonky.Client/HttpRepository/AdvisorWorkplaceRepository.cs +++ b/Wonky.Client/HttpRepository/AdvisorWorkplaceRepository.cs @@ -46,11 +46,6 @@ public class AdvisorWorkplaceRepository : IAdvisorWorkplaceRepository _api = configuration.Value; } - /// - /// Get Workplaces for given customer id - /// - /// - /// public async Task> GetWorkplaces(string companyId) { var result = await _client.GetFromJsonAsync>( @@ -58,12 +53,6 @@ public class AdvisorWorkplaceRepository : IAdvisorWorkplaceRepository return result ?? new List(); } - /// - /// Get specific workplace using customer id and workplace id - /// - /// - /// - /// public async Task GetWorkplace(string companyId, string workplaceId) { var result = await _client.GetFromJsonAsync( @@ -71,39 +60,28 @@ public class AdvisorWorkplaceRepository : IAdvisorWorkplaceRepository return result ?? new WorkplaceDto(); } - /// - /// Create new workplace given the customer id and workplace data - /// - /// - /// - /// public async Task CreateWorkplace(string companyId, WorkplaceDto workplace) { await _client.PostAsJsonAsync( $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}", workplace, _options); } - /// - /// Update workplace given the customer id and updated data - /// - /// - /// - /// public async Task UpdateWorkplace(string companyId, WorkplaceDto workplace) { await _client.PutAsJsonAsync( $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplace.WorkplaceId}", workplace, _options); } - /// - /// Delete workplace given customer id and workplace id - /// - /// - /// - /// public async Task DeleteWorkplace(string companyId, string workplaceId) { await _client.DeleteAsync( $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}"); } + + public async Task GetWorkplaceInventory(string companyId, string workplaceId) + { + var result = await _client.GetFromJsonAsync( + $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}/documents"); + return result ?? new WorkplaceInventory(); + } } \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/IAdvisorWorkplaceRepository.cs b/Wonky.Client/HttpRepository/IAdvisorWorkplaceRepository.cs index 56159e8c..acc2c2dc 100644 --- a/Wonky.Client/HttpRepository/IAdvisorWorkplaceRepository.cs +++ b/Wonky.Client/HttpRepository/IAdvisorWorkplaceRepository.cs @@ -61,4 +61,12 @@ public interface IAdvisorWorkplaceRepository /// /// Task DeleteWorkplace(string companyId, string workplaceId); + + /// + /// Get list of products and documentation for workplace + /// + /// + /// + /// + Task GetWorkplaceInventory(string companyId, string workplaceId); } \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/IOfficeUserInfoRepository.cs b/Wonky.Client/HttpRepository/IOfficeUserInfoRepository.cs index 0e1567e1..3cebd1ba 100644 --- a/Wonky.Client/HttpRepository/IOfficeUserInfoRepository.cs +++ b/Wonky.Client/HttpRepository/IOfficeUserInfoRepository.cs @@ -46,5 +46,5 @@ public interface IOfficeUserInfoRepository /// /// /// - Task GetUserInfo(string userId); + Task GetUserInfo(string userId); } \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/ISystemUserRepository.cs b/Wonky.Client/HttpRepository/ISystemUserRepository.cs index 414d9c6f..2ca77e3e 100644 --- a/Wonky.Client/HttpRepository/ISystemUserRepository.cs +++ b/Wonky.Client/HttpRepository/ISystemUserRepository.cs @@ -47,7 +47,7 @@ public interface ISystemUserRepository /// /// /// - Task CreateUser(UserManagerCreate model); + Task CreateUser(UserManagerCreateView model); /// /// Update User using userId and updated data diff --git a/Wonky.Client/HttpRepository/IWorkplaceHttpRepository.cs b/Wonky.Client/HttpRepository/IWorkplaceHttpRepository.cs deleted file mode 100644 index 7c8c3e76..00000000 --- a/Wonky.Client/HttpRepository/IWorkplaceHttpRepository.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (C) 2022 FCS Frede's Computer Services. -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] -// - -using Wonky.Entity.DTO; -using Wonky.Entity.Views; - -namespace Wonky.Client.HttpRepository; - -public interface IWorkplaceHttpRepository -{ - Task> GetWorkplaces(string companyId); - Task GetWorkplace(string companyId, string workplaceId); - Task CreateWorkplace(string companyId, WorkplaceDto workplace); - Task UpdateWorkplace(string companyId, WorkplaceDto workplace); - Task DeleteWorkplace(string companyId, string workplaceId); -} \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/OfficeUserInfoRepository.cs b/Wonky.Client/HttpRepository/OfficeUserInfoRepository.cs index cf028500..eb13b77b 100644 --- a/Wonky.Client/HttpRepository/OfficeUserInfoRepository.cs +++ b/Wonky.Client/HttpRepository/OfficeUserInfoRepository.cs @@ -75,9 +75,9 @@ public class OfficeUserInfoRepository : IOfficeUserInfoRepository /// /// /// - public async Task GetUserInfo(string userId) + public async Task GetUserInfo(string userId) { - return await _client.GetFromJsonAsync($"{_api.UserData}/{userId}"); + return await _client.GetFromJsonAsync($"{_api.UserData}/{userId}"); } } \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/OrderProcessRepository.cs b/Wonky.Client/HttpRepository/OrderProcessRepository.cs index 0929f509..7e9e7a90 100644 --- a/Wonky.Client/HttpRepository/OrderProcessRepository.cs +++ b/Wonky.Client/HttpRepository/OrderProcessRepository.cs @@ -53,7 +53,7 @@ public class OrderProcessRepository : IOrderProcessRepository /// public async Task> GetWarehouseOrderListByDate(string date) { - return await _client.GetFromJsonAsync>($"{_api.Warehouse}?date={date}", _options); + return await _client.GetFromJsonAsync>($"{_api.Warehouse}/date?date={date}", _options); } /// @@ -65,7 +65,7 @@ public class OrderProcessRepository : IOrderProcessRepository public async Task> GetWarehouseOrderListByStatus(string status, string express = "") { return await _client.GetFromJsonAsync>( - $"{_api.Warehouse}?status={status}&express={express}", _options); + $"{_api.Warehouse}?status={status}&express={express}/state", _options); } /// diff --git a/Wonky.Client/HttpRepository/SystemUserRepository.cs b/Wonky.Client/HttpRepository/SystemUserRepository.cs index c261a0b9..63b8278d 100644 --- a/Wonky.Client/HttpRepository/SystemUserRepository.cs +++ b/Wonky.Client/HttpRepository/SystemUserRepository.cs @@ -72,11 +72,12 @@ public class SystemUserRepository : ISystemUserRepository /// /// /// - public async Task CreateUser(UserManagerCreate model) + public async Task CreateUser(UserManagerCreateView model) { var result = await _client.PostAsJsonAsync($"{_api.UserManager}", model, _options); if (!result.IsSuccessStatusCode) return new UserManagerEditView(); + try { return await result.Content.ReadFromJsonAsync(); diff --git a/Wonky.Client/HttpRepository/WorkplaceHttpRepository.cs b/Wonky.Client/HttpRepository/WorkplaceHttpRepository.cs deleted file mode 100644 index 7c0a9cfa..00000000 --- a/Wonky.Client/HttpRepository/WorkplaceHttpRepository.cs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) 2022 FCS Frede's Computer Services. -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] -// - -using System.Net.Http.Json; -using System.Text.Json; -using Microsoft.AspNetCore.Components; -using Microsoft.Extensions.Options; -using Wonky.Entity.Configuration; -using Wonky.Entity.DTO; -using Wonky.Entity.Views; - -namespace Wonky.Client.HttpRepository; - -public class WorkplaceHttpRepository : IWorkplaceHttpRepository -{ - private readonly JsonSerializerOptions? _options = new JsonSerializerOptions - { - PropertyNameCaseInsensitive = true - }; - - private readonly NavigationManager _navigation; - private ILogger _logger; - private readonly HttpClient _client; - private readonly ApiConfig _api; - - public WorkplaceHttpRepository(HttpClient client, - ILogger logger, - NavigationManager navigation, - IOptions configuration) - { - _client = client; - _logger = logger; - _navigation = navigation; - _api = configuration.Value; - } - - public async Task> GetWorkplaces(string companyId) - { - var result = await _client.GetFromJsonAsync>( - $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}", _options); - return result ?? new List(); - } - - public async Task GetWorkplace(string companyId, string workplaceId) - { - var result = await _client.GetFromJsonAsync( - $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}", _options); - return result ?? new WorkplaceDto(); - } - - public async Task CreateWorkplace(string companyId, WorkplaceDto workplace) - { - await _client.PostAsJsonAsync( - $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}", workplace, _options); - } - - public async Task UpdateWorkplace(string companyId, WorkplaceDto workplace) - { - await _client.PutAsJsonAsync( - $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplace.WorkplaceId}", workplace, _options); - } - - public async Task DeleteWorkplace(string companyId, string workplaceId) - { - await _client.DeleteAsync( - $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}"); - } -} \ No newline at end of file diff --git a/Wonky.Client/Models/AssignedRoles.cs b/Wonky.Client/Models/RoleAssignment.cs similarity index 97% rename from Wonky.Client/Models/AssignedRoles.cs rename to Wonky.Client/Models/RoleAssignment.cs index ebbbd6f9..d21bcf15 100644 --- a/Wonky.Client/Models/AssignedRoles.cs +++ b/Wonky.Client/Models/RoleAssignment.cs @@ -15,7 +15,7 @@ namespace Wonky.Client.Models; -public class AssignedRoles +public class RoleAssignment { public bool Admin { get; set; } public bool Advisor { get; set; } diff --git a/Wonky.Client/Pages/AdvisorCustomerViewEditPage.razor b/Wonky.Client/Pages/AdvisorCustomerViewEditPage.razor index f7877cc0..d786c8b4 100644 --- a/Wonky.Client/Pages/AdvisorCustomerViewEditPage.razor +++ b/Wonky.Client/Pages/AdvisorCustomerViewEditPage.razor @@ -247,6 +247,15 @@ + + +
+ +
+ + } @if (Working) diff --git a/Wonky.Client/Pages/AdvisorWorkplaceDocumentListPage.razor b/Wonky.Client/Pages/AdvisorWorkplaceDocumentListPage.razor index 200852c9..4d6cbf3f 100644 --- a/Wonky.Client/Pages/AdvisorWorkplaceDocumentListPage.razor +++ b/Wonky.Client/Pages/AdvisorWorkplaceDocumentListPage.razor @@ -20,7 +20,43 @@ @page "/advisor/customers/{CompanyId}/workplaces/{WorkplaceId}/documents" Dokumenter for Arbejdssted + +

Dokumenter

+@if (WorkplaceInventory.Products.Any()) +{ + + + + + + + + + + + @foreach (var document in Documents) + { + + + + + + + } + +
ProduktAPBAPVOprettet
+ @document.ProductName + + @document.ApbLink + + @document.ApvLink + + @document.DocumentDate +
+} + + @if (Working) { diff --git a/Wonky.Client/Pages/AdvisorWorkplaceDocumentListPage.razor.cs b/Wonky.Client/Pages/AdvisorWorkplaceDocumentListPage.razor.cs index 32c6b05f..477c96e6 100644 --- a/Wonky.Client/Pages/AdvisorWorkplaceDocumentListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorWorkplaceDocumentListPage.razor.cs @@ -16,18 +16,72 @@ using Microsoft.AspNetCore.Components; using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpRepository; +using Wonky.Entity.DTO; +using Wonky.Entity.Views; #pragma warning disable CS8618 namespace Wonky.Client.Pages; -public partial class AdvisorWorkplaceDocumentListPage +public partial class AdvisorWorkplaceDocumentListPage : IDisposable { + // ################################################################## + [Inject] public HttpInterceptorService Interceptor { get; set; } + [Inject] public IAdvisorWorkplaceRepository WorkplaceRepo { get; set; } + + // ################################################################## [Parameter] public string CompanyId { get; set; } = ""; [Parameter] public string WorkplaceId { get; set; } = ""; - [Inject] public HttpInterceptorService _interceptor { get; set; } - [Inject] public IAdvisorWorkplaceRepository Workplaces { get; set; } + // ################################################################## private bool Working { get; set; } = true; + private WorkplaceInventory WorkplaceInventory { get; set; } = new(); + private List Documents { get; set; } = new(); + + protected override async Task OnParametersSetAsync() + { + Interceptor.RegisterEvent(); + Interceptor.RegisterBeforeSendEvent(); + + WorkplaceInventory = await WorkplaceRepo.GetWorkplaceInventory(CompanyId, WorkplaceId); + + foreach (var product in WorkplaceInventory.Products) + { + var newDoc = new Document(); + foreach (var variant in product.Variants) + { + newDoc.ProductName = variant.VariantName; + foreach (var doc in variant.Docs) + { + if (doc.DocumentTypeEnum == "Apb") + { + newDoc.ApbLink = doc.DocumentLink; + } + else + { + newDoc.ApvLink = doc.DocumentLink; + } + newDoc.DocumentDate = doc.DocumentDate; + } + Documents.Add(newDoc); + } + } + + Working = false; + } + + + public void Dispose() + { + Interceptor.DisposeEvent(); + } +} + +internal sealed class Document +{ + public string ProductName { get; set; } + public string ApbLink { get; set; } + public string ApvLink { get; set; } + public string DocumentDate { get; set; } } \ No newline at end of file diff --git a/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor b/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor index 6c005495..9a7aacbe 100644 --- a/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor +++ b/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor @@ -19,17 +19,57 @@ @attribute [Authorize(Roles = "Advisor")] @page "/advisor/customers/{CompanyId}/workplaces" @Company.Name arbejdssteder -
-
-

@Company.Name

-
-
-
- -
+
+
+
+
+

@Company.Name

+
+
+
NY
+
+
+
+
+
+
+ @if (Workplaces.Any()) + { +
+
+
+
+

Navn

+
+
+

Beskrivelse

+
+
+
+ @foreach (var workplace in Workplaces) + { + +
+
+ @workplace.Name +
+
+ @workplace.Description +
+
+
+ } +
+ } + else + { +
Ingen data
+ } +
+
@if (Working) { - -} + +} \ No newline at end of file diff --git a/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor.cs b/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor.cs index 71d02038..55dfede1 100644 --- a/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor.cs @@ -29,7 +29,7 @@ public partial class AdvisorWorkplaceListPage : IDisposable [Inject] public IAdvisorWorkplaceRepository WorkplaceRepo { get; set; } [Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; } - private List WorkplaceList { get; set; } = new(); + private List Workplaces { get; set; } = new(); private CompanyDto Company { get; set; } = new(); private bool Working { get; set; } = true; @@ -44,7 +44,7 @@ public partial class AdvisorWorkplaceListPage : IDisposable protected override async Task OnInitializedAsync() { Working = true; - WorkplaceList = await WorkplaceRepo.GetWorkplaces(CompanyId); + Workplaces = await WorkplaceRepo.GetWorkplaces(CompanyId); Working = false; } diff --git a/Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor b/Wonky.Client/Pages/AdvisorWorkplaceViewEditPage.razor similarity index 99% rename from Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor rename to Wonky.Client/Pages/AdvisorWorkplaceViewEditPage.razor index b17237ee..f110f102 100644 --- a/Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor +++ b/Wonky.Client/Pages/AdvisorWorkplaceViewEditPage.razor @@ -105,7 +105,7 @@
- +
diff --git a/Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor.cs b/Wonky.Client/Pages/AdvisorWorkplaceViewEditPage.razor.cs similarity index 64% rename from Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor.cs rename to Wonky.Client/Pages/AdvisorWorkplaceViewEditPage.razor.cs index 6bf81b6b..92b2e868 100644 --- a/Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorWorkplaceViewEditPage.razor.cs @@ -19,36 +19,42 @@ using Microsoft.AspNetCore.Components.Forms; using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpRepository; using Wonky.Entity.DTO; -#pragma warning disable CS8618 +#pragma warning disable CS8618 namespace Wonky.Client.Pages; -public partial class AdvisorWorkplaceViewPage : IDisposable +public partial class AdvisorWorkplaceViewEditPage : IDisposable { - [Parameter] public string CompanyId { get; set; } = ""; - [Parameter] public string WorkplaceId { get; set; } = ""; + // ############################################################# [Inject] public IAdvisorWorkplaceRepository Workplaces { get; set; } [Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public NavigationManager Navigator { get; set; } + + // ############################################################# + [Parameter] public string CompanyId { get; set; } = ""; + [Parameter] public string WorkplaceId { get; set; } = ""; + + // ############################################################# private WorkplaceDto Workplace { get; set; } = new(); private EditContext WorkplaceContext { get; set; } private bool Working { get; set; } = true; - - protected override async Task OnParametersSetAsync() + + protected override async Task OnInitializedAsync() { + WorkplaceContext = new EditContext(Workplace); + WorkplaceContext.OnFieldChanged += HandleFieldChanged; + WorkplaceContext.OnValidationStateChanged += ValidationChanged; + Interceptor.RegisterEvent(); Interceptor.RegisterBeforeSendEvent(); Workplace = await Workplaces.GetWorkplace(CompanyId, WorkplaceId); + Working = false; + StateHasChanged(); } - - protected override void OnInitialized() - { - WorkplaceContext = new EditContext(Workplace); - } - + private async Task SubmitUpdate() { Working = true; @@ -56,6 +62,7 @@ public partial class AdvisorWorkplaceViewPage : IDisposable Working = false; } + private async Task DeleteWorkplace() { Working = true; @@ -63,8 +70,30 @@ public partial class AdvisorWorkplaceViewPage : IDisposable Navigator.NavigateTo($"/advisor/customers/{CompanyId}/workplaces"); } + private void HandleFieldChanged(object sender, FieldChangedEventArgs e) + { + + WorkplaceContext.Validate(); + + StateHasChanged(); + } + + private void ValidationChanged(object sender, ValidationStateChangedEventArgs e) + { + WorkplaceContext.OnFieldChanged -= HandleFieldChanged; + WorkplaceContext.OnValidationStateChanged -= ValidationChanged; + + WorkplaceContext = new EditContext(Workplace); + + WorkplaceContext.OnFieldChanged += HandleFieldChanged; + WorkplaceContext.OnValidationStateChanged += ValidationChanged; + } + + public void Dispose() { + WorkplaceContext.OnFieldChanged += HandleFieldChanged; + WorkplaceContext.OnValidationStateChanged += ValidationChanged; Interceptor.DisposeEvent(); } } \ No newline at end of file diff --git a/Wonky.Client/Pages/OfficeAdvisorCustomerPagedListPage.razor.cs b/Wonky.Client/Pages/OfficeAdvisorCustomerPagedListPage.razor.cs index 5af73533..08e08c6f 100644 --- a/Wonky.Client/Pages/OfficeAdvisorCustomerPagedListPage.razor.cs +++ b/Wonky.Client/Pages/OfficeAdvisorCustomerPagedListPage.razor.cs @@ -47,7 +47,7 @@ public partial class OfficeAdvisorCustomerPagedListPage : IDisposable private bool ShowFolded { get; set; } private string ToggleFoldedText { get; set; } = "Vis Lukkede"; private bool Working { get; set; } = true; - private UserAdvisorInfoView SalesRep { get; set; } = new(); + private UserInfoAdvisorView SalesRep { get; set; } = new(); protected override async Task OnParametersSetAsync() { diff --git a/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor b/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor index ceb07958..1f2b5d67 100644 --- a/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor +++ b/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor @@ -19,11 +19,11 @@ @attribute [Authorize(Roles = "Admin,Office")] @page "/office/users/advisors/{CountryCode}/{UserId}/reports" -Rapport Arkiv @AdvisorInfo.FirstName @AdvisorInfo.LastName +Rapport Arkiv @InfoAdvisor.FirstName @InfoAdvisor.LastName
- Rapport Arkiv - @AdvisorInfo.FirstName @AdvisorInfo.LastName + Rapport Arkiv - @InfoAdvisor.FirstName @InfoAdvisor.LastName
diff --git a/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor.cs b/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor.cs index 68d33841..7f597f34 100644 --- a/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor.cs +++ b/Wonky.Client/Pages/OfficeAdvisorReportListPage.razor.cs @@ -38,7 +38,7 @@ public partial class OfficeAdvisorReportListPage : IDisposable // ############################################################# private List ActivityReports { get; set; } = new(); private bool Working { get; set; } = true; - private UserAdvisorInfoView AdvisorInfo { get; set; } = new(); + private UserInfoAdvisorView InfoAdvisor { get; set; } = new(); /// /// override OnParametersSeAsync @@ -48,8 +48,8 @@ public partial class OfficeAdvisorReportListPage : IDisposable Interceptor.RegisterEvent(); Interceptor.RegisterBeforeSendEvent(); - AdvisorInfo = await UserRepo.GetUserInfo(UserId); - while (string.IsNullOrWhiteSpace(AdvisorInfo.UserId)) + InfoAdvisor = await UserRepo.GetUserInfo(UserId); + while (string.IsNullOrWhiteSpace(InfoAdvisor.UserId)) { await Task.Delay(500); } diff --git a/Wonky.Client/Pages/OfficeOrderCreatePage.razor.cs b/Wonky.Client/Pages/OfficeOrderCreatePage.razor.cs index 381499c1..c4c9f5b1 100644 --- a/Wonky.Client/Pages/OfficeOrderCreatePage.razor.cs +++ b/Wonky.Client/Pages/OfficeOrderCreatePage.razor.cs @@ -62,7 +62,7 @@ public partial class OfficeOrderCreatePage : IDisposable private UserManagerEditView UserInfo { get; set; } = new(); private SalesItemView SelectedItem { get; set; } = new(); private ActivityDto Activity { get; set; } = new(); - private UserAdvisorInfoView SalesRep { get; set; } = new(); + private UserInfoAdvisorView SalesRep { get; set; } = new(); // edit context private EditContext ActivityContext { get; set; } // variables diff --git a/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor b/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor index a754ccfd..5f54cc23 100644 --- a/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor +++ b/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor @@ -18,11 +18,11 @@ @attribute [Authorize(Roles = "Admin,Management,Supervisor")] @page "/supervisor/advisors/{UserId}" -Rapport Arkiv @AdvisorInfo.FirstName @AdvisorInfo.LastName +Rapport Arkiv @InfoAdvisor.FirstName @InfoAdvisor.LastName
- Rapport Arkiv - @AdvisorInfo.FirstName @AdvisorInfo.LastName + Rapport Arkiv - @InfoAdvisor.FirstName @InfoAdvisor.LastName
diff --git a/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor.cs b/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor.cs index 49f06f20..f4e3dcc1 100644 --- a/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor.cs +++ b/Wonky.Client/Pages/SupervisorAdvisorViewPage.razor.cs @@ -22,7 +22,7 @@ public partial class SupervisorAdvisorViewPage : IDisposable // ############################################################# - private UserAdvisorInfoView AdvisorInfo { get; set; } = new(); + private UserInfoAdvisorView InfoAdvisor { get; set; } = new(); private List ActivityReports { get; set; } = new(); private bool Working { get; set; } = true; @@ -32,9 +32,9 @@ public partial class SupervisorAdvisorViewPage : IDisposable Interceptor.RegisterEvent(); Interceptor.RegisterBeforeSendEvent(); - AdvisorInfo = await UserRepo.GetUserInfo(UserId); + InfoAdvisor = await UserRepo.GetUserInfo(UserId); - while (string.IsNullOrWhiteSpace(AdvisorInfo.UserId)) + while (string.IsNullOrWhiteSpace(InfoAdvisor.UserId)) { await Task.Delay(500); } diff --git a/Wonky.Client/Pages/SystemUserCreatePage.razor b/Wonky.Client/Pages/SystemUserCreatePage.razor index e3b26e12..303db461 100644 --- a/Wonky.Client/Pages/SystemUserCreatePage.razor +++ b/Wonky.Client/Pages/SystemUserCreatePage.razor @@ -26,7 +26,7 @@
- +
@@ -53,7 +53,7 @@
- +
@@ -102,7 +102,7 @@
-
+
diff --git a/Wonky.Client/Pages/SystemUserCreatePage.razor.cs b/Wonky.Client/Pages/SystemUserCreatePage.razor.cs index 38a52109..76d2e571 100644 --- a/Wonky.Client/Pages/SystemUserCreatePage.razor.cs +++ b/Wonky.Client/Pages/SystemUserCreatePage.razor.cs @@ -31,58 +31,54 @@ namespace Wonky.Client.Pages; public partial class SystemUserCreatePage : IDisposable { // ############################################################# - [Inject] public HttpInterceptorService Interceptor { get; set; } - [Inject] public ISystemUserRepository UserRepo { get; set; } - [Inject] public ILogger Logger { get; set; } - [Inject] public IToastService Toaster { get; set; } - + [Inject] public HttpInterceptorService Interceptor { get; set; } + [Inject] public ISystemUserRepository UserRepo { get; set; } + [Inject] public ILogger Logger { get; set; } + [Inject] public IToastService Toaster { get; set; } + // ############################################################# - private UserManagerCreate NewUserInfo { get; set; } = new(); + private UserManagerCreateView NewUserInfo { get; set; } = new(); private EditContext NewUserContext { get; set; } private bool ContextInvalid { get; set; } = true; private bool Working { get; set; } = true; private bool ReadOnly { get; set; } = true; private PasswordInput PasswdInput { get; set; } = new(); - private AssignedRoles AssignedRoles { get; set; } = new(); - + private RoleAssignment AssignedRoles { get; set; } = new(); + private readonly JsonSerializerOptions _options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; - - protected override async Task OnParametersSetAsync() + + + protected override void OnParametersSet() { Interceptor.RegisterEvent(); Interceptor.RegisterBeforeSendEvent(); - + NewUserContext = new EditContext(NewUserInfo); NewUserContext.OnFieldChanged += ContextHandleFieldChanged!; NewUserContext.OnValidationStateChanged += ContextValidationChanged; Working = false; } - - private async Task CreateUser() - { - // NewUserInfo.AssignedRoles = new List() - // { - // new (){ Name = "Admin", Assigned = false }, - // new (){ Name = "Advisor", Assigned = false }, - // new (){ Name = "Management", Assigned = false }, - // new (){ Name = "Office", Assigned = false }, - // new (){ Name = "Supervisor", Assigned = false }, - // new (){ Name = "Warehouse", Assigned = false }, - // }; + + private async Task CreateUserRequest() + { ReadOnly = true; Working = true; + + NewUserInfo.AssignedRoles = Utils.MapSaveAssignedRoles(AssignedRoles); + Toaster.ShowInfo("Sender data til server ..."); await UserRepo.CreateUser(NewUserInfo); Working = false; Toaster.ShowInfo("Bruger er oprettet ..."); } - private void ContextHandleFieldChanged(object sender, FieldChangedEventArgs e) + + private void ContextHandleFieldChanged(object? sender, FieldChangedEventArgs e) { Logger.LogDebug("contextHandleFieldChanged => e.FieldIdentifier.FieldName {}", e.FieldIdentifier.FieldName); if (e.FieldIdentifier.FieldName == "NewPassword") @@ -93,23 +89,27 @@ public partial class SystemUserCreatePage : IDisposable return; } } + NewUserInfo.Passwd = PasswdInput.NewPassword; ContextInvalid = !NewUserContext.Validate(); StateHasChanged(); } + + private void ContextValidationChanged(object? sender, ValidationStateChangedEventArgs e) { ContextInvalid = true; - - NewUserContext.OnFieldChanged -= ContextHandleFieldChanged!; + + NewUserContext.OnFieldChanged -= ContextHandleFieldChanged; NewUserContext.OnValidationStateChanged -= ContextValidationChanged; - + NewUserContext = new EditContext(NewUserInfo); - - NewUserContext.OnFieldChanged += ContextHandleFieldChanged!; + + NewUserContext.OnFieldChanged += ContextHandleFieldChanged; NewUserContext.OnValidationStateChanged += ContextValidationChanged; } - + + public void Dispose() { Interceptor.DisposeEvent(); diff --git a/Wonky.Client/Pages/SystemUserViewEditPage.razor b/Wonky.Client/Pages/SystemUserViewEditPage.razor index 424a055c..935a23c6 100644 --- a/Wonky.Client/Pages/SystemUserViewEditPage.razor +++ b/Wonky.Client/Pages/SystemUserViewEditPage.razor @@ -30,9 +30,9 @@
- @if (!string.IsNullOrWhiteSpace(UserData.UserId)) + @if (!string.IsNullOrWhiteSpace(UserInfo.UserId)) { - +
@@ -43,15 +43,15 @@ Fornavn - - + + Efternavn - - + + @@ -60,9 +60,9 @@
- + - +
@@ -70,9 +70,9 @@
- + - +
@@ -82,17 +82,17 @@
- + - +
Landekode - - + + @@ -100,28 +100,49 @@ Spærret - - + + Beskrivelse
- + - +
Roller - @foreach (var role in UserData.AssignedRoles) - { -
- - -
- } +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
@@ -130,18 +151,21 @@
- +
- + +
+
+
- - + +

NULSTIL ADGANGSKODE

Password politik
@@ -163,7 +187,7 @@
- +
@@ -175,4 +199,4 @@ @if (Working) { -} +} \ No newline at end of file diff --git a/Wonky.Client/Pages/SystemUserViewEditPage.razor.cs b/Wonky.Client/Pages/SystemUserViewEditPage.razor.cs index 5f4c803f..348278f6 100644 --- a/Wonky.Client/Pages/SystemUserViewEditPage.razor.cs +++ b/Wonky.Client/Pages/SystemUserViewEditPage.razor.cs @@ -21,6 +21,7 @@ using Microsoft.AspNetCore.Components.Forms; using Wonky.Client.Helpers; using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpRepository; +using Wonky.Client.Models; using Wonky.Entity.DTO; #pragma warning disable CS8618 @@ -29,19 +30,19 @@ namespace Wonky.Client.Pages; public partial class SystemUserViewEditPage : IDisposable { - // ############################################################# - [Inject] public HttpInterceptorService Interceptor { get; set; } - [Inject] public ISystemUserRepository UserRepo { get; set; } - [Inject] public ILogger Logger { get; set; } - [Inject] public IToastService Toaster { get; set; } - + [Inject] public HttpInterceptorService Interceptor { get; set; } + [Inject] public ISystemUserRepository UserRepo { get; set; } + [Inject] public ILogger Logger { get; set; } + [Inject] public IToastService Toaster { get; set; } + [Inject] public NavigationManager Navigator { get; set; } + // ############################################################# [Parameter] public string UserId { get; set; } = ""; [Parameter] public string CountryCode { get; set; } = ""; // ############################################################# - private UserManagerEditView UserData { get; set; } = new(); + private UserManagerEditView UserInfo { get; set; } = new(); private EditContext UserEditContext { get; set; } private ResetPasswordDto Passwords { get; set; } = new(); private EditContext PasswdContext { get; set; } @@ -49,56 +50,80 @@ public partial class SystemUserViewEditPage : IDisposable private bool Working { get; set; } = true; private bool ReadOnly { get; set; } = true; + private RoleAssignment AssignedRoles { get; set; } = new(); + private readonly JsonSerializerOptions _options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; - + + protected override async Task OnParametersSetAsync() { Interceptor.RegisterEvent(); Interceptor.RegisterBeforeSendEvent(); - - UserData = await UserRepo.GetUserInfo(UserId); - UserEditContext = new EditContext(UserData); + UserInfo = await UserRepo.GetUserInfo(UserId); + + AssignedRoles = Utils.MapEditAssignedRoles(UserInfo); + + UserEditContext = new EditContext(UserInfo); PasswdContext = new EditContext(Passwords); - + PasswdContext.OnFieldChanged += PwHandleFieldChanged!; PasswdContext.OnValidationStateChanged += PwValidationChanged; + Working = false; } - - private async Task UpdateUser() + + + private async Task SendUpdateRequest() { ReadOnly = true; Working = true; + + UserInfo.AssignedRoles = Utils.MapSaveAssignedRoles(AssignedRoles); + Toaster.ShowInfo("Sender data til server ..."); - await UserRepo.UpdateUserInfo(UserId, UserData); + await UserRepo.UpdateUserInfo(UserId, UserInfo); Working = false; Toaster.ShowInfo("Bruger er opdateret ..."); } + + private async Task SendDeleteRequest() + { + ReadOnly = true; + Working = true; + Toaster.ShowInfo("Forspørgsel om sletning sendt."); + await UserRepo.DeleteUser(UserId); + Navigator.NavigateTo("/system/users"); + } + + private void PwHandleFieldChanged(object sender, FieldChangedEventArgs e) { PwInvalid = !PasswdContext.Validate(); StateHasChanged(); } + + private void PwValidationChanged(object? sender, ValidationStateChangedEventArgs e) { PwInvalid = true; if (!Utils.IsValidPasswd(Passwords.NewPassword)) return; - + PasswdContext.OnFieldChanged -= PwHandleFieldChanged!; PasswdContext.OnValidationStateChanged -= PwValidationChanged; - + PasswdContext = new EditContext(Passwords); - + PasswdContext.OnFieldChanged += PwHandleFieldChanged!; PasswdContext.OnValidationStateChanged += PwValidationChanged; } - + + private async Task SetPassword() { if (Working) @@ -111,6 +136,8 @@ public partial class SystemUserViewEditPage : IDisposable Working = false; Toaster.ShowInfo("Adgangskode er nulstillet."); } + + public void Dispose() { Interceptor.DisposeEvent(); diff --git a/Wonky.Client/Pages/WorkplaceDocumentListPage.razor b/Wonky.Client/Pages/WorkplaceDocumentListPage.razor deleted file mode 100644 index ff79843b..00000000 --- a/Wonky.Client/Pages/WorkplaceDocumentListPage.razor +++ /dev/null @@ -1,6 +0,0 @@ -@using Microsoft.AspNetCore.Authorization -@using Wonky.Client.Components -@attribute [Authorize(Roles = "Advisor")] -@page "/advisor/customers//{CompanyId}/workplaces/{WorkplaceId}/documents" - -

Dokumenter

\ No newline at end of file diff --git a/Wonky.Client/Pages/WorkplaceDocumentListPage.razor.cs b/Wonky.Client/Pages/WorkplaceDocumentListPage.razor.cs deleted file mode 100644 index 16c5c26f..00000000 --- a/Wonky.Client/Pages/WorkplaceDocumentListPage.razor.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Microsoft.AspNetCore.Components; -using Wonky.Client.HttpInterceptors; -using Wonky.Client.HttpRepository; -using Wonky.Entity.DTO; - -#pragma warning disable CS8618 - -namespace Wonky.Client.Pages; - -public partial class WorkplaceDocumentListPage : IDisposable -{ - // ############################################################## - [Inject] private HttpInterceptorService Interceptor { get; set; } - [Inject] private IWorkplaceHttpRepository WorkplaceRepo { get; set; } - - // ############################################################## - [Parameter] public string CompanyId { get; set; } = ""; - [Parameter] public string WorkplaceId { get; set; } = ""; - - // ############################################################## - private WorkplaceDto Workplace { get; set; } = new(); - - - protected override async Task OnParametersSetAsync() - { - Interceptor.RegisterEvent(); - Interceptor.RegisterBeforeSendEvent(); - - } - - public void Dispose() - { - Interceptor.DisposeEvent(); - } -} \ No newline at end of file diff --git a/Wonky.Client/Pages/WorkplaceListPage.razor b/Wonky.Client/Pages/WorkplaceListPage.razor deleted file mode 100644 index 17849fb8..00000000 --- a/Wonky.Client/Pages/WorkplaceListPage.razor +++ /dev/null @@ -1,30 +0,0 @@ -@* -// Copyright (C) 2022 FCS Frede's Computer Services. -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] -// -*@ - -@using Microsoft.AspNetCore.Authorization -@using Wonky.Client.Components -@attribute [Authorize(Roles = "Advisor")] -@page "/advisor/customers/{CompanyId}/workplaces" - -
-
-

@Customer.Name

-
-
-
- -
\ No newline at end of file diff --git a/Wonky.Client/Pages/WorkplaceListPage.razor.cs b/Wonky.Client/Pages/WorkplaceListPage.razor.cs deleted file mode 100644 index 0088fe6d..00000000 --- a/Wonky.Client/Pages/WorkplaceListPage.razor.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (C) 2022 FCS Frede's Computer Services. -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] -// - - -using Microsoft.AspNetCore.Components; -using Wonky.Client.HttpInterceptors; -using Wonky.Client.HttpRepository; -using Wonky.Entity.DTO; -using Wonky.Entity.Views; - -#pragma warning disable CS8618 -namespace Wonky.Client.Pages; - -public partial class WorkplaceListPage : IDisposable -{ - // ############################################################## - [Inject] private IWorkplaceHttpRepository WorkplaceRepo { get; set; } - [Inject] private IAdvisorCustomerRepository CustomerRepo { get; set; } - [Inject] private HttpInterceptorService Interceptor { get; set; } - - - // ############################################################## - [Parameter] public string CompanyId { get; set; } = ""; - - // ############################################################## - private List Workplaces { get; set; } = new(); - private CompanyDto Customer { get; set; } = new(); - - - protected override async Task OnParametersSetAsync() - { - Interceptor.RegisterEvent(); - Interceptor.RegisterBeforeSendEvent(); - Customer = await CustomerRepo.GetCompanyById(CompanyId); - } - - - protected override async Task OnInitializedAsync() - { - Workplaces = await WorkplaceRepo.GetWorkplaces(CompanyId); - } - - - public void Dispose() - { - Interceptor.DisposeEvent(); - } -} \ No newline at end of file diff --git a/Wonky.Client/Pages/WorkplaceViewPage.razor b/Wonky.Client/Pages/WorkplaceViewPage.razor deleted file mode 100644 index f0175d74..00000000 --- a/Wonky.Client/Pages/WorkplaceViewPage.razor +++ /dev/null @@ -1,121 +0,0 @@ -@* -// Copyright (C) 2022 FCS Frede's Computer Services. -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] -// -*@ - - -@using Microsoft.AspNetCore.Authorization -@attribute [Authorize(Roles = "Advisor")] -@page "/advisor/customers/{CompanyId}/workplaces/{WorkplaceId}" - -
-
-
-

@Workplace.CompanyName

-

@Workplace.Name @(!string.IsNullOrWhiteSpace(Workplace.Description) ? $"- {Workplace.Description}" : "")

-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Stamdata -
Navn - - - Beskrivelse - - -
Placering og Opbevaring
Produkter - - -
Masker - - - Øjenskylleflaske - - -
Handsker - - - Førstehjælp - - -
Sikkerhedsbriller - - -
Affald - - -
-
-
- -
-
- -
- -
-
-
-
\ No newline at end of file diff --git a/Wonky.Client/Pages/WorkplaceViewPage.razor.cs b/Wonky.Client/Pages/WorkplaceViewPage.razor.cs deleted file mode 100644 index 2c4a3b13..00000000 --- a/Wonky.Client/Pages/WorkplaceViewPage.razor.cs +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright (C) 2022 FCS Frede's Computer Services. -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] -// - - -using Microsoft.AspNetCore.Components; -using Microsoft.AspNetCore.Components.Forms; -using Wonky.Client.HttpInterceptors; -using Wonky.Client.HttpRepository; -using Wonky.Entity.DTO; - -#pragma warning disable CS8618 - -namespace Wonky.Client.Pages; - -public partial class WorkplaceViewPage : IDisposable -{ - // ##############################################################33333 - [Inject] private IWorkplaceHttpRepository WorkplaceRepo { get; set; } - [Inject] private IAdvisorCustomerRepository CustomerRepo { get; set; } - [Inject] private HttpInterceptorService Interceptor { get; set; } - [Inject] private NavigationManager Navigator { get; set; } - - // ##############################################################33333 - [Parameter] public string CompanyId { get; set; } = ""; - [Parameter] public string WorkplaceId { get; set; } = ""; - - // ##############################################################33333 - private WorkplaceDto Workplace { get; set; } = new(); - private EditContext WorkplaceContext { get; set; } - - - protected override async Task OnParametersSetAsync() - { - Interceptor.RegisterEvent(); - Interceptor.RegisterBeforeSendEvent(); - Workplace = await WorkplaceRepo.GetWorkplace(CompanyId, WorkplaceId); - } - - - protected override void OnInitialized() - { - WorkplaceContext = new EditContext(Workplace); - } - - - private async Task SubmitUpdate() - { - await WorkplaceRepo.UpdateWorkplace(CompanyId, Workplace); - } - - - private async Task DeleteWorkplace() - { - await WorkplaceRepo.DeleteWorkplace(CompanyId, Workplace.WorkplaceId); - Navigator.NavigateTo($"/companies/{CompanyId}/workplaces"); - } - - - public void Dispose() - { - Interceptor.DisposeEvent(); - } -} \ No newline at end of file diff --git a/Wonky.Client/wwwroot/appsettings.json b/Wonky.Client/wwwroot/appsettings.json index e62ced10..8642f165 100644 --- a/Wonky.Client/wwwroot/appsettings.json +++ b/Wonky.Client/wwwroot/appsettings.json @@ -1,7 +1,7 @@ { "appInfo": { "name": "Wonky Online", - "version": "0.127.0", + "version": "0.131.0", "rc": true, "sandBox": false, "image": "grumpy-coder.png" @@ -40,7 +40,7 @@ "servicesVatDk": "api/v2/services/virk", "serviceVatEu": "api/v2/services/vies", "servicesVatNo": "api/v2/services/brReg", - "servicesAuth": "token", + "servicesAuth": "v2/token", "syncRpc": "api/v2/rpc", "syncRpcInvoiceExt": "invoices", "userData": "/api/v2/client/users", diff --git a/Wonky.Entity/DTO/UserManagerCreate.cs b/Wonky.Entity/DTO/UserManagerCreateView.cs similarity index 52% rename from Wonky.Entity/DTO/UserManagerCreate.cs rename to Wonky.Entity/DTO/UserManagerCreateView.cs index 7607f7fa..84a555dc 100644 --- a/Wonky.Entity/DTO/UserManagerCreate.cs +++ b/Wonky.Entity/DTO/UserManagerCreateView.cs @@ -18,22 +18,43 @@ using System.ComponentModel.DataAnnotations; namespace Wonky.Entity.DTO; -public class UserManagerCreate +public class UserManagerCreateView { [MaxLength(128)] public string CompanyId { get; set; } = ""; [MaxLength(128)] public string ContactId { get; set; } = ""; - [Required(ErrorMessage = "Landekode skal udfyldes")][MaxLength(2, ErrorMessage = "Landekode er 2 bogstaver")] public string CountryCode { get; set; } = ""; - [MaxLength(128, ErrorMessage = "Kort beskrivelse på højst 128 tegn.")] public string Description { get; set; } = ""; - [Required(ErrorMessage = "Email adresse skal udfyldes")][MaxLength(255, ErrorMessage = "Der er afsat 255 tegn til email adressen")] public string Email { get; set; } = ""; + + [Required(ErrorMessage = "Landekode skal udfyldes")] + [MaxLength(2, ErrorMessage = "Landekode er 2 bogstaver")] + public string CountryCode { get; set; } = ""; + + [MaxLength(128, ErrorMessage = "Kort beskrivelse på højst 128 tegn.")] + public string Description { get; set; } = ""; + + [Required(ErrorMessage = "Email adresse skal udfyldes")] + [MaxLength(255, ErrorMessage = "Der er afsat 255 tegn til email adressen")] + public string Email { get; set; } = ""; + public bool EmailConfirmed { get; set; } public bool EShop { get; set; } - [Required(ErrorMessage = "Fornavn skal udfyldes")][MaxLength(50, ErrorMessage = "Der er afsat 50 tegn til fornavn")] public string FirstName { get; set; } = ""; - [Required(ErrorMessage = "Efternavn skal udfyldes")][MaxLength(50, ErrorMessage = "Der er afsat 50 tegn til efternavn")] public string LastName { get; set; } = ""; + + [Required(ErrorMessage = "Fornavn skal udfyldes")] + [MaxLength(50, ErrorMessage = "Der er afsat 50 tegn til fornavn")] + public string FirstName { get; set; } = ""; + + [Required(ErrorMessage = "Efternavn skal udfyldes")] + [MaxLength(50, ErrorMessage = "Der er afsat 50 tegn til efternavn")] + public string LastName { get; set; } = ""; + public bool LockoutEnabled { get; set; } public string Passwd { get; set; } = ""; - [Required(ErrorMessage = "Telefon nummer skal udfyldes")][MaxLength(20, ErrorMessage = "Der er afsat 20 tegn til telefon nummber")] public string PhoneNumber { get; set; } = ""; - [Required(ErrorMessage = "Medarbejder ID skal udfyldes")][MaxLength(20, ErrorMessage = "Der er afsat 20 tegn til medarbejder ID")] public string SalesRep { get; set; } = ""; + + [MaxLength(20, ErrorMessage = "Der er afsat 20 tegn til telefon nummber")] + public string PhoneNumber { get; set; } = ""; + + [MaxLength(20, ErrorMessage = "Der er afsat 20 tegn til medarbejder ID")] + public string SalesRep { get; set; } = ""; + public string UserId { get; set; } = ""; public List AssignedRoles { get; set; } = new(); - public List AssignedSubjects { get; set; } = new(); + public List AssignedMembers { get; set; } = new(); } \ No newline at end of file diff --git a/Wonky.Entity/DTO/WorkplaceDto.cs b/Wonky.Entity/DTO/WorkplaceDto.cs index df76c5a0..8b9d8978 100644 --- a/Wonky.Entity/DTO/WorkplaceDto.cs +++ b/Wonky.Entity/DTO/WorkplaceDto.cs @@ -23,48 +23,76 @@ public class WorkplaceDto /// Workplace entity id ///
public string WorkplaceId { get; set; } = ""; + /// /// Company name /// public string CompanyName { get; set; } = ""; + /// /// Workplace name /// - [Required(ErrorMessage = "Navn skal angives")] [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] public string Name { get; set; } = ""; + [Required(ErrorMessage = "Navn skal angives")] + [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] + public string Name { get; set; } = ""; + /// /// Workplace description /// - [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] public string Description { get; set; } = ""; + [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] + public string Description { get; set; } = ""; + /// /// Short url to document overview /// public string ShortUrl { get; set; } = ""; + /// /// Product storage location /// - [Required(ErrorMessage = "Opbevaringssted skal angives")] [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] public string ProductStorage { get; set; } = ""; + [Required(ErrorMessage = "Opbevaringssted skal angives")] + [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] + public string ProductStorage { get; set; } = ""; + /// /// Mask storage location /// - [Required(ErrorMessage = "Opbevaringssted skal angives")] [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] public string MaskStorage { get; set; } = ""; + [Required(ErrorMessage = "Opbevaringssted skal angives")] + [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] + public string MaskStorage { get; set; } = ""; + /// /// Gloves storage location /// - [Required(ErrorMessage = "Opbevaringssted skal angives")] [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] public string GlovesStorage { get; set; } = ""; + [Required(ErrorMessage = "Opbevaringssted skal angives")] + [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] + public string GlovesStorage { get; set; } = ""; + /// /// Goggles storage location /// - [Required(ErrorMessage = "Opbevaringssted skal angives")] [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] public string GogglesStorage { get; set; } = ""; + [Required(ErrorMessage = "Opbevaringssted skal angives")] + [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] + public string GogglesStorage { get; set; } = ""; + /// /// Eye cleaner storage location /// - [Required(ErrorMessage = "Opbevaringssted skal angives")] [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] public string EyeCleanerLocation { get; set; } = ""; + [Required(ErrorMessage = "Opbevaringssted skal angives")] + [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] + public string EyeCleanerLocation { get; set; } = ""; + /// /// First aid storage location /// - [Required(ErrorMessage = "Opbevaringssted skal angives")] [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] public string FirstAidStorage { get; set; } = ""; + [Required(ErrorMessage = "Opbevaringssted skal angives")] + [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] + public string FirstAidStorage { get; set; } = ""; + /// /// Waste deposit location /// - [Required(ErrorMessage = "Opbevaringssted skal angives")] [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] public string WasteDeposit { get; set; } = ""; + [Required(ErrorMessage = "Opbevaringssted skal angives")] + [MaxLength(128, ErrorMessage = "Der kan højst anvendes 128 tegn")] + public string WasteDeposit { get; set; } = ""; } \ No newline at end of file diff --git a/Wonky.Entity/Views/UserAdvisorInfoView.cs b/Wonky.Entity/Views/UserInfoAdvisorView.cs similarity index 93% rename from Wonky.Entity/Views/UserAdvisorInfoView.cs rename to Wonky.Entity/Views/UserInfoAdvisorView.cs index d80453e7..19057dc6 100644 --- a/Wonky.Entity/Views/UserAdvisorInfoView.cs +++ b/Wonky.Entity/Views/UserInfoAdvisorView.cs @@ -1,6 +1,6 @@ namespace Wonky.Entity.Views; -public class UserAdvisorInfoView +public class UserInfoAdvisorView { public string CountryCode { get; set; } = ""; public string Description { get; set; } = ""; diff --git a/Wonky.Entity/Views/UserCustomerInfoView.cs b/Wonky.Entity/Views/UserInfoCustomerView.cs similarity index 93% rename from Wonky.Entity/Views/UserCustomerInfoView.cs rename to Wonky.Entity/Views/UserInfoCustomerView.cs index 5b556ced..b358645d 100644 --- a/Wonky.Entity/Views/UserCustomerInfoView.cs +++ b/Wonky.Entity/Views/UserInfoCustomerView.cs @@ -1,6 +1,6 @@ namespace Wonky.Entity.Views; -public class UserCustomerInfoView +public class UserInfoCustomerView { public string CompanyId { get; set; } = ""; public string ContactId { get; set; } = ""; diff --git a/Wonky.Entity/Views/WorkplaceInventory.cs b/Wonky.Entity/Views/WorkplaceInventory.cs new file mode 100644 index 00000000..0571f1dc --- /dev/null +++ b/Wonky.Entity/Views/WorkplaceInventory.cs @@ -0,0 +1,12 @@ +using System.Diagnostics.Contracts; + +namespace Wonky.Entity.Views; + +public class WorkplaceInventory +{ + public string WorkplaceId { get; set; } = ""; + public string CompanyName { get; set; } = ""; + public string WorkplaceName { get; set; } = ""; + public string WorkplaceLink { get; set; } = ""; + public List Products { get; set; } = new(); +} \ No newline at end of file diff --git a/Wonky.Entity/Views/WorkplaceProduct.cs b/Wonky.Entity/Views/WorkplaceProduct.cs new file mode 100644 index 00000000..2a4773d1 --- /dev/null +++ b/Wonky.Entity/Views/WorkplaceProduct.cs @@ -0,0 +1,8 @@ +namespace Wonky.Entity.Views; + +public class WorkplaceProduct +{ + public string TradingName { get; set; } = ""; + public string ProductId { get; set; } = ""; + public List Variants { get; set; } = new(); +} \ No newline at end of file diff --git a/Wonky.Entity/Views/WorkplaceProductVariant.cs b/Wonky.Entity/Views/WorkplaceProductVariant.cs new file mode 100644 index 00000000..6f24faa0 --- /dev/null +++ b/Wonky.Entity/Views/WorkplaceProductVariant.cs @@ -0,0 +1,8 @@ +namespace Wonky.Entity.Views; + +public class WorkplaceProductVariant +{ + public string VariantName { get; set; } = ""; + public string VariantId { get; set; } = ""; + public List Docs { get; set; } = new(); +} \ No newline at end of file diff --git a/Wonky.Entity/Views/WorkplaceProductVariantDoc.cs b/Wonky.Entity/Views/WorkplaceProductVariantDoc.cs new file mode 100644 index 00000000..4ef818a3 --- /dev/null +++ b/Wonky.Entity/Views/WorkplaceProductVariantDoc.cs @@ -0,0 +1,10 @@ +namespace Wonky.Entity.Views; + +public class WorkplaceProductVariantDoc +{ + public string DocumentId { get; set; } = ""; + public string DocumentTypeEnum { get; set; } = ""; + public string DocumentDescription { get; set; } = ""; + public string DocumentDate { get; set; } = ""; + public string DocumentLink { get; set; } = ""; +} \ No newline at end of file