Initial Commit

This commit is contained in:
FH 2022-02-21 18:08:26 +01:00
parent 4723485ee5
commit ba080b074a
19 changed files with 409 additions and 0 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
/bin/**/**
/obj/**/**
/App_Data/**/**

58
CvrModels/CvrCompany.cs Normal file
View file

@ -0,0 +1,58 @@
// ***********************************************************************
// Assembly : Inno.Api
// Author : FH
// Created : 01-01-2022
//
// Last Modified By : FH
// Last Modified On : 01-31-2022
// ***********************************************************************
// <copyright file="CvrCompany.cs" company="FCS">
// Copyright © FCS 2015-2022
// </copyright>
// <summary></summary>
// ***********************************************************************
namespace FCS.Virk.CvrModels
{
/// <summary>
/// Class CvrCompany.
/// </summary>
public class CvrCompany
{
/// <summary>
/// Gets or sets the vat number.
/// </summary>
/// <value>The vat number.</value>
public string VatNumber { get; set; } = "";
/// <summary>
/// Gets or sets the name.
/// </summary>
/// <value>The name.</value>
public string Name { get; set; } = "";
/// <summary>
/// Gets or sets the name of the co.
/// </summary>
/// <value>The name of the co.</value>
public string CoName { get; set; } = "";
/// <summary>
/// Gets or sets the address.
/// </summary>
/// <value>The address.</value>
public string Address { get; set; } = "";
/// <summary>
/// Gets or sets the city.
/// </summary>
/// <value>The city.</value>
public string City { get; set; } = "";
/// <summary>
/// Gets or sets the zip code.
/// </summary>
/// <value>The zip code.</value>
public string ZipCode { get; set; } = "";
/// <summary>
/// Gets or sets the status.
/// </summary>
/// <value>The status.</value>
public List<CvrStatus> Status { get; set; } = new();
}
}

32
CvrModels/CvrPeriod.cs Normal file
View file

@ -0,0 +1,32 @@
// ***********************************************************************
// Assembly : Inno.Api
// Author : FH
// Created : 01-01-2022
//
// Last Modified By : FH
// Last Modified On : 01-09-2022
// ***********************************************************************
// <copyright file="CvrPeriod.cs" company="FCS">
// Copyright © FCS 2015-2022
// </copyright>
// <summary></summary>
// ***********************************************************************
namespace FCS.Virk.CvrModels
{
/// <summary>
/// Class CvrPeriod.
/// </summary>
public class CvrPeriod
{
/// <summary>
/// Gets or sets the start date.
/// </summary>
/// <value>The start date.</value>
public string StartDate { get; set; } = "";
/// <summary>
/// Gets or sets the end date.
/// </summary>
/// <value>The end date.</value>
public string EndDate { get; set; } = "";
}
}

37
CvrModels/CvrStatus.cs Normal file
View file

@ -0,0 +1,37 @@
// ***********************************************************************
// Assembly : Inno.Api
// Author : FH
// Created : 01-01-2022
//
// Last Modified By : FH
// Last Modified On : 01-31-2022
// ***********************************************************************
// <copyright file="CvrStatus.cs" company="FCS">
// Copyright © FCS 2015-2022
// </copyright>
// <summary></summary>
// ***********************************************************************
namespace FCS.Virk.CvrModels
{
/// <summary>
/// Class CvrStatus.
/// </summary>
public class CvrStatus
{
/// <summary>
/// Gets or sets the last update.
/// </summary>
/// <value>The last update.</value>
public string LastUpdate { get; set; } = "";
/// <summary>
/// Gets or sets the status.
/// </summary>
/// <value>The status.</value>
public string Status { get; set; } = "LUKKET";
/// <summary>
/// Gets or sets the period.
/// </summary>
/// <value>The period.</value>
public CvrPeriod Period { get; set; } = new();
}
}

18
FCS.Virk.csproj Normal file
View file

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<LangVersion>10.0</LangVersion>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net48</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Net.Http" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,2 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp90</s:String></wpf:ResourceDictionary>

37
VrCvrMapper.cs Normal file
View file

@ -0,0 +1,37 @@
using FCS.Virk.CvrModels;
using FCS.Virk.VrModels;
namespace FCS.Virk
{
public class VrCvrMapper
{
public CvrCompany MapVrToCvr(VrVirksomhed vrVirk)
{
var c = new CvrCompany
{
Name = vrVirk.VirksomhedMetadata.NyesteNavn.Navn,
Address =
$"{vrVirk.VirksomhedMetadata.NyesteBeliggenhedsadresse.Vejnavn} {vrVirk.VirksomhedMetadata.NyesteBeliggenhedsadresse.HusnummerFra}",
CoName = vrVirk.VirksomhedMetadata.NyesteBeliggenhedsadresse.CoNavn,
ZipCode = vrVirk.VirksomhedMetadata.NyesteBeliggenhedsadresse.Postnummer.ToString(),
City = vrVirk.VirksomhedMetadata.NyesteBeliggenhedsadresse.PostDistrikt,
VatNumber = vrVirk.CvrNummer
};
foreach (var cs in vrVirk.VirksomhedsStatus.Select(vrStatus => new CvrStatus
{
Status = vrStatus.Status,
LastUpdate = vrStatus.SidstOpdateret,
Period = new CvrPeriod
{
StartDate = vrStatus.Periode.GyldigFra,
EndDate = vrStatus.Periode.GyldigTil
}
}))
{
c.Status.Add(cs);
}
return c;
}
}
}

30
VrHttpRequest.cs Normal file
View file

@ -0,0 +1,30 @@
using System.Net.Http.Headers;
using System.Text;
namespace FCS.Virk
{
public class VrHttpRequest
{
public async Task<VrResponseView> GetResponseAsync(string endpoint, string jsonData, string auth)
{
using var content = new StringContent(jsonData, Encoding.UTF8, "application/json");
using var client = new HttpClient();
using var vrRequest = new HttpRequestMessage(HttpMethod.Post, endpoint);
vrRequest.Headers.Authorization = new AuthenticationHeaderValue("Basic", $"{auth}");
vrRequest.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
vrRequest.Content = content;
var response = await client.SendAsync(vrRequest).ConfigureAwait(true);
var jsonResult = await response.Content.ReadAsStringAsync().ConfigureAwait(true);
return new VrResponseView
{
Code = response.StatusCode,
IsSuccessStatusCode = response.IsSuccessStatusCode,
Message = jsonResult
};
}
}
}

View file

@ -0,0 +1,12 @@
namespace FCS.Virk.VrModels
{
public class NyesteBeliggenhedsadresse
{
public int? HusnummerFra { get; set; }
public int? HusnummerTil { get; set; }
public int? Postnummer { get; set; }
public string Vejnavn { get; set; } = "";
public string CoNavn { get; set; } = "";
public string PostDistrikt { get; set; } = "";
}
}

7
VrModels/NyesteNavn.cs Normal file
View file

@ -0,0 +1,7 @@
namespace FCS.Virk.VrModels
{
public class NyesteNavn
{
public string Navn { get; set; } = "";
}
}

8
VrModels/Periode.cs Normal file
View file

@ -0,0 +1,8 @@
namespace FCS.Virk.VrModels
{
public class Periode
{
public string GyldigFra { get; set; } = "";
public string GyldigTil { get; set; } = "";
}
}

View file

@ -0,0 +1,8 @@
namespace FCS.Virk.VrModels
{
public class VirksomhedMetadata
{
public NyesteNavn NyesteNavn { get; set; } = new();
public NyesteBeliggenhedsadresse NyesteBeliggenhedsadresse { get; set; } = new();
}
}

View file

@ -0,0 +1,9 @@
namespace FCS.Virk.VrModels
{
public class VirksomhedsStatus
{
public string SidstOpdateret { get; set; } = "";
public string Status { get; set; } = "";
public Periode Periode { get; set; } = new();
}
}

10
VrModels/VrVirksomhed.cs Normal file
View file

@ -0,0 +1,10 @@
namespace FCS.Virk.VrModels
{
public class VrVirksomhed
{
public string CvrNummer { get; set; } = "";
public List<VirksomhedsStatus> VirksomhedsStatus { get; set; } = new ();
public VirksomhedMetadata VirksomhedMetadata { get; set; } = new();
}
}

10
VrQuery.cs Normal file
View file

@ -0,0 +1,10 @@
namespace FCS.Virk
{
public class VrQuery
{
public string VatNumber { get; set; } = "";
public string StreetName { get; set; } = "";
public string HouseNumber { get; set; } = "";
public string ZipCode { get; set; } = "";
}
}

66
VrQueryMapper.cs Normal file
View file

@ -0,0 +1,66 @@
using Newtonsoft.Json.Linq;
namespace FCS.Virk
{
public class VrQueryMapper
{
public JObject VrMapQuery(VrQuery query)
{
if (string.IsNullOrWhiteSpace(query.VatNumber))
{
return new JObject(
new JProperty("_source",
new JArray(
"Vrvirksomhed.cvrNummer",
"Vrvirksomhed.virksomhedMetadata.nyesteNavn.navn",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.conavn",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.vejnavn",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.husnummerFra",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.husnummerTil",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.postnummer",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.postdistrikt",
"Vrvirksomhed.virksomhedsstatus")
),
new JProperty("query",
new JObject(new JProperty("bool",
new JObject(new JProperty("must",
new JArray(
new JObject(new JProperty("match",
new JObject(new JProperty(
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.postnummer",
new JObject(new JProperty("query", query.ZipCode),
new JProperty("_name", "postnummer")))))),
new JObject(new JProperty("match",
new JObject(new JProperty(
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.vejnavn",
new JObject(new JProperty("query", query.StreetName),
new JProperty("_name", "vejnavn")))))),
new JObject(new JProperty("match",
new JObject(new JProperty(
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.husnummerFra",
new JObject(new JProperty("query", query.HouseNumber),
new JProperty("_name", "husnummerFra"))))))
)))))),
new JProperty("size", 50));
}
return new JObject(
new JProperty("_source",
new JArray(
"Vrvirksomhed.cvrNummer",
"Vrvirksomhed.virksomhedMetadata.nyesteNavn.navn",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.conavn",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.vejnavn",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.husnummerFra",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.husnummerTil",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.postnummer",
"Vrvirksomhed.virksomhedMetadata.nyesteBeliggenhedsadresse.postdistrikt",
"Vrvirksomhed.virksomhedsstatus")
),
new JProperty("query",
new JObject(new JProperty("term",
new JObject(new JProperty("Vrvirksomhed.cvrNummer", query.VatNumber))))));
}
}
}

15
VrQueryValidator.cs Normal file
View file

@ -0,0 +1,15 @@
namespace FCS.Virk
{
public static class VrQueryValidator
{
public static bool ValidateVrQuery(VrQuery query)
{
// Precise lookup
if (!string.IsNullOrEmpty(query.VatNumber)) return true;
// Search lookup
return !string.IsNullOrWhiteSpace(query.StreetName)
&& !string.IsNullOrWhiteSpace(query.HouseNumber)
&& !string.IsNullOrEmpty(query.ZipCode);
}
}
}

36
VrResponseParser.cs Normal file
View file

@ -0,0 +1,36 @@
using FCS.Virk.VrModels;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace FCS.Virk
{
public class VrResponseParser
{
public List<VrVirksomhed?> ParseVrResponse(string jsonData)
{
var result = new List<VrVirksomhed?>();
var cvrObject = JObject.Parse(jsonData);
var numHits = (int) cvrObject.SelectToken("hits")?.SelectToken("total")!;
if (numHits == 0)
return result;
var cvrHits = cvrObject.SelectToken("hits")?.SelectToken("hits");
for (var i = 0; i < numHits; i++)
{
var cObject = cvrHits?[i]?["_source"] != null ? (JObject?)cvrHits[i]?["_source"]?["Vrvirksomhed"] : null;
var jsonString = JsonConvert.SerializeObject(cObject);
var o = JsonConvert.DeserializeObject<VrVirksomhed>(jsonString);
result.Add(o);
}
return result;
}
}
}

11
VrResponseView.cs Normal file
View file

@ -0,0 +1,11 @@
using System.Net;
namespace FCS.Virk
{
public class VrResponseView
{
public HttpStatusCode Code { get; set; }
public bool IsSuccessStatusCode { get; set; }
public string Message { get; set; } = "";
}
}