WIP refactor namespace
This commit is contained in:
parent
7c43c7d196
commit
431fef2d4b
82 changed files with 335 additions and 1095 deletions
|
@ -32,7 +32,7 @@
|
|||
<a class="list-group-item list-group-item-action list-group-item-success" href="/office/customers/dk">
|
||||
<i class="bi-phone"></i> Tlf.Ordre
|
||||
</a>
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/office/catalog/dk">
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/catalog/dk">
|
||||
<i class="bi-file-spreadsheet"></i> Priser
|
||||
</a>
|
||||
</div>
|
||||
|
@ -53,7 +53,7 @@
|
|||
<a class="list-group-item list-group-item-action list-group-item-success" href="/office/customers/no">
|
||||
<i class="bi-phone"></i> Tlf.Ordre
|
||||
</a>
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/office/catalog/no">
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/catalog/no">
|
||||
<i class="bi-file-spreadsheet"></i> Priser
|
||||
</a>
|
||||
</div>
|
||||
|
@ -74,7 +74,7 @@
|
|||
<a class="list-group-item list-group-item-action list-group-item-success" href="/office/customers/se">
|
||||
<i class="bi-phone"></i> Tlf.Ordre
|
||||
</a>
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/office/catalog/se">
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/catalog/se">
|
||||
<i class="bi-file-spreadsheet"></i> Priser
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
@ -29,12 +29,14 @@ namespace Wonky.Client.Components
|
|||
private Dictionary<string, string> Items { get; set; } = new();
|
||||
private UserPref Prefs = new();
|
||||
private string PageSize { get; set; } = "";
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
ProfileService.OnChange += ProfileServiceOnOnChange;
|
||||
Prefs = await ProfileService.GetPreferences();
|
||||
PageSize = Prefs.PageSize;
|
||||
}
|
||||
|
||||
private async Task OnSelectChanged(ChangeEventArgs e)
|
||||
{
|
||||
var val = e.Value.ToString();
|
||||
|
@ -42,11 +44,13 @@ namespace Wonky.Client.Components
|
|||
await OnChanged.InvokeAsync(val);
|
||||
await ProfileService.SetPageSize(val);
|
||||
}
|
||||
|
||||
private void ProfileServiceOnOnChange(UserPref newUserPref)
|
||||
{
|
||||
Prefs = newUserPref;
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
ProfileService.OnChange -= ProfileServiceOnOnChange;
|
||||
|
|
|
@ -8,11 +8,11 @@ public partial class QuoteListComponent
|
|||
{
|
||||
[Parameter]
|
||||
public List<ReportItemView> Quotes { get; set; } = new();
|
||||
[Parameter] public EventCallback<QuoteCallbackArgs> OnChangedCallback { get; set; }
|
||||
[Parameter] public EventCallback<QCallbackArgs> OnChangedCallback { get; set; }
|
||||
|
||||
private async Task SetQuote(string eSalesNumber, QStatus status)
|
||||
{
|
||||
var args = new QuoteCallbackArgs()
|
||||
var args = new QCallbackArgs()
|
||||
{
|
||||
ESalesNumber = eSalesNumber,
|
||||
Status = status
|
||||
|
|
|
@ -21,8 +21,8 @@
|
|||
<EditForm EditContext="WorkDateContext">
|
||||
<div class="container-fluid">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-sm-7 work-date">
|
||||
@SelectedDate.ToLongDateString()
|
||||
<div class="col-sm-7 fw-bold">
|
||||
@SelectedDate.DayOfWeek d. @(SelectedDate.Day)/@(SelectedDate.Month)
|
||||
</div>
|
||||
<div class="col-sm-5">
|
||||
<InputDate class="form-control calendar" @bind-Value="SelectedDate" @oninput="OnDateChanged"/>
|
||||
|
|
|
@ -86,7 +86,7 @@ namespace Wonky.Client.HttpInterceptors
|
|||
if (e.Response == null || e.Response.IsSuccessStatusCode)
|
||||
return;
|
||||
|
||||
var message = "En fejl er opstået";
|
||||
var message = $"En fejl er opstået \n {e.Response.Content}";
|
||||
var currDoc = _navigation.ToBaseRelativePath(_navigation.Uri);
|
||||
if (currDoc.Contains("login/"))
|
||||
currDoc = "";
|
||||
|
@ -98,20 +98,23 @@ namespace Wonky.Client.HttpInterceptors
|
|||
break;
|
||||
case HttpStatusCode.BadRequest:
|
||||
_logger.LogDebug("BadRequest <= {}", currDoc);
|
||||
_logger.LogDebug("{}", message);
|
||||
break;
|
||||
case HttpStatusCode.Unauthorized:
|
||||
_authenticationService.Logout();
|
||||
_logger.LogDebug("Unauthorized <= {}", currDoc);
|
||||
_logger.LogDebug("{}", message);
|
||||
|
||||
//_authenticationService.Logout();
|
||||
_navigation.NavigateTo($"/login/{currDoc}");
|
||||
message = "Venligst login ...";
|
||||
_toast.ShowInfo(message);
|
||||
break;
|
||||
case HttpStatusCode.Conflict:
|
||||
_logger.LogDebug("Conflict <= {}", currDoc);
|
||||
_logger.LogDebug("{}", message);
|
||||
break;
|
||||
case HttpStatusCode.InternalServerError:
|
||||
// message = "Der er interne problemer på serveren ...";
|
||||
// _toast.ShowError(message);
|
||||
_logger.LogDebug("InternalServerError <= {}", currDoc);
|
||||
_logger.LogDebug("{}", message);
|
||||
break;
|
||||
default:
|
||||
_toast.ShowError(message);
|
||||
|
|
|
@ -1,68 +0,0 @@
|
|||
// 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 Wonky.Client.Features;
|
||||
using Wonky.Entity.Requests;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.HttpInterfaces;
|
||||
|
||||
/// <summary>
|
||||
/// Interface Catalog Http repository
|
||||
/// </summary>
|
||||
public interface IAdvisorCatalogRepository
|
||||
{
|
||||
/// <summary>
|
||||
/// Get a paged sales item list
|
||||
/// </summary>
|
||||
/// <param name="pagingParameters"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPaging pagingParameters);
|
||||
|
||||
/// <summary>
|
||||
/// Get sales item by id
|
||||
/// </summary>
|
||||
/// <param name="salesItemId"></param>
|
||||
/// <returns></returns>
|
||||
Task<SalesItemView> GetSalesItemId(string salesItemId);
|
||||
|
||||
/// <summary>
|
||||
/// Overload Get sales item by sku and country code
|
||||
/// </summary>
|
||||
/// <param name="sku"></param>
|
||||
/// <param name="countryCode"></param>
|
||||
/// <returns></returns>
|
||||
Task<SalesItemView> GetSalesItemSku(string countryCode, string sku);
|
||||
|
||||
/// <summary>
|
||||
/// Get sales item by variant id
|
||||
/// </summary>
|
||||
/// <param name="variantId"></param>
|
||||
/// <returns></returns>
|
||||
Task<SalesItemView> GetSalesVariantId(string variantId);
|
||||
|
||||
/// <summary>
|
||||
/// Complete catalog for print
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<List<SalesItemView>> GetPriceList();
|
||||
|
||||
/// <summary>
|
||||
/// Complete catalog for print country
|
||||
/// </summary>
|
||||
/// <param name="countryCode"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<SalesItemView>> GetPriceList(string countryCode);
|
||||
}
|
|
@ -21,7 +21,7 @@ namespace Wonky.Client.HttpInterfaces;
|
|||
/// <summary>
|
||||
/// Interface for handling Customer Workplaces (chemical document service)
|
||||
/// </summary>
|
||||
public interface IWorkplaceRepository
|
||||
public interface IAdvisorWorkplaceRepository
|
||||
{
|
||||
/// <summary>
|
||||
/// Get Workplaces for given customer id
|
|
@ -28,9 +28,9 @@ public interface ICountryCatalogRepository
|
|||
/// Get a paged sales item list
|
||||
/// </summary>
|
||||
/// <param name="countryCode"></param>
|
||||
/// <param name="paging"></param>
|
||||
/// <param name="pager"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(string countryCode, CatalogPaging paging);
|
||||
Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(string countryCode, CatalogPager pager);
|
||||
|
||||
/// <summary>
|
||||
/// Get sales item by id
|
|
@ -36,7 +36,7 @@ public class AdvisorActivityRepository : IAdvisorActivityRepository
|
|||
};
|
||||
|
||||
private readonly NavigationManager _navigation;
|
||||
private ILogger<AdvisorActivityRepository> _logger;
|
||||
private readonly ILogger<AdvisorActivityRepository> _logger;
|
||||
private readonly HttpClient _client;
|
||||
private readonly ApiConfig _api;
|
||||
|
||||
|
@ -166,7 +166,7 @@ public class AdvisorActivityRepository : IAdvisorActivityRepository
|
|||
{
|
||||
Code = 404,
|
||||
IsSuccess = false,
|
||||
Message = "Uventet svare fra server",
|
||||
Message = "Uventet svar fra server",
|
||||
Id = ""
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,187 +0,0 @@
|
|||
// 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.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Json;
|
||||
using System.Text.Json;
|
||||
using System.Threading.Tasks;
|
||||
using Wonky.Client.Features;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.WebUtilities;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Wonky.Client.HttpInterfaces;
|
||||
using Wonky.Entity.Configuration;
|
||||
using Wonky.Entity.DTO;
|
||||
using Wonky.Entity.Requests;
|
||||
using Wonky.Entity.Views;
|
||||
|
||||
namespace Wonky.Client.HttpRepository;
|
||||
|
||||
public class AdvisorCatalogRepository : IAdvisorCatalogRepository
|
||||
{
|
||||
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
|
||||
{
|
||||
PropertyNameCaseInsensitive = true
|
||||
};
|
||||
|
||||
private readonly NavigationManager _navigation;
|
||||
private ILogger<AdvisorCatalogRepository> _logger;
|
||||
private readonly HttpClient _client;
|
||||
private readonly ApiConfig _apiConfig;
|
||||
|
||||
public AdvisorCatalogRepository(HttpClient client,
|
||||
ILogger<AdvisorCatalogRepository> logger,
|
||||
NavigationManager navigation, IOptions<ApiConfig> configuration)
|
||||
{
|
||||
_client = client;
|
||||
_logger = logger;
|
||||
_navigation = navigation;
|
||||
_apiConfig = configuration.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a paged sales item list
|
||||
/// </summary>
|
||||
/// <param name="pagingParameters"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPaging pagingParameters)
|
||||
{
|
||||
var queryString = new Dictionary<string, string>
|
||||
{
|
||||
["pageNumber"] = pagingParameters.PageNumber.ToString(),
|
||||
["pageSize"] = pagingParameters.PageSize.ToString(),
|
||||
["orderBy"] = pagingParameters.OrderBy,
|
||||
["searchColumn"] = pagingParameters.SearchColumn,
|
||||
["searchTerm"] = pagingParameters.SearchTerm,
|
||||
["selectGroup"] = pagingParameters.SelectGroup == "0" ? "" : pagingParameters.SelectGroup,
|
||||
};
|
||||
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>
|
||||
{
|
||||
Items = JsonSerializer.Deserialize<List<SalesItemView>>(content, _options),
|
||||
MetaData = JsonSerializer.Deserialize<MetaData>(
|
||||
response.Headers.GetValues("X-Pagination").First(), _options)
|
||||
};
|
||||
return pagingResponse;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a paged sales item list for country
|
||||
/// </summary>
|
||||
/// <param name="pagingParameters"></param>
|
||||
/// <param name="countryCode"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(CatalogPaging pagingParameters, string countryCode)
|
||||
{
|
||||
var queryString = new Dictionary<string, string>
|
||||
{
|
||||
["pageNumber"] = pagingParameters.PageNumber.ToString(),
|
||||
["pageSize"] = pagingParameters.PageSize.ToString(),
|
||||
["orderBy"] = pagingParameters.OrderBy,
|
||||
["searchColumn"] = pagingParameters.SearchColumn,
|
||||
["searchTerm"] = pagingParameters.SearchTerm,
|
||||
["selectGroup"] = pagingParameters.SelectGroup == "0" ? "" : pagingParameters.SelectGroup,
|
||||
};
|
||||
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>
|
||||
{
|
||||
Items = JsonSerializer.Deserialize<List<SalesItemView>>(content, _options),
|
||||
MetaData = JsonSerializer.Deserialize<MetaData>(
|
||||
response.Headers.GetValues("X-Pagination").First(), _options)
|
||||
};
|
||||
return pagingResponse;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get sales item by id
|
||||
/// </summary>
|
||||
/// <param name="salesItemId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<SalesItemView> GetSalesItemId(string salesItemId)
|
||||
{
|
||||
var salesItem = await _client
|
||||
.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/{salesItemId}");
|
||||
return salesItem ?? new SalesItemView();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overload Get sales item by sku and country code
|
||||
/// </summary>
|
||||
/// <param name="sku"></param>
|
||||
/// <param name="countryCode"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<SalesItemView> GetSalesItemSku(string countryCode, string sku)
|
||||
{
|
||||
var salesItem = await _client.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/sku/{countryCode}/{sku}");
|
||||
return salesItem ?? new SalesItemView();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get sales item by variant id
|
||||
/// </summary>
|
||||
/// <param name="variantId"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<SalesItemView> GetSalesVariantId(string variantId)
|
||||
{
|
||||
var salesItem = await _client
|
||||
.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/variant/{variantId}");
|
||||
return salesItem ?? new SalesItemView();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Complete catalog for print
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<List<SalesItemView>> GetPriceList()
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<SalesItemView>>($"{_apiConfig.Catalog}", _options);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Complete catalog for print country
|
||||
/// </summary>
|
||||
/// <param name="countryCode"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<SalesItemView>> GetPriceList(string countryCode)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<SalesItemView>>($"{_apiConfig.Catalog}/{countryCode}", _options);
|
||||
}
|
||||
}
|
|
@ -24,7 +24,7 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.HttpRepository;
|
||||
|
||||
public class WorkplaceRepository : IWorkplaceRepository
|
||||
public class AdvisorWorkplaceRepository : IAdvisorWorkplaceRepository
|
||||
{
|
||||
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
|
||||
{
|
||||
|
@ -32,12 +32,12 @@ public class WorkplaceRepository : IWorkplaceRepository
|
|||
};
|
||||
|
||||
private readonly NavigationManager _navigation;
|
||||
private ILogger<WorkplaceRepository> _logger;
|
||||
private ILogger<AdvisorWorkplaceRepository> _logger;
|
||||
private readonly HttpClient _client;
|
||||
private readonly ApiConfig _api;
|
||||
|
||||
public WorkplaceRepository(HttpClient client,
|
||||
ILogger<WorkplaceRepository> logger,
|
||||
public AdvisorWorkplaceRepository(HttpClient client,
|
||||
ILogger<AdvisorWorkplaceRepository> logger,
|
||||
NavigationManager navigation,
|
||||
IOptions<ApiConfig> configuration)
|
||||
{
|
|
@ -41,7 +41,7 @@ public class CountryCatalogRepository : ICountryCatalogRepository
|
|||
private readonly NavigationManager _navigation;
|
||||
private ILogger<CountryCatalogRepository> _logger;
|
||||
private readonly HttpClient _client;
|
||||
private readonly ApiConfig _apiConfig;
|
||||
private readonly ApiConfig _api;
|
||||
|
||||
public CountryCatalogRepository(HttpClient client,
|
||||
ILogger<CountryCatalogRepository> logger,
|
||||
|
@ -50,28 +50,28 @@ public class CountryCatalogRepository : ICountryCatalogRepository
|
|||
_client = client;
|
||||
_logger = logger;
|
||||
_navigation = navigation;
|
||||
_apiConfig = configuration.Value;
|
||||
_api = configuration.Value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a paged sales item list
|
||||
/// </summary>
|
||||
/// <param name="countryCode"></param>
|
||||
/// <param name="paging"></param>
|
||||
/// <param name="pager"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(string countryCode, CatalogPaging paging)
|
||||
public async Task<PagingResponse<SalesItemView>> GetSalesItemsPaged(string countryCode, CatalogPager pager)
|
||||
{
|
||||
var queryString = new Dictionary<string, string>
|
||||
{
|
||||
["pageNumber"] = paging.PageNumber.ToString(),
|
||||
["pageSize"] = paging.PageSize.ToString(),
|
||||
["orderBy"] = paging.OrderBy,
|
||||
["searchColumn"] = paging.SearchColumn,
|
||||
["searchTerm"] = paging.SearchTerm,
|
||||
["selectGroup"] = paging.SelectGroup == "0" ? "" : paging.SelectGroup
|
||||
["pageNumber"] = pager.PageNumber.ToString(),
|
||||
["pageSize"] = pager.PageSize.ToString(),
|
||||
["orderBy"] = pager.OrderBy,
|
||||
["searchColumn"] = pager.SearchColumn,
|
||||
["searchTerm"] = pager.SearchTerm,
|
||||
["selectGroup"] = pager.SelectGroup == "0" ? "" : pager.SelectGroup
|
||||
};
|
||||
var response = await _client
|
||||
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.Catalog}/country/{countryCode}/page", queryString));
|
||||
.GetAsync(QueryHelpers.AddQueryString($"{_api.Catalog}/{countryCode}/page", queryString));
|
||||
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
|
@ -102,7 +102,7 @@ public class CountryCatalogRepository : ICountryCatalogRepository
|
|||
public async Task<SalesItemView> GetSalesItemId(string countryCode, string salesItemId)
|
||||
{
|
||||
var salesItem = await _client
|
||||
.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/country/{countryCode}/{salesItemId}");
|
||||
.GetFromJsonAsync<SalesItemView>($"{_api.Catalog}/{countryCode}/{salesItemId}");
|
||||
return salesItem ?? new SalesItemView();
|
||||
}
|
||||
|
||||
|
@ -114,7 +114,7 @@ public class CountryCatalogRepository : ICountryCatalogRepository
|
|||
/// <returns></returns>
|
||||
public async Task<SalesItemView> GetSalesItemSku(string countryCode, string sku)
|
||||
{
|
||||
var salesItem = await _client.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/country/{countryCode}/sku/{sku}");
|
||||
var salesItem = await _client.GetFromJsonAsync<SalesItemView>($"{_api.Catalog}/{countryCode}/sku/{sku}");
|
||||
return salesItem ?? new SalesItemView();
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,7 @@ public class CountryCatalogRepository : ICountryCatalogRepository
|
|||
public async Task<SalesItemView> GetSalesVariantId(string countryCode, string variantId)
|
||||
{
|
||||
var salesItem = await _client
|
||||
.GetFromJsonAsync<SalesItemView>($"{_apiConfig.Catalog}/country/{countryCode}/variant/{variantId}");
|
||||
.GetFromJsonAsync<SalesItemView>($"{_api.Catalog}/{countryCode}/variant/{variantId}");
|
||||
return salesItem ?? new SalesItemView();
|
||||
}
|
||||
|
||||
|
@ -138,6 +138,6 @@ public class CountryCatalogRepository : ICountryCatalogRepository
|
|||
/// <returns></returns>
|
||||
public async Task<List<SalesItemView>> GetPriceList(string countryCode)
|
||||
{
|
||||
return await _client.GetFromJsonAsync<List<SalesItemView>>($"{_apiConfig.Catalog}/country/{countryCode}", _options);
|
||||
return await _client.GetFromJsonAsync<List<SalesItemView>>($"{_api.Catalog}/{countryCode}", _options);
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
namespace Wonky.Client.Models;
|
||||
|
||||
public class QuoteCallbackArgs
|
||||
public class QCallbackArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// ESalesNumber
|
|
@ -325,7 +325,7 @@ else
|
|||
}
|
||||
|
||||
<ConfirmWorkDateModal BodyMessage="@PromptDateConfirm" OnOkClicked="WorkDateConfirmCallback" @ref="ConfirmWorkDateModal"/>
|
||||
<PriceListModal OnSelected="PriceListCallback" @ref="PriceListModal"/>
|
||||
<PriceCatalogModal CountryCode="@Company.CountryCode.ToLower()" OnSelected="PriceListCallback" @ref="PriceCatalogModal"/>
|
||||
<ProductHistoryModal CompanyId="@CompanyId" ItemSku="@SelectedItem.Sku" @ref="HistoryModal"/>
|
||||
<ProductPriceHistoryModal OnSelected="PriceHistoryCallback" CompanyId="@CompanyId" Sku="@SelectedItem.Sku" @ref="PriceHistoryModal"/>
|
||||
<ConfirmProductCheckModal BodyMessage="" CompanyId="@CompanyId" Products="CheckList" OnOkClicked="ConfirmProductCheckCallback" @ref="ConfirmProductCheckModal" />
|
|
@ -30,23 +30,23 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class AdvisorCreateActivityPage : IDisposable
|
||||
public partial class AdvisorActivityCreatePage : IDisposable
|
||||
{
|
||||
// Parameters
|
||||
[CascadingParameter] DraftStateProvider DraftProvider { get; set; }
|
||||
[Parameter] public string CompanyId { get; set; }
|
||||
// Services
|
||||
[Inject] public ILogger<AdvisorCreateActivityPage> Logger { get; set; }
|
||||
[Inject] public ILogger<AdvisorActivityCreatePage> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public UserProfileService Profiles { get; set; }
|
||||
[Inject] public IToastService Toast { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public IAdvisorCatalogRepository AdvisorCatalogCrm { get; set; }
|
||||
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
|
||||
[Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
|
||||
[Inject] public IAdvisorReportRepository AdvisorReportRepo { get; set; }
|
||||
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
|
||||
[Inject] public ICountryCatalogRepository Catalog { get; set; }
|
||||
[Inject] public IAdvisorCustomerRepository Companies { get; set; }
|
||||
[Inject] public IAdvisorActivityRepository Actitivites { get; set; }
|
||||
[Inject] public IAdvisorReportRepository Reports { get; set; }
|
||||
[Inject] public IAdvisorCustomerHistoryRepository CustomerHistory { get; set; }
|
||||
// variables
|
||||
private readonly JsonSerializerOptions _options = new() {PropertyNameCaseInsensitive = true};
|
||||
private SalesItemView SelectedItem { get; set; } = new();
|
||||
|
@ -64,13 +64,13 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
private bool InvalidActivity { get; set; } = true;
|
||||
private bool ReportClosed { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
private UserInfoView ThisUserInfo { get; set; } = new();
|
||||
private UserInfoView SalesRep { get; set; } = new();
|
||||
private DateTime SelectedDate { get; set; }
|
||||
private string OldPhone { get; set; } = "";
|
||||
|
||||
private string PromptDateConfirm { get; set; } = "";
|
||||
// MODAL DIALOGS
|
||||
private PriceListModal PriceListModal { get; set; } = new();
|
||||
private PriceCatalogModal PriceCatalogModal { get; set; } = new();
|
||||
private ProductHistoryModal HistoryModal { get; set; } = new();
|
||||
private ProductPriceHistoryModal PriceHistoryModal { get; set; } = new();
|
||||
private ConfirmWorkDateModal ConfirmWorkDateModal { get; set; } = new();
|
||||
|
@ -93,9 +93,9 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
// User Preferences
|
||||
UserPrefs = await Profiles.GetPreferences();
|
||||
// User Info
|
||||
ThisUserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
SalesRep = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
// Fetch Customer from http
|
||||
Company = await CompanyRepo.GetCompanyById(CompanyId);
|
||||
Company = await Companies.GetCompanyById(CompanyId);
|
||||
if (Company.HasFolded == 1)
|
||||
// Company has shutdown activities
|
||||
Activity.OrderMessage = "BEMÆRK: CVR nummer er ophørt.";
|
||||
|
@ -113,9 +113,9 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
Activity.ActivityStatusEnum = "noSale";
|
||||
Activity.VisitTypeEnum = Company.Account is "" or "NY" ? "new" : "recall";
|
||||
Activity.CompanyId = Company.CompanyId;
|
||||
Activity.SalesRepId = ThisUserInfo.Id;
|
||||
Activity.SalesRep = ThisUserInfo.Advisor;
|
||||
Activity.CountryCode = ThisUserInfo.CountryCode;
|
||||
Activity.SalesRepId = SalesRep.Id;
|
||||
Activity.SalesRep = SalesRep.Advisor;
|
||||
Activity.CountryCode = SalesRep.CountryCode;
|
||||
Activity.Account = Company.Account;
|
||||
Activity.VatNumber = Company.VatNumber;
|
||||
Activity.Email = Company.Email;
|
||||
|
@ -134,7 +134,7 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
// Initialize date variable
|
||||
SelectedDate = string.IsNullOrWhiteSpace(UserPrefs.WorkDate) ? DateTime.Now : DateTime.Parse(UserPrefs.WorkDate);
|
||||
// raise flag if report is closed
|
||||
ReportClosed = await AdvisorReportRepo.ReportExist($"{SelectedDate:yyyy-MM-dd}");
|
||||
ReportClosed = await Reports.ReportExist($"{SelectedDate:yyyy-MM-dd}");
|
||||
// Ask for confirmation of date
|
||||
Logger.LogDebug("Preferences.DateConfirmed => {}", UserPrefs.DateConfirmed);
|
||||
if (!UserPrefs.DateConfirmed)
|
||||
|
@ -182,7 +182,7 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
// product inventory has not been updated
|
||||
// send rpc call to sync ERP to CRM
|
||||
Toast.ShowInfo("Vent mens data synkroniseres ...", "ERP til CRM ...");
|
||||
var ts = await HistoryRepo.InvoiceErpToCrmRpc(CompanyId, Company.HistorySync);
|
||||
var ts = await CustomerHistory.InvoiceErpToCrmRpc(CompanyId, Company.HistorySync);
|
||||
while (string.IsNullOrWhiteSpace(ts))
|
||||
await Task.Delay(500);
|
||||
// save pDate
|
||||
|
@ -190,7 +190,7 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
// request products from backend
|
||||
Toast.ShowInfo("Vent mens produkt oversigt hentes", "CRM produkt liste");
|
||||
|
||||
CheckList = await HistoryRepo.FetchInventory(CompanyId);
|
||||
CheckList = await CustomerHistory.FetchInventory(CompanyId);
|
||||
if(CheckList.Any())
|
||||
CheckList = CheckList.OrderBy(x => x.Description).ToList();
|
||||
|
||||
|
@ -236,7 +236,7 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
/// <param name="workDate"></param>
|
||||
private async Task WorkDateComponentCallback(string workDate)
|
||||
{
|
||||
ReportClosed = await AdvisorReportRepo.ReportExist(workDate);
|
||||
ReportClosed = await Reports.ReportExist(workDate);
|
||||
SelectedDate = DateTime.Parse(workDate);
|
||||
Activity.ActivityDate = workDate;
|
||||
}
|
||||
|
@ -246,7 +246,7 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
/// </summary>
|
||||
private void CallPriceListModal()
|
||||
{
|
||||
PriceListModal.Show();
|
||||
PriceCatalogModal.Show();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -258,7 +258,7 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
// get selected item
|
||||
if (string.IsNullOrWhiteSpace(sku.ItemId))
|
||||
return;
|
||||
SelectedItem = await AdvisorCatalogCrm.GetSalesItemId(sku.ItemId);
|
||||
SelectedItem = await Catalog.GetSalesItemId(SalesRep.CountryCode.ToLower(), sku.ItemId);
|
||||
ShowItem = true;
|
||||
Price = sku.Rate;
|
||||
Quantity = sku.Quantity;
|
||||
|
@ -325,14 +325,14 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
if (OldPhone != Activity.Phone)
|
||||
{
|
||||
Company.Phone = Activity.Phone;
|
||||
await CompanyRepo.UpdateErpData(Company.CompanyId, Company);
|
||||
await Companies.UpdateErpData(Company.CompanyId, Company);
|
||||
}
|
||||
// begin assembling activity
|
||||
Activity.ActivityDate = $"{SelectedDate:yyyy-MM-dd}";
|
||||
Activity.OurRef = Activity.ActivityTypeEnum switch
|
||||
{
|
||||
"phone" => $"T:{ThisUserInfo.FullName.Split(" ")[0]}",
|
||||
"onSite" => $"B:{ThisUserInfo.FullName.Split(" ")[0]}",
|
||||
"phone" => $"T:{SalesRep.FullName.Split(" ")[0]}",
|
||||
"onSite" => $"B:{SalesRep.FullName.Split(" ")[0]}",
|
||||
_ => ""
|
||||
};
|
||||
if (Activity.Express)
|
||||
|
@ -361,7 +361,7 @@ public partial class AdvisorCreateActivityPage : IDisposable
|
|||
// debug logging
|
||||
Logger.LogDebug("CrmNewActivityPage => \n {}", JsonSerializer.Serialize(Activity));
|
||||
// post to api
|
||||
var result = await AdvisorActivityRepo.CreateActivity(Activity);
|
||||
var result = await Actitivites.CreateActivity(Activity);
|
||||
// debug logging
|
||||
Logger.LogDebug("ApiResponseView => \n {}", JsonSerializer.Serialize(result));
|
||||
// show result message
|
|
@ -30,11 +30,11 @@
|
|||
<div class="col-sm-2 text-end">
|
||||
@if (ReportExist)
|
||||
{
|
||||
<a class="btn btn-info" href="/advisor/sales-reports/view/@($"{SelectedDate:yyyy-MM-dd}")">Rapport <i style="font-size: 1.2em;" class="bi-info-lg"></i></a>
|
||||
<a class="btn btn-info" href="/advisor/reports/view/@($"{SelectedDate:yyyy-MM-dd}")">Rapport <i style="font-size: 1.2em;" class="bi-info-lg"></i></a>
|
||||
}
|
||||
else
|
||||
{
|
||||
<a class="btn btn-primary" href="/advisor/sales-reports/new">Rapport <i style="font-size:1.2em;" class="bi-plus-lg"></i></a>
|
||||
<a class="btn btn-primary" href="/advisor/reports/new">Rapport <i style="font-size:1.2em;" class="bi-plus-lg"></i></a>
|
||||
}
|
||||
</div>
|
||||
</div>
|
|
@ -25,10 +25,10 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class AdvisorTodayActivityListPage : IDisposable
|
||||
public partial class AdvisorActivityTodayListPage : IDisposable
|
||||
{
|
||||
[Inject] public UserProfileService UserProfileService { get; set; }
|
||||
[Inject] public ILogger<AdvisorTodayActivityListPage> Logger { get; set; }
|
||||
[Inject] public ILogger<AdvisorActivityTodayListPage> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
|
|
@ -29,13 +29,13 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class AdvisorViewActivityPage : IDisposable
|
||||
public partial class AdvisorActivityViewPage : IDisposable
|
||||
{
|
||||
[Parameter] public string CompanyId { get; set; } = "";
|
||||
[Parameter] public string OrderId { get; set; } = "";
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
|
||||
[Inject] public ILogger<AdvisorViewActivityPage> Logger { get; set; }
|
||||
[Inject] public ILogger<AdvisorActivityViewPage> Logger { get; set; }
|
||||
[Inject] public IToastService Toaster { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
private ReportItemView ReportItem { get; set; } = new();
|
|
@ -1,52 +0,0 @@
|
|||
@*
|
||||
// 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 Wonky.Client.Components
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@attribute [Authorize(Roles = "Advisor")]
|
||||
@page "/advisor/price-catalog"
|
||||
<PageTitle>Innotec Produkt Katalog</PageTitle>
|
||||
<div class="sticky-top bg-dark rounded-2 px-3">
|
||||
<div class="row g-3 mb-3">
|
||||
<div class="col-sm-2">
|
||||
<CatalogGroupComponent OnChanged="SetGroupCol"/>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<CatalogSearchComponent OnChanged="SetSearchCol"/>
|
||||
</div>
|
||||
<div class="col-sm-4">
|
||||
<CatalogSearchPhraseComponent OnChanged="SetSearchPhrase"/>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<CatalogSortComponent OnChanged="SetSortCol"/>
|
||||
</div>
|
||||
<div class="col-sm-2">
|
||||
<PageSizeComponent OnChanged="SetPageSize"/>
|
||||
</div>
|
||||
<div class="col-sm-10">
|
||||
<PaginationComponent MetaData="MetaInfo" Spread="2" SelectedPage="SetSelectedPage"/>
|
||||
</div>
|
||||
<div class="col-sm-2 text-end">
|
||||
<a class="btn btn-secondary" href="/print/catalog"><i class="bi-printer"></i> Udskriv</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<CatalogListComponent ItemList="Items"/>
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots />
|
||||
}
|
|
@ -1,119 +0,0 @@
|
|||
// 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 AdvisorCatalogPage : IDisposable
|
||||
{
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public IAdvisorCatalogRepository ItemRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public UserProfileService ProfileService { get; set; }
|
||||
private List<SalesItemView> Items { get; set; } = new();
|
||||
private MetaData MetaInfo { get; set; } = new();
|
||||
private CatalogPaging _page = new();
|
||||
private UserPref Prefs = new();
|
||||
private UserInfoView UserInfo { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Prefs = await ProfileService.GetPreferences();
|
||||
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
|
||||
_page.OrderBy = Prefs.ItemSort;
|
||||
_page.SearchColumn = Prefs.ItemSearch;
|
||||
_page.PageSize = Convert.ToInt32(Prefs.PageSize);
|
||||
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
await FetchSalesItems();
|
||||
}
|
||||
|
||||
private async Task SetSearchPhrase(string searchTerm)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_page.PageNumber = 1;
|
||||
_page.SearchTerm = searchTerm;
|
||||
await FetchSalesItems();
|
||||
}
|
||||
|
||||
private async Task SetPageSize(string pageSize)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_page.PageSize = Convert.ToInt32(pageSize);
|
||||
_page.PageNumber = 1;
|
||||
await FetchSalesItems();
|
||||
}
|
||||
|
||||
private async Task SetSearchCol(string columnName)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_page.PageNumber = 1;
|
||||
_page.SearchColumn = columnName;
|
||||
await FetchSalesItems();
|
||||
}
|
||||
|
||||
private async Task SetSortCol(string orderBy)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_page.OrderBy = orderBy;
|
||||
await FetchSalesItems();
|
||||
}
|
||||
|
||||
private async Task SetSelectedPage(int page)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_page.PageNumber = page;
|
||||
await FetchSalesItems();
|
||||
}
|
||||
|
||||
private async Task SetGroupCol(string groupFilter)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_page.PageNumber = 1;
|
||||
_page.SelectGroup = groupFilter;
|
||||
await FetchSalesItems();
|
||||
}
|
||||
|
||||
private async Task FetchSalesItems()
|
||||
{
|
||||
Working = true;
|
||||
var pagingResponse = await ItemRepo.GetSalesItemsPaged(_page);
|
||||
Working = false;
|
||||
Items = pagingResponse.Items!;
|
||||
MetaInfo = pagingResponse.MetaData;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void Dispose() => Interceptor.DisposeEvent();
|
||||
|
||||
}
|
|
@ -37,10 +37,10 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages
|
||||
{
|
||||
public partial class AdvisorCreateCustomerPage : IDisposable
|
||||
public partial class AdvisorCustomerCreatePage : IDisposable
|
||||
{
|
||||
[Inject] public IToastService Toaster { get; set; }
|
||||
[Inject] public ILogger<AdvisorCreateCustomerPage> Logger { get; set; }
|
||||
[Inject] public ILogger<AdvisorCustomerCreatePage> Logger { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
|
|
@ -25,7 +25,7 @@
|
|||
<h4 class="pt-1">@Company.Name</h4>
|
||||
</div>
|
||||
<div class="col-sm-3 align-content-end">
|
||||
<a class="btn btn-primary d-block" href="/advisor/customers/@CompanyId"><i class="bi-arrow-left"></i> Kundekort</a>
|
||||
<a class="btn btn-primary d-block" href="/advisor/customers/@CompanyId"><i class="bi-arrow-right"></i> Kundekort</a>
|
||||
</div>
|
||||
<div class="col-sm-3 align-content-end">
|
||||
<a class="btn btn-primary d-block" href="/advisor/customers/@CompanyId/activities/new"><i class="bi-arrow-right"></i> Nyt Besøg</a>
|
||||
|
|
|
@ -28,13 +28,13 @@ namespace Wonky.Client.Pages;
|
|||
|
||||
public partial class AdvisorCustomerInventoryListPage : IDisposable
|
||||
{
|
||||
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
|
||||
[Inject] public IAdvisorCustomerRepository CompanyRepo { get; set; }
|
||||
[Inject] public IAdvisorCustomerHistoryRepository CustomerHistory { get; set; }
|
||||
[Inject] public IAdvisorCustomerRepository Customers { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IToastService Toaster { get; set; }
|
||||
[Inject] public ILogger<AdvisorCustomerInventoryListPage> Logger { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public IAdvisorCatalogRepository AdvisorCatalogRepo { get; set; }
|
||||
[Inject] public ICountryCatalogRepository Catalog { get; set; }
|
||||
|
||||
[CascadingParameter] public DraftStateProvider DraftStateProvider { get; set; } = new();
|
||||
[Parameter] public string CompanyId { get; set; } = "";
|
||||
|
@ -53,7 +53,7 @@ public partial class AdvisorCustomerInventoryListPage : IDisposable
|
|||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
Company = await CompanyRepo.GetCompanyById(CompanyId);
|
||||
Company = await Customers.GetCompanyById(CompanyId);
|
||||
|
||||
// fetch product inventory
|
||||
await FetchProductInventory();
|
||||
|
@ -64,7 +64,7 @@ public partial class AdvisorCustomerInventoryListPage : IDisposable
|
|||
private async Task OnReorderCallback(string sku)
|
||||
{
|
||||
// fetch item from http repo
|
||||
SalesItem = await AdvisorCatalogRepo.GetSalesItemSku(Company.CountryCode.ToLower(), sku);
|
||||
SalesItem = await Catalog.GetSalesItemSku(Company.CountryCode.ToLower(), sku);
|
||||
ReorderModal.Show();
|
||||
}
|
||||
|
||||
|
@ -92,7 +92,7 @@ public partial class AdvisorCustomerInventoryListPage : IDisposable
|
|||
}
|
||||
Logger.LogDebug("pulling products from backend");
|
||||
// fetch product history
|
||||
Inventory = await HistoryRepo.FetchInventory(CompanyId);
|
||||
Inventory = await CustomerHistory.FetchInventory(CompanyId);
|
||||
// default sort order by description
|
||||
if (Inventory.Any())
|
||||
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||
|
|
|
@ -1,144 +0,0 @@
|
|||
@*
|
||||
// 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 Microsoft.AspNetCore.Authorization
|
||||
@using Wonky.Client.Components
|
||||
@attribute [Authorize(Roles = "Advisor")]
|
||||
@page "/advisor/customers/{CompanyId}/orders/{OrderId}"
|
||||
<PageTitle>@_reportItem.ESalesNumber - @_reportItem.Company.Name</PageTitle>
|
||||
<table class="table table-sm table-striped d-print-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="p-0" colspan="4">
|
||||
@if (_reportItem.Express)
|
||||
{
|
||||
<div id="watermark">
|
||||
<i class="bi-lightning-charge text-dark" style="font-size: 11rem;"></i>
|
||||
</div>
|
||||
}
|
||||
<div class="bg-light text-dark border border-1 rounded-3 pt-3 mb-2">
|
||||
<h2 class="fw-bold text-center">@_reportItem.Company.Name</h2>
|
||||
@if (_reportItem.Express)
|
||||
{
|
||||
<h2 class="fw-bold text-center"><i class="bi-lightning-charge text-dark" style="font-size: 2rem;"></i> HASTER</h2>
|
||||
}
|
||||
@if (_reportItem.VisitTypeEnum.ToLower() == "phone" || _reportItem.OurRef.Contains("T:"))
|
||||
{
|
||||
<h5 class="text-center">TELEFONORDRE</h5>
|
||||
}
|
||||
@if (_reportItem.StatusTypeEnum is "Quote")
|
||||
{
|
||||
<h5 class="text-center">TILBUD</h5>
|
||||
}
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">Dato</th>
|
||||
<td>@_reportItem.OrderDate</td>
|
||||
<th scope="row">Konto</th>
|
||||
<td>@_reportItem.Company.Account</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col">Telefon</th>
|
||||
<td>@_reportItem.Company.Phone</td>
|
||||
<th scope="col">Køber</th>
|
||||
<td>@_reportItem.YourRef</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col">CVR/VAT</th>
|
||||
<td>@_reportItem.Company.VatNumber</td>
|
||||
<th scope="col">Rekvisition</th>
|
||||
<td>@_reportItem.ReferenceNumber</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col">Navn</th>
|
||||
<td>@_reportItem.Company.Name</td>
|
||||
<th scope="col">Lev.Navn</th>
|
||||
<td>@_reportItem.DlvName</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col">Adresse</th>
|
||||
<td>@_reportItem.Company.Address1</td>
|
||||
<th scope="col">Lev.Adresse</th>
|
||||
<td>@_reportItem.DlvAddress1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col">Adresse</th>
|
||||
<td>@_reportItem.Company.Address2</td>
|
||||
<th scope="col">Lev.Adresse</th>
|
||||
<td>@_reportItem.DlvAddress2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col">Postnr By</th>
|
||||
<td>@_reportItem.Company.ZipCode @_reportItem.Company.City</td>
|
||||
<th scope="col">Lev.Postnr By</th>
|
||||
<td>@_reportItem.DlvZipCity</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<table class="table table-sm table-striped table-bordered">
|
||||
<thead>
|
||||
<tr class="bg-light text-black">
|
||||
<th scope="col">Antal</th>
|
||||
<th scope="col">Varnr</th>
|
||||
<th scope="col">Beskrivelse</th>
|
||||
<th class="text-end" scope="col">Pris</th>
|
||||
<th class="text-end" scope="col">R%</th>
|
||||
<th class="text-end" scope="col">Beløb</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var line in _reportItem.Lines)
|
||||
{
|
||||
<tr>
|
||||
<td>@line.Quantity</td>
|
||||
<td>@line.Sku</td>
|
||||
<td>@line.Description</td>
|
||||
<td class="text-end">@($"{line.Price:N2}")</td>
|
||||
<td class="text-end">@($"{line.Discount:N2}")</td>
|
||||
<td class="text-end">@($"{line.LineSum:N2}")</td>
|
||||
</tr>
|
||||
}
|
||||
<tr>
|
||||
<td colspan="4"></td>
|
||||
<td>Ordresum</td>
|
||||
<td class="text-end">@_reportItem.OrderAmount</td>
|
||||
</tr>
|
||||
@if (_reportItem.Express)
|
||||
{
|
||||
<td class="bg-dark" colspan="4"></td>
|
||||
<td class="text-end" colspan="2">
|
||||
<h5 class="fw-bold"><i class="bi-lightning-charge the-fast" style="font-size: 2rem;"></i> HASTER</h5>
|
||||
</td>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
@if (!string.IsNullOrWhiteSpace(_reportItem.OfficeNote))
|
||||
{
|
||||
<div class="alert alert-dark">
|
||||
<h4 class="text-center">@_reportItem.OfficeNote</h4>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
|
@ -1,134 +0,0 @@
|
|||
// 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.Text;
|
||||
using System.Text.Json;
|
||||
using Blazored.Toast.Services;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Forms;
|
||||
using Wonky.Client.HttpInterceptors;
|
||||
using Wonky.Client.HttpInterfaces;
|
||||
using Wonky.Client.HttpRepository;
|
||||
using Wonky.Entity.DTO;
|
||||
using Wonky.Entity.Views;
|
||||
using System.Security.Claims;
|
||||
using Blazored.LocalStorage;
|
||||
using Wonky.Client.Services;
|
||||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class AdvisorCustomerOrderViewPage : IDisposable
|
||||
{
|
||||
[Parameter] public string CompanyId { get; set; } = "";
|
||||
[Parameter] public string OrderId { get; set; } = "";
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public IAdvisorActivityRepository AdvisorActivityRepo { get; set; }
|
||||
[Inject] public ISystemSendMailService MailService { get; set; }
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public ISystemUserRepository SystemUserRepo { get; set; }
|
||||
[Inject] public ILogger<OfficeCustomerOrderViewPage> Logger { get; set; }
|
||||
[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
|
||||
{
|
||||
PropertyNameCaseInsensitive = true
|
||||
};
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
// fetch order from backend
|
||||
_reportItem = await AdvisorActivityRepo.GetReportItem(OrderId);
|
||||
Logger.LogDebug("ReportItem => \n {}", JsonSerializer.Serialize(_reportItem, _options));
|
||||
Working = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set activity process state to express. Send confirmation notification to salesRep
|
||||
/// </summary>
|
||||
private async Task SetExpressState()
|
||||
{
|
||||
// disable doubled actions
|
||||
if (Working)
|
||||
return;
|
||||
Working = true;
|
||||
Logger.LogDebug("GetExpressState => {}", JsonSerializer.Serialize(_reportItem, _options));
|
||||
// send request to backend
|
||||
var responseView = await AdvisorActivityRepo.GetExpressState(_reportItem.ActivityId);
|
||||
Logger.LogDebug("SetExpressState => responseView <= {} ", JsonSerializer.Serialize(responseView));
|
||||
// get user info from storage
|
||||
var user = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
// fetch sales rep from response
|
||||
var salesRep = await SystemUserRepo.GetAdvisorInfo(responseView.Id);
|
||||
Logger.LogDebug("SetExpressState => salesRep => {}", JsonSerializer.Serialize(salesRep));
|
||||
// create email notification body
|
||||
var body = new StringBuilder();
|
||||
body.AppendLine($"Kvittering for modtagelse af hasteordre {_reportItem.ESalesNumber}");
|
||||
body.AppendLine($"Konto : {_reportItem.Company.Account}");
|
||||
body.AppendLine($"Navn : {_reportItem.Company.Name}");
|
||||
body.AppendLine(
|
||||
$"Post By : {salesRep.CountryCode.ToUpper()}-{_reportItem.Company.ZipCode} {_reportItem.Company.City}");
|
||||
body.AppendLine();
|
||||
body.AppendLine("Med venlig hilsen");
|
||||
body.AppendLine($"{user.FullName}");
|
||||
body.AppendLine($"{user.PhoneNumber}");
|
||||
// create a list of mail addresses
|
||||
var sendTo = new List<EmailContact>
|
||||
{
|
||||
new()
|
||||
{
|
||||
Email = salesRep.Email,
|
||||
Name = $"{salesRep.FirstName} {salesRep.LastName}"
|
||||
}
|
||||
};
|
||||
// create an email
|
||||
var msg = new EmailMessage
|
||||
{
|
||||
Body = body.ToString(),
|
||||
Subject = $"Haste ordre til {_reportItem.Company.Name} er modtaget.",
|
||||
To = sendTo,
|
||||
IsBodyHtml = false
|
||||
};
|
||||
Logger.LogDebug("SetExpressState Notification => \n {}", JsonSerializer.Serialize(msg));
|
||||
// send a system generated email
|
||||
var sendMail = await MailService.SendMail("System", msg);
|
||||
// result notification
|
||||
if (sendMail.IsSuccess)
|
||||
{
|
||||
Toast
|
||||
.ShowSuccess(
|
||||
$"Status er opdateret og notifikation sendt til {salesRep.FirstName}.", "OK");
|
||||
}
|
||||
else
|
||||
{
|
||||
Toast
|
||||
.ShowWarning(
|
||||
$"Notifikation til {salesRep.FirstName} kunne ikke sendes. {sendMail.Message}", "ADVARSEL");
|
||||
}
|
||||
// disable further notifications
|
||||
_isNotified = true;
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
Interceptor.DisposeEvent();
|
||||
}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
#watermark {
|
||||
position: fixed;
|
||||
z-index: 999;
|
||||
top: 10px;
|
||||
right: 0;
|
||||
}
|
|
@ -18,7 +18,7 @@
|
|||
@using Wonky.Client.Models
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@attribute [Authorize(Roles = "Advisor")]
|
||||
@page "/advisor/open-quotes"
|
||||
@page "/advisor/agreements"
|
||||
<PageTitle>Aftaler og Tilbud - Oversigt</PageTitle>
|
||||
<div class="row g-3 align-items-center">
|
||||
<div class="col-sm-8">
|
||||
|
|
|
@ -54,7 +54,7 @@ public partial class AdvisorQuoteListPage : IDisposable
|
|||
};
|
||||
}
|
||||
|
||||
private async Task UpdateQuoteCallback(QuoteCallbackArgs args)
|
||||
private async Task UpdateQuoteCallback(QCallbackArgs args)
|
||||
{
|
||||
Working = true;
|
||||
// find the quote to update
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
@using Wonky.Client.Components
|
||||
@using Wonky.Entity.Views
|
||||
@attribute [Authorize(Roles = "Advisor")]
|
||||
@page "/advisor/sales-reports/new"
|
||||
@page "/advisor/reports/new"
|
||||
|
||||
<PageTitle>Opret Dagsrapport for @_workDate</PageTitle>
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
_workDate = DateTime.Parse(Prefs.WorkDate);
|
||||
|
||||
if(await AdvisorReportRepo.ReportExist(Prefs.WorkDate))
|
||||
Navigator.NavigateTo($"/advisor/sales-reports/view/{_workDate:yyyy-MM-dd}");
|
||||
Navigator.NavigateTo($"/advisor/reports/view/{_workDate:yyyy-MM-dd}");
|
||||
|
||||
BeginLeave = _workDate;
|
||||
EndLeave = _workDate;
|
||||
|
@ -137,7 +137,7 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
await ProfileService.SetKmMorning(0);
|
||||
// reset date confirmed
|
||||
await ProfileService.SetDateConfirmed(false);
|
||||
Navigator.NavigateTo($"/advisor/sales-reports/view/{_workDate:yyyy-MM-dd}");
|
||||
Navigator.NavigateTo($"/advisor/reports/view/{_workDate:yyyy-MM-dd}");
|
||||
}
|
||||
/// <summary>
|
||||
/// Submit report
|
||||
|
@ -252,7 +252,7 @@ public partial class AdvisorReportCreatePage : IDisposable
|
|||
|
||||
var data = await AdvisorReportRepo.InitializeReportData($"{_workDate:yyyy-MM-dd}");
|
||||
if(data.ReportClosed)
|
||||
Navigator.NavigateTo($"/advisor/sales-reports/view/{_workDate:yyyy-MM-dd}");
|
||||
Navigator.NavigateTo($"/advisor/reports/view/{_workDate:yyyy-MM-dd}");
|
||||
|
||||
Report.Figures = data.ReportData;
|
||||
InitialValues = data.ReportData;
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
@using Wonky.Client.Components
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@attribute [Authorize(Roles = "Advisor")]
|
||||
@page "/advisor/sales-reports"
|
||||
@page "/advisor/reports"
|
||||
<PageTitle>Rapport Arkiv</PageTitle>
|
||||
<div class="card">
|
||||
<div class="card-header bg-dark text-white">
|
||||
|
|
|
@ -49,7 +49,7 @@ public partial class AdvisorReportListPage : IDisposable
|
|||
private void ShowThisReport(string reportDate)
|
||||
{
|
||||
Logger.LogDebug("CrmReportListPage => ShowThisReport <= {}", reportDate);
|
||||
Navigator.NavigateTo($"/advisor/sales-reports/view/{reportDate}");
|
||||
Navigator.NavigateTo($"/advisor/reports/view/{reportDate}");
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
@using Microsoft.AspNetCore.Authorization
|
||||
@using Wonky.Client.Models
|
||||
@attribute [Authorize(Roles = "Advisor,Admin")]
|
||||
@page "/advisor/sales-reports/view/{ReportDate}"
|
||||
@page "/advisor/reports/view/{ReportDate}"
|
||||
<PageTitle>@Report.ReportData.Name</PageTitle>
|
||||
<div class="row bg-dark text-white rounded-2 mb-2 py-2 align-items-center d-print-none">
|
||||
<div class="col-sm-6">
|
||||
|
@ -51,7 +51,7 @@
|
|||
<ReportDistanceLedgerComponent ReportData="Report.ReportData"/>
|
||||
</div>
|
||||
</div>
|
||||
<OfficeReportActivityListComponent ActivityList="Report.ReportItems"/>
|
||||
<AdvisorActivityListComponent ActivityList="Report.ReportItems"/>
|
||||
<ReportActivityLedgerComponent ReportData="Report.ReportData"/>
|
||||
}
|
||||
else
|
||||
|
|
|
@ -61,10 +61,10 @@ public partial class AdvisorReportViewPage : IDisposable
|
|||
switch (target)
|
||||
{
|
||||
case PTarget.OrderPage:
|
||||
Navigator.NavigateTo($"/print/orders/{UserInfo.CountryCode.ToLower()}/{UserInfo.Id}/{ReportDate}?returnUrl={ReturnUrl}");
|
||||
Navigator.NavigateTo($"/report/print/orders/{UserInfo.CountryCode.ToLower()}/{UserInfo.Id}/{ReportDate}?returnUrl={ReturnUrl}");
|
||||
break;
|
||||
case PTarget.FrontPage:
|
||||
Navigator.NavigateTo($"/print/report/{UserInfo.CountryCode.ToLower()}/{UserInfo.Id}/{ReportDate}?returnUrl={ReturnUrl}");
|
||||
Navigator.NavigateTo($"/report/print/summary/{UserInfo.CountryCode.ToLower()}/{UserInfo.Id}/{ReportDate}?returnUrl={ReturnUrl}");
|
||||
break;
|
||||
case PTarget.None:
|
||||
break;
|
||||
|
@ -85,7 +85,7 @@ public partial class AdvisorReportViewPage : IDisposable
|
|||
}
|
||||
|
||||
// ensure the browser address bar contains the correct link
|
||||
Navigator.NavigateTo($"/advisor/sales-reports/view/{workDate}", false, true);
|
||||
Navigator.NavigateTo($"/advisor/reports/view/{workDate}", false, true);
|
||||
|
||||
// return if we are already at it
|
||||
if (Working)
|
||||
|
|
|
@ -27,7 +27,7 @@ public partial class AdvisorWorkplaceDocumentListPage
|
|||
[Parameter] public string WorkplaceId { get; set; } = "";
|
||||
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] public IWorkplaceRepository WorkplaceCrmRepo { get; set; }
|
||||
[Inject] public IAdvisorWorkplaceRepository Workplaces { get; set; }
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
}
|
|
@ -27,7 +27,7 @@ namespace Wonky.Client.Pages;
|
|||
public partial class AdvisorWorkplaceListPage : IDisposable
|
||||
{
|
||||
[Parameter] public string CompanyId { get; set; } = "";
|
||||
[Inject] public IWorkplaceRepository WorkplaceCrmRepo { get; set; }
|
||||
[Inject] public IAdvisorWorkplaceRepository Workplaces { get; set; }
|
||||
[Inject] public IAdvisorCustomerRepository _companyRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
private List<WorkplaceListView> _workplaces { get; set; } = new();
|
||||
|
@ -45,7 +45,7 @@ public partial class AdvisorWorkplaceListPage : IDisposable
|
|||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Working = true;
|
||||
_workplaces = await WorkplaceCrmRepo.GetWorkplaces(CompanyId);
|
||||
_workplaces = await Workplaces.GetWorkplaces(CompanyId);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ public partial class AdvisorWorkplaceViewPage : IDisposable
|
|||
{
|
||||
[Parameter] public string CompanyId { get; set; } = "";
|
||||
[Parameter] public string WorkplaceId { get; set; } = "";
|
||||
[Inject] public IWorkplaceRepository WorkplaceCrmRepo { get; set; }
|
||||
[Inject] public IAdvisorWorkplaceRepository Workplaces { get; set; }
|
||||
[Inject] public IAdvisorCustomerRepository _companyRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] public NavigationManager _navigator { get; set; }
|
||||
|
@ -42,7 +42,7 @@ public partial class AdvisorWorkplaceViewPage : IDisposable
|
|||
_interceptor.RegisterEvent();
|
||||
_interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
Workplace = await WorkplaceCrmRepo.GetWorkplace(CompanyId, WorkplaceId);
|
||||
Workplace = await Workplaces.GetWorkplace(CompanyId, WorkplaceId);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
|
@ -54,14 +54,14 @@ public partial class AdvisorWorkplaceViewPage : IDisposable
|
|||
private async Task SubmitUpdate()
|
||||
{
|
||||
Working = true;
|
||||
await WorkplaceCrmRepo.UpdateWorkplace(CompanyId, Workplace);
|
||||
await Workplaces.UpdateWorkplace(CompanyId, Workplace);
|
||||
Working = false;
|
||||
}
|
||||
|
||||
private async Task DeleteWorkplace()
|
||||
{
|
||||
Working = true;
|
||||
await WorkplaceCrmRepo.DeleteWorkplace(CompanyId, Workplace.WorkplaceId);
|
||||
await Workplaces.DeleteWorkplace(CompanyId, Workplace.WorkplaceId);
|
||||
_navigator.NavigateTo($"/advisor/customers/{CompanyId}/workplaces");
|
||||
}
|
||||
|
||||
|
|
|
@ -15,11 +15,14 @@
|
|||
//
|
||||
*@
|
||||
|
||||
@using Wonky.Client.Components
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@attribute [Authorize(Roles = "Admin,Office,Warehouse")]
|
||||
@page "/office/catalog/{CountryCode}"
|
||||
<PageTitle>Produkt Katalog @CountryCode</PageTitle>
|
||||
@using Wonky.Client.Components
|
||||
|
||||
@attribute [Authorize(Roles = "Admin,Advisor,Office,Supervisor,Warehouse")]
|
||||
@page "/catalog"
|
||||
@page "/catalog/{CountryCode}"
|
||||
|
||||
<PageTitle>Produkt Katalog @CountryName</PageTitle>
|
||||
|
||||
<div class="sticky-top bg-dark rounded-2 px-3">
|
||||
<div class="row g-3 mb-3">
|
||||
|
@ -42,7 +45,7 @@
|
|||
<PaginationComponent MetaData="MetaInfo" Spread="2" SelectedPage="SetSelectedPage"/>
|
||||
</div>
|
||||
<div class="col-sm-2 text-end">
|
||||
<a class="btn btn-secondary" href="/print/catalog/@CountryCode"><i class="bi-printer"></i> Udskriv</a>
|
||||
<a class="btn btn-secondary" href="/catalog/@CountryCode/print"><i class="bi-printer"></i> Udskriv</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -13,9 +13,11 @@
|
|||
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||
//
|
||||
|
||||
using System.Text.Json;
|
||||
using Blazored.LocalStorage;
|
||||
using Wonky.Client.HttpInterceptors;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Wonky.Client.Helpers;
|
||||
using Wonky.Client.HttpInterfaces;
|
||||
using Wonky.Client.Services;
|
||||
using Wonky.Entity.Requests;
|
||||
|
@ -23,90 +25,108 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class OfficeCountryCatalogPage : IDisposable
|
||||
public partial class CatalogCountryPage : IDisposable
|
||||
{
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public ICountryCatalogRepository Catalog { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public UserProfileService ProfileService { get; set; }
|
||||
[Inject] public ILogger<CatalogCountryPage> Logger { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
|
||||
[Parameter] public string CountryCode { get; set; } = "";
|
||||
|
||||
private List<SalesItemView> Items { get; set; } = new();
|
||||
private MetaData MetaInfo { get; set; } = new();
|
||||
private CatalogPaging Paging = new();
|
||||
private UserPref Prefs = new();
|
||||
private CatalogPager Pager { get; set; } = new();
|
||||
private UserPref Prefs { get; set; } = new();
|
||||
private UserInfoView UserInfo { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
private bool Working { get; set; }
|
||||
private string CountryName { get; set; } = "";
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Prefs = await ProfileService.GetPreferences();
|
||||
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
|
||||
Paging.OrderBy = Prefs.ItemSort;
|
||||
Paging.SearchColumn = Prefs.ItemSearch;
|
||||
Paging.PageSize = Convert.ToInt32(Prefs.PageSize);
|
||||
Pager.OrderBy = Prefs.ItemSort;
|
||||
|
||||
Pager.SearchColumn = Prefs.ItemSearch;
|
||||
Pager.PageSize = Convert.ToInt32(Prefs.PageSize);
|
||||
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
await FetchSalesItems();
|
||||
if (string.IsNullOrWhiteSpace(CountryCode))
|
||||
{
|
||||
while (string.IsNullOrWhiteSpace(UserInfo.CountryCode))
|
||||
await Task.Delay(500);
|
||||
|
||||
CountryCode = UserInfo.CountryCode.ToLower();
|
||||
Navigator.NavigateTo($"/catalog/{CountryCode}", false, true);
|
||||
}
|
||||
|
||||
CountryName = Utils.CountryName(CountryCode);
|
||||
await GetCatalogPaged();
|
||||
}
|
||||
|
||||
private async Task SetSearchPhrase(string searchTerm)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
Paging.PageNumber = 1;
|
||||
Paging.SearchTerm = searchTerm;
|
||||
await FetchSalesItems();
|
||||
Pager.PageNumber = 1;
|
||||
Pager.SearchTerm = searchTerm;
|
||||
await GetCatalogPaged();
|
||||
}
|
||||
|
||||
private async Task SetPageSize(string pageSize)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
Paging.PageSize = Convert.ToInt32(pageSize);
|
||||
Paging.PageNumber = 1;
|
||||
await FetchSalesItems();
|
||||
Pager.PageSize = Convert.ToInt32(pageSize);
|
||||
Pager.PageNumber = 1;
|
||||
await GetCatalogPaged();
|
||||
}
|
||||
|
||||
private async Task SetSearchCol(string columnName)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
Paging.PageNumber = 1;
|
||||
Paging.SearchColumn = columnName;
|
||||
await FetchSalesItems();
|
||||
Pager.PageNumber = 1;
|
||||
Pager.SearchColumn = columnName;
|
||||
await GetCatalogPaged();
|
||||
}
|
||||
|
||||
private async Task SetSortCol(string orderBy)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
Paging.OrderBy = orderBy;
|
||||
await FetchSalesItems();
|
||||
Pager.OrderBy = orderBy;
|
||||
await GetCatalogPaged();
|
||||
}
|
||||
|
||||
private async Task SetSelectedPage(int page)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
Paging.PageNumber = page;
|
||||
await FetchSalesItems();
|
||||
Pager.PageNumber = page;
|
||||
await GetCatalogPaged();
|
||||
}
|
||||
|
||||
private async Task SetGroupCol(string groupFilter)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
Paging.PageNumber = 1;
|
||||
Paging.SelectGroup = groupFilter;
|
||||
await FetchSalesItems();
|
||||
Pager.PageNumber = 1;
|
||||
Pager.SelectGroup = groupFilter;
|
||||
await GetCatalogPaged();
|
||||
}
|
||||
|
||||
private async Task FetchSalesItems()
|
||||
private async Task GetCatalogPaged()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(CountryCode))
|
||||
return;
|
||||
if (Working)
|
||||
return;
|
||||
Working = true;
|
||||
var pagingResponse = await Catalog.GetSalesItemsPaged(CountryCode, Paging);
|
||||
var page = await Catalog.GetSalesItemsPaged(CountryCode, Pager);
|
||||
Items = page.Items!;
|
||||
MetaInfo = page.MetaData!;
|
||||
Working = false;
|
||||
Items = pagingResponse.Items!;
|
||||
MetaInfo = pagingResponse.MetaData!;
|
||||
}
|
||||
|
||||
public void Dispose() => Interceptor.DisposeEvent();
|
|
@ -17,8 +17,8 @@
|
|||
|
||||
@using Wonky.Client.Components
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@attribute [Authorize(Roles = "Admin,Office,Warehouse")]
|
||||
@page "/print/catalog/{CountryCode}"
|
||||
@attribute [Authorize(Roles = "Admin,Advisor,Office,Supervisor,Warehouse")]
|
||||
@page "/catalog/{CountryCode}/print"
|
||||
|
||||
<PageTitle>Udskriv Katalog for @CountryName</PageTitle>
|
||||
|
|
@ -30,14 +30,13 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class OfficeCountryPrintCatalogPage : IDisposable
|
||||
public partial class CatalogCountryPrintPage : IDisposable
|
||||
{
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public ICountryCatalogRepository Catalog { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Parameter] public string CountryCode { get; set; } = "";
|
||||
private List<SalesItemView> Items { get; set; } = new();
|
||||
private UserInfoView UserInfo { get; set; } = new();
|
||||
private bool Working { get; set; } = true;
|
||||
private string CountryName { get; set; } = "";
|
||||
|
||||
|
@ -45,8 +44,6 @@ public partial class OfficeCountryPrintCatalogPage : IDisposable
|
|||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
|
||||
Items = await Catalog.GetPriceList(CountryCode);
|
||||
CountryName = Utils.CountryName(CountryCode);
|
||||
Working = false;
|
|
@ -23,7 +23,7 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class OfficeCountrySalesRepCustomerListPage : IDisposable
|
||||
public partial class OfficeAdvisorCustomerListPage : IDisposable
|
||||
{
|
||||
[Parameter] public string UserId { get; set; } = "";
|
||||
[Parameter] public string CountryCode { get; set; } = "dk";
|
|
@ -26,13 +26,13 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class AdminSalesRepViewPage : IDisposable
|
||||
public partial class OfficeAdvisorViewPage : IDisposable
|
||||
{
|
||||
[Parameter] public string UserId { get; set; } = "";
|
||||
[Parameter] public string CountryCode { get; set; } = "";
|
||||
[Inject] public HttpInterceptorService _interceptor { get; set; }
|
||||
[Inject] public ISystemUserRepository SystemUserRepo { get; set; }
|
||||
[Inject] public ILogger<AdminSalesRepViewPage> _logger { get; set; }
|
||||
[Inject] public ILogger<OfficeAdvisorViewPage> _logger { get; set; }
|
||||
[Inject] public NavigationManager _navigator { get; set; }
|
||||
[Inject] public IToastService _toast { get; set; }
|
||||
private WebUserInfoView UserInfo { get; set; } = new();
|
|
@ -33,7 +33,7 @@
|
|||
<a class="list-group-item list-group-item-action list-group-item-success" href="/office/customers/dk">
|
||||
<i class="bi-phone"></i> Tlf.Ordre
|
||||
</a>
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/office/catalog/dk">
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/catalog/dk">
|
||||
<i class="bi-file-spreadsheet"></i> Priser
|
||||
</a>
|
||||
</div>
|
||||
|
@ -54,7 +54,7 @@
|
|||
<a class="list-group-item list-group-item-action list-group-item-success" href="/office/customers/no">
|
||||
<i class="bi-phone"></i> Tlf.Ordre
|
||||
</a>
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/office/catalog/no">
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/catalog/no">
|
||||
<i class="bi-file-spreadsheet"></i> Priser
|
||||
</a>
|
||||
</div>
|
||||
|
@ -75,7 +75,7 @@
|
|||
<a class="list-group-item list-group-item-action list-group-item-success" href="/office/customers/se">
|
||||
<i class="bi-phone"></i> Tlf.Ordre
|
||||
</a>
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/office/catalog/se">
|
||||
<a class="list-group-item list-group-item-action list-group-item-info" href="/catalog/se">
|
||||
<i class="bi-file-spreadsheet"></i> Priser
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
@ -225,4 +225,4 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<PriceListModal OnSelected="PriceListCallback" @ref="PriceList"/>
|
||||
<PriceCatalogModal OnSelected="PriceListCallback" @ref="PriceCatalog"/>
|
|
@ -26,9 +26,9 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class OfficeCountryCreateOrderPage : IDisposable
|
||||
public partial class OfficeCustomerCountryCreateOrderPage : IDisposable
|
||||
{
|
||||
[Inject] public ILogger<OfficeCountryCreateOrderPage> Logger { get; set; }
|
||||
[Inject] public ILogger<OfficeCustomerCountryCreateOrderPage> Logger { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public ICountryCustomerRepository CustomerRepo { get; set; }
|
||||
[Inject] public ICountryCustomerHistoryRepository InventoryRepo { get; set; }
|
||||
|
@ -59,7 +59,7 @@ public partial class OfficeCountryCreateOrderPage : IDisposable
|
|||
private bool ReportClosed { get; set; }
|
||||
private bool PoFormInvalid { get; set; } = true;
|
||||
private bool Working { get; set; }
|
||||
private PriceListModal PriceList { get; set; } = new();
|
||||
private PriceCatalogModal PriceCatalog { get; set; } = new();
|
||||
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
|
@ -75,58 +75,58 @@ public partial class OfficeCountryCreateOrderPage : IDisposable
|
|||
// fetch customer
|
||||
Customer = await CustomerRepo.GetByCustomerId(CountryCode, CompanyId);
|
||||
Logger.LogDebug("Customer => {}", JsonSerializer.Serialize(Customer));
|
||||
|
||||
var today = $"{DateTime.Now:yyyy-MM-dd}";
|
||||
|
||||
// initiate a sync to ensure up-to-date product history
|
||||
if (Customer.HistorySync != today)
|
||||
Customer.HistorySync = await InventoryRepo.InvoiceErpToCrmRpc(CountryCode, CompanyId, Customer.HistorySync);
|
||||
|
||||
// fetch customer inventory
|
||||
CustomerInventory = await InventoryRepo.FetchInventory(CountryCode, CompanyId);
|
||||
Logger.LogDebug("Inventory => {}", JsonSerializer.Serialize(CustomerInventory));
|
||||
|
||||
// get sales rep info
|
||||
SalesRep = await UserRepo.GetAdvisorInfo(Customer.SalesRepId);
|
||||
Logger.LogDebug("SalesRep => {}", JsonSerializer.Serialize(SalesRep));
|
||||
|
||||
// set activity salesRep and countryCode
|
||||
Activity.SalesRep = SalesRep.Advisor;
|
||||
Activity.CountryCode = SalesRep.CountryCode;
|
||||
|
||||
// add customer info into activity properties
|
||||
Activity.Account = Customer.Account;
|
||||
Activity.VatNumber = Customer.VatNumber;
|
||||
Activity.Email = Customer.Email;
|
||||
Activity.Phone = Customer.Phone;
|
||||
Activity.Mobile = Customer.Mobile;
|
||||
Activity.Name = Customer.Name;
|
||||
Activity.Address1 = Customer.Address1;
|
||||
Activity.Address2 = Customer.Address2;
|
||||
Activity.ZipCode = Customer.ZipCode;
|
||||
Activity.City = Customer.City;
|
||||
Activity.DlvName = Customer.Name;
|
||||
Activity.DlvAddress1 = Customer.Address1;
|
||||
Activity.DlvAddress2 = Customer.Address2;
|
||||
Activity.DlvZipCode = Customer.ZipCode;
|
||||
Activity.DlvCity = Customer.City;
|
||||
Activity.BcId = Customer.BcId;
|
||||
Activity.CompanyId = Customer.CompanyId;
|
||||
Activity.SalesRepId = Customer.SalesRepId;
|
||||
|
||||
// setting up activity properties
|
||||
Activity.ActivityStatusEnum = "noSale";
|
||||
Activity.VisitTypeEnum = "recall";
|
||||
Activity.ActivityTypeEnum = "phone";
|
||||
Activity.ActivityStatusEnum = "order";
|
||||
|
||||
// Initialize date variable
|
||||
SelectedDate = DateTime.Now;
|
||||
//
|
||||
// var today = $"{DateTime.Now:yyyy-MM-dd}";
|
||||
//
|
||||
// // initiate a sync to ensure up-to-date product history
|
||||
// if (Customer.HistorySync != today)
|
||||
// Customer.HistorySync = await InventoryRepo.InvoiceErpToCrmRpc(CountryCode, CompanyId, Customer.HistorySync);
|
||||
//
|
||||
// // fetch customer inventory
|
||||
// CustomerInventory = await InventoryRepo.FetchInventory(CountryCode, CompanyId);
|
||||
// Logger.LogDebug("Inventory => {}", JsonSerializer.Serialize(CustomerInventory));
|
||||
//
|
||||
// // get sales rep info
|
||||
// SalesRep = await UserRepo.GetAdvisorInfo(Customer.SalesRepId);
|
||||
// Logger.LogDebug("SalesRep => {}", JsonSerializer.Serialize(SalesRep));
|
||||
//
|
||||
// // set activity salesRep and countryCode
|
||||
// Activity.SalesRep = SalesRep.Advisor;
|
||||
// Activity.CountryCode = SalesRep.CountryCode;
|
||||
//
|
||||
// // add customer info into activity properties
|
||||
// Activity.Account = Customer.Account;
|
||||
// Activity.VatNumber = Customer.VatNumber;
|
||||
// Activity.Email = Customer.Email;
|
||||
// Activity.Phone = Customer.Phone;
|
||||
// Activity.Mobile = Customer.Mobile;
|
||||
// Activity.Name = Customer.Name;
|
||||
// Activity.Address1 = Customer.Address1;
|
||||
// Activity.Address2 = Customer.Address2;
|
||||
// Activity.ZipCode = Customer.ZipCode;
|
||||
// Activity.City = Customer.City;
|
||||
// Activity.DlvName = Customer.Name;
|
||||
// Activity.DlvAddress1 = Customer.Address1;
|
||||
// Activity.DlvAddress2 = Customer.Address2;
|
||||
// Activity.DlvZipCode = Customer.ZipCode;
|
||||
// Activity.DlvCity = Customer.City;
|
||||
// Activity.BcId = Customer.BcId;
|
||||
// Activity.CompanyId = Customer.CompanyId;
|
||||
// Activity.SalesRepId = Customer.SalesRepId;
|
||||
//
|
||||
// // setting up activity properties
|
||||
// Activity.ActivityStatusEnum = "noSale";
|
||||
// Activity.VisitTypeEnum = "recall";
|
||||
// Activity.ActivityTypeEnum = "phone";
|
||||
// Activity.ActivityStatusEnum = "order";
|
||||
//
|
||||
// // Initialize date variable
|
||||
// SelectedDate = DateTime.Now;
|
||||
}
|
||||
|
||||
private void CallPriceListModal()
|
||||
{
|
||||
PriceList.Show();
|
||||
PriceCatalog.Show();
|
||||
}
|
||||
|
||||
private async Task PriceListCallback(SelectedSku sku)
|
|
@ -28,7 +28,7 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages
|
||||
{
|
||||
public partial class OfficeCountryCustomerListPage : IDisposable
|
||||
public partial class OfficeCustomerCountryListPage : IDisposable
|
||||
{
|
||||
[Parameter] public string CountryCode { get; set; } = "";
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
|
@ -24,6 +24,11 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th class="p-0" colspan="4">
|
||||
<div class="d-print-none">
|
||||
<div class="row">
|
||||
<div class="col-sm-1">
|
||||
<button type="button" class="btn btn-warning d-block" onclick="window.print();">PRINT</button>
|
||||
</div>
|
||||
@if (_reportItem.Express)
|
||||
{
|
||||
<div id="watermark">
|
||||
|
@ -33,20 +38,15 @@
|
|||
{
|
||||
<AuthorizeView Roles="Admin,Office,Warehouse">
|
||||
<Authorized>
|
||||
<div class="d-print-none">
|
||||
<div class="row">
|
||||
<div class="col-sm-1">
|
||||
<button type="button" class="btn btn-warning d-block" onclick="window.print();">PRINT</button>
|
||||
</div>
|
||||
<div class="col-sm-5">
|
||||
<button type="button" class="btn btn-warning d-block" @onclick="SetExpressState" disabled="@_isNotified">Kvitter for modtagelse</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Authorized>
|
||||
</AuthorizeView>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-light text-dark border border-1 rounded-3 pt-3 mb-2">
|
||||
<h2 class="fw-bold text-center">@_reportItem.Company.Name</h2>
|
||||
@if (_reportItem.Express)
|
||||
|
|
|
@ -6,7 +6,7 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class OfficeSalesRepListPage :IDisposable
|
||||
public partial class OfficeUserAdvisorCountryListPage :IDisposable
|
||||
{
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public ISystemUserRepository SystemUserRepo { get; set; }
|
|
@ -23,7 +23,7 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class OfficeReportListPage : IDisposable
|
||||
public partial class OfficeUserAdvisorCountryReportListPage : IDisposable
|
||||
{
|
||||
[Parameter] public string UserId { get; set; } = "";
|
||||
[Parameter] public string CountryCode { get; set; } = "";
|
|
@ -23,7 +23,7 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class OfficeReportViewPage : IDisposable
|
||||
public partial class OfficeUserAdvisorCountryReportViewPage : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// Country code from url parameter
|
||||
|
@ -65,7 +65,7 @@ public partial class OfficeReportViewPage : IDisposable
|
|||
/// Logger service
|
||||
/// </summary>
|
||||
[Inject]
|
||||
public ILogger<OfficeReportViewPage> Logger { get; set; }
|
||||
public ILogger<OfficeUserAdvisorCountryReportViewPage> Logger { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Storage service
|
||||
|
@ -103,10 +103,10 @@ public partial class OfficeReportViewPage : IDisposable
|
|||
switch (target)
|
||||
{
|
||||
case PTarget.OrderPage:
|
||||
Navigator.NavigateTo($"/print/orders/{CountryCode}/{UserId}/{ReportDate}?returnUrl={ReturnUrl}");
|
||||
Navigator.NavigateTo($"/report/print/orders/{CountryCode}/{UserId}/{ReportDate}?returnUrl={ReturnUrl}");
|
||||
break;
|
||||
case PTarget.FrontPage:
|
||||
Navigator.NavigateTo($"/print/report/{CountryCode}/{UserId}/{ReportDate}?returnUrl={ReturnUrl}");
|
||||
Navigator.NavigateTo($"/report/print/summary/{CountryCode}/{UserId}/{ReportDate}?returnUrl={ReturnUrl}");
|
||||
break;
|
||||
case PTarget.None:
|
||||
break;
|
|
@ -22,35 +22,35 @@
|
|||
<div class="row mb-2">
|
||||
<label class="col-md-3 col-form-label">Side længde</label>
|
||||
<div class="col-md-3">
|
||||
<PageSizeComponent ></PageSizeComponent>
|
||||
<PageSizeComponent />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<label class="col-md-3 col-form-label">Kunde søgning</label>
|
||||
<div class="col-md-3">
|
||||
<CustomerSearchColumnComponent ></CustomerSearchColumnComponent>
|
||||
<CustomerSearchColumnComponent />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<label class="col-md-3 col-form-label">Kunde sortering</label>
|
||||
<div class="col-md-3">
|
||||
<CustomerSortComponent ></CustomerSortComponent>
|
||||
<CustomerSortComponent />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<label class="col-md-3 col-form-label">Produkt søgning</label>
|
||||
<div class="col-md-3">
|
||||
<CatalogSearchComponent ></CatalogSearchComponent>
|
||||
<CatalogSearchComponent />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row mb-2">
|
||||
<label class="col-md-3 col-form-label">Produkt sortering</label>
|
||||
<div class="col-md-3">
|
||||
<CatalogSortComponent ></CatalogSortComponent>
|
||||
<CatalogSortComponent />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
@*
|
||||
// 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 Wonky.Client.Components
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@attribute [Authorize(Roles = "Admin,Office,Advisor,Warehouse")]
|
||||
@page "/print/catalog"
|
||||
|
||||
<CatalogPrintComponent ItemList="Items" CountryName="@UserInfo.CountryName" />
|
||||
|
||||
@if (Working)
|
||||
{
|
||||
<WorkingThreeDots/>
|
||||
}
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
// 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 PrintCatalogPage : IDisposable
|
||||
{
|
||||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public IAdvisorCatalogRepository ItemRepo { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
|
||||
private List<SalesItemView> Items { get; set; } = new();
|
||||
private UserInfoView UserInfo { get; set; } = new();
|
||||
|
||||
private bool Working { get; set; } = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
|
||||
UserInfo = await Storage.GetItemAsync<UserInfoView>("_xu");
|
||||
|
||||
Items = await ItemRepo.GetPriceList();
|
||||
Working = false;
|
||||
}
|
||||
|
||||
public void Dispose() => Interceptor.DisposeEvent();
|
||||
|
||||
}
|
|
@ -18,7 +18,7 @@
|
|||
@using Wonky.Client.Components
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@attribute [Authorize(Roles = "Admin,Office,Advisor")]
|
||||
@page "/print/orders/{CountryCode}/{UserId}/{ReportDate}"
|
||||
@page "/report/print/orders/{CountryCode}/{UserId}/{ReportDate}"
|
||||
|
||||
<div class="row mb-3 d-print-none">
|
||||
<div class="col-sm-6 d-grid">
|
|
@ -21,7 +21,7 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class PrintOrderPage
|
||||
public partial class ReportPrintOrderPage
|
||||
{
|
||||
[Parameter] public string CountryCode { get; set; } = "";
|
||||
[Parameter] public string UserId { get; set; } = "";
|
||||
|
@ -29,7 +29,7 @@ public partial class PrintOrderPage
|
|||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] private IJSRuntime JSRuntime { get; set; }
|
||||
[Inject] public ILogger<PrintOrderPage> Logger { get; set; }
|
||||
[Inject] public ILogger<ReportPrintOrderPage> Logger { get; set; }
|
||||
private ReportView Report { get; set; } = new();
|
||||
private List<ReportItemView> Items { get; set; } = new();
|
||||
private IJSObjectReference JsModule { get; set; }
|
|
@ -18,7 +18,7 @@
|
|||
@using Wonky.Client.Components
|
||||
@using Microsoft.AspNetCore.Authorization
|
||||
@attribute [Authorize(Roles = "Admin,Office,Advisor")]
|
||||
@page "/print/report/{CountryCode}/{UserId}/{ReportDate}"
|
||||
@page "/report/print/summary/{CountryCode}/{UserId}/{ReportDate}"
|
||||
|
||||
<div class="row mb-3 d-print-none">
|
||||
<div class="col-sm-6 d-grid">
|
|
@ -22,7 +22,7 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Pages;
|
||||
|
||||
public partial class PrintFrontPage
|
||||
public partial class ReportPrintSummaryPage
|
||||
{
|
||||
[Parameter] public string CountryCode { get; set; } = "";
|
||||
[Parameter] public string UserId { get; set; } = "";
|
||||
|
@ -30,7 +30,7 @@ public partial class PrintFrontPage
|
|||
[Inject] public ILocalStorageService Storage { get; set; }
|
||||
[Inject] public NavigationManager Navigator { get; set; }
|
||||
[Inject] private IJSRuntime JSRuntime { get; set; }
|
||||
[Inject] public ILogger<PrintFrontPage> Logger { get; set; }
|
||||
[Inject] public ILogger<ReportPrintSummaryPage> Logger { get; set; }
|
||||
private ReportView Report { get; set; } = new();
|
||||
private IJSObjectReference JsModule { get; set; }
|
||||
private string ReturnUrl { get; set; } = "";
|
|
@ -60,8 +60,7 @@ builder.Services.AddScoped<IAdvisorContactRepository, AdvisorContactRepository>(
|
|||
builder.Services.AddScoped<IAdvisorCustomerHistoryRepository, AdvisorCustomerHistoryRepository>();
|
||||
builder.Services.AddScoped<IAdvisorTaskItemRepository, AdvisorTaskItemRepository>();
|
||||
builder.Services.AddScoped<IAdvisorReportRepository, AdvisorReportRepository>();
|
||||
builder.Services.AddScoped<IWorkplaceRepository, WorkplaceRepository>();
|
||||
builder.Services.AddScoped<IAdvisorCatalogRepository, AdvisorCatalogRepository>();
|
||||
builder.Services.AddScoped<IAdvisorWorkplaceRepository, AdvisorWorkplaceRepository>();
|
||||
// administrative repositories
|
||||
builder.Services.AddScoped<ICountryCustomerHistoryRepository, CountryCustomerHistoryRepository>();
|
||||
builder.Services.AddScoped<ICountryCatalogRepository, CountryCatalogRepository>();
|
||||
|
|
|
@ -18,11 +18,11 @@ namespace Wonky.Client.Services;
|
|||
|
||||
public record UserPref
|
||||
{
|
||||
public string? CompanyFilterPhrase { get; set; } = "";
|
||||
public string? CompanySearch { get; set; } = "name";
|
||||
public string? CompanySort { get; set; } = "name";
|
||||
public string? ItemSearch { get; set; } = "name";
|
||||
public string? ItemSort { get; set; } = "name";
|
||||
public string CompanyFilterPhrase { get; set; } = "";
|
||||
public string CompanySearch { get; set; } = "name";
|
||||
public string CompanySort { get; set; } = "name";
|
||||
public string ItemSearch { get; set; } = "name";
|
||||
public string ItemSort { get; set; } = "name";
|
||||
public string PageSize { get; set; } = "10";
|
||||
public string WorkDate { get; set; } = "";
|
||||
public int KmMorning { get; set; }
|
||||
|
@ -32,6 +32,7 @@ public record UserPref
|
|||
public class UserProfileService
|
||||
{
|
||||
private readonly ILocalStorageService _localStorageService;
|
||||
private const string KeyName = "preferences";
|
||||
public event Action<UserPref>? OnChange;
|
||||
public UserProfileService(ILocalStorageService localStorageService)
|
||||
{
|
||||
|
@ -46,7 +47,7 @@ public class UserProfileService
|
|||
{
|
||||
DateConfirmed = confirmed
|
||||
};
|
||||
await _localStorageService.SetItemAsync("preferences", newPreferences);
|
||||
await _localStorageService.SetItemAsync(KeyName, newPreferences);
|
||||
OnChange?.Invoke(newPreferences);
|
||||
}
|
||||
|
||||
|
@ -58,7 +59,7 @@ public class UserProfileService
|
|||
{
|
||||
KmMorning = kmMorning
|
||||
};
|
||||
await _localStorageService.SetItemAsync("preferences", newPreferences);
|
||||
await _localStorageService.SetItemAsync(KeyName, newPreferences);
|
||||
OnChange?.Invoke(newPreferences);
|
||||
}
|
||||
|
||||
|
@ -70,7 +71,7 @@ public class UserProfileService
|
|||
{
|
||||
CompanyFilterPhrase = filterPhrase
|
||||
};
|
||||
await _localStorageService.SetItemAsync("preferences", newPreferences);
|
||||
await _localStorageService.SetItemAsync(KeyName, newPreferences);
|
||||
OnChange?.Invoke(newPreferences);
|
||||
}
|
||||
|
||||
|
@ -82,7 +83,7 @@ public class UserProfileService
|
|||
{
|
||||
WorkDate = $"{workDate:yyyy-MM-dd}"
|
||||
};
|
||||
await _localStorageService.SetItemAsync("preferences", newPreferences);
|
||||
await _localStorageService.SetItemAsync(KeyName, newPreferences);
|
||||
OnChange?.Invoke(newPreferences);
|
||||
}
|
||||
|
||||
|
@ -91,7 +92,7 @@ public class UserProfileService
|
|||
var preferences = await GetPreferences();
|
||||
var newPreferences = preferences
|
||||
with { CompanySearch = companySearch };
|
||||
await _localStorageService.SetItemAsync("preferences", newPreferences);
|
||||
await _localStorageService.SetItemAsync(KeyName, newPreferences);
|
||||
OnChange?.Invoke(newPreferences);
|
||||
}
|
||||
|
||||
|
@ -100,7 +101,7 @@ public class UserProfileService
|
|||
var preferences = await GetPreferences();
|
||||
var newPreferences = preferences
|
||||
with { CompanySort = companySort };
|
||||
await _localStorageService.SetItemAsync("preferences", newPreferences);
|
||||
await _localStorageService.SetItemAsync(KeyName, newPreferences);
|
||||
OnChange?.Invoke(newPreferences);
|
||||
}
|
||||
|
||||
|
@ -109,7 +110,7 @@ public class UserProfileService
|
|||
var preferences = await GetPreferences();
|
||||
var newPreferences = preferences
|
||||
with { ItemSearch = itemSearch };
|
||||
await _localStorageService.SetItemAsync("preferences", newPreferences);
|
||||
await _localStorageService.SetItemAsync(KeyName, newPreferences);
|
||||
OnChange?.Invoke(newPreferences);
|
||||
}
|
||||
|
||||
|
@ -118,7 +119,7 @@ public class UserProfileService
|
|||
var preferences = await GetPreferences();
|
||||
var newPreferences = preferences
|
||||
with { ItemSort = itemSort };
|
||||
await _localStorageService.SetItemAsync("preferences", newPreferences);
|
||||
await _localStorageService.SetItemAsync(KeyName, newPreferences);
|
||||
OnChange?.Invoke(newPreferences);
|
||||
}
|
||||
|
||||
|
@ -127,13 +128,12 @@ public class UserProfileService
|
|||
var preferences = await GetPreferences();
|
||||
var newPreferences = preferences
|
||||
with { PageSize = pageSize };
|
||||
await _localStorageService.SetItemAsync("preferences", newPreferences);
|
||||
await _localStorageService.SetItemAsync(KeyName, newPreferences);
|
||||
OnChange?.Invoke(newPreferences);
|
||||
}
|
||||
|
||||
public async Task<UserPref> GetPreferences()
|
||||
{
|
||||
return await _localStorageService.GetItemAsync<UserPref>("preferences").ConfigureAwait(true)
|
||||
?? new UserPref();
|
||||
return await _localStorageService.GetItemAsync<UserPref>(KeyName) ?? new UserPref();
|
||||
}
|
||||
}
|
|
@ -17,6 +17,9 @@
|
|||
|
||||
@inject IWebAssemblyHostEnvironment HostEnvironment
|
||||
@using Wonky.Client.Components;
|
||||
@using Wonky.Client.Services
|
||||
@using Wonky.Entity.Views
|
||||
@using Blazored.LocalStorage
|
||||
|
||||
<div class="top-row ps-3 navbar navbar-dark">
|
||||
<div class="container-fluid">
|
||||
|
@ -64,18 +67,18 @@
|
|||
<i class="bi-calendar pe-2" style="font-size:1.3em;" aria-hidden="true"></i> ToDo
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link ps-2" href="/catalog">
|
||||
<i class="bi-file-spreadsheet pe-2" style="font-size:1.3em;" aria-hidden="true"></i> Priskatalog
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link ps-2" href="/advisor/customers">
|
||||
<i class="bi-building pe-2" style="font-size:1.3em;" aria-hidden="true"></i> Firmaer
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link ps-2" href="/advisor/price-catalog">
|
||||
<i class="bi-file-spreadsheet pe-2" style="font-size:1.3em;" aria-hidden="true"></i> Priskatalog
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link ps-2" href="/advisor/open-quotes">
|
||||
<NavLink class="nav-link ps-2" href="/advisor/agreements">
|
||||
<i class="bi-calculator pe-2" style="font-size:1.3em;" aria-hidden="true"></i> Aftaler/Tilbud
|
||||
</NavLink>
|
||||
</div>
|
||||
|
@ -85,7 +88,7 @@
|
|||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link ps-2" href="/advisor/sales-reports">
|
||||
<NavLink class="nav-link ps-2" href="/advisor/reports">
|
||||
<i class="bi-file-earmark-spreadsheet pe-2" style="font-size:1.3em;" aria-hidden="true"></i> Dagsrapporter
|
||||
</NavLink>
|
||||
</div>
|
||||
|
@ -101,6 +104,7 @@
|
|||
</div>
|
||||
|
||||
@code {
|
||||
|
||||
private bool collapseNavMenu = true;
|
||||
|
||||
private string? NavMenuCssClass => collapseNavMenu ? "collapse" : null;
|
||||
|
@ -110,4 +114,5 @@
|
|||
collapseNavMenu = !collapseNavMenu;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -41,7 +41,7 @@
|
|||
</div>
|
||||
<div class="row mb-2">
|
||||
<div class="col-sm-12">
|
||||
<PaginationComponent MetaData="ResponseMeta" Spread="2" SelectedPage="SelectedPage" />
|
||||
<PaginationComponent MetaData="MetaInfo" Spread="2" SelectedPage="SelectedPage" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row text-white">
|
|
@ -24,31 +24,41 @@ using Wonky.Entity.Views;
|
|||
|
||||
namespace Wonky.Client.Shared;
|
||||
|
||||
public partial class PriceListModal : IDisposable
|
||||
public partial class PriceCatalogModal : IDisposable
|
||||
{
|
||||
[Parameter] public string CountryCode { get; set; } = "dk";
|
||||
[Parameter] public string CountryCode { get; set; } = "";
|
||||
[Parameter] public EventCallback<SelectedSku> OnSelected { get; set; }
|
||||
[Inject] public IAdvisorCatalogRepository Catalog { get; set; }
|
||||
[Inject] public ICountryCatalogRepository Catalog { get; set; }
|
||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||
[Inject] public UserProfileService ProfileService { get; set; }
|
||||
|
||||
private string _modalDisplay = "";
|
||||
private bool _showBackdrop;
|
||||
private List<SalesItemView> Items { get; set; } = new();
|
||||
private MetaData? ResponseMeta { get; set; } = new();
|
||||
private CatalogPaging _paging = new();
|
||||
private MetaData? MetaInfo { get; set; } = new();
|
||||
private CatalogPager _pager = new();
|
||||
private UserPref _userPref = new();
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
_userPref = await ProfileService.GetPreferences();
|
||||
_paging.OrderBy = _userPref.ItemSort;
|
||||
_paging.SearchColumn = _userPref.ItemSearch;
|
||||
_paging.PageSize = Convert.ToInt32(_userPref.PageSize);
|
||||
Interceptor.RegisterEvent();
|
||||
Interceptor.RegisterBeforeSendEvent();
|
||||
await GetSalesItems();
|
||||
}
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
_userPref = await ProfileService.GetPreferences();
|
||||
_pager.OrderBy = _userPref.ItemSort;
|
||||
_pager.SearchColumn = _userPref.ItemSearch;
|
||||
_pager.PageSize = Convert.ToInt32(_userPref.PageSize);
|
||||
}
|
||||
|
||||
private async Task GetSalesItems()
|
||||
{
|
||||
var pagingResponse = await Catalog.GetSalesItemsPaged(CountryCode, _pager);
|
||||
Items = pagingResponse.Items!;
|
||||
MetaInfo = pagingResponse.MetaData;
|
||||
}
|
||||
|
||||
private void SelectItem(string itemId, string quantity, string rate)
|
||||
{
|
||||
|
@ -59,44 +69,37 @@ public partial class PriceListModal : IDisposable
|
|||
private async Task SelectedPage(int page)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_paging.PageNumber = page;
|
||||
_pager.PageNumber = page;
|
||||
await GetSalesItems();
|
||||
}
|
||||
private async Task SetSearchPhrase(string searchTerm)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_paging.PageNumber = 1;
|
||||
_paging.SearchTerm = searchTerm;
|
||||
_pager.PageNumber = 1;
|
||||
_pager.SearchTerm = searchTerm;
|
||||
await GetSalesItems();
|
||||
}
|
||||
|
||||
private async Task GetSalesItems()
|
||||
{
|
||||
var pagingResponse = await Catalog.GetSalesItemsPaged(_paging);
|
||||
Items = pagingResponse.Items!;
|
||||
ResponseMeta = pagingResponse.MetaData;
|
||||
}
|
||||
|
||||
private async Task SetPageSize(string pageSize)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_paging.PageSize = Convert.ToInt32(pageSize);
|
||||
_paging.PageNumber = 1;
|
||||
_pager.PageSize = Convert.ToInt32(pageSize);
|
||||
_pager.PageNumber = 1;
|
||||
await GetSalesItems();
|
||||
}
|
||||
|
||||
private async Task SetSearchCol(string columnName)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_paging.PageNumber = 1;
|
||||
_paging.SearchColumn = columnName;
|
||||
_pager.PageNumber = 1;
|
||||
_pager.SearchColumn = columnName;
|
||||
await GetSalesItems();
|
||||
}
|
||||
|
||||
private async Task SetSortCol(string orderBy)
|
||||
{
|
||||
Items = new List<SalesItemView>();
|
||||
_paging.OrderBy = orderBy;
|
||||
_pager.OrderBy = orderBy;
|
||||
await GetSalesItems();
|
||||
}
|
||||
|
|
@ -31,6 +31,7 @@
|
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Remove="wwwroot\icons\**" />
|
||||
<Content Remove="Pages\AdvisorCustomerOrderViewPage.razor" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -3783,6 +3784,7 @@
|
|||
|
||||
<ItemGroup>
|
||||
<Compile Remove="wwwroot\icons\**" />
|
||||
<Compile Remove="Pages\AdvisorCustomerOrderViewPage.razor.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
{
|
||||
"appInfo": {
|
||||
"name": "Wonky Client",
|
||||
"version": "0.97.x",
|
||||
"version": "0.97.1",
|
||||
"rc": true,
|
||||
"sandBox": false,
|
||||
"image": "grumpy-coder.png"
|
||||
},
|
||||
"apiConfig": {
|
||||
"baseUrl": "https://dev.innotec.dk",
|
||||
"catalog": "api/v2/catalog",
|
||||
"baseUrl": "https://zeta.innotec.dk",
|
||||
"catalog": "api/v2/catalog/country",
|
||||
"crmCustomers": "api/v2/crm/companies",
|
||||
"crmInventoryExt": "history/inventory",
|
||||
"crmProductExt": "history/products",
|
||||
|
@ -30,7 +30,7 @@
|
|||
"servicesVatNo": "api/v2/services/brReg",
|
||||
"servicesAuth": "token",
|
||||
"syncRpc": "api/v2/rpc",
|
||||
"syncRpcInvoiceExt": "invoices/rpc",
|
||||
"syncRpcInvoiceExt": "invoices",
|
||||
"userInfo": "api/auth/userinfo",
|
||||
"warehouse": "api/v2/warehouse/packages"
|
||||
},
|
||||
|
|
|
@ -16,7 +16,6 @@ body {
|
|||
.workDate {
|
||||
font-variant: small-caps;
|
||||
}
|
||||
|
||||
.btn.btn-edit {
|
||||
color: #030303;
|
||||
background-color: #a2a2ec;
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
namespace Wonky.Entity.Requests;
|
||||
|
||||
public class CatalogPaging
|
||||
public class CatalogPager
|
||||
{
|
||||
/// <summary>
|
||||
/// internal default page size
|
Loading…
Reference in a new issue