wip - salesReport - prevent creating activity when report exist
This commit is contained in:
parent
3bde1eb06a
commit
6c3f3c74b9
12 changed files with 72 additions and 36 deletions
|
@ -42,9 +42,9 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@if (Activities != null)
|
@if (_view != null)
|
||||||
{
|
{
|
||||||
foreach (var activity in Activities)
|
foreach (var activity in _view.Activities)
|
||||||
{
|
{
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
|
|
|
@ -25,6 +25,7 @@ using Wonky.Client.Services;
|
||||||
using Wonky.Client.Shared;
|
using Wonky.Client.Shared;
|
||||||
using Wonky.Entity.DTO;
|
using Wonky.Entity.DTO;
|
||||||
using Wonky.Entity.Models;
|
using Wonky.Entity.Models;
|
||||||
|
using Wonky.Entity.Views;
|
||||||
|
|
||||||
namespace Wonky.Client.Components;
|
namespace Wonky.Client.Components;
|
||||||
public partial class Home : IDisposable
|
public partial class Home : IDisposable
|
||||||
|
@ -36,7 +37,7 @@ public partial class Home : IDisposable
|
||||||
[Inject] private NavigationManager Navigator { get; set; }
|
[Inject] private NavigationManager Navigator { get; set; }
|
||||||
[Inject] private IActivityHttpRepository ActivityRepo { get; set; }
|
[Inject] private IActivityHttpRepository ActivityRepo { get; set; }
|
||||||
[Inject] private IToastService _toast { get; set; }
|
[Inject] private IToastService _toast { get; set; }
|
||||||
private List<ReportActivityDto> Activities { get; set; }
|
private NgActivityListView _view { get; set; }
|
||||||
private Preferences _prefs { get; set; } = new();
|
private Preferences _prefs { get; set; } = new();
|
||||||
private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
||||||
|
|
||||||
|
@ -56,8 +57,8 @@ public partial class Home : IDisposable
|
||||||
{
|
{
|
||||||
_toast.ShowInfo("Vent nogle sekunder for data");
|
_toast.ShowInfo("Vent nogle sekunder for data");
|
||||||
_workDate = workDate;
|
_workDate = workDate;
|
||||||
Activities = new List<ReportActivityDto>();
|
_view = new NgActivityListView();
|
||||||
Activities = await ActivityRepo.GetActivities(workDate);
|
_view = await ActivityRepo.GetActivities(workDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|
|
@ -54,15 +54,14 @@ public class ActivityHttpRepository : IActivityHttpRepository
|
||||||
_apiConfig = configuration.Value;
|
_apiConfig = configuration.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<ReportActivityDto>?> GetActivities(string activityDate)
|
public async Task<NgActivityListView> GetActivities(string activityDate)
|
||||||
{
|
{
|
||||||
var response = await _client
|
var response = await _client
|
||||||
.GetAsync($"{_apiConfig.ActivityEndpoint}/date/{activityDate}");
|
.GetAsync($"{_apiConfig.ActivityEndpoint}/date/{activityDate}");
|
||||||
var content = await response.Content.ReadAsStringAsync();
|
var content = await response.Content.ReadAsStringAsync();
|
||||||
_logger.LogInformation("GetActivities => {content}", content);
|
|
||||||
return string.IsNullOrWhiteSpace(content)
|
return string.IsNullOrWhiteSpace(content)
|
||||||
? new List<ReportActivityDto>()
|
? new NgActivityListView()
|
||||||
: JsonSerializer.Deserialize<List<ReportActivityDto>>(content, _options);
|
: JsonSerializer.Deserialize<NgActivityListView>(content, _options);
|
||||||
}
|
}
|
||||||
public async Task<PagingResponse<ActivityDto>> GetActivityPaged(ActivityPagingParams pagingParameters)
|
public async Task<PagingResponse<ActivityDto>> GetActivityPaged(ActivityPagingParams pagingParameters)
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,5 +28,5 @@ public interface IActivityHttpRepository
|
||||||
Task<ActivityDto> GetActivity(string id);
|
Task<ActivityDto> GetActivity(string id);
|
||||||
Task<ApiResponse> CreateActivity(ActivityDto model);
|
Task<ApiResponse> CreateActivity(ActivityDto model);
|
||||||
Task<ApiResponse> AcceptOffer(string id);
|
Task<ApiResponse> AcceptOffer(string id);
|
||||||
Task<List<ReportActivityDto>?> GetActivities(string activityDate);
|
Task<NgActivityListView> GetActivities(string activityDate);
|
||||||
}
|
}
|
|
@ -6,6 +6,7 @@ namespace Wonky.Client.HttpRepository;
|
||||||
|
|
||||||
public interface IReportHttpRepository
|
public interface IReportHttpRepository
|
||||||
{
|
{
|
||||||
|
Task<bool> ReportExist(string workDate);
|
||||||
Task<NgSalesReportView> GetReport(string workDate);
|
Task<NgSalesReportView> GetReport(string workDate);
|
||||||
Task<ReportInitDto> InitializeReportData(string workDate);
|
Task<ReportInitDto> InitializeReportData(string workDate);
|
||||||
Task<ApiResponse> PostReport(string workDate, ReportDto reportDto);
|
Task<ApiResponse> PostReport(string workDate, ReportDto reportDto);
|
||||||
|
|
|
@ -30,6 +30,14 @@ public class ReportHttpRepository :IReportHttpRepository
|
||||||
_apiConfig = configuration.Value;
|
_apiConfig = configuration.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<bool> ReportExist(string workDate)
|
||||||
|
{
|
||||||
|
var result =
|
||||||
|
await _client
|
||||||
|
.GetFromJsonAsync<NgActivityListView>($"{_apiConfig.ReportEndpoint}/exist/{workDate}");
|
||||||
|
return result.ReportClosed || true;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<NgSalesReportView> GetReport(string workDate)
|
public async Task<NgSalesReportView> GetReport(string workDate)
|
||||||
{
|
{
|
||||||
return await _client.GetFromJsonAsync<NgSalesReportView>($"{_apiConfig.ReportEndpoint}/{workDate}");
|
return await _client.GetFromJsonAsync<NgSalesReportView>($"{_apiConfig.ReportEndpoint}/{workDate}");
|
||||||
|
|
|
@ -28,6 +28,16 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@if (_reportClosdd)
|
||||||
|
{
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<h5>Der kan ikke oprettes aktiviteter for den valgte dato</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
@if (DraftContext != null)
|
@if (DraftContext != null)
|
||||||
{
|
{
|
||||||
<EditForm EditContext="DraftContext">
|
<EditForm EditContext="DraftContext">
|
||||||
|
@ -176,8 +186,10 @@
|
||||||
<li class="list-group-item d-flex justify-content-between align-items-end">
|
<li class="list-group-item d-flex justify-content-between align-items-end">
|
||||||
<div class="text-sm-start px-2">@rate.Quantity</div>
|
<div class="text-sm-start px-2">@rate.Quantity</div>
|
||||||
<div class="text-sm-end">@rate.Rate</div>
|
<div class="text-sm-end">@rate.Rate</div>
|
||||||
<button type="button" class="btn btn-primary btn-sm"
|
<button type="button" class="btn btn-primary btn-sm"
|
||||||
@onclick="@(() => SelectItem(item.ItemId, rate.Quantity, rate.Rate))">Vælg</button>
|
@onclick="@(() => SelectItem(item.ItemId, rate.Quantity, rate.Rate))">
|
||||||
|
Vælg
|
||||||
|
</button>
|
||||||
</li>
|
</li>
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -366,4 +378,5 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</EditForm>
|
</EditForm>
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -33,15 +33,16 @@ namespace Wonky.Client.Pages;
|
||||||
public partial class ActivityCreate : IDisposable
|
public partial class ActivityCreate : IDisposable
|
||||||
{
|
{
|
||||||
// todo: prevent creating activity for workDate with closed report
|
// todo: prevent creating activity for workDate with closed report
|
||||||
[Inject] public ILogger<ActivityCreate> _logger { get; set; }
|
[Inject] private ILogger<ActivityCreate> _logger { get; set; }
|
||||||
[Inject] public IToastService ToastService { get; set; }
|
[Inject] private IToastService _toast { get; set; }
|
||||||
[Inject] public NavigationManager NavigationManager { get; set; }
|
[Inject] private NavigationManager _navigator { get; set; }
|
||||||
[Inject] public ILocalStorageService StorageService { get; set; }
|
[Inject] private ILocalStorageService _storage { get; set; }
|
||||||
[Inject] private ISalesItemHttpRepository ItemRepo { get; set; }
|
[Inject] private ISalesItemHttpRepository _itemRepo { get; set; }
|
||||||
[Inject] private ICompanyHttpRepository CompanyRepo { get; set; }
|
[Inject] private ICompanyHttpRepository _companyRepo { get; set; }
|
||||||
[Inject] private HttpInterceptorService Interceptor { get; set; }
|
[Inject] private HttpInterceptorService _interceptor { get; set; }
|
||||||
[Inject] private UserPreferenceService UserPrefs { get; set; }
|
[Inject] private UserPreferenceService _userPrefs { get; set; }
|
||||||
[Inject] private IActivityHttpRepository ActivityRepo { get; set; }
|
[Inject] private IActivityHttpRepository _activityRepo { get; set; }
|
||||||
|
[Inject] private IReportHttpRepository _reportRepo { get; set; }
|
||||||
[CascadingParameter] DraftStateProvider DraftStateProvider { get; set; }
|
[CascadingParameter] DraftStateProvider DraftStateProvider { get; set; }
|
||||||
[Parameter] public string CompanyId { get; set; }
|
[Parameter] public string CompanyId { get; set; }
|
||||||
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
|
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
|
||||||
|
@ -67,28 +68,31 @@ public partial class ActivityCreate : IDisposable
|
||||||
private bool InvalidStatusType { get; set; } = true;
|
private bool InvalidStatusType { get; set; } = true;
|
||||||
private bool InvalidActivity { get; set; } = true;
|
private bool InvalidActivity { get; set; } = true;
|
||||||
private bool InvalidCanvas { get; set; } = true;
|
private bool InvalidCanvas { get; set; } = true;
|
||||||
|
private bool _reportClosdd { get; set; } = false;
|
||||||
private UserInfoView Ux { get; set; } = new();
|
private UserInfoView Ux { get; set; } = new();
|
||||||
private DateTime _workDate { get; set; } = DateTime.Now;
|
private DateTime _workDate { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
Interceptor.RegisterEvent();
|
_interceptor.RegisterEvent();
|
||||||
Interceptor.RegisterBeforeSendEvent();
|
_interceptor.RegisterBeforeSendEvent();
|
||||||
|
|
||||||
_prefs = await UserPrefs.GetPreferences();
|
_prefs = await _userPrefs.GetPreferences();
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(_prefs.WorkDate))
|
if (!string.IsNullOrWhiteSpace(_prefs.WorkDate))
|
||||||
_workDate = DateTime.Parse(_prefs.WorkDate);
|
_workDate = DateTime.Parse(_prefs.WorkDate);
|
||||||
|
|
||||||
_poDraft.ActivityDate = $"{_workDate:yyyy-MM-dd}" ;
|
_poDraft.ActivityDate = $"{_workDate:yyyy-MM-dd}" ;
|
||||||
|
// check if report is closed
|
||||||
|
_reportClosdd = await _reportRepo.ReportExist(_poDraft.ActivityDate);
|
||||||
|
|
||||||
_paging.SearchColumn = _prefs.ItemSearch ?? "name";
|
_paging.SearchColumn = _prefs.ItemSearch ?? "name";
|
||||||
_paging.PageSize = Convert.ToInt32(_prefs.PageSize);
|
_paging.PageSize = Convert.ToInt32(_prefs.PageSize);
|
||||||
|
|
||||||
await GetSalesItems();
|
await GetSalesItems();
|
||||||
|
|
||||||
Ux = await StorageService.GetItemAsync<UserInfoView>("_xu");
|
Ux = await _storage.GetItemAsync<UserInfoView>("_xu");
|
||||||
NgCompany = await CompanyRepo.GetCompanyById(CompanyId);
|
NgCompany = await _companyRepo.GetCompanyById(CompanyId);
|
||||||
|
|
||||||
// set up identification
|
// set up identification
|
||||||
_poDraft.CompanyId = NgCompany.CompanyId;
|
_poDraft.CompanyId = NgCompany.CompanyId;
|
||||||
|
@ -163,11 +167,11 @@ public partial class ActivityCreate : IDisposable
|
||||||
}
|
}
|
||||||
_poDraft.Lines = lines;
|
_poDraft.Lines = lines;
|
||||||
|
|
||||||
await StorageService.SetItemAsync(CompanyId, _poDraft);
|
await _storage.SetItemAsync(CompanyId, _poDraft);
|
||||||
Console.WriteLine(JsonSerializer.Serialize(_poDraft));
|
Console.WriteLine(JsonSerializer.Serialize(_poDraft));
|
||||||
var result = await ActivityRepo.CreateActivity(_poDraft);
|
var result = await _activityRepo.CreateActivity(_poDraft);
|
||||||
ToastService.ShowSuccess($"{result.Message}.");
|
_toast.ShowSuccess($"{result.Message}.");
|
||||||
NavigationManager.NavigateTo($"/companies");
|
_navigator.NavigateTo($"/companies");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CheckActivity()
|
private void CheckActivity()
|
||||||
|
@ -261,7 +265,7 @@ public partial class ActivityCreate : IDisposable
|
||||||
|
|
||||||
private async Task GetSalesItems()
|
private async Task GetSalesItems()
|
||||||
{
|
{
|
||||||
var response = await ItemRepo.GetSalesItemsPaged(_paging);
|
var response = await _itemRepo.GetSalesItemsPaged(_paging);
|
||||||
SalesItems = response.Items!;
|
SalesItems = response.Items!;
|
||||||
MetaData = response.MetaData;
|
MetaData = response.MetaData;
|
||||||
}
|
}
|
||||||
|
@ -286,7 +290,7 @@ public partial class ActivityCreate : IDisposable
|
||||||
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(_poDraft.ActivityTypeEnum))
|
if (string.IsNullOrEmpty(_poDraft.ActivityTypeEnum))
|
||||||
ToastService.ShowWarning("Aktivitet type kan ikke være tom");
|
_toast.ShowWarning("Aktivitet type kan ikke være tom");
|
||||||
|
|
||||||
_poFormInvalid = false;
|
_poFormInvalid = false;
|
||||||
|
|
||||||
|
@ -298,7 +302,7 @@ public partial class ActivityCreate : IDisposable
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Interceptor.DisposeEvent();
|
_interceptor.DisposeEvent();
|
||||||
DraftContext.OnFieldChanged -= HandleFieldChanged;
|
DraftContext.OnFieldChanged -= HandleFieldChanged;
|
||||||
DraftContext.OnValidationStateChanged -= ValidationChanged;
|
DraftContext.OnValidationStateChanged -= ValidationChanged;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
@page "/index"
|
@page "/index"
|
||||||
@page "/home"
|
@page "/home"
|
||||||
@using Wonky.Client.Components;
|
@using Wonky.Client.Components;
|
||||||
|
@using Microsoft.AspNetCore.Authorization
|
||||||
|
@attribute [Authorize(Roles = "Adviser,Admin,Supervisor")]
|
||||||
<Home></Home>
|
<Home></Home>
|
||||||
|
|
||||||
@code{
|
@code{
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
@using Wonky.Client.Components
|
@using Wonky.Client.Components
|
||||||
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@page "/sales-report/view/{reportDate}"
|
@page "/sales-report/view/{reportDate}"
|
||||||
|
@attribute [Authorize(Roles = "Adviser,Admin,Supervisor")]
|
||||||
|
|
||||||
<WorkDateComponent OnChanged="GetReport"></WorkDateComponent>
|
<WorkDateComponent OnChanged="GetReport"></WorkDateComponent>
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
"image": "grumpy-coder.png"
|
"image": "grumpy-coder.png"
|
||||||
},
|
},
|
||||||
"apiConfig": {
|
"apiConfig": {
|
||||||
"baseAddress": "https://staging.innotec.dk",
|
"baseAddress": "https://dev.innotec.dk",
|
||||||
"tokenPath": "token",
|
"tokenPath": "token",
|
||||||
"userInfo": "api/auth/userinfo",
|
"userInfo": "api/auth/userinfo",
|
||||||
"customerEndpoint": "api/v2/crm/companies",
|
"customerEndpoint": "api/v2/crm/companies",
|
||||||
|
|
7
Wonky.Entity/Views/NgActivityListView.cs
Normal file
7
Wonky.Entity/Views/NgActivityListView.cs
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
namespace Wonky.Entity.Views;
|
||||||
|
|
||||||
|
public class NgActivityListView
|
||||||
|
{
|
||||||
|
public bool ReportClosed { get; set; }
|
||||||
|
public List<NgReportActivityView> Activities { get; set; } = new();
|
||||||
|
}
|
Loading…
Reference in a new issue