diff --git a/Wonky.Client/Components/CountrySalesRepListComponent.razor b/Wonky.Client/Components/CountrySalesRepListComponent.razor index 45fae0fa..c3afd16f 100644 --- a/Wonky.Client/Components/CountrySalesRepListComponent.razor +++ b/Wonky.Client/Components/CountrySalesRepListComponent.razor @@ -22,7 +22,8 @@ {
-
@user.FullName
+
@user.SalesRep
+
@user.FullName
@user.PhoneNumber
Rapporter diff --git a/Wonky.Client/Components/CustomerInventoryListComponent.razor b/Wonky.Client/Components/CustomerInventoryListComponent.razor index bdad3472..35dd233b 100644 --- a/Wonky.Client/Components/CustomerInventoryListComponent.razor +++ b/Wonky.Client/Components/CustomerInventoryListComponent.razor @@ -36,7 +36,15 @@
- @product.Description @(product.Discontinued ? "(UDGÅET)" : "") +
+ @product.Description + @if (product.Discontinued) + { + Udgået + Produktet er udgået + } +
+ @* @product.Description @(product.Discontinued ? "(UDGÅET)" : "") *@
@product.Sku diff --git a/Wonky.Client/HttpInterceptors/HttpInterceptorService.cs b/Wonky.Client/HttpInterceptors/HttpInterceptorService.cs index d54f6692..1e50dc43 100644 --- a/Wonky.Client/HttpInterceptors/HttpInterceptorService.cs +++ b/Wonky.Client/HttpInterceptors/HttpInterceptorService.cs @@ -33,7 +33,7 @@ namespace Wonky.Client.HttpInterceptors private readonly RefreshTokenService _refreshTokenService; private ILogger _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); diff --git a/Wonky.Client/HttpRepository/AdvisorActivityRepository.cs b/Wonky.Client/HttpRepository/AdvisorActivityRepository.cs index 32ffa493..098a089c 100644 --- a/Wonky.Client/HttpRepository/AdvisorActivityRepository.cs +++ b/Wonky.Client/HttpRepository/AdvisorActivityRepository.cs @@ -56,7 +56,13 @@ public class AdvisorActivityRepository : IAdvisorActivityRepository /// List of Activities with ActivityStatus == Quote public async Task> GetQuotes() { - return await _client.GetFromJsonAsync>($"{_api.CrmActivities}/quotes", _options); + var result = await _client.GetAsync($"{_api.CrmActivities}/quotes"); + if (!result.IsSuccessStatusCode) + return new List(); + var content = await result.Content.ReadAsStringAsync(); + return string.IsNullOrWhiteSpace(content) + ? new List() + : JsonSerializer.Deserialize>(content, _options); } /// diff --git a/Wonky.Client/HttpRepository/AdvisorReportRepository.cs b/Wonky.Client/HttpRepository/AdvisorReportRepository.cs index eae15ed2..515575d4 100644 --- a/Wonky.Client/HttpRepository/AdvisorReportRepository.cs +++ b/Wonky.Client/HttpRepository/AdvisorReportRepository.cs @@ -65,7 +65,13 @@ public class AdvisorReportRepository : IAdvisorReportRepository /// public async Task> GetReports() { - return await _client.GetFromJsonAsync>($"{_apiConfig.CrmReports}"); + var result = await _client.GetAsync($"{_apiConfig.CrmReports}"); + if (!result.IsSuccessStatusCode) + return new List(); + var content = await result.Content.ReadAsStringAsync(); + return string.IsNullOrWhiteSpace(content) + ? new List() + : JsonSerializer.Deserialize>(content, _options); } /// @@ -75,7 +81,8 @@ public class AdvisorReportRepository : IAdvisorReportRepository /// public async Task GetReport(string workDate) { - return await _client.GetFromJsonAsync($"{_apiConfig.CrmReports}/{workDate}"); + var result = await _client.GetFromJsonAsync($"{_apiConfig.CrmReports}/{workDate}"); + return result ?? new ReportView(); } /// diff --git a/Wonky.Client/Pages/AdminReportListPage.razor.cs b/Wonky.Client/Pages/AdminReportListPage.razor.cs index fe7abf87..682bf8a3 100644 --- a/Wonky.Client/Pages/AdminReportListPage.razor.cs +++ b/Wonky.Client/Pages/AdminReportListPage.razor.cs @@ -40,8 +40,8 @@ public partial class AdminReportListPage : IDisposable /// protected override async Task OnParametersSetAsync() { - Interceptor.RegisterEvent(); - Interceptor.RegisterBeforeSendEvent(); + Interceptor.RegisterAfterSendEvent(); + Interceptor.RegisterBeforeSendAsyncEvent(); UserInfo = await SystemUserRepo.GetAdvisorInfo(UserId); while (string.IsNullOrWhiteSpace(UserInfo.UserId)) diff --git a/Wonky.Client/Pages/AdminReportViewPage.razor.cs b/Wonky.Client/Pages/AdminReportViewPage.razor.cs index 4c429c78..d7dbb1a6 100644 --- a/Wonky.Client/Pages/AdminReportViewPage.razor.cs +++ b/Wonky.Client/Pages/AdminReportViewPage.razor.cs @@ -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)); diff --git a/Wonky.Client/Pages/AdminSalesRepListPage.razor.cs b/Wonky.Client/Pages/AdminSalesRepListPage.razor.cs index 7a56e6ec..84cde004 100644 --- a/Wonky.Client/Pages/AdminSalesRepListPage.razor.cs +++ b/Wonky.Client/Pages/AdminSalesRepListPage.razor.cs @@ -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) diff --git a/Wonky.Client/Pages/AdvisorCatalogPage.razor.cs b/Wonky.Client/Pages/AdvisorCatalogPage.razor.cs index ef9426af..906390b2 100644 --- a/Wonky.Client/Pages/AdvisorCatalogPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCatalogPage.razor.cs @@ -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(); } diff --git a/Wonky.Client/Pages/AdvisorCreateActivityPage.razor.cs b/Wonky.Client/Pages/AdvisorCreateActivityPage.razor.cs index 55a4eca3..2178004e 100644 --- a/Wonky.Client/Pages/AdvisorCreateActivityPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCreateActivityPage.razor.cs @@ -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 diff --git a/Wonky.Client/Pages/AdvisorCreateCustomerPage.razor.cs b/Wonky.Client/Pages/AdvisorCreateCustomerPage.razor.cs index 9f116c88..06c501f1 100644 --- a/Wonky.Client/Pages/AdvisorCreateCustomerPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCreateCustomerPage.razor.cs @@ -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(); } diff --git a/Wonky.Client/Pages/AdvisorCustomerActivityListPage.razor.cs b/Wonky.Client/Pages/AdvisorCustomerActivityListPage.razor.cs index b0571288..dc7f2329 100644 --- a/Wonky.Client/Pages/AdvisorCustomerActivityListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCustomerActivityListPage.razor.cs @@ -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(); diff --git a/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor b/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor index 5c63728a..f8584e60 100644 --- a/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor +++ b/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor @@ -25,18 +25,18 @@

@Company.Name

- + @if (Working) { - -} + +} \ No newline at end of file diff --git a/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor.cs b/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor.cs index 9dc2a3ed..67632935 100644 --- a/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor.cs @@ -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 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 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 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> FetchProductInventory() + private async Task FetchProductInventory() { - var storage = await Storage.GetItemAsStringAsync($"{Company.CompanyId}-products"); + Inventory = new List(); + + 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>(storage); + Inventory = JsonSerializer.Deserialize>(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(); + 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() diff --git a/Wonky.Client/Pages/AdvisorCustomerInvoiceListPage.razor.cs b/Wonky.Client/Pages/AdvisorCustomerInvoiceListPage.razor.cs index b7ade2a0..ffa5542e 100644 --- a/Wonky.Client/Pages/AdvisorCustomerInvoiceListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCustomerInvoiceListPage.razor.cs @@ -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(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; diff --git a/Wonky.Client/Pages/AdvisorCustomerListPage.razor.cs b/Wonky.Client/Pages/AdvisorCustomerListPage.razor.cs index 96d68f32..f830a51e 100644 --- a/Wonky.Client/Pages/AdvisorCustomerListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCustomerListPage.razor.cs @@ -46,8 +46,8 @@ namespace Wonky.Client.Pages protected override void OnParametersSet() { - Interceptor.RegisterEvent(); - Interceptor.RegisterBeforeSendEvent(); + Interceptor.RegisterAfterSendEvent(); + Interceptor.RegisterBeforeSendAsyncEvent(); } diff --git a/Wonky.Client/Pages/AdvisorCustomerOrderViewPage.razor.cs b/Wonky.Client/Pages/AdvisorCustomerOrderViewPage.razor.cs index f8ee5031..66c04c44 100644 --- a/Wonky.Client/Pages/AdvisorCustomerOrderViewPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCustomerOrderViewPage.razor.cs @@ -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)); diff --git a/Wonky.Client/Pages/AdvisorCustomerViewPage.razor b/Wonky.Client/Pages/AdvisorCustomerViewPage.razor index bcf63fd6..3d2c2909 100644 --- a/Wonky.Client/Pages/AdvisorCustomerViewPage.razor +++ b/Wonky.Client/Pages/AdvisorCustomerViewPage.razor @@ -166,7 +166,7 @@
@* crm context - contacts *@ -
+
diff --git a/Wonky.Client/Pages/AdvisorCustomerViewPage.razor.cs b/Wonky.Client/Pages/AdvisorCustomerViewPage.razor.cs index 0d72fb0b..28e7b035 100644 --- a/Wonky.Client/Pages/AdvisorCustomerViewPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCustomerViewPage.razor.cs @@ -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; } diff --git a/Wonky.Client/Pages/AdvisorQuoteListPage.razor.cs b/Wonky.Client/Pages/AdvisorQuoteListPage.razor.cs index 4340b4de..55dffa4d 100644 --- a/Wonky.Client/Pages/AdvisorQuoteListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorQuoteListPage.razor.cs @@ -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 Quotes { get; set; } = new(); private List _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(); 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(); } } \ No newline at end of file diff --git a/Wonky.Client/Pages/AdvisorReportCreatePage.razor.cs b/Wonky.Client/Pages/AdvisorReportCreatePage.razor.cs index f0849828..b1eecd2c 100644 --- a/Wonky.Client/Pages/AdvisorReportCreatePage.razor.cs +++ b/Wonky.Client/Pages/AdvisorReportCreatePage.razor.cs @@ -57,8 +57,8 @@ public partial class AdvisorReportCreatePage : IDisposable /// protected override async Task OnInitializedAsync() { - Interceptor.RegisterEvent(); - Interceptor.RegisterBeforeSendEvent(); + Interceptor.RegisterAfterSendEvent(); + Interceptor.RegisterBeforeSendAsyncEvent(); ReportContext = new EditContext(Report); ReportContext.OnFieldChanged += HandleFieldChanged; diff --git a/Wonky.Client/Pages/AdvisorReportListPage.razor.cs b/Wonky.Client/Pages/AdvisorReportListPage.razor.cs index 40e882c6..fd828760 100644 --- a/Wonky.Client/Pages/AdvisorReportListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorReportListPage.razor.cs @@ -30,15 +30,17 @@ public partial class AdvisorReportListPage : IDisposable [Inject] public ILogger Logger { get; set; } private List 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; diff --git a/Wonky.Client/Pages/AdvisorReportViewPage.razor.cs b/Wonky.Client/Pages/AdvisorReportViewPage.razor.cs index b1e91957..8defa3a2 100644 --- a/Wonky.Client/Pages/AdvisorReportViewPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorReportViewPage.razor.cs @@ -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("_xu"); diff --git a/Wonky.Client/Pages/AdvisorTaskItemListCrmPage.razor.cs b/Wonky.Client/Pages/AdvisorTaskItemListCrmPage.razor.cs index be336254..30f3cdc7 100644 --- a/Wonky.Client/Pages/AdvisorTaskItemListCrmPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorTaskItemListCrmPage.razor.cs @@ -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; } diff --git a/Wonky.Client/Pages/AdvisorTaskItemViewCrmPage.razor.cs b/Wonky.Client/Pages/AdvisorTaskItemViewCrmPage.razor.cs index e418bb54..b24aef87 100644 --- a/Wonky.Client/Pages/AdvisorTaskItemViewCrmPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorTaskItemViewCrmPage.razor.cs @@ -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)); diff --git a/Wonky.Client/Pages/AdvisorTodayActivityListPage.razor.cs b/Wonky.Client/Pages/AdvisorTodayActivityListPage.razor.cs index 7005d5b8..eb3f85dd 100644 --- a/Wonky.Client/Pages/AdvisorTodayActivityListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorTodayActivityListPage.razor.cs @@ -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}"); diff --git a/Wonky.Client/Pages/AdvisorViewActivityPage.razor.cs b/Wonky.Client/Pages/AdvisorViewActivityPage.razor.cs index 369db7df..5a86cf92 100644 --- a/Wonky.Client/Pages/AdvisorViewActivityPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorViewActivityPage.razor.cs @@ -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); diff --git a/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor.cs b/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor.cs index 0c8e3bd7..afed17ab 100644 --- a/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorWorkplaceListPage.razor.cs @@ -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; } diff --git a/Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor.cs b/Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor.cs index 7f1bac00..b5b45206 100644 --- a/Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorWorkplaceViewPage.razor.cs @@ -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; diff --git a/Wonky.Client/Pages/BackendAdminSalesRepViewPage.razor.cs b/Wonky.Client/Pages/BackendAdminSalesRepViewPage.razor.cs index bd2c117d..27a9bd1d 100644 --- a/Wonky.Client/Pages/BackendAdminSalesRepViewPage.razor.cs +++ b/Wonky.Client/Pages/BackendAdminSalesRepViewPage.razor.cs @@ -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); diff --git a/Wonky.Client/Pages/CountryCatalogPage.razor.cs b/Wonky.Client/Pages/CountryCatalogPage.razor.cs index 2be19ada..ae889c4c 100644 --- a/Wonky.Client/Pages/CountryCatalogPage.razor.cs +++ b/Wonky.Client/Pages/CountryCatalogPage.razor.cs @@ -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(); } diff --git a/Wonky.Client/Pages/CountryCustomerListPage.razor.cs b/Wonky.Client/Pages/CountryCustomerListPage.razor.cs index 43562e4d..3a949d55 100644 --- a/Wonky.Client/Pages/CountryCustomerListPage.razor.cs +++ b/Wonky.Client/Pages/CountryCustomerListPage.razor.cs @@ -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(); diff --git a/Wonky.Client/Pages/CountryPrintCatalogPage.razor.cs b/Wonky.Client/Pages/CountryPrintCatalogPage.razor.cs index 82216fa7..6ff439b4 100644 --- a/Wonky.Client/Pages/CountryPrintCatalogPage.razor.cs +++ b/Wonky.Client/Pages/CountryPrintCatalogPage.razor.cs @@ -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("_xu"); Items = await Catalog.GetPriceList(CountryCode); diff --git a/Wonky.Client/Pages/CountrySalesRepCustomerListPage.razor.cs b/Wonky.Client/Pages/CountrySalesRepCustomerListPage.razor.cs index 6b37dbb3..8abeb031 100644 --- a/Wonky.Client/Pages/CountrySalesRepCustomerListPage.razor.cs +++ b/Wonky.Client/Pages/CountrySalesRepCustomerListPage.razor.cs @@ -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(); diff --git a/Wonky.Client/Pages/PrintCatalogPage.razor.cs b/Wonky.Client/Pages/PrintCatalogPage.razor.cs index 7b054de0..548c9563 100644 --- a/Wonky.Client/Pages/PrintCatalogPage.razor.cs +++ b/Wonky.Client/Pages/PrintCatalogPage.razor.cs @@ -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("_xu"); Items = await ItemRepo.GetPriceList(); diff --git a/Wonky.Client/Pages/WarehouseOrderListPage.razor.cs b/Wonky.Client/Pages/WarehouseOrderListPage.razor.cs index 5e40b2f6..2e2f6010 100644 --- a/Wonky.Client/Pages/WarehouseOrderListPage.razor.cs +++ b/Wonky.Client/Pages/WarehouseOrderListPage.razor.cs @@ -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); } diff --git a/Wonky.Client/Pages/WarehouseOrderViewPage.razor.cs b/Wonky.Client/Pages/WarehouseOrderViewPage.razor.cs index 8242936b..1e420003 100644 --- a/Wonky.Client/Pages/WarehouseOrderViewPage.razor.cs +++ b/Wonky.Client/Pages/WarehouseOrderViewPage.razor.cs @@ -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); diff --git a/Wonky.Client/Shared/InvoiceViewModal.razor.cs b/Wonky.Client/Shared/InvoiceViewModal.razor.cs index 198abaf4..8569caa5 100644 --- a/Wonky.Client/Shared/InvoiceViewModal.razor.cs +++ b/Wonky.Client/Shared/InvoiceViewModal.razor.cs @@ -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)) { diff --git a/Wonky.Client/Shared/PriceListModal.razor.cs b/Wonky.Client/Shared/PriceListModal.razor.cs index 9513817d..aa16eefd 100644 --- a/Wonky.Client/Shared/PriceListModal.razor.cs +++ b/Wonky.Client/Shared/PriceListModal.razor.cs @@ -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(); } diff --git a/Wonky.Client/wwwroot/appsettings.json b/Wonky.Client/wwwroot/appsettings.json index 4a71c921..5c31ddfd 100644 --- a/Wonky.Client/wwwroot/appsettings.json +++ b/Wonky.Client/wwwroot/appsettings.json @@ -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",