build v0.8.22

This commit is contained in:
Frede Hundewadt 2022-06-24 12:36:32 +02:00
parent f1deb49d0d
commit 73c2b6da7e
39 changed files with 367 additions and 233 deletions

View file

@ -1,9 +0,0 @@
using Microsoft.AspNetCore.Components;
using Wonky.Entity.DTO;
namespace Wonky.Client.Components;
public partial class HistoryTableComponent
{
[Parameter] public List<ProductHistoryView> History { get; set; }
}

View file

@ -1,34 +0,0 @@
@if (Products.Any())
{
<table class="table">
<thead>
<tr>
<th scope="col">
Product
</th>
<th scope="col">
Varenummer
</th>
<th scope="col">
Antal
</th>
</tr>
</thead>
<tbody>
@foreach (var product in Products)
{
<tr class="align-content-center">
<td>
@product.Name
</td>
<td>
@product.Sku
</td>
<td>
@product.Quantity
</td>
</tr>
}
</tbody>
</table>
}

View file

@ -1,9 +0,0 @@
using Microsoft.AspNetCore.Components;
using Wonky.Entity.DTO;
namespace Wonky.Client.Components;
public partial class InventoryTableComponent
{
[Parameter] public List<ProductInventoryView> Products { get; set; }
}

View file

@ -0,0 +1,34 @@
@if (Inventory.Any())
{
<div class="list-group list-group-flush">
<div class="list-group-item">
<div class="row">
<div class="col">
<h4>Produkt</h4>
</div>
<div class="col">
<h4>Varenr.</h4>
</div>
<div class="col">
<h4>Antal</h4>
</div>
</div>
</div>
@foreach (var product in Inventory)
{
<a class="list-group-item list-group-item-action" href="/companies/@CompanyId/h/p/@product.Sku">
<div class="row">
<div class="col">
@product.Description
</div>
<div class="col">
@product.Sku
</div>
<div class="col">
@product.Quantity
</div>
</div>
</a>
}
</div>
}

View file

@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Components;
using Wonky.Entity.DTO;
namespace Wonky.Client.Components;
public partial class ProductInventoryTableComponent
{
[Parameter] public List<ProductInventoryView> Inventory { get; set; } = new();
[Parameter] public string CompanyId { get; set; } = "";
}

View file

@ -1,4 +1,4 @@
@if (History.Any())
@if (ProductHistory.Any())
{
<table class="table">
<thead>
@ -24,7 +24,7 @@
</tr>
</thead>
<tbody>
@foreach (var line in History)
@foreach (var line in ProductHistory)
{
<tr class="align-content-center">
<td>
@ -34,7 +34,7 @@
@line.Quantity
</td>
<td>
@line.Name
@line.Description
</td>
<td>
@line.Sku

View file

@ -0,0 +1,10 @@
using Microsoft.AspNetCore.Components;
using Wonky.Entity.DTO;
namespace Wonky.Client.Components;
public partial class ProductLineTableComponent
{
[Parameter] public List<ProductHistoryView> ProductHistory { get; set; } = new();
}

View file

@ -47,7 +47,8 @@ public class CompanyHttpRepository : ICompanyHttpRepository
public CompanyHttpRepository(HttpClient client,
ILogger<CompanyHttpRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> apiConfig)
NavigationManager navigation,
IOptions<ApiConfig> apiConfig)
{
_client = client;
_logger = logger;

View file

@ -19,54 +19,43 @@ public class HistoryHttpRepository : IHistoryHttpRepository
private readonly NavigationManager _navigation;
private ILogger<HistoryHttpRepository> _logger;
private readonly HttpClient _client;
private readonly ApiConfig _apiConfig;
private readonly ApiConfig _api;
public HistoryHttpRepository(HttpClient client,
ILogger<HistoryHttpRepository> logger,
NavigationManager navigation, IOptions<ApiConfig> configuration)
NavigationManager navigation,
IOptions<ApiConfig> configuration)
{
_client = client;
_logger = logger;
_navigation = navigation;
_apiConfig = configuration.Value;
_api = configuration.Value;
}
// public async Task<List<TaskItemView>> GetTaskList()
// {
// return await _client.GetFromJsonAsync<List<TaskItemView>>($"{_apiConfig.TaskItemEndpoint}");
// }
//
// public async Task CreateTaskItem(TaskItemView taskItem)
// {
// await _client.PostAsJsonAsync($"{_apiConfig.TaskItemEndpoint}", taskItem);
// }
//
// public async Task<TaskItemView> GetTaskItem(string taskItemId)
// {
// return await _client.GetFromJsonAsync<TaskItemView>($"{_apiConfig.TaskItemEndpoint}/{taskItemId}");
// }
public async Task<List<ProductInventoryView>> GetProductInventory(string companyId)
public async Task<List<ProductInventoryView>> FetchInventory(string companyId)
{
return await _client.GetFromJsonAsync<List<ProductInventoryView>>(
$"{_apiConfig.CompanyEndpoint}/{companyId}/{_apiConfig.HistoryEndpoint}/products");
var response = await _client.GetAsync($"{_api.CompanyEndpoint}/{companyId}/{_api.InventoryUri}");
var content = await response.Content.ReadAsStringAsync();
return response.IsSuccessStatusCode
? JsonSerializer.Deserialize<List<ProductInventoryView>>(content, _options)
: new List<ProductInventoryView>();
}
public async Task<List<ProductHistoryView>> GetProductHistory(string companyId)
public async Task<List<ProductHistoryView>> FetchHistory(string companyId)
{
return await _client.GetFromJsonAsync<List<ProductHistoryView>>(
$"{_apiConfig.CompanyEndpoint}/{companyId}/{_apiConfig.HistoryEndpoint}/products");
$"{_api.CompanyEndpoint}/{companyId}/{_api.ProductUri}");
}
public async Task<List<ProductHistoryView>> GetProductHistory(string companyId, string sku)
public async Task<List<ProductHistoryView>> FetchHistory(string companyId, string sku)
{
return await _client.GetFromJsonAsync<List<ProductHistoryView>>(
$"{_apiConfig.CompanyEndpoint}/{companyId}/{_apiConfig.HistoryEndpoint}/products");
$"{_api.CompanyEndpoint}/{companyId}/{_api.ProductUri}/{sku}");
}
public async Task<string> UpdateProductHistory(string companyId, string syncDate)
public async Task<string> UpdateProductHistory(string companyId, string syncDate = "2010-01-01")
{
return await _client.GetStringAsync($"{_apiConfig.CompanyEndpoint}/{companyId}/{syncDate}");
return await _client.GetStringAsync($"{_api.CompanyEndpoint}/{companyId}/{_api.UpdateUri}/{syncDate}");
}
}

View file

@ -5,8 +5,8 @@ namespace Wonky.Client.HttpRepository;
public interface IHistoryHttpRepository
{
Task<List<ProductInventoryView>> GetProductInventory(string companyId);
Task<List<ProductHistoryView>> GetProductHistory(string companyId);
Task<List<ProductHistoryView>> GetProductHistory(string companyId, string sku);
Task<List<ProductInventoryView>> FetchInventory(string companyId);
Task<List<ProductHistoryView>> FetchHistory(string companyId);
Task<List<ProductHistoryView>> FetchHistory(string companyId, string sku);
Task<string> UpdateProductHistory(string companyId, string syncDate);
}

View file

@ -32,6 +32,8 @@ namespace Wonky.Client.Pages;
public partial class ActivityCompanyCreate : IDisposable
{
[CascadingParameter] DraftStateProvider DraftStateProvider { get; set; }
[Parameter] public string CompanyId { get; set; }
// todo: prevent creating activity for workDate with closed report
[Inject] private ILogger<ActivityCompanyCreate> _logger { get; set; }
[Inject] private IToastService _toast { get; set; }
@ -43,8 +45,6 @@ public partial class ActivityCompanyCreate : IDisposable
[Inject] private UserPreferenceService _userPrefs { get; set; }
[Inject] private IActivityHttpRepository _activityRepo { get; set; }
[Inject] private IReportHttpRepository _reportRepo { get; set; }
[CascadingParameter] DraftStateProvider DraftStateProvider { get; set; }
[Parameter] public string CompanyId { get; set; }
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true

View file

@ -7,8 +7,8 @@ namespace Wonky.Client.Pages;
public partial class ActivityList
{
[Inject] public IActivityHttpRepository ActivityRepo { get; set; }
[Inject] public IHttpClientInterceptor Interceptor { get; set; }
[Inject] private IActivityHttpRepository _activityRepo { get; set; }
[Inject] private IHttpClientInterceptor _interceptor { get; set; }
}

View file

@ -10,8 +10,8 @@ namespace Wonky.Client.Pages;
public partial class ActivityToday
{
[Inject] public UserPreferenceService UserPrefs { get; set; }
[Inject] public ILogger<Home> Logger { get; set; }
[Inject] private UserPreferenceService _preferenceService { get; set; }
[Inject] private ILogger<Home> _logger { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private NavigationManager _navigator { get; set; }
[Inject] private IActivityHttpRepository _activityRepo { get; set; }
@ -24,7 +24,7 @@ public partial class ActivityToday
protected override async Task OnInitializedAsync()
{
_prefs = await UserPrefs.GetPreferences();
_prefs = await _preferenceService.GetPreferences();
if(!string.IsNullOrWhiteSpace(_prefs.WorkDate))
_workDate = _prefs.WorkDate;

View file

@ -37,13 +37,13 @@ namespace Wonky.Client.Pages
{
public partial class CompanyCreate : IDisposable
{
[Inject] public IToastService ToastService { get; set; }
[Inject] public ILogger<CompanyCreate> Logger { get; set; }
[Inject] public ILocalStorageService StorageService { get; set; }
[Inject] public NavigationManager Navigation { get; set; }
[Inject] public ICompanyHttpRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public VatInfoLookupService VatInfoLookupService { get; set; }
[Inject] private IToastService _toast { get; set; }
[Inject] private ILogger<CompanyCreate> _logger { get; set; }
[Inject] private ILocalStorageService _storage { get; set; }
[Inject] private NavigationManager _navigator { get; set; }
[Inject] private ICompanyHttpRepository _companyRepo { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private VatInfoLookupService _vatService { get; set; }
private EditContext _editContext { get; set; }
private CompanyDto _companyObject { get; set; } = new();
private VirkRegInfo _virkRegInfo { get; set; } = new();
@ -63,7 +63,7 @@ namespace Wonky.Client.Pages
_editContext.OnFieldChanged += HandleFieldChanged;
_editContext.OnValidationStateChanged += ValidationChanged;
var ux = await StorageService.GetItemAsync<UserInfoView>("_xu");
var ux = await _storage.GetItemAsync<UserInfoView>("_xu");
_dk = ux.CountryCode.ToLower() == "dk";
_companyObject.SalesRepId = ux.Id;
@ -75,16 +75,16 @@ namespace Wonky.Client.Pages
_companyObject.LastVisit = $"{_lastVisit:yyyy-MM-dd}";
_companyObject.LastVisit = $"{_nextVisit:yyyy-MM-dd}";
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
}
private async Task GetInfoFromAddress(VatAddress address)
{
_showInfos = true;
ToastService.ShowInfo("Vent for adresse info ...");
_vInfos = await VatInfoLookupService.QueryVirkRegistry(
_toast.ShowInfo("Vent for adresse info ...");
_vInfos = await _vatService.QueryVirkRegistry(
new VirkParams
{
StreetName = address.StreetName,
@ -93,18 +93,18 @@ namespace Wonky.Client.Pages
});
if (!_vInfos.Any())
{
ToastService.ShowWarning($"Ingen data fundet ...");
_toast.ShowWarning($"Ingen data fundet ...");
}
}
private async Task GetInfoFromVat(string vatNumber)
{
_showInfos = true;
ToastService.ShowInfo("Vent for firma info ...");
_vInfos = await VatInfoLookupService
_toast.ShowInfo("Vent for firma info ...");
_vInfos = await _vatService
.QueryVirkRegistry(new VirkParams {VatNumber = vatNumber});
if (!_vInfos.Any())
{
ToastService.ShowError($"Firma med CVR '{vatNumber}' findes ikke.");
_toast.ShowError($"Firma med CVR '{vatNumber}' findes ikke.");
}
}
private void SelectCompany(string vatNumber)
@ -123,16 +123,16 @@ namespace Wonky.Client.Pages
}
private async Task SubmitCompanyForm()
{
var newId = await CompanyRepo.CreateCompany(_companyObject);
var newId = await _companyRepo.CreateCompany(_companyObject);
if (!string.IsNullOrWhiteSpace(newId))
{
ToastService.ShowSuccess($"'{_companyObject.Name}' er oprettet i CRM.");
Navigation.NavigateTo($"/companies/{newId}");
_toast.ShowSuccess($"'{_companyObject.Name}' er oprettet i CRM.");
_navigator.NavigateTo($"/companies/{newId}");
}
else
{
ToastService.ShowWarning($"'{_companyObject.Name}' IKKE oprettet.");
_toast.ShowWarning($"'{_companyObject.Name}' IKKE oprettet.");
}
}
@ -168,7 +168,7 @@ namespace Wonky.Client.Pages
public void Dispose()
{
Interceptor.DisposeEvent();
_interceptor.DisposeEvent();
_editContext.OnFieldChanged -= HandleFieldChanged;
_editContext.OnValidationStateChanged -= ValidationChanged;
}

View file

@ -39,7 +39,7 @@
</div>
<div class="row mb-3">
<div class="col-md-6">
<PaginationComponent MetaData="MetaData" Spread="2" SelectedPage="SelectedPage"></PaginationComponent>
<PaginationComponent MetaData="_metaData" Spread="2" SelectedPage="SelectedPage"></PaginationComponent>
</div>
<div class="col-md-3">
</div>
@ -48,4 +48,4 @@
</div>
</div>
<CompanyTableComponent Companies="Companies" OnDelete="DeleteCompany"></CompanyTableComponent>
<CompanyTableComponent Companies="_companyList" OnDelete="DeleteCompany"></CompanyTableComponent>

View file

@ -28,12 +28,12 @@ namespace Wonky.Client.Pages
{
public partial class CompanyList : IDisposable
{
[Inject] public ILocalStorageService LocalStorage { get; set; }
[Inject] private UserPreferenceService UserPrefService { get; set; }
[Inject] public ICompanyHttpRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
public List<CompanyDto>? Companies { get; set; } = new();
public MetaData? MetaData { get; set; } = new();
[Inject] private ILocalStorageService _storage { get; set; }
[Inject] private UserPreferenceService _preferenceService { get; set; }
[Inject] private ICompanyHttpRepository _companyRepo { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; }
private List<CompanyDto> _companyList { get; set; } = new();
private MetaData _metaData { get; set; } = new();
private CompanyPagingParams _paging = new();
private Preferences _preferences { get; set; } = new();
private string _savedSearch { get; set; } = "";
@ -41,7 +41,7 @@ namespace Wonky.Client.Pages
protected override async Task OnInitializedAsync()
{
// set preferences
_preferences = await UserPrefService.GetPreferences();
_preferences = await _preferenceService.GetPreferences();
_paging.OrderBy = _preferences.CompanySort;
_paging.SearchColumn = _preferences.CompanySearch;
_paging.PageSize = Convert.ToInt32(_preferences.PageSize);
@ -52,29 +52,29 @@ namespace Wonky.Client.Pages
if(!string.IsNullOrWhiteSpace(_savedSearch))
_paging.SearchTerm = _savedSearch;
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
// get companies
await GetCompanies();
}
private async Task SelectedPage(int page)
{
Companies = new List<CompanyDto>();
_companyList = new List<CompanyDto>();
_paging.PageNumber = page;
await GetCompanies();
}
private async Task SetSearchCol(string searchColumn)
{
Companies = new List<CompanyDto>();
_companyList = new List<CompanyDto>();
_paging.SearchColumn = searchColumn;
_paging.PageNumber = 1;
await GetCompanies();
}
private async Task SetPageSize(string pageSize)
{
Companies = new List<CompanyDto>();
_companyList = new List<CompanyDto>();
_paging.PageSize = Convert.ToInt32(pageSize);
_paging.PageNumber = 1;
await GetCompanies();
@ -83,9 +83,9 @@ namespace Wonky.Client.Pages
private async Task SetSearchPhrase(string searchTerm)
{
if(string.IsNullOrWhiteSpace(searchTerm))
await UserPrefService.SetCompanyFilterPhrase("");
await _preferenceService.SetCompanyFilterPhrase("");
Companies = new List<CompanyDto>();
_companyList = new List<CompanyDto>();
_paging.PageNumber = 1;
_paging.SearchTerm = searchTerm;
await GetCompanies();
@ -93,28 +93,28 @@ namespace Wonky.Client.Pages
private async Task SetSortCol(string orderBy)
{
Companies = new List<CompanyDto>();
_companyList = new List<CompanyDto>();
_paging.OrderBy = orderBy;
await GetCompanies();
}
private async Task DeleteCompany(string companyId)
{
Companies = new List<CompanyDto>();
await CompanyRepo.DeleteCompany(companyId);
if (_paging.PageNumber > 1 && Companies.Count == 1)
_companyList = new List<CompanyDto>();
await _companyRepo.DeleteCompany(companyId);
if (_paging.PageNumber > 1 && _companyList.Count == 1)
_paging.PageNumber--;
await GetCompanies();
}
private async Task GetCompanies()
{
var pagingResponse = await CompanyRepo.GetCompaniesPaged(_paging);
Companies = pagingResponse.Items;
MetaData = pagingResponse.MetaData;
var pagingResponse = await _companyRepo.GetCompaniesPaged(_paging);
_companyList = pagingResponse.Items;
_metaData = pagingResponse.MetaData;
}
public void Dispose() => Interceptor.DisposeEvent();
public void Dispose() => _interceptor.DisposeEvent();
}
}

View file

@ -183,10 +183,10 @@
<ValidationMessage For="@(() => _company.Interval)"></ValidationMessage>
</td>
<th scope="row">
Historik
</th>
<td>
<button class="btn btn-warning" type="button" @onclick="@RefreshHistory">@_company.HistorySync</button>
</td>
</tr>
</tbody>
@ -201,10 +201,10 @@
<a class="btn btn-primary" href="/companies">Til Oversigt</a>
</div>
<div class="col">
<a class="btn btn-success" href="/companies/@_company.CompanyId/products">Produktkøb</a>
<a class="btn btn-success" href="/companies/@_company.CompanyId/h/i">Produktkøb</a>
</div>
<div class="col">
<a class="btn btn-success" href="/companies/@_company.CompanyId/history">Varelinjer</a>
<a class="btn btn-success" href="/companies/@_company.CompanyId/h/p">Varelinjer</a>
</div>
<div class="col">
<ActivityButton CompanyId="@_company.CompanyId" Enabled="@_company.ValidVat"></ActivityButton>

View file

@ -22,6 +22,7 @@ using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpRepository;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.DataProtection.Repositories;
using Wonky.Client.Helpers;
using Wonky.Client.Models;
using Wonky.Client.Services;
@ -34,14 +35,15 @@ namespace Wonky.Client.Pages;
public partial class CompanyView : IDisposable
{
[Inject] public IToastService ToastService { get; set; }
[Inject] public ILogger<CompanyView> Logger { get; set; }
[Inject] public NavigationManager Navigation { get; set; }
[Inject] public ICompanyHttpRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public VatInfoLookupService VatInfoLookupService { get; set; }
[Inject] public ILocalStorageService StorageService { get; set; }
[Parameter] public string CompanyId { get; set; } = "";
[Inject] private IToastService _toast { get; set; }
[Inject] private ILogger<CompanyView> _loger { get; set; }
[Inject] private NavigationManager _navigator { get; set; }
[Inject] private ICompanyHttpRepository _companyRepo { get; set; }
[Inject] private IHistoryHttpRepository _historyRepo { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private VatInfoLookupService _vatService { get; set; }
[Inject] private ILocalStorageService _storage { get; set; }
private CompanyDto _company { get; set; } = new();
private EditContext _editContext { get; set; }
private List<VirkRegInfo> _vInfos { get; set; } = new();
@ -62,14 +64,20 @@ public partial class CompanyView : IDisposable
PropertyNameCaseInsensitive = true
};
private async Task RefreshHistory()
{
_toast.ShowInfo("Vent mens data opdateres ...");
var ts = await _historyRepo.UpdateProductHistory(_company.CompanyId, $"{DateTime.Parse(_company.HistorySync):yyyy-MM-dd}");;
_company.HistorySync = ts.Replace("\"", "");
}
protected override async Task OnInitializedAsync()
{
var ux = await StorageService.GetItemAsync<UserInfoView>("_xu");
var ux = await _storage.GetItemAsync<UserInfoView>("_xu");
countryCode = ux.CountryCode;
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
_company = await CompanyRepo.GetCompanyById(CompanyId);
_company = await _companyRepo.GetCompanyById(CompanyId);
_orgVat = _company.VatNumber;
_company.CountryCode = ux.CountryCode.ToLower();
@ -137,7 +145,7 @@ public partial class CompanyView : IDisposable
{
if (!VatUtils.ValidateFormat(_company.CountryCode, _company.VatNumber))
{
ToastService.ShowError($"CVR/VAT/ORG nummer er ugyldig.");
_toast.ShowError($"CVR/VAT/ORG nummer er ugyldig.");
StateHasChanged();
return;
}
@ -148,18 +156,18 @@ public partial class CompanyView : IDisposable
_company.UpdateErpVat = 1;
var x = JsonSerializer.Serialize(_company, _options);
Logger.LogInformation(x);
var success = await CompanyRepo.UpdateCompany(CompanyId, _company );
_loger.LogInformation(x);
var success = await _companyRepo.UpdateCompany(CompanyId, _company );
if (success)
{
ToastService.ShowSuccess("Check");
Navigation.NavigateTo($"/companies/{CompanyId}");
_toast.ShowSuccess("Check");
_navigator.NavigateTo($"/companies/{CompanyId}");
}
}
private async Task GetInfoFromAddress(VatAddress address)
{
_vInfos = await VatInfoLookupService.QueryVirkRegistry(
_vInfos = await _vatService.QueryVirkRegistry(
new VirkParams
{
StreetName = address.StreetName,
@ -168,7 +176,7 @@ public partial class CompanyView : IDisposable
});
if (!_vInfos.Any())
{
ToastService.ShowError($"Ingen virksomheder fundet.");
_toast.ShowError($"Ingen virksomheder fundet.");
}
}
private void SelectCompany(string vatNumber, bool syncAll)
@ -194,7 +202,7 @@ public partial class CompanyView : IDisposable
public void Dispose()
{
Interceptor.DisposeEvent();
_interceptor.DisposeEvent();
_editContext.OnFieldChanged -= HandleFieldChanged;
_editContext.OnValidationStateChanged -= ValidationChanged;
}

View file

@ -40,11 +40,11 @@
</div>
<div class="row">
<div class="col">
<PaginationComponent MetaData="MetaData" Spread="2" SelectedPage="SelectedPage"></PaginationComponent>
<PaginationComponent MetaData="_metaDate" Spread="2" SelectedPage="SelectedPage"></PaginationComponent>
</div>
</div>
<div class="row">
<div class="col">
<ItemTableComponent SalesItems="SalesItems"></ItemTableComponent>
<ItemTableComponent SalesItems="_items"></ItemTableComponent>
</div>
</div>

View file

@ -30,44 +30,44 @@ namespace Wonky.Client.Pages;
public partial class ItemCatalog : IDisposable
{
[Inject] public ILocalStorageService LocalStorage { get; set; }
[Inject] public ISalesItemHttpRepository SalesItemRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] private UserPreferenceService UserPreferenceService { get; set; }
private List<NgSalesItemView> SalesItems { get; set; } = new();
private MetaData? MetaData { get; set; } = new();
[Inject] private ILocalStorageService _storage { get; set; }
[Inject] private ISalesItemHttpRepository _itemRepo { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private UserPreferenceService _preferenceService { get; set; }
private List<NgSalesItemView> _items { get; set; } = new();
private MetaData? _metaDate { get; set; } = new();
private CatalogPagingParams _paging = new();
private Preferences _preferences = new();
protected override async Task OnInitializedAsync()
{
_preferences = await UserPreferenceService.GetPreferences();
_preferences = await _preferenceService.GetPreferences();
_paging.OrderBy = _preferences.ItemSort;
_paging.SearchColumn = _preferences.ItemSearch;
_paging.PageSize = Convert.ToInt32(_preferences.PageSize);
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
await GetSalesItems();
}
private async Task SelectedPage(int page)
{
SalesItems = new List<NgSalesItemView>();
_items = new List<NgSalesItemView>();
_paging.PageNumber = page;
await GetSalesItems();
}
private async Task GetSalesItems()
{
var pagingResponse = await SalesItemRepo.GetSalesItemsPaged(_paging);
SalesItems = pagingResponse.Items!;
MetaData = pagingResponse.MetaData;
var pagingResponse = await _itemRepo.GetSalesItemsPaged(_paging);
_items = pagingResponse.Items!;
_metaDate = pagingResponse.MetaData;
}
private async Task SetPageSize(string pageSize)
{
SalesItems = new List<NgSalesItemView>();
_items = new List<NgSalesItemView>();
_paging.PageSize = Convert.ToInt32(pageSize);
_paging.PageNumber = 1;
await GetSalesItems();
@ -75,21 +75,21 @@ public partial class ItemCatalog : IDisposable
private async Task SetItemGroup(string groupFilter)
{
SalesItems = new List<NgSalesItemView>();
_items = new List<NgSalesItemView>();
_paging.PageNumber = 1;
_paging.SelectGroup = groupFilter;
await GetSalesItems();
}
private async Task SetSearchCol(string columnName)
{
SalesItems = new List<NgSalesItemView>();
_items = new List<NgSalesItemView>();
_paging.PageNumber = 1;
_paging.SearchColumn = columnName;
await GetSalesItems();
}
private async Task SetSearchPhrase(string searchTerm)
{
SalesItems = new List<NgSalesItemView>();
_items = new List<NgSalesItemView>();
_paging.PageNumber = 1;
_paging.SearchTerm = searchTerm;
await GetSalesItems();
@ -97,11 +97,11 @@ public partial class ItemCatalog : IDisposable
private async Task SetSortCol(string orderBy)
{
SalesItems = new List<NgSalesItemView>();
_items = new List<NgSalesItemView>();
_paging.OrderBy = orderBy;
await GetSalesItems();
}
public void Dispose() => Interceptor.DisposeEvent();
public void Dispose() => _interceptor.DisposeEvent();
}

View file

@ -22,26 +22,26 @@
<div class="card">
<div class="card-header">
<h1>@Item.Name</h1>
<h1>@_item.Name</h1>
</div>
<div class="card-body">
<table class="table table-striped table-bordered">
<tbody>
<tr>
<th scope="row">Navn</th>
<td>@Item.Name</td>
<td>@_item.Name</td>
</tr>
<tr>
<th scope="row">Varenr</th>
<td>@Item.Sku</td>
<td>@_item.Sku</td>
</tr>
<tr>
<th scope="row"></th>
<td>@Item.ProductGroup</td>
<td>@_item.ProductGroup</td>
</tr>
<tr>
<th scope="row">Kort Navn</th>
<td>@Item.ShortName</td>
<td>@_item.ShortName</td>
</tr>
</tbody>
</table>
@ -52,7 +52,7 @@
</tr>
</thead>
<tbody>
@foreach (var rate in Item.Rates)
@foreach (var rate in _item.Rates)
{
<tr>
<th scope="row">@rate.Quantity</th>

View file

@ -25,22 +25,17 @@ namespace Wonky.Client.Pages;
public partial class ItemView : IDisposable
{
private NgSalesItemView Item { get; set; } = new ();
[Parameter] public string SalesItemId { get; set; } = "";
private NgSalesItemView _item { get; set; } = new ();
[Inject] private ISalesItemHttpRepository _itemRepo { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject]
public ISalesItemHttpRepository SalesItemRepo { get; set; }
[Inject]
public HttpInterceptorService Interceptor { get; set; }
[Parameter]
public string SalesItemId { get; set; } = "";
protected override async Task OnInitializedAsync()
{
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
Item = await SalesItemRepo.GetSalesItem(SalesItemId);
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
_item = await _itemRepo.GetSalesItem(SalesItemId);
}
/// <summary>
@ -48,6 +43,6 @@ public partial class ItemView : IDisposable
/// </summary>
public void Dispose()
{
Interceptor!.DisposeEvent();
_interceptor!.DisposeEvent();
}
}

View file

@ -0,0 +1,11 @@
@using Wonky.Client.Components
@page "/companies/{CompanyId}/h/p/{Sku}"
<div class="card">
<div class="card-header">
<h3>@_company.Name</h3>
</div>
<div class="card-body">
<ProductLineTableComponent ProductHistory="_lines"></ProductLineTableComponent>
</div>
</div>

View file

@ -0,0 +1,30 @@
using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpRepository;
using Wonky.Entity.DTO;
namespace Wonky.Client.Pages;
public partial class ProductHistoryItem : IDisposable
{
[Parameter] public string Sku { get; set; } = "";
[Parameter] public string CompanyId { get; set; } = "";
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private IHistoryHttpRepository _historyRepo { get; set; }
[Inject] private ICompanyHttpRepository _companyRepo { get; set; }
private List<ProductHistoryView> _lines { get; set; } = new();
private CompanyDto _company { get; set; } = new();
protected override async Task OnInitializedAsync()
{
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
_company = await _companyRepo.GetCompanyById(CompanyId);
_lines = await _historyRepo.FetchHistory(CompanyId, Sku);
}
public void Dispose()
{
_interceptor.DisposeEvent();
}
}

View file

@ -0,0 +1,11 @@
@using Wonky.Client.Components
@page "/companies/{CompanyId}/h/p"
<div class="card">
<div class="card-header">
<h3>@_company.Name</h3>
</div>
<div class="card-body">
<ProductLineTableComponent ProductHistory="_lines"></ProductLineTableComponent>
</div>
</div>

View file

@ -0,0 +1,29 @@
using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpRepository;
using Wonky.Entity.DTO;
namespace Wonky.Client.Pages;
public partial class ProductHistoryList : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private IHistoryHttpRepository _historyRepo { get; set; }
[Inject] private ICompanyHttpRepository _companyRepo { get; set; }
private List<ProductHistoryView> _lines { get; set; } = new();
private CompanyDto _company { get; set; } = new();
protected override async Task OnInitializedAsync()
{
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
_company = await _companyRepo.GetCompanyById(CompanyId);
_lines = await _historyRepo.FetchHistory(CompanyId);
}
public void Dispose()
{
_interceptor.DisposeEvent();
}
}

View file

@ -1 +1,13 @@
@page "/companies/{CompanyId}/products"
@using Wonky.Client.Components
@using Microsoft.AspNetCore.Authorization
@page "/companies/{CompanyId}/h/i"
@attribute [Authorize(Roles = "Adviser")]
<div class="card">
<div class="card-header">
<h3>@_company.Name</h3>
</div>
<div class="card-body">
<ProductInventoryTableComponent CompanyId="@CompanyId" Inventory="_inventory"></ProductInventoryTableComponent>
</div>
</div>

View file

@ -1,6 +1,32 @@
using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpRepository;
using Wonky.Entity.DTO;
namespace Wonky.Client.Pages;
public partial class ProductInventory
public partial class ProductInventory : IDisposable
{
[Parameter] public string CompanyId { get; set; } = "";
[Inject] private IHistoryHttpRepository _historyRepo { get; set; }
[Inject] private ICompanyHttpRepository _companyRepo { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; }
private CompanyDto _company { get; set; } = new();
private List<ProductInventoryView> _inventory { get; set; } = new();
protected override async Task OnInitializedAsync()
{
Console.WriteLine($"CompanyId => {CompanyId}");
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
_company = await _companyRepo.GetCompanyById(CompanyId);
_inventory = await _historyRepo.FetchInventory(CompanyId);
}
public void Dispose()
{
_interceptor.DisposeEvent();
}
}

View file

@ -30,11 +30,11 @@ namespace Wonky.Client.Pages;
public partial class ReportCreate : IDisposable
{
[Inject] private HttpInterceptorService Interceptor { get; set; }
[Inject] private UserPreferenceService UserPrefs { get; set; }
[Inject] private IActivityHttpRepository ActivityRepo { get; set; }
[Inject] private IReportHttpRepository ReportRepo { get; set; }
[Inject] private NavigationManager Navigator { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Inject] private UserPreferenceService _userPrefs { get; set; }
[Inject] private IActivityHttpRepository _activityRepo { get; set; }
[Inject] private IReportHttpRepository _reportRepo { get; set; }
[Inject] private NavigationManager _navigator { get; set; }
[Inject] private ILogger<ReportCreate> _logger { get; set; }
[Inject] private IToastService _toast { get; set; }
private EditContext _editContext { get; set; }
@ -53,13 +53,13 @@ public partial class ReportCreate : IDisposable
protected override async Task OnInitializedAsync()
{
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
_editContext = new EditContext(_report);
_editContext.OnFieldChanged += HandleFieldChanged;
_editContext.OnValidationStateChanged += ValidationChanged;
_prefs = await UserPrefs.GetPreferences();
_prefs = await _userPrefs.GetPreferences();
if (!string.IsNullOrWhiteSpace(_prefs.WorkDate))
_workDate = DateTime.Parse(_prefs.WorkDate);
_leaveBegin = _workDate;
@ -116,10 +116,10 @@ public partial class ReportCreate : IDisposable
_working = true;
var result = await ReportRepo.PostReport($"{_workDate:yyyy-MM-dd}", _report);
var result = await _reportRepo.PostReport($"{_workDate:yyyy-MM-dd}", _report);
_toast.ShowInfo($"Rapport oprettet {_workDate}");
Navigator.NavigateTo("/home");
_navigator.NavigateTo("/home");
}
private void OnTimeChanged()
@ -150,9 +150,9 @@ public partial class ReportCreate : IDisposable
private async Task GetKeyFigures()
{
_working = true;
var data = await ReportRepo.InitializeReportData($"{_workDate:yyyy-MM-dd}");
var data = await _reportRepo.InitializeReportData($"{_workDate:yyyy-MM-dd}");
if(data.Closed)
Navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}");
_navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}");
_noFigures = false;
_report.Figures = data.Figures;
_init = data.Figures;
@ -162,7 +162,7 @@ public partial class ReportCreate : IDisposable
public void Dispose()
{
Interceptor.DisposeEvent();
_interceptor.DisposeEvent();
_editContext.OnFieldChanged -= HandleFieldChanged;
_editContext.OnValidationStateChanged -= ValidationChanged;
}

View file

@ -7,8 +7,8 @@ namespace Wonky.Client.Pages;
public partial class ReportView
{
[Inject] private IReportHttpRepository ReportRepo { get; set; }
[Parameter] public string ReportDate { get; set; }
[Inject] private IReportHttpRepository _reportRepo { get; set; }
private NgSalesReportView _report { get; set; } = new();
protected override async Task OnInitializedAsync()
@ -22,6 +22,6 @@ public partial class ReportView
private async Task GetReport(string workDate)
{
_report = new NgSalesReportView();
_report = await ReportRepo.GetReport(workDate);
_report = await _reportRepo.GetReport(workDate);
}
}

View file

@ -8,21 +8,21 @@ namespace Wonky.Client.Pages;
public partial class SalesReportList : IDisposable
{
[Inject] public IReportHttpRepository ReportRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] private IReportHttpRepository _reportRepo { get; set; }
[Inject] private HttpInterceptorService _interceptor { get; set; }
private List<NgSalesReportListView> _reports { get; set; }
protected override async Task OnInitializedAsync()
{
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
_interceptor.RegisterEvent();
_interceptor.RegisterBeforeSendEvent();
_reports = await ReportRepo.GetReports();
_reports = await _reportRepo.GetReports();
}
public void Dispose()
{
Interceptor.DisposeEvent();
_interceptor.DisposeEvent();
}
}

View file

@ -8,7 +8,7 @@ using Wonky.Entity.Views;
namespace Wonky.Client.Pages;
public partial class TaskItemList
public partial class TaskItemList : IDisposable
{
[Inject] public UserPreferenceService UserPrefs { get; set; }
[Inject] public ILogger<Home> Logger { get; set; }
@ -36,5 +36,9 @@ public partial class TaskItemList
_toast.ShowInfo("Vent nogle sekunder for data");
_workDate = workDate;
}
public void Dispose()
{
_interceptor.DisposeEvent();
}
}

View file

@ -1,9 +1,11 @@
using Microsoft.AspNetCore.Components;
using Wonky.Client.HttpInterceptors;
namespace Wonky.Client.Pages;
public partial class TaskItemView
public partial class TaskItemView : IDisposable
{
[Inject] private HttpInterceptorService _interceptor { get; set; }
[Parameter] public string TaskItemId { get; set; }
@ -11,4 +13,10 @@ public partial class TaskItemView
{
return base.OnParametersSetAsync();
}
public void Dispose()
{
_interceptor.DisposeEvent();
}
}

View file

@ -53,6 +53,7 @@ builder.Services.AddScoped<ISalesItemHttpRepository, SalesItemHttpRepository>();
builder.Services.AddScoped<IActivityHttpRepository, ActivityHttpRepository>();
builder.Services.AddScoped<IReportHttpRepository, ReportHttpRepository>();
builder.Services.AddScoped<ITaskItemHttpRepository, TaskItemHttpRepository>();
builder.Services.AddScoped<IHistoryHttpRepository, HistoryHttpRepository>();
builder.Services.AddScoped<HttpInterceptorService>();
builder.Services.AddBlazoredLocalStorage();

View file

@ -18,7 +18,7 @@
},
"appInfo": {
"name": "Wonky Client",
"version": "0.8.21",
"version": "0.8.22",
"isBeta": true,
"image": "grumpy-coder.png"
},
@ -36,6 +36,8 @@
"activityEndpoint": "api/v2/crm/salesReps/sales",
"reportEndpoint": "api/v2/crm/salesReps/reports",
"taskItemEndpoint": "api/v2/crm/salesRps/tasks",
"historyEndpoint": "products"
"inventoryUri": "h/i",
"productUri": "h/p",
"updateUri": "h/u"
}
}

View file

@ -33,5 +33,7 @@ public class ApiConfig
public string ActivityEndpoint { get; set; } = "";
public string ReportEndpoint { get; set; } = "";
public string TaskItemEndpoint { get; set; } = "";
public string HistoryEndpoint { get; set; } = "";
public string InventoryUri { get; set; } = "";
public string ProductUri { get; set; } = "";
public string UpdateUri { get; set; } = "";
}

View file

@ -78,6 +78,7 @@ public class CompanyDto
public int ValidVat { get; set; }
public int UpdateErpVat { get; set; }
public string HistorySync { get; set; }
public virtual bool ValidDateSpan()
{

View file

@ -3,7 +3,7 @@ namespace Wonky.Entity.DTO;
public class ProductHistoryView
{
public string DeliverDate { get; set; } = "";
public string Name { get; set; } = "";
public string Description { get; set; } = "";
public string Sku { get; set; } = "";
public int Quantity { get; set; }
public decimal Price { get; set; }

View file

@ -1,8 +1,10 @@
using System.Text.Json.Serialization;
namespace Wonky.Entity.DTO;
public class ProductInventoryView
{
public string Name { get; set; } = "";
public string Description { get; set; } = "";
public string Sku { get; set; } = "";
public int Quantity { get; set; }
}