WIP: office create order

This commit is contained in:
Frede Hundewadt 2023-02-21 13:29:10 +01:00
parent 3f0e293b41
commit 0b55511b7e
2 changed files with 56 additions and 20 deletions

View file

@ -108,7 +108,7 @@
</div> </div>
</div> </div>
<div id="this-draft" style="@(Activity.ActivityStatusEnum is "order" or "quote" ? "display: block" : "display:none")"> <div id="this-draft" >
@* Order lines -----------------------------------------------------*@ @* Order lines -----------------------------------------------------*@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
@ -190,9 +190,11 @@
<td class="align-middle"> <td class="align-middle">
<div class="input-group"> <div class="input-group">
<input type="number" class="form-control" @bind-value="@Price"/> <input type="number" class="form-control" @bind-value="@Price"/>
@*
<button class="btn btn-warning" type="button" @onclick="CallPriceHistoryModal"> <button class="btn btn-warning" type="button" @onclick="CallPriceHistoryModal">
<i class="bi-list-ul"></i> <i class="bi-list-ul"></i>
</button> </button>
*@
</div> </div>
</td> </td>
<td class="align-middle"> <td class="align-middle">
@ -200,7 +202,8 @@
</td> </td>
<td class="align-middle">@SelectedItem.Sku</td> <td class="align-middle">@SelectedItem.Sku</td>
<td class="align-middle"> <td class="align-middle">
<button type="button" class="btn btn-primary text-nowrap d-block" @onclick="@(() => AddItem(SelectedItem))">BESTIL @SelectedItem.Name</button> <button type="button" class="btn btn-primary d-block text-sm-center" @onclick="@(() => AddItem(SelectedItem))">@Quantity stk. @SelectedItem.Name</button>
@* <button type="button" class="btn btn-primary text-nowrap d-block" @onclick="@(() => AddItem(SelectedItem))">BESTIL @SelectedItem.Name</button> *@
</td> </td>
</tr> </tr>
</tbody> </tbody>

View file

@ -14,6 +14,7 @@
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
// //
using System.Globalization;
using System.Text.Json; using System.Text.Json;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms; using Microsoft.AspNetCore.Components.Forms;
@ -31,6 +32,8 @@ namespace Wonky.Client.Pages;
public partial class OfficeOrderCreatePage : IDisposable public partial class OfficeOrderCreatePage : IDisposable
{ {
// --------------------------------------------------------------------
// injected services
[Inject] public ILogger<OfficeOrderCreatePage> Logger { get; set; } [Inject] public ILogger<OfficeOrderCreatePage> Logger { get; set; }
[Inject] public HttpInterceptorService Interceptor { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; }
[Inject] public ICountryCustomerRepository CustomerRepo { get; set; } [Inject] public ICountryCustomerRepository CustomerRepo { get; set; }
@ -38,11 +41,14 @@ public partial class OfficeOrderCreatePage : IDisposable
[Inject] public ICountryReportRepository ReportRepo { get; set; } [Inject] public ICountryReportRepository ReportRepo { get; set; }
[Inject] public ISystemUserRepository UserRepo { get; set; } [Inject] public ISystemUserRepository UserRepo { get; set; }
[Inject] public ICountryCatalogRepository Catalog { get; set; } [Inject] public ICountryCatalogRepository Catalog { get; set; }
// --------------------------------------------------------------------
// parameters // parameters
[Parameter] public string CompanyId { get; set; } = ""; [Parameter] public string CompanyId { get; set; } = "";
[Parameter] public string CountryCode { get; set; } = ""; [Parameter] public string CountryCode { get; set; } = "";
[CascadingParameter] public DraftStateProvider DraftProvider { get; set; } [CascadingParameter] public DraftStateProvider DraftProvider { get; set; }
// --------------------------------------------------------------------
// private variables // private variables
private readonly JsonSerializerOptions _options = new() {PropertyNameCaseInsensitive = true}; private readonly JsonSerializerOptions _options = new() {PropertyNameCaseInsensitive = true};
// class objects // class objects
@ -62,6 +68,9 @@ public partial class OfficeOrderCreatePage : IDisposable
private bool ReportClosed { get; set; } private bool ReportClosed { get; set; }
private bool PoFormInvalid { get; set; } = true; private bool PoFormInvalid { get; set; } = true;
private bool Working { get; set; } = true; private bool Working { get; set; } = true;
// --------------------------------------------------------------------
// overlays
private PriceCatalogOverlay CatalogOverlay { get; set; } = new(); private PriceCatalogOverlay CatalogOverlay { get; set; } = new();
private ProductHistoryOverlay ProductOverlay { get; set; } = new(); private ProductHistoryOverlay ProductOverlay { get; set; } = new();
private ProductPriceHistoryOverlay PriceOverlay { get; set; } = new(); private ProductPriceHistoryOverlay PriceOverlay { get; set; } = new();
@ -70,10 +79,12 @@ public partial class OfficeOrderCreatePage : IDisposable
private CustomerInvoiceListOverlay InvoiceListOverlay { get; set; } = new(); private CustomerInvoiceListOverlay InvoiceListOverlay { get; set; } = new();
private CustomerInventoryListOverlay InventoryListOverlay { get; set; } = new(); private CustomerInventoryListOverlay InventoryListOverlay { get; set; } = new();
private CustomerActivityListOverlay ActivityListOverlay { get; set; } = new(); private CustomerActivityListOverlay ActivityListOverlay { get; set; } = new();
// --------------------------------------------------------------------
// lists
private List<ProductInventoryView> Inventory { get; set; } = new(); private List<ProductInventoryView> Inventory { get; set; } = new();
private List<ProductInventoryView> CheckList { get; set; } = new(); private List<ProductInventoryView> CheckList { get; set; } = new();
private InvoiceListView CompanyInvoices { get; set; } = new(); private InvoiceListView CompanyInvoices { get; set; } = new();
private List<ReportItemView> Activities { get; set; } = new(); private List<ReportItemView> Activities { get; set; } = new();
@ -142,9 +153,40 @@ public partial class OfficeOrderCreatePage : IDisposable
Working = false; Working = false;
} }
private void CallPriceListModal() private async Task DeleteDraft()
{ {
CatalogOverlay.Show(); await DraftProvider.DeleteDraftAsync();
}
private async Task RemoveItem(DraftItem item)
{
// remove item
DraftProvider.Draft.Items.Remove(item);
// save the remaining draft
await DraftProvider.SaveChangesAsync();
}
private async Task AddItem(SalesItemView salesItem)
{
ShowItem = false;
// create a new cart item
var item = new DraftItem
{
Item = salesItem,
Quantity = Convert.ToInt32(Quantity),
Price = Convert.ToDecimal(Price, CultureInfo.InvariantCulture),
Discount = Convert.ToDecimal(Discount, CultureInfo.InvariantCulture),
};
// reset internals to initial state
Quantity = "1";
Price = "0";
Discount = "0";
// add it to the cart
DraftProvider.Draft.Items.Add(item);
if(Activity.ActivityStatusEnum != "quote")
Activity.ActivityStatusEnum = "order";
// save the item using the CartStateProvider's save method
await DraftProvider.SaveChangesAsync();
} }
private async Task PriceListCallback(SelectedSku sku) private async Task PriceListCallback(SelectedSku sku)
@ -159,6 +201,11 @@ public partial class OfficeOrderCreatePage : IDisposable
StateHasChanged(); StateHasChanged();
} }
private void CallPriceListModal()
{
CatalogOverlay.Show();
}
private void ShowInvoiceOverlay() private void ShowInvoiceOverlay()
{ {
@ -177,20 +224,6 @@ public partial class OfficeOrderCreatePage : IDisposable
} }
private void DeleteDraft()
{
}
private void AddItem(SalesItemView item)
{
}
private void RemoveItem(DraftItem item)
{
}
private void CreateActivity() private void CreateActivity()
{ {