From e6e0c2b3269dc50840731ecdbd8b8a3a9e68895f Mon Sep 17 00:00:00 2001 From: Frede Hundewadt <22748698+fhdk@users.noreply.github.com> Date: Sat, 9 Jul 2022 17:43:52 +0200 Subject: [PATCH] wip --- Wonky.Client/Components/Home.razor | 24 +++---- Wonky.Client/Components/Home.razor.cs | 46 +++++++++++--- .../Components/TaskItemTableComponent.razor | 62 +++++++------------ .../TaskItemTableComponent.razor.cs | 19 +++--- .../HttpRepository/ITaskItemHttpRepository.cs | 10 ++- .../HttpRepository/TaskItemHttpRepository.cs | 36 ++++++++--- .../Pages/LandingPageAdminAdvisers.razor | 2 + .../Pages/LandingPageAdminUsers.razor | 2 + .../Pages/ProductHistoryItemPage.razor | 2 + .../Pages/ProductHistoryListPage.razor | 2 + Wonky.Client/Pages/TaskItemListPage.razor | 4 +- Wonky.Client/Pages/TaskItemListPage.razor.cs | 6 +- Wonky.Client/wwwroot/appsettings.json | 4 +- .../wwwroot/css/{app-152.css => app.css} | 0 Wonky.Client/wwwroot/index.html | 2 +- Wonky.Entity/DTO/TaskItemDto.cs | 31 ++++++++-- 16 files changed, 160 insertions(+), 92 deletions(-) rename Wonky.Client/wwwroot/css/{app-152.css => app.css} (100%) diff --git a/Wonky.Client/Components/Home.razor b/Wonky.Client/Components/Home.razor index 9fdb41f1..680f2814 100644 --- a/Wonky.Client/Components/Home.razor +++ b/Wonky.Client/Components/Home.razor @@ -16,25 +16,25 @@ *@ @using Microsoft.AspNetCore.Authorization -Inno Web CRM +@using Wonky.Client.Components +Inno Web CRM -
-
-
-
-

@(DateTime.Parse(_workDate).ToLongDateString())

-
-
- -
+
+
+
+

@(DateTime.Parse(_workDate).ToLongDateString())

+
+
+
-
+
+

Administrator

Supervisor

-
+ \ No newline at end of file diff --git a/Wonky.Client/Components/Home.razor.cs b/Wonky.Client/Components/Home.razor.cs index 14708771..0adbe892 100644 --- a/Wonky.Client/Components/Home.razor.cs +++ b/Wonky.Client/Components/Home.razor.cs @@ -14,6 +14,7 @@ // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // +using System.Text.Json; using Blazored.LocalStorage; using Blazored.Toast.Services; using Microsoft.AspNetCore.Components; @@ -30,34 +31,59 @@ using Wonky.Entity.Views; namespace Wonky.Client.Components; public partial class Home : IDisposable { - // [Inject] public ILocalStorageService Storage { get; set; } - [Inject] public UserPreferenceService UserPrefs { get; set; } - [Inject] public ILogger Logger { get; set; } - [Inject] private HttpInterceptorService Interceptor { get; set; } + [Inject] private UserPreferenceService _preferenceService { get; set; } + [Inject] private ILogger _logger { get; set; } + [Inject] private HttpInterceptorService _interceptor { get; set; } [Inject] private IToastService _toast { get; set; } + [Inject] private ITaskItemHttpRepository _taskItemRepo { get; set; } + + private readonly JsonSerializerOptions _options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase + }; + private Preferences _prefs { get; set; } = new(); private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}"; + private List? _taskItems { get; set; } = new(); + protected override async Task OnInitializedAsync() { - _prefs = await UserPrefs.GetPreferences(); + _prefs = await _preferenceService.GetPreferences(); if(!string.IsNullOrWhiteSpace(_prefs.WorkDate)) _workDate = _prefs.WorkDate; - Interceptor.RegisterEvent(); - Interceptor.RegisterBeforeSendEvent(); + _interceptor.RegisterEvent(); + _interceptor.RegisterBeforeSendEvent(); - await GetCalender(_workDate); + await GetTaskItems(_workDate); } - private async Task GetCalender(string workDate) + private async Task GetTaskItems(string workDate) { _workDate = workDate; + _taskItems = await _taskItemRepo.GetTaskList(workDate); } + private async Task OnDoneClicked(string taskItemId) + { + // var item = _taskItems.Find(x => x.TaskItemId == taskItemId); + // item.IsCompleted = true; + + _logger.LogDebug("MarkAsDone TaskItemId => {}", taskItemId); + //await _taskItemRepo.UpdateTaskItem(taskItemId, item); + } + + private async Task OnDeleteConfirmed(string taskItemId) + { + _logger.LogDebug("Delete TaskItemId => {}", taskItemId); + //await _taskItemRepo.DeleteTaskItem(taskItemId); + } + public void Dispose() { - Interceptor.DisposeEvent(); + _interceptor.DisposeEvent(); } } diff --git a/Wonky.Client/Components/TaskItemTableComponent.razor b/Wonky.Client/Components/TaskItemTableComponent.razor index fa79157e..1e65d961 100644 --- a/Wonky.Client/Components/TaskItemTableComponent.razor +++ b/Wonky.Client/Components/TaskItemTableComponent.razor @@ -15,47 +15,31 @@ // *@ -@if (TaskItemList.Any()) +@if (TaskItemList != null) { -
-
-
-
- -
-
- -
-
- -
-
- -
- -
-
+ + + + + + + + + + + @foreach (var task in TaskItemList) { - -
-
- @task.Name -
-
- @task.DueTimestamp -
-
- @(task.Text[..50]) ... -
-
- -
-
- -
-
-
+ + + + + + + + } - + + +
@task.Description@task.Name@task.DueTimestamp
} \ No newline at end of file diff --git a/Wonky.Client/Components/TaskItemTableComponent.razor.cs b/Wonky.Client/Components/TaskItemTableComponent.razor.cs index 4a6e180e..5d11e08a 100644 --- a/Wonky.Client/Components/TaskItemTableComponent.razor.cs +++ b/Wonky.Client/Components/TaskItemTableComponent.razor.cs @@ -25,27 +25,30 @@ namespace Wonky.Client.Components { public partial class TaskItemTableComponent { - [Parameter] public List TaskItemList { get; set; } = new(); + [Parameter] public List? TaskItemList { get; set; } [Parameter] public EventCallback OnDelete { get; set; } - [Parameter] public EventCallback OnSelect { get; set; } [Parameter] public EventCallback OnDone { get; set; } - - [Inject] private HttpInterceptorService _interceptor { get; set; } - [Inject] private ITaskItemHttpRepository _taskRepo { get; set; } + [Inject] private NavigationManager _navigator { get; set; } + private Confirmation _confirmation = new (); private string _taskItemId = ""; - private void CallConfirmationModal(string taskItemId) + private void ShowConfirmationModal(string taskItemId) { _taskItemId = taskItemId; _confirmation.Show(); } - private async Task CloseTaskItem(string taskItemId) + private void ModifyTaskItem(string taskItemId) + { + _navigator.NavigateTo($"/task-items/{taskItemId}"); + } + + private async Task TaskItemDone(string taskItemId) { await OnDone.InvokeAsync(_taskItemId); } - private async Task DeleteTaskItem() + private async Task DeleteConfirmed(string taskItemId) { _confirmation.Hide(); await OnDelete.InvokeAsync(_taskItemId); diff --git a/Wonky.Client/HttpRepository/ITaskItemHttpRepository.cs b/Wonky.Client/HttpRepository/ITaskItemHttpRepository.cs index 600afaf5..1df555ff 100644 --- a/Wonky.Client/HttpRepository/ITaskItemHttpRepository.cs +++ b/Wonky.Client/HttpRepository/ITaskItemHttpRepository.cs @@ -15,12 +15,16 @@ using Wonky.Client.Pages; +using Wonky.Entity.DTO; namespace Wonky.Client.HttpRepository; public interface ITaskItemHttpRepository { - Task?> GetTaskList(); - Task CreateTaskItem(TaskItemViewPage taskItem); - Task GetTaskItem(string taskItemId); + Task?> GetTaskList(); + Task?> GetTaskList(string workDate); + Task GetTaskItem(string taskItemId); + Task CreateTaskItem(TaskItemDto taskItem); + Task UpdateTaskItem(string taskItemId, TaskItemDto taskItem); + Task DeleteTaskItem(string taskItemId); } \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/TaskItemHttpRepository.cs b/Wonky.Client/HttpRepository/TaskItemHttpRepository.cs index cce7d556..8321eb73 100644 --- a/Wonky.Client/HttpRepository/TaskItemHttpRepository.cs +++ b/Wonky.Client/HttpRepository/TaskItemHttpRepository.cs @@ -20,6 +20,7 @@ using Microsoft.AspNetCore.Components; using Microsoft.Extensions.Options; using Wonky.Client.Pages; using Wonky.Entity.Configuration; +using Wonky.Entity.DTO; using Wonky.Entity.Views; namespace Wonky.Client.HttpRepository; @@ -28,7 +29,8 @@ public class TaskItemHttpRepository : ITaskItemHttpRepository { private readonly JsonSerializerOptions _options = new JsonSerializerOptions { - PropertyNameCaseInsensitive = true + PropertyNameCaseInsensitive = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; private readonly NavigationManager _navigation; @@ -45,19 +47,35 @@ public class TaskItemHttpRepository : ITaskItemHttpRepository _navigation = navigation; _apiConfig = configuration.Value; } + + + public async Task?> GetTaskList() + { + return await _client.GetFromJsonAsync>($"{_apiConfig.TaskUri}", _options); + } + + public async Task?> GetTaskList(string workDate) + { + return await _client.GetFromJsonAsync>($"{_apiConfig.TaskUri}/date/{workDate}", _options); + } + + public async Task GetTaskItem(string taskItemId) + { + return await _client.GetFromJsonAsync($"{_apiConfig.TaskUri}/{taskItemId}", _options); + } - public async Task?> GetTaskList() + public async Task CreateTaskItem(TaskItemDto taskItem) { - return await _client.GetFromJsonAsync>($"{_apiConfig.TaskUri}"); + await _client.PostAsJsonAsync($"{_apiConfig.TaskUri}", taskItem, _options); } - - public async Task CreateTaskItem(TaskItemViewPage taskItem) + + public async Task UpdateTaskItem(string taskItemId, TaskItemDto taskItem) { - await _client.PostAsJsonAsync($"{_apiConfig.TaskUri}", taskItem); + await _client.PutAsJsonAsync($"{_apiConfig.TaskUri}/{taskItemId}", taskItem, _options); } - - public async Task GetTaskItem(string taskItemId) + + public async Task DeleteTaskItem(string taskItemId) { - return await _client.GetFromJsonAsync($"{_apiConfig.TaskUri}/{taskItemId}"); + await _client.DeleteAsync($"{_apiConfig.TaskUri}/{taskItemId}"); } } \ No newline at end of file diff --git a/Wonky.Client/Pages/LandingPageAdminAdvisers.razor b/Wonky.Client/Pages/LandingPageAdminAdvisers.razor index 8287d35a..09f8814f 100644 --- a/Wonky.Client/Pages/LandingPageAdminAdvisers.razor +++ b/Wonky.Client/Pages/LandingPageAdminAdvisers.razor @@ -15,6 +15,8 @@ // *@ +@using Microsoft.AspNetCore.Authorization +@attribute [Authorize(Roles = "Admin")] @page "/admin/users/advisers"
diff --git a/Wonky.Client/Pages/LandingPageAdminUsers.razor b/Wonky.Client/Pages/LandingPageAdminUsers.razor index c9f530b2..a1ae31a7 100644 --- a/Wonky.Client/Pages/LandingPageAdminUsers.razor +++ b/Wonky.Client/Pages/LandingPageAdminUsers.razor @@ -15,6 +15,8 @@ // *@ +@using Microsoft.AspNetCore.Authorization +@attribute [Authorize(Roles = "Admin")] @page "/admin/users/office"
diff --git a/Wonky.Client/Pages/ProductHistoryItemPage.razor b/Wonky.Client/Pages/ProductHistoryItemPage.razor index 71c4194e..dbbcf3ce 100644 --- a/Wonky.Client/Pages/ProductHistoryItemPage.razor +++ b/Wonky.Client/Pages/ProductHistoryItemPage.razor @@ -16,6 +16,8 @@ *@ @using Wonky.Client.Components +@using Microsoft.AspNetCore.Authorization +@attribute [Authorize(Roles = "Adviser")] @page "/companies/{CompanyId}/h/p/{Sku}"
diff --git a/Wonky.Client/Pages/ProductHistoryListPage.razor b/Wonky.Client/Pages/ProductHistoryListPage.razor index 6e8b240e..641f74f5 100644 --- a/Wonky.Client/Pages/ProductHistoryListPage.razor +++ b/Wonky.Client/Pages/ProductHistoryListPage.razor @@ -16,6 +16,8 @@ *@ @using Wonky.Client.Components +@using Microsoft.AspNetCore.Authorization +@attribute [Authorize(Roles = "Adviser")] @page "/companies/{CompanyId}/h/p"
diff --git a/Wonky.Client/Pages/TaskItemListPage.razor b/Wonky.Client/Pages/TaskItemListPage.razor index 7f9bd62a..ab2cc3e8 100644 --- a/Wonky.Client/Pages/TaskItemListPage.razor +++ b/Wonky.Client/Pages/TaskItemListPage.razor @@ -16,6 +16,8 @@ *@ @using Wonky.Client.Components +@using Microsoft.AspNetCore.Authorization +@attribute [Authorize(Roles = "Adviser")] @page "/task-items"
@@ -34,5 +36,5 @@
- +
\ No newline at end of file diff --git a/Wonky.Client/Pages/TaskItemListPage.razor.cs b/Wonky.Client/Pages/TaskItemListPage.razor.cs index 2a731733..63618c9d 100644 --- a/Wonky.Client/Pages/TaskItemListPage.razor.cs +++ b/Wonky.Client/Pages/TaskItemListPage.razor.cs @@ -19,6 +19,7 @@ using Wonky.Client.Components; using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpRepository; using Wonky.Client.Services; +using Wonky.Entity.DTO; using Wonky.Entity.Views; namespace Wonky.Client.Pages; @@ -29,11 +30,12 @@ public partial class TaskItemListPage : IDisposable [Inject] public ILogger Logger { get; set; } [Inject] private HttpInterceptorService _interceptor { get; set; } [Inject] private NavigationManager _navigator { get; set; } - [Inject] private ITaskItemHttpRepository _activityRepo { get; set; } + [Inject] private ITaskItemHttpRepository _taskItemRepo { get; set; } [Inject] private IToastService _toast { get; set; } private Preferences _prefs { get; set; } = new(); private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}"; private bool _reportExist = false; + private List? _taskItems { get; set; } = new(); protected override async Task OnInitializedAsync() { @@ -49,7 +51,7 @@ public partial class TaskItemListPage : IDisposable private async Task GetTaskItems(string workDate) { _toast.ShowInfo("Vent nogle sekunder for data"); - _workDate = workDate; + _taskItems = await _taskItemRepo.GetTaskList(workDate); } public void Dispose() { diff --git a/Wonky.Client/wwwroot/appsettings.json b/Wonky.Client/wwwroot/appsettings.json index f25d782e..aa4336ec 100644 --- a/Wonky.Client/wwwroot/appsettings.json +++ b/Wonky.Client/wwwroot/appsettings.json @@ -1,13 +1,13 @@ { "appInfo": { "name": "Wonky Client", - "version": "0.8.152", + "version": "0.8.153", "isBeta": false, "sandBox": false, "image": "grumpy-coder.png" }, "apiConfig": { - "innoBaseUrl": "https://production.innotec.dk", + "innoBaseUrl": "https://staging.innotec.dk", "glsTrackUrl": "https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DK01/DA/5004.htm?txtAction=71000&txtRefNo=", "glsId": "", "virkUrl": "api/v2/services/virk", diff --git a/Wonky.Client/wwwroot/css/app-152.css b/Wonky.Client/wwwroot/css/app.css similarity index 100% rename from Wonky.Client/wwwroot/css/app-152.css rename to Wonky.Client/wwwroot/css/app.css diff --git a/Wonky.Client/wwwroot/index.html b/Wonky.Client/wwwroot/index.html index e82a70bc..8ac4b78a 100644 --- a/Wonky.Client/wwwroot/index.html +++ b/Wonky.Client/wwwroot/index.html @@ -13,7 +13,7 @@ - + diff --git a/Wonky.Entity/DTO/TaskItemDto.cs b/Wonky.Entity/DTO/TaskItemDto.cs index e33fb7e6..4ad36c11 100644 --- a/Wonky.Entity/DTO/TaskItemDto.cs +++ b/Wonky.Entity/DTO/TaskItemDto.cs @@ -13,35 +13,55 @@ // 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 TaskItemDto { /// - /// Task item entity Id + /// Task item entity id /// + [MaxLength(36)] public string TaskItemId { get; set; } = ""; /// - /// User entity Id + /// User entity id /// + [MaxLength(36)] public string ErpUserId { get; set; } = ""; + + /// + /// Reference entity id + /// + [Required(ErrorMessage = "Reference id skal angives")] + public string ReferenceId { get; set; } = ""; /// /// Task name /// + [Required(ErrorMessage = "Opgaven skal have et navn.")] + [MaxLength(128, ErrorMessage = "Der kan bruges 128 tegn.")] public string Name { get; set; } = ""; /// /// Task description /// - public string Text { get; set; } = ""; + [MaxLength(1000, ErrorMessage = "Der kan højst bruges 1000 tegn.")] + public string Description { get; set; } = ""; /// - /// Task due date + /// Task due date / time /// + /// Format "yyyy-MM-dd'T'HH:mm" public string DueTimestamp { get; set; } = ""; + /// + /// Task type enum as string + /// + /// None,Recall,Revision,Reminder + public string TaskTypeEnum { get; set; } = ""; + /// /// Task interval /// @@ -61,5 +81,6 @@ public class TaskItemDto /// Recurring flag /// /// Interval != 0 - public virtual bool Recurring { get; set; } + public bool Recurring { get; set; } + } \ No newline at end of file