quote list cosmetics - better date parser in component

This commit is contained in:
Frede Hundewadt 2022-12-20 05:34:55 +01:00
parent 1a5dba0395
commit aa81f14514
6 changed files with 42 additions and 34 deletions

View file

@ -4,19 +4,21 @@
<div class="list-group list-group-flush"> <div class="list-group list-group-flush">
<div class="list-group-item bg-dark text-white"> <div class="list-group-item bg-dark text-white">
<div class="row g-3"> <div class="row g-3">
<div class="col-sm-2">
Reference
</div>
<div class="col-sm-4"> <div class="col-sm-4">
Kunde Kunde
</div> </div>
<div class="col-sm-2"> <div class="col-sm-2">
Dato Dato
</div> </div>
<div class="col-sm-1"> <div class="col-sm-3 -text-center">
Skift status
</div>
<div class="col-sm-1 text-center">
Status Status
</div> </div>
<div class="col-sm-3"></div> <div class="col-sm-2 text-center">
Reference
</div>
</div> </div>
</div> </div>
@if (Quotes.Any()) @if (Quotes.Any())
@ -25,27 +27,26 @@
{ {
<div class="list-group-item list-group-item-action"> <div class="list-group-item list-group-item-action">
<div class="row align-items-center"> <div class="row align-items-center">
<div class="col-sm-2">
<a class="btn btn-outline-dark d-block" style="font-family:monospace;font-size: 14px;"
href="/companies/@quote.Company.CompanyId/quotes/@quote.ActivityId">@quote.ESalesNumber</a>
</div>
<div class="col-sm-4"> <div class="col-sm-4">
@quote.Company.Name @quote.Company.Name
</div> </div>
<di class="col-sm-2"> <di class="col-sm-2">
@quote.OrderDate @quote.OrderDate
</di> </di>
<div class="col-sm-1"> <div class="col-sm-3 text-center">
<button type="button" class="btn btn-outline-dark me-2" @onclick="() => SetQuote(quote.ESalesNumber, QStatus.Lose)"><i class="bi-trash-fill"></i></button>
<button type="button" class="btn btn-outline-dark me-2" @onclick="() => SetQuote(quote.ESalesNumber, QStatus.Archive)"><i class="bi-archive-fill"></i> </button>
<button type="button" class="btn btn-outline-dark me-2" @onclick="() => SetQuote(quote.ESalesNumber, QStatus.Note)"><i class="bi-tag-fill"></i> </button>
<button type="button" class="btn btn-success" @onclick="() => SetQuote(quote.ESalesNumber, QStatus.Win)"><i class="bi-cart-fill"></i> </button>
</div>
<div class="col-sm-1 text-center">
@switch (quote.QuoteStatusEnum) @switch (quote.QuoteStatusEnum)
{ {
case "None": case "None":
<i class="bi-question-circle-fill"></i> <i class="bi-question-circle-fill"></i>
break; break;
case "Win":
<span>Ordre</span>
break;
case "Lose": case "Lose":
<i class="bi-trash"></i> <i class="bi-trash-fill"></i>
break; break;
case "Note": case "Note":
<i class="bi-tag-fill"></i> <i class="bi-tag-fill"></i>
@ -58,19 +59,24 @@
break; break;
} }
</div> </div>
<div class="col-sm-3"> <div class="col-sm-2 text-center">
<button type="button" class="btn btn-outline-dark me-2" @onclick="() => SetQuote(quote.ESalesNumber, QStatus.Lose)"><i class="bi-trash2-fill"></i></button> <a class="btn btn-outline-dark d-block" style="font-family:monospace;font-size: 14px;"
<button type="button" class="btn btn-outline-dark me-2" @onclick="() => SetQuote(quote.ESalesNumber, QStatus.Archive)"><i class="bi-archive-fill"></i> </button> href="/companies/@quote.Company.CompanyId/quotes/@quote.ActivityId">@quote.ESalesNumber</a>
<button type="button" class="btn btn-outline-dark me-2" @onclick="() => SetQuote(quote.ESalesNumber, QStatus.Note)"><i class="bi-tag-fill"></i> </button>
<button type="button" class="btn btn-success" @onclick="() => SetQuote(quote.ESalesNumber, QStatus.Win)"><i class="bi-cart-fill"></i> </button>
</div> </div>
@if (!string.IsNullOrWhiteSpace(quote.OfficeNote)) @if (!string.IsNullOrWhiteSpace(quote.OfficeNote))
{ {
<div class="col-sm-2"></div> <div class="col-sm-2 text-end">Note</div>
<div class="col-sm-10"> <div class="col-sm-10">
<i class="bi-pencil"></i> @quote.OfficeNote <i class="bi-pencil"></i> @quote.OfficeNote
</div> </div>
} }
@if (!string.IsNullOrWhiteSpace(quote.CrmNote))
{
<div class="col-sm-2 text-end">CRM note</div>
<div class="col-sm-10">
<i class="bi-pencil"></i> @quote.CrmNote
</div>
}
</div> </div>
</div> </div>
} }

View file

@ -70,9 +70,12 @@ public partial class WorkDateComponent : IDisposable
/// <param name="e"></param> /// <param name="e"></param>
private async Task OnDateChanged(ChangeEventArgs e) private async Task OnDateChanged(ChangeEventArgs e)
{ {
var val = DateTime.Parse(e.Value.ToString()); var x = DateTime.TryParse(e.Value.ToString(), out var val);
await Prefs.SetWorkDate(val); if (x)
await OnChangedCallback.InvokeAsync($"{val:yyyy-MM-dd}"); {
await Prefs.SetWorkDate(val);
await OnChangedCallback.InvokeAsync($"{val:yyyy-MM-dd}");
}
} }
/// <summary> /// <summary>

View file

@ -23,16 +23,16 @@ public partial class CrmQuotesListPage : IDisposable
private List<ReportItemView> Quotes { get; set; } = new(); private List<ReportItemView> Quotes { get; set; } = new();
private List<ReportItemView> _quotes { get; set; } = new(); private List<ReportItemView> _quotes { get; set; } = new();
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
private QStatus QFilter { get; set; } = QStatus.None; private QStatus QFilter { get; set; } = QStatus.All;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
Interceptor.RegisterEvent(); Interceptor.RegisterEvent();
Interceptor.RegisterBeforeSendEvent(); Interceptor.RegisterBeforeSendEvent();
Quotes = await ActivityRepo.GetQuotes(); Quotes = await ActivityRepo.GetQuotes();
await Storage.SetItemAsync("quotes", Quotes); await Storage.SetItemAsync("quotes", Quotes.OrderBy(x => x.Company.Name));
if (Quotes.Any()) if (Quotes.Any())
_quotes = Quotes.Where(x => x.QuoteStatusEnum is "Note" or "None").ToList(); await FilterQuotes(QFilter);
Working = false; Working = false;
} }
@ -43,7 +43,6 @@ public partial class CrmQuotesListPage : IDisposable
_quotes = QFilter switch _quotes = QFilter switch
{ {
QStatus.None => Quotes.Where(x => x.QuoteStatusEnum is "None").ToList(), QStatus.None => Quotes.Where(x => x.QuoteStatusEnum is "None").ToList(),
QStatus.Win => Quotes.Where(x => x.QuoteStatusEnum is "Win").ToList(),
QStatus.Lose => Quotes.Where(x => x.QuoteStatusEnum is "Lose").ToList(), QStatus.Lose => Quotes.Where(x => x.QuoteStatusEnum is "Lose").ToList(),
QStatus.Archive => Quotes.Where(x => x.QuoteStatusEnum is "Archive").ToList(), QStatus.Archive => Quotes.Where(x => x.QuoteStatusEnum is "Archive").ToList(),
QStatus.Note => Quotes.Where(x => x.QuoteStatusEnum is "Note").ToList(), QStatus.Note => Quotes.Where(x => x.QuoteStatusEnum is "Note").ToList(),
@ -66,7 +65,7 @@ public partial class CrmQuotesListPage : IDisposable
while (!Quotes.Any()) while (!Quotes.Any())
await Task.Delay(1000); await Task.Delay(1000);
await Storage.SetItemAsync("quotes", Quotes); await Storage.SetItemAsync("quotes", Quotes.OrderBy(x => x.Company.Name));
await FilterQuotes(QFilter); await FilterQuotes(QFilter);

View file

@ -97,7 +97,7 @@
</div> </div>
<div class="nav-item px-3"> <div class="nav-item px-3">
<NavLink class="nav-link ps-2" href="/open-quotes"> <NavLink class="nav-link ps-2" href="/open-quotes">
<i class="bi-calculator pe-2" style="font-size:1.3em;" aria-hidden="true"></i> Åbne Tilbud <i class="bi-calculator pe-2" style="font-size:1.3em;" aria-hidden="true"></i> Aftaler/Tilbud
</NavLink> </NavLink>
</div> </div>
<div class="nav-item px-3"> <div class="nav-item px-3">

View file

@ -11,10 +11,10 @@
<PackageReference Include="Blazored.LocalStorage" Version="4.3.0" /> <PackageReference Include="Blazored.LocalStorage" Version="4.3.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.11" /> <PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.12" />
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="6.0.11" /> <PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="6.0.12" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.11" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="6.0.12" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.11" PrivateAssets="all" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="6.0.12" 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" />

View file

@ -1,12 +1,12 @@
{ {
"appInfo": { "appInfo": {
"name": "Wonky Client", "name": "Wonky Client",
"version": "0.85.7",
"rc": true, "rc": true,
"sandBox": false, "sandBox": false,
"image": "grumpy-coder.png" "image": "grumpy-coder.png"
}, },
"apiConfig": { "apiConfig": {
"baseUrl": "https://dev.innotec.dk",
"catalog": "api/v2/catalog", "catalog": "api/v2/catalog",
"crmCustomers": "api/v2/crm/companies", "crmCustomers": "api/v2/crm/companies",
"crmInventoryExt": "history/inventory", "crmInventoryExt": "history/inventory",