improve product display colli - history discontinued products

This commit is contained in:
Frede Hundewadt 2022-12-30 13:20:31 +01:00
parent b4fa8475d1
commit d9ca65b96b
9 changed files with 100 additions and 64 deletions

View file

@ -23,6 +23,7 @@
<th scope="col">Navn</th>
<th scope="col">Fork</th>
<th scope="col" class="text-nowrap">Varenr</th>
<th scope="col">Colli</th>
<th scope="col">Stk / Pris</th>
</tr>
</thead>
@ -37,6 +38,9 @@
<td class="align-middle">
@salesItem.Sku
</td>
<td class="align-middle">
@salesItem.BoxSize
</td>
<td class="align-middle">
<ul class="list-group">
@foreach (var rate in salesItem.Rates)

View file

@ -36,7 +36,7 @@
<div class="list-group-item">
<div class="row align-items-center">
<div class="col-sm-4">
@product.Description
@product.Description <span class="fw-bold">@(product.Discontinued ? "(UDGÅET)" : "")</span>
</div>
<div class="col-sm-3">
@product.Sku

View file

@ -36,6 +36,7 @@ public partial class CustomerProductListCrmPage : IDisposable
[Inject] public IToastService Toaster { get; set; }
[Inject] public ILogger<CustomerProductListCrmPage> Logger { get; set; }
[Inject] public ILocalStorageService Storage { get; set; }
private JsonSerializerOptions _options = new JsonSerializerOptions(JsonSerializerDefaults.Web);
private CompanyDto Company { get; set; } = new();
private List<ProductInventoryView> Inventory { get; set; } = new();
private bool Working { get; set; } = true;
@ -64,6 +65,7 @@ public partial class CustomerProductListCrmPage : IDisposable
}
// fetch product inventory
Inventory = await FetchProductInventory();
Logger.LogDebug("CustomerProductListCrmPage => Inventory <= {}", JsonSerializer.Serialize(Inventory, _options));
Working = false;
}

View file

@ -20,63 +20,70 @@
<div class="modal-dialog modal-dialog-scrollable modal-lg modal-xl">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">@SalesItem.Name @SalesItem.Sku</h4>
<h4 class="modal-title">@SalesItem.Name @SalesItem.Sku (@SalesItem.BoxSize stk/colli)</h4>
<button type="button" class="btn-close" @onclick="Hide" data-bs-dismiss="modal" aria-label="Luk"></button>
</div>
<div class="modal-body">
@if (SalesItem.Discontinued)
{
<h3>Udgået produkt</h3>
}
else
{
@* draft line ----------------------------------------------------- *@
<div class="row">
<div class="col">
<table id="draft-line" class="table table-bordered">
<thead>
<tr class="bg-dark text-white">
<th scope="col" colspan="6">BESTILLING</th>
</tr>
<tr>
<th scope="col">Antal</th>
<th scope="col">Pris</th>
<th scope="col">Rabat</th>
<th class="align-content-center justify-content-center" scope="col">SAS</th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
<tr>
<td class="align-middle">
<input type="number" class="form-control" @bind-value="@SelectedItem.Quantity"/>
</td>
<td class="align-middle">
<div class="input-group">
<input type="number" class="form-control" @bind-value="@SelectedItem.Price"/>
</div>
</td>
<td class="align-middle">
<input type="number" class="form-control" @bind-value="@SelectedItem.Discount"/>
</td>
<td class="align-middle align-content-center justify-content-center">
<input type="checkbox" class="form-check" @bind-value="@SelectedItem.Sas"/>
</td>
<td class="align-middle">
<button type="button" class="btn btn-warning text-nowrap d-block" @onclick="@(() => SendToOrder(SelectedItem))">BESTIL</button>
</td>
</tr>
</tbody>
</table>
<div class="row">
<div class="col">
<table id="draft-line" class="table table-bordered">
<thead>
<tr class="bg-dark text-white">
<th scope="col" colspan="6">BESTILLING</th>
</tr>
<tr>
<th scope="col">Antal</th>
<th scope="col">Pris</th>
<th scope="col">Rabat</th>
<th class="align-content-center justify-content-center" scope="col">SAS</th>
<th scope="col"></th>
</tr>
</thead>
<tbody>
<tr>
<td class="align-middle">
<input type="number" class="form-control" @bind-value="@SelectedItem.Quantity"/>
</td>
<td class="align-middle">
<div class="input-group">
<input type="number" class="form-control" @bind-value="@SelectedItem.Price"/>
</div>
</td>
<td class="align-middle">
<input type="number" class="form-control" @bind-value="@SelectedItem.Discount"/>
</td>
<td class="align-middle align-content-center justify-content-center">
<input type="checkbox" class="form-check" @bind-value="@SelectedItem.Sas"/>
</td>
<td class="align-middle">
<button type="button" class="btn btn-warning text-nowrap d-block" @onclick="@(() => SendToOrder(SelectedItem))">BESTIL</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
@* end draft line ------------------------------------------------- *@
@* price list item ------------------------------------------------ *@
<div class="row align-middle">
@foreach (var rate in SalesItem.Rates)
{
<div class="col">
<a type="button" class="btn btn-primary btn-sm" data-bs-dismiss="modal" @onclick="@(() => SelectPrice(rate.Quantity, rate.Rate))">
@rate.Quantity <i class="bi-at"></i> @rate.Rate/stk
</a>
</div>
}
</div>
<div class="row align-middle">
@foreach (var rate in SalesItem.Rates)
{
<div class="col">
<a type="button" class="btn btn-primary btn-sm" data-bs-dismiss="modal" @onclick="@(() => SelectPrice(rate.Quantity, rate.Rate))">
@rate.Quantity <i class="bi-at"></i> @rate.Rate/stk
</a>
</div>
}
</div>
@* end price list item -------------------------------------------- *@
}
@* product history ------------------------------------------------ *@
<table class="table table-striped">
@ -98,7 +105,10 @@
<td class="align-middle">@entry.Discount</td>
<td class="align-middle">@entry.Price</td>
<td class="align-middle">
<button type="button" class="btn btn-primary btn-sm" data-bs-dismiss="modal" @onclick="() => SelectHistory(entry)"><i class="bi-plus"></i> VÆLG</button>
@if (!SalesItem.Discontinued)
{
<button type="button" class="btn btn-primary btn-sm" data-bs-dismiss="modal" @onclick="() => SelectHistory(entry)"><i class="bi-plus"></i> VÆLG</button>
}
</td>
</tr>
}

View file

@ -44,10 +44,13 @@ public partial class InventoryReorderModal
return;
History = await CrmHistoryRepo.FetchHistory(CompanyId, SalesItem.Sku);
if (!History.Any())
await Task.Delay(1000);
SelectedItem.Item = SalesItem;
SelectedItem.Discount = 0;
SelectedItem.Quantity = 1;
SelectedItem.Price = decimal.Parse(SalesItem.Rates[0].Rate, CultureInfo.InvariantCulture);
if(SalesItem.Rates.Any())
SelectedItem.Price = decimal.Parse(SalesItem.Rates[0].Rate, CultureInfo.InvariantCulture);
}
private async Task SendToOrder(DraftItem item)

View file

@ -25,35 +25,42 @@
</div>
<div class="modal-body">
<div class="sticky-top bg-dark rounded-2 p-3">
<div class="row">
<div class="col">
<div class="row mb-2">
<div class="col-sm-2">
<CatalogSearchComponent OnChanged="SetSearchCol"/>
</div>
<div class="col">
<div class="col-sm-6">
<CatalogSearchPhraseComponent OnChanged="SetSearchPhrase"/>
</div>
<div class="col">
<div class="col-sm-2">
<CatalogSortComponent OnChanged="SetSortCol"/>
</div>
<div class="col">
<div class="col-sm-2">
<PageSizeComponent OnChanged="SetPageSize"/>
</div>
</div>
<div class="row mb-3">
<div class="col-md-12">
<div class="row mb-2">
<div class="col-sm-12">
<PaginationComponent MetaData="_metaData" Spread="2" SelectedPage="SelectedPage" />
</div>
</div>
<div class="row text-white">
<div class="col-sm-3 fw-bold">Vare</div>
<div class="col-sm-2 fw-bold">Varenr</div>
<div class="col-sm-2 fw-bold">Fork</div>
<div class="col-sm-1 text-center fw-bold">Colli</div>
<div class="col-sm-4 text-center fw-bold">Stk / Pris</div>
</div>
</div>
@if (_items.Any())
{
<ul class="list-group">
<ul class="list-group list-group-flush">
@foreach (var item in _items)
{
<li class="list-group-item">
<div class="row align-middle">
<div class="col-sm-4 text-sm-start">
<div class="col-sm-3 text-sm-start">
@item.Name
</div>
<div class="col-sm-2 text-sm-start">
@ -62,6 +69,9 @@
<div class="col-sm-2 text-sm-start">
@item.ShortName
</div>
<div class="col-sm-1 text-center">
@item.BoxSize
</div>
<div class="col-sm-4">
<ul class="list-group">
@foreach (var rate in item.Rates)

View file

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

View file

@ -30,6 +30,10 @@ public class ProductInventoryView
/// </summary>
public int Quantity { get; set; }
/// <summary>
/// Product has been discontinued
/// </summary>
public bool Discontinued { get; set; }
/// <summary>
/// Virtual checkmark
/// </summary>
public virtual bool Check { get; set; }

View file

@ -13,6 +13,8 @@
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
//
using System.ComponentModel;
namespace Wonky.Entity.Views;
public class SalesItemView
@ -26,5 +28,6 @@ public class SalesItemView
public string PictureLink { get; set; } = "";
public string Location { get; set; } = "";
public bool Discontinued { get; set; }
public int BoxSize { get; set; }
public List<SalesRateView> Rates { get; set; } = new();
}