wip
This commit is contained in:
parent
f8d9058cdf
commit
f1958d57d7
20 changed files with 245 additions and 259 deletions
|
@ -17,7 +17,7 @@
|
||||||
<span class="version">@Name</span> <span class="version">@Version</span>@if(IsBeta){<span class="version">-beta</span>}
|
<span class="version">@Name</span> <span class="version">@Version</span>@if(IsBeta){<span class="version">-beta</span>}
|
||||||
@code
|
@code
|
||||||
{
|
{
|
||||||
private const string Version = "0.2.25";
|
private const string Version = "0.2.2";
|
||||||
private const string Name = "wwo";
|
private const string Name = "wwo";
|
||||||
private const bool IsBeta = true;
|
private const bool IsBeta = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ namespace Wonky.Client.Components
|
||||||
{
|
{
|
||||||
public partial class CompanyTable
|
public partial class CompanyTable
|
||||||
{
|
{
|
||||||
[Parameter] public List<DtoNgCrmCompany> Companies { get; set; } = new();
|
[Parameter] public List<DtoNgCompany> Companies { get; set; } = new();
|
||||||
[Parameter] public EventCallback<string> OnDelete { get; set; }
|
[Parameter] public EventCallback<string> OnDelete { get; set; }
|
||||||
[Parameter] public EventCallback<string> OnSelect { get; set; }
|
[Parameter] public EventCallback<string> OnSelect { get; set; }
|
||||||
[Inject] public NavigationManager NavManager { get; set; }
|
[Inject] public NavigationManager NavManager { get; set; }
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace Wonky.Client.HttpRepository;
|
||||||
|
|
||||||
public class CompanyHttpRepository : ICompanyHttpRepository
|
public class CompanyHttpRepository : ICompanyHttpRepository
|
||||||
{
|
{
|
||||||
private readonly JsonSerializerOptions _options = new JsonSerializerOptions
|
private readonly JsonSerializerOptions _options = new ()
|
||||||
{
|
{
|
||||||
PropertyNameCaseInsensitive = true
|
PropertyNameCaseInsensitive = true
|
||||||
};
|
};
|
||||||
|
@ -54,7 +54,7 @@ public class CompanyHttpRepository : ICompanyHttpRepository
|
||||||
_apiConfig = apiConfig.Value;
|
_apiConfig = apiConfig.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<PagingResponse<DtoNgCrmCompany>> GetCompaniesPaged(CompanyPagingParams pagingParameters)
|
public async Task<PagingResponse<DtoNgCompany>> GetCompaniesPaged(CompanyPagingParams pagingParameters)
|
||||||
{
|
{
|
||||||
var queryString = new Dictionary<string, string>
|
var queryString = new Dictionary<string, string>
|
||||||
{
|
{
|
||||||
|
@ -70,37 +70,38 @@ public class CompanyHttpRepository : ICompanyHttpRepository
|
||||||
|
|
||||||
var content = await response.Content.ReadAsStringAsync();
|
var content = await response.Content.ReadAsStringAsync();
|
||||||
|
|
||||||
var pagingResponse = new PagingResponse<DtoNgCrmCompany>
|
var pagingResponse = new PagingResponse<DtoNgCompany>
|
||||||
{
|
{
|
||||||
Items = JsonSerializer.Deserialize<List<DtoNgCrmCompany>>(content, _options),
|
Items = JsonSerializer.Deserialize<List<DtoNgCompany>>(content, _options),
|
||||||
MetaData = JsonSerializer.Deserialize<MetaData>(response.Headers.GetValues("X-Pagination").First(), _options)
|
MetaData = JsonSerializer.Deserialize<MetaData>(response.Headers.GetValues("X-Pagination").First(), _options)
|
||||||
};
|
};
|
||||||
return pagingResponse;
|
return pagingResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DtoNgCrmCompany> GetCompanyByAccount(string accountNumber)
|
public async Task<DtoNgCompany> GetCompanyByAccount(string accountNumber)
|
||||||
{
|
{
|
||||||
var company = await _client.GetFromJsonAsync<DtoNgCrmCompany>($"{_apiConfig.CrmCompanies}/account/{accountNumber}");
|
var company = await _client.GetFromJsonAsync<DtoNgCompany>($"{_apiConfig.CrmCompanies}/account/{accountNumber}");
|
||||||
return company ?? new DtoNgCrmCompany();
|
return company ?? new DtoNgCompany();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<DtoNgCrmCompany> GetCompanyById(string companyId)
|
public async Task<DtoNgCompany> GetCompanyById(string companyId)
|
||||||
{
|
{
|
||||||
var company = await _client.GetFromJsonAsync<DtoNgCrmCompany>($"{_apiConfig.CrmCompanies}/{companyId}");
|
var company = await _client.GetFromJsonAsync<DtoNgCompany>($"{_apiConfig.CrmCompanies}/{companyId}");
|
||||||
return company ?? new DtoNgCrmCompany();
|
return company ?? new DtoNgCompany();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string> CreateCompany(DtoNgCrmCompany dtoNgCrmCompany)
|
public async Task<string> CreateCompany(DtoNgCompany dtoNgCompany)
|
||||||
{
|
{
|
||||||
var response = await _client.PostAsJsonAsync($"{_apiConfig.CrmCompanies}", dtoNgCrmCompany);
|
var response = await _client.PostAsJsonAsync($"{_apiConfig.CrmCompanies}", dtoNgCompany);
|
||||||
var content = await response.Content.ReadAsStringAsync();
|
var content = await response.Content.ReadAsStringAsync();
|
||||||
var result = JsonSerializer.Deserialize<DtoNgCrmCompany>(content);
|
var result = JsonSerializer.Deserialize<DtoNgCompany>(content);
|
||||||
|
Console.WriteLine(content);
|
||||||
return result.CompanyId;
|
return result.CompanyId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task UpdateCompany(DtoNgCrmCompany dtoNgCrmCompany)
|
public async Task UpdateCompany(DtoNgCompany dtoNgCompany)
|
||||||
{
|
{
|
||||||
await _client.PutAsJsonAsync($"{_apiConfig.CrmCompanies}/{dtoNgCrmCompany.CompanyId}", dtoNgCrmCompany);
|
await _client.PutAsJsonAsync($"{_apiConfig.CrmCompanies}/{dtoNgCompany.CompanyId}", dtoNgCompany);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task DeleteCompany(string companyId)
|
public async Task DeleteCompany(string companyId)
|
||||||
|
|
|
@ -22,10 +22,10 @@ namespace Wonky.Client.HttpRepository;
|
||||||
|
|
||||||
public interface ICompanyHttpRepository
|
public interface ICompanyHttpRepository
|
||||||
{
|
{
|
||||||
Task<PagingResponse<DtoNgCrmCompany>> GetCompaniesPaged(CompanyPagingParams pagingParameters);
|
Task<PagingResponse<DtoNgCompany>> GetCompaniesPaged(CompanyPagingParams pagingParameters);
|
||||||
Task<DtoNgCrmCompany> GetCompanyByAccount(string accountNumber);
|
Task<DtoNgCompany> GetCompanyByAccount(string accountNumber);
|
||||||
Task<DtoNgCrmCompany> GetCompanyById(string companyId);
|
Task<DtoNgCompany> GetCompanyById(string companyId);
|
||||||
Task<string> CreateCompany(DtoNgCrmCompany dtoNgCrmCompany);
|
Task<string> CreateCompany(DtoNgCompany dtoNgCompany);
|
||||||
Task UpdateCompany(DtoNgCrmCompany dtoNgCrmCompany);
|
Task UpdateCompany(DtoNgCompany dtoNgCompany);
|
||||||
Task DeleteCompany(string companyId);
|
Task DeleteCompany(string companyId);
|
||||||
}
|
}
|
|
@ -57,7 +57,7 @@
|
||||||
<div class="card bg-light">
|
<div class="card bg-light">
|
||||||
<EditForm EditContext="_createCompany" OnValidSubmit="Create" class="card-body">
|
<EditForm EditContext="_createCompany" OnValidSubmit="Create" class="card-body">
|
||||||
<DataAnnotationsValidator />
|
<DataAnnotationsValidator />
|
||||||
<InputText type="hidden" id="salesRepId" @bind-Value="_dtoNgCrmCompany.SalesRepId"/>
|
<InputText type="hidden" id="salesRepId" @bind-Value="_dtoNgCompany.SalesRepId"/>
|
||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
|
|
||||||
|
@ -67,73 +67,73 @@
|
||||||
<th scope="row">Reg.nr.</th>
|
<th scope="row">Reg.nr.</th>
|
||||||
<td class="state"><DisplayStateComponent StateClass="@RegState"></DisplayStateComponent></td>
|
<td class="state"><DisplayStateComponent StateClass="@RegState"></DisplayStateComponent></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="vatNumber" class="form-control" @bind-Value="_dtoNgCrmCompany.VatNumber"/>
|
<InputText id="vatNumber" class="form-control" @bind-Value="_dtoNgCompany.VatNumber"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Firmanavn</th>
|
<th scope="row">Firmanavn</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="name" class="form-control" @bind-Value="_dtoNgCrmCompany.Name"/>
|
<InputText id="name" class="form-control" @bind-Value="_dtoNgCompany.Name"/>
|
||||||
<ValidationMessage For="@(() => _dtoNgCrmCompany.Name)"></ValidationMessage>
|
<ValidationMessage For="@(() => _dtoNgCompany.Name)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Conavn</th>
|
<th scope="row">Conavn</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="address1" class="form-control" @bind-Value="_dtoNgCrmCompany.Address1"/>
|
<InputText id="address1" class="form-control" @bind-Value="_dtoNgCompany.Address1"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Adresse</th>
|
<th scope="row">Adresse</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="address2" class="form-control" @bind-Value="_dtoNgCrmCompany.Address2"/>
|
<InputText id="address2" class="form-control" @bind-Value="_dtoNgCompany.Address2"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Postnr</th>
|
<th scope="row">Postnr</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="zipCode" class="form-control" @bind-Value="_dtoNgCrmCompany.ZipCode"/>
|
<InputText id="zipCode" class="form-control" @bind-Value="_dtoNgCompany.ZipCode"/>
|
||||||
<ValidationMessage For="@(() => _dtoNgCrmCompany.ZipCode)"></ValidationMessage>
|
<ValidationMessage For="@(() => _dtoNgCompany.ZipCode)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Bynavn</th>
|
<th scope="row">Bynavn</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="city" class="form-control" @bind-Value="_dtoNgCrmCompany.City"/>
|
<InputText id="city" class="form-control" @bind-Value="_dtoNgCompany.City"/>
|
||||||
<ValidationMessage For="@(() => _dtoNgCrmCompany.City)"></ValidationMessage>
|
<ValidationMessage For="@(() => _dtoNgCompany.City)"></ValidationMessage>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Telefon</th>
|
<th scope="row">Telefon</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="phone" class="form-control" @bind-Value="_dtoNgCrmCompany.Phone"/>
|
<InputText id="phone" class="form-control" @bind-Value="_dtoNgCompany.Phone"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Mobil</th>
|
<th scope="row">Mobil</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="mobile" class="form-control" @bind-Value="_dtoNgCrmCompany.Mobile"/>
|
<InputText id="mobile" class="form-control" @bind-Value="_dtoNgCompany.Mobile"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Email</th>
|
<th scope="row">Email</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="email" class="form-control" @bind-Value="_dtoNgCrmCompany.Email"/>
|
<InputText id="email" class="form-control" @bind-Value="_dtoNgCompany.Email"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Attention</th>
|
<th scope="row">Attention</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td>
|
<td>
|
||||||
<InputText id="attention" class="form-control" @bind-Value="_dtoNgCrmCompany.Attention"/>
|
<InputText id="attention" class="form-control" @bind-Value="_dtoNgCompany.Attention"/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -43,7 +43,7 @@ namespace Wonky.Client.Pages
|
||||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||||
[Inject] public VatInfoLookupService VatInfoLookupService { get; set; }
|
[Inject] public VatInfoLookupService VatInfoLookupService { get; set; }
|
||||||
private List<VirkRegInfo> VInfos { get; set; } = new();
|
private List<VirkRegInfo> VInfos { get; set; } = new();
|
||||||
private DtoNgCrmCompany _dtoNgCrmCompany = new();
|
private DtoNgCompany _dtoNgCompany = new();
|
||||||
private VirkRegInfo _virkRegInfo = new();
|
private VirkRegInfo _virkRegInfo = new();
|
||||||
private EditContext _createCompany;
|
private EditContext _createCompany;
|
||||||
private bool _formInvalid = true;
|
private bool _formInvalid = true;
|
||||||
|
@ -51,12 +51,12 @@ namespace Wonky.Client.Pages
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
_createCompany = new EditContext(_dtoNgCrmCompany);
|
_createCompany = new EditContext(_dtoNgCompany);
|
||||||
_createCompany.OnFieldChanged += HandleFieldChanged;
|
_createCompany.OnFieldChanged += HandleFieldChanged;
|
||||||
|
|
||||||
var ux = await StorageService.GetItemAsync<UserInfoView>("_ux");
|
var ux = await StorageService.GetItemAsync<UserInfoView>("_ux");
|
||||||
_dtoNgCrmCompany.SalesRepId = ux.Id;
|
_dtoNgCompany.SalesRepId = ux.Id;
|
||||||
_dtoNgCrmCompany.CountryCode = ux.CountryCode;
|
_dtoNgCompany.CountryCode = ux.CountryCode;
|
||||||
Interceptor.RegisterEvent();
|
Interceptor.RegisterEvent();
|
||||||
Interceptor.RegisterBeforeSendEvent();
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
}
|
}
|
||||||
|
@ -91,23 +91,24 @@ namespace Wonky.Client.Pages
|
||||||
{
|
{
|
||||||
_virkRegInfo = (from x in VInfos where x.VatNumber == vatNumber select x).First();
|
_virkRegInfo = (from x in VInfos where x.VatNumber == vatNumber select x).First();
|
||||||
RegState = _virkRegInfo.States[^1].State == "NORMAL" ? "the-good" : "the-ugly";
|
RegState = _virkRegInfo.States[^1].State == "NORMAL" ? "the-good" : "the-ugly";
|
||||||
_dtoNgCrmCompany.Name = _virkRegInfo.Name;
|
_dtoNgCompany.Name = _virkRegInfo.Name;
|
||||||
_dtoNgCrmCompany.Address1 = _virkRegInfo.CoName;
|
_dtoNgCompany.Address1 = _virkRegInfo.CoName;
|
||||||
_dtoNgCrmCompany.Address2 = _virkRegInfo.Address;
|
_dtoNgCompany.Address2 = _virkRegInfo.Address;
|
||||||
_dtoNgCrmCompany.ZipCode = _virkRegInfo.ZipCode;
|
_dtoNgCompany.ZipCode = _virkRegInfo.ZipCode;
|
||||||
_dtoNgCrmCompany.City = _virkRegInfo.City;
|
_dtoNgCompany.City = _virkRegInfo.City;
|
||||||
_dtoNgCrmCompany.VatNumber = _virkRegInfo.VatNumber;
|
_dtoNgCompany.VatNumber = _virkRegInfo.VatNumber;
|
||||||
}
|
}
|
||||||
private async Task Create()
|
private async Task Create()
|
||||||
{
|
{
|
||||||
var newId = await CompanyRepo.CreateCompany(_dtoNgCrmCompany);
|
var newId = await CompanyRepo.CreateCompany(_dtoNgCompany);
|
||||||
ToastService.ShowSuccess($"Godt så! '{_dtoNgCrmCompany.Name}' er oprettet i CRM.");
|
Console.WriteLine(newId);
|
||||||
Navigation.NavigateTo($"/company/{newId}");
|
ToastService.ShowSuccess($"Godt så! '{_dtoNgCompany.Name}' er oprettet i CRM.");
|
||||||
|
Navigation.NavigateTo($"/company/id/{newId}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (!VatUtils.ValidateFormat(_dtoNgCrmCompany.CountryCode, _dtoNgCrmCompany.VatNumber))
|
if (!VatUtils.ValidateFormat(_dtoNgCompany.CountryCode, _dtoNgCompany.VatNumber))
|
||||||
{
|
{
|
||||||
_formInvalid = false;
|
_formInvalid = false;
|
||||||
}
|
}
|
||||||
|
@ -121,7 +122,7 @@ namespace Wonky.Client.Pages
|
||||||
{
|
{
|
||||||
_formInvalid = true;
|
_formInvalid = true;
|
||||||
_createCompany.OnFieldChanged -= HandleFieldChanged;
|
_createCompany.OnFieldChanged -= HandleFieldChanged;
|
||||||
_createCompany = new EditContext(_dtoNgCrmCompany);
|
_createCompany = new EditContext(_dtoNgCompany);
|
||||||
_createCompany.OnFieldChanged += HandleFieldChanged;
|
_createCompany.OnFieldChanged += HandleFieldChanged;
|
||||||
_createCompany.OnValidationStateChanged -= ValidationChanged;
|
_createCompany.OnValidationStateChanged -= ValidationChanged;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace Wonky.Client.Pages
|
||||||
[Inject] private UserPreferenceService UserPrefService { get; set; }
|
[Inject] private UserPreferenceService UserPrefService { get; set; }
|
||||||
[Inject] public ICompanyHttpRepository CompanyRepo { get; set; }
|
[Inject] public ICompanyHttpRepository CompanyRepo { get; set; }
|
||||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||||
public List<DtoNgCrmCompany>? Companies { get; set; } = new();
|
public List<DtoNgCompany>? Companies { get; set; } = new();
|
||||||
public MetaData? MetaData { get; set; } = new();
|
public MetaData? MetaData { get; set; } = new();
|
||||||
private CompanyPagingParams _paging = new();
|
private CompanyPagingParams _paging = new();
|
||||||
private Preferences _preferences { get; set; } = new();
|
private Preferences _preferences { get; set; } = new();
|
||||||
|
@ -54,21 +54,21 @@ namespace Wonky.Client.Pages
|
||||||
|
|
||||||
private async Task SelectedPage(int page)
|
private async Task SelectedPage(int page)
|
||||||
{
|
{
|
||||||
Companies = new List<DtoNgCrmCompany>();
|
Companies = new List<DtoNgCompany>();
|
||||||
_paging.PageNumber = page;
|
_paging.PageNumber = page;
|
||||||
await GetCompanies();
|
await GetCompanies();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task SetSearchCol(string searchColumn)
|
private async Task SetSearchCol(string searchColumn)
|
||||||
{
|
{
|
||||||
Companies = new List<DtoNgCrmCompany>();
|
Companies = new List<DtoNgCompany>();
|
||||||
_paging.SearchColumn = searchColumn;
|
_paging.SearchColumn = searchColumn;
|
||||||
_paging.PageNumber = 1;
|
_paging.PageNumber = 1;
|
||||||
await GetCompanies();
|
await GetCompanies();
|
||||||
}
|
}
|
||||||
private async Task SetPageSize(string pageSize)
|
private async Task SetPageSize(string pageSize)
|
||||||
{
|
{
|
||||||
Companies = new List<DtoNgCrmCompany>();
|
Companies = new List<DtoNgCompany>();
|
||||||
_paging.PageSize = Convert.ToInt32(pageSize);
|
_paging.PageSize = Convert.ToInt32(pageSize);
|
||||||
_paging.PageNumber = 1;
|
_paging.PageNumber = 1;
|
||||||
await GetCompanies();
|
await GetCompanies();
|
||||||
|
@ -76,7 +76,7 @@ namespace Wonky.Client.Pages
|
||||||
|
|
||||||
private async Task SetSearchPhrase(string searchTerm)
|
private async Task SetSearchPhrase(string searchTerm)
|
||||||
{
|
{
|
||||||
Companies = new List<DtoNgCrmCompany>();
|
Companies = new List<DtoNgCompany>();
|
||||||
_paging.PageNumber = 1;
|
_paging.PageNumber = 1;
|
||||||
_paging.SearchTerm = searchTerm;
|
_paging.SearchTerm = searchTerm;
|
||||||
await GetCompanies();
|
await GetCompanies();
|
||||||
|
@ -84,14 +84,14 @@ namespace Wonky.Client.Pages
|
||||||
|
|
||||||
private async Task SetSortCol(string orderBy)
|
private async Task SetSortCol(string orderBy)
|
||||||
{
|
{
|
||||||
Companies = new List<DtoNgCrmCompany>();
|
Companies = new List<DtoNgCompany>();
|
||||||
_paging.OrderBy = orderBy;
|
_paging.OrderBy = orderBy;
|
||||||
await GetCompanies();
|
await GetCompanies();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task DeleteCompany(string companyId)
|
private async Task DeleteCompany(string companyId)
|
||||||
{
|
{
|
||||||
Companies = new List<DtoNgCrmCompany>();
|
Companies = new List<DtoNgCompany>();
|
||||||
await CompanyRepo.DeleteCompany(companyId);
|
await CompanyRepo.DeleteCompany(companyId);
|
||||||
if (_paging.PageNumber > 1 && Companies.Count == 1)
|
if (_paging.PageNumber > 1 && Companies.Count == 1)
|
||||||
_paging.PageNumber--;
|
_paging.PageNumber--;
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
@attribute [Authorize(Roles = "Adviser")]
|
@attribute [Authorize(Roles = "Adviser")]
|
||||||
@page "/company/{companyId}/update"
|
@page "/company/{companyId}/update"
|
||||||
|
|
||||||
@if (DtoNgCrmCompany != null)
|
@if (DtoNgCompany != null)
|
||||||
{
|
{
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<div class="h2">@DtoNgCrmCompany.Account - @DtoNgCrmCompany.Name</div>
|
<div class="h2">@DtoNgCompany.Account - @DtoNgCompany.Name</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<VatNumberInputComponent OnValidSubmit="GetInfoFromVat"/>
|
<VatNumberInputComponent OnValidSubmit="GetInfoFromVat"/>
|
||||||
|
@ -60,65 +60,65 @@
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="vatNumber" class="col-md-2 col-form-label">CVR/ORG</label>
|
<label for="vatNumber" class="col-md-2 col-form-label">CVR/ORG</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="vatNumber" class="form-control" @bind-Value="DtoNgCrmCompany.VatNumber"/>
|
<InputText id="vatNumber" class="form-control" @bind-Value="DtoNgCompany.VatNumber"/>
|
||||||
<ValidationMessage For="@(() => DtoNgCrmCompany.VatNumber)"></ValidationMessage>
|
<ValidationMessage For="@(() => DtoNgCompany.VatNumber)"></ValidationMessage>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="name" class="col-md-2 col-form-label">Firmanavn</label>
|
<label for="name" class="col-md-2 col-form-label">Firmanavn</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="name" class="form-control" @bind-Value="DtoNgCrmCompany.Name"/>
|
<InputText id="name" class="form-control" @bind-Value="DtoNgCompany.Name"/>
|
||||||
<ValidationMessage For="@(() => DtoNgCrmCompany.Name)"></ValidationMessage>
|
<ValidationMessage For="@(() => DtoNgCompany.Name)"></ValidationMessage>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="address1" class="col-md-2 col-form-label">Conavn</label>
|
<label for="address1" class="col-md-2 col-form-label">Conavn</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="address1" class="form-control" @bind-Value="DtoNgCrmCompany.Address1"/>
|
<InputText id="address1" class="form-control" @bind-Value="DtoNgCompany.Address1"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="address2" class="col-md-2 col-form-label">Adresse</label>
|
<label for="address2" class="col-md-2 col-form-label">Adresse</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="address2" class="form-control" @bind-Value="DtoNgCrmCompany.Address2"/>
|
<InputText id="address2" class="form-control" @bind-Value="DtoNgCompany.Address2"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="zipCode" class="col-md-2 col-form-label">Postnr</label>
|
<label for="zipCode" class="col-md-2 col-form-label">Postnr</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="zipCode" class="form-control" @bind-Value="DtoNgCrmCompany.ZipCode"/>
|
<InputText id="zipCode" class="form-control" @bind-Value="DtoNgCompany.ZipCode"/>
|
||||||
<ValidationMessage For="@(() => DtoNgCrmCompany.ZipCode)"></ValidationMessage>
|
<ValidationMessage For="@(() => DtoNgCompany.ZipCode)"></ValidationMessage>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="city" class="col-md-2 col-form-label">Bynavn</label>
|
<label for="city" class="col-md-2 col-form-label">Bynavn</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="city" class="form-control" @bind-Value="DtoNgCrmCompany.City"/>
|
<InputText id="city" class="form-control" @bind-Value="DtoNgCompany.City"/>
|
||||||
<ValidationMessage For="@(() => DtoNgCrmCompany.City)"></ValidationMessage>
|
<ValidationMessage For="@(() => DtoNgCompany.City)"></ValidationMessage>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="phone" class="col-md-2 col-form-label">Telefon</label>
|
<label for="phone" class="col-md-2 col-form-label">Telefon</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="phone" class="form-control" @bind-Value="DtoNgCrmCompany.Phone"/>
|
<InputText id="phone" class="form-control" @bind-Value="DtoNgCompany.Phone"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="mobile" class="col-md-2 col-form-label">Mobil</label>
|
<label for="mobile" class="col-md-2 col-form-label">Mobil</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="mobile" class="form-control" @bind-Value="DtoNgCrmCompany.Mobile"/>
|
<InputText id="mobile" class="form-control" @bind-Value="DtoNgCompany.Mobile"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="email" class="col-md-2 col-form-label">Email</label>
|
<label for="email" class="col-md-2 col-form-label">Email</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="email" class="form-control" @bind-Value="DtoNgCrmCompany.Email"/>
|
<InputText id="email" class="form-control" @bind-Value="DtoNgCompany.Email"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="attention" class="col-md-2 col-form-label">Attention</label>
|
<label for="attention" class="col-md-2 col-form-label">Attention</label>
|
||||||
<div class="col-md-10">
|
<div class="col-md-10">
|
||||||
<InputText id="attention" class="form-control" @bind-Value="DtoNgCrmCompany.Attention"/>
|
<InputText id="attention" class="form-control" @bind-Value="DtoNgCompany.Attention"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
|
@ -136,7 +136,7 @@
|
||||||
<div class="form-group row mb-2">
|
<div class="form-group row mb-2">
|
||||||
<label for="interval" class="col-form-label col-md-2">Interval (uger)</label>
|
<label for="interval" class="col-form-label col-md-2">Interval (uger)</label>
|
||||||
<div class="col-md-3">
|
<div class="col-md-3">
|
||||||
<InputNumber id="interval" class="form-control" @bind-Value="DtoNgCrmCompany.Interval"/>
|
<InputNumber id="interval" class="form-control" @bind-Value="DtoNgCompany.Interval"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row mb-2">
|
<div class="row mb-2">
|
||||||
|
@ -149,7 +149,7 @@
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<a class="btn btn-primary" href="/company/@DtoNgCrmCompany.CompanyId">Tilbage</a>
|
<a class="btn btn-primary" href="/company/@DtoNgCompany.CompanyId">Tilbage</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -39,7 +39,7 @@ public partial class CompanyUpdate : IDisposable
|
||||||
[Inject] public VatInfoLookupService VatInfoLookupService { get; set; }
|
[Inject] public VatInfoLookupService VatInfoLookupService { get; set; }
|
||||||
[Parameter] public string Account { get; set; } = "";
|
[Parameter] public string Account { get; set; } = "";
|
||||||
[Parameter] public string CompanyId { get; set; } = "";
|
[Parameter] public string CompanyId { get; set; } = "";
|
||||||
private DtoNgCrmCompany DtoNgCrmCompany { get; set; }
|
private DtoNgCompany DtoNgCompany { get; set; }
|
||||||
private EditContext _updateCompany { get; set; }
|
private EditContext _updateCompany { get; set; }
|
||||||
private List<VirkRegInfo> VInfos { get; set; } = new();
|
private List<VirkRegInfo> VInfos { get; set; } = new();
|
||||||
private VirkRegInfo _virkRegInfo { get; set; } = new();
|
private VirkRegInfo _virkRegInfo { get; set; } = new();
|
||||||
|
@ -51,41 +51,41 @@ public partial class CompanyUpdate : IDisposable
|
||||||
{
|
{
|
||||||
Interceptor.RegisterEvent();
|
Interceptor.RegisterEvent();
|
||||||
Interceptor.RegisterBeforeSendEvent();
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
DtoNgCrmCompany = await CompanyRepo.GetCompanyById(CompanyId);
|
DtoNgCompany = await CompanyRepo.GetCompanyById(CompanyId);
|
||||||
|
|
||||||
LastVisit = DateTime.Parse(DtoNgCrmCompany.LastVisit);
|
LastVisit = DateTime.Parse(DtoNgCompany.LastVisit);
|
||||||
NextVisit = DateTime.Parse(DtoNgCrmCompany.NextVisit);
|
NextVisit = DateTime.Parse(DtoNgCompany.NextVisit);
|
||||||
_updateCompany = new EditContext(DtoNgCrmCompany);
|
_updateCompany = new EditContext(DtoNgCompany);
|
||||||
|
|
||||||
if(DtoNgCrmCompany.HasFolded == 1)
|
if(DtoNgCompany.HasFolded == 1)
|
||||||
{
|
{
|
||||||
_vatState = "the-dead";
|
_vatState = "the-dead";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_vatState = VatUtils.ValidateFormat(DtoNgCrmCompany.CountryCode, DtoNgCrmCompany.VatNumber) ? "the-good" : "the-draw";
|
_vatState = VatUtils.ValidateFormat(DtoNgCompany.CountryCode, DtoNgCompany.VatNumber) ? "the-good" : "the-draw";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task Update()
|
private async Task Update()
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrWhiteSpace(DtoNgCrmCompany.VatNumber) && !VatUtils.ValidateFormat(DtoNgCrmCompany.CountryCode, DtoNgCrmCompany.VatNumber))
|
if (!string.IsNullOrWhiteSpace(DtoNgCompany.VatNumber) && !VatUtils.ValidateFormat(DtoNgCompany.CountryCode, DtoNgCompany.VatNumber))
|
||||||
{
|
{
|
||||||
ToastService.ShowError($"CVR/VAT/ORG nummer er ugyldig.");
|
ToastService.ShowError($"CVR/VAT/ORG nummer er ugyldig.");
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DtoNgCrmCompany.LastVisit = $"{LastVisit:yyyy-MM-dd}";
|
DtoNgCompany.LastVisit = $"{LastVisit:yyyy-MM-dd}";
|
||||||
DtoNgCrmCompany.NextVisit = $"{NextVisit:yyyy-MM-dd}";
|
DtoNgCompany.NextVisit = $"{NextVisit:yyyy-MM-dd}";
|
||||||
Console.WriteLine(JsonSerializer.Serialize(DtoNgCrmCompany));
|
Console.WriteLine(JsonSerializer.Serialize(DtoNgCompany));
|
||||||
await CompanyRepo.UpdateCompany(DtoNgCrmCompany);
|
await CompanyRepo.UpdateCompany(DtoNgCompany);
|
||||||
|
|
||||||
ToastService.ShowSuccess($"Godt så. Firma '{DtoNgCrmCompany!.Name}' er opdateret.");
|
ToastService.ShowSuccess($"Godt så. Firma '{DtoNgCompany!.Name}' er opdateret.");
|
||||||
Navigation.NavigateTo($"/company/{DtoNgCrmCompany.CompanyId}");
|
Navigation.NavigateTo($"/company/{DtoNgCompany.CompanyId}");
|
||||||
}
|
}
|
||||||
private async Task GetInfoFromVat(string vatNumber)
|
private async Task GetInfoFromVat(string vatNumber)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(vatNumber) || !VatUtils.ValidateFormat(DtoNgCrmCompany.CountryCode, DtoNgCrmCompany.VatNumber))
|
if (string.IsNullOrWhiteSpace(vatNumber) || !VatUtils.ValidateFormat(DtoNgCompany.CountryCode, DtoNgCompany.VatNumber))
|
||||||
{
|
{
|
||||||
ToastService.ShowError($"CVR er ugyldigt eller mangler");
|
ToastService.ShowError($"CVR er ugyldigt eller mangler");
|
||||||
return;
|
return;
|
||||||
|
@ -120,12 +120,12 @@ public partial class CompanyUpdate : IDisposable
|
||||||
private void SelectCompany(string vatNumber)
|
private void SelectCompany(string vatNumber)
|
||||||
{
|
{
|
||||||
_virkRegInfo = (from x in VInfos where x.VatNumber == vatNumber select x).First();
|
_virkRegInfo = (from x in VInfos where x.VatNumber == vatNumber select x).First();
|
||||||
DtoNgCrmCompany.Name = _virkRegInfo.Name;
|
DtoNgCompany.Name = _virkRegInfo.Name;
|
||||||
DtoNgCrmCompany.Address1 = _virkRegInfo.CoName;
|
DtoNgCompany.Address1 = _virkRegInfo.CoName;
|
||||||
DtoNgCrmCompany.Address2 = _virkRegInfo.Address;
|
DtoNgCompany.Address2 = _virkRegInfo.Address;
|
||||||
DtoNgCrmCompany.ZipCode = _virkRegInfo.ZipCode;
|
DtoNgCompany.ZipCode = _virkRegInfo.ZipCode;
|
||||||
DtoNgCrmCompany.City = _virkRegInfo.City;
|
DtoNgCompany.City = _virkRegInfo.City;
|
||||||
DtoNgCrmCompany.VatNumber = _virkRegInfo.VatNumber;
|
DtoNgCompany.VatNumber = _virkRegInfo.VatNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|
|
@ -21,56 +21,56 @@
|
||||||
@using Wonky.Client.Helpers
|
@using Wonky.Client.Helpers
|
||||||
@attribute [Authorize(Roles = "Adviser")]
|
@attribute [Authorize(Roles = "Adviser")]
|
||||||
|
|
||||||
@if (DtoNgCrmCompany != null)
|
@if (DtoNgCompany != null)
|
||||||
{
|
{
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<div class="h2"><img src="gravestone.png" class="img-fluid" style="float:left;width:48px;height:48px;display:@(_hasFolded ? "block" : "none")" alt="tombstone"/> @DtoNgCrmCompany.Name</div>
|
<div class="h2"><img src="gravestone.png" class="img-fluid" style="float:left;width:48px;height:48px;display:@(_hasFolded ? "block" : "none")" alt="tombstone"/> @DtoNgCompany.Name</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<table class="table table-sm table-striped table-bordered">
|
<table class="table table-sm table-striped table-bordered">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Konto</th>
|
<th scope="row">Konto</th>
|
||||||
<td colspan="2">@DtoNgCrmCompany.Account</td>
|
<td colspan="2">@DtoNgCompany.Account</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Conavn</th>
|
<th scope="row">Conavn</th>
|
||||||
<td colspan="2">@DtoNgCrmCompany.Address1</td>
|
<td colspan="2">@DtoNgCompany.Address1</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Adresse</th>
|
<th scope="row">Adresse</th>
|
||||||
<td colspan="2">@DtoNgCrmCompany.Address2</td>
|
<td colspan="2">@DtoNgCompany.Address2</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Postnummer</th>
|
<th scope="row">Postnummer</th>
|
||||||
<td colspan="2">@DtoNgCrmCompany.ZipCode</td>
|
<td colspan="2">@DtoNgCompany.ZipCode</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Bynavn</th>
|
<th scope="row">Bynavn</th>
|
||||||
<td colspan="2">@DtoNgCrmCompany.City</td>
|
<td colspan="2">@DtoNgCompany.City</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">CVR</th>
|
<th scope="row">CVR</th>
|
||||||
<td class="state"><DisplayStateComponent StateClass="@_vatState"></DisplayStateComponent></td>
|
<td class="state"><DisplayStateComponent StateClass="@_vatState"></DisplayStateComponent></td>
|
||||||
<td>@DtoNgCrmCompany.VatNumber</td>
|
<td>@DtoNgCompany.VatNumber</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Telefon</th>
|
<th scope="row">Telefon</th>
|
||||||
<td colspan="2">@DtoNgCrmCompany.Phone</td>
|
<td colspan="2">@DtoNgCompany.Phone</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Email</th>
|
<th scope="row">Email</th>
|
||||||
<td colspan="2">@DtoNgCrmCompany.Email</td>
|
<td colspan="2">@DtoNgCompany.Email</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Sidste besøg</th>
|
<th scope="row">Sidste besøg</th>
|
||||||
<td colspan="2">@DtoNgCrmCompany.LastVisit</td>
|
<td colspan="2">@DtoNgCompany.LastVisit</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">Næste besøg</th>
|
<th scope="row">Næste besøg</th>
|
||||||
<td class="state"><DisplayStateComponent StateClass="@(_hasFolded ? "the-dead" : Utils.GetVisitState(DtoNgCrmCompany.NextVisit))"></DisplayStateComponent></td>
|
<td class="state"><DisplayStateComponent StateClass="@(_hasFolded ? "the-dead" : Utils.GetVisitState(DtoNgCompany.NextVisit))"></DisplayStateComponent></td>
|
||||||
<td>@DtoNgCrmCompany.NextVisit</td>
|
<td>@DtoNgCompany.NextVisit</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@ -78,8 +78,8 @@
|
||||||
<div class="card-footer">
|
<div class="card-footer">
|
||||||
<div class="d-flex align-items-end">
|
<div class="d-flex align-items-end">
|
||||||
<a class="btn btn-primary mx-2" href="/companies">Tilbage</a>
|
<a class="btn btn-primary mx-2" href="/companies">Tilbage</a>
|
||||||
<a class="btn btn-primary mx-2" href="/company/@DtoNgCrmCompany.CompanyId/update">Rediger</a>
|
<a class="btn btn-primary mx-2" href="/company/@DtoNgCompany.CompanyId/update">Rediger</a>
|
||||||
<a class="btn btn-primary mx-2" href="/company/@DtoNgCrmCompany.CompanyId/activity">Aktivitet</a>
|
<a class="btn btn-primary mx-2" href="/company/@DtoNgCompany.CompanyId/activity">Aktivitet</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -35,7 +35,7 @@ public partial class CompanyView : IDisposable
|
||||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||||
[Inject] public VatInfoLookupService VatInfoLookup { get; set; }
|
[Inject] public VatInfoLookupService VatInfoLookup { get; set; }
|
||||||
[Parameter] public string CompanyId { get; set; } = "";
|
[Parameter] public string CompanyId { get; set; } = "";
|
||||||
private DtoNgCrmCompany DtoNgCrmCompany { get; set; } = new ();
|
private DtoNgCompany DtoNgCompany { get; set; } = new ();
|
||||||
private string _vatState { get; set; } = "the-dead";
|
private string _vatState { get; set; } = "the-dead";
|
||||||
private bool _hasFolded { get; set; }
|
private bool _hasFolded { get; set; }
|
||||||
|
|
||||||
|
@ -43,15 +43,15 @@ public partial class CompanyView : IDisposable
|
||||||
{
|
{
|
||||||
Interceptor.RegisterEvent();
|
Interceptor.RegisterEvent();
|
||||||
Interceptor.RegisterBeforeSendEvent();
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
DtoNgCrmCompany = await CompanyRepo.GetCompanyById(CompanyId);
|
DtoNgCompany = await CompanyRepo.GetCompanyById(CompanyId);
|
||||||
|
|
||||||
if(DtoNgCrmCompany.HasFolded == 1)
|
if(DtoNgCompany.HasFolded == 1)
|
||||||
{
|
{
|
||||||
_hasFolded = true;
|
_hasFolded = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_vatState = VatUtils.ValidateFormat(DtoNgCrmCompany.CountryCode, DtoNgCrmCompany.VatNumber) ? "the-good" : "the-draw";
|
_vatState = VatUtils.ValidateFormat(DtoNgCompany.CountryCode, DtoNgCompany.VatNumber) ? "the-good" : "the-draw";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,14 +19,13 @@
|
||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@attribute [Authorize(Roles = "Adviser")]
|
@attribute [Authorize(Roles = "Adviser")]
|
||||||
@using Wonky.Client.Components
|
@using Wonky.Client.Components
|
||||||
@if (_dtoNgCrmCompany != null)
|
@if (DraftContext != null)
|
||||||
{
|
{
|
||||||
<h2>@_poDraft.Name</h2>
|
<h2>@_poDraft.Name</h2>
|
||||||
<EditForm EditContext="_createActivity" OnValidSubmit="CreateCanvas">
|
<EditForm EditContext="DraftContext" OnValidSubmit="CreateActivity">
|
||||||
<DataAnnotationsValidator/>
|
<DataAnnotationsValidator/>
|
||||||
|
|
||||||
<div class="accordion-flush" id="crmActivity">
|
<div class="accordion-flush" id="crmActivity">
|
||||||
|
|
||||||
|
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header" id="activityHeader">
|
<h2 class="accordion-header" id="activityHeader">
|
||||||
<button class="accordion-button bg-light" type="button"
|
<button class="accordion-button bg-light" type="button"
|
||||||
|
@ -39,19 +38,27 @@
|
||||||
aria-labelledby="activityHeader" data-bs-parent="#crmActivity">
|
aria-labelledby="activityHeader" data-bs-parent="#crmActivity">
|
||||||
<div class="accordion-body">
|
<div class="accordion-body">
|
||||||
<div class="row mb-1">
|
<div class="row mb-1">
|
||||||
<label for="activityDate" class="col-sm-2 col-md-2 col-form-label">Aktivitet</label>
|
<div class="col-sm-6 col-md-6">
|
||||||
<div class="col-sm-3 col-md-3">
|
|
||||||
<select id="activityType" class="form-select" @bind-Value="@_poDraft.ActivityTypeEnum" @bind-Value:event="oninput" @onchange="CheckActivity">
|
<select id="activityType" class="form-select" @bind-Value="@_poDraft.ActivityTypeEnum" @bind-Value:event="oninput" @onchange="CheckActivity">
|
||||||
<option value="" selected>--type--</option>
|
<option value="-1" selected>VÆLG</option>
|
||||||
<option value="caOnSite">Besøg</option>
|
<option value="onSite">Besøg</option>
|
||||||
<option value="caPhone">Telefon</option>
|
<option value="phone">Telefon</option>
|
||||||
<option value="caCanvas">Kanvas</option>
|
<option value="canvas">Kanvas</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3 col-md-3">
|
<div class="col-sm-6 col-md-6">
|
||||||
|
<select id="statusType" class="form-select" @bind-Value="@_poDraft.ActivityStatusEnum" @bind-Value:event="oninput" @onchange="CheckStatus">
|
||||||
|
<option value="-1" selected>VÆLG</option>
|
||||||
|
<option value="order">Ordre</option>
|
||||||
|
<option value="quote">Tilbud</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row mb-1">
|
||||||
|
<div class="col-sm-6 col-md-6">
|
||||||
<InputDate id="activityDate" class="form-control" @bind-Value="@(_poDraft.ActivityDate)" />
|
<InputDate id="activityDate" class="form-control" @bind-Value="@(_poDraft.ActivityDate)" />
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-2 col-md-2">
|
<div class="col-sm-6 col-md-6">
|
||||||
<InputCheckbox id="checkDate" class="form-check-input" @bind-Value="@_poDraft.CheckDate" @onclick="CheckDate" />
|
<InputCheckbox id="checkDate" class="form-check-input" @bind-Value="@_poDraft.CheckDate" @onclick="CheckDate" />
|
||||||
<label for="checkDate" class="form-check-label">Godkendt</label>
|
<label for="checkDate" class="form-check-label">Godkendt</label>
|
||||||
</div>
|
</div>
|
||||||
|
@ -217,70 +224,65 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
@* Ordrekladde *@
|
||||||
</div>
|
<div class="card">
|
||||||
</div>
|
<div class="card-header">
|
||||||
|
Kladdelinjer <span class="mx-2 draft-expires-msg">Global kladde (udløber efter @(DraftStateProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)</span>
|
||||||
|
|
||||||
<div class="accordion-item">
|
|
||||||
<h2 class="accordion-header" id="draftHeader">
|
|
||||||
<button class="accordion-button collapsed bg-light" type="button"
|
|
||||||
data-bs-toggle="collapse" data-bs-target="#draftBody"
|
|
||||||
aria-expanded="false" aria-controls="draftBody">
|
|
||||||
Kladdelinjer <span class="mx-2 draft-expires-msg">Global kladde (udløber efter @(DraftStateProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)</span>
|
|
||||||
</button>
|
|
||||||
</h2>
|
|
||||||
<div id="draftBody" class="accordion-collapse collapse"
|
|
||||||
aria-labelledby="draftHeader">
|
|
||||||
<div class="accordion-body">
|
|
||||||
<table class="table table-hover table-striped justify-content-center">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">Navn</th>
|
|
||||||
<th scope="col" class="text-nowrap">Varenr</th>
|
|
||||||
<th scope="col" class="text-end">Antal</th>
|
|
||||||
<th scope="col" class="text-end">Enhedspris</th>
|
|
||||||
<th scope="col" class="text-end">Linjesum</th>
|
|
||||||
<th scope="col"> </th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@if (DraftStateProvider != null && DraftStateProvider.Draft.Items.Count > 0)
|
|
||||||
{
|
|
||||||
@foreach (var cItem in DraftStateProvider.Draft.Items)
|
|
||||||
{
|
|
||||||
<tr>
|
|
||||||
<td>@cItem.Item.Name</td>
|
|
||||||
<td>@cItem.Item.Sku</td>
|
|
||||||
<td class="text-end">@cItem.Quantity</td>
|
|
||||||
<td class="text-end">@cItem.Price</td>
|
|
||||||
<td class="text-end">@cItem.LineTotal</td>
|
|
||||||
<td>
|
|
||||||
<button class="btn btn-warning" @onclick="@(() => RemoveItem(@cItem))">Slet</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
}
|
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
<td class="text-black text-end fw-bold">Total</td>
|
|
||||||
<td class="text-black text-end fw-bold">@DraftStateProvider.Draft.Total</td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<button class="btn btn-danger" @onclick="@DeleteDraft" disabled="@(DraftStateProvider.Draft.Items.Count == 0)">Slet kladde</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<table class="table table-hover table-striped justify-content-center">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Navn</th>
|
||||||
|
<th scope="col" class="text-nowrap">Varenr</th>
|
||||||
|
<th scope="col" class="text-end">Antal</th>
|
||||||
|
<th scope="col" class="text-end">Enhedspris</th>
|
||||||
|
<th scope="col" class="text-end">Linjesum</th>
|
||||||
|
<th scope="col"> </th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@if (DraftStateProvider != null && DraftStateProvider.Draft.Items.Count > 0)
|
||||||
|
{
|
||||||
|
@foreach (var cItem in DraftStateProvider.Draft.Items)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td>@cItem.Item.Name</td>
|
||||||
|
<td>@cItem.Item.Sku</td>
|
||||||
|
<td class="text-end">@cItem.Quantity</td>
|
||||||
|
<td class="text-end">@cItem.Price</td>
|
||||||
|
<td class="text-end">@cItem.LineTotal</td>
|
||||||
|
<td>
|
||||||
|
<button class="btn btn-warning" @onclick="@(() => RemoveItem(@cItem))">Slet</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td></td>
|
||||||
|
<td class="text-black text-end fw-bold">Total</td>
|
||||||
|
<td class="text-black text-end fw-bold">@DraftStateProvider.Draft.Total</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="card-footer">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<button class="btn btn-danger" @onclick="@DeleteDraft" disabled="@(DraftStateProvider.Draft.Items.Count == 0)">Slet kladde</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@* Leverings adresse *@
|
||||||
<div class="accordion-item">
|
<div class="accordion-item">
|
||||||
<h2 class="accordion-header" id="deliveryHeader">
|
<h2 class="accordion-header" id="deliveryHeader">
|
||||||
<button class="accordion-button collapsed bg-light" type="button"
|
<button class="accordion-button collapsed bg-light" type="button"
|
||||||
|
@ -329,16 +331,10 @@
|
||||||
|
|
||||||
<div class="row mt-2 mb-2" style="display:@(HideButtons ? "none" : "block")">
|
<div class="row mt-2 mb-2" style="display:@(HideButtons ? "none" : "block")">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<a class="btn btn-primary" href="/company/@_dtoNgCrmCompany.CompanyId">Tilbage</a>
|
<a class="btn btn-primary" href="/company/@NgCompany.CompanyId">Tilbage</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<button type="submit" class="btn btn-dark" @onclick="CreateCanvas" disabled="@InvalidCanvas">Kanvas</button>
|
<button type="submit" class="btn btn-success" disabled="@InvalidActivity">Gem</button>
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<button type="button" class="btn btn-warning" @onclick="CreateOffer" disabled="@InvalidActivity">Tilbud</button>
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<button type="button" class="btn btn-success" @onclick="CreateOrder" disabled="@InvalidActivity">Salg</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</EditForm>
|
</EditForm>
|
||||||
|
|
|
@ -44,9 +44,9 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
// private MetaData _meta { get; set; } = new();
|
// private MetaData _meta { get; set; } = new();
|
||||||
private Preferences _prefs { get; set; } = new();
|
private Preferences _prefs { get; set; } = new();
|
||||||
private DtoNgSalesRepActivity _poDraft { get; set; } = new();
|
private DtoNgSalesRepActivity _poDraft { get; set; } = new();
|
||||||
private DtoNgCrmCompany _dtoNgCrmCompany = new();
|
private DtoNgCompany NgCompany = new();
|
||||||
private CatalogPagingParams _paging = new();
|
private CatalogPagingParams _paging = new();
|
||||||
private EditContext _createActivity { get; set; }
|
private EditContext DraftContext { get; set; }
|
||||||
private bool _poFormInvalid { get; set; } = true;
|
private bool _poFormInvalid { get; set; } = true;
|
||||||
private bool ShowItem { get; set; }
|
private bool ShowItem { get; set; }
|
||||||
private bool HideButtons { get; set; }
|
private bool HideButtons { get; set; }
|
||||||
|
@ -54,11 +54,17 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
private string Price = "0";
|
private string Price = "0";
|
||||||
private string Discount = "0";
|
private string Discount = "0";
|
||||||
private bool InvalidActivityType { get; set; } = true;
|
private bool InvalidActivityType { get; set; } = true;
|
||||||
|
private bool InvalidStatusType { get; set; } = true;
|
||||||
private bool InvalidActivity { get; set; } = true;
|
private bool InvalidActivity { get; set; } = true;
|
||||||
private bool InvalidCanvas { get; set; } = true;
|
private bool InvalidCanvas { get; set; } = true;
|
||||||
private bool InvalidDate { get; set; } = true;
|
private bool InvalidDate { get; set; } = true;
|
||||||
private UserInfoView Ux { get; set; } = new();
|
private UserInfoView Ux { get; set; } = new();
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
base.OnParametersSet();
|
||||||
|
}
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
Interceptor.RegisterEvent();
|
Interceptor.RegisterEvent();
|
||||||
|
@ -67,10 +73,10 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
_paging.SearchColumn = _prefs.ItemSearch;
|
_paging.SearchColumn = _prefs.ItemSearch;
|
||||||
await GetSalesItems();
|
await GetSalesItems();
|
||||||
Ux = await StorageService.GetItemAsync<UserInfoView>("_ux");
|
Ux = await StorageService.GetItemAsync<UserInfoView>("_ux");
|
||||||
_dtoNgCrmCompany = await CompanyRepo.GetCompanyById(CompanyId);
|
NgCompany = await CompanyRepo.GetCompanyById(CompanyId);
|
||||||
|
|
||||||
_createActivity = new EditContext(_poDraft);
|
DraftContext = new EditContext(_poDraft);
|
||||||
_createActivity.OnFieldChanged += HandleFieldChanged;
|
DraftContext.OnFieldChanged += HandleFieldChanged;
|
||||||
|
|
||||||
// set up indexdb identification
|
// set up indexdb identification
|
||||||
_poDraft.SalesHeadId = Guid.NewGuid().ToString();
|
_poDraft.SalesHeadId = Guid.NewGuid().ToString();
|
||||||
|
@ -81,42 +87,24 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
|
|
||||||
// permanent identifications
|
// permanent identifications
|
||||||
_poDraft.SalesRep = Ux.Adviser;
|
_poDraft.SalesRep = Ux.Adviser;
|
||||||
_poDraft.Account = _dtoNgCrmCompany.Account;
|
_poDraft.Account = NgCompany.Account;
|
||||||
_poDraft.VatNumber = _dtoNgCrmCompany.VatNumber;
|
_poDraft.VatNumber = NgCompany.VatNumber;
|
||||||
_poDraft.EMail = _dtoNgCrmCompany.Email;
|
_poDraft.EMail = NgCompany.Email;
|
||||||
_poDraft.Phone = _dtoNgCrmCompany.Phone;
|
_poDraft.Phone = NgCompany.Phone;
|
||||||
|
|
||||||
_poDraft.Name = _dtoNgCrmCompany.Name;
|
_poDraft.Name = NgCompany.Name;
|
||||||
_poDraft.Address = _dtoNgCrmCompany.Address1;
|
_poDraft.Address = NgCompany.Address1;
|
||||||
_poDraft.Address2 = _dtoNgCrmCompany.Address2;
|
_poDraft.Address2 = NgCompany.Address2;
|
||||||
_poDraft.ZipCode = _dtoNgCrmCompany.ZipCode;
|
_poDraft.ZipCode = NgCompany.ZipCode;
|
||||||
_poDraft.City = _dtoNgCrmCompany.City;
|
_poDraft.City = NgCompany.City;
|
||||||
|
|
||||||
_poDraft.DlvName = _dtoNgCrmCompany.Name;
|
_poDraft.DlvName = NgCompany.Name;
|
||||||
_poDraft.DlvAddress1 = _dtoNgCrmCompany.Address1;
|
_poDraft.DlvAddress1 = NgCompany.Address1;
|
||||||
_poDraft.DlvAddress2 = _dtoNgCrmCompany.Address2;
|
_poDraft.DlvAddress2 = NgCompany.Address2;
|
||||||
_poDraft.DlvZipCode = _dtoNgCrmCompany.ZipCode;
|
_poDraft.DlvZipCode = NgCompany.ZipCode;
|
||||||
_poDraft.DlvCity = _dtoNgCrmCompany.City;
|
_poDraft.DlvCity = NgCompany.City;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task CreateCanvas()
|
|
||||||
{
|
|
||||||
HideButtons = true;
|
|
||||||
await CreateActivity();
|
|
||||||
// post to create canvas endpoint
|
|
||||||
}
|
|
||||||
private async Task CreateOffer()
|
|
||||||
{
|
|
||||||
HideButtons = true;
|
|
||||||
await CreateActivity();
|
|
||||||
// post to create offer endpoint
|
|
||||||
}
|
|
||||||
private async Task CreateOrder()
|
|
||||||
{
|
|
||||||
HideButtons = true;
|
|
||||||
await CreateActivity();
|
|
||||||
// post to create order endpoint
|
|
||||||
}
|
|
||||||
private async Task CreateActivity()
|
private async Task CreateActivity()
|
||||||
{
|
{
|
||||||
HideButtons = true;
|
HideButtons = true;
|
||||||
|
@ -152,7 +140,12 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
private void CheckActivity()
|
private void CheckActivity()
|
||||||
{
|
{
|
||||||
InvalidActivityType = string.IsNullOrWhiteSpace(_poDraft.ActivityTypeEnum);
|
InvalidActivityType = string.IsNullOrWhiteSpace(_poDraft.ActivityTypeEnum);
|
||||||
Console.WriteLine($"invalidType => {InvalidActivityType}");
|
Console.WriteLine($"Type => {InvalidActivityType}");
|
||||||
|
}
|
||||||
|
private void CheckStatus()
|
||||||
|
{
|
||||||
|
InvalidStatusType = string.IsNullOrWhiteSpace(_poDraft.ActivityStatusEnum);
|
||||||
|
Console.WriteLine($"statusType => {InvalidStatusType}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CheckDate()
|
private void CheckDate()
|
||||||
|
@ -228,7 +221,7 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
|
|
||||||
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
||||||
{
|
{
|
||||||
_poFormInvalid = !_createActivity.Validate();
|
_poFormInvalid = !DraftContext.Validate();
|
||||||
InvalidCanvas = InvalidActivityType || InvalidDate;
|
InvalidCanvas = InvalidActivityType || InvalidDate;
|
||||||
InvalidActivity = InvalidActivityType || _poFormInvalid || DraftStateProvider.Draft.Items.Count == 0 || InvalidDate;
|
InvalidActivity = InvalidActivityType || _poFormInvalid || DraftStateProvider.Draft.Items.Count == 0 || InvalidDate;
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
|
@ -237,23 +230,23 @@ public partial class CrmActivityCreate : IDisposable
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(_poDraft.VatNumber))
|
if (!string.IsNullOrEmpty(_poDraft.VatNumber))
|
||||||
{
|
{
|
||||||
if(!VatUtils.ValidateFormat(_dtoNgCrmCompany.CountryCode, _poDraft.VatNumber))
|
if(!VatUtils.ValidateFormat(NgCompany.CountryCode, _poDraft.VatNumber))
|
||||||
ToastService.ShowWarning("CVR / ORG nummer er ikke et gyldigt registreringsnummer");
|
ToastService.ShowWarning("CVR / ORG nummer er ikke et gyldigt registreringsnummer");
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(_poDraft.ActivityTypeEnum))
|
if (string.IsNullOrEmpty(_poDraft.ActivityTypeEnum))
|
||||||
ToastService.ShowWarning("Aktivitet type kan ikke være tom");
|
ToastService.ShowWarning("Aktivitet type kan ikke være tom");
|
||||||
_poFormInvalid = false;
|
_poFormInvalid = false;
|
||||||
_createActivity.OnFieldChanged -= HandleFieldChanged;
|
DraftContext.OnFieldChanged -= HandleFieldChanged;
|
||||||
_createActivity = new EditContext(_poDraft);
|
DraftContext = new EditContext(_poDraft);
|
||||||
_createActivity.OnFieldChanged += HandleFieldChanged;
|
DraftContext.OnFieldChanged += HandleFieldChanged;
|
||||||
_createActivity.OnValidationStateChanged -= ValidationChanged;
|
DraftContext.OnValidationStateChanged -= ValidationChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Interceptor.DisposeEvent();
|
Interceptor.DisposeEvent();
|
||||||
_createActivity.OnFieldChanged -= HandleFieldChanged;
|
DraftContext.OnFieldChanged -= HandleFieldChanged;
|
||||||
_createActivity.OnValidationStateChanged -= ValidationChanged;
|
DraftContext.OnValidationStateChanged -= ValidationChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -37,7 +37,7 @@ namespace Wonky.Client.Providers
|
||||||
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
|
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
|
||||||
{
|
{
|
||||||
// fetch token from localStorage
|
// fetch token from localStorage
|
||||||
var token = await _storage.GetItemAsync<string>("_tx");
|
var token = await _storage.GetItemAsync<string>("_ax");
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(token))
|
if (string.IsNullOrEmpty(token))
|
||||||
// return anonymous if empty
|
// return anonymous if empty
|
||||||
|
|
|
@ -79,7 +79,7 @@ namespace Wonky.Client.Services
|
||||||
// process response content
|
// process response content
|
||||||
var data = JsonSerializer.Deserialize<AuthResponseView>(resContent, _options);
|
var data = JsonSerializer.Deserialize<AuthResponseView>(resContent, _options);
|
||||||
|
|
||||||
await _localStorage.SetItemAsync("_tx", data.AccessToken);
|
await _localStorage.SetItemAsync("_ax", data.AccessToken);
|
||||||
await _localStorage.SetItemAsync("_rx", data.RefreshToken);
|
await _localStorage.SetItemAsync("_rx", data.RefreshToken);
|
||||||
await _localStorage.SetItemAsync("_ex",
|
await _localStorage.SetItemAsync("_ex",
|
||||||
(int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60);
|
(int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60);
|
||||||
|
@ -117,7 +117,7 @@ namespace Wonky.Client.Services
|
||||||
// set default request headers using access_token
|
// set default request headers using access_token
|
||||||
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", data.AccessToken);
|
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", data.AccessToken);
|
||||||
|
|
||||||
await _localStorage.SetItemAsync("_tx", data.AccessToken);
|
await _localStorage.SetItemAsync("_ax", data.AccessToken);
|
||||||
await _localStorage.SetItemAsync("_rx", data.RefreshToken);
|
await _localStorage.SetItemAsync("_rx", data.RefreshToken);
|
||||||
await _localStorage.SetItemAsync("_ex",
|
await _localStorage.SetItemAsync("_ex",
|
||||||
(int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60);
|
(int)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1)).TotalSeconds + data.ExpiresIn - 60);
|
||||||
|
@ -130,7 +130,7 @@ namespace Wonky.Client.Services
|
||||||
public async Task Logout()
|
public async Task Logout()
|
||||||
{
|
{
|
||||||
// clear localStorage
|
// clear localStorage
|
||||||
await _localStorage.RemoveItemAsync("_tx");
|
await _localStorage.RemoveItemAsync("_ax");
|
||||||
await _localStorage.RemoveItemAsync("_rx");
|
await _localStorage.RemoveItemAsync("_rx");
|
||||||
await _localStorage.RemoveItemAsync("_ux");
|
await _localStorage.RemoveItemAsync("_ux");
|
||||||
await _localStorage.RemoveItemAsync("_ex");
|
await _localStorage.RemoveItemAsync("_ex");
|
||||||
|
|
|
@ -11,10 +11,10 @@
|
||||||
<PackageReference Include="Blazored.LocalStorage" Version="4.2.0" />
|
<PackageReference Include="Blazored.LocalStorage" Version="4.2.0" />
|
||||||
<PackageReference Include="Blazored.Toast" Version="3.2.2" />
|
<PackageReference Include="Blazored.Toast" Version="3.2.2" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.3" />
|
<PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.4" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="6.0.3" />
|
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="6.0.4" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.3" />
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.4" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.3" PrivateAssets="all" />
|
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.4" PrivateAssets="all" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
|
||||||
|
@ -33,7 +33,6 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Folder Include="AuthProviders" />
|
|
||||||
<Folder Include="wwwroot\scripts" />
|
<Folder Include="wwwroot\scripts" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -33,8 +33,8 @@ namespace Wonky.Entity.DTO
|
||||||
[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; } = "";
|
public string SalesRep { get; set; } = "";
|
||||||
[Required(ErrorMessage = "Vælg aktivitet")] public string ActivityTypeEnum { get; set; } = "";
|
[Required(ErrorMessage = "Vælg aktivitetstype")] public string ActivityTypeEnum { get; set; } = "";
|
||||||
public string ActivityStatusEnum { get; set; } = "";
|
[Required(ErrorMessage = "Vælg status for besøg ")] public string ActivityStatusEnum { get; set; } = "";
|
||||||
public bool CheckDate { get; set; }
|
public bool CheckDate { get; set; }
|
||||||
public DateTime ActivityDate { get; set; }
|
public DateTime ActivityDate { get; set; }
|
||||||
[MaxLength(50, ErrorMessage = "Du kan højst bruge 50 tegn")] public string Demo { get; set; } = "";
|
[MaxLength(50, ErrorMessage = "Du kan højst bruge 50 tegn")] public string Demo { get; set; } = "";
|
|
@ -19,7 +19,7 @@ using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Wonky.Entity.DTO;
|
namespace Wonky.Entity.DTO;
|
||||||
|
|
||||||
public class DtoNgCrmCompany
|
public class DtoNgCompany
|
||||||
{
|
{
|
||||||
[Required(ErrorMessage = "Navn skal udfyldes")] [MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string Name { get; set; }
|
[Required(ErrorMessage = "Navn skal udfyldes")] [MaxLength(100, ErrorMessage = "Du kan højst bruge 100 tegn")] public string Name { get; set; }
|
||||||
[Required(ErrorMessage = "Postnummer skal udfyldes")] [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string ZipCode { get; set; }
|
[Required(ErrorMessage = "Postnummer skal udfyldes")] [MaxLength(20, ErrorMessage = "Du kan højst bruge 20 tegn")] public string ZipCode { get; set; }
|
|
@ -19,11 +19,11 @@ namespace Wonky.Entity.DTO;
|
||||||
|
|
||||||
public class DtoNgUpdateCompany
|
public class DtoNgUpdateCompany
|
||||||
{
|
{
|
||||||
|
public string CompanyId { get; set; } = "";
|
||||||
[MaxLength(100)] public string Name { get; set; } = "";
|
[MaxLength(100)] public string Name { get; set; } = "";
|
||||||
[MaxLength(30)] public string City { get; set; } = "";
|
[MaxLength(30)] public string City { get; set; } = "";
|
||||||
[MaxLength(20)] public string ZipCode { get; set; } = "";
|
[MaxLength(20)] public string ZipCode { get; set; } = "";
|
||||||
[MaxLength(20)] public string VatNumber { get; set; } = "";
|
[MaxLength(20)] public string VatNumber { get; set; } = "";
|
||||||
public string CompanyId { get; set; } = "";
|
|
||||||
[MaxLength(30)] public string Phone { get; set; } = "";
|
[MaxLength(30)] public string Phone { get; set; } = "";
|
||||||
[MaxLength(100)] public string Address1 { get; set; } = "";
|
[MaxLength(100)] public string Address1 { get; set; } = "";
|
||||||
[MaxLength(50)] public string Address2 { get; set; } = "";
|
[MaxLength(50)] public string Address2 { get; set; } = "";
|
||||||
|
|
|
@ -6,8 +6,4 @@
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="DnetIndexedDb" Version="2.4.1" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
Loading…
Reference in a new issue