diff --git a/Wonky.Client/Helpers/VatUtils.cs b/Wonky.Client/Helpers/VatUtils.cs index 82f62dd6..d01aa955 100644 --- a/Wonky.Client/Helpers/VatUtils.cs +++ b/Wonky.Client/Helpers/VatUtils.cs @@ -51,7 +51,7 @@ public class VatUtils /// /// /// - private static string SanitizeVatNumber(string vatNumber) + public static string SanitizeVatNumber(string vatNumber) { if (string.IsNullOrWhiteSpace(vatNumber)) return ""; diff --git a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor index 5239b816..4d92e602 100644 --- a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor +++ b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor @@ -54,9 +54,9 @@ else -
- -
+
+ +
@@ -65,8 +65,8 @@ else
- -
+ +
@if (!string.IsNullOrEmpty(Activity.VatNumber) && !string.IsNullOrWhiteSpace(Activity.Address1) && Company.HasFolded == 0) @@ -99,64 +99,75 @@ else
}
-
-
- -
+ +
- -
+ +
-
-
- -
+ +
- -
+ +
-
-
- -
+ +
- -
+ +
-
-
- -
+ +
- -
+ +
+ + +
+
- + +
+
+ +
+
+ +
+
+ +
+
+ +
@* Draft lines in draft -----------------------------------------------------*@
@@ -280,31 +291,31 @@ else aria-labelledby="deliveryHeader" data-bs-parent="#crmActivity">
- +
- +
- +
- +
- +
diff --git a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs index b162c9dc..04df9dc7 100644 --- a/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs +++ b/Wonky.Client/Pages/AdvisorActivityCreatePage.razor.cs @@ -39,7 +39,7 @@ public partial class AdvisorActivityCreatePage : IDisposable [Inject] private ILogger Logger { get; set; } [Inject] private HttpInterceptorService Interceptor { get; set; } [Inject] private UserProfileService Profiles { get; set; } - [Inject] private IToastService Toast { get; set; } + [Inject] private IToastService Toaster { get; set; } [Inject] private NavigationManager Navigator { get; set; } [Inject] private ILocalStorageService Storage { get; set; } [Inject] private ICountryCatalogRepository Catalog { get; set; } @@ -153,6 +153,10 @@ public partial class AdvisorActivityCreatePage : IDisposable } Working = false; //StateHasChanged(); + if (Company.CountryCode.ToLower() == "se" && VatUtils.SanitizeVatNumber(Activity.VatNumber).Length < 10) + { + Toaster.ShowWarning("Organisationsnummer skal opdateres."); + } } private async Task CallConfirmProductCheckModel() @@ -181,17 +185,17 @@ public partial class AdvisorActivityCreatePage : IDisposable { Working = true; // pop a message - Toast.ShowError("Produkt gennemgang mangler. Vent mens produkt oversigt indlæses. Gå ikke væk fra siden!", "Produkt check ..."); + Toaster.ShowError("Produkt gennemgang mangler. Vent mens produkt oversigt indlæses. Gå ikke væk fra siden!", "Produkt check ..."); // product inventory has not been updated // send rpc call to sync ERP to CRM - Toast.ShowInfo("Vent mens data synkroniseres ...", "ERP til CRM ..."); + Toaster.ShowInfo("Vent mens data synkroniseres ...", "ERP til CRM ..."); var ts = await CustomerHistory.InvoiceErpToCrmRpc(CompanyId, Company.HistorySync); while (string.IsNullOrWhiteSpace(ts)) await Task.Delay(500); // save pDate await Storage.SetItemAsync($"{CompanyId}-pDate", ts); // request products from backend - Toast.ShowInfo("Vent mens produkt oversigt hentes", "CRM produkt liste"); + Toaster.ShowInfo("Vent mens produkt oversigt hentes", "CRM produkt liste"); CheckList = await CustomerHistory.FetchInventory(CompanyId); if(CheckList.Any()) @@ -211,6 +215,7 @@ public partial class AdvisorActivityCreatePage : IDisposable // Show CheckList modal ConfirmProductCheckModal.Show(); } + private async Task ConfirmProductCheckCallback() { ConfirmProductCheckModal.Hide(); @@ -297,26 +302,35 @@ public partial class AdvisorActivityCreatePage : IDisposable // avoid duplication if (Working) return; - // validate customer address1 - this is a required input + // validate customer address1 + // - this is a required input if (string.IsNullOrWhiteSpace(Activity.Address1)) { - Toast.ShowError("Kunde adresse er ufuldstændig."); + Toaster.ShowError("Kunde adresse er ufuldstændig."); return; } - // + // validate org number + // - this is a required input + // - must validate according to country rules. + if (!VatUtils.ValidateFormat(Company.CountryCode, Activity.VatNumber)) + { + Toaster.ShowError("Firma registreringsnummer er ikke korrekt."); + return; + } + // validate input according to status switch (Activity.ActivityStatusEnum) { // don't accept order with no lines case "order" when DraftProvider.Draft.Items.Count == 0: - Toast.ShowError("Ved bestilling skal der være en eller flere linjer i kladden."); + 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): - Toast.ShowError("Ved bestilling til ny kunde skal telefon nummer angives."); + Toaster.ShowError("Ved bestilling til ny kunde skal telefon nummer angives."); return; // verify email address is a valid address case "quote" when !Utils.IsValidEmail(Activity.Email): - Toast.ShowError("Ved tilbud skal en gyldig email adresse angives."); + Toaster.ShowError("Ved tilbud skal en gyldig email adresse angives."); return; } // raise working flag @@ -371,7 +385,7 @@ public partial class AdvisorActivityCreatePage : IDisposable // show result message if (result.IsSuccess) { - Toast.ShowSuccess($"{result.Message}", + Toaster.ShowSuccess($"{result.Message}", DraftProvider.Draft.Items.Count == 0 ? "Besøg er oprettet" : "Bestilling/Tilbud er oprettet"); await DeleteDraft(); Navigator.NavigateTo($"/advisor/customers"); @@ -380,7 +394,7 @@ public partial class AdvisorActivityCreatePage : IDisposable // lower working flag Working = false; // show error message - Toast.ShowError(result.Message, "ORDRE FEJL"); + Toaster.ShowError(result.Message, "ORDRE FEJL"); } /// @@ -481,7 +495,13 @@ public partial class AdvisorActivityCreatePage : IDisposable { if (string.IsNullOrEmpty(Activity.ActivityTypeEnum) && !ReportClosed) { - Toast.ShowWarning("Aktivitet type kan ikke være tom"); + Toaster.ShowWarning("Aktivitet type kan ikke være tom"); + PoFormInvalid = true; + return; + } + + if (Company.CountryCode.ToLower() == "se" && VatUtils.SanitizeVatNumber(Activity.VatNumber).Length < 10) + { PoFormInvalid = true; return; } diff --git a/Wonky.Client/wwwroot/appsettings.json b/Wonky.Client/wwwroot/appsettings.json index 93244270..e92f3a3a 100644 --- a/Wonky.Client/wwwroot/appsettings.json +++ b/Wonky.Client/wwwroot/appsettings.json @@ -1,13 +1,13 @@ { "appInfo": { "name": "Wonky Online", - "version": "0.103.xxx", + "version": "0.103.1", "rc": true, "sandBox": false, "image": "grumpy-coder.png" }, "apiConfig": { - "baseUrl": "https://dev.innotec.dk", + "baseUrl": "https://zeta.innotec.dk", "catalog": "api/v2/catalog/country", "crmCustomers": "api/v2/crm/companies", "crmInventoryExt": "history/inventory",