release v0.94.1
This commit is contained in:
parent
e520a03666
commit
cb4cfce5bc
40 changed files with 176 additions and 160 deletions
|
@ -22,7 +22,8 @@
|
|||
{
|
||||
<div class="list-group-item list-group-item-action" style="cursor: pointer;">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-sm-4">@user.FullName</div>
|
||||
<div class="col-sm-1">@user.SalesRep</div>
|
||||
<div class="col-sm-3">@user.FullName</div>
|
||||
<div class="col-sm-2">@user.PhoneNumber</div>
|
||||
<div class="col-sm-2">
|
||||
<a class="btn btn-warning d-block" href="/office/users/advisors/@user.CountryCode.ToLower()/@user.UserId/reports">Rapporter</a>
|
||||
|
|
|
@ -36,7 +36,15 @@
|
|||
<div class="list-group-item">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-sm-4">
|
||||
@product.Description <span class="fw-bold">@(product.Discontinued ? "(UDGÅET)" : "")</span>
|
||||
<div class="position-relative">
|
||||
@product.Description
|
||||
@if (product.Discontinued)
|
||||
{
|
||||
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">Udgået</span>
|
||||
<span class="visually-hidden">Produktet er udgået</span>
|
||||
}
|
||||
</div>
|
||||
@* @product.Description <span class="fw-bold text-sm-start">@(product.Discontinued ? "(UDGÅET)" : "")</span> *@
|
||||
</div>
|
||||
<div class="col-sm-3">
|
||||
@product.Sku
|
||||
|
|
|
@ -33,7 +33,7 @@ namespace Wonky.Client.HttpInterceptors
|
|||
private readonly RefreshTokenService _refreshTokenService;
|
||||
private ILogger<HttpInterceptorService> _logger;
|
||||
private readonly ILocalStorageService _storage;
|
||||
private IAuthenticationService _authenticationService;
|
||||
private readonly IAuthenticationService _authenticationService;
|
||||
|
||||
public HttpInterceptorService(HttpClientInterceptor interceptor,
|
||||
NavigationManager navigation, IToastService toast,
|
||||
|
@ -49,25 +49,25 @@ namespace Wonky.Client.HttpInterceptors
|
|||
_authenticationService = authenticationService;
|
||||
}
|
||||
|
||||
public void RegisterEvent()
|
||||
public void RegisterAfterSendEvent()
|
||||
{
|
||||
_interceptor.AfterSend += AfterSend;
|
||||
_interceptor.AfterSend += InterceptorAfterSend;
|
||||
}
|
||||
|
||||
public void RegisterBeforeSendEvent()
|
||||
public void RegisterBeforeSendAsyncEvent()
|
||||
{
|
||||
_interceptor.BeforeSendAsync += InterceptBeforeSendAsync;
|
||||
}
|
||||
|
||||
public void DisposeEvent()
|
||||
{
|
||||
_interceptor.AfterSend -= AfterSend;
|
||||
_interceptor.AfterSend -= InterceptorAfterSend;
|
||||
_interceptor.BeforeSendAsync -= InterceptBeforeSendAsync;
|
||||
}
|
||||
|
||||
private async Task InterceptBeforeSendAsync(object sender, HttpClientInterceptorEventArgs e)
|
||||
{
|
||||
var absolutePath = e.Request.RequestUri.AbsolutePath;
|
||||
|
||||
if (!absolutePath.Contains("token"))
|
||||
{
|
||||
// call TryRefreshToken
|
||||
|
@ -81,12 +81,12 @@ namespace Wonky.Client.HttpInterceptors
|
|||
|
||||
}
|
||||
|
||||
private void AfterSend (object sender, HttpClientInterceptorEventArgs e)
|
||||
private void InterceptorAfterSend (object sender, HttpClientInterceptorEventArgs e)
|
||||
{
|
||||
if (e.Response == null || e.Response.IsSuccessStatusCode)
|
||||
return;
|
||||
|
||||
var message = "En ukendt fejl er opstået";
|
||||
var message = "En fejl er opstået";
|
||||
var currDoc = _navigation.ToBaseRelativePath(_navigation.Uri);
|
||||
if (currDoc.Contains("login/"))
|
||||
currDoc = "";
|
||||
|
@ -94,12 +94,10 @@ namespace Wonky.Client.HttpInterceptors
|
|||
switch (e.Response.StatusCode)
|
||||
{
|
||||
case HttpStatusCode.NotFound:
|
||||
// message = "Der var ingen data ...";
|
||||
// _toast.ShowInfo(message);
|
||||
_logger.LogDebug("NotFound <= {}", currDoc);
|
||||
break;
|
||||
case HttpStatusCode.BadRequest:
|
||||
// message = "Der er et problem med data ...";
|
||||
// _toast.ShowWarning(message);
|
||||
_logger.LogDebug("BadRequest <= {}", currDoc);
|
||||
break;
|
||||
case HttpStatusCode.Unauthorized:
|
||||
_authenticationService.Logout();
|
||||
|
@ -108,10 +106,12 @@ namespace Wonky.Client.HttpInterceptors
|
|||
_toast.ShowInfo(message);
|
||||
break;
|
||||
case HttpStatusCode.Conflict:
|
||||
_logger.LogDebug("Conflict <= {}", currDoc);
|
||||
break;
|
||||
case HttpStatusCode.InternalServerError:
|
||||
// message = "Der er interne problemer på serveren ...";
|
||||
// _toast.ShowError(message);
|
||||
_logger.LogDebug("InternalServerError <= {}", currDoc);
|
||||
break;
|
||||
default:
|
||||
_toast.ShowError(message);
|
||||
|
|
|
@ -56,7 +56,13 @@ public class AdvisorActivityRepository : IAdvisorActivityRepository
|
|||
/// <returns>List of Activities with ActivityStatus == Quote</returns>
|
||||
public async Task<List<ReportItemView>> GetQuotes()
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<ReportItemView>>($"{_api.CrmActivities}/quotes", _options);
|
||||
var result = await _client.GetAsync($"{_api.CrmActivities}/quotes");
|
||||
if (!result.IsSuccessStatusCode)
|
||||
return new List<ReportItemView>();
|
||||
var content = await result.Content.ReadAsStringAsync();
|
||||
return string.IsNullOrWhiteSpace(content)
|
||||
? new List<ReportItemView>()
|
||||
: JsonSerializer.Deserialize<List<ReportItemView>>(content, _options);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -65,7 +65,13 @@ public class AdvisorReportRepository : IAdvisorReportRepository
|
|||
/// <returns></returns>
|
||||
public async Task<List<SalesReportListView>> GetReports()
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<SalesReportListView>>($"{_apiConfig.CrmReports}");
|
||||
var result = await _client.GetAsync($"{_apiConfig.CrmReports}");
|
||||
if (!result.IsSuccessStatusCode)
|
||||
return new List<SalesReportListView>();
|
||||
var content = await result.Content.ReadAsStringAsync();
|
||||
return string.IsNullOrWhiteSpace(content)
|
||||
? new List<SalesReportListView>()
|
||||
: JsonSerializer.Deserialize<List<SalesReportListView>>(content, _options);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -75,7 +81,8 @@ public class AdvisorReportRepository : IAdvisorReportRepository
|
|||
/// <returns></returns>
|
||||
public async Task<ReportView> GetReport(string workDate)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.CrmReports}/{workDate}");
|
||||
var result = await _client.GetFromJsonAsync<ReportView>($"{_apiConfig.CrmReports}/{workDate}");
|
||||
return result ?? new ReportView();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -40,8 +40,8 @@ public partial class AdminReportListPage : IDisposable
|
|||
/// </summary>
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
UserInfo = await SystemUserRepo.GetAdvisorInfo(UserId);
|
||||
while (string.IsNullOrWhiteSpace(UserInfo.UserId))
|
||||
|
|
|
@ -88,8 +88,8 @@ public partial class AdminReportViewPage : IDisposable
|
|||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
ProfileService.OnChange += ProfileServiceOnOnChange;
|
||||
await ProfileService.SetWorkDate(DateTime.Parse(ReportDate));
|
||||
|
|
|
@ -15,8 +15,8 @@ public partial class AdminSalesRepListPage
|
|||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
var AdvisorList = await SystemUserRepo.GetAdvisors();
|
||||
SalesReps = AdvisorList
|
||||
.Where(x => x.CountryCode.ToLower() == CountryCode && Convert.ToInt32(x.SalesRep) < 100)
|
||||
|
|
|
@ -51,8 +51,8 @@ public partial class AdvisorCatalogPage : IDisposable
|
|||
_page.SearchColumn = Prefs.ItemSearch;
|
||||
_page.PageSize = Convert.ToInt32(Prefs.PageSize);
|
||||
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
await FetchSalesItems();
|
||||
}
|
||||
|
|
|
@ -88,8 +88,8 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
ActivityContext.OnFieldChanged += HandleFieldChanged;
|
||||
ActivityContext.OnValidationStateChanged += ValidationChanged;
|
||||
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
// User Preferences
|
||||
UserPrefs = await Profiles.GetPreferences();
|
||||
// User Info
|
||||
|
|
|
@ -79,8 +79,8 @@ namespace Wonky.Client.Pages
|
|||
Company.LastVisit = $"{LastVisit:yyyy-MM-dd}";
|
||||
Company.NextVisit = $"{NextVisit:yyyy-MM-dd}";
|
||||
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -37,8 +37,8 @@ public partial class AdvisorCustomerActivityListPage : IDisposable
|
|||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
_interceptor.RegisterAfterSendEvent();
|
||||
_interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
Company = await CompanyRepo.GetCompanyById(CompanyId);
|
||||
await GetActivities();
|
||||
|
|
|
@ -25,18 +25,18 @@
|
|||
<h4 class="pt-1">@Company.Name</h4>
|
||||
</div>
|
||||
<div class="col-sm-3 align-content-end">
|
||||
<a class="btn btn-primary d-block" href="/customers/@Company.CompanyId"><i class="bi-arrow-left"></i> Kundekort</a>
|
||||
<a class="btn btn-primary d-block" href="/customers/@CompanyId"><i class="bi-arrow-left"></i> Kundekort</a>
|
||||
</div>
|
||||
<div class="col-sm-3 align-content-end">
|
||||
<a class="btn btn-primary d-block" href="/customers/@Company.CompanyId/activities/new"><i class="bi-arrow-right"></i> Nyt Besøg</a>
|
||||
<a class="btn btn-primary d-block" href="/customers/@CompanyId/activities/new"><i class="bi-arrow-right"></i> Nyt Besøg</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<CustomerInventoryListComponent OnReorderSelected="OnReorderCallback" CompanyId="@CompanyId" Inventory="@Inventory" />
|
||||
<CustomerInventoryListComponent OnReorderSelected="OnReorderCallback" CompanyId="@CompanyId" Inventory="@Inventory"/>
|
||||
|
||||
<InventoryReorderModal OnSelected="@OnSelectedItem" CompanyId="@CompanyId" SalesItem="@SalesItem" @ref="ReorderModal"/>
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots />
|
||||
}
|
||||
<WorkingThreeDots/>
|
||||
}
|
|
@ -13,15 +13,12 @@
|
|||
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||
//
|
||||
|
||||
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using Blazored.LocalStorage;
|
||||
using Blazored.Toast.Services;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Wonky.Client.HttpInterceptors;
|
||||
using Wonky.Client.HttpInterfaces;
|
||||
using Wonky.Client.HttpRepository;
|
||||
using Wonky.Client.Models;
|
||||
using Wonky.Client.Shared;
|
||||
using Wonky.Entity.DTO;
|
||||
|
@ -38,47 +35,29 @@ public partial class AdvisorCustomerInventoryListPage : IDisposable
|
|||
[Inject] public ILogger<AdvisorCustomerInventoryListPage> Logger { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public IAdvisorCatalogRepository AdvisorCatalogRepo { get; set; }
|
||||
|
||||
|
||||
[CascadingParameter] public DraftStateProvider DraftStateProvider { get; set; } = new();
|
||||
[Parameter] public string CompanyId { get; set; } = "";
|
||||
|
||||
private JsonSerializerOptions _options = new JsonSerializerOptions(JsonSerializerDefaults.Web);
|
||||
private CompanyDto Company { get; set; } = new();
|
||||
private List<ProductInventoryView> Inventory { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
private SalesItemView SalesItem { get; set; } = new();
|
||||
private string Price { get; set; } = "0";
|
||||
private string Quantity { get; set; } = "1";
|
||||
private string Sku { get; set; } = "";
|
||||
private InventoryReorderModal ReorderModal { get; set; } = new();
|
||||
private SelectedSku Item { get; set; } = new();
|
||||
|
||||
|
||||
private readonly JsonSerializerOptions _options = new JsonSerializerOptions(JsonSerializerDefaults.Web);
|
||||
private CompanyDto Company { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
private SalesItemView SalesItem { get; set; } = new();
|
||||
private InventoryReorderModal ReorderModal { get; set; } = new();
|
||||
private List<ProductInventoryView> Inventory { get; set; } = new();
|
||||
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
Company = await CompanyRepo.GetCompanyById(CompanyId);
|
||||
|
||||
while (string.IsNullOrWhiteSpace(Company.HistorySync))
|
||||
{
|
||||
await Task.Delay(500);
|
||||
}
|
||||
|
||||
var pDate = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-pDate");
|
||||
if (string.IsNullOrWhiteSpace(pDate) || (pDate == Company.HistorySync && pDate != $"{DateTime.Now:yyyy-MM-dd}"))
|
||||
{
|
||||
var ts = await HistoryRepo.ErpInvoiceToCrmRpc(CompanyId, Company.HistorySync);
|
||||
while (string.IsNullOrWhiteSpace(ts))
|
||||
{
|
||||
await Task.Delay(1000);
|
||||
}
|
||||
await Storage.SetItemAsync($"{Company.CompanyId}-pDate", ts);
|
||||
}
|
||||
// fetch product inventory
|
||||
Inventory = await FetchProductInventory();
|
||||
Logger.LogDebug("CustomerProductListCrmPage => Inventory <= {}", JsonSerializer.Serialize(Inventory, _options));
|
||||
await FetchProductInventory();
|
||||
|
||||
Working = false;
|
||||
}
|
||||
|
||||
|
@ -98,25 +77,30 @@ public partial class AdvisorCustomerInventoryListPage : IDisposable
|
|||
await DraftStateProvider.SaveChangesAsync();
|
||||
}
|
||||
|
||||
private async Task<List<ProductInventoryView>> FetchProductInventory()
|
||||
private async Task FetchProductInventory()
|
||||
{
|
||||
var storage = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-products");
|
||||
Inventory = new List<ProductInventoryView>();
|
||||
|
||||
var pStorage = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-products");
|
||||
var pDate = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-pDate");
|
||||
var local = !string.IsNullOrWhiteSpace(pStorage) && !string.IsNullOrWhiteSpace(pDate);
|
||||
// if we have a list and pDate was today return the list
|
||||
if (!string.IsNullOrWhiteSpace(storage) || DateTime.Parse(pDate.Replace("\"", "")) >= DateTime.Now)
|
||||
if (local && pDate.Replace("\"", "") == $"{DateTime.Now:yyyy-MM-dd}")
|
||||
{
|
||||
Logger.LogDebug("return products from storage");
|
||||
return JsonSerializer.Deserialize<List<ProductInventoryView>>(storage);
|
||||
Inventory = JsonSerializer.Deserialize<List<ProductInventoryView>>(pStorage);
|
||||
Logger.LogDebug("CustomerProductListCrmPage => Inventory <= {}", JsonSerializer.Serialize(Inventory, _options));
|
||||
}
|
||||
Logger.LogDebug("pulling products from backend");
|
||||
// fetch product history
|
||||
var inventory = await HistoryRepo.FetchInventory(CompanyId);
|
||||
Inventory = await HistoryRepo.FetchInventory(CompanyId);
|
||||
// default sort order by description
|
||||
inventory = inventory.Any() ? inventory.OrderBy(x => x.Description).ToList() : new List<ProductInventoryView>();
|
||||
if (Inventory.Any())
|
||||
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||
// send products to storage
|
||||
await Storage.SetItemAsync($"{Company.CompanyId}-products", inventory);
|
||||
Logger.LogDebug("return products from backend");
|
||||
return inventory;
|
||||
await Storage.SetItemAsync($"{Company.CompanyId}-products", Inventory);
|
||||
await Storage.SetItemAsync($"{Company.CompanyId}-pDate", $"{DateTime.Now:yyyy-MM-dd}");
|
||||
Logger.LogDebug("Loaded products from backend");
|
||||
Logger.LogDebug("CustomerProductListCrmPage => Inventory <= {}", JsonSerializer.Serialize(Inventory, _options));
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
@ -37,25 +37,25 @@ public partial class AdvisorCustomerInvoiceListPage : IDisposable
|
|||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
Company = await CompanyRepo.GetCompanyById(_companyId);
|
||||
|
||||
while (string.IsNullOrWhiteSpace(Company.HistorySync))
|
||||
await Task.Delay(500);
|
||||
|
||||
var iDate = await Storage.GetItemAsStringAsync($"{_companyId}-iDate");
|
||||
if (string.IsNullOrWhiteSpace(iDate) || (iDate == Company.HistorySync && iDate != $"{DateTime.Now:yyyy-MM-dd}"))
|
||||
{
|
||||
// send rpc to sync invoices from ERP to CRM
|
||||
var ts = await HistoryRepo.ErpInvoiceToCrmRpc(_companyId, Company.HistorySync);
|
||||
// wait until we have the result
|
||||
while (string.IsNullOrWhiteSpace(ts))
|
||||
await Task.Delay(500);
|
||||
|
||||
await Storage.SetItemAsync($"{_companyId}-iDate", ts);
|
||||
}
|
||||
// while (string.IsNullOrWhiteSpace(Company.HistorySync))
|
||||
// await Task.Delay(500);
|
||||
//
|
||||
// var iDate = await Storage.GetItemAsStringAsync($"{_companyId}-iDate");
|
||||
// if (string.IsNullOrWhiteSpace(iDate) || (iDate == Company.HistorySync && iDate != $"{DateTime.Now:yyyy-MM-dd}"))
|
||||
// {
|
||||
// // send rpc to sync invoices from ERP to CRM
|
||||
// var ts = await HistoryRepo.ErpInvoiceToCrmRpc(_companyId, Company.HistorySync);
|
||||
// // wait until we have the result
|
||||
// while (string.IsNullOrWhiteSpace(ts))
|
||||
// await Task.Delay(500);
|
||||
//
|
||||
// await Storage.SetItemAsync($"{_companyId}-iDate", ts);
|
||||
// }
|
||||
CompanyInvoices = await FetchCompanyInvoices();
|
||||
AllSet = true;
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ public partial class AdvisorCustomerInvoiceListPage : IDisposable
|
|||
// if we have a list and iDate was today return the list
|
||||
if (!string.IsNullOrWhiteSpace(storage) && (!string.IsNullOrWhiteSpace(iDate) && DateTime.Parse(iDate.Replace("\"", "")) >= DateTime.Now))
|
||||
{
|
||||
Logger.LogDebug("return invoices from storage");
|
||||
Logger.LogDebug("fetching invoices from storage");
|
||||
return JsonSerializer.Deserialize<InvoiceListView>(storage);
|
||||
}
|
||||
Logger.LogDebug("pulling invoices from backend");
|
||||
|
@ -83,6 +83,7 @@ public partial class AdvisorCustomerInvoiceListPage : IDisposable
|
|||
var invoices = await HistoryRepo.FetchInvoiceList(_companyId);
|
||||
// send invoices to storage
|
||||
await Storage.SetItemAsync($"{_companyId}-invoices", invoices);
|
||||
await Storage.SetItemAsync($"{_companyId}-iDate", $"{DateTime.Now:yyyy-MM-dd}");
|
||||
Logger.LogDebug("return invoices from backend");
|
||||
Working = false;
|
||||
return invoices;
|
||||
|
|
|
@ -46,8 +46,8 @@ namespace Wonky.Client.Pages
|
|||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -52,8 +52,8 @@ public partial class AdvisorCustomerOrderViewPage : IDisposable
|
|||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
// fetch order from backend
|
||||
_reportItem = await AdvisorActivityRepo.GetReportItem(OrderId);
|
||||
Logger.LogDebug("ReportItem => \n {}", JsonSerializer.Serialize(_reportItem, _options));
|
||||
|
|
|
@ -166,7 +166,7 @@
|
|||
</div>
|
||||
</div>
|
||||
@* crm context - contacts *@
|
||||
<div class="row mb-2">
|
||||
<div class="row mb-4">
|
||||
<label for="contacts" class="col-sm-1 col-form-label-sm">Kontakt</label>
|
||||
<div id="contacts" class="col-sm-11">
|
||||
<div class="list-group">
|
||||
|
|
|
@ -69,8 +69,8 @@ public partial class AdvisorCustomerViewPage : IDisposable
|
|||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
// setup interceptor
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
// initialize default contact
|
||||
DefaultContact = new ContactDto { CompanyId = CompanyId, ContactId = "", FirstName = ""};
|
||||
|
@ -138,7 +138,9 @@ public partial class AdvisorCustomerViewPage : IDisposable
|
|||
CompanyVatAddress = PrepareVatAddress(Company);
|
||||
|
||||
await FetchContacts(CompanyId);
|
||||
|
||||
|
||||
var ts = await HistoryRepo.ErpInvoiceToCrmRpc(CompanyId, Company.HistorySync);
|
||||
|
||||
// remove loading image
|
||||
Working = false;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.IO.Enumeration;
|
||||
using System.Security.Policy;
|
||||
using System.Text.Json;
|
||||
using Blazored.LocalStorage;
|
||||
|
@ -22,18 +23,20 @@ public partial class AdvisorQuoteListPage : IDisposable
|
|||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
private List<ReportItemView> Quotes { get; set; } = new();
|
||||
private List<ReportItemView> _quotes { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
private bool Working { get; set; }
|
||||
private QStatus QFilter { get; set; } = QStatus.NoteOpen;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
Working = true;
|
||||
Quotes = await AdvisorActivityRepo.GetQuotes();
|
||||
await Storage.SetItemAsync("quotes", Quotes.OrderBy(x => x.Company.Name));
|
||||
Working = false;
|
||||
// filter quotes - if any - default to QStatus.NoteOpen
|
||||
if (Quotes.Any())
|
||||
await FilterQuotes(QFilter);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task FilterQuotes(QStatus status)
|
||||
|
@ -53,29 +56,31 @@ public partial class AdvisorQuoteListPage : IDisposable
|
|||
|
||||
private async Task UpdateQuoteCallback(QuoteCallbackArgs args)
|
||||
{
|
||||
Working = true;
|
||||
// find the quote to update
|
||||
var quote = Quotes.First(x => x.ESalesNumber == args.ESalesNumber);
|
||||
if (args.Status == QStatus.Win)
|
||||
quote.OrderDate = $"{DateTime.Now:yyyy-MM-dd}";
|
||||
quote.QuoteStatusEnum = Utils.EnumToString(args.Status);
|
||||
// send update request to backend
|
||||
var response = await AdvisorActivityRepo.UpdateQuoteStatus(quote);
|
||||
Toaster.ShowInfo($"{response.Message}", $"HTTP STATUS {response.Code}");
|
||||
|
||||
// clear and reload quotes
|
||||
Quotes = new List<ReportItemView>();
|
||||
await Storage.RemoveItemAsync("quotes");
|
||||
Quotes = await AdvisorActivityRepo.GetQuotes();
|
||||
while (!Quotes.Any())
|
||||
await Task.Delay(1000);
|
||||
|
||||
// store quotes in local storage
|
||||
await Storage.SetItemAsync("quotes", Quotes.OrderBy(x => x.Company.Name));
|
||||
|
||||
await FilterQuotes(QFilter);
|
||||
|
||||
// filter quotes - if any - based on active filter
|
||||
if(Quotes.Any())
|
||||
await FilterQuotes(QFilter);
|
||||
Working = false;
|
||||
// signal page state changed
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Storage.RemoveItemAsync("quotes");
|
||||
Interceptor.DisposeEvent();
|
||||
}
|
||||
}
|
|
@ -57,8 +57,8 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
/// </summary>
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
ReportContext = new EditContext(Report);
|
||||
ReportContext.OnFieldChanged += HandleFieldChanged;
|
||||
|
|
|
@ -30,15 +30,17 @@ public partial class AdvisorReportListPage : IDisposable
|
|||
[Inject] public ILogger<AdvisorReportListPage> Logger { get; set; }
|
||||
|
||||
private List<SalesReportListView> ReportList { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
private bool Working { get; set; }
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
|
||||
Working = true;
|
||||
|
||||
ReportList = await AdvisorReportRepo.GetReports();
|
||||
if (ReportList.Any())
|
||||
var reports = await AdvisorReportRepo.GetReports();
|
||||
if (reports.Any())
|
||||
ReportList = ReportList.OrderByDescending(x => x.ReportDate).ToList();
|
||||
|
||||
Working = false;
|
||||
|
|
|
@ -42,8 +42,8 @@ public partial class AdvisorReportViewPage : IDisposable
|
|||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
|
||||
|
|
|
@ -45,8 +45,8 @@ public partial class AdvisorTaskItemListCrmPage : IDisposable
|
|||
if(!string.IsNullOrWhiteSpace(Prefs.WorkDate))
|
||||
WorkDate = Prefs.WorkDate;
|
||||
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
await GetTaskItems(WorkDate);
|
||||
Working = false;
|
||||
}
|
||||
|
|
|
@ -36,8 +36,8 @@ public partial class AdvisorTaskItemViewCrmPage : IDisposable
|
|||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
_interceptor.RegisterAfterSendEvent();
|
||||
_interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
_taskItem = await AdvisorTaskRepo.GetTaskItem(TaskItemId);
|
||||
Console.WriteLine(JsonSerializer.Serialize(_taskItem));
|
||||
|
|
|
@ -42,8 +42,8 @@ public partial class AdvisorTodayActivityListPage : IDisposable
|
|||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
UserPref = await UserProfileService.GetPreferences();
|
||||
SelectedDate = string.IsNullOrWhiteSpace(UserPref.WorkDate) ? DateTime.Now : DateTime.Parse(UserPref.WorkDate);
|
||||
ReportExist = await AdvisorReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}");
|
||||
|
|
|
@ -47,8 +47,8 @@ public partial class AdvisorViewActivityPage : IDisposable
|
|||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
NoteContext = new EditContext(Note);
|
||||
NoteContext.OnFieldChanged += HandleFieldChanged;
|
||||
ReportItem = await AdvisorActivityRepo.GetReportItem(OrderId);
|
||||
|
|
|
@ -36,8 +36,8 @@ public partial class AdvisorWorkplaceListPage : IDisposable
|
|||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
_interceptor.RegisterAfterSendEvent();
|
||||
_interceptor.RegisterBeforeSendAsyncEvent();
|
||||
_company = await _companyRepo.GetCompanyById(CompanyId);
|
||||
Working = false;
|
||||
}
|
||||
|
|
|
@ -39,8 +39,8 @@ public partial class AdvisorWorkplaceViewPage : IDisposable
|
|||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
_interceptor.RegisterAfterSendEvent();
|
||||
_interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
_workplace = await WorkplaceCrmRepo.GetWorkplace(CompanyId, WorkplaceId);
|
||||
Working = false;
|
||||
|
|
|
@ -53,8 +53,8 @@ public partial class BackendAdminSalesRepViewPage : IDisposable
|
|||
_editContext = new EditContext(_updateInfo);
|
||||
_passwdContext = new EditContext(_passwords);
|
||||
|
||||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
_interceptor.RegisterAfterSendEvent();
|
||||
_interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
UserInfo = await SystemUserRepo.GetAdvisorInfo(UserId);
|
||||
|
||||
|
|
|
@ -48,8 +48,8 @@ public partial class CountryCatalogPage : IDisposable
|
|||
Paging.SearchColumn = Prefs.ItemSearch;
|
||||
Paging.PageSize = Convert.ToInt32(Prefs.PageSize);
|
||||
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
await FetchSalesItems();
|
||||
}
|
||||
|
|
|
@ -47,8 +47,8 @@ namespace Wonky.Client.Pages
|
|||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
// set preferences
|
||||
Prefs = await ProfileService.GetPreferences();
|
||||
|
|
|
@ -41,8 +41,8 @@ public partial class CountryPrintCatalogPage : IDisposable
|
|||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
|
||||
Items = await Catalog.GetPriceList(CountryCode);
|
||||
|
|
|
@ -40,7 +40,7 @@ public partial class CountrySalesRepCustomerListPage : IDisposable
|
|||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
Interceptor.DisposeEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
// set preferences
|
||||
UserPref = await UserProfileService.GetPreferences();
|
||||
|
|
|
@ -40,8 +40,8 @@ public partial class PrintCatalogPage : IDisposable
|
|||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
|
||||
Items = await ItemRepo.GetPriceList();
|
||||
|
|
|
@ -20,8 +20,8 @@ public partial class WarehouseOrderListPage : IDisposable
|
|||
private bool ReadyToShip { get; set; }
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
OrderList = await FetchOrders(Status);
|
||||
}
|
||||
|
||||
|
|
|
@ -39,8 +39,8 @@ public partial class WarehouseOrderViewPage : IDisposable
|
|||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
if (!string.IsNullOrWhiteSpace(OrderId))
|
||||
Order = await WarehouseRepo.GetWarehouseOrder(OrderId);
|
||||
|
||||
|
|
|
@ -37,8 +37,8 @@ public partial class InvoiceViewModal : IDisposable
|
|||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(InvoiceId))
|
||||
{
|
||||
|
|
|
@ -45,8 +45,8 @@ public partial class PriceListModal : IDisposable
|
|||
_paging.OrderBy = _userPref.ItemSort;
|
||||
_paging.SearchColumn = _userPref.ItemSearch;
|
||||
_paging.PageSize = Convert.ToInt32(_userPref.PageSize);
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
Interceptor.RegisterAfterSendEvent();
|
||||
Interceptor.RegisterBeforeSendAsyncEvent();
|
||||
await GetSalesItems();
|
||||
}
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
{
|
||||
"appInfo": {
|
||||
"name": "Wonky Client",
|
||||
"version": "0.92.1",
|
||||
"version": "0.94.1",
|
||||
"rc": true,
|
||||
"sandBox": false,
|
||||
"image": "grumpy-coder.png"
|
||||
},
|
||||
"apiConfig": {
|
||||
"baseUrl": "https://dev.innotec.dk",
|
||||
"baseUrl": "https://zeta.innotec.dk",
|
||||
"catalog": "api/v2/catalog",
|
||||
"crmCustomers": "api/v2/crm/companies",
|
||||
"crmInventoryExt": "history/inventory",
|
||||
|
|
Loading…
Reference in a new issue