built v 0.5.5
This commit is contained in:
parent
427ee9195a
commit
2daf236c4a
8 changed files with 64 additions and 32 deletions
|
@ -28,21 +28,27 @@ using Wonky.Entity.Models;
|
||||||
namespace Wonky.Client.Components;
|
namespace Wonky.Client.Components;
|
||||||
public partial class Home : IDisposable
|
public partial class Home : IDisposable
|
||||||
{
|
{
|
||||||
[Inject] public ILocalStorageService Storage { get; set; }
|
// [Inject] public ILocalStorageService Storage { get; set; }
|
||||||
|
[Inject] public UserPreferenceService UserPrefs { get; set; }
|
||||||
[Inject] public ILogger<Home> Logger { get; set; }
|
[Inject] public ILogger<Home> Logger { get; set; }
|
||||||
[Inject] private HttpInterceptorService Interceptor { get; set; }
|
[Inject] private HttpInterceptorService Interceptor { get; set; }
|
||||||
[Inject] public UserPreferenceService UserPrefs { get; set; }
|
|
||||||
[Inject] public NavigationManager Navigator { get; set; }
|
[Inject] public NavigationManager Navigator { get; set; }
|
||||||
[Inject] public IActivityHttpRepository ActivityRepo { get; set; }
|
[Inject] public IActivityHttpRepository ActivityRepo { get; set; }
|
||||||
private Preferences _prefs { get; set; } = new();
|
|
||||||
private List<ReportActivityDto> Activities { get; set; }
|
private List<ReportActivityDto> Activities { get; set; }
|
||||||
|
private Preferences _prefs { get; set; } = new();
|
||||||
|
private string _workDate { get; set; } = "";
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
|
_prefs = await UserPrefs.GetPreferences();
|
||||||
|
_workDate = string.IsNullOrWhiteSpace(_prefs.WorkDate)
|
||||||
|
? $"{DateTime.Now:yyyy-MM-dd}"
|
||||||
|
: _prefs.WorkDate;
|
||||||
|
|
||||||
Interceptor.RegisterEvent();
|
Interceptor.RegisterEvent();
|
||||||
Interceptor.RegisterBeforeSendEvent();
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
_prefs = await UserPrefs.GetPreferences();
|
|
||||||
await FetchActivities(_prefs.WorkDate);
|
await FetchActivities(_workDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task FetchActivities(string workDate)
|
private async Task FetchActivities(string workDate)
|
||||||
|
|
|
@ -3,11 +3,11 @@
|
||||||
|
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<h5 class="fw-bold">@DateTime.Parse(WorkDate).ToLongDateString()</h5>
|
<h5 class="fw-bold">@DateTime.Parse(_workDate).ToLongDateString()</h5>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-4">
|
<div class="col-md-4">
|
||||||
<input type="date" class="form-control"
|
<input type="date" class="form-control"
|
||||||
@bind-Value="WorkDate" @bind-Value:event="oninput"
|
@bind-Value="_workDate" @bind-Value:event="oninput"
|
||||||
@onchange="OnDateChanged" />
|
@onchange="OnDateChanged" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,14 +11,18 @@ public partial class WorkDateComponent : IDisposable
|
||||||
[Parameter] public EventCallback<string> OnChanged { get; set; }
|
[Parameter] public EventCallback<string> OnChanged { get; set; }
|
||||||
|
|
||||||
private Preferences _prefs = new();
|
private Preferences _prefs = new();
|
||||||
private string WorkDate { get; set; }
|
private string _workDate = $"{DateOnly.FromDateTime(DateTime.Now):yyyy-MM-dd}";
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
UserPrefs.OnChange += ProfileServiceOnOnChange;
|
UserPrefs.OnChange += ProfileServiceOnOnChange;
|
||||||
_prefs = await UserPrefs.GetPreferences();
|
_prefs = await UserPrefs.GetPreferences();
|
||||||
WorkDate = _prefs.WorkDate;
|
|
||||||
|
_workDate = string.IsNullOrWhiteSpace(_prefs.WorkDate)
|
||||||
|
? $"{DateOnly.FromDateTime(DateTime.Now):yyyy-MM-dd}"
|
||||||
|
: _prefs.WorkDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task OnDateChanged(ChangeEventArgs e)
|
private async Task OnDateChanged(ChangeEventArgs e)
|
||||||
{
|
{
|
||||||
var val = $"{DateOnly.Parse(e.Value?.ToString()!):yyyy-MM-dd}";
|
var val = $"{DateOnly.Parse(e.Value?.ToString()!):yyyy-MM-dd}";
|
||||||
|
|
|
@ -17,6 +17,7 @@ using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
|
using System.Net.Mime;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Wonky.Client.Features;
|
using Wonky.Client.Features;
|
||||||
|
@ -58,9 +59,7 @@ public class ActivityHttpRepository : IActivityHttpRepository
|
||||||
var response = await _client
|
var response = await _client
|
||||||
.GetAsync($"{_apiConfig.ActivityEndpoint}/date/{activityDate}");
|
.GetAsync($"{_apiConfig.ActivityEndpoint}/date/{activityDate}");
|
||||||
var content = await response.Content.ReadAsStringAsync();
|
var content = await response.Content.ReadAsStringAsync();
|
||||||
|
_logger.LogInformation("GetActivities => {content}", content);
|
||||||
Console.WriteLine(content);
|
|
||||||
|
|
||||||
return string.IsNullOrWhiteSpace(content)
|
return string.IsNullOrWhiteSpace(content)
|
||||||
? new List<ReportActivityDto>()
|
? new List<ReportActivityDto>()
|
||||||
: JsonSerializer.Deserialize<List<ReportActivityDto>>(content, _options);
|
: JsonSerializer.Deserialize<List<ReportActivityDto>>(content, _options);
|
||||||
|
@ -77,8 +76,9 @@ public class ActivityHttpRepository : IActivityHttpRepository
|
||||||
};
|
};
|
||||||
var response = await _client
|
var response = await _client
|
||||||
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.ActivityEndpoint}/page", queryString));
|
.GetAsync(QueryHelpers.AddQueryString($"{_apiConfig.ActivityEndpoint}/page", queryString));
|
||||||
|
|
||||||
var content = await response.Content.ReadAsStringAsync();
|
var content = await response.Content.ReadAsStringAsync();
|
||||||
|
if (!response.IsSuccessStatusCode)
|
||||||
|
_logger.LogInformation("GetActivityPages => {content}", content);
|
||||||
|
|
||||||
var pagingResponse = new PagingResponse<ActivityDto>
|
var pagingResponse = new PagingResponse<ActivityDto>
|
||||||
{
|
{
|
||||||
|
@ -91,8 +91,8 @@ public class ActivityHttpRepository : IActivityHttpRepository
|
||||||
|
|
||||||
public async Task<ActivityResponseView> CreateActivity(ActivityDto model)
|
public async Task<ActivityResponseView> CreateActivity(ActivityDto model)
|
||||||
{
|
{
|
||||||
Console.WriteLine(JsonSerializer.Serialize(model));
|
Console.WriteLine(JsonSerializer.Serialize(model, _options));
|
||||||
var response = await _client.PostAsJsonAsync($"{_apiConfig.ActivityEndpoint}", model);
|
var response = await _client.PostAsJsonAsync($"{_apiConfig.ActivityEndpoint}", model, _options);
|
||||||
var content = await response.Content.ReadAsStringAsync();
|
var content = await response.Content.ReadAsStringAsync();
|
||||||
var result = JsonSerializer.Deserialize<ActivityResponseView>(content);
|
var result = JsonSerializer.Deserialize<ActivityResponseView>(content);
|
||||||
return result!;
|
return result!;
|
||||||
|
|
|
@ -326,7 +326,7 @@
|
||||||
<label for="dlvAddress1" class="col-md-2 col-form-label">Lev. Adresse</label>
|
<label for="dlvAddress1" class="col-md-2 col-form-label">Lev. Adresse</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="dlvAddress1" class="form-control"
|
<InputText id="dlvAddress1" class="form-control"
|
||||||
@bind-Value="_poDraft.DlvAddress"/>
|
@bind-Value="_poDraft.DlvAddress1"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
|
|
|
@ -32,6 +32,7 @@ namespace Wonky.Client.Pages;
|
||||||
|
|
||||||
public partial class CrmActivityCreate : IDisposable
|
public partial class CrmActivityCreate : IDisposable
|
||||||
{
|
{
|
||||||
|
[Inject] public ILogger<CrmActivityCreate> _logger { get; set; }
|
||||||
[Inject] public IToastService ToastService { get; set; }
|
[Inject] public IToastService ToastService { get; set; }
|
||||||
[Inject] public NavigationManager NavigationManager { get; set; }
|
[Inject] public NavigationManager NavigationManager { get; set; }
|
||||||
[Inject] public ILocalStorageService StorageService { get; set; }
|
[Inject] public ILocalStorageService StorageService { get; set; }
|
||||||
|
@ -42,6 +43,10 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
[Inject] private IActivityHttpRepository ActivityRepo { get; set; }
|
[Inject] private IActivityHttpRepository ActivityRepo { get; set; }
|
||||||
[CascadingParameter] DraftStateProvider DraftStateProvider { get; set; }
|
[CascadingParameter] DraftStateProvider DraftStateProvider { get; set; }
|
||||||
[Parameter] public string CompanyId { get; set; }
|
[Parameter] public string CompanyId { get; set; }
|
||||||
|
private readonly JsonSerializerOptions? _options = new JsonSerializerOptions
|
||||||
|
{
|
||||||
|
PropertyNameCaseInsensitive = true
|
||||||
|
};
|
||||||
private NgSalesItemView _selectedItem { get; set; } = new();
|
private NgSalesItemView _selectedItem { get; set; } = new();
|
||||||
private List<NgSalesItemView> SalesItems { get; set; } = new();
|
private List<NgSalesItemView> SalesItems { get; set; } = new();
|
||||||
private MetaData MetaData { get; set; } = new();
|
private MetaData MetaData { get; set; } = new();
|
||||||
|
@ -74,13 +79,17 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
_paging.PageSize = Convert.ToInt32(_prefs.PageSize);
|
_paging.PageSize = Convert.ToInt32(_prefs.PageSize);
|
||||||
|
|
||||||
await GetSalesItems();
|
await GetSalesItems();
|
||||||
|
|
||||||
Ux = await StorageService.GetItemAsync<UserInfoView>("_xu");
|
Ux = await StorageService.GetItemAsync<UserInfoView>("_xu");
|
||||||
NgCompany = await CompanyRepo.GetCompanyById(CompanyId);
|
NgCompany = await CompanyRepo.GetCompanyById(CompanyId);
|
||||||
|
|
||||||
// set up identification
|
// set up identification
|
||||||
_poDraft.SalesHeadId = "";
|
_poDraft.CompanyId = NgCompany.CompanyId;
|
||||||
_poDraft.CompanyId = CompanyId;
|
_poDraft.BcId = NgCompany.BcId;
|
||||||
|
_poDraft.SalesRepId = Ux.Id;
|
||||||
_poDraft.ActivityDate = _prefs.WorkDate;
|
_poDraft.ActivityDate = _prefs.WorkDate;
|
||||||
|
_poDraft.ActivityStatusEnum = "noSale";
|
||||||
|
_poDraft.VisitTypeEnum = NgCompany.Account is "" or "NY" ? "new" : "recall";
|
||||||
|
|
||||||
// permanent identifications
|
// permanent identifications
|
||||||
_poDraft.SalesRep = Ux.Adviser;
|
_poDraft.SalesRep = Ux.Adviser;
|
||||||
|
@ -88,15 +97,16 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
_poDraft.VatNumber = NgCompany.VatNumber;
|
_poDraft.VatNumber = NgCompany.VatNumber;
|
||||||
_poDraft.EMail = NgCompany.Email;
|
_poDraft.EMail = NgCompany.Email;
|
||||||
_poDraft.Phone = NgCompany.Phone;
|
_poDraft.Phone = NgCompany.Phone;
|
||||||
|
_poDraft.Mobile = NgCompany.Mobile;
|
||||||
|
|
||||||
_poDraft.Name = NgCompany.Name;
|
_poDraft.Name = NgCompany.Name;
|
||||||
_poDraft.Address = NgCompany.Address1;
|
_poDraft.Address1 = NgCompany.Address1;
|
||||||
_poDraft.Address2 = NgCompany.Address2;
|
_poDraft.Address2 = NgCompany.Address2;
|
||||||
_poDraft.ZipCode = NgCompany.ZipCode;
|
_poDraft.ZipCode = NgCompany.ZipCode;
|
||||||
_poDraft.City = NgCompany.City;
|
_poDraft.City = NgCompany.City;
|
||||||
|
|
||||||
_poDraft.DlvName = NgCompany.Name;
|
_poDraft.DlvName = NgCompany.Name;
|
||||||
_poDraft.DlvAddress = NgCompany.Address1;
|
_poDraft.DlvAddress1 = NgCompany.Address1;
|
||||||
_poDraft.DlvAddress2 = NgCompany.Address2;
|
_poDraft.DlvAddress2 = NgCompany.Address2;
|
||||||
_poDraft.DlvZipCode = NgCompany.ZipCode;
|
_poDraft.DlvZipCode = NgCompany.ZipCode;
|
||||||
_poDraft.DlvCity = NgCompany.City;
|
_poDraft.DlvCity = NgCompany.City;
|
||||||
|
@ -109,19 +119,21 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
|
|
||||||
private void SetWorkDate(string workDate)
|
private void SetWorkDate(string workDate)
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("WorkDateComponent.OnChanged() => {workDate}", workDate);
|
||||||
_poDraft.ActivityDate = workDate;
|
_poDraft.ActivityDate = workDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task CreateActivity()
|
private async Task CreateActivity()
|
||||||
{
|
{
|
||||||
HideButtons = true;
|
HideButtons = true;
|
||||||
|
_poDraft.ActivityDate = _prefs.WorkDate;
|
||||||
var activityType = _poDraft.ActivityTypeEnum switch
|
var activityType = _poDraft.ActivityTypeEnum switch
|
||||||
{
|
{
|
||||||
"phone" => "Tlf",
|
"phone" => "T",
|
||||||
"onSite" => "Bsg",
|
"onSite" => "B",
|
||||||
_ => ""
|
_ => ""
|
||||||
};
|
};
|
||||||
_poDraft.OurRef = $"{Ux.FullName.Split(" ")[0]} {activityType}";
|
_poDraft.OurRef = $"{activityType}:{Ux.FullName.Split(" ")[0]}";
|
||||||
var ln = 0;
|
var ln = 0;
|
||||||
|
|
||||||
// post to create activity endpoint
|
// post to create activity endpoint
|
||||||
|
@ -144,9 +156,7 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
_poDraft.Lines = lines;
|
_poDraft.Lines = lines;
|
||||||
|
|
||||||
await StorageService.SetItemAsync(CompanyId, _poDraft);
|
await StorageService.SetItemAsync(CompanyId, _poDraft);
|
||||||
|
|
||||||
var result = await ActivityRepo.CreateActivity(_poDraft);
|
var result = await ActivityRepo.CreateActivity(_poDraft);
|
||||||
Console.WriteLine(JsonSerializer.Serialize(result));
|
|
||||||
ToastService.ShowSuccess($"{result.Message}.");
|
ToastService.ShowSuccess($"{result.Message}.");
|
||||||
NavigationManager.NavigateTo($"/companies");
|
NavigationManager.NavigateTo($"/companies");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,29 @@
|
||||||
{
|
{
|
||||||
"Logging": {
|
"Logging": {
|
||||||
"LogLevel": {
|
"LogLevel": {
|
||||||
"Default": "Debug",
|
"Default": "None",
|
||||||
"System": "Debug",
|
"System": "Debug",
|
||||||
"Microsoft": "Information"
|
"Microsoft": "Information"
|
||||||
|
},
|
||||||
|
"Debug": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Debug"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ActivityHttpRepository": {
|
||||||
|
"LogLevel": {
|
||||||
|
"Default": "Critical"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"appInfo": {
|
"appInfo": {
|
||||||
"name": "Wonky Client",
|
"name": "Wonky Client",
|
||||||
"version": "0.5.1",
|
"version": "0.5.5",
|
||||||
"isBeta": true,
|
"isBeta": true,
|
||||||
"image": "grumpy-coder.png"
|
"image": "grumpy-coder.png"
|
||||||
},
|
},
|
||||||
"apiConfig": {
|
"apiConfig": {
|
||||||
"baseAddress": "https://staging.innotec.dk",
|
"baseAddress": "https://dev.innotec.dk",
|
||||||
"tokenPath": "token",
|
"tokenPath": "token",
|
||||||
"userInfo": "api/auth/userinfo",
|
"userInfo": "api/auth/userinfo",
|
||||||
"customerEndpoint": "api/v2/crm/companies",
|
"customerEndpoint": "api/v2/crm/companies",
|
||||||
|
|
|
@ -19,20 +19,22 @@ namespace Wonky.Entity.DTO
|
||||||
{
|
{
|
||||||
public class ActivityDto
|
public class ActivityDto
|
||||||
{
|
{
|
||||||
public string SalesHeadId { get; set; } = "";
|
public string SalesRep { get; set; } = "";
|
||||||
|
public string SalesRepId { get; set; } = "";
|
||||||
public string CompanyId { get; set; } = "";
|
public string CompanyId { get; set; } = "";
|
||||||
|
public string BcId { get; set; } = "";
|
||||||
public string Account { get; set; } = "";
|
public string Account { get; set; } = "";
|
||||||
[MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string VatNumber { get; set; } = "";
|
[MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string VatNumber { get; set; } = "";
|
||||||
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string Name { get; set; } = "";
|
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string Name { get; set; } = "";
|
||||||
[MaxLength(30, ErrorMessage = "Du kan højst bruge 30 tegn")] public string City { get; set; }= "";
|
[MaxLength(30, ErrorMessage = "Du kan højst bruge 30 tegn")] public string City { get; set; }= "";
|
||||||
[MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string ZipCode { get; set; } = "";
|
[MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string ZipCode { get; set; } = "";
|
||||||
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string Address { get; set; } = "";
|
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string Address1 { get; set; } = "";
|
||||||
[MaxLength(50, ErrorMessage = "Du kan højst bruge 50 tegn")] public string Address2 { get; set; } = "";
|
[MaxLength(50, ErrorMessage = "Du kan højst bruge 50 tegn")] public string Address2 { get; set; } = "";
|
||||||
[MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string Phone { get; set; } = "";
|
[MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string Phone { get; set; } = "";
|
||||||
|
[MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string Mobile { get; set; } = "";
|
||||||
[MaxLength(80, ErrorMessage = "Du kan højst bruge 80 tegn")] public string EMail { get; set; } = "";
|
[MaxLength(80, ErrorMessage = "Du kan højst bruge 80 tegn")] public string EMail { get; set; } = "";
|
||||||
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string Attention { get; set; } = "";
|
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string Attention { get; set; } = "";
|
||||||
// Form entries
|
// Form entries
|
||||||
public string SalesRep { get; set; } = "";
|
|
||||||
[Required(ErrorMessage = "Vælg aktivitetstype")] public string ActivityTypeEnum { get; set; } = "";
|
[Required(ErrorMessage = "Vælg aktivitetstype")] public string ActivityTypeEnum { get; set; } = "";
|
||||||
[Required(ErrorMessage = "Vælg status for besøg ")] public string ActivityStatusEnum { get; set; } = "";
|
[Required(ErrorMessage = "Vælg status for besøg ")] public string ActivityStatusEnum { get; set; } = "";
|
||||||
public string VisitTypeEnum { get; set; } = "recall";
|
public string VisitTypeEnum { get; set; } = "recall";
|
||||||
|
@ -45,7 +47,7 @@ namespace Wonky.Entity.DTO
|
||||||
[MaxLength(255, ErrorMessage = "Du kan højst bruge 255 tegn")] public string CrmNote { get; set; } = "";
|
[MaxLength(255, ErrorMessage = "Du kan højst bruge 255 tegn")] public string CrmNote { get; set; } = "";
|
||||||
// Delivery address form entries
|
// Delivery address form entries
|
||||||
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string DlvName { get; set; } = "";
|
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string DlvName { get; set; } = "";
|
||||||
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string DlvAddress { get; set; } = "";
|
[MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string DlvAddress1 { get; set; } = "";
|
||||||
[MaxLength(50, ErrorMessage = "Du kan højst bruge 50 tegn")] public string DlvAddress2 { get; set; } = "";
|
[MaxLength(50, ErrorMessage = "Du kan højst bruge 50 tegn")] public string DlvAddress2 { get; set; } = "";
|
||||||
[MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string DlvZipCode { get; set; } = "";
|
[MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string DlvZipCode { get; set; } = "";
|
||||||
[MaxLength(30, ErrorMessage = "Du kan højst bruge 30 tegn")] public string DlvCity { get; set; } = "";
|
[MaxLength(30, ErrorMessage = "Du kan højst bruge 30 tegn")] public string DlvCity { get; set; } = "";
|
||||||
|
|
Loading…
Reference in a new issue