diff --git a/Wonky.Client/Components/ItemGroupFilter.razor b/Wonky.Client/Components/ItemGroupFilter.razor index 7b331e4e..586e29ac 100644 --- a/Wonky.Client/Components/ItemGroupFilter.razor +++ b/Wonky.Client/Components/ItemGroupFilter.razor @@ -15,12 +15,9 @@ // *@ - + @foreach (var (key, value) in Items) + { + + } \ No newline at end of file diff --git a/Wonky.Client/Components/ItemGroupFilter.razor.cs b/Wonky.Client/Components/ItemGroupFilter.razor.cs index 7d0e8dde..fa8d9127 100644 --- a/Wonky.Client/Components/ItemGroupFilter.razor.cs +++ b/Wonky.Client/Components/ItemGroupFilter.razor.cs @@ -14,18 +14,40 @@ // using System.Text.RegularExpressions; +using Blazored.LocalStorage; using Microsoft.AspNetCore.Components; +using Wonky.Client.Services; namespace Wonky.Client.Components; public partial class ItemGroupFilter { - [Parameter] public EventCallback OnGroupFilterChanged { get; set; } - private string GroupFilter { get; set; } = "all"; - private async Task OnGroupFilterChange(ChangeEventArgs eventArgs) + [Inject] private ILocalStorageService LocalStorage { get; set; } + [Inject] private ProfileService ProfileService { get; set; } + private Dictionary Items { get; set; } = new(); + private Preferences _preferences = new(); + private string Selection { get; set; } = "all"; + protected override async Task OnInitializedAsync() { - if (GroupFilter == "all") - GroupFilter = ""; - await OnGroupFilterChanged.InvokeAsync(GroupFilter); - } + ProfileService.OnChange += ProfileServiceOnOnChange; + _preferences = await ProfileService.GetPreferences(); + + Items.Add("name", "Varenavn"); + Items.Add("sku", "Varenr"); + Selection = (from x in Items where x.Key == _preferences.ItemGroup select x.Value).First(); + } + + private async Task OnColumnChanged(ChangeEventArgs args) + { + await ProfileService.SetItemSort(args.Value.ToString()); + } + private void ProfileServiceOnOnChange(Preferences newPreferences) + { + _preferences = newPreferences; + StateHasChanged(); + } + public void Dispose() + { + ProfileService.OnChange -= ProfileServiceOnOnChange; + } } \ No newline at end of file diff --git a/Wonky.Client/Components/ItemSearchColumn.razor b/Wonky.Client/Components/ItemSearchColumn.razor index aab286d8..97c09342 100644 --- a/Wonky.Client/Components/ItemSearchColumn.razor +++ b/Wonky.Client/Components/ItemSearchColumn.razor @@ -15,7 +15,7 @@ // *@ - @foreach (var (key, value) in Items) { diff --git a/Wonky.Client/Components/ItemSearchColumn.razor.cs b/Wonky.Client/Components/ItemSearchColumn.razor.cs index b32c3584..8c619a21 100644 --- a/Wonky.Client/Components/ItemSearchColumn.razor.cs +++ b/Wonky.Client/Components/ItemSearchColumn.razor.cs @@ -15,22 +15,37 @@ using Blazored.LocalStorage; using Microsoft.AspNetCore.Components; +using Wonky.Client.Services; namespace Wonky.Client.Components; public partial class ItemSearchColumn { - [Parameter] public EventCallback OnColumnChanged { get; set; } - private string SearchColumn { get; set; } = "name"; + [Inject] private ILocalStorageService LocalStorage { get; set; } + [Inject] private ProfileService ProfileService { get; set; } private Dictionary Items { get; set; } = new(); - protected override void OnInitialized() + private Preferences _preferences = new(); + private string Selection { get; set; } = "name"; + protected override async Task OnInitializedAsync() { + ProfileService.OnChange += ProfileServiceOnOnChange; + _preferences = await ProfileService.GetPreferences(); Items.Add("name", "Varenavn"); Items.Add("sku", "Varenr"); Items.Add("shortName", "Forkortelse"); + Selection = (from x in Items where x.Key == _preferences.ItemSearch select x.Value).First(); } - private async Task OnSearchColumnChange(ChangeEventArgs eventArgs) + private async Task OnSelectChanged(ChangeEventArgs e) { - await OnColumnChanged.InvokeAsync(SearchColumn); + await ProfileService.SetItemSort(e.Value.ToString()); } + private void ProfileServiceOnOnChange(Preferences newPreferences) + { + _preferences = newPreferences; + StateHasChanged(); + } + public void Dispose() + { + ProfileService.OnChange -= ProfileServiceOnOnChange; + } } \ No newline at end of file diff --git a/Wonky.Client/Components/ItemSortColumn.razor b/Wonky.Client/Components/ItemSortColumn.razor index 23be7f9b..6e8e7fd5 100644 --- a/Wonky.Client/Components/ItemSortColumn.razor +++ b/Wonky.Client/Components/ItemSortColumn.razor @@ -15,7 +15,7 @@ // *@ - @foreach (var (key, value) in Items) { diff --git a/Wonky.Client/Components/ItemSortColumn.razor.cs b/Wonky.Client/Components/ItemSortColumn.razor.cs index f98b55f7..fe820e3f 100644 --- a/Wonky.Client/Components/ItemSortColumn.razor.cs +++ b/Wonky.Client/Components/ItemSortColumn.razor.cs @@ -15,24 +15,36 @@ using Blazored.LocalStorage; using Microsoft.AspNetCore.Components; +using Wonky.Client.Services; namespace Wonky.Client.Components; -public partial class ItemSortColumn +public partial class ItemSortColumn : IDisposable { - [Parameter] public EventCallback OnColumnChanged { get; set; } - private string SortColumn { get; set; } = "name"; + [Inject] private ILocalStorageService LocalStorage { get; set; } + [Inject] private ProfileService ProfileService { get; set; } private Dictionary Items { get; set; } = new(); - - protected override void OnInitialized() + private Preferences _preferences = new(); + private string Selection { get; set; } = "name"; + protected override async Task OnInitializedAsync() { + ProfileService.OnChange += ProfileServiceOnOnChange; + _preferences = await ProfileService.GetPreferences(); Items.Add("name", "Varenavn"); Items.Add("sku", "Varenr"); + Selection = (from x in Items where x.Key == _preferences.ItemSort select x.Value).First(); } - - private async Task OnSortColumnChange(ChangeEventArgs eventArgs) + private async Task OnSelectChanged(ChangeEventArgs e) { - await OnColumnChanged.InvokeAsync(SortColumn); + await ProfileService.SetItemSort(e.Value.ToString()); + } + private void ProfileServiceOnOnChange(Preferences newPreferences) + { + _preferences = newPreferences; + StateHasChanged(); + } + public void Dispose() + { + ProfileService.OnChange -= ProfileServiceOnOnChange; } - } \ No newline at end of file diff --git a/Wonky.Client/Components/PageSizeDropDown.razor b/Wonky.Client/Components/PageSizeDropDown.razor index f7919793..f6950488 100644 --- a/Wonky.Client/Components/PageSizeDropDown.razor +++ b/Wonky.Client/Components/PageSizeDropDown.razor @@ -15,12 +15,11 @@ // *@ -
- -
\ No newline at end of file + + + \ No newline at end of file diff --git a/Wonky.Client/Components/PageSizeDropDown.razor.cs b/Wonky.Client/Components/PageSizeDropDown.razor.cs index 46da0c83..d79f6508 100644 --- a/Wonky.Client/Components/PageSizeDropDown.razor.cs +++ b/Wonky.Client/Components/PageSizeDropDown.razor.cs @@ -17,17 +17,41 @@ using Blazored.LocalStorage; using Microsoft.AspNetCore.Components; +using Wonky.Client.Services; namespace Wonky.Client.Components { - public partial class PageSizeDropDown + public partial class PageSizeDropDown : IDisposable { - [Parameter] public EventCallback OnPageSizeChanged { get; set; } - private string PageSize { get; set; } = "5"; - - private async Task OnPageSizeChange(ChangeEventArgs eventArgs) + [Inject] private ILocalStorageService LocalStorage { get; set; } + [Inject] private ProfileService ProfileService { get; set; } + private Dictionary Items { get; set; } = new(); + private Preferences _preferences = new(); + private string? Selection { get; set; } + protected override async Task OnInitializedAsync() { - await OnPageSizeChanged.InvokeAsync(PageSize); + ProfileService.OnChange += ProfileServiceOnOnChange; + _preferences = await ProfileService.GetPreferences(); + + Items.Add("5", "5"); + Items.Add("10", "10"); + Items.Add("15", "15"); + Items.Add("30", "30"); + Items.Add("50", "50"); + Selection = (from x in Items where x.Key == _preferences.PageSize select x.Value).First(); } - } + private async Task OnSelectChanged(ChangeEventArgs e) + { + await ProfileService.SetPageSize(e.Value?.ToString()); + } + private void ProfileServiceOnOnChange(Preferences newPreferences) + { + _preferences = newPreferences; + StateHasChanged(); + } + public void Dispose() + { + ProfileService.OnChange -= ProfileServiceOnOnChange; + } + } } diff --git a/Wonky.Client/Models/PurchaseOrder.cs b/Wonky.Client/Models/PurchaseOrder.cs index 8a85eaa7..95d50a4e 100644 --- a/Wonky.Client/Models/PurchaseOrder.cs +++ b/Wonky.Client/Models/PurchaseOrder.cs @@ -45,6 +45,6 @@ namespace Wonky.Client.Models public string DlvAddress2 { get; set; } = ""; public string DlvZipCode { get; set; } = ""; public string DlvCity { get; set; } = ""; - public List Lines { get; set; } = new(); + public List Lines { get; set; } = new(); } } diff --git a/Wonky.Client/Pages/PurchaseOrderCreate.razor.cs b/Wonky.Client/Pages/PurchaseOrderCreate.razor.cs index a86241b4..dabe6c79 100644 --- a/Wonky.Client/Pages/PurchaseOrderCreate.razor.cs +++ b/Wonky.Client/Pages/PurchaseOrderCreate.razor.cs @@ -48,7 +48,7 @@ public partial class PurchaseOrderCreate : IDisposable [Inject] public ISalesItemHttpRepository SalesItemRepo { get; set; } [Parameter] public string Account { get; set; } - public List Lines { get; set; } = new(); + public List Lines { get; set; } = new(); protected override async Task OnInitializedAsync() { Interceptor.RegisterEvent(); diff --git a/Wonky.Client/Services/ProfileService.cs b/Wonky.Client/Services/ProfileService.cs new file mode 100644 index 00000000..867d8a6b --- /dev/null +++ b/Wonky.Client/Services/ProfileService.cs @@ -0,0 +1,98 @@ +using Blazored.LocalStorage; + +namespace Wonky.Client.Services; + +public record Preferences +{ + public bool DisplayIgnored { get; set; } = false; + public bool DisplayAll { get; set; } = false; + public string CompanySearch { get; set; } = "name"; + public string CompanySort { get; set; } = "name"; + public string ItemSearch { get; set; } = "name"; + public string ItemSort { get; set; } = "name"; + public string PageSize { get; set; } = "5"; + public string ItemGroup { get; set; } = "all"; +} +public class ProfileService +{ + private readonly ILocalStorageService _localStorageService; + public event Action? OnChange; + public ProfileService(ILocalStorageService localStorageService) + { + _localStorageService = localStorageService; + } + public async Task ToggleIgnored(bool toggle) + { + var preferences = await GetPreferences(); + var newPreferences = preferences + with { DisplayIgnored = toggle }; + await _localStorageService.SetItemAsync("preferences", newPreferences); + OnChange?.Invoke(newPreferences); + } + public async Task ToggleAll(bool toggle) + { + var preferences = await GetPreferences(); + var newPreferences = preferences + with { DisplayAll = toggle }; + await _localStorageService.SetItemAsync("preferences", newPreferences); + OnChange?.Invoke(newPreferences); + } + public async Task SetCompanySearch(string column) + { + var preferences = await GetPreferences(); + var newPreferences = preferences + with { CompanySearch = column }; + await _localStorageService.SetItemAsync("preferences", newPreferences); + OnChange?.Invoke(newPreferences); + } + + public async Task SetCompanySort(string column) + { + var preferences = await GetPreferences(); + var newPreferences = preferences + with { CompanySort = column }; + await _localStorageService.SetItemAsync("preferences", newPreferences); + OnChange?.Invoke(newPreferences); + } + + public async Task SetItemSearch(string column) + { + var preferences = await GetPreferences(); + var newPreferences = preferences + with { ItemSearch = column }; + await _localStorageService.SetItemAsync("preferences", newPreferences); + OnChange?.Invoke(newPreferences); + } + + public async Task SetItemSort(string column) + { + var preferences = await GetPreferences(); + var newPreferences = preferences + with { ItemSort = column }; + await _localStorageService.SetItemAsync("preferences", newPreferences); + OnChange?.Invoke(newPreferences); + } + + public async Task SetPageSize(string pageSize) + { + var preferences = await GetPreferences(); + var newPreferences = preferences + with { PageSize = pageSize }; + await _localStorageService.SetItemAsync("preferences", newPreferences); + OnChange?.Invoke(newPreferences); + } + public async Task SetItemGroup(string group) + { + var preferences = await GetPreferences(); + var newPreferences = preferences + with { ItemGroup = group }; + await _localStorageService.SetItemAsync("preferences", newPreferences); + OnChange?.Invoke(newPreferences); + } + public async Task GetPreferences() + { + return await _localStorageService.GetItemAsync("preferences") + ?? new Preferences(); + } + +} \ No newline at end of file diff --git a/Wonky.Entity/DTO/CrmActivity.cs b/Wonky.Entity/DTO/CrmActivity.cs deleted file mode 100644 index b6f8bb3f..00000000 --- a/Wonky.Entity/DTO/CrmActivity.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; - -namespace Wonky.Entity.DTO; - -public class CrmActivity -{ - public int ActivityId { get; set; } - - public string CompanyId { get; set; } = ""; - // From company row - [Required(ErrorMessage = "Konto skal udfyldes")] public string Account { get; set; } = ""; - [Required(ErrorMessage = "Moms nummer skal udfyldes")] public string VatNumber { get; set; } = ""; - [Required(ErrorMessage = "Navn skal udfyldes")] public string Name { get; set; } = ""; - public string Address { get; set; } = ""; - public string Address2 { get; set; } = ""; - [Required(ErrorMessage = "Bynavn skal udfyldes")] public string City { get; set; }= ""; - [Required(ErrorMessage = "Postnummer skal udfyldes")] public string ZipCode { get; set; } = ""; - [Required(ErrorMessage = "Salgskonsulent skal udfyldes")] public string SalesRep { get; set; } = ""; - public string Phone { get; set; } = ""; - public string EMail { get; set; } = ""; - // Form entries - public string ReferenceNumber { get; set; } = ""; - [Required(ErrorMessage = "Reference skal udfyldes")] public string YourRef { get; set; } = ""; - public string OurRef { get; set; } = ""; - [MaxLength(255, ErrorMessage = "Du kan h�jst bruge 255 tegn")] public string OrderMessage { get; set; } = ""; - // From company or form entry - public string DlvName { get; set; } = ""; - public string DlvAddress1 { get; set; } = ""; - public string DlvAddress2 { get; set; } = ""; - public string DlvZipCode { get; set; } = ""; - public string DlvCity { get; set; } = ""; - public List Lines { get; set; } = new(); -} diff --git a/Wonky.Entity/DTO/CrmDocumentDto.cs b/Wonky.Entity/DTO/CrmDocumentDto.cs new file mode 100644 index 00000000..74e54724 --- /dev/null +++ b/Wonky.Entity/DTO/CrmDocumentDto.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; + +namespace Wonky.Entity.DTO; + +public class CrmDocumentDto +{ + // Base account info + public string CompanyId { get; set; } = ""; + public string Account { get; set; } = ""; + public string VatNumber { get; set; } = ""; + public string Name { get; set; } = ""; + public string Address { get; set; } = ""; + public string Address2 { get; set; } = ""; + public string City { get; set; }= ""; + public string ZipCode { get; set; } = ""; + public string SalesRep { get; set; } = ""; + public string Phone { get; set; } = ""; + public string EMail { get; set; } = ""; + // Form entries + public string ReferenceNumber { get; set; } = ""; + public string YourRef { get; set; } = ""; + public string OurRef { get; set; } = ""; + public string OrderMessage { get; set; } = ""; + // From company or form entry + public string DlvName { get; set; } = ""; + public string DlvAddress1 { get; set; } = ""; + public string DlvAddress2 { get; set; } = ""; + public string DlvZipCode { get; set; } = ""; + public string DlvCity { get; set; } = ""; +} diff --git a/Wonky.Entity/DTO/CrmActivityLine.cs b/Wonky.Entity/DTO/CrmSalesLineDto.cs similarity index 97% rename from Wonky.Entity/DTO/CrmActivityLine.cs rename to Wonky.Entity/DTO/CrmSalesLineDto.cs index 0dd5f5cf..43baa498 100644 --- a/Wonky.Entity/DTO/CrmActivityLine.cs +++ b/Wonky.Entity/DTO/CrmSalesLineDto.cs @@ -15,7 +15,7 @@ // namespace Wonky.Entity.DTO; -public class CrmActivityLine +public class CrmSalesLines { public int ActivityLineId { get; set; } public int ActivityId { get; set; }