diff --git a/Wonky.Client/Components/CustomerInventoryListComponent.razor b/Wonky.Client/Components/CustomerInventoryListComponent.razor index d53e9da2..142eff7d 100644 --- a/Wonky.Client/Components/CustomerInventoryListComponent.razor +++ b/Wonky.Client/Components/CustomerInventoryListComponent.razor @@ -21,7 +21,7 @@ @if (Inventory.Any()) {
-
+
Navn
Varenr
@@ -50,10 +50,10 @@
@product.Quantity
-
+ -
+
@if (product.Check) { diff --git a/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs b/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs index ba7082d7..febf2316 100644 --- a/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs +++ b/Wonky.Client/Components/CustomerInventoryListComponent.razor.cs @@ -37,7 +37,9 @@ public partial class CustomerInventoryListComponent { if(Inventory.Any()) Inventory = Inventory.OrderBy(x => x.Description).ToList(); - } + } + + private void SortProducts(ProductSort column) { Descending = !Descending; @@ -78,12 +80,14 @@ public partial class CustomerInventoryListComponent } } + private async Task CallShowReorderModal(string sku) { await ProductCheck(sku); await OnReorderSelected.InvokeAsync(sku); } + private async Task ProductCheck(string sku) { var x = Inventory.First(x => x.Sku == sku); diff --git a/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor.cs b/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor.cs index 69872ad0..84792173 100644 --- a/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor.cs +++ b/Wonky.Client/Components/OfficeCountryCustomerListComponent.razor.cs @@ -62,20 +62,31 @@ public partial class OfficeCountryCustomerListComponent private async Task ShowInvoiceList(string companyId) { // check for console manipulation - if (!Utils.Validate(ValidateType.Id, companyId)) return; + if (!Utils.Validate(ValidateType.Id, companyId)) + { + return; + } SelectedCompany = CompanyList.First(x => x.CompanyId == companyId); + // call erp to crm sync before requesting invoices var newSyncDate = await HistoryRepo.RequestErpToCrmSync(CountryCode, companyId, SelectedCompany.HistorySync); await Task.Delay(500); + InvoiceList = await HistoryRepo.GetInvoiceList(CountryCode, companyId); - if(!string.IsNullOrWhiteSpace(newSyncDate)) SelectedCompany.HistorySync = newSyncDate; + if (!string.IsNullOrWhiteSpace(newSyncDate)) + { + SelectedCompany.HistorySync = newSyncDate; + } InvoiceListOverlay.Show(); } private async Task ShowActivityList(string companyId) { // check for console manipulation - if (!Utils.Validate(ValidateType.Id, companyId)) return; + if (!Utils.Validate(ValidateType.Id, companyId)) + { + return; + } SelectedCompany = CompanyList.First(x => x.CompanyId == companyId); ActivityList = await CustomerActivityRepo.GetActivityList(companyId); ActivityListOverlay.Show(); @@ -84,20 +95,29 @@ public partial class OfficeCountryCustomerListComponent private async Task ShowInventory(string companyId) { // check for console manipulation - if (!Utils.Validate(ValidateType.Id, companyId)) return; + if (!Utils.Validate(ValidateType.Id, companyId)) + { + return; + } SelectedCompany = CompanyList.First(x => x.CompanyId == companyId); // call erp to crm sync before requesting products var newSyncDate = await HistoryRepo.RequestErpToCrmSync(CountryCode, companyId, SelectedCompany.HistorySync); await Task.Delay(500); - if(!string.IsNullOrWhiteSpace(newSyncDate)) SelectedCompany.HistorySync = newSyncDate; + if (!string.IsNullOrWhiteSpace(newSyncDate)) + { + SelectedCompany.HistorySync = newSyncDate; + } ProductList = await HistoryRepo.GetInventory(SelectedCompany.CountryCode, SelectedCompany.CompanyId); ProductListOverlay.Show(); } - private async Task ShowOrder(string companyId) + private void ShowOrder(string companyId) { // check for console manipulation - if (!Utils.Validate(ValidateType.Id, companyId)) return; + if (!Utils.Validate(ValidateType.Id, companyId)) + { + return; + } SelectedCompany = CompanyList.First(x => x.CompanyId == companyId); } } \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/AdvisorCustomerRepository.cs b/Wonky.Client/HttpRepository/AdvisorCustomerRepository.cs index 7eb39288..2ea3a07a 100644 --- a/Wonky.Client/HttpRepository/AdvisorCustomerRepository.cs +++ b/Wonky.Client/HttpRepository/AdvisorCustomerRepository.cs @@ -51,7 +51,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository } /// - /// Get a list of CRM customers (SalesRep) + /// SalesRep => Get a list of CRM customers /// /// /// A paged response defined by pagingParameters @@ -90,17 +90,23 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository } /// - /// Get CRM customer by Id (SalesRep) + /// SalesRep => Get CRM customer by Id /// /// /// A CRM Company entity public async Task GetCompanyById(string companyId) { - return await _client.GetFromJsonAsync($"{_conf.CrmCustomers}/{companyId}", _options); + var result = await _client.GetAsync($"{_conf.CrmCustomers}/{companyId}"); + var content = await result.Content.ReadAsStringAsync(); + if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content)) + { + return new CompanyDto(); + } + return JsonSerializer.Deserialize(content, _options) ?? new CompanyDto(); } /// - /// Create Customer (SalesRep) + /// SalesRep => Create Customer /// /// /// The Id of the entity @@ -113,7 +119,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository } /// - /// Delete the CRM customer (SalesRep) + /// SalesRep => Delete the CRM customer /// /// /// true/false to define success @@ -124,7 +130,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository } /// - /// Update CRM customer properties (SalesRep) + /// SalesRep => Update CRM customer properties /// /// /// @@ -146,7 +152,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository } /// - /// Update ERP customer properties (SalesRep) + /// SalesRep => Update ERP customer properties /// /// /// @@ -172,7 +178,7 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository } /// - /// Update customer Vat Number (SalesRep) + /// SalesRep => Update customer Vat Number /// /// /// @@ -190,10 +196,4 @@ public class AdvisorCustomerRepository : IAdvisorCustomerRepository return JsonSerializer.Deserialize(content) ?? new CompanyDto { Name = "ERROR", VatNumber = vatNumber, CrmNotes = $"FEJL: {content}" }; } - - // public async Task ToggleVisibility(string companyId, bool hide) - // { - // var response = await _client.PostAsync($"{_conf.CrmCustomers}/{companyId}/toggle?hide={hide}", null); - // return response.IsSuccessStatusCode; - // } } \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/AdvisorWorkplaceRepository.cs b/Wonky.Client/HttpRepository/AdvisorWorkplaceRepository.cs index 2486ae51..211894a5 100644 --- a/Wonky.Client/HttpRepository/AdvisorWorkplaceRepository.cs +++ b/Wonky.Client/HttpRepository/AdvisorWorkplaceRepository.cs @@ -48,22 +48,50 @@ public class AdvisorWorkplaceRepository : IAdvisorWorkplaceRepository public async Task> GetWorkplaces(string companyId) { - var result = await _client.GetFromJsonAsync>( - $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}", _options); - return result ?? new List(); + var result = await _client.GetAsync( + $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}"); + var content = await result.Content.ReadAsStringAsync(); + if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content)) + { + return new List(); + } + return JsonSerializer.Deserialize>(content, _options) ?? new List(); } public async Task GetWorkplace(string companyId, string workplaceId) { - var result = await _client.GetFromJsonAsync( - $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}", _options); - return result ?? new WorkplaceDto(); + var result = await _client.GetAsync( + $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}"); + var content = await result.Content.ReadAsStringAsync(); + if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content)) + { + return new WorkplaceDto(); + } + return JsonSerializer.Deserialize(content, _options) ?? new WorkplaceDto(); } - public async Task CreateWorkplace(string companyId, WorkplaceDto workplace) + public async Task GetWorkplaceInventory(string companyId, string workplaceId) { - await _client.PostAsJsonAsync( + var result = await _client.GetAsync( + $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}/documents"); + var content = await result.Content.ReadAsStringAsync(); + if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content)) + { + return new WorkplaceInventory(); + } + return JsonSerializer.Deserialize(content, _options) ?? new WorkplaceInventory(); + } + + public async Task CreateWorkplace(string companyId, WorkplaceDto workplace) + { + var result = await _client.PostAsJsonAsync( $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}", workplace, _options); + var content = await result.Content.ReadAsStringAsync(); + // if (!result.IsSuccessStatusCode || string.IsNullOrWhiteSpace(content)) + // { + // return ""; + // } + return content; } public async Task UpdateWorkplace(string companyId, WorkplaceDto workplace) @@ -77,11 +105,4 @@ public class AdvisorWorkplaceRepository : IAdvisorWorkplaceRepository await _client.DeleteAsync( $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}"); } - - public async Task GetWorkplaceInventory(string companyId, string workplaceId) - { - var result = await _client.GetFromJsonAsync( - $"{_api.CrmCustomers}/{companyId}/{_api.CrmWorkplaceExt}/{workplaceId}/documents"); - return result ?? new WorkplaceInventory(); - } } \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/IAdvisorWorkplaceRepository.cs b/Wonky.Client/HttpRepository/IAdvisorWorkplaceRepository.cs index acc2c2dc..10f20981 100644 --- a/Wonky.Client/HttpRepository/IAdvisorWorkplaceRepository.cs +++ b/Wonky.Client/HttpRepository/IAdvisorWorkplaceRepository.cs @@ -44,7 +44,7 @@ public interface IAdvisorWorkplaceRepository /// /// /// - Task CreateWorkplace(string companyId, WorkplaceDto workplace); + Task CreateWorkplace(string companyId, WorkplaceDto workplace); /// /// Update workplace given the customer id and updated data diff --git a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs index 7147f244..2cfa891f 100644 --- a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs +++ b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs @@ -74,7 +74,7 @@ public partial class AdvisorActivityCreatePage : IDisposable private bool Working { get; set; } = true; private UserManagerEditView SalesRep { get; set; } = new(); private DateTime SelectedDate { get; set; } - private string OldPhone { get; set; } = ""; + // private string OldPhone { get; set; } = ""; private string PromptDateConfirm { get; set; } = ""; private string ButtonText { get; set; } = "Gem besøg"; private bool OrgWarning { get; set; } @@ -127,19 +127,23 @@ public partial class AdvisorActivityCreatePage : IDisposable else { if (Company.HasFolded == 1) + { // Company has shut down - Activity.OrderMessage = "BEMÆRK: CVR nummer er ophørt."; - - // variable to validate if customer needs phone number update - OldPhone = Company.Phone; - if (string.IsNullOrWhiteSpace(Company.Phone) + Activity.OrderMessage = "BEMÆRK: CVR nummer er ophørt."; + } + // + if (Company.CountryCode.ToLower() == "dk" + && string.IsNullOrWhiteSpace(Company.Phone) && !string.IsNullOrWhiteSpace(Company.Account) - && Company.Account != "NY" && Company.Account.Length > 7) + && !Company.Account.StartsWith("NY") + && Company.Account.Length > 7) { Company.Phone = Company.Account[..8]; } Activity.ActivityStatusEnum = "noSale"; - Activity.ActivityVisitEnum = Company.Account is "" or "NY" ? "new" : "recall"; + Activity.ActivityVisitEnum = string.IsNullOrWhiteSpace(Company.Account) + || Company.Account.StartsWith("NY") + ? "new" : "recall"; } // Populate base activity information @@ -185,14 +189,17 @@ public partial class AdvisorActivityCreatePage : IDisposable if (DraftProvider.Draft.DraftType == "order") { // set dropdown selection accordingly - if(Activity.ActivityTypeEnum != "phone") + if (Activity.ActivityTypeEnum != "phone") + { Activity.ActivityTypeEnum = "onSite"; + } Activity.ActivityStatusEnum = "order"; PoFormInvalid = false; } Working = false; + StateHasChanged(); } @@ -307,7 +314,9 @@ public partial class AdvisorActivityCreatePage : IDisposable { // get selected item if (string.IsNullOrWhiteSpace(sku.ItemId)) + { return; + } SelectedItem = await CatalogRepo.GetSalesItemId(SalesRep.CountryCode.ToLower(), sku.ItemId); ShowItem = true; Price = sku.Rate; @@ -319,7 +328,9 @@ public partial class AdvisorActivityCreatePage : IDisposable private void PriceHistoryCallback(decimal price) { if (price == 0) + { return; + } Price = price.ToString("N2", CultureInfo.InvariantCulture); StateHasChanged(); } @@ -369,14 +380,18 @@ public partial class AdvisorActivityCreatePage : IDisposable private async Task FetchCompanyInvoices() { // no need to do for kanvas entry - if (Kanvas) return new InvoiceListView(); + if (Kanvas) + { + return new InvoiceListView(); + } // fetch from storage var storage = await Storage.GetItemAsStringAsync($"{CompanyId}-invoices"); - await Task.Delay(500); + await Task.Delay(250); var iDate = await Storage.GetItemAsStringAsync($"{CompanyId}-iDate"); // if we have a list and iDate was today return the list - if (!string.IsNullOrWhiteSpace(storage) && (!string.IsNullOrWhiteSpace(iDate) && - DateTime.Parse(iDate.Replace("\"", "")) >= DateTime.Now)) + if (!string.IsNullOrWhiteSpace(storage) + && !string.IsNullOrWhiteSpace(iDate) + && DateTime.Parse(iDate.Replace("\"", "")) >= DateTime.Now) { Logger.LogDebug("fetching invoices from storage"); Logger.LogDebug("storage contains <= {}", storage); @@ -401,7 +416,9 @@ public partial class AdvisorActivityCreatePage : IDisposable { // avoid duplication if (Working) + { return; + } Logger.LogDebug("view kanvas activity => {}", JsonSerializer.Serialize(Activity)); switch (Kanvas) @@ -427,7 +444,7 @@ public partial class AdvisorActivityCreatePage : IDisposable Toaster.ShowError("Ved bestilling skal der være en eller flere linjer i kladden."); return; // phone number is required if first time customer - case "order" when Company.Account is "NY" or "" && string.IsNullOrWhiteSpace(Activity.Phone): + case "order" when Company.Account.StartsWith("NY") || Company.Account.StartsWith("KANVAS") || string.IsNullOrWhiteSpace(Company.Account) && string.IsNullOrWhiteSpace(Activity.Phone): Toaster.ShowError("Ved bestilling til ny kunde skal telefon nummer angives."); return; // verify email address is a valid address @@ -435,21 +452,11 @@ public partial class AdvisorActivityCreatePage : IDisposable Toaster.ShowError("Ved tilbud skal en gyldig email adresse angives."); return; } - // raise working flag Working = true; - // reset selected item - SelectedItem = new SalesItemView(); - // check if phone number need to be updated - if (!Kanvas && OldPhone != Activity.Phone) - { - Company.Phone = Activity.Phone; - Activity.OrderMessage = $"BEMÆRK: {Activity.Phone}\n{Activity.OrderMessage}"; - await CompanyRepo.UpdateErpData(Company.CompanyId, Company); - } - // begin assembling activity + SelectedItem = new SalesItemView(); // activity date Activity.ActivityDate = $"{SelectedDate:yyyy-MM-dd}"; // activity type @@ -461,7 +468,9 @@ public partial class AdvisorActivityCreatePage : IDisposable }; // if express add 'E' to ourRef if (Activity.Express) + { Activity.OurRef = $"E{Activity.OurRef}"; + } // begin lines Activity.Lines = new List(); var ln = 0; @@ -507,11 +516,18 @@ public partial class AdvisorActivityCreatePage : IDisposable private void ShowOrgWarning() { - if (Kanvas) return; - if (OrgWarning) return; + if (Kanvas) + { + return; + } + if (OrgWarning) + { + return; + } OrgWarning = true; - if (Company.CountryCode.ToLower() == "se" && Utils.StringToDigits(Activity.VatNumber).Length < 10 && - Activity.ActivityStatusEnum == "order") + if (Company.CountryCode.ToLower() == "se" + && Utils.StringToDigits(Activity.VatNumber).Length < 10 + && Activity.ActivityStatusEnum == "order") { Toaster.ShowWarning("Org nummer er ufuldstændig. Skal opdateres før bestilling kan sendes. "); } @@ -547,7 +563,9 @@ public partial class AdvisorActivityCreatePage : IDisposable // add it to the cart DraftProvider.Draft.Items.Add(item); if (Activity.ActivityStatusEnum != "quote") + { Activity.ActivityStatusEnum = "order"; + } // save the item using the CartStateProvider's save method await DraftProvider.SaveChangesAsync(); } @@ -560,7 +578,9 @@ public partial class AdvisorActivityCreatePage : IDisposable // save the remaining draft await DraftProvider.SaveChangesAsync(); if (!DraftProvider.Draft.Items.Any()) + { Activity.ActivityStatusEnum = "noSale"; + } } @@ -581,15 +601,19 @@ public partial class AdvisorActivityCreatePage : IDisposable { "nosale" => "Gem Besøg", "order" => "Send Bestilling", - "quote" => "Send Tilbud" + "quote" => "Send Tilbud", + _ => throw new ArgumentOutOfRangeException() }; // InvalidCanvas = InvalidActivityType; InvalidActivity = InvalidActivityType || PoFormInvalid || DraftProvider.Draft.Items.Count == 0 - || (Activity.ActivityStatusEnum == "offer" && string.IsNullOrWhiteSpace(Activity.Email)); - if (Activity.YourRef.Length > 35 || Activity.ReferenceNumber.Length > 20 || InvalidActivity) + || (Activity.ActivityStatusEnum == "offer" + && string.IsNullOrWhiteSpace(Activity.Email)); + if (Activity.YourRef.Length > 35 + || Activity.ReferenceNumber.Length > 20 + || InvalidActivity) { PoFormInvalid = true; return; diff --git a/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor b/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor index 4f809794..b99839b6 100644 --- a/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor +++ b/Wonky.Client/Pages/AdvisorCustomerInventoryListPage.razor @@ -24,10 +24,10 @@

@Company.Name

-
+ - diff --git a/Wonky.Client/Pages/AdvisorCustomerViewEditPage.razor b/Wonky.Client/Pages/AdvisorCustomerViewEditPage.razor index 49e121a0..144a7879 100644 --- a/Wonky.Client/Pages/AdvisorCustomerViewEditPage.razor +++ b/Wonky.Client/Pages/AdvisorCustomerViewEditPage.razor @@ -309,15 +309,13 @@
-
- @if (AppInfo.Value.Rc) - { -
- +
+ @if (AppInfo.Value.Rc) + { + Kemi Dokumentationr + }
- } +
} } diff --git a/Wonky.Client/Pages/AdvisorCustomerWorkplaceListPage.razor b/Wonky.Client/Pages/AdvisorCustomerWorkplaceListPage.razor index 9a7aacbe..46c0b0d8 100644 --- a/Wonky.Client/Pages/AdvisorCustomerWorkplaceListPage.razor +++ b/Wonky.Client/Pages/AdvisorCustomerWorkplaceListPage.razor @@ -18,7 +18,8 @@ @using Wonky.Client.Components @attribute [Authorize(Roles = "Advisor")] @page "/advisor/customers/{CompanyId}/workplaces" -@Company.Name arbejdssteder + +Arbejdssteder - @Company.Name
@@ -26,7 +27,7 @@

@Company.Name

-
NY
+ NY
diff --git a/Wonky.Client/Pages/AdvisorCustomerWorkplaceListPage.razor.cs b/Wonky.Client/Pages/AdvisorCustomerWorkplaceListPage.razor.cs index 06805ca1..81fbaaa3 100644 --- a/Wonky.Client/Pages/AdvisorCustomerWorkplaceListPage.razor.cs +++ b/Wonky.Client/Pages/AdvisorCustomerWorkplaceListPage.razor.cs @@ -19,35 +19,47 @@ using Wonky.Client.HttpInterceptors; using Wonky.Client.HttpRepository; using Wonky.Entity.DTO; using Wonky.Entity.Views; + #pragma warning disable CS8618 namespace Wonky.Client.Pages; public partial class AdvisorCustomerWorkplaceListPage : IDisposable { - [Parameter] public string CompanyId { get; set; } = ""; + // ############################################################### [Inject] public IAdvisorWorkplaceRepository WorkplaceRepo { get; set; } [Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; } [Inject] public HttpInterceptorService Interceptor { get; set; } + + // ############################################################### + [Parameter] public string CompanyId { get; set; } = ""; + + // ############################################################### private List Workplaces { get; set; } = new(); private CompanyDto Company { get; set; } = new(); private bool Working { get; set; } = true; - protected override async Task OnParametersSetAsync() - { - Interceptor.RegisterEvent(); - Interceptor.RegisterBeforeSendEvent(); - Company = await CustomerRepo.GetCompanyById(CompanyId); - Working = false; - } protected override async Task OnInitializedAsync() { - Working = true; + Interceptor.RegisterEvent(); + Interceptor.RegisterBeforeSendEvent(); + + Company = await CustomerRepo.GetCompanyById(CompanyId); + + await Task.Delay(150); + Workplaces = await WorkplaceRepo.GetWorkplaces(CompanyId); + Working = false; + } + private async Task> GetWorkplaces() + { + return await WorkplaceRepo.GetWorkplaces(CompanyId); + } + public void Dispose() { Interceptor.DisposeEvent(); diff --git a/Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor b/Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor new file mode 100644 index 00000000..01be7c33 --- /dev/null +++ b/Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor @@ -0,0 +1,114 @@ +@* 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] +*@ + +@attribute [Authorize(Roles = "Advisor")] +@page "/advisor/customers/{CompanyId}/workplaces/new" +@using Microsoft.AspNetCore.Authorization + +Opret arbejdssted - @Company.Name +
+
+
+
+

Opret arbejdssted for @Company.Name

+
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Stamdata

+
Navn + + + Beskrivelse + + +
+

Placering og Opbevaring

+
Produkter + + + Øjenskylleflaske + + +
Masker + + + Førstehjælp + + +
Handsker + + +
Sikkerhedsbriller + + + Affald + + +
+
+
+ +
+
+
+
+
\ No newline at end of file diff --git a/Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor.cs b/Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor.cs new file mode 100644 index 00000000..246d5587 --- /dev/null +++ b/Wonky.Client/Pages/AdvisorCustomerWorkplaceNew.razor.cs @@ -0,0 +1,107 @@ +// 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.Text.Json; +using Blazored.Toast.Services; +using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Forms; +using Wonky.Client.HttpInterceptors; +using Wonky.Client.HttpRepository; +using Wonky.Entity.DTO; + +namespace Wonky.Client.Pages; + +#pragma warning disable CS8618 + +public partial class AdvisorCustomerWorkplaceNew : IDisposable +{ + // ############################################################### + [Inject] public HttpInterceptorService Interceptor { get; set; } + [Inject] public IAdvisorCustomerRepository CustomerRepo { get; set; } + [Inject] public IAdvisorWorkplaceRepository WorkplaceRepo { get; set; } + [Inject] public IToastService Toaster { get; set; } + [Inject] public ILogger Logger { get; set; } + + // ############################################################### + [Parameter] public string CompanyId { get; set; } = ""; + + + // ############################################################### + private WorkplaceDto Workplace { get; set; } = new(); + private EditContext FormContext { get; set; } + private CompanyDto Company { get; set; } = new(); + private bool FormInvalid { get; set; } = true; + private bool Working { get; set; } = true; + + + protected override async Task OnInitializedAsync() + { + Interceptor.RegisterEvent(); + Interceptor.RegisterBeforeSendEvent(); + + FormContext = new EditContext(Workplace); + + FormContext.OnFieldChanged += HandleFieldChanged!; + FormContext.OnValidationStateChanged += ValidationChanged!; + + // get company + Company = await GetCompany(CompanyId); + while (string.IsNullOrWhiteSpace(Company.CompanyId)) + { + await Task.Delay(150); + } + Working = false; + } + + private async Task GetCompany(string companyId) + { + return await CustomerRepo.GetCompanyById(companyId); + } + + private async Task SubmitWorkplace() + { + Logger.LogDebug("CompanyId {}", JsonSerializer.Serialize(Workplace)); + Logger.LogDebug("Workplace {}", JsonSerializer.Serialize(Workplace, new JsonSerializerOptions(JsonSerializerDefaults.Web))); + var result = await WorkplaceRepo.CreateWorkplace(CompanyId, Workplace); + Logger.LogDebug("HTTP result {}", result); + } + + private void HandleFieldChanged(object sender, FieldChangedEventArgs e) + { + + FormInvalid = !FormContext.Validate(); + + StateHasChanged(); + } + + + private void ValidationChanged(object sender, ValidationStateChangedEventArgs e) + { + FormInvalid = false; + FormContext.OnFieldChanged -= HandleFieldChanged!; + FormContext.OnValidationStateChanged -= ValidationChanged!; + FormContext = new EditContext(Workplace); + FormContext.OnFieldChanged += HandleFieldChanged!; + FormContext.OnValidationStateChanged += ValidationChanged!; + } + + + public void Dispose() + { + Interceptor.DisposeEvent(); + FormContext.OnFieldChanged -= HandleFieldChanged!; + FormContext.OnValidationStateChanged -= ValidationChanged!; + } +} \ No newline at end of file diff --git a/Wonky.Client/Pages/AdvisorCustomerWorkplaceViewEditPage.razor b/Wonky.Client/Pages/AdvisorCustomerWorkplaceViewEditPage.razor index f110f102..a1406bd2 100644 --- a/Wonky.Client/Pages/AdvisorCustomerWorkplaceViewEditPage.razor +++ b/Wonky.Client/Pages/AdvisorCustomerWorkplaceViewEditPage.razor @@ -28,84 +28,81 @@
- - - - + + + - + - + + - + - - + - - - -
- Stamdata -
+

Stamdata

+
Navn - + Beskrivelse - +
Placering og Opbevaring +

Placering og Opbevaring

+
Produkter - + Øjenskylleflaske + + +
Masker - + ØjenskylleflaskeFørstehjælp - - + +
Handsker - + Førstehjælp - - -
Sikkerhedsbriller - +
Affald - +
- +
diff --git a/Wonky.Client/Pages/SupervisorDocumentNewPage.razor.cs b/Wonky.Client/Pages/SupervisorDocumentNewPage.razor.cs index b3d6a4b9..1d270281 100644 --- a/Wonky.Client/Pages/SupervisorDocumentNewPage.razor.cs +++ b/Wonky.Client/Pages/SupervisorDocumentNewPage.razor.cs @@ -94,8 +94,9 @@ public partial class SupervisorDocumentNewPage : IDisposable else { Toaster.ShowSuccess("Ok"); - Navigator.NavigateTo("/supervisor/advisors/{AdvisorId}/documents/{x.DocumentId}"); + Navigator.NavigateTo($"/supervisor/advisors/{AdvisorId}/documents/{x.DocumentId}"); } + Toaster.ClearAll(); } private void HandleFieldChanged(object sender, FieldChangedEventArgs e) @@ -107,11 +108,7 @@ public partial class SupervisorDocumentNewPage : IDisposable StateHasChanged(); } - /// - /// Validation change event - /// - /// - /// + private void ValidationChanged(object sender, ValidationStateChangedEventArgs e) { FormInvalid = false; @@ -121,14 +118,12 @@ public partial class SupervisorDocumentNewPage : IDisposable FormContext.OnFieldChanged += HandleFieldChanged!; FormContext.OnValidationStateChanged += ValidationChanged!; } - - - + + public void Dispose() { Interceptor.DisposeEvent(); FormContext.OnFieldChanged -= HandleFieldChanged!; FormContext.OnValidationStateChanged -= ValidationChanged!; - } } \ No newline at end of file diff --git a/Wonky.Client/wwwroot/appsettings.json b/Wonky.Client/wwwroot/appsettings.json index 59954191..7a412f41 100644 --- a/Wonky.Client/wwwroot/appsettings.json +++ b/Wonky.Client/wwwroot/appsettings.json @@ -1,8 +1,8 @@ { "appInfo": { "name": "Wonky Online", - "version": "138.5", - "rc": false, + "version": "139.0", + "rc": true, "sandBox": false, "image": "grumpy-coder.png" }, @@ -19,7 +19,7 @@ } }, "apiConfig": { - "baseUrl": "https://zeta.innotec.dk", + "baseUrl": "https://dev.innotec.dk", "catalog": "api/v2/catalog/country", "crmCustomers": "api/v2/crm/companies", "crmInventoryExt": "history/inventory",