Skip to content

Commit

Permalink
Merge pull request #761 from Klantinteractie-Servicesysteem/PC143-Kla…
Browse files Browse the repository at this point in the history
…ntbeeld-kunnen-openen-van-niet-natuurlijke-personen-(zonder-vestigingsnummer)

Pc143 klantbeeld kunnen openen van niet natuurlijke personen (zonder vestigingsnummer)
  • Loading branch information
mstokericatt authored Apr 22, 2024
2 parents 7168152 + 8120300 commit 515c460
Show file tree
Hide file tree
Showing 20 changed files with 492 additions and 134 deletions.
44 changes: 44 additions & 0 deletions Kiss.Bff/Intern/Klanten/GetNietNatuurlijkPersoonIdentifier.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using System.ComponentModel.DataAnnotations;
using System.Net.Mail;
using System.Security.Claims;
using System.Text;
using Ganss.Xss;
using IdentityModel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace Kiss.Bff.Feedback
{
[Route("api/[controller]")]
[ApiController]
public class GetNietNatuurlijkPersoonIdentifier : ControllerBase
{

private readonly string _identifier;


public GetNietNatuurlijkPersoonIdentifier(IConfiguration configuration)
{
_identifier = configuration != null && !string.IsNullOrWhiteSpace(configuration["NIETNATUURLIJKPERSOONIDENTIFIER"])
? configuration["NIETNATUURLIJKPERSOONIDENTIFIER"]
: "rsin";
}

//Afhanekelijk 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]
[AllowAnonymous]
public IActionResult Get()
{
return Ok(new NietNatuurlijkPersoonIdentifierModel(_identifier));
}


}

public record NietNatuurlijkPersoonIdentifierModel(string NietNatuurlijkPersoonIdentifier);
}
6 changes: 4 additions & 2 deletions src/features/contactmoment/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,5 +82,7 @@ export interface KlantContactmoment {
rol: string;
}

export type SaveContactmomentResponseModel = {data? : { url: string; gespreksId: string} , errorMessage? : string}

export type SaveContactmomentResponseModel = {
data?: { url: string; gespreksId: string };
errorMessage?: string;
};
4 changes: 2 additions & 2 deletions src/features/klant/bedrijf/BedrijfZoeker.vue
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
import { parseKvkNummer, parsePostcodeHuisnummer } from "@/helpers/validation";
import { ensureState } from "@/stores/create-store";
import { computed, ref, watch } from "vue";
import { useSearchBedrijven } from "./service/UseSearchBedrijven";
import { useSearchBedrijven } from "./service/use-search-bedrijven";
import SimpleSpinner from "@/components/SimpleSpinner.vue";
import Pagination from "@/nl-design-system/components/Pagination.vue";
Expand All @@ -87,7 +87,7 @@ import {
import { KlantType } from "../types";
import { useRouter } from "vue-router";
import { FriendlyError } from "@/services";
import { bedrijfQuery } from "./service/BedrijfsQuery";
import { bedrijfQuery } from "./service/bedrijf-query";
type SearchFields = KlantSearchField | SearchCategories;
const labels: { [key in SearchFields]: string } = {
handelsnaam: "Bedrijfsnaam",
Expand Down
1 change: 1 addition & 0 deletions src/features/klant/bedrijf/BedrijvenOverzicht.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<thead>
<tr>
<th>Naam</th>
<th>Type</th>
<th>KvK-nummer</th>
<th class="wrap">Postcode + Huisnummer</th>
<th>E-mailadres</th>
Expand Down
4 changes: 4 additions & 0 deletions src/features/klant/bedrijf/BedrijvenOverzichtRow.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
result.bedrijfsnaam.data
}}</template>
</th>
<td>
<div class="skeleton" v-if="result.type.loading" />
<template v-if="result.type.success">{{ result.type.data }}</template>
</td>
<td>
<div class="skeleton" v-if="result.kvkNummer.loading" />
<template v-if="result.kvkNummer.success">{{
Expand Down
55 changes: 40 additions & 15 deletions src/features/klant/bedrijf/enricher/BedrijfEnrichContext.vue
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,16 @@ import type { Bedrijf as Bedrijf, EnrichedBedrijf } from "../types";
import { useEnrichedBedrijf } from "./bedrijf-enricher";
import { useOrganisatieIds } from "@/stores/user";
import type { Klant } from "../../types";
import { ensureKlantForVestigingsnummer } from "../../service";
import { ensureKlantForBedrijfIdentifier } 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}`;
Expand All @@ -36,13 +35,12 @@ const organisatieIds = useOrganisatieIds();
const klantBedrijfsnaam = mapServiceData(
klantData,
(k) => k?.bedrijfsnaam ?? ""
(k) => k?.bedrijfsnaam ?? "",
);
const handelsBedrijfsnaam = mapServiceData(
handelsregisterData,
(k) => k?.bedrijfsnaam ?? ""
);
const handelsBedrijfsnaam = mapServiceData(handelsregisterData, (k) => {
return k?.bedrijfsnaam ?? "";
});
const bedrijfsnaam = computed(() => {
if (handelsBedrijfsnaam.success && handelsBedrijfsnaam.data)
Expand All @@ -60,26 +58,53 @@ const detailLink = computed(() => {
});
const create = async () => {
if (!vestigingsnummer.value) throw new Error();
//We maken bij een kvk bedrijf een klant aan.
//hier moeten we weten of de klant met een vestigingsnr of een ander id aangemaakt moet worden
//voor niet natuurlijke personen gebruiken we rsin
//voor overige bedrijven het vestigingsnummer
if (!bedrijfIdentificatie.value) throw new Error();
const bedrijfsnaam = handelsBedrijfsnaam.success
? handelsBedrijfsnaam.data
: "";
const newKlant = await ensureKlantForVestigingsnummer(
let identifier;
if (!handelsregisterData.success) return;
if (handelsregisterData.data?.vestigingsnummer) {
identifier = {
vestigingsnummer: handelsregisterData.data.vestigingsnummer,
};
} else if (handelsregisterData.data?.nietNatuurlijkPersoonIdentifier) {
identifier = {
nietNatuurlijkPersoonIdentifier:
handelsregisterData.data.nietNatuurlijkPersoonIdentifier,
};
}
if (!identifier) {
return;
}
const newKlant = await ensureKlantForBedrijfIdentifier(
{
vestigingsnummer: vestigingsnummer.value,
identifier,
bedrijfsnaam,
},
organisatieIds.value[0] || ""
organisatieIds.value[0] || "",
);
const url = getKlantUrl(newKlant);
router.push(url);
};
const result: EnrichedBedrijf = reactive({
bedrijfsnaam,
type: mapServiceData(handelsregisterData, (h) => h?.type ?? ""),
kvkNummer: mapServiceData(handelsregisterData, (h) => h?.kvkNummer ?? ""),
postcodeHuisnummer: mapServiceData(handelsregisterData, (h) =>
[h?.postcode, h?.huisnummer].join(" ")
[h?.postcode, h?.huisnummer].join(" "),
),
email,
telefoonnummer,
Expand Down
30 changes: 23 additions & 7 deletions src/features/klant/bedrijf/enricher/bedrijf-enricher.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,32 @@
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";
import { useBedrijfByIdentifier } from "../service/use-bedrijf-by-identifier";
import type { Bedrijf, BedrijfIdentifier } from "../types";

const isKlant = (klantOfBedrijf: Klant | Bedrijf): klantOfBedrijf is Klant => {
return klantOfBedrijf._typeOfKlant === "klant";
};

function getSharedIdentifier(
klantofbedrijf: Klant | Bedrijf,
): BedrijfIdentifier | undefined {
//als er een vestigingsnummer is dan is dat mooi
//zowel kvk als de klantregisters kennen dit
if (klantofbedrijf.vestigingsnummer) {
return { vestigingsnummer: klantofbedrijf.vestigingsnummer };
}

if (klantofbedrijf.nietNatuurlijkPersoonIdentifier) {
return {
nietNatuurlijkPersoonIdentifier: klantofbedrijf.nietNatuurlijkPersoonIdentifier,
};
}
}

export const useEnrichedBedrijf = combineEnrichers(
useKlantByVestigingsnummer,
useBedrijfByVestigingsnummer,
(either) => either.vestigingsnummer,
isKlant
useKlantByIdentifier,
useBedrijfByIdentifier,
getSharedIdentifier, //een functie die de property waarmee je het bijbehorende object in de andere bron gaat zoeken
isKlant,
);
Empty file.
30 changes: 0 additions & 30 deletions src/features/klant/bedrijf/service/UseGetOndernememing.ts

This file was deleted.

Loading

0 comments on commit 515c460

Please sign in to comment.