improve product display colli - history discontinued products
This commit is contained in:
parent
b4fa8475d1
commit
d9ca65b96b
9 changed files with 100 additions and 64 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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>
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
<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)
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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; }
|
||||
|
|
|
@ -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();
|
||||
}
|
Loading…
Reference in a new issue