diff --git a/Wonky.Client/Components/CustomerInventoryListComponent.razor b/Wonky.Client/Components/CustomerInventoryListComponent.razor index 307a84f8..5256d55e 100644 --- a/Wonky.Client/Components/CustomerInventoryListComponent.razor +++ b/Wonky.Client/Components/CustomerInventoryListComponent.razor @@ -25,9 +25,9 @@
-
Navn
-
Varenr
-
Antal
+
Navn
+
Varenr
+
Antal
diff --git a/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs b/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs index 8525860b..5fc8a79c 100644 --- a/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs +++ b/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs @@ -37,12 +37,12 @@ public partial class CustomerInventoryListComponent if(Inventory.Any()) Inventory = Inventory.OrderBy(x => x.Description).ToList(); } - private void SortProducts(PSort column) + private void SortProducts(ProductSort column) { Descending = !Descending; switch (column) { - case PSort.Desc: + case ProductSort.Desc: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Description).ToList(); @@ -50,7 +50,7 @@ public partial class CustomerInventoryListComponent } Inventory = Inventory.OrderBy(x => x.Description).ToList(); break; - case PSort.Sku: + case ProductSort.Sku: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Sku).ToList(); @@ -58,7 +58,7 @@ public partial class CustomerInventoryListComponent } Inventory = Inventory.OrderBy(x => x.Sku).ToList(); break; - case PSort.Qty: + case ProductSort.Qty: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); @@ -66,10 +66,10 @@ public partial class CustomerInventoryListComponent } Inventory = Inventory.OrderBy(x => x.Quantity).ToList(); break; - case PSort.None: + case ProductSort.None: Inventory = Inventory.OrderBy(x => x.Description).ToList(); break; - case PSort.Abbr: + case ProductSort.Abbr: break; default: Inventory = Inventory.OrderBy(x => x.Description).ToList(); diff --git a/Wonky.Client/Components/CustomerProductCheckListComponent.razor b/Wonky.Client/Components/CustomerProductCheckListComponent.razor index 2b4f3121..0c6fefa4 100644 --- a/Wonky.Client/Components/CustomerProductCheckListComponent.razor +++ b/Wonky.Client/Components/CustomerProductCheckListComponent.razor @@ -24,9 +24,9 @@
-
Navn
-
Varenr
-
Antal
+
Navn
+
Varenr
+
Antal
diff --git a/Wonky.Client/Components/CustomerProductCheckListComponent.razor.cs b/Wonky.Client/Components/CustomerProductCheckListComponent.razor.cs index 5d3aa4d2..97d350ab 100644 --- a/Wonky.Client/Components/CustomerProductCheckListComponent.razor.cs +++ b/Wonky.Client/Components/CustomerProductCheckListComponent.razor.cs @@ -34,12 +34,12 @@ public partial class CustomerProductCheckListComponent Inventory = Inventory.OrderBy(x => x.Description).ToList(); } - private void SortProducts(PSort column) + private void SortProducts(ProductSort column) { Descending = !Descending; switch (column) { - case PSort.Desc: + case ProductSort.Desc: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Description).ToList(); @@ -47,7 +47,7 @@ public partial class CustomerProductCheckListComponent } Inventory = Inventory.OrderBy(x => x.Description).ToList(); break; - case PSort.Sku: + case ProductSort.Sku: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Sku).ToList(); @@ -55,7 +55,7 @@ public partial class CustomerProductCheckListComponent } Inventory = Inventory.OrderBy(x => x.Sku).ToList(); break; - case PSort.Qty: + case ProductSort.Qty: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); @@ -63,9 +63,9 @@ public partial class CustomerProductCheckListComponent } Inventory = Inventory.OrderBy(x => x.Quantity).ToList(); break; - case PSort.None: + case ProductSort.None: break; - case PSort.Abbr: + case ProductSort.Abbr: break; default: Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); diff --git a/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor.cs b/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor.cs index a8b9c858..41ee66d9 100644 --- a/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor.cs +++ b/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor.cs @@ -61,7 +61,7 @@ public partial class OfficeCountryCustomerListComponent private async Task ShowInvoiceList(string companyId) { // check for console manipulation - if (!Utils.Validate(VType.Id, companyId)) return; + if (!Utils.Validate(ValidateType.Id, companyId)) return; SelectedCompany = CompanyList.First(x => x.CompanyId == companyId); // call erp to crm sync before requesting invoices var newSyncDate = await HistoryRepo.RequestErpToCrmSync(CountryCode, companyId, SelectedCompany.HistorySync); @@ -74,7 +74,7 @@ public partial class OfficeCountryCustomerListComponent private async Task ShowActivityList(string companyId) { // check for console manipulation - if (!Utils.Validate(VType.Id, companyId)) return; + if (!Utils.Validate(ValidateType.Id, companyId)) return; SelectedCompany = CompanyList.First(x => x.CompanyId == companyId); ActivityList = await ActivityRepo.RequestActivityList(companyId); ActivityListOverlay.Show(); @@ -83,7 +83,7 @@ public partial class OfficeCountryCustomerListComponent private async Task ShowInventory(string companyId) { // check for console manipulation - if (!Utils.Validate(VType.Id, companyId)) return; + if (!Utils.Validate(ValidateType.Id, companyId)) return; SelectedCompany = CompanyList.First(x => x.CompanyId == companyId); // call erp to crm sync before requesting products var newSyncDate = await HistoryRepo.RequestErpToCrmSync(CountryCode, companyId, SelectedCompany.HistorySync); @@ -96,7 +96,7 @@ public partial class OfficeCountryCustomerListComponent private async Task ShowOrder(string companyId) { // check for console manipulation - if (!Utils.Validate(VType.Id, companyId)) return; + if (!Utils.Validate(ValidateType.Id, companyId)) return; SelectedCompany = CompanyList.First(x => x.CompanyId == companyId); } } \ No newline at end of file diff --git a/Wonky.Client/Components/OfficeInventoryListComponent.razor b/Wonky.Client/Components/OfficeInventoryListComponent.razor index ff55bc9f..686b556b 100644 --- a/Wonky.Client/Components/OfficeInventoryListComponent.razor +++ b/Wonky.Client/Components/OfficeInventoryListComponent.razor @@ -25,9 +25,9 @@
-
Navn
-
Varenr
-
Antal
+
Navn
+
Varenr
+
Antal
diff --git a/Wonky.Client/Components/OfficeInventoryListComponent.razor.cs b/Wonky.Client/Components/OfficeInventoryListComponent.razor.cs index 6824c0bd..f8464fdb 100644 --- a/Wonky.Client/Components/OfficeInventoryListComponent.razor.cs +++ b/Wonky.Client/Components/OfficeInventoryListComponent.razor.cs @@ -41,12 +41,12 @@ public partial class OfficeInventoryListComponent Inventory = Inventory.OrderBy(x => x.Description).ToList(); } - private void SortProducts(PSort column) + private void SortProducts(ProductSort column) { Descending = !Descending; switch (column) { - case PSort.Desc: + case ProductSort.Desc: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Description).ToList(); @@ -54,7 +54,7 @@ public partial class OfficeInventoryListComponent } Inventory = Inventory.OrderBy(x => x.Description).ToList(); break; - case PSort.Sku: + case ProductSort.Sku: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Sku).ToList(); @@ -62,7 +62,7 @@ public partial class OfficeInventoryListComponent } Inventory = Inventory.OrderBy(x => x.Sku).ToList(); break; - case PSort.Qty: + case ProductSort.Qty: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); @@ -70,9 +70,9 @@ public partial class OfficeInventoryListComponent } Inventory = Inventory.OrderBy(x => x.Quantity).ToList(); break; - case PSort.None: + case ProductSort.None: break; - case PSort.Abbr: + case ProductSort.Abbr: break; default: Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); diff --git a/Wonky.Client/Components/QuoteListComponent.razor b/Wonky.Client/Components/QuoteListComponent.razor index f0869a68..fd83728e 100644 --- a/Wonky.Client/Components/QuoteListComponent.razor +++ b/Wonky.Client/Components/QuoteListComponent.razor @@ -51,18 +51,18 @@ @quote.OrderDate
- - - @if (quote.QuoteStatusEnum == "None") { - } diff --git a/Wonky.Client/Components/QuoteListComponent.razor.cs b/Wonky.Client/Components/QuoteListComponent.razor.cs index 07fa4b3e..6b964760 100644 --- a/Wonky.Client/Components/QuoteListComponent.razor.cs +++ b/Wonky.Client/Components/QuoteListComponent.razor.cs @@ -25,7 +25,7 @@ public partial class QuoteListComponent public List Quotes { get; set; } = new(); [Parameter] public EventCallback OnChangedCallback { get; set; } - private async Task SetQuote(string eSalesNumber, QStatus status) + private async Task SetQuote(string eSalesNumber, QuoteStatus status) { var args = new QuoteCallbackArgs() { diff --git a/Wonky.Client/Components/WarehouseListComponent.razor b/Wonky.Client/Components/WarehouseListComponent.razor index 552bb7ef..88a907e7 100644 --- a/Wonky.Client/Components/WarehouseListComponent.razor +++ b/Wonky.Client/Components/WarehouseListComponent.razor @@ -21,13 +21,13 @@
- + - + - +
diff --git a/Wonky.Client/Components/WarehouseListComponent.razor.cs b/Wonky.Client/Components/WarehouseListComponent.razor.cs index 87d82552..b3861b6e 100644 --- a/Wonky.Client/Components/WarehouseListComponent.razor.cs +++ b/Wonky.Client/Components/WarehouseListComponent.razor.cs @@ -24,7 +24,7 @@ public partial class WarehouseListComponent [Parameter] public string Header { get; set; } = ""; [Parameter] public List OrderList { get; set; } = new(); [Parameter] public bool ReadyToShip { get; set; } - [Parameter] public EventCallback OnGetStatus { get; set; } + [Parameter] public EventCallback OnGetStatus { get; set; } [Parameter] public EventCallback OnSetShipped { get; set; } [Parameter] public EventCallback OnQPak { get; set; } @@ -43,7 +43,7 @@ public partial class WarehouseListComponent await OnSetShipped.InvokeAsync(); } - private async Task GetWithStatus(PStatus status) + private async Task GetWithStatus(ProcessStatus status) { await OnGetStatus.InvokeAsync(status); } diff --git a/Wonky.Client/Helpers/Utils.cs b/Wonky.Client/Helpers/Utils.cs index 3039f792..901f5122 100644 --- a/Wonky.Client/Helpers/Utils.cs +++ b/Wonky.Client/Helpers/Utils.cs @@ -23,14 +23,14 @@ namespace Wonky.Client.Helpers; /// public static class Utils { - public static bool Validate(VType vType, string toValidate) + public static bool Validate(ValidateType validateType, string toValidate) { - return vType switch + return validateType switch { - VType.ISODate => toValidate.Length == 10 && DateTime.TryParse(toValidate, out _), - VType.Id => Squid.TryDecode(toValidate, out _), - VType.Passwd => IsValidPasswd(toValidate), - VType.Email => IsValidEmail(toValidate), + ValidateType.IsoDate => toValidate.Length == 10 && DateTime.TryParse(toValidate, out _), + ValidateType.Id => Squid.TryDecode(toValidate, out _), + ValidateType.Passwd => IsValidPasswd(toValidate), + ValidateType.Email => IsValidEmail(toValidate), _ => false }; } @@ -51,17 +51,20 @@ public static class Utils { validConditions++; } + else return false; if (toValidate.Any(c => c is >= 'A' and <= 'Z')) { validConditions++; } + else return false; if (toValidate.Any(c => c is >= '0' and <= '9')) { validConditions++; } - + else return false; + return validConditions == 3; } diff --git a/Wonky.Client/HttpRepository/ISystemUserRepository.cs b/Wonky.Client/HttpRepository/ISystemUserRepository.cs index 84773af7..26845ed4 100644 --- a/Wonky.Client/HttpRepository/ISystemUserRepository.cs +++ b/Wonky.Client/HttpRepository/ISystemUserRepository.cs @@ -41,7 +41,7 @@ public interface ISystemUserRepository /// /// /// - Task CreateUser(UserManagerEditView model); + Task CreateUser(UserManagerCreate model); /// /// Update Advisor using userId and updated data diff --git a/Wonky.Client/HttpRepository/SystemUserRepository.cs b/Wonky.Client/HttpRepository/SystemUserRepository.cs index d947db5d..17e97743 100644 --- a/Wonky.Client/HttpRepository/SystemUserRepository.cs +++ b/Wonky.Client/HttpRepository/SystemUserRepository.cs @@ -69,7 +69,7 @@ public class SystemUserRepository : ISystemUserRepository /// /// /// - public async Task CreateUser(UserManagerEditView model) + public async Task CreateUser(UserManagerCreate model) { var result = await _client.PostAsJsonAsync($"{_api.UserManager}", model, _options); if (!result.IsSuccessStatusCode) diff --git a/Wonky.Client/Models/AssignedRoles.cs b/Wonky.Client/Models/AssignedRoles.cs new file mode 100644 index 00000000..bf71f78f --- /dev/null +++ b/Wonky.Client/Models/AssignedRoles.cs @@ -0,0 +1,13 @@ +namespace Wonky.Client.Models; + +public class AssignedRoles +{ + public bool Admin { get; set; } + public bool Advisor { get; set; } + public bool EShop { get; set; } + public bool EDoc { get; set; } + public bool Management { get; set; } + public bool Office { get; set; } + public bool Supervisor { get; set; } + public bool Warehouse { get; set; } +} \ No newline at end of file diff --git a/Wonky.Client/Models/PasswordInput.cs b/Wonky.Client/Models/PasswordInput.cs new file mode 100644 index 00000000..2d793482 --- /dev/null +++ b/Wonky.Client/Models/PasswordInput.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations; + +namespace Wonky.Client.Models; + +public class PasswordInput +{ + /// + /// New password + /// + [Required(ErrorMessage = "Kode skal udfyldes")][MinLength(10, ErrorMessage = "Password skal være mindst 10 tegn og indeholde a-z, A-Z, 0-9")] + public string NewPassword { get; set; } = ""; + + /// + /// Password confirmation + /// + [Compare(nameof(NewPassword), ErrorMessage = "Koderne er ikke ens.")] + public string ConfirmPassword { get; set; } = ""; +} \ No newline at end of file diff --git a/Wonky.Client/Models/PTarget.cs b/Wonky.Client/Models/PrintTarget.cs similarity index 97% rename from Wonky.Client/Models/PTarget.cs rename to Wonky.Client/Models/PrintTarget.cs index 98aa303c..b4eab7c6 100644 --- a/Wonky.Client/Models/PTarget.cs +++ b/Wonky.Client/Models/PrintTarget.cs @@ -16,7 +16,7 @@ namespace Wonky.Client.Models; -public enum PTarget +public enum PrintTarget { None, All, diff --git a/Wonky.Client/Models/PStatus.cs b/Wonky.Client/Models/ProcessStatus.cs similarity index 95% rename from Wonky.Client/Models/PStatus.cs rename to Wonky.Client/Models/ProcessStatus.cs index fc788c8a..bce4b2f6 100644 --- a/Wonky.Client/Models/PStatus.cs +++ b/Wonky.Client/Models/ProcessStatus.cs @@ -16,7 +16,7 @@ namespace Wonky.Client.Models; -public enum PStatus +public enum ProcessStatus { None, Picked, @@ -24,5 +24,5 @@ public enum PStatus Shipped, All, Express, - Accepted + Printed } \ No newline at end of file diff --git a/Wonky.Client/Models/PSort.cs b/Wonky.Client/Models/ProductSort.cs similarity index 97% rename from Wonky.Client/Models/PSort.cs rename to Wonky.Client/Models/ProductSort.cs index 29d29e5b..4fb3db31 100644 --- a/Wonky.Client/Models/PSort.cs +++ b/Wonky.Client/Models/ProductSort.cs @@ -16,7 +16,7 @@ namespace Wonky.Client.Models; -public enum PSort +public enum ProductSort { None, Desc, diff --git a/Wonky.Client/Models/QCallbackArgs.cs b/Wonky.Client/Models/QuoteCallbackArgs.cs similarity index 95% rename from Wonky.Client/Models/QCallbackArgs.cs rename to Wonky.Client/Models/QuoteCallbackArgs.cs index 75c19ea1..feffa581 100644 --- a/Wonky.Client/Models/QCallbackArgs.cs +++ b/Wonky.Client/Models/QuoteCallbackArgs.cs @@ -25,5 +25,5 @@ public class QuoteCallbackArgs /// /// QStatus /// - public QStatus Status { get; set; } + public QuoteStatus Status { get; set; } } \ No newline at end of file diff --git a/Wonky.Client/Models/QStatus.cs b/Wonky.Client/Models/QuoteStatus.cs similarity index 96% rename from Wonky.Client/Models/QStatus.cs rename to Wonky.Client/Models/QuoteStatus.cs index 1b09fa7f..2e479c5b 100644 --- a/Wonky.Client/Models/QStatus.cs +++ b/Wonky.Client/Models/QuoteStatus.cs @@ -16,10 +16,10 @@ namespace Wonky.Client.Models; -public enum QStatus +public enum QuoteStatus { None, - Win, + Order, Lose, Archive, Note, diff --git a/Wonky.Client/Models/VType.cs b/Wonky.Client/Models/ValidateType.cs similarity index 63% rename from Wonky.Client/Models/VType.cs rename to Wonky.Client/Models/ValidateType.cs index 60a38984..d44b5ab9 100644 --- a/Wonky.Client/Models/VType.cs +++ b/Wonky.Client/Models/ValidateType.cs @@ -1,9 +1,9 @@ namespace Wonky.Client.Models; -public enum VType +public enum ValidateType { Id, - ISODate, + IsoDate, Passwd, Email } \ No newline at end of file diff --git a/Wonky.Client/OverlayOffice/OfficeCustomerProductListOverlay.razor b/Wonky.Client/OverlayOffice/OfficeCustomerProductListOverlay.razor index 50d3fcb6..cd8a6948 100644 --- a/Wonky.Client/OverlayOffice/OfficeCustomerProductListOverlay.razor +++ b/Wonky.Client/OverlayOffice/OfficeCustomerProductListOverlay.razor @@ -30,9 +30,9 @@
-
Navn
-
Varenr
-
Antal
+
Navn
+
Varenr
+
Antal
diff --git a/Wonky.Client/OverlayOffice/OfficeCustomerProductListOverlay.razor.cs b/Wonky.Client/OverlayOffice/OfficeCustomerProductListOverlay.razor.cs index 7287c3f9..1a700c2f 100644 --- a/Wonky.Client/OverlayOffice/OfficeCustomerProductListOverlay.razor.cs +++ b/Wonky.Client/OverlayOffice/OfficeCustomerProductListOverlay.razor.cs @@ -58,12 +58,12 @@ public partial class OfficeCustomerProductListOverlay : IDisposable ReorderOverlay.Show(); } - private void SortProducts(PSort column) + private void SortProducts(ProductSort column) { Descending = !Descending; switch (column) { - case PSort.Desc: + case ProductSort.Desc: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Description).ToList(); @@ -72,7 +72,7 @@ public partial class OfficeCustomerProductListOverlay : IDisposable Inventory = Inventory.OrderBy(x => x.Description).ToList(); break; - case PSort.Sku: + case ProductSort.Sku: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Sku).ToList(); @@ -81,7 +81,7 @@ public partial class OfficeCustomerProductListOverlay : IDisposable Inventory = Inventory.OrderBy(x => x.Sku).ToList(); break; - case PSort.Qty: + case ProductSort.Qty: if (Descending) { Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); @@ -90,9 +90,9 @@ public partial class OfficeCustomerProductListOverlay : IDisposable Inventory = Inventory.OrderBy(x => x.Quantity).ToList(); break; - case PSort.None: + case ProductSort.None: break; - case PSort.Abbr: + case ProductSort.Abbr: break; default: Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); diff --git a/Wonky.Client/Pages/AdvisorQuoteListPage.razor b/Wonky.Client/Pages/AdvisorQuoteListPage.razor index 7de175dc..a5e412ef 100644 --- a/Wonky.Client/Pages/AdvisorQuoteListPage.razor +++ b/Wonky.Client/Pages/AdvisorQuoteListPage.razor @@ -27,22 +27,22 @@
- + - + - + - + - + - +
diff --git a/Wonky.Client/Pages/AdvisorQuoteListPage.razor.cs b/Wonky.Client/Pages/AdvisorQuoteListPage.razor.cs index b8c3b5c5..b2ee118a 100644 --- a/Wonky.Client/Pages/AdvisorQuoteListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorQuoteListPage.razor.cs @@ -36,7 +36,7 @@ public partial class AdvisorQuoteListPage : IDisposable private List QuoteList { get; set; } = new(); private List FilteredQuotes { get; set; } = new(); private bool Working { get; set; } - private QStatus QFilter { get; set; } = QStatus.NoteOpen; + private QuoteStatus QuoteFilter { get; set; } = QuoteStatus.NoteOpen; protected override async Task OnInitializedAsync() { @@ -48,20 +48,20 @@ public partial class AdvisorQuoteListPage : IDisposable Working = false; // filter quotes - if any - default to QStatus.NoteOpen if (QuoteList.Any()) - await FilterQuotes(QFilter); + await FilterQuotes(QuoteFilter); } - private async Task FilterQuotes(QStatus status) + private async Task FilterQuotes(QuoteStatus status) { - QFilter = status; + QuoteFilter = status; QuoteList = await Storage.GetItemAsync>("quotes"); - FilteredQuotes = QFilter switch + FilteredQuotes = QuoteFilter switch { - QStatus.None => QuoteList.Where(x => x.QuoteStatusEnum is "None").ToList(), - QStatus.Lose => QuoteList.Where(x => x.QuoteStatusEnum is "Lose").ToList(), - QStatus.Archive => QuoteList.Where(x => x.QuoteStatusEnum is "Archive").ToList(), - QStatus.Note => QuoteList.Where(x => x.QuoteStatusEnum is "Note").ToList(), - QStatus.NoteOpen => QuoteList.Where(x => x.QuoteStatusEnum is "Note" or "None").ToList(), + QuoteStatus.None => QuoteList.Where(x => x.QuoteStatusEnum is "None").ToList(), + QuoteStatus.Lose => QuoteList.Where(x => x.QuoteStatusEnum is "Lose").ToList(), + QuoteStatus.Archive => QuoteList.Where(x => x.QuoteStatusEnum is "Archive").ToList(), + QuoteStatus.Note => QuoteList.Where(x => x.QuoteStatusEnum is "Note").ToList(), + QuoteStatus.NoteOpen => QuoteList.Where(x => x.QuoteStatusEnum is "Note" or "None").ToList(), _ => QuoteList.ToList() }; } @@ -71,7 +71,7 @@ public partial class AdvisorQuoteListPage : IDisposable Working = true; // find the quote to update var quote = QuoteList.First(x => x.ESalesNumber == args.ESalesNumber); - if (args.Status == QStatus.Win) + if (args.Status == QuoteStatus.Order) quote.OrderDate = $"{DateTime.Now:yyyy-MM-dd}"; quote.QuoteStatusEnum = Utils.EnumToString(args.Status); // send update request to backend @@ -85,7 +85,7 @@ public partial class AdvisorQuoteListPage : IDisposable await Storage.SetItemAsync("quotes", QuoteList.OrderBy(x => x.Company.Name)); // filter quotes - if any - based on active filter if(QuoteList.Any()) - await FilterQuotes(QFilter); + await FilterQuotes(QuoteFilter); Working = false; // signal page state changed StateHasChanged(); diff --git a/Wonky.Client/Pages/AdvisorReportViewPage.razor b/Wonky.Client/Pages/AdvisorReportViewPage.razor index 8a67c4ac..9185316c 100644 --- a/Wonky.Client/Pages/AdvisorReportViewPage.razor +++ b/Wonky.Client/Pages/AdvisorReportViewPage.razor @@ -26,10 +26,10 @@
- +
- +
diff --git a/Wonky.Client/Pages/AdvisorReportViewPage.razor.cs b/Wonky.Client/Pages/AdvisorReportViewPage.razor.cs index f02820ee..b93f6563 100644 --- a/Wonky.Client/Pages/AdvisorReportViewPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorReportViewPage.razor.cs @@ -58,21 +58,21 @@ public partial class AdvisorReportViewPage : IDisposable await FetchReport(ReportDate); } - private void Print(PTarget target) + private void Print(PrintTarget target) { ReturnUrl = new Uri(Navigator.Uri).AbsolutePath; switch (target) { - case PTarget.OrderPage: + case PrintTarget.OrderPage: Navigator.NavigateTo($"/report/print/orders/{XUserInfo.CountryCode.ToLower()}/{XUserInfo.UserId}/{ReportDate}?returnUrl={ReturnUrl}"); break; - case PTarget.FrontPage: + case PrintTarget.FrontPage: Navigator.NavigateTo($"/report/print/summary/{XUserInfo.CountryCode.ToLower()}/{XUserInfo.UserId}/{ReportDate}?returnUrl={ReturnUrl}"); break; - case PTarget.None: + case PrintTarget.None: break; - case PTarget.All: + case PrintTarget.All: break; default: throw new ArgumentOutOfRangeException(nameof(target), target, null); diff --git a/Wonky.Client/Pages/CommonReportPrintOrderPage.razor.cs b/Wonky.Client/Pages/CommonReportPrintOrderPage.razor.cs index 4bf9bf87..820fbbf8 100644 --- a/Wonky.Client/Pages/CommonReportPrintOrderPage.razor.cs +++ b/Wonky.Client/Pages/CommonReportPrintOrderPage.razor.cs @@ -74,7 +74,7 @@ public partial class CommonReportPrintOrderPage await ProcessRepo.UpdateWarehouseOrderStatus(new OrderProcessState { OrderId = item.ActivityId, - ProcessStatusEnum = Utils.EnumToString(PStatus.Accepted) + ProcessStatusEnum = Utils.EnumToString(ProcessStatus.Printed) }); } Toaster.ClearAll(); diff --git a/Wonky.Client/Pages/OfficeAdvisorReportViewPage.razor b/Wonky.Client/Pages/OfficeAdvisorReportViewPage.razor index 9e6eed46..b65242c3 100644 --- a/Wonky.Client/Pages/OfficeAdvisorReportViewPage.razor +++ b/Wonky.Client/Pages/OfficeAdvisorReportViewPage.razor @@ -26,10 +26,10 @@
- +
- +
diff --git a/Wonky.Client/Pages/OfficeAdvisorReportViewPage.razor.cs b/Wonky.Client/Pages/OfficeAdvisorReportViewPage.razor.cs index 559d1e5c..2e823267 100644 --- a/Wonky.Client/Pages/OfficeAdvisorReportViewPage.razor.cs +++ b/Wonky.Client/Pages/OfficeAdvisorReportViewPage.razor.cs @@ -69,20 +69,20 @@ public partial class OfficeAdvisorReportViewPage : IDisposable .InvokeAsync("import", "/scripts/print-invoke.js"); } } - private void Print(PTarget target) + private void Print(PrintTarget target) { _returnUrl = new Uri(Navigator.Uri).AbsolutePath; switch (target) { - case PTarget.OrderPage: + case PrintTarget.OrderPage: Navigator.NavigateTo($"/report/print/orders/{CountryCode}/{UserId}/{ReportDate}?returnUrl={_returnUrl}"); break; - case PTarget.FrontPage: + case PrintTarget.FrontPage: Navigator.NavigateTo($"/report/print/summary/{CountryCode}/{UserId}/{ReportDate}?returnUrl={_returnUrl}"); break; - case PTarget.None: + case PrintTarget.None: break; - case PTarget.All: + case PrintTarget.All: break; default: throw new ArgumentOutOfRangeException(nameof(target), target, null); @@ -101,7 +101,7 @@ public partial class OfficeAdvisorReportViewPage : IDisposable await ProcessRepo.UpdateWarehouseOrderStatus(new OrderProcessState { OrderId = item.ActivityId, - ProcessStatusEnum = Utils.EnumToString(PStatus.Accepted) + ProcessStatusEnum = Utils.EnumToString(ProcessStatus.Printed) }); } Toaster.ClearAll(); diff --git a/Wonky.Client/Pages/SystemUserCreatePage.razor b/Wonky.Client/Pages/SystemUserCreatePage.razor index 5700986d..3c5a94f2 100644 --- a/Wonky.Client/Pages/SystemUserCreatePage.razor +++ b/Wonky.Client/Pages/SystemUserCreatePage.razor @@ -22,113 +22,116 @@
-

Bruger info

+
+

Bruger oprettelse

+
- @if (!string.IsNullOrWhiteSpace(UserInfo.UserId)) - { - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
- Fornavn - - - - - Efternavn - - - -
- Email - - - - - Mobilnummer - - - -
- Sælgernr. - - - - - Landekode - - - -
- Spærret - - - -
-
+ + +
+ +
+ +
-
-
- -
-
- -
-
- Tilbage -
+ + +
+ +
- - - -

NULSTIL ADGANGSKODE

-
-

Password politik

-

Mindst 10 tegn bestående af store og små bogstaver samt tal. Du kan teste pasword og danne stærke password på pw.nix.dk

+ + +
+ +
-
- -
- - -
+ + +
+ +
-
- -
- - -
+ + +
+ +
- - } + + +
+ + +
+ + @* +
+ + + +
+ *@ + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
+
+
+ Tilbage +
+
+ +
+
+
+

Password politik

+

Mindst 10 tegn bestående af store og små bogstaver samt tal. Du kan teste pasword og danne stærke password på pw.nix.dk

+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
@@ -136,4 +139,4 @@ @if (Working) { -} +} \ No newline at end of file diff --git a/Wonky.Client/Pages/SystemUserCreatePage.razor.cs b/Wonky.Client/Pages/SystemUserCreatePage.razor.cs index 72958e5f..7fca5b66 100644 --- a/Wonky.Client/Pages/SystemUserCreatePage.razor.cs +++ b/Wonky.Client/Pages/SystemUserCreatePage.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 @@ -33,14 +34,14 @@ public partial class SystemUserCreatePage : IDisposable [Inject] public ISystemUserRepository UserRepo { get; set; } [Inject] public ILogger Logger { get; set; } [Inject] public IToastService Toaster { get; set; } - private UserManagerEditView UserInfo { get; set; } = new(); - private EditContext UserEditContext { get; set; } - private ResetPasswordDto Passwords { get; set; } = new(); - private EditContext PasswdContext { get; set; } - private bool PwInvalid { get; set; } = true; + private UserManagerCreate 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 readonly JsonSerializerOptions _options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true @@ -51,48 +52,65 @@ public partial class SystemUserCreatePage : IDisposable Interceptor.RegisterEvent(); Interceptor.RegisterBeforeSendEvent(); - UserEditContext = new EditContext(UserInfo); - PasswdContext = new EditContext(Passwords); + NewUserContext = new EditContext(NewUserInfo); - PasswdContext.OnFieldChanged += PwHandleFieldChanged!; - PasswdContext.OnValidationStateChanged += PwValidationChanged; + 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 }, + // }; + ReadOnly = true; Working = true; Toaster.ShowInfo("Sender data til server ..."); - await UserRepo.CreateUser(UserInfo); + await UserRepo.CreateUser(NewUserInfo); Working = false; Toaster.ShowInfo("Bruger er oprettet ..."); } - private void PwHandleFieldChanged(object sender, FieldChangedEventArgs e) + private void ContextHandleFieldChanged(object sender, FieldChangedEventArgs e) { - PwInvalid = !PasswdContext.Validate(); + Logger.LogDebug("contextHandleFieldChanged => e.FieldIdentifier.FieldName {}", e.FieldIdentifier.FieldName); + if (e.FieldIdentifier.FieldName == "NewPassword") + { + if (!Utils.IsValidPasswd(PasswdInput.NewPassword)) + { + ContextInvalid = true; + return; + } + } + NewUserInfo.Passwd = PasswdInput.NewPassword; + ContextInvalid = !NewUserContext.Validate(); StateHasChanged(); } - private void PwValidationChanged(object? sender, ValidationStateChangedEventArgs e) + private void ContextValidationChanged(object? sender, ValidationStateChangedEventArgs e) { - PwInvalid = true; - if (!Utils.IsValidPasswd(Passwords.NewPassword)) - return; + ContextInvalid = true; - PasswdContext.OnFieldChanged -= PwHandleFieldChanged!; - PasswdContext.OnValidationStateChanged -= PwValidationChanged; + NewUserContext.OnFieldChanged -= ContextHandleFieldChanged!; + NewUserContext.OnValidationStateChanged -= ContextValidationChanged; - PasswdContext = new EditContext(Passwords); + NewUserContext = new EditContext(NewUserInfo); - PasswdContext.OnFieldChanged += PwHandleFieldChanged!; - PasswdContext.OnValidationStateChanged += PwValidationChanged; + NewUserContext.OnFieldChanged += ContextHandleFieldChanged!; + NewUserContext.OnValidationStateChanged += ContextValidationChanged; } public void Dispose() { Interceptor.DisposeEvent(); - PasswdContext.OnFieldChanged -= PwHandleFieldChanged!; - PasswdContext.OnValidationStateChanged -= PwValidationChanged; + NewUserContext.OnFieldChanged -= ContextHandleFieldChanged!; + NewUserContext.OnValidationStateChanged -= ContextValidationChanged; } } \ No newline at end of file diff --git a/Wonky.Client/Pages/SystemUserListPage.razor b/Wonky.Client/Pages/SystemUserListPage.razor index 920bffc2..be1c985e 100644 --- a/Wonky.Client/Pages/SystemUserListPage.razor +++ b/Wonky.Client/Pages/SystemUserListPage.razor @@ -19,9 +19,18 @@ @attribute [Authorize(Roles = "Admin")] @page "/system/users" -Admin User List Page +Administrativ - Bruger liste +
+
+

Administrativ - Bruger liste

+
+
+ +
+
-

Admin User List Page

diff --git a/Wonky.Client/Pages/WarehouseOrderListPage.razor.cs b/Wonky.Client/Pages/WarehouseOrderListPage.razor.cs index a59dcbbb..cbaa4ba0 100644 --- a/Wonky.Client/Pages/WarehouseOrderListPage.razor.cs +++ b/Wonky.Client/Pages/WarehouseOrderListPage.razor.cs @@ -44,29 +44,29 @@ public partial class WarehouseOrderListPage : IDisposable OrderList = await FetchOrders(Status); } - private async Task GetStatusCallback(PStatus status) + private async Task GetStatusCallback(ProcessStatus status) { Working = true; OrderList = new List(); switch (status) { - case PStatus.None or PStatus.Accepted: + case ProcessStatus.None or ProcessStatus.Printed: Header = "Ubehandlede ordrer"; ReadyToShip = false; break; - case PStatus.Picked: + case ProcessStatus.Picked: Header = "Plukkede ordrer"; ReadyToShip = false; break; - case PStatus.Packed: + case ProcessStatus.Packed: Header = "Pakkede ordrer"; ReadyToShip = true; break; - case PStatus.Shipped: + case ProcessStatus.Shipped: break; - case PStatus.All: + case ProcessStatus.All: break; - case PStatus.Express: + case ProcessStatus.Express: break; default: throw new ArgumentOutOfRangeException(nameof(status), status, null); diff --git a/Wonky.Client/wwwroot/appsettings.json b/Wonky.Client/wwwroot/appsettings.json index 7c99709d..b27806b6 100644 --- a/Wonky.Client/wwwroot/appsettings.json +++ b/Wonky.Client/wwwroot/appsettings.json @@ -9,7 +9,7 @@ "Logging": { "LogLevel": { "Default": "Debug", - "System": "Information", + "System": "Debug", "Microsoft": "Information" }, "Debug": { diff --git a/Wonky.Entity/DTO/SubjectAssignment.cs b/Wonky.Entity/DTO/SubjectAssignment.cs new file mode 100644 index 00000000..972bbb3f --- /dev/null +++ b/Wonky.Entity/DTO/SubjectAssignment.cs @@ -0,0 +1,24 @@ + +// 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] +// + +namespace Wonky.Entity.DTO; + +public class SubjectAssignment +{ + public string Name { get; set; } + public string UserId { get; set; } + public bool Assigned { get; set; } +} \ No newline at end of file diff --git a/Wonky.Entity/DTO/UserManagerCreate.cs b/Wonky.Entity/DTO/UserManagerCreate.cs new file mode 100644 index 00000000..abc020d0 --- /dev/null +++ b/Wonky.Entity/DTO/UserManagerCreate.cs @@ -0,0 +1,39 @@ + +// 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.ComponentModel.DataAnnotations; + +namespace Wonky.Entity.DTO; + +public class UserManagerCreate +{ + [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; } = ""; + 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; } = ""; + 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; } = ""; + public string UserId { get; set; } = ""; + public List AssignedRoles { get; set; } = new(); + public List AssignedSubjects { get; set; } = new(); +} \ No newline at end of file diff --git a/Wonky.Entity/DTO/UserManagerEditView.cs b/Wonky.Entity/DTO/UserManagerEditView.cs index 58a62e78..5a964d63 100644 --- a/Wonky.Entity/DTO/UserManagerEditView.cs +++ b/Wonky.Entity/DTO/UserManagerEditView.cs @@ -22,17 +22,18 @@ public class UserManagerEditView { [MaxLength(128)] public string CompanyId { get; set; } = ""; [MaxLength(128)] public string ContactId { get; set; } = ""; - [Required][MaxLength(3)] public string CountryCode { get; set; } = ""; - [MaxLength(128)] public string Description { get; set; } = ""; - [Required][MaxLength(255)] 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][MaxLength(50)] public string FirstName { get; set; } = ""; - [Required][MaxLength(50)] 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][MaxLength(20)] public string PhoneNumber { get; set; } = ""; - [Required][MaxLength(20)] public string SalesRep { 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; } = ""; public string UserId { get; set; } = ""; - public List AssignedRoles { get; set; } = new(); + public List AssignedRoles { get; set; } = new(); + public List AssignedSubjects { get; set; } = new(); } \ No newline at end of file