wip refactor virk interface refactor create company

This commit is contained in:
Frede Hundewadt 2022-03-18 15:06:23 +01:00
parent e690ab7383
commit ad580c5f0d
32 changed files with 313 additions and 265 deletions

View file

@ -2,7 +2,7 @@ namespace Wonky.Client;
public class AppId public class AppId
{ {
public string Version { get; set; } = "0.2.2"; public string Version { get; set; } = "0.2.4";
public string Name { get; set; } = "Wonky Online"; public string Name { get; set; } = "Wonky Online";
public bool IsBeta { get; set; } = false; public bool IsBeta { get; set; } = false;

View file

@ -14,9 +14,11 @@
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
// //
*@ *@
<select class="form-control" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged"> <select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
@foreach (var (key, value) in Items) <option value="-1">SØGNING</option>
{ <option value="name">Firmanavn</option>
<option value="@key">@value</option> <option value="city">Bynavn</option>
} <option value="zipCode">Postnummer</option>
<option value="account">Konto</option>
<option value="phone">Telefon</option>
</select> </select>

View file

@ -34,17 +34,12 @@ public partial class CompanySearchDropdown : IDisposable
{ {
UserPreferenceService.OnChange += ProfileServiceOnOnChange; UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences(); _preferences = await UserPreferenceService.GetPreferences();
Selection = _preferences.CompanySearch;
Items.Add("name", "Firmanavn");
Items.Add("account", "Konto");
Items.Add("city", "Bynavn");
Items.Add("zipCode", "Postnr");
Items.Add("phone", "Telefon");
Selection = (from x in Items where x.Key == _preferences.CompanySearch select x.Key).First();
} }
private async Task OnSelectionChanged(ChangeEventArgs e) private async Task OnSelectionChanged(ChangeEventArgs e)
{ {
var val = e.Value.ToString(); var val = e.Value.ToString();
if (val == "-1") return;
await OnChanged.InvokeAsync(val); await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetCompanySearch(val); await UserPreferenceService.SetCompanySearch(val);
} }
@ -56,4 +51,5 @@ public partial class CompanySearchDropdown : IDisposable
public void Dispose() public void Dispose()
{ {
UserPreferenceService.OnChange -= ProfileServiceOnOnChange; UserPreferenceService.OnChange -= ProfileServiceOnOnChange;
} } }
}

View file

@ -15,9 +15,8 @@
// //
*@ *@
<select class="form-control" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged"> <select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
@foreach (var (key, value) in Items) <option value="-1" selected>SORTERING</option>
{ <option value="name">Firmanavn</option>
<option value="@key">@value</option> <option value="city">Bynavn</option>
}
</select> </select>

View file

@ -33,15 +33,12 @@ namespace Wonky.Client.Components
{ {
UserPreferenceService.OnChange += ProfileServiceOnOnChange; UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences(); _preferences = await UserPreferenceService.GetPreferences();
Selection = _preferences.CompanySort;
Items.Add("name", "Firmanavn");
Items.Add("account", "Konto");
Items.Add("city", "Bynavn");
Selection = (from x in Items where x.Key == _preferences.CompanySort select x.Key).First();
} }
private async Task OnSelectionChanged(ChangeEventArgs e) private async Task OnSelectionChanged(ChangeEventArgs e)
{ {
var val = e.Value.ToString(); var val = e.Value.ToString();
if (val == "-1") return;
await OnChanged.InvokeAsync(val); await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetCompanySort(val); await UserPreferenceService.SetCompanySort(val);
} }

View file

@ -15,9 +15,13 @@
// //
*@ *@
<select class="form-control" @bind-value="Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged"> <select class="form-select" @bind-value="Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
@foreach (var (key, value) in Items) <option value="-1">VARE GRUPPE</option>
{ <option value="0" selected>Alle</option>
<option value="@key">@value</option> <option value="1">Lim Sealer Reparation</option>
} <option value="2">Grunder Maling</option>
<option value="3">Smøremidler</option>
<option value="4">Rens Polish</option>
<option value="5">Tape Selvklæbende</option>
<option value="6">Tilbehør Diverse</option>
</select> </select>

View file

@ -20,40 +20,18 @@ using Wonky.Client.Services;
namespace Wonky.Client.Components; namespace Wonky.Client.Components;
public partial class ItemGroupDropdown : IDisposable public partial class ItemGroupDropdown
{ {
[Inject] private ILocalStorageService LocalStorage { get; set; } [Inject] private ILocalStorageService LocalStorage { get; set; }
[Inject] private UserPreferenceService UserPreferenceService { get; set; } [Inject] private UserPreferenceService UserPreferenceService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; } [Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new(); private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new(); private Preferences _preferences = new();
private string Selection { get; set; } private string? Selection { get; set; }
protected override async Task OnInitializedAsync()
{
UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences();
Items.Add("0", "Alle");
Items.Add("1", "Lim Sealer Reparation");
Items.Add("2", "Grunder Maling");
Items.Add("3", "Smøremidler");
Items.Add("4", "Rens Polish");
Items.Add("5", "Tape Selvklæbende");
Items.Add("6", "Tilbehør Diverse");
}
private async Task OnSelectionChanged(ChangeEventArgs e) private async Task OnSelectionChanged(ChangeEventArgs e)
{ {
var val = e.Value.ToString(); var val = e.Value.ToString();
if (val == "-1") return;
await OnChanged.InvokeAsync(val); await OnChanged.InvokeAsync(val);
} }
private void ProfileServiceOnOnChange(Preferences newPreferences)
{
_preferences = newPreferences;
StateHasChanged();
}
public void Dispose()
{
UserPreferenceService.OnChange -= ProfileServiceOnOnChange;
}
} }

View file

@ -15,9 +15,9 @@
// //
*@ *@
<select id="search-column" class="form-control" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectChanged"> <select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectChanged">
@foreach (var (key, value) in Items) <option value="-1" selected>SØGNING</option>
{ <option value="name">Varenavn</option>
<option value="@key">@value</option> <option value="sku">Varenummer</option>
} <option value="shortName">Forkortelse</option>
</select> </select>

View file

@ -26,19 +26,17 @@ public partial class ItemSearchDropdown : IDisposable
[Parameter] public EventCallback<string> OnChanged { get; set; } [Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new(); private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new(); private Preferences _preferences = new();
private string Selection { get; set; } = "name"; private string? Selection { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
UserPreferenceService.OnChange += ProfileServiceOnOnChange; UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences(); _preferences = await UserPreferenceService.GetPreferences();
Items.Add("name", "Varenavn"); Selection = _preferences.ItemSearch;
Items.Add("sku", "Varenr");
Items.Add("shortName", "Forkortelse");
Selection = (from x in Items where x.Key == _preferences.ItemSearch select x.Key).First();
} }
private async Task OnSelectChanged(ChangeEventArgs e) private async Task OnSelectChanged(ChangeEventArgs e)
{ {
var val = e.Value.ToString(); var val = e.Value.ToString();
if (val == "-1") return;
await OnChanged.InvokeAsync(val); await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetItemSearch(val); await UserPreferenceService.SetItemSearch(val);
} }

View file

@ -15,9 +15,8 @@
// //
*@ *@
<select class="form-control" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectChanged"> <select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectChanged">
@foreach (var (key, value) in Items) <option value="-1" selected>SORTERING</option>
{ <option value="name">Varenavn</option>
<option value="@key">@value</option> <option value="sku">Varenummer</option>
}
</select> </select>

View file

@ -26,18 +26,17 @@ public partial class ItemSortDropdown : IDisposable
[Parameter] public EventCallback<string> OnChanged { get; set; } [Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new(); private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new(); private Preferences _preferences = new();
private string Selection { get; set; } = "name"; private string? Selection { get; set; }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
UserPreferenceService.OnChange += ProfileServiceOnOnChange; UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences(); _preferences = await UserPreferenceService.GetPreferences();
Items.Add("name", "Varenavn"); Selection = _preferences.ItemSort;
Items.Add("sku", "Varenr");
Selection = (from x in Items where x.Key == _preferences.ItemSort select x.Key).First();
} }
private async Task OnSelectChanged(ChangeEventArgs e) private async Task OnSelectChanged(ChangeEventArgs e)
{ {
var val = e.Value.ToString(); var val = e.Value.ToString();
if (val == "-1") return;
await OnChanged.InvokeAsync(val); await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetItemSort(val); await UserPreferenceService.SetItemSort(val);
} }

View file

@ -15,11 +15,13 @@
// //
*@ *@
<select class="form-control" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectChanged"> <select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectChanged">
@foreach (var (key, value) in Items) <option value="-1" selected>ANTAL SVAR</option>
{ <option value="5">5</option>
<option value="@key">@value</option> <option value="10">10</option>
} <option value="15">15</option>
<option value="30">30</option>
<option value="50">50</option>
</select> </select>

View file

@ -33,13 +33,7 @@ namespace Wonky.Client.Components
{ {
UserPreferenceService.OnChange += ProfileServiceOnOnChange; UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences(); _preferences = await UserPreferenceService.GetPreferences();
Selection = _preferences.PageSize;
Items.Add("5", "5");
Items.Add("10", "10");
Items.Add("15", "15");
Items.Add("30", "30");
Items.Add("50", "50");
Selection = (from x in Items where x.Key == _preferences.PageSize select x.Key).First();
} }
private async Task OnSelectChanged(ChangeEventArgs e) private async Task OnSelectChanged(ChangeEventArgs e)
{ {

View file

@ -14,8 +14,6 @@
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
// //
*@ *@
@using Microsoft.VisualBasic
@using System.Diagnostics
<EditForm Model="AdrContext" OnValidSubmit="FetchAddressData"> <EditForm Model="AdrContext" OnValidSubmit="FetchAddressData">
<div class="row mb-3"> <div class="row mb-3">
<DataAnnotationsValidator/> <DataAnnotationsValidator/>

View file

@ -0,0 +1,24 @@
<EditForm EditContext="_editAddress" OnValidSubmit="SubmitForm">
<DataAnnotationsValidator/>
<div class="row">
<div class="col">
<InputText id="streetName" class="form-control" placeholder="Vejnavn"
@bind-Value="@Address.StreetName" />
<ValidationMessage For="@(() => Address.StreetName)" />
</div>
<div class="col">
<InputText id="houseNumber" class="form-control" placeholder="Husnummer"
@bind-Value="Address.HouseNumber" />
<ValidationMessage For="@(() => Address.HouseNumber)" />
</div>
<div class="col">
<InputText id="zipCode" class="form-control" placeholder="Postnummer"
@bind-Value="Address.ZipCode" />
<ValidationMessage For="@(() => Address.ZipCode)" />
</div>
<div class="col">
<button class="btn btn-primary" type="submit" disabled="@_formInvalid">HENT</button>
</div>
</div>
</EditForm>

View file

@ -0,0 +1,31 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
using Wonky.Client.Models;
namespace Wonky.Client.Components;
public partial class VatAddressInputComponent : IDisposable
{
private VatAddress Address { get; set; } = new();
private EditContext? _editAddress;
private bool _formInvalid = true;
[Parameter] public EventCallback<VatAddress> OnValidSubmit { get; set; }
protected override void OnInitialized()
{
_editAddress = new EditContext(Address);
_editAddress.OnFieldChanged += HandleFieldChanged;
}
private async Task SubmitForm()
{
await OnValidSubmit.InvokeAsync(Address);
}
private void HandleFieldChanged(object? sender, FieldChangedEventArgs e)
{
_formInvalid = !_editAddress!.Validate();
StateHasChanged();
}
public void Dispose()
{
_editAddress!.OnFieldChanged -= HandleFieldChanged;
}
}

View file

@ -0,0 +1,14 @@
<EditForm EditContext="_editVatNumber" OnValidSubmit="SubmitForm">
<DataAnnotationsValidator/>
<div class="row">
<div class="col">
<InputText id="vatNumber" class="form-control" placeholder="reg.nr. eks. 26991765"
@bind-Value="@VatNumber"/>
<ValidationMessage For="@(() => VatNumber)"/>
</div>
<div class="col">
<button class="btn btn-primary" type="submit" disabled="@_formInvalid">HENT</button>
</div>
</div>
</EditForm>

View file

@ -0,0 +1,30 @@
using System.ComponentModel.DataAnnotations;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
namespace Wonky.Client.Components;
public partial class VatNumberInputComponent : IDisposable
{
private string VatNumber { get; set; } = "";
private EditContext? _editVatNumber;
private bool _formInvalid = true;
[Parameter] public EventCallback<string> OnValidSubmit { get; set; }
protected override void OnInitialized()
{
_editVatNumber = new EditContext(VatNumber);
_editVatNumber.OnFieldChanged += HandleFieldChanged;
}
private async Task SubmitForm()
{
await OnValidSubmit.InvokeAsync(VatNumber);
}
private void HandleFieldChanged(object? sender, FieldChangedEventArgs e)
{
_formInvalid = !_editVatNumber!.Validate();
StateHasChanged();
}
public void Dispose()
{
_editVatNumber!.OnFieldChanged -= HandleFieldChanged;
}
}

View file

@ -0,0 +1,10 @@
using System.ComponentModel.DataAnnotations;
namespace Wonky.Client.Models;
public class VatAddress
{
[Required] public string? StreetName { get; set; }
[Required] public string? HouseNumber { get; set; }
[Required] public string? ZipCode { get; set; }
}

View file

@ -17,58 +17,43 @@
@page "/company/create" @page "/company/create"
@using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Authorization
@using Wonky.Client.Components
@attribute [Authorize(Roles = "Adviser")] @attribute [Authorize(Roles = "Adviser")]
<h2>Opret firma</h2>
<h2>Opret firma</h2>
<div class="row"> <div class="row">
<div class="col-sm-12"> <div class="col">
@if(_virkRegInfo.VatNumber != string.Empty) <VatNumberInputComponent OnValidSubmit="GetInfoFromVat" />
</div>
</div>
<div class="row">
<div class="col">
<VatAddressInputComponent OnValidSubmit="GetInfoFromAddress" />
@if (VInfos.Any())
{ {
foreach (var state in _virkRegInfo.States) @foreach (var info in VInfos)
{ {
<div class="alert @(state.State == "INAKTIV" ? "alert-danger" : "alert-info")" role="alert"> <div class="row">
<table class="table table-striped"> <div class="col">
<tr> @info.VatNumber
<th scope="row">Status</th> </div>
<td><strong>@state.State</strong></td> <div class="col">
</tr> @info.Name
<tr> </div>
<th scope="row">Opdateret</th> <div class="col">
<td>@state.LastUpdate</td> @info.States[^1].State
</tr> </div>
<tr> <div class="col">
<th scope="row">Periode Start</th> <button class="btn btn-primary" @onclick="@(() => SelectCompany(info.VatNumber))">OVERFØR</button>
<td>@state.TimeFrame.StartDate</td> </div>
</tr> </div>
<tr>
<th scope="row">Periode Slut</th>
<td>@state.TimeFrame.EndDate</td>
</tr>
</table>
</div>
} }
} }
</div> </div>
<div class="col-sm-12">
<EditForm EditContext="_cvrContext" OnValidSubmit="GetCvrDataFromVat">
<DataAnnotationsValidator />
<div class="form-group row mb-2">
<label for="cvrLookup" class="col-md-2 col-form-label">Cvr</label>
<div class="col">
<InputText id="cvrLookup" class="form-control" placeholder="CVR nummer" @bind-Value="VatToLookup"/>
</div>
<div class="col">
<button type="submit" class="btn btn-success btn-lg" disabled="@_cvrInvalid">Hent oplysninger</button>
</div>
</div>
</EditForm>
</div>
</div> </div>
@* <EditForm Model="_company" OnValidSubmit="Create" class="card card-body bg-light mt-5"> *@
<EditForm EditContext="_editContext" OnValidSubmit="Create" class="card card-body bg-light mt-5"> <EditForm EditContext="_editContext" OnValidSubmit="Create" class="card card-body bg-light mt-5">
<DataAnnotationsValidator /> <DataAnnotationsValidator />
@* <ValidationSummary /> *@
<InputText type="hidden" id="salesRepId" @bind-Value="_companyDto.SalesRepId"/> <InputText type="hidden" id="salesRepId" @bind-Value="_companyDto.SalesRepId"/>
<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>
@ -84,7 +69,7 @@
</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">Adresse2</label>
<div class="col-md-10"> <div class="col-md-10">
<InputText id="address2" class="form-control" @bind-Value="_companyDto.Address2"/> <InputText id="address2" class="form-control" @bind-Value="_companyDto.Address2"/>
</div> </div>
@ -104,10 +89,9 @@
</div> </div>
</div> </div>
<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">Reg.nr.</label>
<div class="col-md-10"> <div class="col-md-10">
<InputText id="vatNumber" class="form-control" @bind-Value="_companyDto.VatNumber"/> <InputText id="vatNumber" class="form-control" @bind-Value="_companyDto.VatNumber"/>
<ValidationMessage For="@(() => _companyDto.VatNumber)"></ValidationMessage>
</div> </div>
</div> </div>
<div class="form-group row mb-2"> <div class="form-group row mb-2">

View file

@ -25,6 +25,7 @@ using Wonky.Client.Services;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms; using Microsoft.AspNetCore.Components.Forms;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Wonky.Client.Models;
using Wonky.Entity.DTO; using Wonky.Entity.DTO;
using Wonky.Entity.Models; using Wonky.Entity.Models;
using Wonky.Entity.Requests; using Wonky.Entity.Requests;
@ -37,10 +38,8 @@ namespace Wonky.Client.Pages
private VirkRegInfo _virkRegInfo = new(); private VirkRegInfo _virkRegInfo = new();
private EditContext _editContext; private EditContext _editContext;
private bool _formInvalid = true; private bool _formInvalid = true;
private EditContext _cvrContext;
private bool _cvrInvalid = true;
private VirkParams _virkParams = new(); private VirkParams _virkParams = new();
private List<VirkRegInfo> VInfos { get; set; } = new();
[Required] public string VatToLookup { get; set; } = ""; [Required] public string VatToLookup { 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; }
@ -54,11 +53,7 @@ namespace Wonky.Client.Pages
{ {
_editContext = new EditContext(_companyDto); _editContext = new EditContext(_companyDto);
_editContext.OnFieldChanged += HandleFieldChanged; _editContext.OnFieldChanged += HandleFieldChanged;
_cvrContext = new EditContext(VatToLookup);
_cvrContext.OnFieldChanged += HandleCvrChanged;
_cvrContext.OnValidationStateChanged += CvrValidationChanged;
var ux = await StorageService.GetItemAsync<UserInfoDto>("_ux"); var ux = await StorageService.GetItemAsync<UserInfoDto>("_ux");
_companyDto.SalesRepId = ux.Id; _companyDto.SalesRepId = ux.Id;
@ -66,15 +61,31 @@ namespace Wonky.Client.Pages
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
} }
private async Task GetCvrDataFromVat() private async Task GetInfoFromAddress(VatAddress address)
{ {
var result = await VirkRegistryService.QueryVirkRegistry(new VirkParams {VatNumber = VatToLookup}).ConfigureAwait(true); VInfos = await VirkRegistryService.QueryVirkRegistry(
new VirkParams
{
StreetName = address.StreetName,
HouseNumber = address.HouseNumber,
ZipCode = address.ZipCode
});
if (!VInfos.Any())
{
ToastService.ShowError($"Ingen virksomheder fundet.");
}
}
private async Task GetInfoFromVat(string vatNumber)
{
var result = await VirkRegistryService
.QueryVirkRegistry(new VirkParams {VatNumber = vatNumber});
if (!result.Any()) if (!result.Any())
{ {
ToastService.ShowError($"Firma med CVR '{VatToLookup}' findes ikke."); ToastService.ShowError($"Firma med CVR '{vatNumber}' findes ikke.");
return; return;
} }
ToastService.ShowSuccess($"Data for '{VatToLookup}' er hentet."); ToastService.ShowSuccess($"Data for '{vatNumber}' er hentet.");
_virkRegInfo = result[0]; _virkRegInfo = result[0];
_companyDto.Name = _virkRegInfo.Name; _companyDto.Name = _virkRegInfo.Name;
_companyDto.Address1 = _virkRegInfo.CoName; _companyDto.Address1 = _virkRegInfo.CoName;
@ -83,29 +94,24 @@ namespace Wonky.Client.Pages
_companyDto.City = _virkRegInfo.City; _companyDto.City = _virkRegInfo.City;
_companyDto.VatNumber = _virkRegInfo.VatNumber; _companyDto.VatNumber = _virkRegInfo.VatNumber;
} }
private void SelectCompany(string vatNumber)
{
_virkRegInfo = (from x in VInfos where x.VatNumber == vatNumber select x).First();
_companyDto.Name = _virkRegInfo.Name;
_companyDto.Address1 = _virkRegInfo.CoName;
_companyDto.Address2 = _virkRegInfo.Address;
_companyDto.ZipCode = _virkRegInfo.ZipCode;
_companyDto.City = _virkRegInfo.City;
_companyDto.VatNumber = _virkRegInfo.VatNumber;
}
private async Task Create() private async Task Create()
{ {
var newId = await CompanyRepo.CreateCompany(_companyDto); var newId = await CompanyRepo.CreateCompany(_companyDto);
ToastService.ShowSuccess($"Godt så! '{_companyDto.Name}' er oprettet i CRM."); ToastService.ShowSuccess($"Godt så! '{_companyDto.Name}' er oprettet i CRM.");
Navigation.NavigateTo($"/company/{newId}"); Navigation.NavigateTo($"/company/{newId}");
} }
private void HandleCvrChanged(object sender, FieldChangedEventArgs e)
{
_cvrInvalid = !_cvrContext.Validate();
StateHasChanged();
}
private void CvrValidationChanged(object sender, ValidationStateChangedEventArgs e)
{
_cvrInvalid = true;
_cvrContext.OnFieldChanged -= HandleCvrChanged;
_cvrContext = new EditContext(VatToLookup);
_cvrContext.OnFieldChanged += HandleCvrChanged;
_cvrContext.OnValidationStateChanged -= CvrValidationChanged;
}
private void HandleFieldChanged(object sender, FieldChangedEventArgs e) private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
{ {
_formInvalid = !_editContext.Validate(); _formInvalid = !_editContext.Validate();

View file

@ -24,19 +24,16 @@
<div class="row mb-3"> <div class="row mb-3">
<div class="col"> <div class="col">
<div> <div>
<label class="form-label">Rækkefølge</label>
<CompanySortDropdown OnChanged="SetSortCol"/> <CompanySortDropdown OnChanged="SetSortCol"/>
</div> </div>
</div> </div>
<div class="col"> <div class="col">
<div> <div>
<label class="form-label">Søgefelt</label>
<CompanySearchDropdown OnChanged="SetSearchCol"/> <CompanySearchDropdown OnChanged="SetSearchCol"/>
</div> </div>
</div> </div>
<div class="col"> <div class="col">
<div> <div>
<label class="form-label">Søgetekst</label>
<SearchPhrase OnChanged="SetSearchPhrase"/> <SearchPhrase OnChanged="SetSearchPhrase"/>
</div> </div>
</div> </div>

View file

@ -23,104 +23,90 @@
@if (_companyDto != null) @if (_companyDto != null)
{ {
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-body">
<h5> <EditForm EditContext="_editContext" OnValidSubmit="Update" class="card card-body bg-light mt-5">
@_companyDto.Name <DataAnnotationsValidator/>
</h5> <div class="form-group row mb-2">
<span>@_companyDto.CompanyId</span> <label for="name" class="col-md-2 col-form-label">Firmanavn</label>
</div> <div class="col-md-10">
@if (!string.IsNullOrEmpty(_companyDto.VatNumber)) <InputText id="name" class="form-control" @bind-Value="_companyDto.Name"/>
{ <ValidationMessage For="@(() => _companyDto.Name)"></ValidationMessage>
<div class="card-body"> </div>
<RegInfocompany VatNumber="@_companyDto.VatNumber" />
</div> </div>
} <div class="form-group row mb-2">
<div class="card-body"> <label for="address1" class="col-md-2 col-form-label">Adresse</label>
@* <EditForm Model="_company" OnValidSubmit="Create" class="card card-body bg-light mt-5"> *@ <div class="col-md-10">
<EditForm EditContext="_editContext" OnValidSubmit="Update" class="card card-body bg-light mt-5"> <InputText id="address1" class="form-control" @bind-Value="_companyDto.Address1"/>
<DataAnnotationsValidator/>
@* <ValidationSummary /> *@
<div class="form-group row mb-2">
<label for="name" class="col-md-2 col-form-label">Firmanavn</label>
<div class="col-md-10">
<InputText id="name" class="form-control" @bind-Value="_companyDto.Name"/>
<ValidationMessage For="@(() => _companyDto.Name)"></ValidationMessage>
</div>
</div> </div>
<div class="form-group row mb-2"> </div>
<label for="address1" class="col-md-2 col-form-label">Adresse</label> <div class="form-group row mb-2">
<div class="col-md-10"> <label for="address2" class="col-md-2 col-form-label">Adresse</label>
<InputText id="address1" class="form-control" @bind-Value="_companyDto.Address1"/> <div class="col-md-10">
</div> <InputText id="address2" class="form-control" @bind-Value="_companyDto.Address2"/>
</div> </div>
<div class="form-group row mb-2"> </div>
<label for="address2" class="col-md-2 col-form-label">Adresse</label> <div class="form-group row mb-2">
<div class="col-md-10"> <label for="zipCode" class="col-md-2 col-form-label">Postnr</label>
<InputText id="address2" class="form-control" @bind-Value="_companyDto.Address2"/> <div class="col-md-10">
</div> <InputText id="zipCode" class="form-control" @bind-Value="_companyDto.ZipCode"/>
<ValidationMessage For="@(() => _companyDto.ZipCode)"></ValidationMessage>
</div> </div>
<div class="form-group row mb-2"> </div>
<label for="zipCode" class="col-md-2 col-form-label">Postnr</label> <div class="form-group row mb-2">
<div class="col-md-10"> <label for="city" class="col-md-2 col-form-label">Bynavn</label>
<InputText id="zipCode" class="form-control" @bind-Value="_companyDto.ZipCode"/> <div class="col-md-10">
<ValidationMessage For="@(() => _companyDto.ZipCode)"></ValidationMessage> <InputText id="city" class="form-control" @bind-Value="_companyDto.City"/>
</div> <ValidationMessage For="@(() => _companyDto.City)"></ValidationMessage>
</div> </div>
<div class="form-group row mb-2"> </div>
<label for="city" class="col-md-2 col-form-label">Bynavn</label> <div class="form-group row mb-2">
<div class="col-md-10"> <label for="vatNumber" class="col-md-2 col-form-label">CVR/ORG</label>
<InputText id="city" class="form-control" @bind-Value="_companyDto.City"/> <div class="col-md-10">
<ValidationMessage For="@(() => _companyDto.City)"></ValidationMessage> <InputText id="vatNumber" class="form-control" @bind-Value="_companyDto.VatNumber"/>
</div> <ValidationMessage For="@(() => _companyDto.VatNumber)"></ValidationMessage>
</div> </div>
<div class="form-group row mb-2"> </div>
<label for="vatNumber" class="col-md-2 col-form-label">CVR/ORG</label> <div class="form-group row mb-2">
<div class="col-md-10"> <label for="phone" class="col-md-2 col-form-label">Telefon nummer</label>
<InputText id="vatNumber" class="form-control" @bind-Value="_companyDto.VatNumber"/> <div class="col-md-10">
<ValidationMessage For="@(() => _companyDto.VatNumber)"></ValidationMessage> <InputText id="phone" class="form-control" @bind-Value="_companyDto.Phone"/>
</div>
</div> </div>
<div class="form-group row mb-2"> </div>
<label for="phone" class="col-md-2 col-form-label">Telefon nummer</label> <div class="form-group row mb-2">
<div class="col-md-10"> <label for="mobile" class="col-md-2 col-form-label">Mobil nummer</label>
<InputText id="phone" class="form-control" @bind-Value="_companyDto.Phone"/> <div class="col-md-10">
</div> <InputText id="mobile" class="form-control" @bind-Value="_companyDto.Mobile"/>
</div> </div>
<div class="form-group row mb-2"> </div>
<label for="mobile" class="col-md-2 col-form-label">Mobil nummer</label> <div class="form-group row mb-2">
<div class="col-md-10"> <label for="email" class="col-md-2 col-form-label">Email</label>
<InputText id="mobile" class="form-control" @bind-Value="_companyDto.Mobile"/> <div class="col-md-10">
</div> <InputText id="email" class="form-control" @bind-Value="_companyDto.Email"/>
</div> </div>
<div class="form-group row mb-2"> </div>
<label for="email" class="col-md-2 col-form-label">Email</label> <div class="form-group row mb-2">
<div class="col-md-10"> <label for="attention" class="col-md-2 col-form-label">Attention</label>
<InputText id="email" class="form-control" @bind-Value="_companyDto.Email"/> <div class="col-md-10">
</div> <InputText id="attention" class="form-control" @bind-Value="_companyDto.Attention"/>
</div>
<div class="form-group row mb-2">
<label for="attention" class="col-md-2 col-form-label">Attention</label>
<div class="col-md-10">
<InputText id="attention" class="form-control" @bind-Value="_companyDto.Attention"/>
</div>
</div> </div>
</div>
<div class="row mb-2"> <div class="row mb-2">
<div class="col-md-12 text-right"> <div class="col-md-12 text-right">
<button type="submit" class="btn btn-success" disabled="@_formInvalid">Send ændringer</button> <button type="submit" class="btn btn-success" disabled="@_formInvalid">GEM</button>
</div>
</div>
</EditForm>
</div>
<div class="card-footer">
<div class="row align-content-end">
<div class="col align-items-end">
<a class="btn btn-primary" href="/companies">Tilbage</a>
</div> </div>
</div> </div>
</EditForm>
</div>
<div class="card-footer">
<div class="row align-content-end">
<div class="col align-items-end">
<a class="btn btn-primary" href="/companies">Tilbage</a>
</div>
</div> </div>
</div> </div>
</div>
} }
else else
{ {

View file

@ -24,25 +24,21 @@
<div class="row mb-3"> <div class="row mb-3">
<div class="col"> <div class="col">
<div> <div>
<label class="form-label">Varegruppe</label>
<ItemGroupDropdown OnChanged="SetItemGroup"/> <ItemGroupDropdown OnChanged="SetItemGroup"/>
</div> </div>
</div> </div>
<div class="col"> <div class="col">
<div> <div>
<label class="form-label">Rækkefølge</label>
<ItemSortDropdown OnChanged="SetSortCol"/> <ItemSortDropdown OnChanged="SetSortCol"/>
</div> </div>
</div> </div>
<div class="col"> <div class="col">
<div> <div>
<label class="form-label">Søgefelt</label>
<ItemSearchDropdown OnChanged="SetSearchCol"/> <ItemSearchDropdown OnChanged="SetSearchCol"/>
</div> </div>
</div> </div>
<div class="col"> <div class="col">
<div> <div>
<label class="form-label">Søgetekst</label>
<SearchPhrase OnChanged="SetSearchPhrase"/> <SearchPhrase OnChanged="SetSearchPhrase"/>
</div> </div>

View file

@ -4,11 +4,11 @@ namespace Wonky.Client.Services;
public record Preferences public record Preferences
{ {
public string CompanySearch { get; set; } = "name"; public string? CompanySearch { get; set; } = "name";
public string CompanySort { get; set; } = "name"; public string? CompanySort { get; set; } = "name";
public string ItemSearch { get; set; } = "name"; public string? ItemSearch { get; set; } = "name";
public string ItemSort { get; set; } = "name"; public string? ItemSort { get; set; } = "name";
public string PageSize { get; set; } = "5"; public string PageSize { get; set; } = "10";
} }
public class UserPreferenceService public class UserPreferenceService
{ {

View file

@ -59,7 +59,7 @@ public class VirkRegistryService
if (!string.IsNullOrWhiteSpace(query.VatNumber)) return jsonResult; if (!string.IsNullOrWhiteSpace(query.VatNumber)) return jsonResult;
var result = jsonResult var result = jsonResult
.Where(x => x.States[^1].State == "NORMAL") //.Where(x => x.States[^1].State == "NORMAL")
.OrderBy(x => x.Name).ToList(); .OrderBy(x => x.Name).ToList();
return result.Count == 0 ? _noData : result; return result.Count == 0 ? _noData : result;

View file

@ -38,12 +38,6 @@
</div> </div>
<AuthorizeView Roles="Adviser,Admin"> <AuthorizeView Roles="Adviser,Admin">
<Authorized> <Authorized>
<div class="nav-item px-3">
<NavLink class="nav-link" href="/OrdreKladde">
<span class="oi oi-list-rich" aria-hidden="true"></span> Ordrekladde
</NavLink>
</div>
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link" href="Companies"> <NavLink class="nav-link" href="Companies">
<span class="oi oi-list-rich" aria-hidden="true"></span> Firmaer <span class="oi oi-list-rich" aria-hidden="true"></span> Firmaer
@ -54,6 +48,12 @@
<span class="oi oi-list-rich" aria-hidden="true"></span> Priskatalog <span class="oi oi-list-rich" aria-hidden="true"></span> Priskatalog
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="/OrdreKladde">
<span class="oi oi-list-rich" aria-hidden="true"></span> Ordrekladde
</NavLink>
</div>
</Authorized> </Authorized>
</AuthorizeView> </AuthorizeView>
</nav> </nav>

View file

@ -19,6 +19,7 @@
<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" />
<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="6.0.0" /> <PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="6.0.0" />
<PackageReference Include="Radzen.Blazor" Version="3.16.6" />
<PackageReference Include="Toolbelt.Blazor.HttpClientInterceptor" Version="10.1.0" /> <PackageReference Include="Toolbelt.Blazor.HttpClientInterceptor" Version="10.1.0" />
</ItemGroup> </ItemGroup>

View file

@ -7,6 +7,8 @@
height: 48px; height: 48px;
} }
html, body { html, body {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
} }

View file

@ -24,7 +24,7 @@ public class CompanyDto
[Required(ErrorMessage = "Navn skal udyldes")] public string Name { get; set; } = ""; [Required(ErrorMessage = "Navn skal udyldes")] public string Name { get; set; } = "";
[Required(ErrorMessage = "Postnummer skal udfyldes")] public string ZipCode { get; set; } = ""; [Required(ErrorMessage = "Postnummer skal udfyldes")] public string ZipCode { get; set; } = "";
[Required(ErrorMessage = "Bynavn skal udfyldes")] public string City { get; set; } = ""; [Required(ErrorMessage = "Bynavn skal udfyldes")] public string City { get; set; } = "";
[Required(ErrorMessage = "CVR nummer skal udfyldes")] public string VatNumber { get; set; } = ""; public string VatNumber { get; set; } = "";
public string CompanyId { get; set; } = ""; public string CompanyId { get; set; } = "";
public string SalesRepId { get; set; } = ""; public string SalesRepId { get; set; } = "";
public string BcId { get; set; } = ""; public string BcId { get; set; } = "";
@ -37,5 +37,5 @@ public class CompanyDto
public string Attention { get; set; } = ""; public string Attention { get; set; } = "";
public string LastVisit { get; set; } = ""; public string LastVisit { get; set; } = "";
public string NextVisit { get; set; } = ""; public string NextVisit { get; set; } = "";
public int Interval { get; set; } = 12; public int Interval { get; set; } = 8;
} }

View file

@ -17,4 +17,5 @@ namespace Wonky.Entity.DTO;
public class CreateCompanyResponse public class CreateCompanyResponse
{ {
} }

View file

@ -17,7 +17,7 @@ namespace Wonky.Entity.Requests;
public class PagingParams public class PagingParams
{ {
private const int MaxPageSize = 50; private const int MaxPageSize = 50;
private int _pageSize = 5; private int _pageSize = 10;
public int PageNumber { get; set; } = 1; public int PageNumber { get; set; } = 1;
public int PageSize public int PageSize
{ {