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 string Version { get; set; } = "0.2.2";
public string Version { get; set; } = "0.2.4";
public string Name { get; set; } = "Wonky Online";
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]
//
*@
<select class="form-control" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
@foreach (var (key, value) in Items)
{
<option value="@key">@value</option>
}
<select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
<option value="-1">SØGNING</option>
<option value="name">Firmanavn</option>
<option value="city">Bynavn</option>
<option value="zipCode">Postnummer</option>
<option value="account">Konto</option>
<option value="phone">Telefon</option>
</select>

View file

@ -34,17 +34,12 @@ public partial class CompanySearchDropdown : IDisposable
{
UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences();
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();
Selection = _preferences.CompanySearch;
}
private async Task OnSelectionChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
if (val == "-1") return;
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetCompanySearch(val);
}
@ -56,4 +51,5 @@ public partial class CompanySearchDropdown : IDisposable
public void Dispose()
{
UserPreferenceService.OnChange -= ProfileServiceOnOnChange;
} }
}
}

View file

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

View file

@ -33,15 +33,12 @@ namespace Wonky.Client.Components
{
UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences();
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();
Selection = _preferences.CompanySort;
}
private async Task OnSelectionChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
if (val == "-1") return;
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetCompanySort(val);
}

View file

@ -15,9 +15,13 @@
//
*@
<select class="form-control" @bind-value="Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
@foreach (var (key, value) in Items)
{
<option value="@key">@value</option>
}
<select class="form-select" @bind-value="Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
<option value="-1">VARE GRUPPE</option>
<option value="0" selected>Alle</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>

View file

@ -20,40 +20,18 @@ using Wonky.Client.Services;
namespace Wonky.Client.Components;
public partial class ItemGroupDropdown : IDisposable
public partial class ItemGroupDropdown
{
[Inject] private ILocalStorageService LocalStorage { get; set; }
[Inject] private UserPreferenceService UserPreferenceService { get; set; }
[Parameter] public EventCallback<string> OnChanged { get; set; }
private Dictionary<string, string> Items { get; set; } = new();
private Preferences _preferences = new();
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 string? Selection { get; set; }
private async Task OnSelectionChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
if (val == "-1") return;
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">
@foreach (var (key, value) in Items)
{
<option value="@key">@value</option>
}
<select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectChanged">
<option value="-1" selected>SØGNING</option>
<option value="name">Varenavn</option>
<option value="sku">Varenummer</option>
<option value="shortName">Forkortelse</option>
</select>

View file

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

View file

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

View file

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

View file

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

View file

@ -33,13 +33,7 @@ namespace Wonky.Client.Components
{
UserPreferenceService.OnChange += ProfileServiceOnOnChange;
_preferences = await UserPreferenceService.GetPreferences();
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();
Selection = _preferences.PageSize;
}
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]
//
*@
@using Microsoft.VisualBasic
@using System.Diagnostics
<EditForm Model="AdrContext" OnValidSubmit="FetchAddressData">
<div class="row mb-3">
<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"
@using Microsoft.AspNetCore.Authorization
@using Wonky.Client.Components
@attribute [Authorize(Roles = "Adviser")]
<h2>Opret firma</h2>
<h2>Opret firma</h2>
<div class="row">
<div class="col-sm-12">
@if(_virkRegInfo.VatNumber != string.Empty)
<div class="col">
<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">
<table class="table table-striped">
<tr>
<th scope="row">Status</th>
<td><strong>@state.State</strong></td>
</tr>
<tr>
<th scope="row">Opdateret</th>
<td>@state.LastUpdate</td>
</tr>
<tr>
<th scope="row">Periode Start</th>
<td>@state.TimeFrame.StartDate</td>
</tr>
<tr>
<th scope="row">Periode Slut</th>
<td>@state.TimeFrame.EndDate</td>
</tr>
</table>
</div>
<div class="row">
<div class="col">
@info.VatNumber
</div>
<div class="col">
@info.Name
</div>
<div class="col">
@info.States[^1].State
</div>
<div class="col">
<button class="btn btn-primary" @onclick="@(() => SelectCompany(info.VatNumber))">OVERFØR</button>
</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>
@* <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">
<DataAnnotationsValidator />
@* <ValidationSummary /> *@
<InputText type="hidden" id="salesRepId" @bind-Value="_companyDto.SalesRepId"/>
<div class="form-group row mb-2">
<label for="name" class="col-md-2 col-form-label">Firmanavn</label>
@ -84,7 +69,7 @@
</div>
</div>
<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">
<InputText id="address2" class="form-control" @bind-Value="_companyDto.Address2"/>
</div>
@ -104,10 +89,9 @@
</div>
</div>
<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">
<InputText id="vatNumber" class="form-control" @bind-Value="_companyDto.VatNumber"/>
<ValidationMessage For="@(() => _companyDto.VatNumber)"></ValidationMessage>
</div>
</div>
<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.Forms;
using Microsoft.Extensions.Logging;
using Wonky.Client.Models;
using Wonky.Entity.DTO;
using Wonky.Entity.Models;
using Wonky.Entity.Requests;
@ -37,10 +38,8 @@ namespace Wonky.Client.Pages
private VirkRegInfo _virkRegInfo = new();
private EditContext _editContext;
private bool _formInvalid = true;
private EditContext _cvrContext;
private bool _cvrInvalid = true;
private VirkParams _virkParams = new();
private List<VirkRegInfo> VInfos { get; set; } = new();
[Required] public string VatToLookup { get; set; } = "";
[Inject] public ICompanyHttpRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
@ -54,11 +53,7 @@ namespace Wonky.Client.Pages
{
_editContext = new EditContext(_companyDto);
_editContext.OnFieldChanged += HandleFieldChanged;
_cvrContext = new EditContext(VatToLookup);
_cvrContext.OnFieldChanged += HandleCvrChanged;
_cvrContext.OnValidationStateChanged += CvrValidationChanged;
var ux = await StorageService.GetItemAsync<UserInfoDto>("_ux");
_companyDto.SalesRepId = ux.Id;
@ -66,15 +61,31 @@ namespace Wonky.Client.Pages
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())
{
ToastService.ShowError($"Firma med CVR '{VatToLookup}' findes ikke.");
ToastService.ShowError($"Firma med CVR '{vatNumber}' findes ikke.");
return;
}
ToastService.ShowSuccess($"Data for '{VatToLookup}' er hentet.");
ToastService.ShowSuccess($"Data for '{vatNumber}' er hentet.");
_virkRegInfo = result[0];
_companyDto.Name = _virkRegInfo.Name;
_companyDto.Address1 = _virkRegInfo.CoName;
@ -83,29 +94,24 @@ namespace Wonky.Client.Pages
_companyDto.City = _virkRegInfo.City;
_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()
{
var newId = await CompanyRepo.CreateCompany(_companyDto);
ToastService.ShowSuccess($"Godt så! '{_companyDto.Name}' er oprettet i CRM.");
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)
{
_formInvalid = !_editContext.Validate();

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -38,12 +38,6 @@
</div>
<AuthorizeView Roles="Adviser,Admin">
<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">
<NavLink class="nav-link" href="Companies">
<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
</NavLink>
</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>
</AuthorizeView>
</nav>

View file

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

View file

@ -7,6 +7,8 @@
height: 48px;
}
html, body {
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 = "Postnummer skal udfyldes")] public string ZipCode { 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 SalesRepId { get; set; } = "";
public string BcId { get; set; } = "";
@ -37,5 +37,5 @@ public class CompanyDto
public string Attention { get; set; } = "";
public string LastVisit { 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
{
}

View file

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