From b4819ce547913e746d4f7c10f170b29cc0232daa Mon Sep 17 00:00:00 2001 From: Frede Hundewadt Date: Wed, 22 Feb 2023 13:09:58 +0100 Subject: [PATCH] WIP: office create order --- .../CustomerInventoryListComponent.razor.cs | 10 +- .../CustomerProductCheckListComponent.razor | 4 +- ...CustomerProductCheckListComponent.razor.cs | 28 ++-- .../CustomerProductLineListComponent.razor | 4 +- .../CustomerProductLineListComponent.razor.cs | 7 +- .../OfficeCountryCustomerListComponent.razor | 2 +- .../OfficeInventoryListComponent.razor | 67 ++++++++++ .../OfficeInventoryListComponent.razor.cs | 88 ++++++++++++ .../CustomerInventoryListOverlay.razor.cs | 8 +- .../CustomerInvoiceListOverlay.razor | 11 +- .../CustomerInvoiceViewOverlay.razor | 5 +- .../OfficeCustomerProductListOverlay.razor | 4 +- .../OfficeCustomerProductListOverlay.razor.cs | 21 +-- .../OfficeOrderInventoryListOverlay.razor | 37 +++++ .../OfficeOrderInventoryListOverlay.razor.cs | 88 ++++++++++++ .../OfficeOrderInventoryReorderOverlay.razor | 126 ++++++++++++++++++ ...fficeOrderInventoryReorderOverlay.razor.cs | 92 +++++++++++++ .../ProductCheckConfirmationOverlay.razor | 2 +- .../ProductPriceHistoryOverlay.razor | 4 +- .../ProductPriceHistoryOverlay.razor.cs | 8 +- .../Pages/AdvisorActivityCreatePage.razor | 45 +++++-- .../Pages/AdvisorActivityCreatePage.razor.cs | 74 ++-------- .../AdvisorCustomerInventoryListPage.razor.cs | 6 +- .../Pages/OfficeOrderCreatePage.razor | 113 ++++++---------- .../Pages/OfficeOrderCreatePage.razor.cs | 120 ++++++++--------- 25 files changed, 722 insertions(+), 252 deletions(-) create mode 100644 Wonky.Client/Components/OfficeInventoryListComponent.razor create mode 100644 Wonky.Client/Components/OfficeInventoryListComponent.razor.cs create mode 100644 Wonky.Client/OverlayOffice/OfficeOrderInventoryListOverlay.razor create mode 100644 Wonky.Client/OverlayOffice/OfficeOrderInventoryListOverlay.razor.cs create mode 100644 Wonky.Client/OverlayOffice/OfficeOrderInventoryReorderOverlay.razor create mode 100644 Wonky.Client/OverlayOffice/OfficeOrderInventoryReorderOverlay.razor.cs diff --git a/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs b/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs index 3c06916f..8525860b 100644 --- a/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs +++ b/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs @@ -31,7 +31,12 @@ public partial class CustomerInventoryListComponent // 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; @@ -62,11 +67,12 @@ public partial class CustomerInventoryListComponent Inventory = Inventory.OrderBy(x => x.Quantity).ToList(); break; case PSort.None: + Inventory = Inventory.OrderBy(x => x.Description).ToList(); break; case PSort.Abbr: break; default: - Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); + Inventory = Inventory.OrderBy(x => x.Description).ToList(); break; } } diff --git a/Wonky.Client/Components/CustomerProductCheckListComponent.razor b/Wonky.Client/Components/CustomerProductCheckListComponent.razor index 7228d5cc..2b4f3121 100644 --- a/Wonky.Client/Components/CustomerProductCheckListComponent.razor +++ b/Wonky.Client/Components/CustomerProductCheckListComponent.razor @@ -19,7 +19,7 @@ @using System.ComponentModel.Design
- @if (ProductList.Any()) + @if (Inventory.Any()) {
@@ -31,7 +31,7 @@
- @foreach (var product in ProductList) + @foreach (var product in Inventory) {
diff --git a/Wonky.Client/Components/CustomerProductCheckListComponent.razor.cs b/Wonky.Client/Components/CustomerProductCheckListComponent.razor.cs index ae936fc7..5d3aa4d2 100644 --- a/Wonky.Client/Components/CustomerProductCheckListComponent.razor.cs +++ b/Wonky.Client/Components/CustomerProductCheckListComponent.razor.cs @@ -22,12 +22,18 @@ using Wonky.Entity.Views; namespace Wonky.Client.Components; public partial class CustomerProductCheckListComponent { - [Parameter] public List ProductList { get; set; } = new(); + [Parameter] public List Inventory { get; set; } = new(); [Parameter] public string CompanyId { get; set; } = ""; [Inject] public ILocalStorageService Storage { 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; @@ -36,41 +42,41 @@ public partial class CustomerProductCheckListComponent case PSort.Desc: if (Descending) { - ProductList = ProductList.OrderByDescending(x => x.Description).ToList(); + Inventory = Inventory.OrderByDescending(x => x.Description).ToList(); break; } - ProductList = ProductList.OrderBy(x => x.Description).ToList(); + Inventory = Inventory.OrderBy(x => x.Description).ToList(); break; case PSort.Sku: if (Descending) { - ProductList = ProductList.OrderByDescending(x => x.Sku).ToList(); + Inventory = Inventory.OrderByDescending(x => x.Sku).ToList(); break; } - ProductList = ProductList.OrderBy(x => x.Sku).ToList(); + Inventory = Inventory.OrderBy(x => x.Sku).ToList(); break; case PSort.Qty: if (Descending) { - ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList(); + Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); break; } - ProductList = ProductList.OrderBy(x => x.Quantity).ToList(); + Inventory = Inventory.OrderBy(x => x.Quantity).ToList(); break; case PSort.None: break; case PSort.Abbr: break; default: - ProductList = ProductList.OrderByDescending(x => x.Quantity).ToList(); + Inventory = Inventory.OrderByDescending(x => x.Quantity).ToList(); break; } } 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; - await Storage.SetItemAsync($"{CompanyId}-products", ProductList); + await Storage.SetItemAsync($"{CompanyId}-products", Inventory); } } \ No newline at end of file diff --git a/Wonky.Client/Components/CustomerProductLineListComponent.razor b/Wonky.Client/Components/CustomerProductLineListComponent.razor index f57980fb..cb581ecf 100644 --- a/Wonky.Client/Components/CustomerProductLineListComponent.razor +++ b/Wonky.Client/Components/CustomerProductLineListComponent.razor @@ -15,7 +15,7 @@ // *@ -@if (ProductHistory.Any()) +@if (Inventory.Any()) { @@ -41,7 +41,7 @@ - @foreach (var line in ProductHistory) + @foreach (var line in Inventory) { - @if (History.Any()) + @if (ProductHistory.Any()) { - @foreach (var entry in History) + @foreach (var entry in ProductHistory) { diff --git a/Wonky.Client/OverlayOrderCreate/ProductPriceHistoryOverlay.razor.cs b/Wonky.Client/OverlayOrderCreate/ProductPriceHistoryOverlay.razor.cs index 6cac4660..d5be0311 100644 --- a/Wonky.Client/OverlayOrderCreate/ProductPriceHistoryOverlay.razor.cs +++ b/Wonky.Client/OverlayOrderCreate/ProductPriceHistoryOverlay.razor.cs @@ -28,7 +28,7 @@ public partial class ProductPriceHistoryOverlay [Parameter] public string CompanyId { get; set; } = ""; [Parameter] public string Sku { get; set; } = ""; [Inject] public IAdvisorCustomerHistoryRepository HistoryRepo { get; set; } - private List? History { get; set; } + private List? ProductHistory { get; set; } private string ProductName { get; set; } = ""; private string _modalDisplay = ""; private bool _showBackdrop; @@ -38,10 +38,10 @@ public partial class ProductPriceHistoryOverlay if (string.IsNullOrWhiteSpace(Sku)) return; - History = await HistoryRepo.FetchHistory(CompanyId, Sku); - if (History.Any()) + ProductHistory = await HistoryRepo.FetchHistory(CompanyId, Sku); + if (ProductHistory.Any()) { - ProductName = History[0].Description; + ProductName = ProductHistory[0].Description; } } diff --git a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor index bdc35239..003a63dc 100644 --- a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor +++ b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor @@ -160,13 +160,21 @@ else
+ @* + ***************** Invoice history overlay ***************************** + *@
+ @* + ***************** Visit hisotry overlay ***************************** + *@ - @* *@
+ @* + ***************** Product Inventory overlay ***************************** + *@
@@ -182,6 +190,9 @@ else Ordrekladde Global kladde (udløber efter @(DraftProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)
@@ -212,6 +223,9 @@ else @@ -223,6 +237,9 @@ else @@ -333,28 +356,30 @@ else Kundekort
+ @* + ***************** Confirm product check overlay button ***************************** + ***************** Continue by submitton order to erp ***************************** + *@
} + - - - + - + + + - - \ No newline at end of file + \ No newline at end of file diff --git a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs index ee093647..7262f7b8 100644 --- a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs +++ b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs @@ -36,7 +36,8 @@ namespace Wonky.Client.Pages; public partial class AdvisorActivityCreatePage : IDisposable { - // Services + // ************************************************************* + // Injected services [Inject] public ILogger Logger { get; set; } [Inject] public HttpInterceptorService Interceptor { 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 IAdvisorCustomerHistoryRepository HistoryRepo { get; set; } [Inject] public IUserInfoService UserInfoService { get; set; } - + // ************************************************************* + // Parameters [CascadingParameter] private DraftStateProvider DraftProvider { get; set; } = new(); [Parameter] public string CompanyId { get; set; } = ""; - - // variables + // ************************************************************* + // Variables private readonly JsonSerializerOptions _options = new() {PropertyNameCaseInsensitive = true}; private SalesItemView SelectedItem { get; set; } = new(); private UserProfile UserProfile { get; set; } = new(); @@ -74,8 +76,11 @@ public partial class AdvisorActivityCreatePage : IDisposable private DateTime SelectedDate { get; set; } private string OldPhone { get; set; } = ""; private string PromptDateConfirm { get; set; } = ""; - - // OVERLAY PAGES + private string ButtonText { get; set; } = "Gem besøg"; + private bool OrgWarning { get; set; } + private const string PromptDemoForgotten = "Har du glemt demo?"; + // ************************************************************* + // Overlays private PriceCatalogOverlay CatalogOverlay { get; set; } = new(); private ProductHistoryOverlay ProductOverlay { 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 CustomerInventoryListOverlay InventoryListOverlay { get; set; } = new(); private CustomerActivityListOverlay ActivityListOverlay { get; set; } = new(); + // ************************************************************* + // Lists private List Inventory { get; set; } = new(); private List CheckList { get; set; } = new(); private InvoiceListView CompanyInvoices { get; set; } = new(); - private List Activities { get; set; } = new(); - - private string ButtonText { get; set; } = "Gem besøg"; - private bool OrgWarning { get; set; } - /// /// Page initialization /// @@ -187,7 +189,7 @@ public partial class AdvisorActivityCreatePage : IDisposable InventoryListOverlay.Show(); Inventory = await HistoryRepo.FetchInventory(CompanyId); - + Inventory = Inventory.OrderBy(x => x.Description).ToList(); await Task.Delay(500); } @@ -316,9 +318,6 @@ public partial class AdvisorActivityCreatePage : IDisposable } - /// - /// Work Date confirm callback - /// private async Task WorkDateConfirmCallback() { await ProfileService.SetDateConfirmed(true); @@ -327,10 +326,6 @@ public partial class AdvisorActivityCreatePage : IDisposable StateHasChanged(); } - /// - /// Work Date component callback - /// - /// private async Task WorkDateComponentCallback(string workDate) { ReportClosed = await ReportRepo.ReportExist(workDate); @@ -338,18 +333,11 @@ public partial class AdvisorActivityCreatePage : IDisposable Activity.ActivityDate = workDate; } - /// - /// Show Price list modal - /// private void ShowPriceListOverlay() { CatalogOverlay.Show(); } - /// - /// Price List modal callback - /// - /// private async Task PriceListCallback(SelectedSku sku) { // get selected item @@ -362,19 +350,12 @@ public partial class AdvisorActivityCreatePage : IDisposable StateHasChanged(); } - /// - /// Show Price History modal - /// private void ShowPriceHistoryOverlay() { if(ShowItem) PriceOverlay.Show(); } - /// - /// Price History modal callback - /// - /// private void PriceHistoryCallback(decimal price) { if (price == 0) @@ -383,9 +364,6 @@ public partial class AdvisorActivityCreatePage : IDisposable StateHasChanged(); } - /// - /// Validate and Create Activity - /// private async Task CreateActivity() { // avoid duplication @@ -486,19 +464,12 @@ public partial class AdvisorActivityCreatePage : IDisposable Toaster.ShowError(result.Message, "ORDRE FEJL"); } - /// - /// Delete current draft - /// private async Task DeleteDraft() { await DraftProvider.DeleteDraftAsync(); Activity.ActivityStatusEnum = "noSale"; } - /// - /// Add item to draft - /// - /// private async Task AddItem(SalesItemView salesItem) { ShowItem = false; @@ -524,10 +495,6 @@ public partial class AdvisorActivityCreatePage : IDisposable await DraftProvider.SaveChangesAsync(); } - /// - /// Remove item from draft - /// - /// private async Task RemoveItem(DraftItem item) { // remove item @@ -538,11 +505,6 @@ public partial class AdvisorActivityCreatePage : IDisposable Activity.ActivityStatusEnum = "noSale"; } - /// - /// Edit Context handle field change - /// - /// - /// private void HandleFieldChanged(object sender, FieldChangedEventArgs e) { Logger.LogDebug("ActivityNewPage => HandleFieldChanged => ActivityStatusEnum <= '{}'", Activity.ActivityStatusEnum); @@ -574,11 +536,6 @@ public partial class AdvisorActivityCreatePage : IDisposable StateHasChanged(); } - /// - /// Edit Context handle validation change - /// - /// - /// private void ValidationChanged(object sender, ValidationStateChangedEventArgs e) { if (string.IsNullOrEmpty(Activity.ActivityTypeEnum) && !ReportClosed) @@ -605,9 +562,6 @@ public partial class AdvisorActivityCreatePage : IDisposable ActivityContext.OnValidationStateChanged += ValidationChanged; } - /// - /// Implement Dispose from IDisposable - /// public void Dispose() { Interceptor.DisposeEvent(); diff --git a/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor.cs b/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor.cs index 1a0451c6..b1c46b00 100644 --- a/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor.cs @@ -32,7 +32,7 @@ namespace Wonky.Client.Pages; public partial class AdvisorCustomerInventoryListPage : IDisposable { [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 IToastService Toaster { get; set; } [Inject] public ILogger Logger { get; set; } @@ -56,7 +56,7 @@ public partial class AdvisorCustomerInventoryListPage : IDisposable Interceptor.RegisterEvent(); Interceptor.RegisterBeforeSendEvent(); - Company = await CustomerREpo.GetCompanyById(CompanyId); + Company = await CustomerRepo.GetCompanyById(CompanyId); // fetch product inventory await FetchProductInventory(); @@ -96,9 +96,11 @@ public partial class AdvisorCustomerInventoryListPage : IDisposable Logger.LogDebug("pulling products from backend"); // fetch product history Inventory = await HistoryRepo.FetchInventory(CompanyId); + // default sort order by description if (Inventory.Any()) Inventory = Inventory.OrderBy(x => x.Description).ToList(); + // send products to storage await Storage.SetItemAsync($"{Company.CompanyId}-products", Inventory); await Storage.SetItemAsync($"{Company.CompanyId}-pDate", $"{DateTime.Now:yyyy-MM-dd}"); diff --git a/Wonky.Client/Pages/OfficeOrderCreatePage.razor b/Wonky.Client/Pages/OfficeOrderCreatePage.razor index 9694b24a..fa5d2f9c 100644 --- a/Wonky.Client/Pages/OfficeOrderCreatePage.razor +++ b/Wonky.Client/Pages/OfficeOrderCreatePage.razor @@ -15,17 +15,17 @@ // *@ -@using Wonky.Client.OverlayCustomer +@using Wonky.Client.OverlayOffice @using Wonky.Client.OverlayOrderCreate @using Microsoft.AspNetCore.Authorization @attribute [Authorize(Roles = "Admin,Office,Supervisor,Warehouse")] @page "/office/customers/{CountryCode}/{CompanyId}/order" -Telefon Ordre - @Customer.Name - @Customer.Account +Telefon Ordre - @Company.Name - @Company.Account
-

@Customer.Name - @Customer.Account

+

@Company.Name - @Company.Account

@DateTime.Now.ToShortDateString()

@@ -35,7 +35,7 @@
Loading...
-
+
@@ -46,27 +46,27 @@
- +
- +
- +
- +
- +
@@ -84,7 +84,7 @@
- +
@@ -94,21 +94,30 @@
- +
+ @* + ***************** Invoice history overlay ***************************** + *@
- +
+ @* + ***************** Visit history overlay ***************************** + *@
- +
+ @* + ***************** Product Inventory overlay ***************************** + *@
-
+
@* Order lines -----------------------------------------------------*@
@@ -119,6 +128,9 @@ Ordrekladde Global kladde (udløber efter @(DraftProvider.Draft.TimeToLiveInSeconds / 60)m inaktivitet)
@@ -145,6 +157,9 @@ @@ -155,7 +170,10 @@ @@ -202,8 +220,10 @@ @@ -213,66 +233,17 @@ @* end draft line ------------------------------------------------- *@ - @* -
- $1$ Delivery address #1# -
-

- -

-
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
-
-
-
-*@
+ @* + ***************** Submit order to erp system ***************************** + *@
-@* *@ -@* *@ -@* *@ -@* *@ -@* *@ \ No newline at end of file + + + \ No newline at end of file diff --git a/Wonky.Client/Pages/OfficeOrderCreatePage.razor.cs b/Wonky.Client/Pages/OfficeOrderCreatePage.razor.cs index 6c9af773..c5af48eb 100644 --- a/Wonky.Client/Pages/OfficeOrderCreatePage.razor.cs +++ b/Wonky.Client/Pages/OfficeOrderCreatePage.razor.cs @@ -21,7 +21,7 @@ using Microsoft.AspNetCore.Components.Forms; using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpRepository; using Wonky.Client.Models; -using Wonky.Client.OverlayCustomer; +using Wonky.Client.OverlayOffice; using Wonky.Client.OverlayOrderCreate; using Wonky.Client.Shared; using Wonky.Entity.DTO; @@ -36,11 +36,11 @@ public partial class OfficeOrderCreatePage : IDisposable // injected services [Inject] public ILogger Logger { 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 ICountryCustomerRepository CustomerRepo { get; set; } + [Inject] public ICountryCustomerHistoryRepository HistoryRepo { get; set; } + [Inject] public ICountryActivityRepository ActivityRepo { get; set; } + [Inject] public ISystemUserRepository UserRepo { get; set; } // -------------------------------------------------------------------- // parameters @@ -52,8 +52,7 @@ public partial class OfficeOrderCreatePage : IDisposable // private variables private readonly JsonSerializerOptions _options = new() {PropertyNameCaseInsensitive = true}; // class objects - private CompanyDto Customer { get; set; } = new(); - private List CustomerInventory { get; set; } = new(); + private CompanyDto Company { get; set; } = new(); private SalesItemView SelectedItem { get; set; } = new(); private ActivityDto Activity { get; set; } = new(); private UserManagerEditView SalesRep { get; set; } = new(); @@ -72,20 +71,15 @@ public partial class OfficeOrderCreatePage : IDisposable // -------------------------------------------------------------------- // overlays private PriceCatalogOverlay CatalogOverlay { get; set; } = new(); - private ProductHistoryOverlay ProductOverlay { get; set; } = new(); - private ProductPriceHistoryOverlay PriceOverlay { get; set; } = new(); - private ConfirmWorkDateModal ConfirmWorkDate { 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(); - + private OfficeCustomerInvoiceListOverlay InvoiceListOverlay { get; set; } = new(); + private OfficeCustomerActivityListOverlay ActivityListOverlay { get; set; } = new(); + private OfficeOrderInventoryListOverlay InventoryListOverlay { get; set; } = new(); + // -------------------------------------------------------------------- // lists - private List Inventory { get; set; } = new(); - private List CheckList { get; set; } = new(); + private List CompanyInventory { get; set; } = new(); private InvoiceListView CompanyInvoices { get; set; } = new(); - private List Activities { get; set; } = new(); + private List CompanyActivities { get; set; } = new(); protected override async Task OnInitializedAsync() @@ -99,23 +93,30 @@ public partial class OfficeOrderCreatePage : IDisposable ActivityContext.OnValidationStateChanged += ValidationChanged; // fetch customer - Customer = await CustomerRepo.GetByCustomerId(CountryCode, CompanyId); - Logger.LogDebug("OfficeOrderCreate => Customer => {}", JsonSerializer.Serialize(Customer)); + Company = await CustomerRepo.GetByCustomerId(CountryCode, CompanyId); + Logger.LogDebug("OfficeOrderCreate => Customer => {}", JsonSerializer.Serialize(Company)); var today = $"{DateTime.Now:yyyy-MM-dd}"; Activity.ActivityDate = today; // initiate a sync to ensure up-to-date product history - if (Customer.HistorySync != today) - Logger.LogDebug("OfficeOrderCreate => "); - Customer.HistorySync = await InventoryRepo.RequestErpToCrmSync(CountryCode, CompanyId, Customer.HistorySync); - - // fetch customer inventory - CustomerInventory = await InventoryRepo.RequestInventory(CountryCode, CompanyId); - Logger.LogDebug("OfficeOrderCreate => Inventory => {}", JsonSerializer.Serialize(CustomerInventory)); - + if (Company.HistorySync != today) + { + Company.HistorySync = await HistoryRepo.RequestErpToCrmSync(CountryCode, CompanyId, Company.HistorySync); + Logger.LogDebug("OfficeOrderCreate => RequestErpToCrmSync <= {}", Company.HistorySync); + } + // fetch invoices + 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 - SalesRep = await UserRepo.GetUserInfo(Customer.SalesRepId); + SalesRep = await UserRepo.GetUserInfo(Company.SalesRepId); Logger.LogDebug("OfficeOrderCreate => SalesRep => {}", JsonSerializer.Serialize(SalesRep)); // set activity salesRep and countryCode @@ -123,24 +124,24 @@ public partial class OfficeOrderCreatePage : IDisposable Activity.CountryCode = SalesRep.CountryCode; // add customer info into activity properties - Activity.Account = Customer.Account; - Activity.VatNumber = Customer.VatNumber; - Activity.Email = Customer.Email; - Activity.Phone = Customer.Phone; - Activity.Mobile = Customer.Mobile; - Activity.Name = Customer.Name; - Activity.Address1 = Customer.Address1; - Activity.Address2 = Customer.Address2; - Activity.ZipCode = Customer.ZipCode; - Activity.City = Customer.City; - Activity.DlvName = Customer.Name; - Activity.DlvAddress1 = Customer.Address1; - Activity.DlvAddress2 = Customer.Address2; - Activity.DlvZipCode = Customer.ZipCode; - Activity.DlvCity = Customer.City; - Activity.BcId = Customer.BcId; - Activity.CompanyId = Customer.CompanyId; - Activity.SalesRepId = Customer.SalesRepId; + Activity.Account = Company.Account; + Activity.VatNumber = Company.VatNumber; + Activity.Email = Company.Email; + Activity.Phone = Company.Phone; + Activity.Mobile = Company.Mobile; + Activity.Name = Company.Name; + Activity.Address1 = Company.Address1; + Activity.Address2 = Company.Address2; + Activity.ZipCode = Company.ZipCode; + Activity.City = Company.City; + Activity.DlvName = Company.Name; + Activity.DlvAddress1 = Company.Address1; + Activity.DlvAddress2 = Company.Address2; + Activity.DlvZipCode = Company.ZipCode; + Activity.DlvCity = Company.City; + Activity.BcId = Company.BcId; + Activity.CompanyId = Company.CompanyId; + Activity.SalesRepId = Company.SalesRepId; // setting up activity properties Activity.ActivityStatusEnum = "noSale"; @@ -201,42 +202,33 @@ public partial class OfficeOrderCreatePage : IDisposable StateHasChanged(); } - private void CallPriceListModal() + private void ShowCatalogOverlay() { CatalogOverlay.Show(); } private void ShowInvoiceOverlay() { - + InvoiceListOverlay.Show(); } private void ShowVisitOverlay() { - + ActivityListOverlay.Show(); } private void ShowInventoryOverlay() { - - } - - private void CallPriceHistoryModal() - { - + InventoryListOverlay.Show(); } private void CreateActivity() { } - - private void PriceHistoryCallback() + + private void InventoryCallback(DraftItem item) { - - } - - private void InventoryCallback() - { - + DraftProvider.Draft.Items.Add(item); + StateHasChanged(); } ///
diff --git a/Wonky.Client/Components/CustomerProductLineListComponent.razor.cs b/Wonky.Client/Components/CustomerProductLineListComponent.razor.cs index 9d022fb7..731c9f4c 100644 --- a/Wonky.Client/Components/CustomerProductLineListComponent.razor.cs +++ b/Wonky.Client/Components/CustomerProductLineListComponent.razor.cs @@ -20,6 +20,11 @@ namespace Wonky.Client.Components; public partial class CustomerProductLineListComponent { - [Parameter] public List ProductHistory { get; set; } = new(); + [Parameter] public List Inventory { get; set; } = new(); + protected override void OnParametersSet() + { + if(Inventory.Any()) + Inventory = Inventory.OrderBy(x => x.Description).ToList(); + } } \ No newline at end of file diff --git a/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor b/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor index b77d6ce4..b599e43b 100644 --- a/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor +++ b/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor @@ -71,7 +71,7 @@ - + } else { diff --git a/Wonky.Client/Components/OfficeInventoryListComponent.razor b/Wonky.Client/Components/OfficeInventoryListComponent.razor new file mode 100644 index 00000000..ff55bc9f --- /dev/null +++ b/Wonky.Client/Components/OfficeInventoryListComponent.razor @@ -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 +
+ + @if (Inventory.Any()) + { +
+
+
+
Navn
+
Varenr
+
Antal
+
+
+
+
+ @foreach (var product in Inventory) + { +
+
+
+
+ @product.Description + @if (product.Discontinued) + { + Udgået + Produktet er udgået + } +
+
+
+ @product.Sku +
+
+ @product.Quantity +
+ +
+
+ } +
+ } + else + { +
Ingen data
+ } +
\ No newline at end of file diff --git a/Wonky.Client/Components/OfficeInventoryListComponent.razor.cs b/Wonky.Client/Components/OfficeInventoryListComponent.razor.cs new file mode 100644 index 00000000..6824c0bd --- /dev/null +++ b/Wonky.Client/Components/OfficeInventoryListComponent.razor.cs @@ -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 Inventory { get; set; } = new(); + [Parameter] public string CompanyId { get; set; } = ""; + [Parameter] public EventCallback 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); + } +} \ No newline at end of file diff --git a/Wonky.Client/OverlayCustomer/CustomerInventoryListOverlay.razor.cs b/Wonky.Client/OverlayCustomer/CustomerInventoryListOverlay.razor.cs index 33c9f216..882b4233 100644 --- a/Wonky.Client/OverlayCustomer/CustomerInventoryListOverlay.razor.cs +++ b/Wonky.Client/OverlayCustomer/CustomerInventoryListOverlay.razor.cs @@ -40,11 +40,17 @@ public partial class CustomerInventoryListOverlay : IDisposable private string _modalDisplay = ""; private bool _showBackdrop; private CompanyDto Company { get; set; } = new(); - private List ProductList { get; set; } = new(); + // private List ProductList { get; set; } = new(); private DraftItem DraftItem { get; set; } = new(); private SalesItemView SalesItem { 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() { Interceptor.RegisterEvent(); diff --git a/Wonky.Client/OverlayCustomer/CustomerInvoiceListOverlay.razor b/Wonky.Client/OverlayCustomer/CustomerInvoiceListOverlay.razor index 822491a3..0c16fdcf 100644 --- a/Wonky.Client/OverlayCustomer/CustomerInvoiceListOverlay.razor +++ b/Wonky.Client/OverlayCustomer/CustomerInvoiceListOverlay.razor @@ -21,16 +21,13 @@ diff --git a/Wonky.Client/OverlayCustomer/CustomerInvoiceViewOverlay.razor b/Wonky.Client/OverlayCustomer/CustomerInvoiceViewOverlay.razor index 9bbd6b03..b02ce94f 100644 --- a/Wonky.Client/OverlayCustomer/CustomerInvoiceViewOverlay.razor +++ b/Wonky.Client/OverlayCustomer/CustomerInvoiceViewOverlay.razor @@ -20,7 +20,10 @@
@entry.DeliveryDate + @* + ***************** Reset draft ***************************** + *@
+ @* + ***************** Remove item ***************************** + *@
@($"{DraftProvider.Draft.Total:N2}") + @* + ***************** Price catalot overlay button ***************************** + *@ @@ -259,6 +276,9 @@ else
+ @* + ***************** Price history overlay button ***************************** + *@ @@ -272,6 +292,9 @@ else
@SelectedItem.Sku + @* + ***************** Add item button ***************************** + *@
+ @* + ***************** Reset draft ***************************** + *@
@($"{cartItem.Discount:N2}") @($"{cartItem.LineTotal:N2}") + @* + ***************** Remove draft line ***************************** + *@
Total @($"{DraftProvider.Draft.Total:N2}") - @SelectedItem.Sku + @* + ***************** Add line to draft ***************************** + *@ - @* *@