From 87f3f085ca37e271d58c638c22bbb025efc0ab00 Mon Sep 17 00:00:00 2001 From: mark stoker Date: Tue, 9 Apr 2024 17:41:41 +0200 Subject: [PATCH 01/21] wip --- .../klant/bedrijf/BedrijvenOverzichtRow.vue | 4 +- .../bedrijf/enricher/BedrijfEnrichContext.vue | 47 ++++++-- .../bedrijf/enricher/bedrijf-enricher.ts | 26 +++- .../bedrijf/service/UseGetOndernememing.ts | 5 +- .../bedrijf/service/UseSearchBedrijven.ts | 5 +- src/features/klant/bedrijf/types.ts | 6 + src/features/klant/service.ts | 111 +++++++++++++++--- src/features/klant/types.ts | 4 +- 8 files changed, 174 insertions(+), 34 deletions(-) diff --git a/src/features/klant/bedrijf/BedrijvenOverzichtRow.vue b/src/features/klant/bedrijf/BedrijvenOverzichtRow.vue index 1906609fb..07530f54e 100644 --- a/src/features/klant/bedrijf/BedrijvenOverzichtRow.vue +++ b/src/features/klant/bedrijf/BedrijvenOverzichtRow.vue @@ -39,7 +39,9 @@ type="button" title="Aanmaken" v-else - @click="result.create()" + @click=" + result.create(result.subjectType, result.subjectIdentificatie) + " /> diff --git a/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue b/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue index 135f3b6f5..29ef7f0ec 100644 --- a/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue +++ b/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue @@ -10,14 +10,13 @@ import type { Klant } from "../../types"; import { ensureKlantForVestigingsnummer } from "../../service"; const props = defineProps<{ record: Bedrijf | Klant }>(); -const [vestigingsnummer, klantData, handelsregisterData] = useEnrichedBedrijf( - () => props.record -); +const [bedrijfIdentificatie, klantData, handelsregisterData] = + useEnrichedBedrijf(() => props.record); const email = mapServiceData(klantData, (k) => k?.emailadres || ""); const telefoonnummer = mapServiceData( klantData, - (k) => k?.telefoonnummer || "" + (k) => k?.telefoonnummer || "", ); const getKlantUrl = (klant: Klant) => `/bedrijven/${klant.id}`; @@ -36,12 +35,12 @@ const organisatieIds = useOrganisatieIds(); const klantBedrijfsnaam = mapServiceData( klantData, - (k) => k?.bedrijfsnaam ?? "" + (k) => k?.bedrijfsnaam ?? "", ); const handelsBedrijfsnaam = mapServiceData( handelsregisterData, - (k) => k?.bedrijfsnaam ?? "" + (k) => k?.bedrijfsnaam ?? "", ); const bedrijfsnaam = computed(() => { @@ -60,17 +59,39 @@ const detailLink = computed(() => { }); const create = async () => { - if (!vestigingsnummer.value) throw new Error(); + //hier moeten we weten of de klant met een vestigingsnr of een ander id aangemaakt moet worden + //dus voor bedrijfIdentificatie moet door de enricher ook een ander ding teruggeveen kunnen worden + if (!bedrijfIdentificatie.value) throw new Error(); const bedrijfsnaam = handelsBedrijfsnaam.success ? handelsBedrijfsnaam.data : ""; const newKlant = await ensureKlantForVestigingsnummer( { - vestigingsnummer: vestigingsnummer.value, + vestigingsnummer: bedrijfIdentificatie.value, bedrijfsnaam, }, - organisatieIds.value[0] || "" + organisatieIds.value[0] || "", ); + + // let newKlant = null; + + // if (vestigingsnummer.value) { + // newKlant = await ensureKlantForVestigingsnummer( + // { + // vestigingsnummer: vestigingsnummer.value, + // bedrijfsnaam, + // }, + // organisatieIds.value[0] || "", + // ); + // } else { + // newKlant = await ensureKlantForNietNatuurlijkPersoon( + // { + // bedrijfsnaam, + // id: handelsregisterData..state..value, + // }, + // organisatieIds.value[0] || "", + // ); + // } const url = getKlantUrl(newKlant); router.push(url); }; @@ -79,11 +100,17 @@ const result: EnrichedBedrijf = reactive({ bedrijfsnaam, kvkNummer: mapServiceData(handelsregisterData, (h) => h?.kvkNummer ?? ""), postcodeHuisnummer: mapServiceData(handelsregisterData, (h) => - [h?.postcode, h?.huisnummer].join(" ") + [h?.postcode, h?.huisnummer].join(" "), ), email, telefoonnummer, detailLink, create, + + subjectType: mapServiceData(handelsregisterData, (h) => h?.subjectType ?? ""), + subjectIdentificatie: mapServiceData( + handelsregisterData, + (h) => h?.subjectIdentificatie ?? "", + ), }); diff --git a/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts b/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts index cd0a12487..e6820a7af 100644 --- a/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts +++ b/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts @@ -11,6 +11,28 @@ const isKlant = (klantOfBedrijf: Klant | Bedrijf): klantOfBedrijf is Klant => { export const useEnrichedBedrijf = combineEnrichers( useKlantByVestigingsnummer, useBedrijfByVestigingsnummer, - (either) => either.vestigingsnummer, - isKlant + GetId, //de property waarmee je het bijbehorende object in de andere bron gaat zoeken + isKlant, ); + +function GetId( + klantofbedrijf: Klant | Bedrijf, +): BedrijfSearchParameter | undefined { + if (klantofbedrijf.vestigingsnummer) { + return { vestigingsnummer: klantofbedrijf.vestigingsnummer }; + } else if (klantofbedrijf.kvkNummer) { toch moor dat ID?? + return { kvkNummer: klantofbedrijf.kvkNummer }; + } + return; +} + +export type BedrijfSearchParameter = + | { + vestigingsnummer: string; + } + | { + kvkNummer: string; + } + | { + innNnpId: string; + }; diff --git a/src/features/klant/bedrijf/service/UseGetOndernememing.ts b/src/features/klant/bedrijf/service/UseGetOndernememing.ts index d6c8e13ee..256e86086 100644 --- a/src/features/klant/bedrijf/service/UseGetOndernememing.ts +++ b/src/features/klant/bedrijf/service/UseGetOndernememing.ts @@ -1,13 +1,14 @@ import { ServiceResult, enforceOneOrZero } from "@/services"; import { searchBedrijvenInHandelsRegister } from "./shared/shared"; +import type { BedrijfSearchParameter } from "../enricher/bedrijf-enricher"; const zoekenUrl = "/api/kvk/v2/zoeken"; export const useBedrijfByVestigingsnummer = ( - getVestigingsnummer: () => string | undefined, + getId: () => BedrijfSearchParameter | undefined, ) => { const getUrl = () => { - const vestigingsnummer = getVestigingsnummer(); + const vestigingsnummer = getId(); if (!vestigingsnummer) return ""; const searchParams = new URLSearchParams(); searchParams.set("vestigingsnummer", vestigingsnummer); diff --git a/src/features/klant/bedrijf/service/UseSearchBedrijven.ts b/src/features/klant/bedrijf/service/UseSearchBedrijven.ts index 525712e08..ffa21028a 100644 --- a/src/features/klant/bedrijf/service/UseSearchBedrijven.ts +++ b/src/features/klant/bedrijf/service/UseSearchBedrijven.ts @@ -26,8 +26,9 @@ const getSearchBedrijvenUrl = ({ const params = new URLSearchParams(); params.set("pagina", page?.toString() ?? "1"); - params.set("type", "hoofdvestiging"); - params.append("type", "nevenvestiging"); + //todo: we willen ook niet natuurlijke personen zonder verstiging vinden, moeten we dat nog op bepaalde types filteren + //params.set("type", "hoofdvestiging"); + //params.append("type", "nevenvestiging"); const searchParams = bedrijfQueryDictionary[query.field](query.value); diff --git a/src/features/klant/bedrijf/types.ts b/src/features/klant/bedrijf/types.ts index 5ea1f20f2..46163eb90 100644 --- a/src/features/klant/bedrijf/types.ts +++ b/src/features/klant/bedrijf/types.ts @@ -11,6 +11,8 @@ export interface Bedrijf { huisletter?: string; huisnummertoevoeging?: string; woonplaats?: string; + + } export interface EnrichedBedrijf { @@ -19,6 +21,10 @@ export interface EnrichedBedrijf { postcodeHuisnummer: ServiceData; email: ServiceData; telefoonnummer: ServiceData; + + subjectType: ServiceData; + subjectIdentificatie: ServiceData; + create: () => Promise; detailLink: ServiceData<{ to: string; diff --git a/src/features/klant/service.ts b/src/features/klant/service.ts index 8e7c33025..d978f84fd 100644 --- a/src/features/klant/service.ts +++ b/src/features/klant/service.ts @@ -17,6 +17,7 @@ import { KlantType, } from "./types"; import { nanoid } from "nanoid"; +import type { BedrijfSearchParameter } from "./bedrijf/enricher/bedrijf-enricher"; type QueryParam = [string, string][]; @@ -28,7 +29,7 @@ type FieldParams = { const klantenBaseUrl = "/api/klanten/api/v1/klanten"; export function createKlantQuery( - args: KlantSearch + args: KlantSearch, ): KlantSearch { return args; } @@ -67,7 +68,7 @@ klantRootUrl.pathname = klantenBaseUrl; function getKlantSearchUrl( search: KlantSearch | undefined, subjectType: KlantType, - page: number | undefined + page: number | undefined, ) { if (!search?.query) return ""; @@ -147,7 +148,7 @@ function fetchKlantById(url: string) { export function useKlantById(id: Ref) { return ServiceResult.fromFetcher( () => getKlantIdUrl(id.value), - fetchKlantById + fetchKlantById, ); } @@ -182,7 +183,7 @@ function updateContactgegevens({ telefoonnummer, emailadres, }), - }) + }), ) .then(throwIfNotOk) .then(parseJson) @@ -202,13 +203,13 @@ export function useSearchKlanten({ getKlantSearchUrl( query.value, subjectType ?? KlantType.Persoon, - page.value + page.value, ); return ServiceResult.fromFetcher(getUrl, searchKlanten); } export function useKlantByBsn( - getBsn: () => string | undefined + getBsn: () => string | undefined, ): ServiceData { const getUrl = () => getKlantBsnUrl(getBsn()); @@ -227,7 +228,7 @@ export async function ensureKlantForBsn( }: { bsn: string; }, - bronorganisatie: string + bronorganisatie: string, ) { const bsnUrl = getKlantBsnUrl(bsn); const singleBsnId = getSingleBsnSearchId(bsn); @@ -267,19 +268,46 @@ export async function ensureKlantForBsn( return newKlant; } -const getKlantByVestigingsnummerUrl = (vestigingsnummer: string) => { - if (!vestigingsnummer) return ""; +const getUrlVoorGetKlantById = (ding: BedrijfSearchParameter | undefined) => { + if (!ding) { + return ""; + } + + if ("vestigingsnummer" in ding) { + if (!ding.vestigingsnummer) return ""; + const url = new URL(klantRootUrl); + url.searchParams.set("subjecBedrijf__vestinginsnummer", ding.vestigingsnummer); + url.searchParams.set("subjectType", KlantType.Bedrijf); + return url.toString(); + } else if ("kvkNummer" in ding) { + if (!ding.kvkNummer) return ""; + const url = new URL(klantRootUrl); + // url.searchParams.set("subjectNietnatuurlijkPersoon__nnNip", ding.nnNip); + url.searchParams.set("kvkNummer", ding.kvkNummer); + url.searchParams.set("subjectType", KlantType.NietNatuurlijkPersoon); + return url.toString(); + } else if ("innNnpId" in ding) { + if (!ding.innNnpId) return ""; + const url = new URL(klantRootUrl); + // url.searchParams.set("subjectNietnatuurlijkPersoon__nnNip", ding.nnNip); + url.searchParams.set("subjectNietNatuurlijkPersoon__innNnpId", ding.innNnpId); + url.searchParams.set("subjectType", KlantType.NietNatuurlijkPersoon); + return url.toString(); + } +}; + +const getKlantByNietNatuurlijkpersoonIdentifierUrl = (id: string) => { + if (!id) return ""; const url = new URL(klantRootUrl); - url.searchParams.set("subjectVestiging__vestigingsNummer", vestigingsnummer); - url.searchParams.set("subjectType", KlantType.Bedrijf); + url.searchParams.set("subjectNietNatuurlijkPersoon__innNnpId", id); //todo make arg instelbaar + url.searchParams.set("subjectType", KlantType.NietNatuurlijkPersoon); return url.toString(); }; export const useKlantByVestigingsnummer = ( - getVestigingsnummer: () => string | undefined + getId: () => BedrijfSearchParameter | undefined, ) => { - const getUrl = () => - getKlantByVestigingsnummerUrl(getVestigingsnummer() ?? ""); + const getUrl = () => getUrlVoorGetKlantById(getId()); const getUniqueId = () => { const url = getUrl(); @@ -299,9 +327,9 @@ export async function ensureKlantForVestigingsnummer( vestigingsnummer: string; bedrijfsnaam: string; }, - bronorganisatie: string + bronorganisatie: string, ) { - const url = getKlantByVestigingsnummerUrl(vestigingsnummer); + const url = getUrlVoorGetKlantById({vestigingsnummer: vestigingsnummer} ); const uniqueId = url && url + "_single"; if (!url || !uniqueId) throw new Error(); @@ -342,6 +370,57 @@ export async function ensureKlantForVestigingsnummer( return newKlant; } +export async function ensureKlantForNietNatuurlijkPersoon( + { + bedrijfsnaam, + id, + }: { + bedrijfsnaam: string; + id: string; + }, + bronorganisatie: string, +) { + const url = getKlantByNietNatuurlijkpersoonIdentifierUrl(id); + const uniqueId = url && url + "_single"; + + if (!url || !uniqueId) throw new Error(); + + const first = await searchSingleKlant(url); + + if (first) { + mutate(uniqueId, first); + const idUrl = getKlantIdUrl(first.id); + mutate(idUrl, first); + return first; + } + + const response = await fetchLoggedIn(klantRootUrl, { + method: "POST", + headers: { + "content-type": "application/json", + }, + body: JSON.stringify({ + bronorganisatie, + // TODO: WAT MOET HIER IN KOMEN? + klantnummer: nanoid(8), + subjectIdentificatie: { innNnpId: id }, //todo innNnpId variabel maken + subjectType: KlantType.NietNatuurlijkPersoon, + bedrijfsnaam, + }), + }); + + if (!response.ok) throw new Error(); + + const json = await response.json(); + const newKlant = mapKlant(json); + const idUrl = getKlantIdUrl(newKlant.id); + + mutate(idUrl, newKlant); + mutate(uniqueId, newKlant); + + return newKlant; +} + export function createKlant({ telefoonnummer = "", emailadres = "", diff --git a/src/features/klant/types.ts b/src/features/klant/types.ts index e8724f00b..052193080 100644 --- a/src/features/klant/types.ts +++ b/src/features/klant/types.ts @@ -11,13 +11,15 @@ export interface Klant { emailadres?: string; bsn?: string; bedrijfsnaam?: string; - vestigingsnummer?: string; + vestigingsnummer?: string; //als de klant een Kvk klant is, dan gebruiken we dit gegeven om het klantenregistern en de kvk te kunnen matchen. Als het een bedrijf betreft url?: string; + kvkNummer?: string; //als de klant een Kvk klant is, dan gebruiken we dit gegeven om het klantenregistern en de kvk te kunnen matchen. Als het een kvk entiteit zonder vestiging betreft } export enum KlantType { Persoon = "natuurlijk_persoon", Bedrijf = "vestiging", + NietNatuurlijkPersoon = "niet_natuurlijk_persoon", } export interface Contactverzoek { From 56164660b8c25f690e4f1f6644c44064031bdd45 Mon Sep 17 00:00:00 2001 From: mark stoker Date: Tue, 9 Apr 2024 23:04:11 +0200 Subject: [PATCH 02/21] wip --- .../klant/bedrijf/BedrijvenOverzichtRow.vue | 4 +- .../bedrijf/enricher/BedrijfEnrichContext.vue | 37 ++++++-- .../bedrijf/enricher/bedrijf-enricher.ts | 12 +-- .../bedrijf/service/UseGetOndernememing.ts | 31 +++++-- .../klant/bedrijf/service/shared/shared.ts | 40 +++++++++ src/features/klant/bedrijf/types.ts | 8 +- src/features/klant/service.ts | 87 +++++++++++++++++-- src/features/klant/types.ts | 3 +- src/services/service-data-enricher.ts | 10 +-- 9 files changed, 193 insertions(+), 39 deletions(-) diff --git a/src/features/klant/bedrijf/BedrijvenOverzichtRow.vue b/src/features/klant/bedrijf/BedrijvenOverzichtRow.vue index 07530f54e..1906609fb 100644 --- a/src/features/klant/bedrijf/BedrijvenOverzichtRow.vue +++ b/src/features/klant/bedrijf/BedrijvenOverzichtRow.vue @@ -39,9 +39,7 @@ type="button" title="Aanmaken" v-else - @click=" - result.create(result.subjectType, result.subjectIdentificatie) - " + @click="result.create()" /> diff --git a/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue b/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue index 29ef7f0ec..7da222fac 100644 --- a/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue +++ b/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue @@ -59,15 +59,40 @@ const detailLink = computed(() => { }); const create = async () => { + // console.log("-------"); + // if (klantData.success && handelsregisterData.success) { + // console.log( + + // handelsregisterData.data, + // ); + // } + // console.log("-------"); + //hier moeten we weten of de klant met een vestigingsnr of een ander id aangemaakt moet worden //dus voor bedrijfIdentificatie moet door de enricher ook een ander ding teruggeveen kunnen worden if (!bedrijfIdentificatie.value) throw new Error(); + const bedrijfsnaam = handelsBedrijfsnaam.success ? handelsBedrijfsnaam.data : ""; + + let x; + + if (handelsregisterData.success) { + if (handelsregisterData.data?.vestigingsnummer) { + x = { vestigingsnummer: handelsregisterData.data.vestigingsnummer }; + } else if (handelsregisterData.data?.rsin) { + x = { rsin: handelsregisterData.data.rsin }; + } + } + + if (!x) { + return; + } + const newKlant = await ensureKlantForVestigingsnummer( { - vestigingsnummer: bedrijfIdentificatie.value, + identifier: x, bedrijfsnaam, }, organisatieIds.value[0] || "", @@ -107,10 +132,10 @@ const result: EnrichedBedrijf = reactive({ detailLink, create, - subjectType: mapServiceData(handelsregisterData, (h) => h?.subjectType ?? ""), - subjectIdentificatie: mapServiceData( - handelsregisterData, - (h) => h?.subjectIdentificatie ?? "", - ), + // subjectType: mapServiceData(handelsregisterData, (h) => h?..subjectType ?? ""), + // subjectIdentificatie: mapServiceData( + // handelsregisterData, + // (h) => h?.subjectIdentificatie ?? "", + // ), }); diff --git a/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts b/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts index e6820a7af..f93b62bf9 100644 --- a/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts +++ b/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts @@ -1,5 +1,5 @@ import type { Klant } from "../../types"; -import { useKlantByVestigingsnummer } from "../../service"; +import { useKlantByIdentifier } from "../../service"; import { combineEnrichers } from "@/services"; import { useBedrijfByVestigingsnummer } from "../service/UseGetOndernememing"; import type { Bedrijf } from "../types"; @@ -9,18 +9,20 @@ const isKlant = (klantOfBedrijf: Klant | Bedrijf): klantOfBedrijf is Klant => { }; export const useEnrichedBedrijf = combineEnrichers( - useKlantByVestigingsnummer, + useKlantByIdentifier, useBedrijfByVestigingsnummer, - GetId, //de property waarmee je het bijbehorende object in de andere bron gaat zoeken + GetSharedIdentifier, //de property waarmee je het bijbehorende object in de andere bron gaat zoeken isKlant, ); -function GetId( +function GetSharedIdentifier( klantofbedrijf: Klant | Bedrijf, ): BedrijfSearchParameter | undefined { if (klantofbedrijf.vestigingsnummer) { return { vestigingsnummer: klantofbedrijf.vestigingsnummer }; - } else if (klantofbedrijf.kvkNummer) { toch moor dat ID?? + } else if (klantofbedrijf.innNnpId) { + return { innNnpId: klantofbedrijf.innNnpId }; + } else if (klantofbedrijf.kvkNummer) { return { kvkNummer: klantofbedrijf.kvkNummer }; } return; diff --git a/src/features/klant/bedrijf/service/UseGetOndernememing.ts b/src/features/klant/bedrijf/service/UseGetOndernememing.ts index 256e86086..b81f5eb1f 100644 --- a/src/features/klant/bedrijf/service/UseGetOndernememing.ts +++ b/src/features/klant/bedrijf/service/UseGetOndernememing.ts @@ -7,13 +7,7 @@ const zoekenUrl = "/api/kvk/v2/zoeken"; export const useBedrijfByVestigingsnummer = ( getId: () => BedrijfSearchParameter | undefined, ) => { - const getUrl = () => { - const vestigingsnummer = getId(); - if (!vestigingsnummer) return ""; - const searchParams = new URLSearchParams(); - searchParams.set("vestigingsnummer", vestigingsnummer); - return `${zoekenUrl}?${searchParams}`; - }; + const getUrl = () => getUrlVoorGetBedrijfById(getId()); // useBedrijfByVestigingsnummer private ////////////////////////// @@ -29,3 +23,26 @@ export const useBedrijfByVestigingsnummer = ( getUniqueId, }); }; + +const getUrlVoorGetBedrijfById = (ding: BedrijfSearchParameter | undefined) => { + if (!ding) { + return ""; + } + + const searchParams = new URLSearchParams(); + + if ("vestigingsnummer" in ding) { + if (!ding.vestigingsnummer) return ""; + searchParams.set("vestigingsnummer", ding.vestigingsnummer); + return `${zoekenUrl}?${searchParams}`; + } else if ("kvkNummer" in ding) { + if (!ding.kvkNummer) return ""; + searchParams.set("kvkNummer", ding.kvkNummer); + return `${zoekenUrl}?${searchParams}`; + } else if ("innNnpId" in ding) { + searchParams.set("rsin", ding.innNnpId); //todo: is dit ok? is rsin en innnnpid hetzelfde? kvk api kent alleen rsin + return `${zoekenUrl}?${searchParams}`; + } + + return ""; +}; diff --git a/src/features/klant/bedrijf/service/shared/shared.ts b/src/features/klant/bedrijf/service/shared/shared.ts index 5ff23870c..9707411f8 100644 --- a/src/features/klant/bedrijf/service/shared/shared.ts +++ b/src/features/klant/bedrijf/service/shared/shared.ts @@ -67,6 +67,7 @@ async function mapHandelsRegister(json: any): Promise { const { straatHuisnummer, postcodeWoonplaats } = buitenlandsAdres ?? {}; let vestiging: KvkVestiging | undefined; + let naamgeving: KvkNaamgeving | undefined; if (vestigingsnummer) { try { @@ -74,6 +75,14 @@ async function mapHandelsRegister(json: any): Promise { } catch (e) { console.error(e); } + } else { + // als er geen verstiging is dan gaan we ervan uit dat het een + // niet natuurlijk persoon betreft waarvan we de RSIN proberen te achterhalen + try { + naamgeving = await fetchNaamgevingen(getNaamgevingenUrl(kvkNummer)); + } catch (e) { + console.error(e); + } } return { @@ -84,9 +93,12 @@ async function mapHandelsRegister(json: any): Promise { straatnaam: straatnaam || straatHuisnummer, woonplaats: plaats || postcodeWoonplaats, ...(vestiging ?? {}), + ...(naamgeving ?? {}), }; } +//// + const fetchVestiging = (url: string) => fetchLoggedIn(url).then(throwIfNotOk).then(parseJson).then(mapVestiging); @@ -117,6 +129,34 @@ const mapVestiging = ({ }; }; +//// KvK naamgevingen ////////////////////////////////////////// + +const naamgevingenUrl = "/api/kvk/v1/naamgevingen/kvknummer/"; + +type KvkNaamgeving = { + rsin: string; + kvkNummer: string; + handelsnaam: string; +}; + +const fetchNaamgevingen = (url: string) => + fetchLoggedIn(url).then(throwIfNotOk).then(parseJson).then(mapNaamgeving); + +const getNaamgevingenUrl = (kvkNummer?: string) => { + if (!kvkNummer) return ""; + return naamgevingenUrl + kvkNummer; +}; + +const mapNaamgeving = ({ rsin, kvkNummer, naam }: any): KvkNaamgeving => { + return { + rsin, + kvkNummer, + handelsnaam: naam, + }; +}; + +//// + const hasFoutCode = (body: unknown, code: string) => { if ( body && diff --git a/src/features/klant/bedrijf/types.ts b/src/features/klant/bedrijf/types.ts index 46163eb90..59e2c20c6 100644 --- a/src/features/klant/bedrijf/types.ts +++ b/src/features/klant/bedrijf/types.ts @@ -11,8 +11,8 @@ export interface Bedrijf { huisletter?: string; huisnummertoevoeging?: string; woonplaats?: string; - - + innNnpId?: string; //todo: dit gebruiken of toch kvk als het een 'bedrijf' zonder vestiging betreft + rsin?: string; } export interface EnrichedBedrijf { @@ -22,8 +22,8 @@ export interface EnrichedBedrijf { email: ServiceData; telefoonnummer: ServiceData; - subjectType: ServiceData; - subjectIdentificatie: ServiceData; + // subjectType: ServiceData; + // subjectIdentificatie: ServiceData; create: () => Promise; detailLink: ServiceData<{ diff --git a/src/features/klant/service.ts b/src/features/klant/service.ts index d978f84fd..db017e213 100644 --- a/src/features/klant/service.ts +++ b/src/features/klant/service.ts @@ -276,7 +276,10 @@ const getUrlVoorGetKlantById = (ding: BedrijfSearchParameter | undefined) => { if ("vestigingsnummer" in ding) { if (!ding.vestigingsnummer) return ""; const url = new URL(klantRootUrl); - url.searchParams.set("subjecBedrijf__vestinginsnummer", ding.vestigingsnummer); + url.searchParams.set( + "subjecBedrijf__vestinginsnummer", + ding.vestigingsnummer, + ); url.searchParams.set("subjectType", KlantType.Bedrijf); return url.toString(); } else if ("kvkNummer" in ding) { @@ -290,10 +293,43 @@ const getUrlVoorGetKlantById = (ding: BedrijfSearchParameter | undefined) => { if (!ding.innNnpId) return ""; const url = new URL(klantRootUrl); // url.searchParams.set("subjectNietnatuurlijkPersoon__nnNip", ding.nnNip); - url.searchParams.set("subjectNietNatuurlijkPersoon__innNnpId", ding.innNnpId); + url.searchParams.set( + "subjectNietNatuurlijkPersoon__innNnpId", + ding.innNnpId, + ); + url.searchParams.set("subjectType", KlantType.NietNatuurlijkPersoon); + return url.toString(); + } + + return ""; +}; + +const getUrlVoorGetKlantByVestigingOrRsin = ( + ding: CreateBedrijfKlantIdentifier | undefined, +) => { + if (!ding) { + return ""; + } + + if ("vestigingsnummer" in ding) { + if (!ding.vestigingsnummer) return ""; + const url = new URL(klantRootUrl); + url.searchParams.set( + "subjecBedrijf__vestinginsnummer", + ding.vestigingsnummer, + ); + url.searchParams.set("subjectType", KlantType.Bedrijf); + return url.toString(); + } else if ("rsin" in ding) { + if (!ding.rsin) return ""; + const url = new URL(klantRootUrl); + // url.searchParams.set("subjectNietnatuurlijkPersoon__nnNip", ding.nnNip); + url.searchParams.set("subjectNietNatuurlijkPersoon__innNnpId", ding.rsin); url.searchParams.set("subjectType", KlantType.NietNatuurlijkPersoon); return url.toString(); } + + return ""; }; const getKlantByNietNatuurlijkpersoonIdentifierUrl = (id: string) => { @@ -304,7 +340,7 @@ const getKlantByNietNatuurlijkpersoonIdentifierUrl = (id: string) => { return url.toString(); }; -export const useKlantByVestigingsnummer = ( +export const useKlantByIdentifier = ( getId: () => BedrijfSearchParameter | undefined, ) => { const getUrl = () => getUrlVoorGetKlantById(getId()); @@ -319,17 +355,27 @@ export const useKlantByVestigingsnummer = ( }); }; +export type CreateBedrijfKlantIdentifier = + | { + vestigingsnummer: string; + } + | { + rsin: string; + }; + +//maak een klant aan in het klanten register als die nog niet bestaat +//bijvoorbeeld om een contactmoment voor een in de kvk opgezocht bedrijf op te kunnen slaan export async function ensureKlantForVestigingsnummer( { bedrijfsnaam, - vestigingsnummer, + identifier, }: { - vestigingsnummer: string; bedrijfsnaam: string; + identifier: CreateBedrijfKlantIdentifier; }, bronorganisatie: string, ) { - const url = getUrlVoorGetKlantById({vestigingsnummer: vestigingsnummer} ); + const url = getUrlVoorGetKlantByVestigingOrRsin(identifier); const uniqueId = url && url + "_single"; if (!url || !uniqueId) throw new Error(); @@ -342,6 +388,31 @@ export async function ensureKlantForVestigingsnummer( mutate(idUrl, first); return first; } + console.log("identifier", identifier); + let subjectType: KlantType; + let subjectIdentificatie = {}; + //afhankelijk van het type 'bedrijf' slaan we andere gegevens op + if ("vestigingsnummer" in identifier) { + subjectType = KlantType.Bedrijf; + subjectIdentificatie = { vestigingsNummer: identifier.vestigingsnummer }; + } else if ("rsin" in identifier) { + subjectType = KlantType.NietNatuurlijkPersoon; + subjectIdentificatie = { innNnpId: identifier.rsin }; + //} + // else if ("kvkNummer" in identifier) { + // subjectType = KlantType.NietNatuurlijkPersoon; //todo: willen we dit? + // subjectIdentificatie = { innNnpId: identifier.kvkNummer }; // en dit + + // basisprofiel opvragen en daarin de eigenaar en daarzit rsin in + + // https://localhost:3000/api/kvk/v1/basisprofielen/68727720 + + // dus waar we https://localhost:3000/api/kvk/v1/vestigingsprofielen/000037143557 opvragen nu ook basisprofiel vragen + + // dat is in getVestingUrl + } else { + throw new Error("Kan geen klant aanmaken zonder identificatie"); + } const response = await fetchLoggedIn(klantRootUrl, { method: "POST", @@ -352,8 +423,8 @@ export async function ensureKlantForVestigingsnummer( bronorganisatie, // TODO: WAT MOET HIER IN KOMEN? klantnummer: nanoid(8), - subjectIdentificatie: { vestigingsNummer: vestigingsnummer }, - subjectType: KlantType.Bedrijf, + subjectIdentificatie: subjectIdentificatie, + subjectType: subjectType, /// bedrijfsnaam, }), }); diff --git a/src/features/klant/types.ts b/src/features/klant/types.ts index 052193080..446667ee2 100644 --- a/src/features/klant/types.ts +++ b/src/features/klant/types.ts @@ -13,7 +13,8 @@ export interface Klant { bedrijfsnaam?: string; vestigingsnummer?: string; //als de klant een Kvk klant is, dan gebruiken we dit gegeven om het klantenregistern en de kvk te kunnen matchen. Als het een bedrijf betreft url?: string; - kvkNummer?: string; //als de klant een Kvk klant is, dan gebruiken we dit gegeven om het klantenregistern en de kvk te kunnen matchen. Als het een kvk entiteit zonder vestiging betreft + innNnpId?: string; //als de klant een Kvk klant is, dan gebruiken we dit gegeven om het klantenregistern en de kvk te kunnen matchen. Als het een kvk entiteit zonder vestiging betreft + kvkNummer?: string; //todo: uitzoeken waarom niet dit ipv innNnpId > als de klant een Kvk klant is, dan gebruiken we dit gegeven om het klantenregistern en de kvk te kunnen matchen. Als het een kvk entiteit zonder vestiging betreft } export enum KlantType { diff --git a/src/services/service-data-enricher.ts b/src/services/service-data-enricher.ts index 1cc196938..b9c62f889 100644 --- a/src/services/service-data-enricher.ts +++ b/src/services/service-data-enricher.ts @@ -13,17 +13,17 @@ import { type ServiceData, ServiceResult } from "./service-data"; type GetParameters = (i: NonNullable) => NonNullable | undefined; type GetServiceData = ( - keyFactory: () => NonNullable | undefined + keyFactory: () => NonNullable | undefined, ) => ServiceData | null>; type GetInput = () => NonNullable; export type TwoWayEnricher = ( - getInput: GetInput + getInput: GetInput, ) => readonly [ Readonly | undefined>>, ServiceData | null>, - ServiceData | null> + ServiceData | null>, ]; /** @@ -40,8 +40,8 @@ export function combineEnrichers( getDataTheOtherDirection: GetServiceData, getCommonParameters: GetParameters, isLeft: ( - either: NonNullable | NonNullable - ) => either is NonNullable + either: NonNullable | NonNullable, + ) => either is NonNullable, ): TwoWayEnricher { return (getEither) => { const eitherRef = computed(getEither); From 9edf99f401036d5abae6f82e85b92aa777246f28 Mon Sep 17 00:00:00 2001 From: mark stoker Date: Thu, 11 Apr 2024 16:43:48 +0200 Subject: [PATCH 03/21] wip --- .../GetNietNatuurlijkPersoonIdentifier.cs | 40 +++++++ .../bedrijf/enricher/BedrijfEnrichContext.vue | 8 +- .../bedrijf/enricher/bedrijf-enricher.ts | 106 ++++++++++++++++-- .../bedrijf/service/UseGetOndernememing.ts | 6 +- ...referredNietNatuurlijkPersoonIdentifier.ts | 19 ++++ src/features/klant/index.ts | 2 +- src/features/klant/service.ts | 61 +++++++--- src/layout/TheHeader.vue | 2 +- 8 files changed, 212 insertions(+), 32 deletions(-) create mode 100644 Kiss.Bff/Intern/Klanten/GetNietNatuurlijkPersoonIdentifier.cs create mode 100644 src/features/klant/bedrijf/service/UsePreferredNietNatuurlijkPersoonIdentifier.ts diff --git a/Kiss.Bff/Intern/Klanten/GetNietNatuurlijkPersoonIdentifier.cs b/Kiss.Bff/Intern/Klanten/GetNietNatuurlijkPersoonIdentifier.cs new file mode 100644 index 000000000..2ee4ef9b5 --- /dev/null +++ b/Kiss.Bff/Intern/Klanten/GetNietNatuurlijkPersoonIdentifier.cs @@ -0,0 +1,40 @@ +using System.ComponentModel.DataAnnotations; +using System.Net.Mail; +using System.Security.Claims; +using System.Text; +using Ganss.Xss; +using IdentityModel; +using Microsoft.AspNetCore.Mvc; + +namespace Kiss.Bff.Feedback +{ + [Route("api/[controller]")] + [ApiController] + public class GetNietNatuurlijkPersoonIdentifier : ControllerBase + { + + private readonly IConfiguration _configuration; + + public GetNietNatuurlijkPersoonIdentifier( IConfiguration configuration) + { + _configuration = configuration; + } + + //Afhaneklijk van de gebruikte bron (openklant of e-Suite) + //moet men in kunnen stellen welk gegeven gebruikt wordt om + //Kvk gegevens aan klanten te koppelen + //standaard wordt daar vestigingsnummer voor gebruikt, + //maar voor niet natuurlijke personen moet men rsin of kvknummer kunnen gebruiken + //openklant accepteert geen kvknummer, de e-Suite kent geen rsin + [HttpGet] + public IActionResult Get() + { + //todo: get from configuration + return Ok(new NietNatuurlijkPersoonIdentifierModel("rsin")); + } + + + } + + public record NietNatuurlijkPersoonIdentifierModel(string NietNatuurlijkPersoonIdentifier); +} diff --git a/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue b/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue index 7da222fac..b87198de8 100644 --- a/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue +++ b/src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue @@ -38,10 +38,10 @@ const klantBedrijfsnaam = mapServiceData( (k) => k?.bedrijfsnaam ?? "", ); -const handelsBedrijfsnaam = mapServiceData( - handelsregisterData, - (k) => k?.bedrijfsnaam ?? "", -); +const handelsBedrijfsnaam = mapServiceData(handelsregisterData, (k) => { + console.log(k); + return k?.bedrijfsnaam ?? ""; +}); const bedrijfsnaam = computed(() => { if (handelsBedrijfsnaam.success && handelsBedrijfsnaam.data) diff --git a/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts b/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts index f93b62bf9..31f0ad53d 100644 --- a/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts +++ b/src/features/klant/bedrijf/enricher/bedrijf-enricher.ts @@ -1,16 +1,29 @@ import type { Klant } from "../../types"; import { useKlantByIdentifier } from "../../service"; import { combineEnrichers } from "@/services"; -import { useBedrijfByVestigingsnummer } from "../service/UseGetOndernememing"; +import { useBedrijfByIdentifier } from "../service/UseGetOndernememing"; import type { Bedrijf } from "../types"; +import { + NietNatuurlijkPersoonIdentifiers, + usePreferredNietNatuurlijkPersoonIdentifier, +} from "../service/UsePreferredNietNatuurlijkPersoonIdentifier"; const isKlant = (klantOfBedrijf: Klant | Bedrijf): klantOfBedrijf is Klant => { return klantOfBedrijf._typeOfKlant === "klant"; }; +//dit hebben we alleen nodig als we niet op vestigingsnummer maar een andere identifier +//moeten matchen. Door incompatabiliteit tussen esuite en openklant +//moet de gebruikte matching gegeven configurabel zijn. +//aangezien de combineenrichers geen async functie support voor +//het vaststellen van de gedeelde identifier, moeten we het te gebruiken veld dan toch mar preventief +//hier alvast binnenhalen +const preferredNietNatuurlijkPersoonIdentifier = + await usePreferredNietNatuurlijkPersoonIdentifier(); + export const useEnrichedBedrijf = combineEnrichers( useKlantByIdentifier, - useBedrijfByVestigingsnummer, + useBedrijfByIdentifier, GetSharedIdentifier, //de property waarmee je het bijbehorende object in de andere bron gaat zoeken isKlant, ); @@ -18,13 +31,89 @@ export const useEnrichedBedrijf = combineEnrichers( function GetSharedIdentifier( klantofbedrijf: Klant | Bedrijf, ): BedrijfSearchParameter | undefined { - if (klantofbedrijf.vestigingsnummer) { + //als er een vestigingsnummer is dan is dat mooi + //zowel kvk als de klantregisters kennen dit + if ("vestigingsnummer" in klantofbedrijf && klantofbedrijf.vestigingsnummer) { return { vestigingsnummer: klantofbedrijf.vestigingsnummer }; - } else if (klantofbedrijf.innNnpId) { - return { innNnpId: klantofbedrijf.innNnpId }; - } else if (klantofbedrijf.kvkNummer) { - return { kvkNummer: klantofbedrijf.kvkNummer }; + } else { + //als we gevegens hebben van een bedrijf (kvk data) en we + //willen daar de bijbehorende klant bij zoeken + //dan moeten we afhanekelijk van de context waarin KISS draait (openklant of e-suite) + //het kvknummer (e-suite) of rsin (openklant) gebruiken om de bijbehordengegeevesn te zoeken + // welk gegeven gebruikt moet worden kunnen we opvragen + + if (klantofbedrijf._typeOfKlant === "bedrijf") { + if ( + preferredNietNatuurlijkPersoonIdentifier.NietNatuurlijkPersoonIdentifier === + NietNatuurlijkPersoonIdentifiers.rsin + ) { + //dus.... we hebben een bedrijf en we willen de bijbehorende klant zoeken + //op basis van de rsin die in openklant innNnpId heet + + if ("rsin" in klantofbedrijf && klantofbedrijf.rsin) { + console.log( + "we hebben een kvk record en willen het bijbehorende klant record zoeken adhv de rsin van de kvk die moet matchen met de innNnpId van openklant", + ); + return { innNnpId: klantofbedrijf.rsin }; + } + } + + if ( + preferredNietNatuurlijkPersoonIdentifier.NietNatuurlijkPersoonIdentifier === + NietNatuurlijkPersoonIdentifiers.kvkNummer + ) { + //dus.... we hebben een bedrijf en we willen de bijbehorende klant zoeken + //op basis van de rsin die in openklant innNnpId heet + + if ("rsin" in klantofbedrijf && klantofbedrijf.kvkNummer) { + console.log( + "we hebben een kvk record en willen het bijbehorende klant record zoeken adhv het kvknummer van de kvk die moet matchen met het kvknummer in de e-suite", + ); + return { kvkNummer: klantofbedrijf.kvkNummer }; + } + } + } + + if (klantofbedrijf._typeOfKlant === "klant") { + if ( + preferredNietNatuurlijkPersoonIdentifier.NietNatuurlijkPersoonIdentifier === + NietNatuurlijkPersoonIdentifiers.rsin + ) { + //dus.... we hebben een klant en we willen de bijbehorende onderneming zoeken bij de kvk + //op basis van de rsin die in openklant innNnpId heet + + if ("rsin" in klantofbedrijf && klantofbedrijf.innNnpId) { + console.log( + "we hebben een klant record en willen het bijbehorende kvk record zoeken adhv het innNnPid van openklant die moet matchen met de rsin in de kvk", + ); + return { rsin: klantofbedrijf.innNnpId }; + } + } + + if ( + preferredNietNatuurlijkPersoonIdentifier.NietNatuurlijkPersoonIdentifier === + NietNatuurlijkPersoonIdentifiers.kvkNummer + ) { + //dus.... we hebben een klant en we willen de bijbehorende onderneming zoeken bij de kvk + //op basis van het kvknummer + + if ("rsin" in klantofbedrijf && klantofbedrijf.kvkNummer) { + console.log( + "we hebben een klant record en willen het bijbehorende kvk record zoeken adhv het kvknummer van de e-suite die moet matchen met het kvknummer in de kvk", + ); + return { kvkNummer: klantofbedrijf.kvkNummer }; + } + } + } } + + // if (klantofbedrijf.vestigingsnummer) { + // return { vestigingsnummer: klantofbedrijf.vestigingsnummer }; + // } else if (klantofbedrijf.innNnpId) { + // return { innNnpId: klantofbedrijf.innNnpId }; + // } else if (klantofbedrijf.kvkNummer) { + // return { kvkNummer: klantofbedrijf.kvkNummer }; + // } return; } @@ -37,4 +126,7 @@ export type BedrijfSearchParameter = } | { innNnpId: string; + } + | { + rsin: string; }; diff --git a/src/features/klant/bedrijf/service/UseGetOndernememing.ts b/src/features/klant/bedrijf/service/UseGetOndernememing.ts index b81f5eb1f..555620912 100644 --- a/src/features/klant/bedrijf/service/UseGetOndernememing.ts +++ b/src/features/klant/bedrijf/service/UseGetOndernememing.ts @@ -4,7 +4,7 @@ import type { BedrijfSearchParameter } from "../enricher/bedrijf-enricher"; const zoekenUrl = "/api/kvk/v2/zoeken"; -export const useBedrijfByVestigingsnummer = ( +export const useBedrijfByIdentifier = ( getId: () => BedrijfSearchParameter | undefined, ) => { const getUrl = () => getUrlVoorGetBedrijfById(getId()); @@ -39,8 +39,8 @@ const getUrlVoorGetBedrijfById = (ding: BedrijfSearchParameter | undefined) => { if (!ding.kvkNummer) return ""; searchParams.set("kvkNummer", ding.kvkNummer); return `${zoekenUrl}?${searchParams}`; - } else if ("innNnpId" in ding) { - searchParams.set("rsin", ding.innNnpId); //todo: is dit ok? is rsin en innnnpid hetzelfde? kvk api kent alleen rsin + } else if ("rsin" in ding) { + searchParams.set("rsin", ding.rsin); //todo: is dit ok? is rsin en innnnpid hetzelfde? kvk api kent alleen rsin return `${zoekenUrl}?${searchParams}`; } diff --git a/src/features/klant/bedrijf/service/UsePreferredNietNatuurlijkPersoonIdentifier.ts b/src/features/klant/bedrijf/service/UsePreferredNietNatuurlijkPersoonIdentifier.ts new file mode 100644 index 000000000..ae21ff981 --- /dev/null +++ b/src/features/klant/bedrijf/service/UsePreferredNietNatuurlijkPersoonIdentifier.ts @@ -0,0 +1,19 @@ +import { ServiceResult, fetchLoggedIn, throwIfNotOk } from "@/services"; + +export async function usePreferredNietNatuurlijkPersoonIdentifier() { + // return ServiceResult.fromPromise( + return await fetchLoggedIn("/api/GetNietNatuurlijkPersoonIdentifier") + .then(throwIfNotOk) + .then((r) => r.json()) + .then((r: NietNatuurlijkPersoonIdentifier) => r); + // ); +} + +export type NietNatuurlijkPersoonIdentifier = { + NietNatuurlijkPersoonIdentifier: string; +}; + +export const NietNatuurlijkPersoonIdentifiers = { + rsin: "rsin", + kvkNummer: "kvkNummer", +}; diff --git a/src/features/klant/index.ts b/src/features/klant/index.ts index 07206ba75..c015d9e93 100644 --- a/src/features/klant/index.ts +++ b/src/features/klant/index.ts @@ -9,5 +9,5 @@ export { default as HandelsregisterGegevens } from "./bedrijf/HandelsregisterGeg export { default as KlantDetails } from "./KlantDetails.vue"; export { usePersoonByBsn } from "./persoon/service"; -export { useBedrijfByVestigingsnummer } from "./bedrijf/service/UseGetOndernememing"; +export { useBedrijfByIdentifier as useBedrijfByVestigingsnummer } from "./bedrijf/service/UseGetOndernememing"; export { useKlantById } from "./service"; diff --git a/src/features/klant/service.ts b/src/features/klant/service.ts index db017e213..99c6de8e1 100644 --- a/src/features/klant/service.ts +++ b/src/features/klant/service.ts @@ -18,6 +18,10 @@ import { } from "./types"; import { nanoid } from "nanoid"; import type { BedrijfSearchParameter } from "./bedrijf/enricher/bedrijf-enricher"; +import { + NietNatuurlijkPersoonIdentifiers, + usePreferredNietNatuurlijkPersoonIdentifier, +} from "./bedrijf/service/UsePreferredNietNatuurlijkPersoonIdentifier"; type QueryParam = [string, string][]; @@ -99,12 +103,15 @@ function mapKlant(obj: any): Klant { } function searchKlanten(url: string): Promise> { + console.log("searchKlanten url", url); return fetchLoggedIn(url) .then(throwIfNotOk) .then(parseJson) .then((j) => parsePagination(j, mapKlant)) .then((p) => { p.page.forEach((klant) => { + console.log("searchKlanten klant found", klant); + const idUrl = getKlantIdUrl(klant.id); if (idUrl) { mutate(idUrl, klant); @@ -213,6 +220,8 @@ export function useKlantByBsn( ): ServiceData { const getUrl = () => getKlantBsnUrl(getBsn()); + console.log("serach klant by BSN "); + return ServiceResult.fromFetcher(getUrl, searchSingleKlant, { getUniqueId: () => getSingleBsnSearchId(getBsn()), }); @@ -350,6 +359,8 @@ export const useKlantByIdentifier = ( return url && url + "_single"; }; + console.log("useKlantByIdentifier"); + return ServiceResult.fromFetcher(getUrl, searchSingleKlant, { getUniqueId, }); @@ -361,6 +372,9 @@ export type CreateBedrijfKlantIdentifier = } | { rsin: string; + } + | { + kvknummer: string; }; //maak een klant aan in het klanten register als die nog niet bestaat @@ -388,29 +402,44 @@ export async function ensureKlantForVestigingsnummer( mutate(idUrl, first); return first; } - console.log("identifier", identifier); - let subjectType: KlantType; + + let subjectType: KlantType | null = null; let subjectIdentificatie = {}; //afhankelijk van het type 'bedrijf' slaan we andere gegevens op if ("vestigingsnummer" in identifier) { subjectType = KlantType.Bedrijf; subjectIdentificatie = { vestigingsNummer: identifier.vestigingsnummer }; - } else if ("rsin" in identifier) { - subjectType = KlantType.NietNatuurlijkPersoon; - subjectIdentificatie = { innNnpId: identifier.rsin }; - //} - // else if ("kvkNummer" in identifier) { - // subjectType = KlantType.NietNatuurlijkPersoon; //todo: willen we dit? - // subjectIdentificatie = { innNnpId: identifier.kvkNummer }; // en dit - - // basisprofiel opvragen en daarin de eigenaar en daarzit rsin in - - // https://localhost:3000/api/kvk/v1/basisprofielen/68727720 + } else { + //als we niet te maken hebben met een vestiging + //dan gebruiken we afhankelijk van de mogelijkheden van de gerbuite registers + //rsin of kvkNummer. We halen de ingestelde voorkeurswaarde identifier op + //en kijken of dit geven beschikbaar is zodat we hiermee een klant kunnen aanmaken + const preferredNietNatuurlijkPersoonIdentifier = + await usePreferredNietNatuurlijkPersoonIdentifier(); + if ( + "rsin" in identifier && + preferredNietNatuurlijkPersoonIdentifier.NietNatuurlijkPersoonIdentifier === + NietNatuurlijkPersoonIdentifiers.rsin + ) { + subjectType = KlantType.NietNatuurlijkPersoon; + subjectIdentificatie = { innNnpId: identifier.rsin }; + } else if ( + "kvknummer" in identifier && + preferredNietNatuurlijkPersoonIdentifier.NietNatuurlijkPersoonIdentifier === + NietNatuurlijkPersoonIdentifiers.kvkNummer + ) { + subjectType = KlantType.NietNatuurlijkPersoon; + subjectIdentificatie = { innNnpId: identifier.kvknummer }; + } - // dus waar we https://localhost:3000/api/kvk/v1/vestigingsprofielen/000037143557 opvragen nu ook basisprofiel vragen + console.log("###################"); + console.log( + preferredNietNatuurlijkPersoonIdentifier.NietNatuurlijkPersoonIdentifier, + ); + console.log("###################"); + } - // dat is in getVestingUrl - } else { + if (!subjectType || !subjectIdentificatie) { throw new Error("Kan geen klant aanmaken zonder identificatie"); } diff --git a/src/layout/TheHeader.vue b/src/layout/TheHeader.vue index 42303bc3d..b5c038f69 100644 --- a/src/layout/TheHeader.vue +++ b/src/layout/TheHeader.vue @@ -7,7 +7,7 @@ 'hide-sidebar': $route.meta.hideSidebar, }" > - +