From 341e254071c6591eee66952f171baa1b432de67c Mon Sep 17 00:00:00 2001 From: Frede Hundewadt Date: Sun, 20 Nov 2022 15:16:58 +0100 Subject: [PATCH] adding http repos for endpoint splitting --- Wonky.Client/Helpers/VatUtils.cs | 33 +- .../ICrmCompanyHttpRepository.cs | 3 + .../CrmCompanyHttpRepository.cs | 47 +- Wonky.Client/Pages/CrmCompanyViewPage.razor | 410 +++++++++--------- .../Pages/CrmCompanyViewPage.razor.cs | 111 +++-- Wonky.Client/Shared/ContactModal.razor | 15 +- Wonky.Client/wwwroot/appsettings.json | 4 +- 7 files changed, 362 insertions(+), 261 deletions(-) diff --git a/Wonky.Client/Helpers/VatUtils.cs b/Wonky.Client/Helpers/VatUtils.cs index 2f9c6b5f..83f77e9b 100644 --- a/Wonky.Client/Helpers/VatUtils.cs +++ b/Wonky.Client/Helpers/VatUtils.cs @@ -13,6 +13,8 @@ // along with this program. If not, see [https://www.gnu.org/licenses/agpl-3.0.en.html] // +using System.Globalization; + namespace Wonky.Client.Helpers; public class VatUtils @@ -22,18 +24,24 @@ public class VatUtils public static bool ValidateFormat(string countryCode, string vatNumber) { - if (string.IsNullOrWhiteSpace(vatNumber) || string.IsNullOrWhiteSpace(countryCode)) + if (string.IsNullOrWhiteSpace(vatNumber) || string.IsNullOrWhiteSpace(countryCode) || !IsDigitsOnly(vatNumber)) return false; + var sanitisedVat = SanitizeVatNumber(vatNumber); + return countryCode.ToUpperInvariant() switch { - "DK" => ValidateFormatDk(vatNumber), - "NO" => ValidateFormatNo(vatNumber), - "SE" => ValidateFormatSe(vatNumber), + "DK" => ValidateFormatDk(sanitisedVat), + "NO" => ValidateFormatNo(sanitisedVat), + "SE" => ValidateFormatSe(sanitisedVat), _ => false }; } + private static bool IsDigitsOnly(string check) + { + return check.All(c => c is >= '0' and <= '9'); + } private static bool ValidateFormatDk(string vatNumber) { // https://wiki.scn.sap.com/wiki/display/CRM/Denmark @@ -42,12 +50,11 @@ public class VatUtils // C8 check-digit MOD11 // C1 > 0 // R = (2*C1 + 7*C2 + 6*C3 + 5*C4 + 4*C5 + 3*C6 + 2*C7 + C8) - var vatToCheck = SanitizeVatNumber(vatNumber); - if (vatToCheck.Length != 8) + if (vatNumber.Length != 8) return false; - if ((int)char.GetNumericValue(vatToCheck[0]) < 1 || vatToCheck.Length > 8) + if ((int)char.GetNumericValue(vatNumber[0]) < 1 || vatNumber.Length > 8) return false; - return ValidateMod11(vatToCheck); + return ValidateMod11(vatNumber); } private static bool ValidateFormatNo(string vatNumber) @@ -57,10 +64,9 @@ public class VatUtils // C1..C8 random 0 to 9 // C9 check-digit MOD11 // C10 C11 C12 chars == MVA - var vatToCheck = SanitizeVatNumber(vatNumber); - if (vatToCheck.Length != 9) + if (vatNumber.Length != 9) return false; - return long.Parse(vatToCheck) != 0 && ValidateMod11(vatNumber); + return long.Parse(vatNumber) != 0 && ValidateMod11(vatNumber); } private static bool ValidateFormatSe(string vatNumber) @@ -72,7 +78,7 @@ public class VatUtils // Si = int(Ci/5) + (Ci*2)MOD10) // https://www.skatteverket.se/skatter/mervardesskattmoms/momsregistreringsnummer.4.18e1b10334ebe8bc80002649.html // C11 C12 == 01 (De två sista siffrorna är alltid 01) - var vatToCheck = SanitizeVatNumber(vatNumber); + var vatToCheck = vatNumber; if (vatToCheck.Length < 10 || long.Parse(vatToCheck) == 0) return false; @@ -104,8 +110,7 @@ public class VatUtils private static string SanitizeVatNumber(string vatNumber) { - vatNumber = vatNumber.ToUpperInvariant(); - return vatNumber + return vatNumber.ToUpperInvariant() .Replace(" ", "") .Replace("-", "") .Replace("DK", "") diff --git a/Wonky.Client/HttpInterfaces/ICrmCompanyHttpRepository.cs b/Wonky.Client/HttpInterfaces/ICrmCompanyHttpRepository.cs index 23b6dfb9..4292d62e 100644 --- a/Wonky.Client/HttpInterfaces/ICrmCompanyHttpRepository.cs +++ b/Wonky.Client/HttpInterfaces/ICrmCompanyHttpRepository.cs @@ -26,4 +26,7 @@ public interface ICrmCompanyHttpRepository Task CreateCompany(CompanyDto model); Task UpdateCompany(string companyId, CompanyDto model); Task DeleteCompany(string companyId); + Task UpdateCrmData(string companyId, CompanyDto model); + Task UpdateErpData(string companyId, CompanyDto model); + Task UpdateCompanyVat(string companyId, string vatNumber); } \ No newline at end of file diff --git a/Wonky.Client/HttpRepository/CrmCompanyHttpRepository.cs b/Wonky.Client/HttpRepository/CrmCompanyHttpRepository.cs index bdd10556..53699839 100644 --- a/Wonky.Client/HttpRepository/CrmCompanyHttpRepository.cs +++ b/Wonky.Client/HttpRepository/CrmCompanyHttpRepository.cs @@ -115,10 +115,9 @@ public class CrmCompanyHttpRepository : ICrmCompanyHttpRepository { var response = await _client.PutAsJsonAsync($"{_conf.CrmCustomers}/{companyId}", model); var content = await response.Content.ReadAsStringAsync(); - Console.WriteLine(content); return response.IsSuccessStatusCode; } - + /// /// Delete company /// @@ -129,4 +128,48 @@ public class CrmCompanyHttpRepository : ICrmCompanyHttpRepository var response = await _client.DeleteAsync($"{_conf.CrmCustomers}/{companyId}"); return response.IsSuccessStatusCode; } + + /// + /// Update Company CRM properties + /// + /// + /// + /// + public async Task UpdateCrmData(string companyId, CompanyDto model) + { + var response = await _client.PutAsJsonAsync($"{_conf.CrmCustomers}/{companyId}/crmData", model, _options); + var content = await response.Content.ReadAsStringAsync(); + return string.IsNullOrWhiteSpace(content) ? new CompanyDto() : JsonSerializer.Deserialize(content); + } + + /// + /// Update Company ERP properties + /// + /// + /// + /// + public async Task UpdateErpData(string companyId, CompanyDto model) + { + var response = await _client.PutAsJsonAsync($"{_conf.CrmCustomers}/{companyId}/erpData", model, _options); + var content = await response.Content.ReadAsStringAsync(); + return string.IsNullOrWhiteSpace(content) ? new CompanyDto() : JsonSerializer.Deserialize(content); + } + + /// + /// Update company VAT number + /// + /// + /// + /// + public async Task UpdateCompanyVat(string companyId, string vatNumber) + { + var model = new Dictionary + { + { "VatNumber", vatNumber } + }; + var response = await _client.PutAsJsonAsync($"{_conf.CrmCustomers}/{companyId}/vat", model, _options); + var content = await response.Content.ReadAsStringAsync(); + return string.IsNullOrWhiteSpace(content) ? new CompanyDto() : JsonSerializer.Deserialize(content); + } + } \ No newline at end of file diff --git a/Wonky.Client/Pages/CrmCompanyViewPage.razor b/Wonky.Client/Pages/CrmCompanyViewPage.razor index f54ce594..046a10e0 100644 --- a/Wonky.Client/Pages/CrmCompanyViewPage.razor +++ b/Wonky.Client/Pages/CrmCompanyViewPage.razor @@ -29,230 +29,236 @@

Ring til kontoret. Denne konto er spærret med kode '@Company.Blocked'

} -
-
+

@Company.Name

- @if (Dk) - { -
- - @if (VatInfos.Any()) - { - - - - - - - - - - - - @foreach (var info in VatInfos) - { - - - - - - - - } - -
CVR ORGNavnStatus
@info.VatNumber@info.Name@info.States[^1].State - - - -
- } -
- } - + -
-
- -
- @if (string.IsNullOrWhiteSpace(Company.Note)) - { - - } - else - { - - } - -
+
+ +
+ +
+ +
+ + +
+
-
- -
-
- - - - - -
-
- -
- -
+
+ +
+ +
+ +
+ + +
+
-
- -
- - -
- -
- - -
+
+ +
+ +
- -
- -
- - -
- -
- - -
-
- -
- -
- - -
- -
- - -
+ +
+ +
+
-
- -
- - -
- -
- - -
+
+ +
+ +
- -
- -
- - -
+ +
+ +
-
-
- -
-
- - - - -
-
- -
- -
- -
- - -
-
- -
- -
-
-
-
-
Stilling
-
Navn
-
Direkte
-
- -
-
-
- @if (Contacts.Any()) - { - @foreach (var contact in Contacts) - { -
-
-
@contact.JobTitle
-
@contact.FirstName @contact.LastName
-
@contact.PhoneDirect
-
- -
-
-
- } - } -
-
- -
- -
+
+ +
+ +
+ +
-