WIP: office create order
This commit is contained in:
parent
0b55511b7e
commit
b4819ce547
25 changed files with 722 additions and 252 deletions
|
@ -32,6 +32,11 @@ public partial class CustomerInventoryListComponent
|
||||||
// private variables
|
// private variables
|
||||||
private bool Descending { get; set; }
|
private bool Descending { get; set; }
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
if(Inventory.Any())
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
|
}
|
||||||
private void SortProducts(PSort column)
|
private void SortProducts(PSort column)
|
||||||
{
|
{
|
||||||
Descending = !Descending;
|
Descending = !Descending;
|
||||||
|
@ -62,11 +67,12 @@ public partial class CustomerInventoryListComponent
|
||||||
Inventory = Inventory.OrderBy(x => x.Quantity).ToList();
|
Inventory = Inventory.OrderBy(x => x.Quantity).ToList();
|
||||||
break;
|
break;
|
||||||
case PSort.None:
|
case PSort.None:
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
break;
|
break;
|
||||||
case PSort.Abbr:
|
case PSort.Abbr:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
@using System.ComponentModel.Design
|
@using System.ComponentModel.Design
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
|
||||||
@if (ProductList.Any())
|
@if (Inventory.Any())
|
||||||
{
|
{
|
||||||
<div class="list-group mt-2">
|
<div class="list-group mt-2">
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
|
@ -31,7 +31,7 @@
|
||||||
<div class="col-sm-1"></div>
|
<div class="col-sm-1"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@foreach (var product in ProductList)
|
@foreach (var product in Inventory)
|
||||||
{
|
{
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
|
|
|
@ -22,12 +22,18 @@ using Wonky.Entity.Views;
|
||||||
namespace Wonky.Client.Components;
|
namespace Wonky.Client.Components;
|
||||||
public partial class CustomerProductCheckListComponent
|
public partial class CustomerProductCheckListComponent
|
||||||
{
|
{
|
||||||
[Parameter] public List<ProductInventoryView> ProductList { get; set; } = new();
|
[Parameter] public List<ProductInventoryView> Inventory { get; set; } = new();
|
||||||
[Parameter] public string CompanyId { get; set; } = "";
|
[Parameter] public string CompanyId { get; set; } = "";
|
||||||
[Inject] public ILocalStorageService Storage { get; set; }
|
[Inject] public ILocalStorageService Storage { get; set; }
|
||||||
// private variables
|
// private variables
|
||||||
private bool Descending { get; set; }
|
private bool Descending { get; set; }
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
if(Inventory.Any())
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
private void SortProducts(PSort column)
|
private void SortProducts(PSort column)
|
||||||
{
|
{
|
||||||
Descending = !Descending;
|
Descending = !Descending;
|
||||||
|
@ -36,41 +42,41 @@ public partial class CustomerProductCheckListComponent
|
||||||
case PSort.Desc:
|
case PSort.Desc:
|
||||||
if (Descending)
|
if (Descending)
|
||||||
{
|
{
|
||||||
ProductList = ProductList.OrderByDescending(x => x.Description).ToList();
|
Inventory = Inventory.OrderByDescending(x => x.Description).ToList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ProductList = ProductList.OrderBy(x => x.Description).ToList();
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
break;
|
break;
|
||||||
case PSort.Sku:
|
case PSort.Sku:
|
||||||
if (Descending)
|
if (Descending)
|
||||||
{
|
{
|
||||||
ProductList = ProductList.OrderByDescending(x => x.Sku).ToList();
|
Inventory = Inventory.OrderByDescending(x => x.Sku).ToList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ProductList = ProductList.OrderBy(x => x.Sku).ToList();
|
Inventory = Inventory.OrderBy(x => x.Sku).ToList();
|
||||||
break;
|
break;
|
||||||
case PSort.Qty:
|
case PSort.Qty:
|
||||||
if (Descending)
|
if (Descending)
|
||||||
{
|
{
|
||||||
ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList();
|
Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ProductList = ProductList.OrderBy(x => x.Quantity).ToList();
|
Inventory = Inventory.OrderBy(x => x.Quantity).ToList();
|
||||||
break;
|
break;
|
||||||
case PSort.None:
|
case PSort.None:
|
||||||
break;
|
break;
|
||||||
case PSort.Abbr:
|
case PSort.Abbr:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList();
|
Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ProductCheck(string sku)
|
private async Task ProductCheck(string sku)
|
||||||
{
|
{
|
||||||
var x = ProductList.First(x => x.Sku == sku);
|
var x = Inventory.First(x => x.Sku == sku);
|
||||||
x.Check = !x.Check;
|
x.Check = !x.Check;
|
||||||
await Storage.SetItemAsync($"{CompanyId}-products", ProductList);
|
await Storage.SetItemAsync($"{CompanyId}-products", Inventory);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -15,7 +15,7 @@
|
||||||
//
|
//
|
||||||
*@
|
*@
|
||||||
|
|
||||||
@if (ProductHistory.Any())
|
@if (Inventory.Any())
|
||||||
{
|
{
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach (var line in ProductHistory)
|
@foreach (var line in Inventory)
|
||||||
{
|
{
|
||||||
<tr class="align-content-center">
|
<tr class="align-content-center">
|
||||||
<td>
|
<td>
|
||||||
|
|
|
@ -20,6 +20,11 @@ namespace Wonky.Client.Components;
|
||||||
|
|
||||||
public partial class CustomerProductLineListComponent
|
public partial class CustomerProductLineListComponent
|
||||||
{
|
{
|
||||||
[Parameter] public List<ProductHistoryView> ProductHistory { get; set; } = new();
|
[Parameter] public List<ProductHistoryView> Inventory { get; set; } = new();
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
if(Inventory.Any())
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -71,7 +71,7 @@
|
||||||
</div>
|
</div>
|
||||||
<OfficeCustomerInvoiceListOverlay Company="@SelectedCompany" InvoiceList="@InvoiceList" @ref="InvoiceListOverlay" />
|
<OfficeCustomerInvoiceListOverlay Company="@SelectedCompany" InvoiceList="@InvoiceList" @ref="InvoiceListOverlay" />
|
||||||
<OfficeCustomerActivityListOverlay Company="SelectedCompany" ActivityList="ActivityList" @ref="ActivityListOverlay" />
|
<OfficeCustomerActivityListOverlay Company="SelectedCompany" ActivityList="ActivityList" @ref="ActivityListOverlay" />
|
||||||
<OfficeCustomerProductListOverlay Company="SelectedCompany" ProductList="ProductList" @ref="ProductListOverlay" />
|
<OfficeCustomerProductListOverlay Company="SelectedCompany" Inventory="ProductList" @ref="ProductListOverlay" />
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
67
Wonky.Client/Components/OfficeInventoryListComponent.razor
Normal file
67
Wonky.Client/Components/OfficeInventoryListComponent.razor
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
|
||||||
|
@*
|
||||||
|
// 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 GNU Affero 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
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||||
|
//
|
||||||
|
*@
|
||||||
|
|
||||||
|
@using Wonky.Client.Models
|
||||||
|
@using System.ComponentModel.Design
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
@if (Inventory.Any())
|
||||||
|
{
|
||||||
|
<div class="list-group mt-2">
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-4" style="cursor: pointer;" @onclick="() => SortProducts(PSort.Desc)"><i class="bi-sort-alpha-down"></i> Navn <i class="bi-sort-alpha-up-alt"></i></div>
|
||||||
|
<div class="col-sm-3" style="cursor: pointer;" @onclick="() => SortProducts(PSort.Sku)"><i class="bi-sort-alpha-down"></i> Varenr <i class="bi-sort-alpha-up-alt"></i></div>
|
||||||
|
<div class="col-sm-2 text-center" style="cursor: pointer;" @onclick="() => SortProducts(PSort.Qty)"><i class="bi-sort-numeric-down"></i> Antal <i class="bi-sort-numeric-up-alt"></i></div>
|
||||||
|
<div class="col-sm-2"></div>
|
||||||
|
<div class="col-sm-1"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@foreach (var product in Inventory)
|
||||||
|
{
|
||||||
|
<div class="list-group-item">
|
||||||
|
<div class="row align-items-center">
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<div class="position-relative">
|
||||||
|
@product.Description
|
||||||
|
@if (product.Discontinued)
|
||||||
|
{
|
||||||
|
<span class="position-absolute top-0 start-100 translate-middle badge rounded-pill bg-danger">Udgået</span>
|
||||||
|
<span class="visually-hidden">Produktet er udgået</span>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
@product.Sku
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-2 text-center">
|
||||||
|
@product.Quantity
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-3">
|
||||||
|
<a class="btn btn-info d-block" type="button" @onclick="() => CallShowReorderModal(product.Sku)"><i class="bi-cart"></i> Genbestil</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<div>Ingen data</div>
|
||||||
|
}
|
||||||
|
</div>
|
|
@ -0,0 +1,88 @@
|
||||||
|
// 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 GNU Affero 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
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||||
|
//
|
||||||
|
|
||||||
|
using Blazored.LocalStorage;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Wonky.Client.Models;
|
||||||
|
using Wonky.Entity.Views;
|
||||||
|
|
||||||
|
namespace Wonky.Client.Components;
|
||||||
|
#pragma warning disable CS8618
|
||||||
|
|
||||||
|
public partial class OfficeInventoryListComponent
|
||||||
|
{
|
||||||
|
// *************************************************************
|
||||||
|
// Injections
|
||||||
|
[Inject] public ILocalStorageService Storage { get; set; }
|
||||||
|
// *************************************************************
|
||||||
|
// Parameters
|
||||||
|
[Parameter] public List<ProductInventoryView> Inventory { get; set; } = new();
|
||||||
|
[Parameter] public string CompanyId { get; set; } = "";
|
||||||
|
[Parameter] public EventCallback<string> OnReorderSelected { get; set; }
|
||||||
|
// *************************************************************
|
||||||
|
// private variables
|
||||||
|
private bool Descending { get; set; }
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
if(Inventory.Any())
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SortProducts(PSort column)
|
||||||
|
{
|
||||||
|
Descending = !Descending;
|
||||||
|
switch (column)
|
||||||
|
{
|
||||||
|
case PSort.Desc:
|
||||||
|
if (Descending)
|
||||||
|
{
|
||||||
|
Inventory = Inventory.OrderByDescending(x => x.Description).ToList();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
|
break;
|
||||||
|
case PSort.Sku:
|
||||||
|
if (Descending)
|
||||||
|
{
|
||||||
|
Inventory = Inventory.OrderByDescending(x => x.Sku).ToList();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Sku).ToList();
|
||||||
|
break;
|
||||||
|
case PSort.Qty:
|
||||||
|
if (Descending)
|
||||||
|
{
|
||||||
|
Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Quantity).ToList();
|
||||||
|
break;
|
||||||
|
case PSort.None:
|
||||||
|
break;
|
||||||
|
case PSort.Abbr:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task CallShowReorderModal(string sku)
|
||||||
|
{
|
||||||
|
// await ProductCheck(sku);
|
||||||
|
await OnReorderSelected.InvokeAsync(sku);
|
||||||
|
}
|
||||||
|
}
|
|
@ -40,11 +40,17 @@ public partial class CustomerInventoryListOverlay : IDisposable
|
||||||
private string _modalDisplay = "";
|
private string _modalDisplay = "";
|
||||||
private bool _showBackdrop;
|
private bool _showBackdrop;
|
||||||
private CompanyDto Company { get; set; } = new();
|
private CompanyDto Company { get; set; } = new();
|
||||||
private List<ProductInventoryView> ProductList { get; set; } = new();
|
// private List<ProductInventoryView> ProductList { get; set; } = new();
|
||||||
private DraftItem DraftItem { get; set; } = new();
|
private DraftItem DraftItem { get; set; } = new();
|
||||||
private SalesItemView SalesItem { get; set; } = new();
|
private SalesItemView SalesItem { get; set; } = new();
|
||||||
private CustomerInventoryReorderOverlay ReorderOverlay { get; set; } = new();
|
private CustomerInventoryReorderOverlay ReorderOverlay { get; set; } = new();
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
if(Inventory.Any())
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
Interceptor.RegisterEvent();
|
Interceptor.RegisterEvent();
|
||||||
|
|
|
@ -21,16 +21,13 @@
|
||||||
|
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Faktura</h5>
|
@if (!string.IsNullOrWhiteSpace(Company.Name))
|
||||||
|
{
|
||||||
|
<h3 class="modal-title">@Company.Name - Faktura Oversigt</h3>
|
||||||
|
}
|
||||||
<button type="button" class="btn-close" @onclick="Hide" data-bs-dismiss="modal" aria-label="Luk"></button>
|
<button type="button" class="btn-close" @onclick="Hide" data-bs-dismiss="modal" aria-label="Luk"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
|
||||||
<div class="row pt-2 pb-1 rounded-2 bg-dark text-white">
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<h4 class="pt-1">@Company.Name</h4>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<CustomerInvoiceListComponent OnShowInvoice="@CallInvoiceModal" CompanyId="@Company.CompanyId" InvoiceList="@Invoices"/>
|
<CustomerInvoiceListComponent OnShowInvoice="@CallInvoiceModal" CompanyId="@Company.CompanyId" InvoiceList="@Invoices"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -20,7 +20,10 @@
|
||||||
<div class="modal-dialog modal-dialog-scrollable modal-fullscreen">
|
<div class="modal-dialog modal-dialog-scrollable modal-fullscreen">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title">Faktura</h5>
|
@if (!string.IsNullOrWhiteSpace(Invoice.Company.Name))
|
||||||
|
{
|
||||||
|
<h3 class="modal-title">Faktura @Invoice.DocumentNumber</h3>
|
||||||
|
}
|
||||||
<button type="button" class="btn-close" @onclick="Hide" data-bs-dismiss="modal" aria-label="Luk"></button>
|
<button type="button" class="btn-close" @onclick="Hide" data-bs-dismiss="modal" aria-label="Luk"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@if (ProductList.Any())
|
@if (Inventory.Any())
|
||||||
{
|
{
|
||||||
<div class="list-group mt-2">
|
<div class="list-group mt-2">
|
||||||
<div class="list-group-item bg-dark text-white">
|
<div class="list-group-item bg-dark text-white">
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
<div class="col-sm-1"></div>
|
<div class="col-sm-1"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@foreach (var product in ProductList)
|
@foreach (var product in Inventory)
|
||||||
{
|
{
|
||||||
<div class="list-group-item">
|
<div class="list-group-item">
|
||||||
<div class="row align-items-center">
|
<div class="row align-items-center">
|
||||||
|
|
|
@ -38,8 +38,13 @@ public partial class OfficeCustomerProductListOverlay : IDisposable
|
||||||
private bool Descending { get; set; }
|
private bool Descending { get; set; }
|
||||||
|
|
||||||
[Parameter] public CompanyDto Company { get; set; } = new();
|
[Parameter] public CompanyDto Company { get; set; } = new();
|
||||||
[Parameter] public List<ProductInventoryView> ProductList { get; set; } = new();
|
[Parameter] public List<ProductInventoryView> Inventory { get; set; } = new();
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
if(Inventory.Any())
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
|
}
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
Interceptor.RegisterEvent();
|
Interceptor.RegisterEvent();
|
||||||
|
@ -61,36 +66,36 @@ public partial class OfficeCustomerProductListOverlay : IDisposable
|
||||||
case PSort.Desc:
|
case PSort.Desc:
|
||||||
if (Descending)
|
if (Descending)
|
||||||
{
|
{
|
||||||
ProductList = ProductList.OrderByDescending(x => x.Description).ToList();
|
Inventory = Inventory.OrderByDescending(x => x.Description).ToList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProductList = ProductList.OrderBy(x => x.Description).ToList();
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
break;
|
break;
|
||||||
case PSort.Sku:
|
case PSort.Sku:
|
||||||
if (Descending)
|
if (Descending)
|
||||||
{
|
{
|
||||||
ProductList = ProductList.OrderByDescending(x => x.Sku).ToList();
|
Inventory = Inventory.OrderByDescending(x => x.Sku).ToList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProductList = ProductList.OrderBy(x => x.Sku).ToList();
|
Inventory = Inventory.OrderBy(x => x.Sku).ToList();
|
||||||
break;
|
break;
|
||||||
case PSort.Qty:
|
case PSort.Qty:
|
||||||
if (Descending)
|
if (Descending)
|
||||||
{
|
{
|
||||||
ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList();
|
Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProductList = ProductList.OrderBy(x => x.Quantity).ToList();
|
Inventory = Inventory.OrderBy(x => x.Quantity).ToList();
|
||||||
break;
|
break;
|
||||||
case PSort.None:
|
case PSort.None:
|
||||||
break;
|
break;
|
||||||
case PSort.Abbr:
|
case PSort.Abbr:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList();
|
Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
@*
|
||||||
|
// 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 GNU Affero 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
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||||
|
//
|
||||||
|
*@
|
||||||
|
@using Wonky.Client.Components
|
||||||
|
|
||||||
|
<div class="modal" tabindex="-1" role="dialog" style="display:@_modalDisplay">
|
||||||
|
<div class="modal-dialog modal-dialog-scrollable modal-fullscreen">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h3 class="modal-title">@Company.Name - Produktoversigt</h3>
|
||||||
|
<button type="button" class="btn-close" @onclick="Hide" data-bs-dismiss="modal" aria-label="Luk"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<OfficeInventoryListComponent OnReorderSelected="OnReorderCallback" CompanyId="@Company.CompanyId" Inventory="@Inventory"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@if (_showBackdrop)
|
||||||
|
{
|
||||||
|
<div class="modal-backdrop fade show"></div>
|
||||||
|
}
|
||||||
|
|
||||||
|
<OfficeOrderInventoryReorderOverlay Company="@Company" SalesItem="SalesItem" OnSelected="OnSelected" @ref="ReorderOverlay" />
|
|
@ -0,0 +1,88 @@
|
||||||
|
|
||||||
|
// 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 GNU Affero 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
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero 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.HttpInterceptors;
|
||||||
|
using Wonky.Client.HttpRepository;
|
||||||
|
using Wonky.Client.Models;
|
||||||
|
using Wonky.Entity.DTO;
|
||||||
|
using Wonky.Entity.Views;
|
||||||
|
#pragma warning disable CS8618
|
||||||
|
|
||||||
|
namespace Wonky.Client.OverlayOffice;
|
||||||
|
|
||||||
|
public partial class OfficeOrderInventoryListOverlay : IDisposable
|
||||||
|
{
|
||||||
|
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||||
|
[Inject] public ICountryCatalogRepository CatalogRepo { get; set; }
|
||||||
|
[Inject] public ILogger<OfficeOrderInventoryListOverlay> Logger { get; set; }
|
||||||
|
|
||||||
|
[Parameter] public CompanyDto Company { get; set; } = new();
|
||||||
|
[Parameter] public List<ProductInventoryView> Inventory { get; set; } = new();
|
||||||
|
[Parameter] public EventCallback<DraftItem> OnSelected { get; set; }
|
||||||
|
|
||||||
|
private string _modalDisplay = "";
|
||||||
|
private bool _showBackdrop;
|
||||||
|
// private List<ProductInventoryView> ProductList { get; set; } = new();
|
||||||
|
private DraftItem DraftItem { get; set; } = new();
|
||||||
|
private SalesItemView SalesItem { get; set; } = new();
|
||||||
|
|
||||||
|
private OfficeOrderInventoryReorderOverlay ReorderOverlay { get; set; } = new();
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
if(Inventory.Any())
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
|
}
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
Interceptor.RegisterEvent();
|
||||||
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task OnReorderCallback(string sku)
|
||||||
|
{
|
||||||
|
SalesItem = await CatalogRepo.GetSalesItemSku(Company.CountryCode.ToLower(), sku);
|
||||||
|
ReorderOverlay.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task OnSelectedItem(DraftItem draftItem)
|
||||||
|
{
|
||||||
|
await OnSelected.InvokeAsync(draftItem);
|
||||||
|
Hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Show()
|
||||||
|
{
|
||||||
|
_modalDisplay = "block;";
|
||||||
|
_showBackdrop = true;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Hide()
|
||||||
|
{
|
||||||
|
_modalDisplay = "none;";
|
||||||
|
_showBackdrop = false;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
Interceptor.DisposeEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,126 @@
|
||||||
|
@*
|
||||||
|
// 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 GNU Affero 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
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||||
|
//
|
||||||
|
*@
|
||||||
|
@using Wonky.Client.Components
|
||||||
|
@using Wonky.Client.Helpers
|
||||||
|
<div class="modal" tabindex="-1" role="dialog" style="display:@_modalDisplay">
|
||||||
|
@* <div class="modal-dialog modal-dialog-scrollable modal-fullscreen-lg-down modal-xl modal-lg"> *@
|
||||||
|
<div class="modal-dialog modal-dialog-scrollable modal-fullscreen">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<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>
|
||||||
|
</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>
|
||||||
|
@* end price list item -------------------------------------------- *@
|
||||||
|
}
|
||||||
|
|
||||||
|
@* product history ------------------------------------------------ *@
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Dato</th>
|
||||||
|
<th scope="col">Antal</th>
|
||||||
|
<th scope="col">Rabat</th>
|
||||||
|
<th scope="col">Pris</th>
|
||||||
|
<th scope="col"></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach (var entry in ProductHistory)
|
||||||
|
{
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">@entry.DeliveryDate</td>
|
||||||
|
<td class="align-middle">@entry.Quantity</td>
|
||||||
|
<td class="align-middle">@entry.Discount</td>
|
||||||
|
<td class="align-middle">@entry.Price</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
@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>
|
||||||
|
}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
@* end product history -------------------------------------------- *@
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@if (_showBackdrop)
|
||||||
|
{
|
||||||
|
<div class="modal-backdrop fade show"></div>
|
||||||
|
}
|
|
@ -0,0 +1,92 @@
|
||||||
|
|
||||||
|
// 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 GNU Affero 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
|
||||||
|
// GNU Affero General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
|
// along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html]
|
||||||
|
//
|
||||||
|
|
||||||
|
using System.Globalization;
|
||||||
|
using Microsoft.AspNetCore.Components;
|
||||||
|
using Wonky.Client.HttpRepository;
|
||||||
|
using Wonky.Client.Models;
|
||||||
|
using Wonky.Entity.DTO;
|
||||||
|
using Wonky.Entity.Views;
|
||||||
|
#pragma warning disable CS8618
|
||||||
|
|
||||||
|
namespace Wonky.Client.OverlayOffice;
|
||||||
|
|
||||||
|
public partial class OfficeOrderInventoryReorderOverlay
|
||||||
|
{
|
||||||
|
[Inject] public ICountryCustomerHistoryRepository HistoryRepo { get; set; }
|
||||||
|
[Parameter] public CompanyDto Company { get; set; } = new();
|
||||||
|
[Parameter] public SalesItemView SalesItem { get; set; } = new();
|
||||||
|
[Parameter] public EventCallback<DraftItem> OnSelected { get; set; }
|
||||||
|
private List<ProductHistoryView>? ProductHistory { get; set; } = new();
|
||||||
|
private DraftItem SelectedItem { get; set; } = new();
|
||||||
|
private string ProductName { get; set; } = "";
|
||||||
|
private string _modalDisplay = "";
|
||||||
|
private bool _showBackdrop;
|
||||||
|
private bool ShowDraft { get; set; }
|
||||||
|
|
||||||
|
protected override async Task OnParametersSetAsync()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(SalesItem.Sku))
|
||||||
|
return;
|
||||||
|
|
||||||
|
ProductHistory = await HistoryRepo.FetchHistorySku(Company.CountryCode, Company.CompanyId, SalesItem.Sku);
|
||||||
|
if (!ProductHistory.Any())
|
||||||
|
await Task.Delay(250);
|
||||||
|
SelectedItem.Item = SalesItem;
|
||||||
|
SelectedItem.Discount = 0;
|
||||||
|
SelectedItem.Quantity = 1;
|
||||||
|
if(SalesItem.Rates.Any())
|
||||||
|
SelectedItem.Price = decimal.Parse(SalesItem.Rates[0].Rate, CultureInfo.InvariantCulture);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task SendToOrder(DraftItem item)
|
||||||
|
{
|
||||||
|
SelectedItem = new DraftItem();
|
||||||
|
await OnSelected.InvokeAsync(item);
|
||||||
|
Hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SelectPrice(string quantity, string rate)
|
||||||
|
{
|
||||||
|
SelectedItem.Discount = 0;
|
||||||
|
SelectedItem.Price = decimal.Parse(rate, CultureInfo.InvariantCulture);
|
||||||
|
SelectedItem.Quantity = int.Parse(quantity);
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SelectHistory(ProductHistoryView item)
|
||||||
|
{
|
||||||
|
SelectedItem.Discount = item.Discount;
|
||||||
|
SelectedItem.Price = item.Price;
|
||||||
|
SelectedItem.Quantity = item.Quantity;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Show()
|
||||||
|
{
|
||||||
|
_modalDisplay = "block;";
|
||||||
|
_showBackdrop = true;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Hide()
|
||||||
|
{
|
||||||
|
SelectedItem = new DraftItem();
|
||||||
|
_modalDisplay = "none;";
|
||||||
|
_showBackdrop = false;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,7 +24,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
@((MarkupString) BodyMessage)
|
@((MarkupString) BodyMessage)
|
||||||
<CustomerProductCheckListComponent CompanyId="@CompanyId" ProductList="@Products" />
|
<CustomerProductCheckListComponent CompanyId="@CompanyId" Inventory="@Products" />
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" @onclick="Hide">Afbryd</button>
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal" @onclick="Hide">Afbryd</button>
|
||||||
|
|
|
@ -35,9 +35,9 @@
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@if (History.Any())
|
@if (ProductHistory.Any())
|
||||||
{
|
{
|
||||||
@foreach (var entry in History)
|
@foreach (var entry in ProductHistory)
|
||||||
{
|
{
|
||||||
<tr>
|
<tr>
|
||||||
<td>@entry.DeliveryDate</td>
|
<td>@entry.DeliveryDate</td>
|
||||||
|
|
|
@ -28,7 +28,7 @@ public partial class ProductPriceHistoryOverlay
|
||||||
[Parameter] public string CompanyId { get; set; } = "";
|
[Parameter] public string CompanyId { get; set; } = "";
|
||||||
[Parameter] public string Sku { get; set; } = "";
|
[Parameter] public string Sku { get; set; } = "";
|
||||||
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
|
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
|
||||||
private List<ProductHistoryView>? History { get; set; }
|
private List<ProductHistoryView>? ProductHistory { get; set; }
|
||||||
private string ProductName { get; set; } = "";
|
private string ProductName { get; set; } = "";
|
||||||
private string _modalDisplay = "";
|
private string _modalDisplay = "";
|
||||||
private bool _showBackdrop;
|
private bool _showBackdrop;
|
||||||
|
@ -38,10 +38,10 @@ public partial class ProductPriceHistoryOverlay
|
||||||
if (string.IsNullOrWhiteSpace(Sku))
|
if (string.IsNullOrWhiteSpace(Sku))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
History = await HistoryRepo.FetchHistory(CompanyId, Sku);
|
ProductHistory = await HistoryRepo.FetchHistory(CompanyId, Sku);
|
||||||
if (History.Any())
|
if (ProductHistory.Any())
|
||||||
{
|
{
|
||||||
ProductName = History[0].Description;
|
ProductName = ProductHistory[0].Description;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -160,13 +160,21 @@ else
|
||||||
|
|
||||||
<div class="row g-2 mb-3">
|
<div class="row g-2 mb-3">
|
||||||
<div class="col-sm-3 d-grid mx-auto">
|
<div class="col-sm-3 d-grid mx-auto">
|
||||||
|
@*
|
||||||
|
***************** Invoice history overlay *****************************
|
||||||
|
*@
|
||||||
<button class="btn btn-danger" disabled="@string.IsNullOrWhiteSpace(Activity.ActivityTypeEnum)" @onclick="ShowInvoiceOverlay">Faktura</button>
|
<button class="btn btn-danger" disabled="@string.IsNullOrWhiteSpace(Activity.ActivityTypeEnum)" @onclick="ShowInvoiceOverlay">Faktura</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3 d-grid mx-auto">
|
<div class="col-sm-3 d-grid mx-auto">
|
||||||
|
@*
|
||||||
|
***************** Visit hisotry overlay *****************************
|
||||||
|
*@
|
||||||
<button class="btn btn-warning" disabled="@string.IsNullOrWhiteSpace(Activity.ActivityTypeEnum)" @onclick="ShowVisitOverlay">Tidl. besøg</button>
|
<button class="btn btn-warning" disabled="@string.IsNullOrWhiteSpace(Activity.ActivityTypeEnum)" @onclick="ShowVisitOverlay">Tidl. besøg</button>
|
||||||
@* <button class="btn btn-warning" disabled @onclick="ShowVisitOverlay">Tidl. besøg</button> *@
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3 d-grid mx-auto">
|
<div class="col-sm-3 d-grid mx-auto">
|
||||||
|
@*
|
||||||
|
***************** Product Inventory overlay *****************************
|
||||||
|
*@
|
||||||
<button class="btn btn-success" disabled="@string.IsNullOrWhiteSpace(Activity.ActivityTypeEnum)" @onclick="ShowInventoryOverlay">Produkter</button>
|
<button class="btn btn-success" disabled="@string.IsNullOrWhiteSpace(Activity.ActivityTypeEnum)" @onclick="ShowInventoryOverlay">Produkter</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -182,6 +190,9 @@ else
|
||||||
Ordrekladde <span class="mx-2 draft-expires-msg">Global kladde (udløber efter @(DraftProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)</span>
|
Ordrekladde <span class="mx-2 draft-expires-msg">Global kladde (udløber efter @(DraftProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)</span>
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="text-end">
|
<th scope="col" class="text-end">
|
||||||
|
@*
|
||||||
|
***************** Reset draft *****************************
|
||||||
|
*@
|
||||||
<button type="button" class="btn btn-danger btn-sm" @onclick="@DeleteDraft" disabled="@(DraftProvider.Draft.Items.Count == 0)"><i class="bi-trash"></i> Slet kladde</button>
|
<button type="button" class="btn btn-danger btn-sm" @onclick="@DeleteDraft" disabled="@(DraftProvider.Draft.Items.Count == 0)"><i class="bi-trash"></i> Slet kladde</button>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -212,6 +223,9 @@ else
|
||||||
<input type="checkbox" checked="@cartItem.Sas" disabled/>
|
<input type="checkbox" checked="@cartItem.Sas" disabled/>
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle text-end">
|
<td class="align-middle text-end">
|
||||||
|
@*
|
||||||
|
***************** Remove item *****************************
|
||||||
|
*@
|
||||||
<button type="button" class="btn btn-danger" @onclick="@(() => RemoveItem(cartItem))"><i class="bi-trash2"></i> Slet Linje</button>
|
<button type="button" class="btn btn-danger" @onclick="@(() => RemoveItem(cartItem))"><i class="bi-trash2"></i> Slet Linje</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -223,6 +237,9 @@ else
|
||||||
<td class="align-middle text-black text-end fw-bold">@($"{DraftProvider.Draft.Total:N2}")</td>
|
<td class="align-middle text-black text-end fw-bold">@($"{DraftProvider.Draft.Total:N2}")</td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td class="align-middle text-end">
|
<td class="align-middle text-end">
|
||||||
|
@*
|
||||||
|
***************** Price catalot overlay button *****************************
|
||||||
|
*@
|
||||||
<button class="btn btn-primary" type="button" @onclick="ShowPriceListOverlay">
|
<button class="btn btn-primary" type="button" @onclick="ShowPriceListOverlay">
|
||||||
<i class="bi-plus"></i> Ny linje
|
<i class="bi-plus"></i> Ny linje
|
||||||
</button>
|
</button>
|
||||||
|
@ -259,6 +276,9 @@ else
|
||||||
<td class="align-middle" style="min-width:200px;">
|
<td class="align-middle" style="min-width:200px;">
|
||||||
<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"/>
|
||||||
|
@*
|
||||||
|
***************** Price history overlay button *****************************
|
||||||
|
*@
|
||||||
<button class="btn btn-warning" type="button" @onclick="ShowPriceHistoryOverlay">
|
<button class="btn btn-warning" type="button" @onclick="ShowPriceHistoryOverlay">
|
||||||
<i class="bi-list-ul"></i>
|
<i class="bi-list-ul"></i>
|
||||||
</button>
|
</button>
|
||||||
|
@ -272,6 +292,9 @@ else
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">@SelectedItem.Sku</td>
|
<td class="align-middle">@SelectedItem.Sku</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
|
@*
|
||||||
|
***************** Add item 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 d-block text-sm-center" @onclick="@(() => AddItem(SelectedItem))">@Quantity stk. @SelectedItem.Name</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -333,28 +356,30 @@ else
|
||||||
<a class="btn btn-warning" href="/advisor/customers/@Company.CompanyId">Kundekort <i class="bi-arrow-left"></i></a>
|
<a class="btn btn-warning" href="/advisor/customers/@Company.CompanyId">Kundekort <i class="bi-arrow-left"></i></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4 text-end">
|
<div class="col-sm-4 text-end">
|
||||||
|
@*
|
||||||
|
***************** Confirm product check overlay button *****************************
|
||||||
|
***************** Continue by submitton order to erp *****************************
|
||||||
|
*@
|
||||||
<button type="button" class="btn btn-warning" @onclick="CallConfirmCheckOverlay" disabled="@(PoFormInvalid || Working)"><i class="bi-cloud-arrow-up"></i> @ButtonText</button>
|
<button type="button" class="btn btn-warning" @onclick="CallConfirmCheckOverlay" disabled="@(PoFormInvalid || Working)"><i class="bi-cloud-arrow-up"></i> @ButtonText</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<ProductCheckConfirmationOverlay BodyMessage="" CompanyId="@CompanyId" Products="CheckList"
|
||||||
|
OnOkClicked="ConfirmProductCheckCallback" @ref="ConfirmationCheckOverlay" />
|
||||||
<ConfirmWorkDateModal BodyMessage="@PromptDateConfirm"
|
<ConfirmWorkDateModal BodyMessage="@PromptDateConfirm"
|
||||||
OnOkClicked="WorkDateConfirmCallback" @ref="ConfirmWorkDate"/>
|
OnOkClicked="WorkDateConfirmCallback" @ref="ConfirmWorkDate"/>
|
||||||
|
|
||||||
<PriceCatalogOverlay CountryCode="@Company.CountryCode.ToLower()"
|
|
||||||
OnSelected="PriceListCallback" @ref="CatalogOverlay"/>
|
|
||||||
|
|
||||||
<ProductHistoryOverlay CompanyId="@CompanyId" ItemSku="@SelectedItem.Sku" @ref="ProductOverlay"/>
|
<ProductHistoryOverlay CompanyId="@CompanyId" ItemSku="@SelectedItem.Sku" @ref="ProductOverlay"/>
|
||||||
|
|
||||||
<ProductPriceHistoryOverlay CompanyId="@CompanyId" Sku="@SelectedItem.Sku"
|
<PriceCatalogOverlay CountryCode="@Company.CountryCode.ToLower()" OnSelected="PriceListCallback" @ref="CatalogOverlay"/>
|
||||||
OnSelected="PriceHistoryCallback" @ref="PriceOverlay"/>
|
|
||||||
|
|
||||||
<ProductCheckConfirmationOverlay BodyMessage="" CompanyId="@CompanyId" Products="CheckList"
|
<ProductPriceHistoryOverlay CompanyId="@CompanyId" Sku="@SelectedItem.Sku" OnSelected="PriceHistoryCallback" @ref="PriceOverlay"/>
|
||||||
OnOkClicked="ConfirmProductCheckCallback" @ref="ConfirmationCheckOverlay" />
|
|
||||||
|
|
||||||
<CustomerInvoiceListOverlay CustomerInvoices="CompanyInvoices" @ref="InvoiceListOverlay" />
|
<CustomerInvoiceListOverlay CustomerInvoices="CompanyInvoices" @ref="InvoiceListOverlay" />
|
||||||
|
|
||||||
|
<CustomerActivityListOverlay Activities="Activities" CompanyName="@Company.Name" @ref="ActivityListOverlay" />
|
||||||
|
|
||||||
<CustomerInventoryListOverlay CompanyName="@Company.Name" CompanyId="@CompanyId" CountryCode="@Company.CountryCode"
|
<CustomerInventoryListOverlay CompanyName="@Company.Name" CompanyId="@CompanyId" CountryCode="@Company.CountryCode"
|
||||||
OnSelected="OnInventoryCallback" Inventory="Inventory" @ref="InventoryListOverlay" />
|
OnSelected="OnInventoryCallback" Inventory="Inventory" @ref="InventoryListOverlay" />
|
||||||
|
|
||||||
<CustomerActivityListOverlay Activities="Activities" CompanyName="@Company.Name" @ref="ActivityListOverlay" />
|
|
|
@ -36,7 +36,8 @@ namespace Wonky.Client.Pages;
|
||||||
|
|
||||||
public partial class AdvisorActivityCreatePage : IDisposable
|
public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
{
|
{
|
||||||
// Services
|
// *************************************************************
|
||||||
|
// Injected services
|
||||||
[Inject] public ILogger<AdvisorActivityCreatePage> Logger { get; set; }
|
[Inject] public ILogger<AdvisorActivityCreatePage> Logger { get; set; }
|
||||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||||
[Inject] public UserProfileService ProfileService { get; set; }
|
[Inject] public UserProfileService ProfileService { get; set; }
|
||||||
|
@ -49,11 +50,12 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
[Inject] public IAdvisorReportRepository ReportRepo { get; set; }
|
[Inject] public IAdvisorReportRepository ReportRepo { get; set; }
|
||||||
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
|
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
|
||||||
[Inject] public IUserInfoService UserInfoService { get; set; }
|
[Inject] public IUserInfoService UserInfoService { get; set; }
|
||||||
|
// *************************************************************
|
||||||
|
// Parameters
|
||||||
[CascadingParameter] private DraftStateProvider DraftProvider { get; set; } = new();
|
[CascadingParameter] private DraftStateProvider DraftProvider { get; set; } = new();
|
||||||
[Parameter] public string CompanyId { get; set; } = "";
|
[Parameter] public string CompanyId { get; set; } = "";
|
||||||
|
// *************************************************************
|
||||||
// variables
|
// Variables
|
||||||
private readonly JsonSerializerOptions _options = new() {PropertyNameCaseInsensitive = true};
|
private readonly JsonSerializerOptions _options = new() {PropertyNameCaseInsensitive = true};
|
||||||
private SalesItemView SelectedItem { get; set; } = new();
|
private SalesItemView SelectedItem { get; set; } = new();
|
||||||
private UserProfile UserProfile { get; set; } = new();
|
private UserProfile UserProfile { get; set; } = new();
|
||||||
|
@ -74,8 +76,11 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
private DateTime SelectedDate { get; set; }
|
private DateTime SelectedDate { get; set; }
|
||||||
private string OldPhone { get; set; } = "";
|
private string OldPhone { get; set; } = "";
|
||||||
private string PromptDateConfirm { get; set; } = "";
|
private string PromptDateConfirm { get; set; } = "";
|
||||||
|
private string ButtonText { get; set; } = "Gem besøg";
|
||||||
// OVERLAY PAGES
|
private bool OrgWarning { get; set; }
|
||||||
|
private const string PromptDemoForgotten = "Har du glemt demo?";
|
||||||
|
// *************************************************************
|
||||||
|
// 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();
|
||||||
|
@ -84,16 +89,13 @@ public partial class AdvisorActivityCreatePage : 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();
|
||||||
|
|
||||||
|
|
||||||
private string ButtonText { get; set; } = "Gem besøg";
|
|
||||||
private bool OrgWarning { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Page initialization
|
/// Page initialization
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -187,7 +189,7 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
InventoryListOverlay.Show();
|
InventoryListOverlay.Show();
|
||||||
|
|
||||||
Inventory = await HistoryRepo.FetchInventory(CompanyId);
|
Inventory = await HistoryRepo.FetchInventory(CompanyId);
|
||||||
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
await Task.Delay(500);
|
await Task.Delay(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,9 +318,6 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Work Date confirm callback
|
|
||||||
/// </summary>
|
|
||||||
private async Task WorkDateConfirmCallback()
|
private async Task WorkDateConfirmCallback()
|
||||||
{
|
{
|
||||||
await ProfileService.SetDateConfirmed(true);
|
await ProfileService.SetDateConfirmed(true);
|
||||||
|
@ -327,10 +326,6 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Work Date component callback
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="workDate"></param>
|
|
||||||
private async Task WorkDateComponentCallback(string workDate)
|
private async Task WorkDateComponentCallback(string workDate)
|
||||||
{
|
{
|
||||||
ReportClosed = await ReportRepo.ReportExist(workDate);
|
ReportClosed = await ReportRepo.ReportExist(workDate);
|
||||||
|
@ -338,18 +333,11 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
Activity.ActivityDate = workDate;
|
Activity.ActivityDate = workDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Show Price list modal
|
|
||||||
/// </summary>
|
|
||||||
private void ShowPriceListOverlay()
|
private void ShowPriceListOverlay()
|
||||||
{
|
{
|
||||||
CatalogOverlay.Show();
|
CatalogOverlay.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Price List modal callback
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sku"></param>
|
|
||||||
private async Task PriceListCallback(SelectedSku sku)
|
private async Task PriceListCallback(SelectedSku sku)
|
||||||
{
|
{
|
||||||
// get selected item
|
// get selected item
|
||||||
|
@ -362,19 +350,12 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Show Price History modal
|
|
||||||
/// </summary>
|
|
||||||
private void ShowPriceHistoryOverlay()
|
private void ShowPriceHistoryOverlay()
|
||||||
{
|
{
|
||||||
if(ShowItem)
|
if(ShowItem)
|
||||||
PriceOverlay.Show();
|
PriceOverlay.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Price History modal callback
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="price"></param>
|
|
||||||
private void PriceHistoryCallback(decimal price)
|
private void PriceHistoryCallback(decimal price)
|
||||||
{
|
{
|
||||||
if (price == 0)
|
if (price == 0)
|
||||||
|
@ -383,9 +364,6 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Validate and Create Activity
|
|
||||||
/// </summary>
|
|
||||||
private async Task CreateActivity()
|
private async Task CreateActivity()
|
||||||
{
|
{
|
||||||
// avoid duplication
|
// avoid duplication
|
||||||
|
@ -486,19 +464,12 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
Toaster.ShowError(result.Message, "ORDRE FEJL");
|
Toaster.ShowError(result.Message, "ORDRE FEJL");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Delete current draft
|
|
||||||
/// </summary>
|
|
||||||
private async Task DeleteDraft()
|
private async Task DeleteDraft()
|
||||||
{
|
{
|
||||||
await DraftProvider.DeleteDraftAsync();
|
await DraftProvider.DeleteDraftAsync();
|
||||||
Activity.ActivityStatusEnum = "noSale";
|
Activity.ActivityStatusEnum = "noSale";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Add item to draft
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="salesItem"></param>
|
|
||||||
private async Task AddItem(SalesItemView salesItem)
|
private async Task AddItem(SalesItemView salesItem)
|
||||||
{
|
{
|
||||||
ShowItem = false;
|
ShowItem = false;
|
||||||
|
@ -524,10 +495,6 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
await DraftProvider.SaveChangesAsync();
|
await DraftProvider.SaveChangesAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Remove item from draft
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="item"></param>
|
|
||||||
private async Task RemoveItem(DraftItem item)
|
private async Task RemoveItem(DraftItem item)
|
||||||
{
|
{
|
||||||
// remove item
|
// remove item
|
||||||
|
@ -538,11 +505,6 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
Activity.ActivityStatusEnum = "noSale";
|
Activity.ActivityStatusEnum = "noSale";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Edit Context handle field change
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
private void HandleFieldChanged(object sender, FieldChangedEventArgs e)
|
||||||
{
|
{
|
||||||
Logger.LogDebug("ActivityNewPage => HandleFieldChanged => ActivityStatusEnum <= '{}'", Activity.ActivityStatusEnum);
|
Logger.LogDebug("ActivityNewPage => HandleFieldChanged => ActivityStatusEnum <= '{}'", Activity.ActivityStatusEnum);
|
||||||
|
@ -574,11 +536,6 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Edit Context handle validation change
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
private void ValidationChanged(object sender, ValidationStateChangedEventArgs e)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(Activity.ActivityTypeEnum) && !ReportClosed)
|
if (string.IsNullOrEmpty(Activity.ActivityTypeEnum) && !ReportClosed)
|
||||||
|
@ -605,9 +562,6 @@ public partial class AdvisorActivityCreatePage : IDisposable
|
||||||
ActivityContext.OnValidationStateChanged += ValidationChanged;
|
ActivityContext.OnValidationStateChanged += ValidationChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Implement Dispose from IDisposable
|
|
||||||
/// </summary>
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
Interceptor.DisposeEvent();
|
Interceptor.DisposeEvent();
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace Wonky.Client.Pages;
|
||||||
public partial class AdvisorCustomerInventoryListPage : IDisposable
|
public partial class AdvisorCustomerInventoryListPage : IDisposable
|
||||||
{
|
{
|
||||||
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
|
[Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; }
|
||||||
[Inject] public IAdvisorCustomerRepository CustomerREpo { get; set; }
|
[Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; }
|
||||||
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
[Inject] public HttpInterceptorService Interceptor { get; set; }
|
||||||
[Inject] public IToastService Toaster { get; set; }
|
[Inject] public IToastService Toaster { get; set; }
|
||||||
[Inject] public ILogger<AdvisorCustomerInventoryListPage> Logger { get; set; }
|
[Inject] public ILogger<AdvisorCustomerInventoryListPage> Logger { get; set; }
|
||||||
|
@ -56,7 +56,7 @@ public partial class AdvisorCustomerInventoryListPage : IDisposable
|
||||||
Interceptor.RegisterEvent();
|
Interceptor.RegisterEvent();
|
||||||
Interceptor.RegisterBeforeSendEvent();
|
Interceptor.RegisterBeforeSendEvent();
|
||||||
|
|
||||||
Company = await CustomerREpo.GetCompanyById(CompanyId);
|
Company = await CustomerRepo.GetCompanyById(CompanyId);
|
||||||
|
|
||||||
// fetch product inventory
|
// fetch product inventory
|
||||||
await FetchProductInventory();
|
await FetchProductInventory();
|
||||||
|
@ -96,9 +96,11 @@ public partial class AdvisorCustomerInventoryListPage : IDisposable
|
||||||
Logger.LogDebug("pulling products from backend");
|
Logger.LogDebug("pulling products from backend");
|
||||||
// fetch product history
|
// fetch product history
|
||||||
Inventory = await HistoryRepo.FetchInventory(CompanyId);
|
Inventory = await HistoryRepo.FetchInventory(CompanyId);
|
||||||
|
|
||||||
// default sort order by description
|
// default sort order by description
|
||||||
if (Inventory.Any())
|
if (Inventory.Any())
|
||||||
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
Inventory = Inventory.OrderBy(x => x.Description).ToList();
|
||||||
|
|
||||||
// send products to storage
|
// send products to storage
|
||||||
await Storage.SetItemAsync($"{Company.CompanyId}-products", Inventory);
|
await Storage.SetItemAsync($"{Company.CompanyId}-products", Inventory);
|
||||||
await Storage.SetItemAsync($"{Company.CompanyId}-pDate", $"{DateTime.Now:yyyy-MM-dd}");
|
await Storage.SetItemAsync($"{Company.CompanyId}-pDate", $"{DateTime.Now:yyyy-MM-dd}");
|
||||||
|
|
|
@ -15,17 +15,17 @@
|
||||||
//
|
//
|
||||||
*@
|
*@
|
||||||
|
|
||||||
@using Wonky.Client.OverlayCustomer
|
@using Wonky.Client.OverlayOffice
|
||||||
@using Wonky.Client.OverlayOrderCreate
|
@using Wonky.Client.OverlayOrderCreate
|
||||||
@using Microsoft.AspNetCore.Authorization
|
@using Microsoft.AspNetCore.Authorization
|
||||||
@attribute [Authorize(Roles = "Admin,Office,Supervisor,Warehouse")]
|
@attribute [Authorize(Roles = "Admin,Office,Supervisor,Warehouse")]
|
||||||
@page "/office/customers/{CountryCode}/{CompanyId}/order"
|
@page "/office/customers/{CountryCode}/{CompanyId}/order"
|
||||||
|
|
||||||
<PageTitle>Telefon Ordre - @Customer.Name - @Customer.Account</PageTitle>
|
<PageTitle>Telefon Ordre - @Company.Name - @Company.Account</PageTitle>
|
||||||
|
|
||||||
<div class="row bg-light border-2 border-dark rounded-3 p-3">
|
<div class="row bg-light border-2 border-dark rounded-3 p-3">
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<h3>@Customer.Name - @Customer.Account</h3>
|
<h3>@Company.Name - @Company.Account</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<h3>@DateTime.Now.ToShortDateString()</h3>
|
<h3>@DateTime.Now.ToShortDateString()</h3>
|
||||||
|
@ -96,19 +96,28 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-4 d-grid mx-auto">
|
<div class="col-sm-4 d-grid mx-auto">
|
||||||
|
@*
|
||||||
|
***************** Invoice history overlay *****************************
|
||||||
|
*@
|
||||||
<button class="btn btn-danger" @onclick="ShowInvoiceOverlay">Faktura</button>
|
<button class="btn btn-danger" @onclick="ShowInvoiceOverlay">Faktura</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-4 d-grid mx-auto">
|
<div class="col-sm-4 d-grid mx-auto">
|
||||||
|
@*
|
||||||
|
***************** Visit history overlay *****************************
|
||||||
|
*@
|
||||||
<button class="btn btn-warning" @onclick="ShowVisitOverlay">Tidl. besøg</button>
|
<button class="btn btn-warning" @onclick="ShowVisitOverlay">Tidl. besøg</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-sm-4 d-grid mx-auto">
|
<div class="col-sm-4 d-grid mx-auto">
|
||||||
|
@*
|
||||||
|
***************** Product Inventory overlay *****************************
|
||||||
|
*@
|
||||||
<button class="btn btn-success" @onclick="ShowInventoryOverlay">Produkter</button>
|
<button class="btn btn-success" @onclick="ShowInventoryOverlay">Produkter</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="this-draft" >
|
<div id="this-draft">
|
||||||
@* Order lines -----------------------------------------------------*@
|
@* Order lines -----------------------------------------------------*@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
|
@ -119,6 +128,9 @@
|
||||||
Ordrekladde <span class="mx-2 draft-expires-msg">Global kladde (udløber efter @(DraftProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)</span>
|
Ordrekladde <span class="mx-2 draft-expires-msg">Global kladde (udløber efter @(DraftProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)</span>
|
||||||
</th>
|
</th>
|
||||||
<th scope="col" class="text-end">
|
<th scope="col" class="text-end">
|
||||||
|
@*
|
||||||
|
***************** Reset draft *****************************
|
||||||
|
*@
|
||||||
<button type="button" class="btn btn-danger btn-sm" @onclick="@DeleteDraft" disabled="@(DraftProvider.Draft.Items.Count == 0)"><i class="bi-trash"></i> Slet kladde</button>
|
<button type="button" class="btn btn-danger btn-sm" @onclick="@DeleteDraft" disabled="@(DraftProvider.Draft.Items.Count == 0)"><i class="bi-trash"></i> Slet kladde</button>
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -145,6 +157,9 @@
|
||||||
<td class="align-middle text-end">@($"{cartItem.Discount:N2}")</td>
|
<td class="align-middle text-end">@($"{cartItem.Discount:N2}")</td>
|
||||||
<td class="align-middle text-end">@($"{cartItem.LineTotal:N2}")</td>
|
<td class="align-middle text-end">@($"{cartItem.LineTotal:N2}")</td>
|
||||||
<td class="align-middle text-end">
|
<td class="align-middle text-end">
|
||||||
|
@*
|
||||||
|
***************** Remove draft line *****************************
|
||||||
|
*@
|
||||||
<button type="button" class="btn btn-danger" @onclick="@(() => RemoveItem(cartItem))"><i class="bi-trash2"></i> Slet Linje</button>
|
<button type="button" class="btn btn-danger" @onclick="@(() => RemoveItem(cartItem))"><i class="bi-trash2"></i> Slet Linje</button>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -155,7 +170,10 @@
|
||||||
<td class="align-middle text-black text-end fw-bold">Total</td>
|
<td class="align-middle text-black text-end fw-bold">Total</td>
|
||||||
<td class="align-middle text-black text-end fw-bold">@($"{DraftProvider.Draft.Total:N2}")</td>
|
<td class="align-middle text-black text-end fw-bold">@($"{DraftProvider.Draft.Total:N2}")</td>
|
||||||
<td class="align-middle text-end">
|
<td class="align-middle text-end">
|
||||||
<button class="btn btn-primary" type="button" @onclick="CallPriceListModal">
|
@*
|
||||||
|
***************** Product Catalog overlay *****************************
|
||||||
|
*@
|
||||||
|
<button class="btn btn-primary" type="button" @onclick="ShowCatalogOverlay">
|
||||||
<i class="bi-plus"></i> Ny linje
|
<i class="bi-plus"></i> Ny linje
|
||||||
</button>
|
</button>
|
||||||
</td>
|
</td>
|
||||||
|
@ -202,8 +220,10 @@
|
||||||
</td>
|
</td>
|
||||||
<td class="align-middle">@SelectedItem.Sku</td>
|
<td class="align-middle">@SelectedItem.Sku</td>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
|
@*
|
||||||
|
***************** Add line to draft *****************************
|
||||||
|
*@
|
||||||
<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 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>
|
||||||
|
@ -213,66 +233,17 @@
|
||||||
</div>
|
</div>
|
||||||
@* end draft line ------------------------------------------------- *@
|
@* end draft line ------------------------------------------------- *@
|
||||||
</div>
|
</div>
|
||||||
@*
|
|
||||||
<div class="accordion" id="crmActivity">
|
|
||||||
$1$ Delivery address #1#
|
|
||||||
<div class="accordion-item" style="@(Activity.ActivityStatusEnum == "order" ? "display: block" : "display:none")">
|
|
||||||
<h2 class="accordion-header" id="deliveryHeader">
|
|
||||||
<button class="accordion-button collapsed bg-light" type="button" data-bs-toggle="collapse" data-bs-target="#deliveryBody" aria-expanded="false" aria-controls="deliveryBody">
|
|
||||||
Leveringsadresse
|
|
||||||
</button>
|
|
||||||
</h2>
|
|
||||||
<div id="deliveryBody" class="accordion-collapse collapse"
|
|
||||||
aria-labelledby="deliveryHeader" data-bs-parent="#crmActivity">
|
|
||||||
<div class="accordion-body">
|
|
||||||
<div class="row mb-1">
|
|
||||||
<label for="dlvName" class="col-md-2 col-form-label">Lev. Navn</label>
|
|
||||||
<div class="col-md-10">
|
|
||||||
<InputText id="dlvName" class="form-control" @bind-Value="Activity.DlvName"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mb-1">
|
|
||||||
<label for="dlvAddress1" class="col-md-2 col-form-label">Lev. Adresse</label>
|
|
||||||
<div class="col-md-10">
|
|
||||||
<InputText id="dlvAddress1" class="form-control" @bind-Value="Activity.DlvAddress1"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mb-1">
|
|
||||||
<label for="dlvAddress2" class="col-md-2 col-form-label">Lev. Adresse</label>
|
|
||||||
<div class="col-md-10">
|
|
||||||
<InputText id="dlvAddress2" class="form-control" @bind-Value="Activity.DlvAddress2"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mb-1">
|
|
||||||
<label for="dlvZipCode" class="col-md-2 col-form-label">Lev. Postnr</label>
|
|
||||||
<div class="col-md-10">
|
|
||||||
<InputText id="dlvZipCode" class="form-control" @bind-Value="Activity.DlvZipCode"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row mb-1">
|
|
||||||
<label for="dlvCity" class="col-md-2 col-form-label">Lev. Bynavn</label>
|
|
||||||
<div class="col-md-10">
|
|
||||||
<InputText id="dlvCity" class="form-control" @bind-Value="Activity.DlvCity"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
*@
|
|
||||||
</EditForm>
|
</EditForm>
|
||||||
<div class="row mt-5 mb-2">
|
<div class="row mt-5 mb-2">
|
||||||
<div class="col-sm-10 text-end">
|
<div class="col-sm-10 text-end">
|
||||||
|
@*
|
||||||
|
***************** Submit order to erp system *****************************
|
||||||
|
*@
|
||||||
<button type="button" class="btn btn-warning" @onclick="CreateActivity" disabled="@(PoFormInvalid || Working)"><i class="bi-plus"></i> Opret ordre</button>
|
<button type="button" class="btn btn-warning" @onclick="CreateActivity" disabled="@(PoFormInvalid || Working)"><i class="bi-plus"></i> Opret ordre</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<PriceCatalogOverlay @ref="CatalogOverlay" CountryCode="@CountryCode" OnSelected="PriceListCallback"/>
|
<PriceCatalogOverlay @ref="CatalogOverlay" CountryCode="@CountryCode" OnSelected="PriceListCallback"/>
|
||||||
@* <ProductHistoryOverlay @ref="ProductOverlay" CompanyId="@CompanyId" ItemSku="@SelectedItem.Sku"/> *@
|
<OfficeCustomerInvoiceListOverlay @ref="InvoiceListOverlay" Company="Company" InvoiceList="CompanyInvoices"/>
|
||||||
@* <ProductPriceHistoryOverlay @ref="PriceOverlay" CompanyId="@CompanyId" Sku="@SelectedItem.Sku" *@
|
<OfficeCustomerActivityListOverlay @ref="ActivityListOverlay" Company="Company" ActivityList="CompanyActivities"/>
|
||||||
@* OnSelected="PriceHistoryCallback"/> *@
|
<OfficeOrderInventoryListOverlay @ref="InventoryListOverlay" Company="Company" Inventory="CompanyInventory" OnSelected="InventoryCallback"/>
|
||||||
@* <CustomerInvoiceListOverlay @ref="InvoiceListOverlay" CustomerInvoices="CompanyInvoices"/> *@
|
|
||||||
@* <CustomerInventoryListOverlay @ref="InventoryListOverlay" CompanyName="@Customer.Name" CompanyId="@CompanyId" *@
|
|
||||||
@* CountryCode="@CountryCode" Inventory="Inventory" *@
|
|
||||||
@* OnSelected="InventoryCallback"/> *@
|
|
||||||
@* <CustomerActivityListOverlay @ref="ActivityListOverlay" Activities="Activities" CompanyName="@Customer.Name"/> *@
|
|
|
@ -21,7 +21,7 @@ using Microsoft.AspNetCore.Components.Forms;
|
||||||
using Wonky.Client.HttpInterceptors;
|
using Wonky.Client.HttpInterceptors;
|
||||||
using Wonky.Client.HttpRepository;
|
using Wonky.Client.HttpRepository;
|
||||||
using Wonky.Client.Models;
|
using Wonky.Client.Models;
|
||||||
using Wonky.Client.OverlayCustomer;
|
using Wonky.Client.OverlayOffice;
|
||||||
using Wonky.Client.OverlayOrderCreate;
|
using Wonky.Client.OverlayOrderCreate;
|
||||||
using Wonky.Client.Shared;
|
using Wonky.Client.Shared;
|
||||||
using Wonky.Entity.DTO;
|
using Wonky.Entity.DTO;
|
||||||
|
@ -36,11 +36,11 @@ public partial class OfficeOrderCreatePage : IDisposable
|
||||||
// injected services
|
// 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 ICountryCustomerHistoryRepository InventoryRepo { get; set; }
|
|
||||||
[Inject] public ICountryReportRepository ReportRepo { get; set; }
|
|
||||||
[Inject] public ISystemUserRepository UserRepo { get; set; }
|
|
||||||
[Inject] public ICountryCatalogRepository Catalog { get; set; }
|
[Inject] public ICountryCatalogRepository Catalog { get; set; }
|
||||||
|
[Inject] public ICountryCustomerRepository CustomerRepo { get; set; }
|
||||||
|
[Inject] public ICountryCustomerHistoryRepository HistoryRepo { get; set; }
|
||||||
|
[Inject] public ICountryActivityRepository ActivityRepo { get; set; }
|
||||||
|
[Inject] public ISystemUserRepository UserRepo { get; set; }
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
// parameters
|
// parameters
|
||||||
|
@ -52,8 +52,7 @@ public partial class OfficeOrderCreatePage : IDisposable
|
||||||
// private variables
|
// private variables
|
||||||
private readonly JsonSerializerOptions _options = new() {PropertyNameCaseInsensitive = true};
|
private readonly JsonSerializerOptions _options = new() {PropertyNameCaseInsensitive = true};
|
||||||
// class objects
|
// class objects
|
||||||
private CompanyDto Customer { get; set; } = new();
|
private CompanyDto Company { get; set; } = new();
|
||||||
private List<ProductInventoryView> CustomerInventory { get; set; } = new();
|
|
||||||
private SalesItemView SelectedItem { get; set; } = new();
|
private SalesItemView SelectedItem { get; set; } = new();
|
||||||
private ActivityDto Activity { get; set; } = new();
|
private ActivityDto Activity { get; set; } = new();
|
||||||
private UserManagerEditView SalesRep { get; set; } = new();
|
private UserManagerEditView SalesRep { get; set; } = new();
|
||||||
|
@ -72,20 +71,15 @@ public partial class OfficeOrderCreatePage : IDisposable
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
// overlays
|
// overlays
|
||||||
private PriceCatalogOverlay CatalogOverlay { get; set; } = new();
|
private PriceCatalogOverlay CatalogOverlay { get; set; } = new();
|
||||||
private ProductHistoryOverlay ProductOverlay { get; set; } = new();
|
private OfficeCustomerInvoiceListOverlay InvoiceListOverlay { get; set; } = new();
|
||||||
private ProductPriceHistoryOverlay PriceOverlay { get; set; } = new();
|
private OfficeCustomerActivityListOverlay ActivityListOverlay { get; set; } = new();
|
||||||
private ConfirmWorkDateModal ConfirmWorkDate { get; set; } = new();
|
private OfficeOrderInventoryListOverlay InventoryListOverlay { get; set; } = new();
|
||||||
private ProductCheckConfirmationOverlay ConfirmationCheckOverlay { get; set; } = new();
|
|
||||||
private CustomerInvoiceListOverlay InvoiceListOverlay { get; set; } = new();
|
|
||||||
private CustomerInventoryListOverlay InventoryListOverlay { get; set; } = new();
|
|
||||||
private CustomerActivityListOverlay ActivityListOverlay { get; set; } = new();
|
|
||||||
|
|
||||||
// --------------------------------------------------------------------
|
// --------------------------------------------------------------------
|
||||||
// lists
|
// lists
|
||||||
private List<ProductInventoryView> Inventory { get; set; } = new();
|
private List<ProductInventoryView> CompanyInventory { 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> CompanyActivities { get; set; } = new();
|
||||||
|
|
||||||
|
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
|
@ -99,23 +93,30 @@ public partial class OfficeOrderCreatePage : IDisposable
|
||||||
ActivityContext.OnValidationStateChanged += ValidationChanged;
|
ActivityContext.OnValidationStateChanged += ValidationChanged;
|
||||||
|
|
||||||
// fetch customer
|
// fetch customer
|
||||||
Customer = await CustomerRepo.GetByCustomerId(CountryCode, CompanyId);
|
Company = await CustomerRepo.GetByCustomerId(CountryCode, CompanyId);
|
||||||
Logger.LogDebug("OfficeOrderCreate => Customer => {}", JsonSerializer.Serialize(Customer));
|
Logger.LogDebug("OfficeOrderCreate => Customer => {}", JsonSerializer.Serialize(Company));
|
||||||
|
|
||||||
var today = $"{DateTime.Now:yyyy-MM-dd}";
|
var today = $"{DateTime.Now:yyyy-MM-dd}";
|
||||||
Activity.ActivityDate = today;
|
Activity.ActivityDate = today;
|
||||||
|
|
||||||
// initiate a sync to ensure up-to-date product history
|
// initiate a sync to ensure up-to-date product history
|
||||||
if (Customer.HistorySync != today)
|
if (Company.HistorySync != today)
|
||||||
Logger.LogDebug("OfficeOrderCreate => ");
|
{
|
||||||
Customer.HistorySync = await InventoryRepo.RequestErpToCrmSync(CountryCode, CompanyId, Customer.HistorySync);
|
Company.HistorySync = await HistoryRepo.RequestErpToCrmSync(CountryCode, CompanyId, Company.HistorySync);
|
||||||
|
Logger.LogDebug("OfficeOrderCreate => RequestErpToCrmSync <= {}", Company.HistorySync);
|
||||||
// fetch customer inventory
|
}
|
||||||
CustomerInventory = await InventoryRepo.RequestInventory(CountryCode, CompanyId);
|
// fetch invoices
|
||||||
Logger.LogDebug("OfficeOrderCreate => Inventory => {}", JsonSerializer.Serialize(CustomerInventory));
|
CompanyInvoices = await HistoryRepo.RequestInvoiceList(CountryCode, CompanyId);
|
||||||
|
Logger.LogDebug("OfficeOrderCreate => Invoices => {}", JsonSerializer.Serialize(CompanyInvoices));
|
||||||
|
// fetch activities
|
||||||
|
CompanyActivities = await ActivityRepo.RequestActivityList(CompanyId);
|
||||||
|
Logger.LogDebug("OfficeOrderCreate => Activities => {}", JsonSerializer.Serialize(CompanyActivities));
|
||||||
|
// fetch inventory
|
||||||
|
CompanyInventory = await HistoryRepo.RequestInventory(CountryCode, CompanyId);
|
||||||
|
CompanyInventory = CompanyInventory.OrderBy(x => x.Description).ToList();
|
||||||
|
Logger.LogDebug("OfficeOrderCreate => Inventory => {}", JsonSerializer.Serialize(CompanyInventory));
|
||||||
// get sales rep info
|
// get sales rep info
|
||||||
SalesRep = await UserRepo.GetUserInfo(Customer.SalesRepId);
|
SalesRep = await UserRepo.GetUserInfo(Company.SalesRepId);
|
||||||
Logger.LogDebug("OfficeOrderCreate => SalesRep => {}", JsonSerializer.Serialize(SalesRep));
|
Logger.LogDebug("OfficeOrderCreate => SalesRep => {}", JsonSerializer.Serialize(SalesRep));
|
||||||
|
|
||||||
// set activity salesRep and countryCode
|
// set activity salesRep and countryCode
|
||||||
|
@ -123,24 +124,24 @@ public partial class OfficeOrderCreatePage : IDisposable
|
||||||
Activity.CountryCode = SalesRep.CountryCode;
|
Activity.CountryCode = SalesRep.CountryCode;
|
||||||
|
|
||||||
// add customer info into activity properties
|
// add customer info into activity properties
|
||||||
Activity.Account = Customer.Account;
|
Activity.Account = Company.Account;
|
||||||
Activity.VatNumber = Customer.VatNumber;
|
Activity.VatNumber = Company.VatNumber;
|
||||||
Activity.Email = Customer.Email;
|
Activity.Email = Company.Email;
|
||||||
Activity.Phone = Customer.Phone;
|
Activity.Phone = Company.Phone;
|
||||||
Activity.Mobile = Customer.Mobile;
|
Activity.Mobile = Company.Mobile;
|
||||||
Activity.Name = Customer.Name;
|
Activity.Name = Company.Name;
|
||||||
Activity.Address1 = Customer.Address1;
|
Activity.Address1 = Company.Address1;
|
||||||
Activity.Address2 = Customer.Address2;
|
Activity.Address2 = Company.Address2;
|
||||||
Activity.ZipCode = Customer.ZipCode;
|
Activity.ZipCode = Company.ZipCode;
|
||||||
Activity.City = Customer.City;
|
Activity.City = Company.City;
|
||||||
Activity.DlvName = Customer.Name;
|
Activity.DlvName = Company.Name;
|
||||||
Activity.DlvAddress1 = Customer.Address1;
|
Activity.DlvAddress1 = Company.Address1;
|
||||||
Activity.DlvAddress2 = Customer.Address2;
|
Activity.DlvAddress2 = Company.Address2;
|
||||||
Activity.DlvZipCode = Customer.ZipCode;
|
Activity.DlvZipCode = Company.ZipCode;
|
||||||
Activity.DlvCity = Customer.City;
|
Activity.DlvCity = Company.City;
|
||||||
Activity.BcId = Customer.BcId;
|
Activity.BcId = Company.BcId;
|
||||||
Activity.CompanyId = Customer.CompanyId;
|
Activity.CompanyId = Company.CompanyId;
|
||||||
Activity.SalesRepId = Customer.SalesRepId;
|
Activity.SalesRepId = Company.SalesRepId;
|
||||||
|
|
||||||
// setting up activity properties
|
// setting up activity properties
|
||||||
Activity.ActivityStatusEnum = "noSale";
|
Activity.ActivityStatusEnum = "noSale";
|
||||||
|
@ -201,27 +202,22 @@ public partial class OfficeOrderCreatePage : IDisposable
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CallPriceListModal()
|
private void ShowCatalogOverlay()
|
||||||
{
|
{
|
||||||
CatalogOverlay.Show();
|
CatalogOverlay.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ShowInvoiceOverlay()
|
private void ShowInvoiceOverlay()
|
||||||
{
|
{
|
||||||
|
InvoiceListOverlay.Show();
|
||||||
}
|
}
|
||||||
private void ShowVisitOverlay()
|
private void ShowVisitOverlay()
|
||||||
{
|
{
|
||||||
|
ActivityListOverlay.Show();
|
||||||
}
|
}
|
||||||
private void ShowInventoryOverlay()
|
private void ShowInventoryOverlay()
|
||||||
{
|
{
|
||||||
|
InventoryListOverlay.Show();
|
||||||
}
|
|
||||||
|
|
||||||
private void CallPriceHistoryModal()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CreateActivity()
|
private void CreateActivity()
|
||||||
|
@ -229,14 +225,10 @@ public partial class OfficeOrderCreatePage : IDisposable
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PriceHistoryCallback()
|
private void InventoryCallback(DraftItem item)
|
||||||
{
|
{
|
||||||
|
DraftProvider.Draft.Items.Add(item);
|
||||||
}
|
StateHasChanged();
|
||||||
|
|
||||||
private void InventoryCallback()
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in a new issue