internal refactor - added catalog print page
This commit is contained in:
parent
2cc9d55220
commit
e7b91dec1f
113 changed files with 1013 additions and 672 deletions
|
@ -8,19 +8,19 @@
|
|||
|
||||
@code {
|
||||
|
||||
[Inject] public PreferenceService UserPrefService { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
private int KmMorning { get; set; }
|
||||
private Preferences Preferences { get; set; } = new();
|
||||
private UserPref Prefs { get; set; } = new();
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Preferences = await UserPrefService.GetPreferences();
|
||||
KmMorning = Preferences.KmMorning;
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
KmMorning = Prefs.KmMorning;
|
||||
}
|
||||
|
||||
private async Task OnKmChanged()
|
||||
{
|
||||
await UserPrefService.SetKmMorning(KmMorning);
|
||||
await PrefService.SetKmMorning(KmMorning);
|
||||
}
|
||||
|
||||
}
|
|
@ -16,7 +16,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
@if (Activities.Any())
|
||||
@if (ActivityList.Any())
|
||||
{
|
||||
<table class="table table-bordered d-print-table table-striped">
|
||||
<thead>
|
||||
|
@ -35,7 +35,7 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var activity in Activities)
|
||||
@foreach (var activity in ActivityList)
|
||||
{
|
||||
<tr>
|
||||
<td class="align-middle"><a class="btn btn-outline-info text-black d-block" href="/companies/@activity.Company.CompanyId/orders/@activity.ActivityId">@activity.Company.Name</a></td>
|
||||
|
@ -68,7 +68,7 @@
|
|||
<tr>
|
||||
<td colspan="5" class="bg-dark"></td>
|
||||
<td class="align-middle text-center">Total</td>
|
||||
<td class="align-middle text-end">@Activities.Where(x => x.StatusTypeEnum == "Order").Sum(x => x.OrderAmount)</td>
|
||||
<td class="align-middle text-end">@ActivityList.Where(x => x.StatusTypeEnum == "Order").Sum(x => x.OrderAmount)</td>
|
||||
<td colspan="4" class="bg-dark"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
|
@ -20,7 +20,7 @@ namespace Wonky.Client.Components;
|
|||
|
||||
public partial class AdvisorActivityTableComponent
|
||||
{
|
||||
[Parameter] public List<ReportItemView> Activities { get; set; }
|
||||
[Parameter] public List<ReportItemView> ActivityList { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
|
||||
// private void ShowOrder(string companyId, string orderId)
|
||||
|
|
|
@ -18,7 +18,9 @@
|
|||
@using Wonky.Client.Components;
|
||||
@using Wonky.Client.Helpers;
|
||||
|
||||
<table class="table table-striped">
|
||||
@if (CompanyList.Any())
|
||||
{
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">BS</th>
|
||||
|
@ -31,7 +33,7 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var company in Companies)
|
||||
@foreach (var company in CompanyList)
|
||||
{
|
||||
<tr @onclick="() => { ViewCustomer(company.CompanyId); }" style="cursor: pointer">
|
||||
<td class="state align-middle">
|
||||
|
@ -61,8 +63,11 @@
|
|||
</td>
|
||||
</tr>
|
||||
}
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<InformationModal BodyMessage="@_info"/>
|
||||
</table>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>Ingen data</div>
|
||||
}
|
||||
<InformationModal BodyMessage="@InfoMessage"/>
|
|
@ -29,32 +29,26 @@ namespace Wonky.Client.Components
|
|||
{
|
||||
public partial class AdvisorCompanyTableComponent
|
||||
{
|
||||
[Parameter] public List<CompanyDto> Companies { get; set; } = new();
|
||||
[Parameter] public List<CompanyDto> CompanyList { get; set; } = new();
|
||||
[Parameter] public EventCallback<string> OnDelete { get; set; }
|
||||
[Parameter] public EventCallback<string> OnSelect { get; set; }
|
||||
[Inject] public NavigationManager _navigator { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] public IJSRuntime Js { get; set; }
|
||||
|
||||
private Lazy<IJSObjectReference> BsTooltip = new();
|
||||
|
||||
private InformationModal InformationModal { get; set; } = new();
|
||||
private string _info { get; set; } = "";
|
||||
private string _companyId { get; set; } = "";
|
||||
// private string _actionUrl { get; set; } = "";
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await base.OnInitializedAsync();
|
||||
}
|
||||
private string InfoMessage { get; set; } = "";
|
||||
private string CompanyId { get; set; } = "";
|
||||
|
||||
private void ViewCustomer(string companyId)
|
||||
{
|
||||
_navigator.NavigateTo($"/companies/{companyId}");
|
||||
Navigator.NavigateTo($"/companies/{companyId}");
|
||||
}
|
||||
|
||||
private void CallInformationModal(string info)
|
||||
{
|
||||
_info = info;
|
||||
InfoMessage = info;
|
||||
InformationModal.Show();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
<select class="form-select" @bind-value="Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
|
||||
<select class="form-select bg-primary text-bg-primary" @bind-value="GroupCol" @bind-value:event="oninput" @onchange="OnSelectionChanged">
|
||||
<option value="-1" disabled>VARE GRUPPE</option>
|
||||
<option value="0" selected>Alle</option>
|
||||
<option value="1">Lim Sealer Reparation</option>
|
||||
|
|
|
@ -22,13 +22,13 @@ namespace Wonky.Client.Components;
|
|||
|
||||
public partial class CatalogGroupComponent
|
||||
{
|
||||
[Inject] public ILocalStorageService LocalStorage { get; set; }
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
[Parameter] public EventCallback<string> OnChanged { get; set; }
|
||||
private Dictionary<string, string> Items { get; set; } = new();
|
||||
private Preferences _preferences = new();
|
||||
private UserPref Prefs = new();
|
||||
|
||||
private string? Selection { get; set; }
|
||||
private string? GroupCol { get; set; }
|
||||
|
||||
private async Task OnSelectionChanged(ChangeEventArgs e)
|
||||
{
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
<select class="form-select" @bind-value="@_selectedItem" @bind-value:event="oninput" @onchange="OnSelectChanged">
|
||||
<select class="form-select bg-primary text-bg-primary" @bind-value="@SearchCol" @bind-value:event="oninput" @onchange="OnSelectChanged">
|
||||
<option value="-1" selected disabled>SØGNING</option>
|
||||
<option value="name">Navn</option>
|
||||
<option value="sku">Nummer</option>
|
||||
|
|
|
@ -24,7 +24,7 @@ public partial class CatalogSearchComponent : IDisposable
|
|||
/// <summary>
|
||||
/// User preference service
|
||||
/// </summary>
|
||||
[Inject] public PreferenceService _preferenceService { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// OnChanged event callback
|
||||
|
@ -34,22 +34,22 @@ public partial class CatalogSearchComponent : IDisposable
|
|||
/// <summary>
|
||||
/// User preferences
|
||||
/// </summary>
|
||||
private Preferences _preferences = new();
|
||||
private UserPref Prefs { get; set; } = new();
|
||||
|
||||
/// <summary>
|
||||
/// Selected item
|
||||
/// </summary>
|
||||
private string _selectedItem { get; set; } = "";
|
||||
private string SearchCol { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Component initialization
|
||||
/// </summary>
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_preferenceService.OnChange += ProfileServiceOnOnChange;
|
||||
_preferences = await _preferenceService.GetPreferences();
|
||||
_selectedItem = _preferences.ItemSearch;
|
||||
await OnChanged.InvokeAsync(_selectedItem);
|
||||
PrefService.OnChange += ProfileServiceOnOnChange;
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
SearchCol = Prefs.ItemSearch;
|
||||
await OnChanged.InvokeAsync(SearchCol);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -61,16 +61,16 @@ public partial class CatalogSearchComponent : IDisposable
|
|||
var val = e.Value.ToString();
|
||||
if (val == "-1") return;
|
||||
await OnChanged.InvokeAsync(val);
|
||||
await _preferenceService.SetItemSearch(val);
|
||||
await PrefService.SetItemSearch(val);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Preference update from profile service
|
||||
/// </summary>
|
||||
/// <param name="newPreferences"></param>
|
||||
private void ProfileServiceOnOnChange(Preferences newPreferences)
|
||||
/// <param name="newUserPref"></param>
|
||||
private void ProfileServiceOnOnChange(UserPref newUserPref)
|
||||
{
|
||||
_preferences = newPreferences;
|
||||
Prefs = newUserPref;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
|
@ -79,6 +79,6 @@ public partial class CatalogSearchComponent : IDisposable
|
|||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
_preferenceService.OnChange -= ProfileServiceOnOnChange;
|
||||
PrefService.OnChange -= ProfileServiceOnOnChange;
|
||||
}
|
||||
}
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
<div class="input-group">
|
||||
<input id="search-input" type="text" class="form-control" placeholder="Søg ..." aria-described-by="search-addon"
|
||||
@bind-value="@_searchTerm" @bind-value:event="oninput" @onkeyup="OnSearchChanged" />
|
||||
@bind-value="@SearchTerm" @bind-value:event="oninput" @onkeyup="OnSearchChanged" />
|
||||
<span class="input-group-text" id="search-addon"><i class="oi oi-delete" @onclick="ClearSearch"></i></span>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -21,31 +21,31 @@ namespace Wonky.Client.Components
|
|||
{
|
||||
public partial class CatalogSearchPhraseComponent
|
||||
{
|
||||
private Timer _timer { get; set; } = new();
|
||||
private string _searchTerm { get; set; } = "";
|
||||
private Timer Timer { get; set; } = new();
|
||||
private string SearchTerm { get; set; } = "";
|
||||
[Parameter] public EventCallback<string> OnChanged { get; set; }
|
||||
|
||||
private void ClearSearch()
|
||||
{
|
||||
_searchTerm = "";
|
||||
SearchTerm = "";
|
||||
OnChanged.InvokeAsync("");
|
||||
}
|
||||
|
||||
private void OnSearchChanged()
|
||||
{
|
||||
_timer.Dispose();
|
||||
_timer = new Timer(500);
|
||||
_timer.AutoReset = false;
|
||||
_timer.Elapsed += OnTimerElapsed;
|
||||
_timer.Enabled = true;
|
||||
Timer.Dispose();
|
||||
Timer = new Timer(500);
|
||||
Timer.AutoReset = false;
|
||||
Timer.Elapsed += OnTimerElapsed;
|
||||
Timer.Enabled = true;
|
||||
}
|
||||
|
||||
private void OnTimerElapsed(object? sender, ElapsedEventArgs e)
|
||||
{
|
||||
OnChanged.InvokeAsync(_searchTerm);
|
||||
_timer.Elapsed -= OnTimerElapsed;
|
||||
_timer.Enabled = false;
|
||||
_timer.Dispose();
|
||||
OnChanged.InvokeAsync(SearchTerm);
|
||||
Timer.Elapsed -= OnTimerElapsed;
|
||||
Timer.Enabled = false;
|
||||
Timer.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
<select class="form-select" @bind-value="@_selectedItem" @bind-value:event="oninput" @onchange="OnSelectChanged">
|
||||
<select class="form-select bg-primary text-bg-primary" @bind-value="@SortCol" @bind-value:event="oninput" @onchange="OnSelectChanged">
|
||||
<option value="-1" selected disabled>SORTERING</option>
|
||||
<option value="name">Navn</option>
|
||||
<option value="sku">Nummer</option>
|
||||
|
|
|
@ -24,7 +24,7 @@ public partial class CatalogSortComponent : IDisposable
|
|||
/// <summary>
|
||||
/// User preference service
|
||||
/// </summary>
|
||||
[Inject] public PreferenceService _preferenceService { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// OnChanged callback function
|
||||
|
@ -34,21 +34,21 @@ public partial class CatalogSortComponent : IDisposable
|
|||
/// <summary>
|
||||
/// User's preferences
|
||||
/// </summary>
|
||||
private Preferences _preferences = new();
|
||||
private UserPref Prefs = new();
|
||||
|
||||
/// <summary>
|
||||
/// Item selected by user
|
||||
/// </summary>
|
||||
private string? _selectedItem { get; set; }
|
||||
private string SortCol { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Component initialization
|
||||
/// </summary>
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_preferenceService.OnChange += ProfileServiceOnOnChange;
|
||||
_preferences = await _preferenceService.GetPreferences();
|
||||
_selectedItem = _preferences.ItemSort;
|
||||
PrefService.OnChange += ProfileServiceOnOnChange;
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
SortCol = Prefs.ItemSort;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -60,16 +60,16 @@ public partial class CatalogSortComponent : IDisposable
|
|||
var val = e.Value.ToString();
|
||||
if (val == "-1") return;
|
||||
await OnChanged.InvokeAsync(val);
|
||||
await _preferenceService.SetItemSort(val);
|
||||
await PrefService.SetItemSort(val);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get updated settings from preference service
|
||||
/// </summary>
|
||||
/// <param name="newPreferences"></param>
|
||||
private void ProfileServiceOnOnChange(Preferences newPreferences)
|
||||
/// <param name="newUserPref"></param>
|
||||
private void ProfileServiceOnOnChange(UserPref newUserPref)
|
||||
{
|
||||
_preferences = newPreferences;
|
||||
Prefs = newUserPref;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
|
@ -78,6 +78,6 @@ public partial class CatalogSortComponent : IDisposable
|
|||
/// </summary>
|
||||
public void Dispose()
|
||||
{
|
||||
_preferenceService.OnChange -= ProfileServiceOnOnChange;
|
||||
PrefService.OnChange -= ProfileServiceOnOnChange;
|
||||
}
|
||||
}
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
@if (SalesItems.Any())
|
||||
@if (ItemList.Any())
|
||||
{
|
||||
<table class="table table-hover table-striped justify-content-center">
|
||||
<thead>
|
||||
|
@ -27,7 +27,7 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var salesItem in SalesItems)
|
||||
@foreach (var salesItem in ItemList)
|
||||
{
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
|
@ -55,5 +55,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
<div>Ingen data</div>
|
||||
}
|
|
@ -23,7 +23,7 @@ namespace Wonky.Client.Components;
|
|||
|
||||
public partial class CatalogTableComponent
|
||||
{
|
||||
[Parameter] public List<SalesItemView> SalesItems { get; set; } = new();
|
||||
[Parameter] public List<SalesItemView> ItemList { get; set; } = new();
|
||||
[Inject] public IToastService ToastService { get; set; }
|
||||
private void AddToDraft()
|
||||
{
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
.product-img {
|
||||
width: 80px;
|
||||
}
|
79
Wonky.Client/Components/CatalogTablePrintComponent.razor
Normal file
79
Wonky.Client/Components/CatalogTablePrintComponent.razor
Normal file
|
@ -0,0 +1,79 @@
|
|||
@*
|
||||
// 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]
|
||||
//
|
||||
*@
|
||||
|
||||
@if (ItemList.Any())
|
||||
{
|
||||
<table class="table table-hover table-striped justify-content-center">
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="4">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<h2>Innotec Prisliste</h2>
|
||||
</div>
|
||||
<div class="col-sm-2 text-end">
|
||||
<button type="button" class="d-print-none btn btn-primary mx-3" onclick="window.print();"><i class="bi-printer"></i> Udskriv</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</th>
|
||||
</tr>
|
||||
<tr class="bg-black text-white opacity-75">
|
||||
<th scope="col">Navn</th>
|
||||
<th scope="col">Fork</th>
|
||||
<th scope="col" class="text-nowrap">Varenr</th>
|
||||
<th scope="col">Stk / Pris</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var salesItem in ItemList)
|
||||
{
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
@salesItem.Name
|
||||
</td>
|
||||
<td class="align-middle">@salesItem.ShortName</td>
|
||||
<td class="align-middle">
|
||||
@salesItem.Sku
|
||||
</td>
|
||||
<td class="align-middle">
|
||||
<ul class="list-group">
|
||||
@foreach (var rate in salesItem.Rates)
|
||||
{
|
||||
<li class="list-group-item d-flex justify-content-between align-items-end">
|
||||
<div class="pe-2">@rate.Quantity</div>
|
||||
<div class="text-end pe-2">@rate.Rate</div>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="4" class="text-end bg-dark text-white">
|
||||
@DateTime.Now.ToShortDateString() - @DateTime.Now.ToShortTimeString()
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>Ingen data</div>
|
||||
}
|
27
Wonky.Client/Components/CatalogTablePrintComponent.razor.cs
Normal file
27
Wonky.Client/Components/CatalogTablePrintComponent.razor.cs
Normal file
|
@ -0,0 +1,27 @@
|
|||
// 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 Blazored.Toast.Services;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Wonky.Entity.DTO;
|
||||
using Wonky.Entity.Models;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.Components;
|
||||
|
||||
public partial class CatalogTablePrintComponent
|
||||
{
|
||||
[Parameter] public List<SalesItemView> ItemList { get; set; } = new();
|
||||
}
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
<select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
|
||||
<select class="form-select bg-primary text-bg-primary" @bind-value="@SearchCol" @bind-value:event="oninput" @onchange="OnSelectionChanged">
|
||||
<option value="-1" disabled>SØGNING</option>
|
||||
<option value="name">Navn</option>
|
||||
<option value="city">By</option>
|
||||
|
|
|
@ -24,32 +24,32 @@ namespace Wonky.Client.Components;
|
|||
|
||||
public partial class CompanySearchColumnComponent : IDisposable
|
||||
{
|
||||
[Inject] public ILocalStorageService LocalStorage { get; set; }
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
[Parameter] public EventCallback<string> OnChanged { get; set; }
|
||||
private Dictionary<string, string> Items { get; set; } = new();
|
||||
private Preferences _preferences = new();
|
||||
private string Selection { get; set; } = "name";
|
||||
private UserPref Prefs { get; set; } = new();
|
||||
private string SearchCol { get; set; } = "name";
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
PreferenceService.OnChange += ProfileServiceOnOnChange;
|
||||
_preferences = await PreferenceService.GetPreferences();
|
||||
Selection = _preferences.CompanySearch;
|
||||
PrefService.OnChange += ProfileServiceOnOnChange;
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
SearchCol = Prefs.CompanySearch;
|
||||
}
|
||||
private async Task OnSelectionChanged(ChangeEventArgs e)
|
||||
{
|
||||
var val = e.Value.ToString();
|
||||
if (val == "-1") return;
|
||||
await OnChanged.InvokeAsync(val);
|
||||
await PreferenceService.SetCompanySearch(val);
|
||||
await PrefService.SetCompanySearch(val);
|
||||
}
|
||||
private void ProfileServiceOnOnChange(Preferences newPreferences)
|
||||
private void ProfileServiceOnOnChange(UserPref newUserPref)
|
||||
{
|
||||
_preferences = newPreferences;
|
||||
Prefs = newUserPref;
|
||||
StateHasChanged();
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
PreferenceService.OnChange -= ProfileServiceOnOnChange;
|
||||
PrefService.OnChange -= ProfileServiceOnOnChange;
|
||||
}
|
||||
}
|
|
@ -24,14 +24,14 @@ namespace Wonky.Client.Components
|
|||
{
|
||||
private Timer InputTimer { get; set; } = new();
|
||||
private string SearchTerm { get; set; } = "";
|
||||
private Preferences Preferences { get; set; } = new ();
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
private UserPref Prefs { get; set; } = new ();
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
[Parameter] public EventCallback<string> OnChanged { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Preferences = await PreferenceService.GetPreferences();
|
||||
SearchTerm = string.IsNullOrWhiteSpace(Preferences.CompanyFilterPhrase) ? "" : Preferences.CompanyFilterPhrase.Trim();
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
SearchTerm = string.IsNullOrWhiteSpace(Prefs.CompanyFilterPhrase) ? "" : Prefs.CompanyFilterPhrase.Trim();
|
||||
|
||||
if(!string.IsNullOrWhiteSpace(SearchTerm))
|
||||
await OnChanged.InvokeAsync(SearchTerm);
|
||||
|
@ -41,13 +41,13 @@ namespace Wonky.Client.Components
|
|||
{
|
||||
InputTimer.Dispose();
|
||||
SearchTerm = "";
|
||||
await PreferenceService.SetCompanyFilterPhrase(SearchTerm.Trim());
|
||||
await PrefService.SetCompanyFilterPhrase(SearchTerm.Trim());
|
||||
await OnChanged.InvokeAsync(SearchTerm);
|
||||
}
|
||||
|
||||
private async Task OnSearchChanged()
|
||||
{
|
||||
await PreferenceService.SetCompanyFilterPhrase(SearchTerm.Trim());
|
||||
await PrefService.SetCompanyFilterPhrase(SearchTerm.Trim());
|
||||
InputTimer.Dispose();
|
||||
InputTimer = new Timer(500);
|
||||
InputTimer.AutoReset = false;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
<select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
|
||||
<select class="form-select bg-primary text-bg-primary" @bind-value="@SortCol" @bind-value:event="oninput" @onchange="OnSelectionChanged">
|
||||
<option value="-1" selected disabled>SORTERING</option>
|
||||
<option value="name">Navn</option>
|
||||
<option value="city">By</option>
|
||||
|
|
|
@ -23,33 +23,33 @@ namespace Wonky.Client.Components
|
|||
{
|
||||
public partial class CompanySortComponent : IDisposable
|
||||
{
|
||||
[Inject] public ILocalStorageService LocalStorage { get; set; }
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
[Parameter] public EventCallback<string> OnChanged { get; set; }
|
||||
private Dictionary<string, string> Items { get; set; } = new();
|
||||
private Preferences _preferences = new();
|
||||
private string Selection { get; set; } = "name";
|
||||
private UserPref Prefs = new();
|
||||
private string SortCol { get; set; } = "name";
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
PreferenceService.OnChange += ProfileServiceOnOnChange;
|
||||
_preferences = await PreferenceService.GetPreferences();
|
||||
Selection = _preferences.CompanySort;
|
||||
PrefService.OnChange += ProfileServiceOnOnChange;
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
SortCol = Prefs.CompanySort;
|
||||
}
|
||||
private async Task OnSelectionChanged(ChangeEventArgs e)
|
||||
{
|
||||
var val = e.Value.ToString();
|
||||
if (val == "-1") return;
|
||||
await OnChanged.InvokeAsync(val);
|
||||
await PreferenceService.SetCompanySort(val);
|
||||
await PrefService.SetCompanySort(val);
|
||||
}
|
||||
private void ProfileServiceOnOnChange(Preferences newPreferences)
|
||||
private void ProfileServiceOnOnChange(UserPref newUserPref)
|
||||
{
|
||||
_preferences = newPreferences;
|
||||
Prefs = newUserPref;
|
||||
StateHasChanged();
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
PreferenceService.OnChange -= ProfileServiceOnOnChange;
|
||||
PrefService.OnChange -= ProfileServiceOnOnChange;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,6 +47,6 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<span>Ingen data</span>
|
||||
<div>Ingen data</div>
|
||||
}
|
||||
<InvoiceViewModal CompanyId="@CompanyId" InvoiceId="@InvoiceId" @ref="InvoiceView" />
|
|
@ -32,12 +32,12 @@ using Wonky.Entity.Views;
|
|||
namespace Wonky.Client.Components;
|
||||
public partial class LandingComponentAdmin : IDisposable
|
||||
{
|
||||
[Inject] public PreferenceService _preferenceService { get; set; }
|
||||
[Inject] public ILogger<LandingComponentAdmin> _logger { get; set; }
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] public IToastService _toast { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
[Inject] public ILogger<LandingComponentAdmin> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IToastService Toaster { get; set; }
|
||||
[Inject] public ICrmTaskItemHttpRepository CrmTaskItemRepo { get; set; }
|
||||
[Inject] public NavigationManager _navigator { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
|
||||
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
|
||||
{
|
||||
|
@ -45,24 +45,24 @@ public partial class LandingComponentAdmin : IDisposable
|
|||
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
|
||||
};
|
||||
|
||||
private Preferences _prefs { get; set; } = new();
|
||||
private string _workDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
||||
private string _today { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
||||
private UserPref Prefs { get; set; } = new();
|
||||
private string WordDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
||||
private string Today { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
||||
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_prefs = await _preferenceService.GetPreferences();
|
||||
if(!string.IsNullOrWhiteSpace(_prefs.WorkDate))
|
||||
_workDate = _prefs.WorkDate;
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
if(!string.IsNullOrWhiteSpace(Prefs.WorkDate))
|
||||
WordDate = Prefs.WorkDate;
|
||||
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_interceptor.DisposeEvent();
|
||||
Interceptor.DisposeEvent();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,6 @@
|
|||
<div class="bg-dark text-white rounded-2 mb-2 py-2">
|
||||
<WorkDateComponent OnChangedCallback="GetWorkdayTasks"/>
|
||||
</div>
|
||||
<TaskItemTableComponent TaskItemList="_taskItems" OnCompleteTask="OnCompleteTask"
|
||||
<TaskItemTableComponent TaskItemList="TaskItems" OnCompleteTask="OnCompleteTask"
|
||||
OnDeleteTask="OnDeleteConfirmed" OnTaskCompleted="OnTaskCompleted"/>
|
||||
</AuthorizeView>
|
|
@ -32,30 +32,30 @@ using Wonky.Entity.Views;
|
|||
namespace Wonky.Client.Components;
|
||||
public partial class LandingComponentAdvisor : IDisposable
|
||||
{
|
||||
[Inject] public PreferenceService _preferenceService { get; set; }
|
||||
[Inject] public ILogger<LandingComponentAdvisor> _logger { get; set; }
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] public IToastService _toast { get; set; }
|
||||
[Inject] public ICrmTaskItemHttpRepository CrmTaskItemRepo { get; set; }
|
||||
[Inject] public NavigationManager _navigator { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
[Inject] public ILogger<LandingComponentAdvisor> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Inteceptor { get; set; }
|
||||
[Inject] public IToastService Toaster { get; set; }
|
||||
[Inject] public ICrmTaskItemHttpRepository TaskItemRepo { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
|
||||
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
|
||||
private readonly JsonSerializerOptions JsonOptions = new JsonSerializerOptions
|
||||
{
|
||||
PropertyNameCaseInsensitive = true,
|
||||
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
|
||||
};
|
||||
|
||||
private Preferences _prefs { get; set; } = new();
|
||||
private UserPref Prefs { get; set; } = new();
|
||||
private DateTime SelectedDate { get; set; }
|
||||
private List<TaskItemDto>? _taskItems { get; set; } = new();
|
||||
private List<TaskItemDto> TaskItems { get; set; } = new();
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_prefs = await _preferenceService.GetPreferences();
|
||||
SelectedDate = string.IsNullOrWhiteSpace(_prefs.WorkDate) ? DateTime.Now : DateTime.Parse(_prefs.WorkDate);
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
SelectedDate = string.IsNullOrWhiteSpace(Prefs.WorkDate) ? DateTime.Now : DateTime.Parse(Prefs.WorkDate);
|
||||
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
Inteceptor.RegisterEvent();
|
||||
Inteceptor.RegisterBeforeSendEvent();
|
||||
|
||||
//await GetTaskItems(_workDate);
|
||||
await GetAllTasks();
|
||||
|
@ -63,43 +63,43 @@ public partial class LandingComponentAdvisor : IDisposable
|
|||
|
||||
private async Task GetAllTasks()
|
||||
{
|
||||
_taskItems = await CrmTaskItemRepo.GetTaskList();
|
||||
TaskItems = await TaskItemRepo.GetTaskList();
|
||||
}
|
||||
|
||||
private async Task OnCompleteTask(string taskItemId)
|
||||
{
|
||||
await _preferenceService.SetWorkDate(DateTime.Now);
|
||||
var item = _taskItems.Find(x => x.TaskItemId == taskItemId);
|
||||
_navigator.NavigateTo($"/companies/{item.ReferenceId}/activities/new");
|
||||
await PrefService.SetWorkDate(DateTime.Now);
|
||||
var item = TaskItems.Find(x => x.TaskItemId == taskItemId);
|
||||
Navigator.NavigateTo($"/companies/{item.ReferenceId}/activities/new");
|
||||
}
|
||||
|
||||
private async Task GetWorkdayTasks(string workDate)
|
||||
{
|
||||
SelectedDate = DateTime.Parse(workDate);
|
||||
_taskItems = new List<TaskItemDto>();
|
||||
_taskItems = await CrmTaskItemRepo.GetTaskList($"{SelectedDate:yyyy-MM-dd}");
|
||||
TaskItems = new List<TaskItemDto>();
|
||||
TaskItems = await TaskItemRepo.GetTaskList($"{SelectedDate:yyyy-MM-dd}");
|
||||
}
|
||||
|
||||
private async Task OnTaskCompleted(string taskItemId)
|
||||
{
|
||||
var item = _taskItems.Find(x => x.TaskItemId == taskItemId);
|
||||
var item = TaskItems.Find(x => x.TaskItemId == taskItemId);
|
||||
item.IsCompleted = true;
|
||||
await CrmTaskItemRepo.UpdateTaskItem(taskItemId, item);
|
||||
_taskItems.Remove(item);
|
||||
_toast.ShowInfo("Opgaven er markeret som udført.");
|
||||
await TaskItemRepo.UpdateTaskItem(taskItemId, item);
|
||||
TaskItems.Remove(item);
|
||||
Toaster.ShowInfo("Opgaven er markeret som udført.");
|
||||
}
|
||||
|
||||
private async Task OnDeleteConfirmed(string taskItemId)
|
||||
{
|
||||
var item = _taskItems.First(x => x.TaskItemId == taskItemId);
|
||||
_taskItems.Remove(item);
|
||||
await CrmTaskItemRepo.DeleteTaskItem(taskItemId);
|
||||
_toast.ShowInfo("Opgaven er slettet.");
|
||||
var item = TaskItems.First(x => x.TaskItemId == taskItemId);
|
||||
TaskItems.Remove(item);
|
||||
await TaskItemRepo.DeleteTaskItem(taskItemId);
|
||||
Toaster.ShowInfo("Opgaven er slettet.");
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_interceptor.DisposeEvent();
|
||||
Inteceptor.DisposeEvent();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
namespace Wonky.Client.Components;
|
||||
|
||||
public partial class LoaderThreeDots
|
||||
{
|
||||
private bool ShowMe { get; set; } = true;
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await Task.Delay(15000);
|
||||
ShowMe = false;
|
||||
}
|
||||
}
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
@if (Activities.Any())
|
||||
@if (ActivityList.Any())
|
||||
{
|
||||
<table class="table table-bordered d-print-table table-striped">
|
||||
<thead>
|
||||
|
@ -34,7 +34,7 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var activity in Activities)
|
||||
@foreach (var activity in ActivityList)
|
||||
{
|
||||
<tr class="border-bottom">
|
||||
<td class="align-middle"><a href="/office/customers/@activity.Company.CompanyId/orders/@activity.ActivityId">@activity.Company.Name</a></td>
|
||||
|
@ -67,3 +67,7 @@
|
|||
</tbody>
|
||||
</table>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>Ingen data</div>
|
||||
}
|
|
@ -20,8 +20,8 @@ namespace Wonky.Client.Components;
|
|||
|
||||
public partial class OfficeActivityTableComponent
|
||||
{
|
||||
[Parameter] public List<ReportItemView> Activities { get; set; }
|
||||
[Inject] public NavigationManager _navigator { get; set; }
|
||||
[Parameter] public List<ReportItemView> ActivityList { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
|
||||
private static string GetProcessStatus(string processStatus)
|
||||
{
|
||||
|
@ -38,6 +38,6 @@ public partial class OfficeActivityTableComponent
|
|||
|
||||
private void ShowOrder(string companyId, string orderId)
|
||||
{
|
||||
_navigator.NavigateTo($"office/customers/{companyId}/orders/{orderId}");
|
||||
Navigator.NavigateTo($"office/customers/{companyId}/orders/{orderId}");
|
||||
}
|
||||
}
|
|
@ -54,5 +54,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
<div>Ingen data</div>
|
||||
}
|
|
@ -18,7 +18,7 @@
|
|||
@using Wonky.Client.Components;
|
||||
@using Wonky.Client.Helpers;
|
||||
|
||||
@if (Companies.Any())
|
||||
@if (CompanyList.Any())
|
||||
{
|
||||
<div class="list-group list-group-flush">
|
||||
<div class="list-group-item px-3 bg-black text-white opacity-75">
|
||||
|
@ -40,7 +40,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@foreach (var company in Companies)
|
||||
@foreach (var company in CompanyList)
|
||||
{
|
||||
<a class=" list-group-item list-group-item-action" href="/office/customers/@company.CompanyId/orders/new">
|
||||
<div class="row align-items-center">
|
||||
|
@ -59,14 +59,6 @@
|
|||
<div class="col">
|
||||
@company.CountryCode.ToUpper()-@company.ZipCode @company.City
|
||||
</div>
|
||||
@* <div class="col justify-content-end"> *@
|
||||
@* <ActivityButton CompanyId="@company.CompanyId" *@
|
||||
@* ActionLink="/office/customers/$ID$/orders/new" *@
|
||||
@* ButtonText="Telefon Ordre" *@
|
||||
@* ButtonType="primary" *@
|
||||
@* Enabled=1> *@
|
||||
@* </ActivityButton> *@
|
||||
@* </div> *@
|
||||
</div>
|
||||
</a>
|
||||
}
|
||||
|
@ -74,5 +66,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
<div>Ingen data</div>
|
||||
}
|
|
@ -26,17 +26,7 @@ namespace Wonky.Client.Components
|
|||
{
|
||||
public partial class OfficeCustomerTableComponent
|
||||
{
|
||||
[Parameter] public List<CompanyDto> Companies { get; set; } = new();
|
||||
// [Parameter] public EventCallback<string> OnDelete { get; set; }
|
||||
// [Parameter] public EventCallback<string> OnSelect { get; set; }
|
||||
//
|
||||
// private Confirmation _confirmation = new ();
|
||||
// private string _companyId = "";
|
||||
// private string _actionUrl = "";
|
||||
//
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await base.OnInitializedAsync();
|
||||
}
|
||||
[Parameter] public List<CompanyDto> CompanyList { get; set; } = new();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
@using System.Globalization
|
||||
|
||||
@if (ReportList != null)
|
||||
@if (ReportList.Any())
|
||||
{
|
||||
<div class="list-group list-group-flush">
|
||||
<div class="list-group-item px-3 bg-black text-white opacity-75">
|
||||
|
@ -87,5 +87,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
<div>Ingen data</div>
|
||||
}
|
|
@ -51,5 +51,5 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
<div>Ingen data</div>
|
||||
}
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
<select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectChanged">
|
||||
<select class="form-select bg-primary text-bg-primary" @bind-value="@PageSize" @bind-value:event="oninput" @onchange="OnSelectChanged">
|
||||
<option value="-1" selected disabled>RESULTATER</option>
|
||||
<option value="5">5</option>
|
||||
<option value="10">10</option>
|
||||
|
|
|
@ -23,33 +23,33 @@ namespace Wonky.Client.Components
|
|||
{
|
||||
public partial class PageSizeComponent : IDisposable
|
||||
{
|
||||
[Inject] public ILocalStorageService LocalStorage { get; set; }
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
[Parameter] public EventCallback<string> OnChanged { get; set; }
|
||||
private Dictionary<string, string> Items { get; set; } = new();
|
||||
private Preferences _preferences = new();
|
||||
private string Selection { get; set; } = "";
|
||||
private UserPref Prefs = new();
|
||||
private string PageSize { get; set; } = "";
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
PreferenceService.OnChange += ProfileServiceOnOnChange;
|
||||
_preferences = await PreferenceService.GetPreferences();
|
||||
Selection = _preferences.PageSize;
|
||||
PrefService.OnChange += ProfileServiceOnOnChange;
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
PageSize = Prefs.PageSize;
|
||||
}
|
||||
private async Task OnSelectChanged(ChangeEventArgs e)
|
||||
{
|
||||
var val = e.Value.ToString();
|
||||
if (val == "-1") return;
|
||||
await OnChanged.InvokeAsync(val);
|
||||
await PreferenceService.SetPageSize(val);
|
||||
await PrefService.SetPageSize(val);
|
||||
}
|
||||
private void ProfileServiceOnOnChange(Preferences newPreferences)
|
||||
private void ProfileServiceOnOnChange(UserPref newUserPref)
|
||||
{
|
||||
_preferences = newPreferences;
|
||||
Prefs = newUserPref;
|
||||
StateHasChanged();
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
PreferenceService.OnChange -= ProfileServiceOnOnChange;
|
||||
PrefService.OnChange -= ProfileServiceOnOnChange;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
<div arial-label="Pager">
|
||||
<ul class="pagination justify-content-center">
|
||||
@foreach (var link in _links)
|
||||
@foreach (var link in Links)
|
||||
{
|
||||
<li @onclick="() => OnSelectedPage(link)" style="cursor: pointer"
|
||||
class="page-item @(link.Enabled ? null : "disabled")
|
||||
|
|
|
@ -26,8 +26,7 @@ namespace Wonky.Client.Components
|
|||
[Parameter] public MetaData MetaData { get; set; } = new();
|
||||
[Parameter] public int Spread { get; set; }
|
||||
[Parameter] public EventCallback<int> SelectedPage { get; set; }
|
||||
|
||||
private List<PagingLink> _links { get; set; } = new();
|
||||
private List<PagingLink> Links { get; set; } = new();
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
|
@ -36,7 +35,7 @@ namespace Wonky.Client.Components
|
|||
|
||||
private void CreatePaginationLinks()
|
||||
{
|
||||
_links = new List<PagingLink>
|
||||
Links = new List<PagingLink>
|
||||
{
|
||||
new(MetaData.CurrentPage - 1, MetaData.HasPrevious, "Forrige")
|
||||
};
|
||||
|
@ -45,11 +44,11 @@ namespace Wonky.Client.Components
|
|||
{
|
||||
if (i >= MetaData.CurrentPage - Spread && i <= MetaData.CurrentPage + Spread)
|
||||
{
|
||||
_links.Add(new PagingLink(i, true, i.ToString()) {Active = MetaData.CurrentPage == i});
|
||||
Links.Add(new PagingLink(i, true, i.ToString()) {Active = MetaData.CurrentPage == i});
|
||||
}
|
||||
}
|
||||
|
||||
_links.Add(new PagingLink(MetaData.CurrentPage + 1, MetaData.HasNext, "Næste"));
|
||||
Links.Add(new PagingLink(MetaData.CurrentPage + 1, MetaData.HasNext, "Næste"));
|
||||
}
|
||||
|
||||
private async Task OnSelectedPage(PagingLink link)
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
*@
|
||||
|
||||
@if (Inventory.Any())
|
||||
@if (ProductList.Any())
|
||||
{
|
||||
@*
|
||||
<div class="list-group">
|
||||
|
@ -40,7 +40,7 @@
|
|||
*@
|
||||
<table class="table table-striped table-borderless">
|
||||
<tbody>
|
||||
@foreach (var product in Inventory)
|
||||
@foreach (var product in ProductList)
|
||||
{
|
||||
<tr style="cursor: pointer" @onclick="() => CallShowReorderModal(product.Sku)">
|
||||
<td class="align-middle">
|
||||
|
@ -59,6 +59,9 @@
|
|||
}
|
||||
</tbody>
|
||||
</table>
|
||||
<InventoryReorderModal OnSelected="@OnSelectedItem" CompanyId="@CompanyId" SalesItem="@SalesItem" @ref="ReorderModal"/>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>Ingen data</div>
|
||||
}
|
||||
|
||||
<InventoryReorderModal OnSelected="@OnSelectedItem" CompanyId="@CompanyId" SalesItem="@SalesItem" @ref="ReorderModal"/>
|
|
@ -26,7 +26,7 @@ namespace Wonky.Client.Components;
|
|||
public partial class ProductInventoryTableComponent
|
||||
{
|
||||
[CascadingParameter] DraftStateProvider DraftStateProvider { get; set; }
|
||||
[Parameter] public List<ProductInventoryView> Inventory { get; set; } = new();
|
||||
[Parameter] public List<ProductInventoryView> ProductList { get; set; } = new();
|
||||
[Parameter] public string CompanyId { get; set; } = "";
|
||||
[Inject] public ICatalogHttpRepository Catalog { get; set; }
|
||||
// private variables
|
||||
|
|
|
@ -67,3 +67,7 @@
|
|||
</tbody>
|
||||
</table>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>Ingen data</div>
|
||||
}
|
|
@ -84,6 +84,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
<LoaderThreeDots/>
|
||||
<div>Ingen data</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
|
|
|
@ -18,35 +18,34 @@
|
|||
<div class="row mb-3">
|
||||
<div class="col-md-4">
|
||||
<div class="btn-group" role="group" aria-label="Ordre status">
|
||||
<input type="radio" class="btn-check" name="btn-order" id="btn-order1" autocomplete="off" checked @onchange="@GetOrderStatusNone" />
|
||||
<input type="radio" class="btn-check" name="btn-order" id="btn-order1" autocomplete="off" checked @onchange="@GetOrderStatusNone"/>
|
||||
<label class="btn btn-outline-success" for="btn-order1">Ubehandlet</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="btn-order" id="btn-order2" autocomplete="off" @onchange="@GetOrderStatusPicked"/>
|
||||
<label class="btn btn-outline-warning" for="btn-order2">Plukket</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="btn-order" id="btn-order3" autocomplete="off" @onchange="@GetOrderStatusPacked" />
|
||||
<input type="radio" class="btn-check" name="btn-order" id="btn-order3" autocomplete="off" @onchange="@GetOrderStatusPacked"/>
|
||||
<label class="btn btn-outline-danger" for="btn-order3">Pakket</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="btn-order" id="btn-order4" autocomplete="off" @onchange="@GetOrderStatusShipped" />
|
||||
<input type="radio" class="btn-check" name="btn-order" id="btn-order4" autocomplete="off" @onchange="@GetOrderStatusShipped"/>
|
||||
<label class="btn btn-outline-info" for="btn-order4">Afsendt</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-4 text-end">
|
||||
<label class="btn btn-outline-dark position-relative">@_header
|
||||
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">@_orders.Count</span>
|
||||
<label class="btn btn-outline-dark position-relative">
|
||||
@Header
|
||||
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">@OrderList.Count</span>
|
||||
<span class="visually-hidden">ordrer i listen</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="col-md-4 text-end">
|
||||
@if (_readyToShip && _orders.Any())
|
||||
@if (ReadyToShip && OrderList.Any())
|
||||
{
|
||||
<button type="button" class="btn btn-primary text-sm-center" @onclick="SetAllPackedStatusToShipped">Sæt alle afsendt</button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@if (_orders.Any())
|
||||
{
|
||||
<div class="list-group list-group-flush">
|
||||
<div class="list-group list-group-flush">
|
||||
<div class="list-group-item">
|
||||
<div class="row mb-1">
|
||||
<div class="col-md-2">
|
||||
|
@ -59,14 +58,18 @@
|
|||
<h4>Postnr. Bynavn</h4>
|
||||
</div>
|
||||
<div class="col-md-1 text-center">
|
||||
<h4><i class="oi oi-flash"></i></h4>
|
||||
<h4>
|
||||
<i class="oi oi-flash"></i>
|
||||
</h4>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<h4>Status</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@foreach (var order in _orders)
|
||||
@if (OrderList.Any())
|
||||
{
|
||||
@foreach (var order in OrderList)
|
||||
{
|
||||
<a class="list-group-item list-group-item-action" href="warehouse/orders/process/@order.OrderId">
|
||||
<div class="row">
|
||||
|
@ -105,9 +108,11 @@
|
|||
</div>
|
||||
</a>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>
|
||||
Flot klaret - bordet er ryddet
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
}
|
||||
}
|
||||
</div>
|
|
@ -27,38 +27,38 @@ namespace Wonky.Client.Components;
|
|||
public partial class WarehouseListComponent
|
||||
{
|
||||
[Parameter] public string Status { get; set; } = "none";
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] public IWarehouseHttpRepository _warehouseRepo { get; set; }
|
||||
[Inject] public IToastService _toast { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IWarehouseHttpRepository WarehouseRepo { get; set; }
|
||||
[Inject] public IToastService Toaster { get; set; }
|
||||
|
||||
private string _items { get; set; }
|
||||
private bool _readyToShip;
|
||||
private string _header = "Ubehandlet";
|
||||
private string ItemList { get; set; } = "";
|
||||
private bool ReadyToShip;
|
||||
private string Header = "Ubehandlet";
|
||||
|
||||
private List<WarehouseOrderView> _orders { get; set; }
|
||||
private bool Loading { get; set; }
|
||||
private List<WarehouseOrderView> OrderList { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
switch (Status.ToLower())
|
||||
{
|
||||
case "none":
|
||||
_header = "Ubehandlede ordrer";
|
||||
Header = "Ubehandlede ordrer";
|
||||
await GetOrderStatusNone();
|
||||
break;
|
||||
case "picked":
|
||||
_header = "Plukkede ordrer";
|
||||
Header = "Plukkede ordrer";
|
||||
await GetOrderStatusPicked();
|
||||
break;
|
||||
case "packed":
|
||||
_header = "Pakkede ordrer";
|
||||
Header = "Pakkede ordrer";
|
||||
await GetOrderStatusPacked();
|
||||
break;
|
||||
case "shipped":
|
||||
_header = "Afsendte ordrer";
|
||||
Header = "Afsendte ordrer";
|
||||
await GetOrderStatusShipped();
|
||||
break;
|
||||
default:
|
||||
|
@ -69,56 +69,61 @@ public partial class WarehouseListComponent
|
|||
|
||||
private async Task GetOrderStatusNone()
|
||||
{
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_header = "Ubehandlede ordrer";
|
||||
_readyToShip = false;
|
||||
Loading = true;
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_orders = await _warehouseRepo.GetWarehouseOrderListByStatus("none");
|
||||
if(_orders.Any(x => x.Express))
|
||||
_orders = _orders.OrderByDescending(x => x.Express).ToList();
|
||||
Loading = false;
|
||||
Working = true;
|
||||
OrderList = new List<WarehouseOrderView>();
|
||||
Header = "Ubehandlede ordrer";
|
||||
ReadyToShip = false;
|
||||
Working = true;
|
||||
OrderList = new List<WarehouseOrderView>();
|
||||
OrderList = await WarehouseRepo.GetWarehouseOrderListByStatus("none");
|
||||
if(OrderList.Any(x => x.Express))
|
||||
OrderList = OrderList.OrderByDescending(x => x.Express).ToList();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task GetOrderStatusPicked()
|
||||
{
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_header = "Plukkede ordrer";
|
||||
_readyToShip = false;
|
||||
Loading = true;
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_orders = await _warehouseRepo.GetWarehouseOrderListByStatus("picked");
|
||||
Loading = false;
|
||||
Working = true;
|
||||
OrderList = new List<WarehouseOrderView>();
|
||||
Header = "Plukkede ordrer";
|
||||
ReadyToShip = false;
|
||||
Working = true;
|
||||
OrderList = new List<WarehouseOrderView>();
|
||||
OrderList = await WarehouseRepo.GetWarehouseOrderListByStatus("picked");
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task GetOrderStatusPacked()
|
||||
{
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_header = "Pakkede ordrer";
|
||||
Loading = true;
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_orders = await _warehouseRepo.GetWarehouseOrderListByStatus("packed");
|
||||
_readyToShip = true;
|
||||
Loading = false;
|
||||
Working = true;
|
||||
OrderList = new List<WarehouseOrderView>();
|
||||
Header = "Pakkede ordrer";
|
||||
Working = true;
|
||||
OrderList = new List<WarehouseOrderView>();
|
||||
OrderList = await WarehouseRepo.GetWarehouseOrderListByStatus("packed");
|
||||
ReadyToShip = true;
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task GetOrderStatusShipped()
|
||||
{
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
_header = "Afsendte ordrer";
|
||||
_readyToShip = false;
|
||||
_toast.ShowWarning("Det kan tage lidt tid at hente alle.\nVent venligst.\nMåske skal vi tænke over hvor mange vi henter?");
|
||||
Loading = true;
|
||||
_orders = new List<WarehouseOrderView>();
|
||||
var orderList = await _warehouseRepo.GetWarehouseOrderListByStatus("shipped");
|
||||
_orders = orderList.OrderByDescending(x => x.OrderDate).ToList();
|
||||
_toast.ShowInfo("Her er de så ....");
|
||||
Loading = false;
|
||||
Working = true;
|
||||
OrderList = new List<WarehouseOrderView>();
|
||||
Header = "Afsendte ordrer";
|
||||
ReadyToShip = false;
|
||||
Toaster.ShowWarning("Det kan tage lidt tid at hente alle.\nVent venligst.\nMåske skal vi tænke over hvor mange vi henter?");
|
||||
Working = true;
|
||||
OrderList = new List<WarehouseOrderView>();
|
||||
var orderList = await WarehouseRepo.GetWarehouseOrderListByStatus("shipped");
|
||||
OrderList = orderList.OrderByDescending(x => x.OrderDate).ToList();
|
||||
Toaster.ShowInfo("Her er de så ....");
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task SetAllPackedStatusToShipped()
|
||||
{
|
||||
foreach (var order in _orders.Where(order => order.ProcessStatusEnum.ToLower() == "packed"))
|
||||
Working = true;
|
||||
foreach (var order in OrderList.Where(order => order.ProcessStatusEnum.ToLower() == "packed"))
|
||||
{
|
||||
order.ProcessStatusEnum = "shipped";
|
||||
var process = new WarehouseProcess
|
||||
|
@ -126,13 +131,13 @@ public partial class WarehouseListComponent
|
|||
OrderId = order.OrderId,
|
||||
ProcessStatusEnum = "shipped"
|
||||
};
|
||||
await _warehouseRepo.UpdateWarehouseOrderStatus(process);
|
||||
await WarehouseRepo.UpdateWarehouseOrderStatus(process);
|
||||
}
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_interceptor.DisposeEvent();
|
||||
Interceptor.DisposeEvent();
|
||||
}
|
||||
|
||||
}
|
|
@ -27,7 +27,7 @@ public partial class WorkDateComponent : IDisposable
|
|||
/// <summary>
|
||||
/// User preference service
|
||||
/// </summary>
|
||||
[Inject] public PreferenceService Prefs { get; set; }
|
||||
[Inject] public UserPrefService Prefs { get; set; }
|
||||
/// <summary>
|
||||
/// OnChanged callback function
|
||||
/// </summary>
|
||||
|
@ -40,7 +40,7 @@ public partial class WorkDateComponent : IDisposable
|
|||
/// <summary>
|
||||
/// user preferences
|
||||
/// </summary>
|
||||
private Preferences _prefs = new();
|
||||
private UserPref _prefs = new();
|
||||
/// <summary>
|
||||
/// Component Initialization
|
||||
/// </summary>
|
||||
|
@ -66,10 +66,10 @@ public partial class WorkDateComponent : IDisposable
|
|||
/// <summary>
|
||||
/// ProfileService
|
||||
/// </summary>
|
||||
/// <param name="newPreferences"></param>
|
||||
private void ProfileServiceOnOnChange(Preferences newPreferences)
|
||||
/// <param name="newUserPref"></param>
|
||||
private void ProfileServiceOnOnChange(UserPref newUserPref)
|
||||
{
|
||||
_prefs = newPreferences;
|
||||
_prefs = newUserPref;
|
||||
StateHasChanged();
|
||||
}
|
||||
/// <summary>
|
||||
|
|
|
@ -15,12 +15,9 @@
|
|||
//
|
||||
*@
|
||||
|
||||
@if (ShowMe)
|
||||
{
|
||||
<div class="m-5">
|
||||
<div class="m-5">
|
||||
<div class="d-flex justify-content-center">
|
||||
<!-- loader credit: samherbert.net/svg-loaders -->
|
||||
<img src="/svg-loaders/three-dots.svg" alt="loading ..."/>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
9
Wonky.Client/Components/WorkingThreeDots.razor.cs
Normal file
9
Wonky.Client/Components/WorkingThreeDots.razor.cs
Normal file
|
@ -0,0 +1,9 @@
|
|||
|
||||
using Blazored.Toast.Services;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
|
||||
namespace Wonky.Client.Components;
|
||||
|
||||
public partial class WorkingThreeDots
|
||||
{
|
||||
}
|
|
@ -56,4 +56,6 @@ public interface ICatalogHttpRepository
|
|||
/// <param name="variantId"></param>
|
||||
/// <returns></returns>
|
||||
Task<SalesItemView> GetSalesVariantId(string variantId);
|
||||
|
||||
Task<List<SalesItemView>> GetPriceList();
|
||||
}
|
|
@ -72,6 +72,14 @@ public class CatalogHttpRepository : ICatalogHttpRepository
|
|||
var response = await _client
|
||||
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.Catalog}/page", queryString));
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
return new PagingResponse<SalesItemView>
|
||||
{
|
||||
Items = new List<SalesItemView>(),
|
||||
MetaData = new MetaData()
|
||||
};
|
||||
}
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
||||
var pagingResponse = new PagingResponse<SalesItemView>
|
||||
|
@ -129,4 +137,9 @@ public class CatalogHttpRepository : ICatalogHttpRepository
|
|||
.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/variant/{variantId}");
|
||||
return salesItem ?? new SalesItemView();
|
||||
}
|
||||
|
||||
public async Task<List<SalesItemView>> GetPriceList()
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<SalesItemView>>($"{_apiConfig.Catalog}", _options);
|
||||
}
|
||||
}
|
|
@ -76,6 +76,14 @@ public class CrmCompanyHttpRepository : ICrmCompanyHttpRepository
|
|||
};
|
||||
var response = await _client.GetAsync(QueryHelpers.AddQueryString($"{_conf.CrmCustomers}/page", queryString));
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
return new PagingResponse<CompanyDto>
|
||||
{
|
||||
Items = new List<CompanyDto>(),
|
||||
MetaData = new MetaData()
|
||||
};
|
||||
}
|
||||
var content = await response.Content.ReadAsStringAsync();
|
||||
|
||||
var pagingResponse = new PagingResponse<CompanyDto>
|
||||
|
|
|
@ -22,30 +22,32 @@
|
|||
@attribute [Authorize(Roles = "Advisor,Admin,Office")]
|
||||
|
||||
<div class="sticky-top bg-dark rounded-2 px-3">
|
||||
<div class="container-fluid pt-3">
|
||||
<div class="row mb-3">
|
||||
<div class="col">
|
||||
<div class="row g-3 mb-3">
|
||||
<div class="col-sm-2">
|
||||
<CatalogGroupComponent OnChanged="SetItemGroup"/>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="col-sm-2">
|
||||
<CatalogSearchComponent OnChanged="SetSearchCol"/>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="col-sm-4">
|
||||
<CatalogSearchPhraseComponent OnChanged="SetSearchPhrase"/>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="col-sm-2">
|
||||
<CatalogSortComponent OnChanged="SetSortCol"/>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<PageSizeComponent OnChanged="SetPageSize" />
|
||||
<div class="col-sm-2">
|
||||
<PageSizeComponent OnChanged="SetPageSize"/>
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
<PaginationComponent MetaData="_metaData" Spread="2" SelectedPage="SelectedPage"/>
|
||||
</div>
|
||||
<div class="row mb-3">
|
||||
<div class="col-md-10">
|
||||
<PaginationComponent MetaData="_metaData" Spread="2" SelectedPage="SelectedPage" />
|
||||
</div>
|
||||
<div class="col-sm-2 text-end">
|
||||
<a class="btn btn-secondary" href="/price-catalog/print"><i class="bi-printer"></i> Udskriv</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<CatalogTableComponent SalesItems="_items" />
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots />
|
||||
}
|
||||
<CatalogTableComponent ItemList="_items"/>
|
|
@ -34,23 +34,24 @@ public partial class CatalogPage : IDisposable
|
|||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public ICatalogHttpRepository ItemRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public UserPrefService UserPrefService { get; set; }
|
||||
private List<SalesItemView> _items { get; set; } = new();
|
||||
private MetaData _metaData { get; set; } = new();
|
||||
private CatalogPagingParams _paging = new();
|
||||
private Preferences _preferences = new();
|
||||
private UserPref _userPref = new();
|
||||
private UserInfoView _user { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_preferences = await PreferenceService.GetPreferences();
|
||||
_userPref = await UserPrefService.GetPreferences();
|
||||
_user = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
|
||||
_paging.CountryCode = _user.CountryCode;
|
||||
|
||||
_paging.OrderBy = _preferences.ItemSort;
|
||||
_paging.SearchColumn = _preferences.ItemSearch;
|
||||
_paging.PageSize = Convert.ToInt32(_preferences.PageSize);
|
||||
_paging.OrderBy = _userPref.ItemSort;
|
||||
_paging.SearchColumn = _userPref.ItemSearch;
|
||||
_paging.PageSize = Convert.ToInt32(_userPref.PageSize);
|
||||
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
@ -105,9 +106,12 @@ public partial class CatalogPage : IDisposable
|
|||
|
||||
private async Task GetSalesItems()
|
||||
{
|
||||
Working = true;
|
||||
var pagingResponse = await ItemRepo.GetSalesItemsPaged(_paging);
|
||||
Working = false;
|
||||
_items = pagingResponse.Items!;
|
||||
_metaData = pagingResponse.MetaData;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
32
Wonky.Client/Pages/CatalogPrintPage.razor
Normal file
32
Wonky.Client/Pages/CatalogPrintPage.razor
Normal file
|
@ -0,0 +1,32 @@
|
|||
@*
|
||||
// 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]
|
||||
//
|
||||
*@
|
||||
|
||||
@page "/price-catalog/print"
|
||||
@using Wonky.Client.Components
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
|
||||
@attribute [Authorize(Roles = "Admin,Advisor,Office,Warehouse")]
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots />
|
||||
}
|
||||
else
|
||||
{
|
||||
<CatalogTablePrintComponent ItemList="Items" />
|
||||
}
|
||||
|
56
Wonky.Client/Pages/CatalogPrintPage.razor.cs
Normal file
56
Wonky.Client/Pages/CatalogPrintPage.razor.cs
Normal file
|
@ -0,0 +1,56 @@
|
|||
// 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;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Blazored.LocalStorage;
|
||||
using Wonky.Client.HttpInterceptors;
|
||||
using Wonky.Client.HttpRepository;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Wonky.Client.Components;
|
||||
using Wonky.Client.HttpInterfaces;
|
||||
using Wonky.Client.Services;
|
||||
using Wonky.Entity.DTO;
|
||||
using Wonky.Entity.Requests;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class CatalogPrintPage : IDisposable
|
||||
{
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public ICatalogHttpRepository ItemRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public UserPrefService UserPrefService { get; set; }
|
||||
private List<SalesItemView> Items { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
await GetSalesItems();
|
||||
}
|
||||
|
||||
private async Task GetSalesItems()
|
||||
{
|
||||
Items = await ItemRepo.GetPriceList();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose() => Interceptor.DisposeEvent();
|
||||
|
||||
}
|
|
@ -233,21 +233,21 @@ else
|
|||
<tbody>
|
||||
<tr>
|
||||
<td class="align-middle">
|
||||
<InputNumber TValue="int" class="form-control" @bind-value="@Quantity"/>
|
||||
<input type="number" class="form-control" @bind-value="@Quantity"/>
|
||||
</td>
|
||||
<td class="align-middle">
|
||||
<div class="input-group">
|
||||
<InputNumber TValue="decimal" class="form-control" @bind-value="@Price"/>
|
||||
<input type="number" class="form-control" @bind-value="@Price"/>
|
||||
<button class="btn btn-warning" type="button" @onclick="CallPriceHistoryModal">
|
||||
<i class="bi-list-ul"></i>
|
||||
</button>
|
||||
</div>
|
||||
</td>
|
||||
<td class="align-middle">
|
||||
<InputNumber TValue="decimal" class="form-control" @bind-value="@Discount"/>
|
||||
<input type="number" class="form-control" @bind-value="@Discount"/>
|
||||
</td>
|
||||
<td class="align-middle align-content-center justify-content-center">
|
||||
<InputCheckbox class="form-check" @bind-value="@Sas"/>
|
||||
<input type="checkbox" class="form-check" @bind-value="@Sas"/>
|
||||
</td>
|
||||
<td class="align-middle">@SelectedItem.Sku</td>
|
||||
<td class="align-middle">
|
||||
|
|
|
@ -39,7 +39,7 @@ public partial class CrmActivityNewPage : IDisposable
|
|||
// Services
|
||||
[Inject] public ILogger<CrmActivityNewPage> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public PreferenceService Prefs { get; set; }
|
||||
[Inject] public UserPrefService Prefs { get; set; }
|
||||
[Inject] public IToastService Toast { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
|
@ -50,7 +50,7 @@ public partial class CrmActivityNewPage : IDisposable
|
|||
// variables
|
||||
private readonly JsonSerializerOptions? _options = new() {PropertyNameCaseInsensitive = true};
|
||||
private SalesItemView SelectedItem { get; set; } = new();
|
||||
private Preferences UserPrefs { get; set; } = new();
|
||||
private UserPref UserPrefs { get; set; } = new();
|
||||
private ActivityDto Activity { get; set; } = new();
|
||||
private CompanyDto Company = new();
|
||||
private EditContext ActivityContext { get; set; }
|
||||
|
|
|
@ -38,12 +38,11 @@
|
|||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (ReportStatusView.ReportItems.Any())
|
||||
{
|
||||
<AdvisorActivityTableComponent Activities="ReportStatusView.ReportItems"/>
|
||||
}
|
||||
@if (Working)
|
||||
{
|
||||
<LoaderThreeDots/>
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
@if (ReportStatusView.ReportItems.Any())
|
||||
{
|
||||
<AdvisorActivityTableComponent ActivityList="ReportStatusView.ReportItems"/>
|
||||
}
|
|
@ -27,7 +27,7 @@ namespace Wonky.Client.Pages;
|
|||
|
||||
public partial class CrmActivityTodayPage : IDisposable
|
||||
{
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public UserPrefService UserPrefService { get; set; }
|
||||
[Inject] public ILogger<CrmActivityTodayPage> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
|
@ -35,7 +35,7 @@ public partial class CrmActivityTodayPage : IDisposable
|
|||
[Inject] public ICrmReportHttpRepository CrmReportRepo { get; set; }
|
||||
[Inject] public IToastService Toaster { get; set; }
|
||||
private ReportStatusView? ReportStatusView { get; set; } = new();
|
||||
private Preferences Preferences { get; set; } = new();
|
||||
private UserPref UserPref { get; set; } = new();
|
||||
private DateTime SelectedDate { get; set; }
|
||||
private bool ReportExist { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
@ -44,8 +44,8 @@ public partial class CrmActivityTodayPage : IDisposable
|
|||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Preferences = await PreferenceService.GetPreferences();
|
||||
SelectedDate = string.IsNullOrWhiteSpace(Preferences.WorkDate) ? DateTime.Now : DateTime.Parse(Preferences.WorkDate);
|
||||
UserPref = await UserPrefService.GetPreferences();
|
||||
SelectedDate = string.IsNullOrWhiteSpace(UserPref.WorkDate) ? DateTime.Now : DateTime.Parse(UserPref.WorkDate);
|
||||
ReportExist = await CrmReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}");
|
||||
await GetActivities($"{SelectedDate:yyyy-MM-dd}");
|
||||
Working = false;
|
||||
|
|
|
@ -23,6 +23,10 @@
|
|||
|
||||
@* <ReportItemComponent ReportItem="@_item" /> *@
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<LoaderThreeDots/>
|
||||
}
|
||||
<table class="table table-sm table-striped d-print-table">
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
|
@ -43,6 +43,7 @@ public partial class CrmActivityViewPage : IDisposable
|
|||
private EditContext NoteContext { get; set; }
|
||||
private bool Disabled { get; set; }
|
||||
private int GraceTime { get; set; } = 60;
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
@ -54,6 +55,7 @@ public partial class CrmActivityViewPage : IDisposable
|
|||
Note.ActivityId = ReportItem.ActivityId;
|
||||
Note.OfficeNote = ReportItem.OfficeNote;
|
||||
Logger.LogDebug("ReportItem => \n {}", JsonSerializer.Serialize(ReportItem));
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
||||
|
@ -63,6 +65,7 @@ public partial class CrmActivityViewPage : IDisposable
|
|||
|
||||
private async Task UpdateOfficeNote()
|
||||
{
|
||||
Working = true;
|
||||
Disabled = true;
|
||||
Logger.LogDebug("OfficeNote => \n {}", JsonSerializer.Serialize(Note));
|
||||
await ActivityRepo.UpdateOfficeNote(Note);
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
@page "/companies/{CompanyId}/activities"
|
||||
@attribute [Authorize(Roles = "Advisor")]
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
@if (!string.IsNullOrWhiteSpace(Company.Name))
|
||||
{
|
||||
<div class="row pt-2 pb-1 rounded-2 bg-dark text-white">
|
||||
|
@ -92,8 +96,3 @@
|
|||
}
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<LoaderThreeDots/>
|
||||
}
|
|
@ -19,6 +19,10 @@
|
|||
@using Microsoft.AspNetCore.Authorization
|
||||
@page "/companies/{CompanyId}/h/i"
|
||||
@attribute [Authorize(Roles = "Advisor")]
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots />
|
||||
}
|
||||
<div class="row pt-2 pb-1 rounded-2 bg-dark text-white">
|
||||
<div class="col-sm-6">
|
||||
<h4 class="pt-1">@Company.Name</h4>
|
||||
|
@ -30,11 +34,4 @@
|
|||
<a class="btn btn-primary d-block" href="/companies/@Company.CompanyId/activities/new"><i class="bi-arrow-right"></i> Besøg</a>
|
||||
</div>
|
||||
</div>
|
||||
@if (Loading)
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
}
|
||||
else
|
||||
{
|
||||
<ProductInventoryTableComponent CompanyId="@CompanyId" Inventory="Inventory"/>
|
||||
}
|
||||
<ProductInventoryTableComponent CompanyId="@CompanyId" ProductList="Inventory"/>
|
||||
|
|
|
@ -35,7 +35,7 @@ public partial class CrmCompanyInventoryPage : IDisposable
|
|||
[Inject] public ILogger<CrmCompanyInventoryPage> Logger { get; set; }
|
||||
private CompanyDto Company { get; set; } = new();
|
||||
private List<ProductInventoryView>? Inventory { get; set; }
|
||||
private bool Loading { get; set; } = true;
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
|
@ -44,15 +44,18 @@ public partial class CrmCompanyInventoryPage : IDisposable
|
|||
|
||||
Company = await CompanyRepo.GetCompanyById(CompanyId);
|
||||
|
||||
await RefreshHistory();
|
||||
await FetchInventory();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task RefreshHistory()
|
||||
private async Task FetchInventory()
|
||||
{
|
||||
Working = true;
|
||||
Toaster.ShowInfo("Arbejder på sagen ...", "Vent venligst");
|
||||
Inventory = await CrmHistoryRepo.FetchInventory(CompanyId);
|
||||
Inventory = Inventory?.OrderBy(x => x.Description).ToList();
|
||||
Loading = false;
|
||||
if(Inventory.Any())
|
||||
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||
Working = false;
|
||||
Toaster.ClearAll();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,11 @@
|
|||
@page "/companies/{CompanyId}/invoices"
|
||||
@using Wonky.Client.Components
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots />
|
||||
}
|
||||
|
||||
@if (!string.IsNullOrWhiteSpace(Company.Name))
|
||||
{
|
||||
<div class="row pt-2 pb-1 rounded-2 bg-dark text-white">
|
||||
|
@ -15,10 +21,3 @@
|
|||
</div>
|
||||
<InvoiceTableComponent CompanyId="@CompanyId" InvoiceList="@History.Invoices"/>
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (Loading)
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
}
|
||||
}
|
|
@ -19,7 +19,7 @@ public partial class CrmCompanyInvoiceListPage : IDisposable
|
|||
|
||||
private InvoiceListView History { get; set; } = new();
|
||||
private CompanyDto Company { get; set; } = new();
|
||||
private bool Loading { get; set; } = true;
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
|
@ -28,14 +28,16 @@ public partial class CrmCompanyInvoiceListPage : IDisposable
|
|||
|
||||
Company = await CompanyRepo.GetCompanyById(CompanyId);
|
||||
|
||||
await GetInvoices();
|
||||
await FetchInvoices();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task GetInvoices()
|
||||
private async Task FetchInvoices()
|
||||
{
|
||||
Working = true;
|
||||
Toaster.ShowInfo("Arbejder på sagen ...", "Vent venligst");
|
||||
History = await HistoryRepo.FetchInvoiceList(CompanyId);
|
||||
Loading = false;
|
||||
Working = false;
|
||||
Toaster.ClearAll();
|
||||
}
|
||||
|
||||
|
|
|
@ -22,40 +22,39 @@
|
|||
@attribute [Authorize(Roles = "Advisor")]
|
||||
|
||||
<div class="sticky-top bg-dark text-light rounded-2 px-3">
|
||||
<div class="container-fluid pt-3">
|
||||
<div class="row mb-2">
|
||||
<div class="col-md-3">
|
||||
<div class="row g-3">
|
||||
<div class="col-sm-2">
|
||||
<CompanySearchColumnComponent OnChanged="SetSearchCol" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-sm-6">
|
||||
<CompanySearchPhraseComponent OnChanged="SetSearchPhrase" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-sm-2">
|
||||
<CompanySortComponent OnChanged="SetSortCol" />
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<div class="col-sm-2">
|
||||
<PageSizeComponent OnChanged="SetPageSize" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-3">
|
||||
<div class="col-sm-2">
|
||||
<div class="form-check">
|
||||
<input type="checkbox" id="folded" class="form-check-input" checked="@_includeFolded" @onclick="OnFoldedClick" >
|
||||
<input type="checkbox" id="folded" class="form-check-input" checked="@IncludeFolded" @onclick="OnFoldedClick" >
|
||||
<label for="folded" class="form-check-label">Ophørte</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<PaginationComponent MetaData="_metaData" Spread="2" SelectedPage="SelectedPage"/>
|
||||
</div>
|
||||
<div class="col-3 justify-content-end">
|
||||
<a class="btn btn-success text-nowrap" href="/companies/new">Opret kunde</a>
|
||||
<div class="col-sm-8">
|
||||
<PaginationComponent MetaData="PageData" Spread="2" SelectedPage="SelectedPage"/>
|
||||
</div>
|
||||
<div class="col-sm-2 text-end">
|
||||
<a class="btn btn-success text-nowrap" href="/companies/new">Opret kunde <i class="bi-plus"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<AdvisorCompanyTableComponent Companies="_companyList" OnDelete="DeleteCompany" />
|
||||
@if (Working)
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
<WorkingThreeDots />
|
||||
}
|
||||
else
|
||||
{
|
||||
<AdvisorCompanyTableComponent CompanyList="Companies" OnDelete="DeleteCompany" />
|
||||
}
|
||||
|
||||
|
|
|
@ -30,92 +30,87 @@ namespace Wonky.Client.Pages
|
|||
{
|
||||
public partial class CrmCompanyListPage : IDisposable
|
||||
{
|
||||
[Inject] public ILocalStorageService _storage { get; set; }
|
||||
[Inject] public PreferenceService _preferenceService { get; set; }
|
||||
[Inject] public ICrmCompanyHttpRepository _companyRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] public NavigationManager _navigator { 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 UserInfoView _userInfo { get; set; } = new();
|
||||
private string _savedSearch { get; set; } = "";
|
||||
private bool _includeFolded { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public UserPrefService PrefService { get; set; }
|
||||
[Inject] public ICrmCompanyHttpRepository CompanyRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
private List<CompanyDto> Companies { get; set; } = new();
|
||||
private MetaData PageData { get; set; } = new();
|
||||
private CompanyPagingParams PageParams = new();
|
||||
private UserPref Prefs { get; set; } = new();
|
||||
private UserInfoView UserInfo { get; set; } = new();
|
||||
private string SavedSearch { get; set; } = "";
|
||||
private bool IncludeFolded { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
// set preferences
|
||||
_preferences = await _preferenceService.GetPreferences();
|
||||
_userInfo = await _storage.GetItemAsync<UserInfoView>("_xu");
|
||||
_paging.OrderBy = _preferences.CompanySort;
|
||||
_paging.SearchColumn = _preferences.CompanySearch;
|
||||
_paging.PageSize = Convert.ToInt32(_preferences.PageSize);
|
||||
_paging.HasFolded = _includeFolded ? 1 : 0;
|
||||
_paging.CountryCode = _userInfo.CountryCode;
|
||||
Prefs = await PrefService.GetPreferences();
|
||||
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
PageParams.OrderBy = Prefs.CompanySort;
|
||||
PageParams.SearchColumn = Prefs.CompanySearch;
|
||||
PageParams.PageSize = Convert.ToInt32(Prefs.PageSize);
|
||||
PageParams.HasFolded = IncludeFolded ? 1 : 0;
|
||||
PageParams.CountryCode = UserInfo.CountryCode;
|
||||
|
||||
// load saved search
|
||||
_savedSearch = _preferences.CompanyFilterPhrase;
|
||||
_paging.SearchTerm = _savedSearch;
|
||||
SavedSearch = string.IsNullOrWhiteSpace(Prefs.CompanyFilterPhrase) ? "" : Prefs.CompanyFilterPhrase;
|
||||
PageParams.SearchTerm = SavedSearch;
|
||||
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
// get companies
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task OnFoldedClick()
|
||||
{
|
||||
_includeFolded = !_includeFolded;
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageNumber = 1;
|
||||
_paging.HasFolded = _includeFolded ? 1 : 0;
|
||||
await GetCompanies();
|
||||
IncludeFolded = !IncludeFolded;
|
||||
Companies = new List<CompanyDto>();
|
||||
PageParams.PageNumber = 1;
|
||||
PageParams.HasFolded = IncludeFolded ? 1 : 0;
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SelectedPage(int page)
|
||||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageNumber = page;
|
||||
await GetCompanies();
|
||||
Companies = new List<CompanyDto>();
|
||||
PageParams.PageNumber = page;
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SetSearchCol(string searchColumn)
|
||||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.SearchColumn = searchColumn;
|
||||
_paging.PageNumber = 1;
|
||||
await GetCompanies();
|
||||
Companies = new List<CompanyDto>();
|
||||
PageParams.SearchColumn = searchColumn;
|
||||
PageParams.PageNumber = 1;
|
||||
await FetchCompanies();
|
||||
}
|
||||
private async Task SetPageSize(string pageSize)
|
||||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageSize = Convert.ToInt32(pageSize);
|
||||
_paging.PageNumber = 1;
|
||||
await GetCompanies();
|
||||
Companies = new List<CompanyDto>();
|
||||
PageParams.PageSize = Convert.ToInt32(pageSize);
|
||||
PageParams.PageNumber = 1;
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SetSearchPhrase(string searchTerm)
|
||||
{
|
||||
// if (!string.IsNullOrWhiteSpace(searchTerm) && searchTerm.Length < 3) return;
|
||||
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageNumber = 1;
|
||||
_paging.SearchTerm = searchTerm;
|
||||
await GetCompanies();
|
||||
if (!string.IsNullOrWhiteSpace(searchTerm) && searchTerm.TrimEnd().Length > 2)
|
||||
{
|
||||
_savedSearch = searchTerm;
|
||||
await _preferenceService.SetCompanyFilterPhrase(searchTerm.Trim());
|
||||
}
|
||||
Companies = new List<CompanyDto>();
|
||||
PageParams.PageNumber = 1;
|
||||
PageParams.SearchTerm = searchTerm;
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SetSortCol(string orderBy)
|
||||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.OrderBy = orderBy;
|
||||
await GetCompanies();
|
||||
Companies = new List<CompanyDto>();
|
||||
PageParams.OrderBy = orderBy;
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -124,23 +119,31 @@ namespace Wonky.Client.Pages
|
|||
/// <param name="companyId"></param>
|
||||
private async Task DeleteCompany(string companyId)
|
||||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
await _companyRepo.DeleteCompany(companyId);
|
||||
if (_paging.PageNumber > 1 && _companyList.Count == 1)
|
||||
_paging.PageNumber--;
|
||||
await GetCompanies();
|
||||
Companies = new List<CompanyDto>();
|
||||
await CompanyRepo.DeleteCompany(companyId);
|
||||
if (PageParams.PageNumber > 1 && Companies.Count == 1)
|
||||
PageParams.PageNumber--;
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task GetCompanies()
|
||||
private async Task FetchCompanies()
|
||||
{
|
||||
Working = true;
|
||||
var pagingResponse = await _companyRepo.GetCompanies(_paging);
|
||||
_companyList = pagingResponse.Items;
|
||||
_metaData = pagingResponse.MetaData;
|
||||
var pagingResponse = await CompanyRepo.GetCompanies(PageParams);
|
||||
Working = false;
|
||||
if (pagingResponse.Items.Any())
|
||||
{
|
||||
Companies = pagingResponse.Items;
|
||||
PageData = pagingResponse.MetaData;
|
||||
}
|
||||
else
|
||||
{
|
||||
Companies = new List<CompanyDto>();
|
||||
PageData = new MetaData();
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose() => _interceptor.DisposeEvent();
|
||||
public void Dispose() => Interceptor.DisposeEvent();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,10 @@
|
|||
|
||||
|
||||
<h2>Opret kunde</h2>
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<EditForm EditContext="CompanyContext" OnValidSubmit="SubmitCompanyForm">
|
||||
<DataAnnotationsValidator/>
|
||||
<InputText type="hidden" id="salesRepId" @bind-Value="Company.SalesRepId"/>
|
||||
|
|
|
@ -59,6 +59,7 @@ namespace Wonky.Client.Pages
|
|||
private DateTime NextVisit { get; set; }
|
||||
private bool Dk { get; set; } = true;
|
||||
private bool ShowInfos = true;
|
||||
private bool Working { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
@ -139,10 +140,8 @@ namespace Wonky.Client.Pages
|
|||
|
||||
// this can be removed in favor of the new data returned from updating the VatNumber
|
||||
RegState = regInfo.States[0].State.ToLower() == "normal" ? "the-good" : "the-dead";
|
||||
|
||||
if (regInfo.SyncAll)
|
||||
{
|
||||
|
||||
Company.Name = regInfo.Name;
|
||||
Company.Address1 = regInfo.Address;
|
||||
Company.Address2 = regInfo.CoName;
|
||||
|
@ -168,6 +167,7 @@ namespace Wonky.Client.Pages
|
|||
}
|
||||
private async Task SubmitCompanyForm()
|
||||
{
|
||||
Working = true;
|
||||
FormInvalid = true;
|
||||
Company.LastVisit = $"{LastVisit:yyyy-MM-dd}";
|
||||
Company.NextVisit = $"{NextVisit:yyyy-MM-dd}";
|
||||
|
@ -184,6 +184,8 @@ namespace Wonky.Client.Pages
|
|||
Toaster.ShowWarning($"'{Company.Name}' IKKE oprettet.");
|
||||
FormInvalid = false;
|
||||
}
|
||||
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
@if (Working)
|
||||
{
|
||||
<LoaderThreeDots />
|
||||
<WorkingThreeDots />
|
||||
}
|
||||
@if (!string.IsNullOrWhiteSpace(Company.Account))
|
||||
{
|
||||
|
@ -131,7 +131,7 @@
|
|||
@* activity buttons *@
|
||||
<div class="row mt-3 mb-2">
|
||||
<div class="col">
|
||||
<a class="btn btn-dark opacity-50 d-block" href="/companies/@Company.CompanyId/invoices">Poster</a>
|
||||
<a class="btn btn-dark opacity-50 d-block" href="/companies/@Company.CompanyId/invoices">Faktura</a>
|
||||
</div>
|
||||
<div class="col">
|
||||
<a class="btn btn-dark opacity-50 d-block" href="/companies/@Company.CompanyId/quotes">Tilbud</a>
|
||||
|
|
|
@ -76,7 +76,7 @@ public partial class CrmCompanyViewPage : IDisposable
|
|||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
// fetch company from backend
|
||||
await GetCompany(CompanyId);
|
||||
await FetchCompany(CompanyId);
|
||||
// initialize default contact
|
||||
DefaultContact = new ContactDto { CompanyId = CompanyId, ContactId = "", FirstName = ""};
|
||||
// setup form context
|
||||
|
@ -87,7 +87,7 @@ public partial class CrmCompanyViewPage : IDisposable
|
|||
// call background task to sync backend with erp
|
||||
await SyncCompanyHistory(CompanyId, Company.HistorySync);
|
||||
// call background task to fetch contacts
|
||||
await GetContacts(CompanyId);
|
||||
await FetchContacts(CompanyId);
|
||||
// remove loading image
|
||||
Working = false;
|
||||
}
|
||||
|
@ -96,7 +96,7 @@ public partial class CrmCompanyViewPage : IDisposable
|
|||
/// Get company by id
|
||||
/// </summary>
|
||||
/// <param name="companyId"></param>
|
||||
private async Task GetCompany(string companyId)
|
||||
private async Task FetchCompany(string companyId)
|
||||
{
|
||||
Company = await CompanyRepo.GetCompanyById(companyId);
|
||||
CurrentVat = Company.VatNumber;
|
||||
|
@ -142,17 +142,20 @@ public partial class CrmCompanyViewPage : IDisposable
|
|||
// create search address from address
|
||||
if (CountryIsDk)
|
||||
CompanyVatAddress = PrepareVatAddress(Company);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fetch contacts from backend
|
||||
/// </summary>
|
||||
/// <param name="companyId"></param>
|
||||
private async Task GetContacts(string companyId)
|
||||
private async Task FetchContacts(string companyId)
|
||||
{
|
||||
Working = true;
|
||||
// load contacts
|
||||
Contacts = await ContactRepo.GetContacts(companyId);
|
||||
Contacts = Contacts.OrderBy(x => x.FirstName).ToList();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -207,6 +210,7 @@ public partial class CrmCompanyViewPage : IDisposable
|
|||
/// <param name="contact"></param>
|
||||
private async Task WriteContactCallback(ContactDto contact)
|
||||
{
|
||||
Working = true;
|
||||
// write contact to debug log
|
||||
Logger.LogDebug("CompanyView => SaveContactCallback <= {}", JsonSerializer.Serialize(contact));
|
||||
if (string.IsNullOrWhiteSpace(contact.ContactId))
|
||||
|
@ -226,7 +230,8 @@ public partial class CrmCompanyViewPage : IDisposable
|
|||
// reset selected contact
|
||||
SelectedContact = new ContactDto();
|
||||
// reload contacts from backend
|
||||
await GetContacts(CompanyId);
|
||||
await FetchContacts(CompanyId);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -235,13 +240,15 @@ public partial class CrmCompanyViewPage : IDisposable
|
|||
/// <param name="contactId"></param>
|
||||
private async Task DeleteContactCallback(string contactId)
|
||||
{
|
||||
Working = true;
|
||||
Logger.LogDebug("delete {}", contactId);
|
||||
// send delete request to backend
|
||||
await ContactRepo.DeleteContact(CompanyId, contactId);
|
||||
// reset selected contact
|
||||
SelectedContact = new ContactDto();
|
||||
// reload contacts from backend
|
||||
await GetContacts(CompanyId);
|
||||
await FetchContacts(CompanyId);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -346,8 +353,10 @@ public partial class CrmCompanyViewPage : IDisposable
|
|||
/// </summary>
|
||||
private async Task SyncCompanyHistory(string companyId, string syncDate)
|
||||
{
|
||||
Working = true;
|
||||
// send rpc request to backend
|
||||
await HistoryRepo.RpcSyncErpToCrm(companyId, syncDate);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -18,9 +18,13 @@
|
|||
@using Wonky.Client.Components
|
||||
@page "/sales-reports"
|
||||
|
||||
<div class="alert text-black border border-1">
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<div class="alert text-black border border-1">
|
||||
<div class="col">
|
||||
<h3>Rapport Arkiv</h3>
|
||||
</div>
|
||||
</div>
|
||||
<ReportTableComponent ReportList="_reports" />
|
||||
</div>
|
||||
<ReportTableComponent ReportList="ReportList" />
|
||||
|
|
|
@ -25,20 +25,22 @@ namespace Wonky.Client.Pages;
|
|||
public partial class CrmReportListPage : IDisposable
|
||||
{
|
||||
[Inject] public ICrmReportHttpRepository CrmReportRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
|
||||
private List<NgSalesReportListView> _reports { get; set; }
|
||||
private List<NgSalesReportListView> ReportList { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
_reports = await CrmReportRepo.GetReports();
|
||||
ReportList = await CrmReportRepo.GetReports();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_interceptor.DisposeEvent();
|
||||
Interceptor.DisposeEvent();
|
||||
}
|
||||
}
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
@if (Working)
|
||||
{
|
||||
<LoaderThreeDots/>
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
|
||||
@* report header *@
|
||||
|
@ -76,7 +76,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
Report.Figures.KmMorning = Preferences.KmMorning;
|
||||
Report.Figures.KmMorning = UserPref.KmMorning;
|
||||
<td>
|
||||
<input type="time" id="checkIn" class="form-control"
|
||||
@bind-Value="_checkIn" @bind-Value:event="oninput" @onchange="OnTimeChanged"/>
|
||||
|
|
|
@ -35,7 +35,7 @@ namespace Wonky.Client.Pages;
|
|||
public partial class CrmReportNewPage : IDisposable
|
||||
{
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public UserPrefService UserPrefService { get; set; }
|
||||
[Inject] public ICrmActivityHttpRepository CrmActivityRepo { get; set; }
|
||||
[Inject] public ICrmReportHttpRepository CrmReportRepo { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
|
@ -45,7 +45,7 @@ public partial class CrmReportNewPage : IDisposable
|
|||
private ReportDto Report { get; set; } = new();
|
||||
private List<ReportItemView> Activities { get; set; } = new();
|
||||
private ReportFiguresDto InitialValues { get; set; }
|
||||
private Preferences Preferences { get; set; } = new();
|
||||
private UserPref UserPref { get; set; } = new();
|
||||
private bool FormInvalid { get; set; } = true;
|
||||
private bool NoFigures { get; set; } = true;
|
||||
private bool Working { get; set; } = true;
|
||||
|
@ -68,12 +68,12 @@ public partial class CrmReportNewPage : IDisposable
|
|||
ReportContext.OnFieldChanged += HandleFieldChanged;
|
||||
ReportContext.OnValidationStateChanged += ValidationChanged;
|
||||
|
||||
Preferences = await PreferenceService.GetPreferences();
|
||||
if (!string.IsNullOrWhiteSpace(Preferences.WorkDate))
|
||||
_workDate = DateTime.Parse(Preferences.WorkDate);
|
||||
UserPref = await UserPrefService.GetPreferences();
|
||||
if (!string.IsNullOrWhiteSpace(UserPref.WorkDate))
|
||||
_workDate = DateTime.Parse(UserPref.WorkDate);
|
||||
|
||||
if(await CrmReportRepo.ReportExist(Preferences.WorkDate))
|
||||
Navigator.NavigateTo($"/sales-reports/view/{Preferences.WorkDate}");
|
||||
if(await CrmReportRepo.ReportExist(UserPref.WorkDate))
|
||||
Navigator.NavigateTo($"/sales-reports/view/{UserPref.WorkDate}");
|
||||
|
||||
BeginLeave = _workDate;
|
||||
EndLeave = _workDate;
|
||||
|
@ -84,6 +84,7 @@ public partial class CrmReportNewPage : IDisposable
|
|||
Report.Figures.Distance = 0;
|
||||
Report.Figures.DistancePrivateMonth = 0;
|
||||
await GetKeyFigures();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -127,7 +128,7 @@ public partial class CrmReportNewPage : IDisposable
|
|||
// reset km and date confirmation
|
||||
// await PreferenceService.SetKmMorning(0);
|
||||
// reset date confirmed
|
||||
await PreferenceService.SetDateConfirmed(false);
|
||||
await UserPrefService.SetDateConfirmed(false);
|
||||
Navigator.NavigateTo($"/sales-reports/view/{_workDate:yyyy-MM-dd}");
|
||||
}
|
||||
/// <summary>
|
||||
|
@ -235,7 +236,7 @@ public partial class CrmReportNewPage : IDisposable
|
|||
Activities = data.ReportItems;
|
||||
|
||||
if(!Report.DayTypeEnum.ToLower().Contains("leave"))
|
||||
Report.Figures.KmMorning = Preferences.KmMorning;
|
||||
Report.Figures.KmMorning = UserPref.KmMorning;
|
||||
|
||||
NoFigures = false;
|
||||
Working = false;
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
@page "/sales-reports/view/{ReportDate}"
|
||||
@attribute [Authorize(Roles = "Advisor,Admin,Supervisor")]
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<div class="report-main">
|
||||
|
||||
<div class="row bg-dark text-white rounded-2 mb-2 py-2 align-items-center d-print-none">
|
||||
|
@ -45,7 +49,7 @@
|
|||
<ReportDistanceLedgerComponent ReportData="_report.ReportData" />
|
||||
</div>
|
||||
</div>
|
||||
<OfficeActivityTableComponent Activities="_report.ReportItems" />
|
||||
<OfficeActivityTableComponent ActivityList="_report.ReportItems" />
|
||||
<ReportActivityLedgerComponent ReportData="_report.ReportData" />
|
||||
}
|
||||
else
|
||||
|
|
|
@ -28,6 +28,7 @@ public partial class CrmReportViewPage
|
|||
[Inject] public NavigationManager _navigator { get; set; }
|
||||
private ReportView _report { get; set; } = new();
|
||||
private List<ReportItemView> _items { get; set; } = new ();
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
@ -35,10 +36,13 @@ public partial class CrmReportViewPage
|
|||
{
|
||||
await GetReport(ReportDate);
|
||||
}
|
||||
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task GetReport(string workDate)
|
||||
{
|
||||
Working = true;
|
||||
_report = new ReportView();
|
||||
_items = new List<ReportItemView>();
|
||||
|
||||
|
@ -47,6 +51,6 @@ public partial class CrmReportViewPage
|
|||
_report = await CrmReportRepo.GetReport(workDate);
|
||||
|
||||
_items = _report.ReportItems.Where(x => x.Lines.Any()).ToList();
|
||||
|
||||
Working = false;
|
||||
}
|
||||
}
|
|
@ -20,6 +20,10 @@
|
|||
@attribute [Authorize(Roles = "Advisor")]
|
||||
@page "/task-items"
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="row mb-1 align-items-center">
|
||||
|
|
|
@ -27,34 +27,38 @@ namespace Wonky.Client.Pages;
|
|||
|
||||
public partial class CrmTaskItemListPage : IDisposable
|
||||
{
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public UserPrefService UserPrefService { get; set; }
|
||||
[Inject] public ILogger<CrmTaskItemListPage> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] public ICrmTaskItemHttpRepository TaskItemRepo { get; set; }
|
||||
[Inject] public IToastService Toaster { get; set; }
|
||||
private Preferences Prefs { get; set; } = new();
|
||||
private UserPref Prefs { get; set; } = new();
|
||||
private string WorkDate { get; set; } = $"{DateTime.Now:yyyy-MM-dd}";
|
||||
private bool ReportExist = false;
|
||||
private List<TaskItemDto> TaskItems { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Prefs = await PreferenceService.GetPreferences();
|
||||
Prefs = await UserPrefService.GetPreferences();
|
||||
if(!string.IsNullOrWhiteSpace(Prefs.WorkDate))
|
||||
WorkDate = Prefs.WorkDate;
|
||||
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
await GetTaskItems(WorkDate);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task GetTaskItems(string workDate)
|
||||
{
|
||||
Working = true;
|
||||
Toaster.ShowInfo("Vent nogle sekunder for data");
|
||||
TaskItems = await TaskItemRepo.GetTaskList(workDate);
|
||||
|
||||
Toaster.ClearAll();
|
||||
Working = false;
|
||||
|
||||
}
|
||||
public void Dispose()
|
||||
|
|
|
@ -19,6 +19,10 @@
|
|||
@attribute [Authorize(Roles = "Advisor")]
|
||||
@page "/tasks/{TaskItemId}"
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<h3>Opgave</h3>
|
||||
|
|
|
@ -31,6 +31,7 @@ public partial class CrmTaskItemViewPage : IDisposable
|
|||
[Inject] public ICrmTaskItemHttpRepository CrmTaskItemRepo { get; set; }
|
||||
private TaskItemDto _taskItem = new ();
|
||||
private EditContext _editContext { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
|
@ -40,6 +41,7 @@ public partial class CrmTaskItemViewPage : IDisposable
|
|||
|
||||
_taskItem = await CrmTaskItemRepo.GetTaskItem(TaskItemId);
|
||||
Console.WriteLine(JsonSerializer.Serialize(_taskItem));
|
||||
Working = false;
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
|
|
|
@ -21,3 +21,7 @@
|
|||
@page "/companies/{CompanyId}/workplaces/{WorkplaceId}/documents"
|
||||
|
||||
<h2>Dokumenter</h2>
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
|
@ -28,9 +28,6 @@ public partial class CrmWorkplaceDocumentListPage
|
|||
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] public ICrmWorkplaceHttpRepository CrmWorkplaceRepo { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
|
@ -25,6 +25,10 @@
|
|||
<h2>@_company.Name</h2>
|
||||
</div>
|
||||
</div>
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<div class="row">
|
||||
<WorkplaceListComponent CompanyId="@CompanyId" Workplaces="@_workplaces" />
|
||||
</div>
|
|
@ -32,17 +32,21 @@ public partial class CrmWorkplaceListPage : IDisposable
|
|||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
private List<WorkplaceListView> _workplaces { get; set; } = new();
|
||||
private CompanyDto _company { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
_company = await _companyRepo.GetCompanyById(CompanyId);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Working = true;
|
||||
_workplaces = await CrmWorkplaceRepo.GetWorkplaces(CompanyId);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
@attribute [Authorize(Roles = "Advisor")]
|
||||
@page "/companies/{CompanyId}/workplaces/{WorkplaceId}"
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">
|
||||
|
|
|
@ -35,12 +35,15 @@ public partial class CrmWorkplaceViewPage : IDisposable
|
|||
[Inject] public NavigationManager _navigator { get; set; }
|
||||
private WorkplaceDto _workplace { get; set; } = new();
|
||||
private EditContext _editContext { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
_workplace = await CrmWorkplaceRepo.GetWorkplace(CompanyId, WorkplaceId);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
|
@ -50,11 +53,14 @@ public partial class CrmWorkplaceViewPage : IDisposable
|
|||
|
||||
private async Task SubmitUpdate()
|
||||
{
|
||||
Working = true;
|
||||
await CrmWorkplaceRepo.UpdateWorkplace(CompanyId, _workplace);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task DeleteWorkplace()
|
||||
{
|
||||
Working = true;
|
||||
await CrmWorkplaceRepo.DeleteWorkplace(CompanyId, _workplace.WorkplaceId);
|
||||
_navigator.NavigateTo($"/companies/{CompanyId}/workplaces");
|
||||
}
|
||||
|
|
|
@ -67,7 +67,7 @@
|
|||
<div class="col d-flex justify-content-center">
|
||||
@if (execLogin)
|
||||
{
|
||||
<LoaderThreeDots/>
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -53,4 +53,8 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<AdvisorCompanyTableComponent Companies="_companyList" />
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<AdvisorCompanyTableComponent CompanyList="_companyList" />
|
|
@ -30,13 +30,14 @@ public partial class OfficeCustomerListPage : IDisposable
|
|||
[Inject] public ILogger<OfficeCustomerListPage> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IOfficeCustomerHttpRepository CustomerRepo { get; set; }
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public UserPrefService UserPrefService { 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 UserPref UserPref { get; set; } = new();
|
||||
private string _savedSearch { get; set; } = "";
|
||||
private bool _includeFolded { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
|
@ -44,20 +45,21 @@ public partial class OfficeCustomerListPage : IDisposable
|
|||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
// set preferences
|
||||
_preferences = await PreferenceService.GetPreferences();
|
||||
UserPref = await UserPrefService.GetPreferences();
|
||||
|
||||
_paging.CountryCode = CountryCode;
|
||||
|
||||
_paging.OrderBy = _preferences.CompanySort;
|
||||
_paging.SearchColumn = _preferences.CompanySearch;
|
||||
_paging.PageSize = Convert.ToInt32(_preferences.PageSize);
|
||||
_paging.OrderBy = UserPref.CompanySort;
|
||||
_paging.SearchColumn = UserPref.CompanySearch;
|
||||
_paging.PageSize = Convert.ToInt32(UserPref.PageSize);
|
||||
_paging.HasFolded = _includeFolded ? 1 : 0;
|
||||
|
||||
// load saved search
|
||||
_savedSearch = _preferences.CompanyFilterPhrase;
|
||||
_savedSearch = UserPref.CompanyFilterPhrase;
|
||||
_paging.SearchTerm = _savedSearch;
|
||||
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task OnFoldedClick()
|
||||
|
@ -66,14 +68,14 @@ public partial class OfficeCustomerListPage : IDisposable
|
|||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageNumber = 1;
|
||||
_paging.HasFolded = _includeFolded ? 1 : 0;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SelectedPage(int page)
|
||||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageNumber = page;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SetSearchCol(string searchColumn)
|
||||
|
@ -81,14 +83,14 @@ public partial class OfficeCustomerListPage : IDisposable
|
|||
_companyList = new List<CompanyDto>();
|
||||
_paging.SearchColumn = searchColumn;
|
||||
_paging.PageNumber = 1;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
private async Task SetPageSize(string pageSize)
|
||||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageSize = Convert.ToInt32(pageSize);
|
||||
_paging.PageNumber = 1;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SetSearchPhrase(string searchTerm)
|
||||
|
@ -98,11 +100,11 @@ public partial class OfficeCustomerListPage : IDisposable
|
|||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageNumber = 1;
|
||||
_paging.SearchTerm = searchTerm;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
if (!string.IsNullOrWhiteSpace(searchTerm) && searchTerm.TrimEnd().Length > 2)
|
||||
{
|
||||
_savedSearch = searchTerm;
|
||||
await PreferenceService.SetCompanyFilterPhrase(searchTerm.Trim());
|
||||
await UserPrefService.SetCompanyFilterPhrase(searchTerm.Trim());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -110,14 +112,16 @@ public partial class OfficeCustomerListPage : IDisposable
|
|||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.OrderBy = orderBy;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task GetCompanies()
|
||||
private async Task FetchCompanies()
|
||||
{
|
||||
Working = true;
|
||||
var pagingResponse = await CustomerRepo.GetCompaniesPagedSalesRep(UserId, _paging);
|
||||
_companyList = pagingResponse.Items;
|
||||
_metaData = pagingResponse.MetaData;
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
@ -52,5 +52,8 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<OfficeCustomerTableComponent Companies="_companyList" />
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<OfficeCustomerTableComponent CompanyList="_companyList" />
|
|
@ -30,13 +30,14 @@ public partial class OfficeCustomerSalesRepListPage : IDisposable
|
|||
[Inject] public ILogger<OfficeCustomerSalesRepListPage> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IOfficeCustomerHttpRepository CustomerRepo { get; set; }
|
||||
[Inject] public PreferenceService PreferenceService { get; set; }
|
||||
[Inject] public UserPrefService UserPrefService { 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 UserPref UserPref { get; set; } = new();
|
||||
private string _savedSearch { get; set; } = "";
|
||||
private bool _includeFolded { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
|
@ -44,18 +45,19 @@ public partial class OfficeCustomerSalesRepListPage : IDisposable
|
|||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
// set preferences
|
||||
_preferences = await PreferenceService.GetPreferences();
|
||||
UserPref = await UserPrefService.GetPreferences();
|
||||
_paging.CountryCode = CountryCode;
|
||||
_paging.OrderBy = _preferences.CompanySort;
|
||||
_paging.SearchColumn = _preferences.CompanySearch;
|
||||
_paging.PageSize = Convert.ToInt32(_preferences.PageSize);
|
||||
_paging.OrderBy = UserPref.CompanySort;
|
||||
_paging.SearchColumn = UserPref.CompanySearch;
|
||||
_paging.PageSize = Convert.ToInt32(UserPref.PageSize);
|
||||
_paging.HasFolded = _includeFolded ? 1 : 0;
|
||||
|
||||
// load saved search
|
||||
_savedSearch = _preferences.CompanyFilterPhrase;
|
||||
_savedSearch = UserPref.CompanyFilterPhrase;
|
||||
_paging.SearchTerm = _savedSearch;
|
||||
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task OnFoldedClick()
|
||||
|
@ -64,14 +66,14 @@ public partial class OfficeCustomerSalesRepListPage : IDisposable
|
|||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageNumber = 1;
|
||||
_paging.HasFolded = _includeFolded ? 1 : 0;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SelectedPage(int page)
|
||||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageNumber = page;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SetSearchCol(string searchColumn)
|
||||
|
@ -79,7 +81,7 @@ public partial class OfficeCustomerSalesRepListPage : IDisposable
|
|||
_companyList = new List<CompanyDto>();
|
||||
_paging.SearchColumn = searchColumn;
|
||||
_paging.PageNumber = 1;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SetPageSize(string pageSize)
|
||||
|
@ -87,7 +89,7 @@ public partial class OfficeCustomerSalesRepListPage : IDisposable
|
|||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageSize = Convert.ToInt32(pageSize);
|
||||
_paging.PageNumber = 1;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task SetSearchPhrase(string searchTerm)
|
||||
|
@ -97,11 +99,11 @@ public partial class OfficeCustomerSalesRepListPage : IDisposable
|
|||
_companyList = new List<CompanyDto>();
|
||||
_paging.PageNumber = 1;
|
||||
_paging.SearchTerm = searchTerm;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
if (!string.IsNullOrWhiteSpace(searchTerm) && searchTerm.TrimEnd().Length > 2)
|
||||
{
|
||||
_savedSearch = searchTerm;
|
||||
await PreferenceService.SetCompanyFilterPhrase(searchTerm.Trim());
|
||||
await UserPrefService.SetCompanyFilterPhrase(searchTerm.Trim());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -109,14 +111,16 @@ public partial class OfficeCustomerSalesRepListPage : IDisposable
|
|||
{
|
||||
_companyList = new List<CompanyDto>();
|
||||
_paging.OrderBy = orderBy;
|
||||
await GetCompanies();
|
||||
await FetchCompanies();
|
||||
}
|
||||
|
||||
private async Task GetCompanies()
|
||||
private async Task FetchCompanies()
|
||||
{
|
||||
Working = true;
|
||||
var pagingResponse = await CustomerRepo.GetCompaniesPagedSalesRep(UserId, _paging);
|
||||
_companyList = pagingResponse.Items;
|
||||
_metaData = pagingResponse.MetaData;
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
@attribute [Authorize(Roles = "Admin,Office,Warehouse")]
|
||||
@page "/office/customers/{CompanyId}/orders/new"
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<EditForm EditContext="_editContext">
|
||||
<DataAnnotationsValidator/>
|
||||
<div class="row mb-1">
|
||||
|
@ -186,7 +190,7 @@
|
|||
<div class="card-footer">
|
||||
@if (HideButton)
|
||||
{
|
||||
<LoaderThreeDots/>
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -53,6 +53,7 @@ public partial class OfficeOrderNewPage : IDisposable
|
|||
private bool Sas { get; set; }
|
||||
private bool FormInvalid { get; set; } = true;
|
||||
private bool HideButton { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
|
@ -107,6 +108,8 @@ public partial class OfficeOrderNewPage : IDisposable
|
|||
_activity.DlvZipCode = _company.ZipCode;
|
||||
_activity.DlvCity = _company.City;
|
||||
|
||||
Working = false;
|
||||
|
||||
}
|
||||
private void CallPriceListModal()
|
||||
{
|
||||
|
@ -128,7 +131,9 @@ public partial class OfficeOrderNewPage : IDisposable
|
|||
|
||||
private async Task CreateOrder()
|
||||
{
|
||||
Working = true;
|
||||
await CrmActivityRepo.CreateActivity(_activity);
|
||||
Working = false;
|
||||
}
|
||||
private async Task AddItem(SalesItemView salesItem)
|
||||
{
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
@attribute [Authorize(Roles = "Admin,Office,Warehouse,Advisor")]
|
||||
@page "/office/customers/{CompanyId}/orders/{OrderId}"
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<table class="table table-sm table-striped d-print-table">
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
|
@ -43,6 +43,7 @@ public partial class OfficeOrderViewPage : IDisposable
|
|||
[Inject] public IToastService Toast { get; set; }
|
||||
private ReportItemView _reportItem { get; set; } = new();
|
||||
private bool _isNotified { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
|
||||
{
|
||||
|
@ -55,6 +56,7 @@ public partial class OfficeOrderViewPage : IDisposable
|
|||
Interceptor.RegisterBeforeSendEvent();
|
||||
_reportItem = await ActivityRepo.GetReportItem(OrderId);
|
||||
Logger.LogDebug("ReportItem => \n {}", JsonSerializer.Serialize(_reportItem, _options));
|
||||
Working = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -62,6 +64,9 @@ public partial class OfficeOrderViewPage : IDisposable
|
|||
/// </summary>
|
||||
private async Task SetExpressState()
|
||||
{
|
||||
if (Working)
|
||||
return;
|
||||
Working = true;
|
||||
Logger.LogDebug("SetExpressState => \n {}", JsonSerializer.Serialize(_reportItem, _options));
|
||||
var responseView = await ActivityRepo.SetProcessStateExpress(_reportItem.ActivityId);
|
||||
Logger.LogDebug("SetExpressState => \n {}", responseView.Message );
|
||||
|
@ -69,6 +74,7 @@ public partial class OfficeOrderViewPage : IDisposable
|
|||
if (!responseView.IsSuccess)
|
||||
{
|
||||
Toast.ShowError(responseView.Message);
|
||||
Working = false;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -120,6 +126,7 @@ public partial class OfficeOrderViewPage : IDisposable
|
|||
}
|
||||
|
||||
_isNotified = true;
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
@ -20,6 +20,10 @@
|
|||
@attribute [Authorize(Roles = "Admin")]
|
||||
@page "/office/users/advisors/{CountryCode}/{UserId}/reports"
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
<div class="card">
|
||||
<div class="card-header bg-dark text-white">
|
||||
<div class="row">
|
||||
|
|
|
@ -29,6 +29,7 @@ public partial class OfficeReportListPage : IDisposable
|
|||
[Inject] public IOfficeReportHttpRepository _reportRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
private List<NgSalesReportListView> _reports { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
|
@ -36,6 +37,7 @@ public partial class OfficeReportListPage : IDisposable
|
|||
_interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
_reports = await _reportRepo.GetReports(UserId);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
@ -20,13 +20,18 @@
|
|||
@page "/office/users/advisors/{CountryCode}/{UserId}/reports/{ReportDate}"
|
||||
@attribute [Authorize(Roles = "Admin")]
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
|
||||
<div class="report-main">
|
||||
<div class="row mb-3 d-print-none">
|
||||
@* <div class="col-md-6 align-content-center"> *@
|
||||
@* <h3 class="workDate">@DateTime.Parse(ReportDate).ToLongDateString()</h3> *@
|
||||
@* </div> *@
|
||||
<div class="col col-md-6 align-content-center">
|
||||
<WorkDateComponent OnChangedCallback="GetReport" />
|
||||
<WorkDateComponent OnChangedCallback="FetchReport" />
|
||||
</div>
|
||||
<div class="col col-md-6 align-content-center">
|
||||
<button class="btn btn-warning" type="button" onclick="window.print();">Print</button>
|
||||
|
@ -51,7 +56,7 @@
|
|||
<ReportDistanceLedgerComponent ReportData="Report.ReportData" />
|
||||
</div>
|
||||
</div>
|
||||
<OfficeActivityTableComponent Activities="Report.ReportItems" />
|
||||
<OfficeActivityTableComponent ActivityList="Report.ReportItems" />
|
||||
<ReportActivityLedgerComponent ReportData="Report.ReportData" />
|
||||
}
|
||||
else
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue