order of appearance list page top

This commit is contained in:
Frede Hundewadt 2022-03-22 07:20:44 +01:00
parent b193209bc3
commit eaf380bec3
21 changed files with 114 additions and 158 deletions

View file

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

View file

@ -14,6 +14,7 @@
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
//
*@
<select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectionChanged">
<option value="-1">SØGNING</option>
<option value="name">Firmanavn</option>
@ -21,4 +22,4 @@
<option value="zipCode">Postnummer</option>
<option value="account">Konto</option>
<option value="phone">Telefon</option>
</select>
</select>

View file

@ -39,7 +39,9 @@ public partial class CompanySearchDropdown : IDisposable
private async Task OnSelectionChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
if (val == "-1") return;
if (val == "-1")
{
val = "name"; };
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetCompanySearch(val);
}

View file

@ -38,7 +38,7 @@ namespace Wonky.Client.Components
private async Task OnSelectionChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
if (val == "-1") return;
if (val == "-1") {val = "name";};
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetCompanySort(val);
}

View file

@ -18,20 +18,22 @@
@using Wonky.Client.Components;
@if (Companies.Any())
{
<CompanyListHeader />
@foreach (var company in Companies)
{
<div class="row p-2 mb-1 border-bottom">
<div class="state rounded-circle @(VisitState(company.LastVisit))"></div>
<div class="col-sm-4">@company.Name</div>
<div class="col-sm-2">@company.Account</div>
<div class="col-sm-4">@company.City</div>
<div class="col-sm-1"><a class="btn btn-sm btn-primary mb-1" href="/company/account/@company.Account">Vis</a></div>
</div>
}
<table class="table">
<tbody>
@foreach (var company in Companies)
{
<tr>
<td><DisplayStateComponent StateClass="@(VisitState(company.LastVisit))"></DisplayStateComponent></td>
<td>@company.Name</td>
<td>@company.Account</td>
<td>@company.City</td>
<td><a class="btn btn-primary mb-1" href="/company/account/@company.Account">Vis</a></td>
</tr>
}
</tbody>
</table>
}
else
{
<AppSpinner/>
}

View file

@ -15,11 +15,7 @@
//
*@
@if (string.IsNullOrEmpty(VatNumber))
{
<span class="state the-bad rounded-circle mx-3"></span>
}
else
{
<span class="state rounded-circle mx-3 @(CurrentRegState == "NORMAL" ? "the-good" : "the-ugly" )"></span>
<img class="img-fluid float-start state rounded-circle @StateClass" src="state.png" alt="state"/>
@code{
[Parameter] public string StateClass { get; set; } = "the-ugly";
}

View file

@ -31,7 +31,7 @@ public partial class ItemGroupDropdown
private async Task OnSelectionChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
if (val == "-1") return;
if (val == "-1") {val = "0";};
await OnChanged.InvokeAsync(val);
}
}

View file

@ -36,7 +36,7 @@ public partial class ItemSearchDropdown : IDisposable
private async Task OnSelectChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
if (val == "-1") return;
if (val == "-1") {val = "name";};
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetItemSearch(val);
}

View file

@ -36,7 +36,7 @@ public partial class ItemSortDropdown : IDisposable
private async Task OnSelectChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
if (val == "-1") return;
if (val == "-1") {val = "name";};
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetItemSort(val);
}

View file

@ -16,7 +16,7 @@
*@
<select class="form-select" @bind-value="@Selection" @bind-value:event="oninput" @onchange="OnSelectChanged">
<option value="-1" selected>ANTAL SVAR</option>
<option value="-1" selected>RESULTATER</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>

View file

@ -38,6 +38,7 @@ namespace Wonky.Client.Components
private async Task OnSelectChanged(ChangeEventArgs e)
{
var val = e.Value.ToString();
if (val == "-1") {val = "10";};
await OnChanged.InvokeAsync(val);
await UserPreferenceService.SetPageSize(val);
}

View file

@ -15,7 +15,7 @@
//
*@
<nav arial-label="Pager">
<div arial-label="Pager">
<ul class="pagination justify-content-center">
@foreach (var link in _links)
{
@ -26,4 +26,4 @@
</li>
}
</ul>
</nav>
</div>

View file

@ -1,44 +0,0 @@
// Copyright (C) 2022 FCS Frede's Computer Services.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the Affero GNU General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// Affero GNU General Public License for more details.
//
// You should have received a copy of the Affero GNU General Public License
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
//
using Microsoft.AspNetCore.Components;
using Wonky.Client.Services;
using Wonky.Entity.Models;
using Wonky.Entity.Requests;
namespace Wonky.Client.Components;
public partial class RegStateVatNumber
{
[Inject] public VirkRegistryService VirkRegistryService { get; set; }
[Parameter] public string VatNumber { get; set; } = "";
private VirkRegInfo VirkRegInfo { get; set; } = new();
private readonly VirkParams _VirkParams = new();
private string CurrentRegState = "UKENDT";
protected override async Task OnParametersSetAsync()
{
if (!string.IsNullOrEmpty(VatNumber))
{
_VirkParams.VatNumber = VatNumber;
var result = await VirkRegistryService.QueryVirkRegistry(_VirkParams);
VirkRegInfo = result.Any() ? result[0] : new VirkRegInfo();
if (VirkRegInfo.States.Any())
CurrentRegState = VirkRegInfo.States[^1].State;
}
}
}

View file

@ -21,36 +21,29 @@
@attribute [Authorize(Roles = "Adviser")]
<div class="row mb-3">
<div class="col">
<div>
<CompanySortDropdown OnChanged="SetSortCol"/>
</div>
</div>
<div class="col">
<div>
<div class="container">
<div class="row mb-3">
<div class="col">
<CompanySearchDropdown OnChanged="SetSearchCol"/>
</div>
</div>
<div class="col">
<div>
<div class="col">
<SearchPhrase OnChanged="SetSearchPhrase"/>
</div>
</div>
<div class="col">
<a class="btn btn-success mb-1" href="/company/create">Nyt firma</a>
<div class="col">
<CompanySortDropdown OnChanged="SetSortCol"/>
</div>
<div class="col-md-2">
<PageSizeDropdown OnChanged="SetPageSize"></PageSizeDropdown>
</div>
<div class="col">
<a class="btn btn-success mb-1" href="/company/create">Nyt firma</a>
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<div class="row mb-3">
<div class="col">
<Pagination MetaData="MetaData" Spread="2" SelectedPage="SelectedPage"></Pagination>
</div>
<div class="col-md-2">
<PageSizeDropdown OnChanged="SetPageSize"></PageSizeDropdown>
</div>
</div>
<div class="row">
<div class="col">
<CompanyTable Companies="Companies" OnDelete="DeleteCompany"></CompanyTable>
</div>
</div>
<CompanyTable Companies="Companies" OnDelete="DeleteCompany"></CompanyTable>

View file

@ -25,7 +25,11 @@
{
<div class="card">
<div class="card-header">
<RegStateVatNumber VatNumber="@_companyDto.VatNumber"></RegStateVatNumber>
<div>CVR status <DisplayVatStateComponent StateClass="@RegState"></DisplayVatStateComponent></div>
<div>Konto @_companyDto.Account</div>
<div>CompanyId @_companyDto.CompanyId</div>
<div>EDIT Næste besøg @NextVisit</div> <div>EDIT Sidst besøgt @LastVisit</div>
<div>DB Næste besøg @_companyDto.NextVisit</div> <div>DB Sidst besøgt @_companyDto.LastVisit</div>
</div>
<div class="card-body">
<EditForm EditContext="_editContext" OnValidSubmit="Update">
@ -34,7 +38,6 @@
<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)"/>
</div>
</div>
<div class="form-group row mb-2">
@ -53,21 +56,18 @@
<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)"/>
</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>
<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)"/>
</div>
</div>
<div class="form-group row mb-2">
@ -103,7 +103,7 @@
<div class="form-group row mb-2">
<label for="nextVisit" class="col-form-label col-md-2">Næste besøg</label>
<div class="col-md-3">
<InputDate id="nextVisit" class="form-control" @bind-Value="@(NextVisit)"/>
<InputDate id="nextVisit" class="form-control" @bind-Value="@(NextVisit)"/>
</div>
</div>
<div class="form-group row mb-2">
@ -114,7 +114,7 @@
</div>
<div class="row mb-2">
<div class="col-md-12 text-right">
<button type="submit" class="btn btn-success" disabled="@_formInvalid">GEM</button>
<button type="submit" class="btn btn-success" >GEM</button>
</div>
</div>
</EditForm>

View file

@ -37,21 +37,22 @@ public partial class CompanyUpdate : IDisposable
[Parameter] public string Account { get; set; } = null!;
private CompanyDto _companyDto;
private EditContext _editContext;
private bool _formInvalid = true;
private List<VirkRegInfo> VInfos { get; set; } = new();
private VirkRegInfo _virkRegInfo { get; set; } = new();
private DateTime LastVisit { get; set; }
private DateTime NextVisit { get; set; }
private string RegState { get; set; } = "the-ugly";
protected override async Task OnInitializedAsync()
{
_companyDto = await CompanyRepo.GetCompanyByAccount(Account);
LastVisit = DateTime.Parse(_companyDto.LastVisit);
NextVisit = DateTime.Parse(_companyDto.NextVisit);
_editContext = new EditContext(_companyDto);
_editContext.OnFieldChanged += HandleFieldChanged!;
Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent();
await GetInfoFromVat(_companyDto.VatNumber);
}
private async Task Update()
@ -60,9 +61,39 @@ public partial class CompanyUpdate : IDisposable
_companyDto.LastVisit = $"{LastVisit:yyyy-MM-dd}";
_companyDto.NextVisit = $"{NextVisit:yyyy-MM-dd}";
await CompanyRepo.UpdateCompany(_companyDto);
ToastService.ShowSuccess($"Godt så. Firma '{_companyDto!.Name}' er opdateret.");
Navigation.NavigateTo($"/company/{_companyDto.CompanyId}");
var lv = DateTime.TryParse(_companyDto.LastVisit, out var lvValidated);
var nv = DateTime.TryParse(_companyDto.NextVisit, out var nvValidated);
if (lv && nv)
{
await CompanyRepo.UpdateCompany(_companyDto);
ToastService.ShowSuccess($"Godt så. Firma '{_companyDto!.Name}' er opdateret.");
Navigation.NavigateTo($"/company/account{_companyDto.Account}");
}
}
private async Task GetInfoFromVat(string vatNumber)
{
var result = await VirkRegistryService
.QueryVirkRegistry(
new VirkParams
{
VatNumber = vatNumber
});
if (string.IsNullOrWhiteSpace(result[0].VatNumber))
{
ToastService.ShowError($"CVR '{vatNumber}' findes ikke.");
return;
}
ToastService.ShowSuccess($"Data for '{vatNumber}' er hentet.");
_virkRegInfo = result[0];
RegState = _virkRegInfo.States[^1].State == "NORMAL" ? "the-good" : "the-ugly";
_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 GetInfoFromAddress(VatAddress address)
@ -79,29 +110,6 @@ public partial class CompanyUpdate : IDisposable
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 '{vatNumber}' findes ikke.");
return;
}
ToastService.ShowSuccess($"Data for '{vatNumber}' er hentet.");
_virkRegInfo = result[0];
_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 void SelectCompany(string vatNumber)
{
_virkRegInfo = (from x in VInfos where x.VatNumber == vatNumber select x).First();
@ -113,16 +121,9 @@ public partial class CompanyUpdate : IDisposable
_companyDto.VatNumber = _virkRegInfo.VatNumber;
}
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
{
_formInvalid = !_editContext!.Validate();
StateHasChanged();
}
public void Dispose()
{
Interceptor.DisposeEvent();
_editContext.OnFieldChanged -= HandleFieldChanged!;
}
}

View file

@ -64,7 +64,7 @@
</tr>
<tr>
<th scope="row">Næste besøg</th>
<td><div class="state rounded-circle @(VisitState(CompanyDto.LastVisit))"></div></td>
<td><DisplayStateComponent StateClass="@(VisitState(CompanyDto.LastVisit))"></DisplayStateComponent></td>
<td>@CompanyDto.NextVisit</td>
</tr>
</tbody>

View file

@ -18,7 +18,9 @@ using System.Threading.Tasks;
using Wonky.Client.HttpInterceptors;
using Wonky.Client.HttpRepository;
using Microsoft.AspNetCore.Components;
using Wonky.Client.Services;
using Wonky.Entity.DTO;
using Wonky.Entity.Models;
namespace Wonky.Client.Pages;
@ -26,9 +28,11 @@ public partial class CompanyView : IDisposable
{
[Inject] public ICompanyHttpRepository CompanyRepo { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public VirkRegistryService VirkRegistryService { get; set; }
[Parameter] public string Account { get; set; } = "";
[Parameter] public string CompanyId { get; set; } = "";
private CompanyDto CompanyDto { get; set; } = new ();
private VirkRegInfo VirkRegInfo { get; set; } = new();
protected override async Task OnInitializedAsync()
{

View file

@ -23,35 +23,26 @@
<div class="row mb-3">
<div class="col">
<div>
<ItemGroupDropdown OnChanged="SetItemGroup"/>
</div>
<ItemGroupDropdown OnChanged="SetItemGroup"/>
</div>
<div class="col">
<div>
<ItemSortDropdown OnChanged="SetSortCol"/>
</div>
</div>
<div class="col">
<div>
<ItemSearchDropdown OnChanged="SetSearchCol"/>
</div>
</div>
<div class="col">
<div>
<SearchPhrase OnChanged="SetSearchPhrase"/>
</div>
</div>
</div>
<div class="row">
<div class="col-md-8">
<Pagination MetaData="MetaData" Spread="2" SelectedPage="SelectedPage"></Pagination>
<div class="col">
<ItemSortDropdown OnChanged="SetSortCol"/>
</div>
<div class="col-md-2">
<PageSizeDropdown OnChanged="SetPageSize"></PageSizeDropdown>
</div>
</div>
<div class="row">
<div class="col">
<Pagination MetaData="MetaData" Spread="2" SelectedPage="SelectedPage"></Pagination>
</div>
</div>
<div class="row">
<div class="col">
<ItemTable SalesItems="SalesItemList"></ItemTable>

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 B

View file

@ -0,0 +1,9 @@
namespace Wonky.Entity;
public enum VirkState
{
None,
Good,
Bad,
Ugly
}