From 9f519db0f22c072b3646f06eec88fe741fa55714 Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Wed, 23 Oct 2024 14:58:49 +0200 Subject: [PATCH 01/17] added 'betalingsinformasjon' object to refusjonkrav --- .../app/components/Definisjon.tsx | 17 +++++++++++++++++ .../app/components/Definisjonsliste.tsx | 2 +- .../app/loaders/loadRefusjonskrav.ts | 2 ++ .../app/routes/deltakerliste.detaljer.$id.tsx | 7 +++++++ ...V198__refusjonskrav_betalingsinformasjon.sql | 5 +++++ 5 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 frontend/arrangor-flate/app/components/Definisjon.tsx create mode 100644 mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql diff --git a/frontend/arrangor-flate/app/components/Definisjon.tsx b/frontend/arrangor-flate/app/components/Definisjon.tsx new file mode 100644 index 0000000000..0fdd2deab2 --- /dev/null +++ b/frontend/arrangor-flate/app/components/Definisjon.tsx @@ -0,0 +1,17 @@ +import { Heading } from "@navikt/ds-react"; +import React from "react"; +import { Definition } from "~/components/Definisjonsliste"; + +export function Definisjon({ + key, + value, + className, +}: Definition & { className?: string; value: React.ReactNode }) { + const styles = "flex justify-between"; + return ( +
+
{key}:
+
{value}
+
+ ); +} diff --git a/frontend/arrangor-flate/app/components/Definisjonsliste.tsx b/frontend/arrangor-flate/app/components/Definisjonsliste.tsx index 36ad3362fa..b923b9b092 100644 --- a/frontend/arrangor-flate/app/components/Definisjonsliste.tsx +++ b/frontend/arrangor-flate/app/components/Definisjonsliste.tsx @@ -1,7 +1,7 @@ import { Heading } from "@navikt/ds-react"; import React from "react"; -interface Definition { +export interface Definition { key: string; value: string; } diff --git a/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts b/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts index fc2aacfae5..bcfb5fc94c 100644 --- a/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts +++ b/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts @@ -5,6 +5,8 @@ import { formaterDato } from "~/utils"; export async function loadRefusjonskrav(id: string): Promise { const krav = await ArrangorflateService.getRefusjonkrav({ id }); + console.log(krav); + const { beregning } = krav; return { diff --git a/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx b/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx index 56a5191b95..0c5f6d2198 100644 --- a/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx +++ b/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx @@ -10,6 +10,8 @@ import { Separator } from "~/components/Separator"; import { loadRefusjonskrav } from "~/loaders/loadRefusjonskrav"; import { ArrangorflateService, ArrangorflateTilsagn } from "@mr/api-client"; import { TilsagnDetaljer } from "~/components/tilsagn/TilsagnDetaljer"; +import React from "react"; +import { Definisjon } from "~/components/Definisjon"; type LoaderData = { krav: Refusjonskrav; @@ -80,6 +82,11 @@ export default function RefusjonskravDetaljer() { ))} + + + Betalingsinformasjon + +
diff --git a/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql b/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql new file mode 100644 index 0000000000..edc858cdee --- /dev/null +++ b/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql @@ -0,0 +1,5 @@ +alter table refusjonskrav + add column frist_for_godkjenning timestamp not null default '2024-11-01 00:00:00'::timestamp; + +alter table refusjonskrav + alter column frist_for_godkjenning drop default; From 822355b1cda8d3c2523e4a15e380078e4a76889e Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Wed, 23 Oct 2024 14:59:11 +0200 Subject: [PATCH 02/17] Include all changes to betalingsinformasjon --- kls_database.db | Bin 323584 -> 323584 bytes .../api/okonomi/models/RefusjonskravDto.kt | 8 ++++++++ .../okonomi/refusjon/ArrangorflateRoutes.kt | 2 ++ .../refusjon/RefusjonskravRepository.kt | 4 ++++ .../migration/R__refusjonskrav_admin_view.sql | 2 ++ ...98__refusjonskrav_betalingsinformasjon.sql | 4 ++-- .../src/main/resources/web/openapi.yaml | 10 ++++++++++ 7 files changed, 28 insertions(+), 2 deletions(-) diff --git a/kls_database.db b/kls_database.db index 74f916f556380b9fc60f38124458be0a2b073949..bc92054c75f36551f978433da0cd04e7c5791850 100644 GIT binary patch delta 8860 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 delta 8139 zcmeHMX?#>gwojd^zBirjPA4RgeP!Q6IwS;0NPrN?&K{PK0J1|8WCy`CcX3d`Kq*H> z6cmT&G8)8L90h_pKSmuP>bQ0<-_gVx>e^^o$dcW z=eBglv~+n0kwg~Bs1hCjnJwbvh~jX3DO=R?G^5y&AhSvv!6=ePO3#8Zfqv@o zNE&Yt!2w1gvP>4B39)kBw8dZ)$c|~h1Y^8xJCKWQn^~+(DUU|%!{?H;aiRTmR?vP1 z8e`?f^2fl)552rB4r>>Q<-E)oBTsxa44>}JBBfawtr>Z)u;5Ucu`&Z|N|`QO{~jaX zsq6zruDn`Vq8X#(lsMi zFTT0L$d)bd4wu!{>0peK>#K(^vCG54!XoSdT|IU(UA?xTtIt|T*GOwNUH#U0x<*<3 z=^AZ$=-SKNNY@y10bOIwiFEC44y9`!vlm_CjO}!dHWpoA&q0<)uWr2{nnf_ro{crbS@()?nY#8SuxH`A>8u!EzYIRvyh=ykXHcu}uxHY% zw#nk}3gzZ?Q?6aGKg z{*Qv~)@fj5QTPs%AARMK|F|_eCqC@OFn?xbgYPNtzr3S8Dx3ARf0va2R>!-5<6+vF9-%$qkc=GxpyeA#XxNeV=opU$d)PQ^xLbtF^nJU)&XY&>wSk>WKa=o> zy}~b#-L+5z3+>VJ?3F-h^+T;Y!OoGX`#%`tQ%NsubC`cZu*!`8eVOKQxFe?eX*pURKVE0qjmAf7&2fHtUC?&HeJs9N{ z8FI*BGJYn3M9)|s9IsQ@47M|r;(A^cgBK2p2>kF~Q9)pk9tw*cEn*|@Wv5~Bve3*F zdHSJ=B3NLj%9^8dG2&O0d<*Opx;ZsgSvo%K+c5vu$S)!n`cC`ey<0sWc?LvC_gn5U z;Y;;Xx=$;2op3R+jbGw5@DgOR+i1b>_Xqds!JJ#@q-)4TLsgberW4%(c9L_NuKNUz z886mzpPh&wr_)wQ0g>|dN2hkh$j>`Jhd6A16T&g!O{nI5>{$FnV}+RRVmelT z#(gsJ_!O{X$k$2G1`&{dI6g2Q)9ok~ zX@9pyA2{yDMem5g^1mNj1-4&SKYkzBk@Cz7j^qKDx`kq{`iXg9`v{@R<=0Qpo4v%R zlr49I?V%L`Y#R^Dc(NTq!TccD?vURbkc3a&4zqcp9e!it81OTwBt7aOJvN^w?R2z3 z6=emDvI05(d0HiG7imU$q`<=;i)eiLq9`hi3u_DWmqz|qr0!em{foD+XKBQ7_c!jD z;Rp3U>w`4g^^z-0tm1F-;czoM$41li>wm%2V2olMjUvcwfoZeIghvd@cWoz1z~+wo zcMmwpv5XJ2fovZl2FWMg^5Qcy!DbX3#dv-ZY~dMp7=EHS47q}k1D;*0S+_cdpZ@h& ze6Szwxgb-N=rPtVXY}mLltdmD^Z5j8XE$H@glXyg_eSuOYcdM;QyLc}O)5ATOv zxACcZuC<*6G^vD-MUU|oo@H%QIVpf0Pw`zm-`a}7fC}E1Bk^bTuvG*ztu5FV#TH55 z^HVfyGp(NMtZtD!4L`n@&(_CSn`m@{Gg@<849D-E5IVL$NpLXU+DHy?8mtZEVNLSt zsp(+dEQ?QDV6At|-SIj_efJv0)=|sByJ4{fAmu zc|AP$g!vmH@Atjq3->m7PJ7}bHoMQdQ^N1i|EgDOUD`pd(sfLHD*Ex|@C55(lf(9e z)$A|s6CTup!{`MH_(lQ&gx^Q<*AHWvM-#V)#8?U?GD*{~I? zRr1u!FMzd@*r%f?`NHpR0c!;jSaqwbB|gl2UToq0t>t*$L+VuZ!|mrhvhv(aKE+z* zaP}czd!_%CNPVt#6EVS2L^?~PccmY!r7~qDK~NuSi3-*L?tPZu#8a)sAzRX2th{n= z9#{<_M{@@D{=QTM)2(`$@yf$sEy9j1Y$={j=GC;Y&RKZi?Pz)W)rDX!R52x6-}2*; zGeAX7si zLKa;Jmm|*8?Ogfb`Io_(L!leMhDRu76OTdFfetO_nK1v#$QL7{e75&_Z-(dYh;JiS zMnt>Uhrbz~q`$83(%#o%U7N+LB9+gFdm)U?343OL@aBkMX0U{GlWxtXb2)pK|I^U` z)+{HVA9y9pAw!Kxt>KMq#4 zvh;zsw}4gU6d3L6Lb9RfxE3q1Q3*M(jZn|{L^HxCiXmaH@TYi!74 zTldhm*8X`uSow~4=RWe&MPQAQji25LR-R&R@`peB@sT}ZF85lwibIA*2Hz=4VWK4u zpU=atp&~)<_{%1jm7^SzJ(`6b!*FMVtD_iL#r`r`Yx%5&gSfhwv zDWu7g{>wFBWs%t*0BfYmZ4I*iuah-v1fBE7+(vBkZ)ISGc+|BOY=nIFZ`GQmQpbO! zJK21t8Z6S%m3FX(^kmd*dHHj46XHxStdqySAPo<4+(5aTEWb*!2P*H%A^W7uD_2Q2 z5hTMy&X;wv`Pz5}R)5FCny!tI{=d)EtbXJ!sy^*$77PNbugdqR{R33;&+LH%dFe|+ zfDDz-7h=;E=8?z$F$=78CpXB3uV}w%)QX@;Np(~=fzO8SY87T8y{*pa|}cwZus%SbE1AtmG!ep&EOI$yj~$#&fjQSuM} ztkkSHIzXuEt@~!2X7wQ&FK#a~+4e*m$rw5!U5+!Nmv^;CeD@++zVD1wZ*7oRl@|jb@8qR9K+@+#gvB5#u z@dEM0#BE}po@4H$scY0!Oy3~3=)+CLaO<3bs{W#x7nnO77X7MX(f!Ts3i*y}<~DNZ zf>05$@EwtW7rg8?Ft>&{xO28cKH8|c#R&{&;N$}^pBI{&X&>wHhe%cp=B6J*3g;Z) z%nXyYvtmVbdiKN6;g+2xY_6&lWHwBIvjI*vvSQ`M{cazMxi)V-MqeF zu2sG++rIQ+LI8TEk;*d#DllhMavejHoG%zKVdzUp=n z$9txMx$*|bNy9Oxcrni~SA_8B$Jv7ul>S0Yqen;#c0SK%={wA2-2sPFzlVGgOfzo^ z_0X!{hjn_4xzyPoB^+#fkM?%>0}3Ozxx|5)sAN_P=3)mS6*0xZ&l44iGaDT4M!l+3 zoR`9;f>}?VnuiMo%-565MI_OoZrGU0mV;SG5656+8k-O1!XCIv!sY}q`CvMmp_$Z# z3pF7W%DM6Fcu~rI=6sb5?gDe3N-3>iI^8$&sJS$oQAIQoKgwiPV9vqeec6*>&UVV( zhQ2Hlv-+_GV9vt5{gj)`3~8*nKWheaM#z(#X}1ngQ96Ll(#+{3G(ctwgtkCXI**i7 zL!*Ng^c@_;qHxJDWiVb*l7#l;d8-wm)Vl^Fc zf^)>~&3o|UAyjBJw2DI_k1&7Emn-$hs|?^7h7{#6PROEN`4f~yl#;`{5+2> z12Z?&{G{nJs#wRXRb%91rRgC36TPKVi=nNIh4bUzB8 zD`f+~Ov6t~**XY|n!TjGD&Qf|(qm<9XDwcy1b7teHu) zvvMaeXO<~tBsv`O!8PRLXJ)}to@OQ}Q{>60eLCL4SR%f@jR%n6WqZ3R0?BA(%1Bznm{Ve!Nu8{5Uy| zS0AilTK1VRe_`Zq--o^t-ecY{Pi@3+BYf_v@YCTr`f=T*HMuUirih~=nK!|!ki=Gp zoeA{<4WT^A=>_^laG=>s^#{}^rD$|dS795iJ{vp@W|T7LFTnIWCZQM`fc3A5X=KO9 zkR6-OQD89Bry3CknBGvBx5Nq;wto$)d5Yvb-bg%={AMg)@$MN;yxVJNk4eM=dAe%l<q(XdwlsJIbXi9$;nb=tOWe-CGz$=eC? zK!bNJq3PQfQ$o)+)+>6l2#c1{;uxcu<_wm>FUKo-;lr*R>H>~1njF-l;$$ZnjS5(P zEPT+tR!rd$#yTpq^6&_Nc26g0*p@~}UcHKyfI$rp>c2WRe`gh&sTqo`_B8OyDSo4%OT)@dMBgr zQXd?dSa|naejO!l-L%8V1i@D^E{f+YOb``ySwpeDjFuMip7XI@V G(fq&qcnysJ diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/models/RefusjonskravDto.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/models/RefusjonskravDto.kt index 5cc8f5ab25..a00c85b2bc 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/models/RefusjonskravDto.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/models/RefusjonskravDto.kt @@ -19,6 +19,7 @@ data class RefusjonskravDto( val gjennomforing: Gjennomforing, val arrangor: Arrangor, val beregning: RefusjonKravBeregning, + val betalingsinformasjon: Betalingsinformasjon, ) { @Serializable data class Gjennomforing( @@ -40,4 +41,11 @@ data class RefusjonskravDto( data class Tiltakstype( val navn: String, ) + + @Serializable + data class Betalingsinformasjon( + val kontoNummer: String, + val kid: String?, + + ) } diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt index 9838ab16aa..27cefb3371 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt @@ -184,6 +184,7 @@ private fun toRefusjonKravOppsummering(krav: RefusjonskravDto) = when (val bereg antallManedsverk = deltakelser.sumOf { it.manedsverk }, belop = beregning.output.belop, ), + betalingsinformasjon = krav.betalingsinformasjon, ) } } @@ -201,6 +202,7 @@ data class RefusjonKravAft( val arrangor: RefusjonskravDto.Arrangor, val deltakelser: List, val beregning: Beregning, + val betalingsinformasjon: RefusjonskravDto.Betalingsinformasjon, ) { @Serializable data class Beregning( diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt index e89400c9c9..a06588d226 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt @@ -212,6 +212,10 @@ class RefusjonskravRepository(private val db: Database) { navn = string("tiltakstype_navn"), ), beregning = beregning, + betalingsinformasjon = RefusjonskravDto.Betalingsinformasjon( + kontoNummer = string("konto_nummer"), + kid = stringOrNull("kid"), + ), ) } } diff --git a/mulighetsrommet-api/src/main/resources/db/migration/R__refusjonskrav_admin_view.sql b/mulighetsrommet-api/src/main/resources/db/migration/R__refusjonskrav_admin_view.sql index 6ee13bf4cb..417e01dcf4 100644 --- a/mulighetsrommet-api/src/main/resources/db/migration/R__refusjonskrav_admin_view.sql +++ b/mulighetsrommet-api/src/main/resources/db/migration/R__refusjonskrav_admin_view.sql @@ -8,6 +8,8 @@ select refusjonskrav.id, else 'KLAR_FOR_GODKJENNING' end::refusjonskrav_status as status, refusjonskrav.frist_for_godkjenning, + refusjonskrav.konto_nummer, + refusjonskrav.kid, gjennomforing.id as gjennomforing_id, gjennomforing.navn as gjennomforing_navn, arrangor.id as arrangor_id, diff --git a/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql b/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql index edc858cdee..49e07db7fe 100644 --- a/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql +++ b/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql @@ -1,5 +1,5 @@ alter table refusjonskrav - add column frist_for_godkjenning timestamp not null default '2024-11-01 00:00:00'::timestamp; + add column konto_nummer varchar(11) not null default '11111111111'; alter table refusjonskrav - alter column frist_for_godkjenning drop default; + add column kid varchar(25); diff --git a/mulighetsrommet-api/src/main/resources/web/openapi.yaml b/mulighetsrommet-api/src/main/resources/web/openapi.yaml index eed67a2857..5c7050b902 100644 --- a/mulighetsrommet-api/src/main/resources/web/openapi.yaml +++ b/mulighetsrommet-api/src/main/resources/web/openapi.yaml @@ -4923,6 +4923,15 @@ components: $ref: "#/components/schemas/RefusjonKravDeltakelse" beregning: $ref: "#/components/schemas/RefusjonKravAftBeregning" + betalingsinformasjon: + type: object + properties: + kontoNummer: + type: string + kid: + type: string + required: + - kontoNummer required: - type - id @@ -4933,6 +4942,7 @@ components: - arrangor - deltakelser - beregning + - betalingsinformasjon RefusjonKravTiltakstype: type: object From 41f06ae5fbf9aa033d3341d1cb3740d1a5ee812a Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Thu, 24 Oct 2024 11:58:02 +0200 Subject: [PATCH 03/17] Work on kontoNummer and implemented formaterKontoNummer util --- .../arrangor-flate/app/components/Definisjon.tsx | 16 ++++++++++------ frontend/arrangor-flate/app/domene/domene.ts | 4 ++++ .../app/loaders/loadRefusjonskrav.ts | 1 + .../app/routes/deltakerliste.detaljer.$id.tsx | 15 ++++++++++++++- frontend/frontend-common/utils/utils.ts | 4 ++++ 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/frontend/arrangor-flate/app/components/Definisjon.tsx b/frontend/arrangor-flate/app/components/Definisjon.tsx index 0fdd2deab2..e6fd9278fe 100644 --- a/frontend/arrangor-flate/app/components/Definisjon.tsx +++ b/frontend/arrangor-flate/app/components/Definisjon.tsx @@ -3,15 +3,19 @@ import React from "react"; import { Definition } from "~/components/Definisjonsliste"; export function Definisjon({ - key, - value, + label, + children, className, -}: Definition & { className?: string; value: React.ReactNode }) { +}: { + label: string; + className?: string; + children: React.ReactNode; +}) { const styles = "flex justify-between"; return ( -
-
{key}:
-
{value}
+
+
{label}:
+
{children}
); } diff --git a/frontend/arrangor-flate/app/domene/domene.ts b/frontend/arrangor-flate/app/domene/domene.ts index 55b6f72a16..e6eb42b932 100644 --- a/frontend/arrangor-flate/app/domene/domene.ts +++ b/frontend/arrangor-flate/app/domene/domene.ts @@ -23,6 +23,10 @@ export interface Refusjonskrav { }; beregning: RefusjonKravAftBeregning; deltakere: Deltaker[]; + betalingsinformasjon: { + kontoNummer: string; + kid?: string; + }; } export type TilsagnDetaljer = { diff --git a/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts b/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts index bcfb5fc94c..b686f69d5e 100644 --- a/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts +++ b/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts @@ -33,5 +33,6 @@ export async function loadRefusjonskrav(id: string): Promise { perioder: d.perioder, }; }), + betalingsinformasjon: krav.betalingsinformasjon, }; } diff --git a/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx b/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx index 0c5f6d2198..23e8970a18 100644 --- a/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx +++ b/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx @@ -12,6 +12,7 @@ import { ArrangorflateService, ArrangorflateTilsagn } from "@mr/api-client"; import { TilsagnDetaljer } from "~/components/tilsagn/TilsagnDetaljer"; import React from "react"; import { Definisjon } from "~/components/Definisjon"; +import { formaterKontoNummer } from "@mr/frontend-common/utils/utils"; type LoaderData = { krav: Refusjonskrav; @@ -86,9 +87,21 @@ export default function RefusjonskravDetaljer() { Betalingsinformasjon - + + {formaterKontoNummer(krav.betalingsinformasjon.kontoNummer)} + {formaterKontoNummer('12345678901')} + Endre + + + {krav.betalingsinformasjon.kid} + + Endre + Det erklæres herved at alle opplysninger er gitt i henhold til de faktiske forhold diff --git a/frontend/frontend-common/utils/utils.ts b/frontend/frontend-common/utils/utils.ts index df9074333a..6c3698541c 100644 --- a/frontend/frontend-common/utils/utils.ts +++ b/frontend/frontend-common/utils/utils.ts @@ -46,3 +46,7 @@ export function isKursTiltak(tiltakskode?: Tiltakskode, arenaKode?: TiltakskodeA return false; } + +export function formaterKontoNummer(kontoNummer: string): string { + return `${kontoNummer.substring(0, 4)} ${kontoNummer.substring(4, 6)} ${kontoNummer.substring(6, 11)}`; +} From 7658fd218bdb4d1a467ac1b8a129d049f8639d62 Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Thu, 24 Oct 2024 18:42:22 +0200 Subject: [PATCH 04/17] Functioning setting of betalingsinformasjon --- .../app/routes/deltakerliste.detaljer.$id.tsx | 47 +++++++++++++++---- .../okonomi/refusjon/ArrangorflateRoutes.kt | 25 ++++++++++ .../refusjon/RefusjonskravRepository.kt | 17 +++++++ .../src/main/resources/web/openapi.yaml | 24 ++++++++++ 4 files changed, 104 insertions(+), 9 deletions(-) diff --git a/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx b/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx index 23e8970a18..1a7b671972 100644 --- a/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx +++ b/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx @@ -37,6 +37,8 @@ export const action: ActionFunction = async ({ request }) => { const formdata = await request.formData(); const bekreftelse = formdata.get("bekreftelse"); const refusjonskravId = formdata.get("refusjonskravId"); + const kontoNummer = formdata.get("kontoNummer"); + const kid = formdata.get("kid"); if (!bekreftelse) { return json({ error: "Du må bekrefte at opplysningene er korrekte" }, { status: 400 }); @@ -46,16 +48,30 @@ export const action: ActionFunction = async ({ request }) => { return json({ error: "Mangler refusjonskravId" }, { status: 400 }); } + if (!kontoNummer) { + return json({ error: "Mangler kontonummer" }, { status: 400 }); + } + await ArrangorflateService.godkjennRefusjonskrav({ id: refusjonskravId as string, }); + await ArrangorflateService.setRefusjonskravBetalingsinformasjon({ + id: refusjonskravId as string, + requestBody: { + kontoNummer: kontoNummer as string, + kid: kid as string, + } + }); + return redirect(`/deltakerliste/kvittering/${refusjonskravId}`); }; export default function RefusjonskravDetaljer() { const { tilsagn, krav } = useLoaderData(); const data = useActionData(); + const [isEditing, setIsEditing] = React.useState(false); + const [kontoNummer, setKontoNummer] = React.useState(krav.betalingsinformasjon.kontoNummer); return ( <> @@ -66,7 +82,7 @@ export default function RefusjonskravDetaljer() { url: `/deltakerliste/${krav.id}`, }} /> - + Tilsagnsdetaljer @@ -90,17 +106,30 @@ export default function RefusjonskravDetaljer() { - {formaterKontoNummer(krav.betalingsinformasjon.kontoNummer)} - {formaterKontoNummer('12345678901')} - Endre - - - {krav.betalingsinformasjon.kid} setKontoNummer(e.target.value)} /> - Endre + {formaterKontoNummer(kontoNummer)} + { + setIsEditing(!isEditing); + }}>Endre + + +
+ {krav.betalingsinformasjon.kid} + + {/* Endre */} +
diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt index 27cefb3371..b08bb64369 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt @@ -6,6 +6,7 @@ import io.ktor.server.application.* import io.ktor.server.auth.* import io.ktor.server.auth.jwt.* import io.ktor.server.plugins.* +import io.ktor.server.request.receive import io.ktor.server.response.* import io.ktor.server.routing.* import io.ktor.server.util.* @@ -100,6 +101,24 @@ fun Route.arrangorflateRoutes() { call.respond(HttpStatusCode.OK) } + post("/{id}/set-betalings-informasjon") { + val id = call.parameters.getOrFail("id") + + val krav = refusjonskrav.get(id) + ?: throw NotFoundException("Fant ikke refusjonskrav med id=$id") + + requireTilgangHosArrangor(krav.arrangor.organisasjonsnummer) + val request = call.receive() + + refusjonskrav.setBetalingsInformasjon( + id, + request.kontoNummer, + request.kid, + ) + + call.respond(HttpStatusCode.OK) + } + get("/{id}/kvittering") { val id = call.parameters.getOrFail("id") val html = createHtmlFromTemplateData("refusjon-kvittering", "refusjon").toString() @@ -229,3 +248,9 @@ data class RefusjonKravDeltakelse( val manedsverk: Double, val veileder: String?, ) + +@Serializable +data class SetRefusjonKravBetalingsinformasjonRequest( + val kontoNummer: String, + val kid: String?, +) diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt index a06588d226..526fdaa92b 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt @@ -130,6 +130,23 @@ class RefusjonskravRepository(private val db: Database) { .let { db.run(it) } } + fun setBetalingsInformasjon(id: UUID, kontoNummer: String, kid: String?) { + @Language("PostgreSQL") + val query = """ + update refusjonskrav + set konto_nummer = :kontoNummer, kid = :kid + where id = :id::uuid + """.trimIndent() + + queryOf(query, mapOf( + "id" to id, + "kontoNummer" to kontoNummer, + "kid" to kid, + )) + .asUpdate + .let { db.run(it) } + } + fun get(id: UUID) = db.transaction { get(id, it) } fun get(id: UUID, tx: Session): RefusjonskravDto? { diff --git a/mulighetsrommet-api/src/main/resources/web/openapi.yaml b/mulighetsrommet-api/src/main/resources/web/openapi.yaml index 5c7050b902..457a77927e 100644 --- a/mulighetsrommet-api/src/main/resources/web/openapi.yaml +++ b/mulighetsrommet-api/src/main/resources/web/openapi.yaml @@ -1891,6 +1891,30 @@ paths: 200: description: Godkjenn et refusjonskrav + /api/v1/intern/arrangorflate/refusjonskrav/{id}/set-betalings-informasjon: + post: + parameters: + - $ref: "#/components/parameters/ID" + requestBody: + content: + application/json: + schema: + type: object + properties: + kontoNummer: + type: string + kid: + type: string + required: + - kontoNummer + required: true + tags: + - Arrangorflate + operationId: setRefusjonskravBetalingsinformasjon + responses: + 200: + description: Set betalibngsinformasjon for et refusjonskrav + /api/v1/intern/arrangorflate/refusjonskrav/{id}/kvittering: parameters: - $ref: "#/components/parameters/ID" From 82c55815e2b653297807a4cd28da6fe89b8b0811 Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Thu, 24 Oct 2024 18:46:21 +0200 Subject: [PATCH 05/17] Betalingsinformasjon on kvittering page --- .../arrangor-flate/app/loaders/loadRefusjonskrav.ts | 2 -- .../app/routes/deltakerliste.kvittering.$id.tsx | 11 +++++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts b/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts index b686f69d5e..820c6d498d 100644 --- a/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts +++ b/frontend/arrangor-flate/app/loaders/loadRefusjonskrav.ts @@ -5,8 +5,6 @@ import { formaterDato } from "~/utils"; export async function loadRefusjonskrav(id: string): Promise { const krav = await ArrangorflateService.getRefusjonkrav({ id }); - console.log(krav); - const { beregning } = krav; return { diff --git a/frontend/arrangor-flate/app/routes/deltakerliste.kvittering.$id.tsx b/frontend/arrangor-flate/app/routes/deltakerliste.kvittering.$id.tsx index d82f0c4df0..592c5ab040 100644 --- a/frontend/arrangor-flate/app/routes/deltakerliste.kvittering.$id.tsx +++ b/frontend/arrangor-flate/app/routes/deltakerliste.kvittering.$id.tsx @@ -11,6 +11,7 @@ import { loadRefusjonskrav } from "~/loaders/loadRefusjonskrav"; import { DeltakerlisteDetaljer } from "~/components/deltakerliste/DeltakerlisteDetaljer"; import { RefusjonTilsagnsDetaljer } from "~/components/refusjonskrav/TilsagnsDetaljer"; import { RefusjonDetaljer } from "~/components/refusjonskrav/RefusjonDetaljer"; +import { formaterKontoNummer } from "@mr/frontend-common/utils/utils"; type LoaderData = { krav: Refusjonskrav; @@ -70,8 +71,14 @@ export default function RefusjonskravKvittering() { Date: Thu, 24 Oct 2024 18:48:04 +0200 Subject: [PATCH 06/17] typo --- mulighetsrommet-api/src/main/resources/web/openapi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mulighetsrommet-api/src/main/resources/web/openapi.yaml b/mulighetsrommet-api/src/main/resources/web/openapi.yaml index 457a77927e..a977d21f67 100644 --- a/mulighetsrommet-api/src/main/resources/web/openapi.yaml +++ b/mulighetsrommet-api/src/main/resources/web/openapi.yaml @@ -1913,7 +1913,7 @@ paths: operationId: setRefusjonskravBetalingsinformasjon responses: 200: - description: Set betalibngsinformasjon for et refusjonskrav + description: Set betalingsinformasjon for et refusjonskrav /api/v1/intern/arrangorflate/refusjonskrav/{id}/kvittering: parameters: From 9bfbeeeda3dc01db971b13c9db0bdc045013c9bf Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Thu, 24 Oct 2024 18:50:25 +0200 Subject: [PATCH 07/17] Lint fix --- .../app/components/Definisjon.tsx | 2 -- .../app/routes/deltakerliste.detaljer.$id.tsx | 26 +++++++++---------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/frontend/arrangor-flate/app/components/Definisjon.tsx b/frontend/arrangor-flate/app/components/Definisjon.tsx index e6fd9278fe..e89f4504f1 100644 --- a/frontend/arrangor-flate/app/components/Definisjon.tsx +++ b/frontend/arrangor-flate/app/components/Definisjon.tsx @@ -1,6 +1,4 @@ -import { Heading } from "@navikt/ds-react"; import React from "react"; -import { Definition } from "~/components/Definisjonsliste"; export function Definisjon({ label, diff --git a/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx b/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx index 1a7b671972..5967d7f400 100644 --- a/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx +++ b/frontend/arrangor-flate/app/routes/deltakerliste.detaljer.$id.tsx @@ -61,7 +61,7 @@ export const action: ActionFunction = async ({ request }) => { requestBody: { kontoNummer: kontoNummer as string, kid: kid as string, - } + }, }); return redirect(`/deltakerliste/kvittering/${refusjonskravId}`); @@ -109,26 +109,26 @@ export default function RefusjonskravDetaljer() { setKontoNummer(e.target.value)} /> + + {formaterKontoNummer(kontoNummer)} + {formaterKontoNummer(kontoNummer)} - { - setIsEditing(!isEditing); - }}>Endre + className="ml-4 text-text-action cursor-pointer" + onClick={() => { + setIsEditing(!isEditing); + }} + > + Endre +
{krav.betalingsinformasjon.kid} - - {/* Endre */} +
From 949eb9a05adafff628d3c88f74e2bbbb55a6956d Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Thu, 24 Oct 2024 18:56:20 +0200 Subject: [PATCH 08/17] Add betalingsinformasjon to mocks --- .../arrangor-flate/app/mocks/arrangorflateMocks.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/frontend/arrangor-flate/app/mocks/arrangorflateMocks.ts b/frontend/arrangor-flate/app/mocks/arrangorflateMocks.ts index 692208c84c..747aa92003 100644 --- a/frontend/arrangor-flate/app/mocks/arrangorflateMocks.ts +++ b/frontend/arrangor-flate/app/mocks/arrangorflateMocks.ts @@ -11,6 +11,10 @@ const mockKrav: RefusjonKravAft[] = [ tiltakstype: { navn: "Arbeidsforbredene trening", }, + betalingsinformasjon: { + kontoNummer: "12345678901", + kid: "123456789", + }, gjennomforing: { id: uuid(), navn: "AFT tiltak Moss", @@ -64,6 +68,10 @@ const mockKrav: RefusjonKravAft[] = [ tiltakstype: { navn: "Arbeidsforbredene trening", }, + betalingsinformasjon: { + kontoNummer: "12345678901", + kid: "123456789", + }, gjennomforing: { id: uuid(), navn: "AFT tiltak Moss", @@ -121,6 +129,10 @@ const mockKrav: RefusjonKravAft[] = [ id: uuid(), navn: "Amo tiltak Halden", }, + betalingsinformasjon: { + kontoNummer: "12345678901", + kid: "123456789", + }, arrangor: { id: uuid(), organisasjonsnummer: "123456789", From e2c1659137deb20fc3dfcb9b892f5102678fec43 Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Tue, 29 Oct 2024 10:35:28 +0100 Subject: [PATCH 09/17] Rename kontoNummer to kontonummer --- frontend/arrangor-flate/app/domene/domene.ts | 6 +-- .../app/mocks/arrangorflateMocks.ts | 6 +-- .../app/routes/refusjonskrav.$id.bekreft.tsx | 24 +++++------ .../okonomi/refusjon/ArrangorflateRoutes.kt | 5 +-- ...98__refusjonskrav_betalingsinformasjon.sql | 2 +- .../src/main/resources/web/openapi.yaml | 43 +++++++------------ 6 files changed, 33 insertions(+), 53 deletions(-) diff --git a/frontend/arrangor-flate/app/domene/domene.ts b/frontend/arrangor-flate/app/domene/domene.ts index 970b49434a..bb2726d8bb 100644 --- a/frontend/arrangor-flate/app/domene/domene.ts +++ b/frontend/arrangor-flate/app/domene/domene.ts @@ -1,4 +1,5 @@ import { + Betalingsinformasjon, RefusjonKravAftBeregning, RefusjonKravDeltakelsePeriode, RefusjonKravDeltakelsePerson, @@ -27,10 +28,7 @@ export interface Refusjonskrav { }; beregning: RefusjonKravAftBeregning; deltakere: Deltaker[]; - betalingsinformasjon: { - kontoNummer: string; - kid?: string; - }; + betalingsinformasjon: Betalingsinformasjon; } export type TilsagnDetaljer = { diff --git a/frontend/arrangor-flate/app/mocks/arrangorflateMocks.ts b/frontend/arrangor-flate/app/mocks/arrangorflateMocks.ts index cb2591963a..09c20dd462 100644 --- a/frontend/arrangor-flate/app/mocks/arrangorflateMocks.ts +++ b/frontend/arrangor-flate/app/mocks/arrangorflateMocks.ts @@ -12,7 +12,7 @@ const mockKrav: RefusjonKravAft[] = [ navn: "Arbeidsforbredene trening", }, betalingsinformasjon: { - kontoNummer: "12345678901", + kontonummer: "12345678901", kid: "123456789", }, gjennomforing: { @@ -73,7 +73,7 @@ const mockKrav: RefusjonKravAft[] = [ navn: "Arbeidsforbredene trening", }, betalingsinformasjon: { - kontoNummer: "12345678901", + kontonummer: "12345678901", kid: "123456789", }, gjennomforing: { @@ -138,7 +138,7 @@ const mockKrav: RefusjonKravAft[] = [ navn: "Amo tiltak Halden", }, betalingsinformasjon: { - kontoNummer: "12345678901", + kontonummer: "12345678901", kid: "123456789", }, arrangor: { diff --git a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx index 7d067b366a..3b9aa79bce 100644 --- a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx +++ b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx @@ -38,7 +38,7 @@ export const action: ActionFunction = async ({ request }) => { const formdata = await request.formData(); const bekreftelse = formdata.get("bekreftelse"); const refusjonskravId = formdata.get("refusjonskravId"); - const kontoNummer = formdata.get("kontoNummer"); + const kontonummer = formdata.get("kontonummer"); const kid = formdata.get("kid"); if (!bekreftelse) { @@ -49,22 +49,18 @@ export const action: ActionFunction = async ({ request }) => { return json({ error: "Mangler refusjonskravId" }, { status: 400 }); } - if (!kontoNummer) { + if (!kontonummer) { return json({ error: "Mangler kontonummer" }, { status: 400 }); } await ArrangorflateService.godkjennRefusjonskrav({ id: refusjonskravId as string, + requestBody: { + kontonummer: kontonummer as string, + kid: kid as string, + }, }); - // await ArrangorflateService.setRefusjonskravBetalingsinformasjon({ - // id: refusjonskravId as string, - // requestBody: { - // kontoNummer: kontoNummer as string, - // kid: kid as string, - // }, - // }); - return redirect(`/refusjonskrav/${refusjonskravId}/kvittering`); }; @@ -72,7 +68,7 @@ export default function BekreftRefusjonskrav() { const { krav, tilsagn } = useLoaderData(); const data = useActionData(); const [isEditing, setIsEditing] = React.useState(false); - const [kontoNummer, setKontoNummer] = React.useState(krav.betalingsinformasjon.kontoNummer); + const [kontonummer, setKontoNummer] = React.useState(krav.betalingsinformasjon.kontonummer); return ( <> @@ -90,13 +86,13 @@ export default function BekreftRefusjonskrav() { setKontoNummer(e.target.value)} /> - {formaterKontoNummer(kontoNummer)} + {formaterKontoNummer(kontonummer)} Date: Tue, 29 Oct 2024 11:01:56 +0100 Subject: [PATCH 10/17] Value classes for kontonummer and kid --- .../no/nav/mulighetsrommet/domain/dto/Kid.kt | 15 ++++++++++++++ .../mulighetsrommet/domain/dto/Kontonummer.kt | 15 ++++++++++++++ .../api/okonomi/models/RefusjonskravDto.kt | 2 +- .../okonomi/refusjon/ArrangorflateRoutes.kt | 20 ++++++++++--------- .../refusjon/RefusjonskravRepository.kt | 15 ++++++++------ ...98__refusjonskrav_betalingsinformasjon.sql | 2 +- 6 files changed, 52 insertions(+), 17 deletions(-) create mode 100644 common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kid.kt create mode 100644 common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kontonummer.kt diff --git a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kid.kt b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kid.kt new file mode 100644 index 0000000000..28958f248d --- /dev/null +++ b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kid.kt @@ -0,0 +1,15 @@ +package no.nav.mulighetsrommet.domain.dto + +import kotlinx.serialization.Serializable + +private val KID_REGEX = "^\\d{1,25}$".toRegex() + +@Serializable +@JvmInline +value class Kid(val value: String) { + init { + require(KID_REGEX.matches(value)) { + "'Kid' må være på formatet '$KID_REGEX'" + } + } +} diff --git a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kontonummer.kt b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kontonummer.kt new file mode 100644 index 0000000000..04d6978d1e --- /dev/null +++ b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kontonummer.kt @@ -0,0 +1,15 @@ +package no.nav.mulighetsrommet.domain.dto + +import kotlinx.serialization.Serializable + +private val KONTONUMMER_REGEX = "^\\d{9}$".toRegex() + +@Serializable +@JvmInline +value class Kontonummer(val value: String) { + init { + require(KONTONUMMER_REGEX.matches(value)) { + "'Kontonummer' må være på formatet '${KONTONUMMER_REGEX}'" + } + } +} diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/models/RefusjonskravDto.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/models/RefusjonskravDto.kt index a00c85b2bc..2878d73c8c 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/models/RefusjonskravDto.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/models/RefusjonskravDto.kt @@ -44,7 +44,7 @@ data class RefusjonskravDto( @Serializable data class Betalingsinformasjon( - val kontoNummer: String, + val kontonummer: String, val kid: String?, ) diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt index fbf37f43af..ba448a4666 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/ArrangorflateRoutes.kt @@ -18,6 +18,8 @@ import no.nav.mulighetsrommet.api.okonomi.tilsagn.TilsagnService import no.nav.mulighetsrommet.api.plugins.ArrangorflatePrincipal import no.nav.mulighetsrommet.api.repositories.DeltakerRepository import no.nav.mulighetsrommet.api.services.ArrangorService +import no.nav.mulighetsrommet.domain.dto.Kid +import no.nav.mulighetsrommet.domain.dto.Kontonummer import no.nav.mulighetsrommet.domain.dto.NorskIdent import no.nav.mulighetsrommet.domain.dto.Organisasjonsnummer import no.nav.mulighetsrommet.domain.serializers.LocalDateSerializer @@ -259,16 +261,16 @@ data class RefusjonKravDeltakelse( val manedsverk: Double, val person: Person?, val veileder: String?, -) +) { + @Serializable + data class Person( + val norskIdent: NorskIdent, + val navn: String, + ) +} @Serializable data class SetRefusjonKravBetalingsinformasjonRequest( - val kontonummer: String, - val kid: String?, -) - -@Serializable -data class Person( - val norskIdent: NorskIdent, - val navn: String, + val kontonummer: Kontonummer, + val kid: Kid?, ) diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt index bf550ce9c6..a444f2a231 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt @@ -140,11 +140,14 @@ class RefusjonskravRepository(private val db: Database) { where id = :id::uuid """.trimIndent() - queryOf(query, mapOf( - "id" to id, - "kontoNummer" to kontoNummer, - "kid" to kid, - )) + queryOf( + query, + mapOf( + "id" to id, + "kontoNummer" to kontoNummer, + "kid" to kid, + ), + ) .asUpdate .let { db.run(it) } } @@ -237,7 +240,7 @@ class RefusjonskravRepository(private val db: Database) { ), beregning = beregning, betalingsinformasjon = RefusjonskravDto.Betalingsinformasjon( - kontoNummer = string("konto_nummer"), + kontonummer = string("kontonummer"), kid = stringOrNull("kid"), ), ) diff --git a/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql b/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql index 5495867788..9d5b4f1215 100644 --- a/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql +++ b/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql @@ -1,5 +1,5 @@ alter table refusjonskrav - add column konto_nummer varchar(11); + add column kontonummer varchar(11); alter table refusjonskrav add column kid varchar(25); From 7db5328af1333c1283c2bf9855b60dfb9630bd8b Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Tue, 29 Oct 2024 14:37:55 +0100 Subject: [PATCH 11/17] Nullable kontonummer --- .../no/nav/mulighetsrommet/domain/dto/Kid.kt | 2 +- .../nav/mulighetsrommet/domain/dto/Kontonummer.kt | 2 +- .../app/routes/refusjonskrav.$id.bekreft.tsx | 4 ++-- .../app/routes/refusjonskrav.$id.kvittering.tsx | 2 +- .../api/okonomi/models/RefusjonskravDto.kt | 6 ++++-- .../api/okonomi/refusjon/ArrangorflateRoutes.kt | 14 +------------- .../okonomi/refusjon/RefusjonskravRepository.kt | 14 ++++++++------ .../db/migration/R__refusjonskrav_admin_view.sql | 2 +- ...> V199__refusjonskrav_betalingsinformasjon.sql} | 1 + 9 files changed, 20 insertions(+), 27 deletions(-) rename mulighetsrommet-api/src/main/resources/db/migration/{V198__refusjonskrav_betalingsinformasjon.sql => V199__refusjonskrav_betalingsinformasjon.sql} (99%) diff --git a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kid.kt b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kid.kt index 28958f248d..6b90fd4ebe 100644 --- a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kid.kt +++ b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kid.kt @@ -2,7 +2,7 @@ package no.nav.mulighetsrommet.domain.dto import kotlinx.serialization.Serializable -private val KID_REGEX = "^\\d{1,25}$".toRegex() +private val KID_REGEX = "^\\d{0,25}$".toRegex() @Serializable @JvmInline diff --git a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kontonummer.kt b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kontonummer.kt index 04d6978d1e..01f27cbf6c 100644 --- a/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kontonummer.kt +++ b/common/domain/src/main/kotlin/no/nav/mulighetsrommet/domain/dto/Kontonummer.kt @@ -2,7 +2,7 @@ package no.nav.mulighetsrommet.domain.dto import kotlinx.serialization.Serializable -private val KONTONUMMER_REGEX = "^\\d{9}$".toRegex() +private val KONTONUMMER_REGEX = "^\\d{11}$".toRegex() @Serializable @JvmInline diff --git a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx index 3b9aa79bce..fac9df09b1 100644 --- a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx +++ b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx @@ -68,7 +68,7 @@ export default function BekreftRefusjonskrav() { const { krav, tilsagn } = useLoaderData(); const data = useActionData(); const [isEditing, setIsEditing] = React.useState(false); - const [kontonummer, setKontoNummer] = React.useState(krav.betalingsinformasjon.kontonummer); + const [kontonummer, setKontoNummer] = React.useState(krav.betalingsinformasjon?.kontonummer); return ( <> @@ -92,7 +92,7 @@ export default function BekreftRefusjonskrav() { onChange={(e) => setKontoNummer(e.target.value)} /> - {formaterKontoNummer(kontonummer)} + {kontonummer && formaterKontoNummer(kontonummer)} ("id") - - val krav = refusjonskrav.get(id) - ?: throw NotFoundException("Fant ikke refusjonskrav med id=$id") - - requireTilgangHosArrangor(krav.arrangor.organisasjonsnummer) val request = call.receive() + refusjonskrav.setGodkjentAvArrangor(id, LocalDateTime.now()) refusjonskrav.setBetalingsInformasjon( id, request.kontonummer, diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt index a444f2a231..3f931efe54 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt @@ -9,6 +9,8 @@ import no.nav.mulighetsrommet.api.okonomi.models.RefusjonKravBeregning import no.nav.mulighetsrommet.api.okonomi.models.RefusjonKravBeregningAft import no.nav.mulighetsrommet.api.okonomi.models.RefusjonskravDto import no.nav.mulighetsrommet.database.Database +import no.nav.mulighetsrommet.domain.dto.Kid +import no.nav.mulighetsrommet.domain.dto.Kontonummer import no.nav.mulighetsrommet.domain.dto.Organisasjonsnummer import org.intellij.lang.annotations.Language import java.time.LocalDateTime @@ -132,11 +134,11 @@ class RefusjonskravRepository(private val db: Database) { .let { db.run(it) } } - fun setBetalingsInformasjon(id: UUID, kontoNummer: String, kid: String?) { + fun setBetalingsInformasjon(id: UUID, kontonummer: Kontonummer, kid: Kid?) { @Language("PostgreSQL") val query = """ update refusjonskrav - set konto_nummer = :kontoNummer, kid = :kid + set kontonummer = :kontonummer, kid = :kid where id = :id::uuid """.trimIndent() @@ -144,8 +146,8 @@ class RefusjonskravRepository(private val db: Database) { query, mapOf( "id" to id, - "kontoNummer" to kontoNummer, - "kid" to kid, + "kontonummer" to kontonummer.value, + "kid" to kid?.value, ), ) .asUpdate @@ -240,8 +242,8 @@ class RefusjonskravRepository(private val db: Database) { ), beregning = beregning, betalingsinformasjon = RefusjonskravDto.Betalingsinformasjon( - kontonummer = string("kontonummer"), - kid = stringOrNull("kid"), + kontonummer = stringOrNull("kontonummer")?.let { Kontonummer(it) }, + kid = stringOrNull("kid")?.let { Kid(it) }, ), ) } diff --git a/mulighetsrommet-api/src/main/resources/db/migration/R__refusjonskrav_admin_view.sql b/mulighetsrommet-api/src/main/resources/db/migration/R__refusjonskrav_admin_view.sql index 417e01dcf4..9305a7efdc 100644 --- a/mulighetsrommet-api/src/main/resources/db/migration/R__refusjonskrav_admin_view.sql +++ b/mulighetsrommet-api/src/main/resources/db/migration/R__refusjonskrav_admin_view.sql @@ -8,7 +8,7 @@ select refusjonskrav.id, else 'KLAR_FOR_GODKJENNING' end::refusjonskrav_status as status, refusjonskrav.frist_for_godkjenning, - refusjonskrav.konto_nummer, + refusjonskrav.kontonummer, refusjonskrav.kid, gjennomforing.id as gjennomforing_id, gjennomforing.navn as gjennomforing_navn, diff --git a/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql b/mulighetsrommet-api/src/main/resources/db/migration/V199__refusjonskrav_betalingsinformasjon.sql similarity index 99% rename from mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql rename to mulighetsrommet-api/src/main/resources/db/migration/V199__refusjonskrav_betalingsinformasjon.sql index 9d5b4f1215..42cefe216c 100644 --- a/mulighetsrommet-api/src/main/resources/db/migration/V198__refusjonskrav_betalingsinformasjon.sql +++ b/mulighetsrommet-api/src/main/resources/db/migration/V199__refusjonskrav_betalingsinformasjon.sql @@ -3,3 +3,4 @@ alter table refusjonskrav alter table refusjonskrav add column kid varchar(25); + From fc225b02a189c745875601855b54c9dec8c4bf7a Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Tue, 29 Oct 2024 14:44:45 +0100 Subject: [PATCH 12/17] Refactor inputs for kontonummer and kid --- .../app/routes/refusjonskrav.$id.bekreft.tsx | 25 ++++++------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx index fac9df09b1..d5cd32138b 100644 --- a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx +++ b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx @@ -67,8 +67,6 @@ export const action: ActionFunction = async ({ request }) => { export default function BekreftRefusjonskrav() { const { krav, tilsagn } = useLoaderData(); const data = useActionData(); - const [isEditing, setIsEditing] = React.useState(false); - const [kontonummer, setKontoNummer] = React.useState(krav.betalingsinformasjon?.kontonummer); return ( <> @@ -87,26 +85,19 @@ export default function BekreftRefusjonskrav() { setKontoNummer(e.target.value)} + className="border border-[#0214317D] rounded-md" + defaultValue={krav.betalingsinformasjon?.kontonummer} /> - - {kontonummer && formaterKontoNummer(kontonummer)} - - { - setIsEditing(!isEditing); - }} - > - Endre -
{krav.betalingsinformasjon.kid} - +
From d85430b3ea9e39f8c7bb71e6ed7f8a2ac200fa23 Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Tue, 29 Oct 2024 14:47:02 +0100 Subject: [PATCH 13/17] maxLength on inputs --- .../arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx index d5cd32138b..7f28f26369 100644 --- a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx +++ b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx @@ -87,6 +87,7 @@ export default function BekreftRefusjonskrav() { name="kontonummer" className="border border-[#0214317D] rounded-md" defaultValue={krav.betalingsinformasjon?.kontonummer} + maxLength={11} /> @@ -97,6 +98,7 @@ export default function BekreftRefusjonskrav() { name="kid" className="border border-[#0214317D] rounded-md" defaultValue={krav.betalingsinformasjon?.kid} + maxLength={25} />
From 224a7aed7990570736ea349e927ec8904c1e5f4a Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Tue, 29 Oct 2024 14:48:24 +0100 Subject: [PATCH 14/17] Remove unused import --- frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx index 7f28f26369..ee812c683f 100644 --- a/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx +++ b/frontend/arrangor-flate/app/routes/refusjonskrav.$id.bekreft.tsx @@ -9,7 +9,6 @@ import { ArrangorflateService, ArrangorflateTilsagn } from "@mr/api-client"; import { RefusjonskravDetaljer } from "~/components/refusjonskrav/RefusjonskravDetaljer"; import React from "react"; import { Definisjon } from "~/components/Definisjon"; -import { formaterKontoNummer } from "@mr/frontend-common/utils/utils"; type BekreftRefusjonskravData = { krav: Refusjonskrav; From b6e844e106c33c6fd61eb34a309ab2b992d43817 Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Tue, 29 Oct 2024 15:02:30 +0100 Subject: [PATCH 15/17] Delte kls_database --- kls_database.db | Bin 323584 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 kls_database.db diff --git a/kls_database.db b/kls_database.db deleted file mode 100644 index bc92054c75f36551f978433da0cd04e7c5791850..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323584 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 f5wKcoKy}%!I2mPvET*WIn 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 c0RmL0ksvmxCLm?dkfew;8*@~ From ee8a7c91b4fd1cf6442378df9c288933b039f639 Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Tue, 29 Oct 2024 15:10:55 +0100 Subject: [PATCH 16/17] default null on kontonummer and kid --- .../db/migration/V199__refusjonskrav_betalingsinformasjon.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mulighetsrommet-api/src/main/resources/db/migration/V199__refusjonskrav_betalingsinformasjon.sql b/mulighetsrommet-api/src/main/resources/db/migration/V199__refusjonskrav_betalingsinformasjon.sql index 42cefe216c..13a25519b5 100644 --- a/mulighetsrommet-api/src/main/resources/db/migration/V199__refusjonskrav_betalingsinformasjon.sql +++ b/mulighetsrommet-api/src/main/resources/db/migration/V199__refusjonskrav_betalingsinformasjon.sql @@ -1,6 +1,6 @@ alter table refusjonskrav - add column kontonummer varchar(11); + add column kontonummer varchar(11) default null; alter table refusjonskrav - add column kid varchar(25); + add column kid varchar(25) default null; From 2072d7fa79aac4cc93bc2594411f6f128109a4cb Mon Sep 17 00:00:00 2001 From: MaximilianLloyd Date: Tue, 29 Oct 2024 15:24:13 +0100 Subject: [PATCH 17/17] Update tests --- .../api/okonomi/refusjon/RefusjonService.kt | 2 ++ .../api/okonomi/refusjon/RefusjonskravDbo.kt | 4 ++++ .../api/okonomi/refusjon/RefusjonskravRepository.kt | 10 +++++++--- .../okonomi/refusjon/RefusjonskravRepositoryTest.kt | 12 ++++++++++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonService.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonService.kt index ee3f56ceaa..9c86a122a3 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonService.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonService.kt @@ -94,6 +94,8 @@ class RefusjonService( fristForGodkjenning = frist, gjennomforingId = gjennomforingId, beregning = beregning, + kontonummer = null, + kid = null, ) } diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravDbo.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravDbo.kt index 9b9f532097..0a6f6a97ee 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravDbo.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravDbo.kt @@ -1,6 +1,8 @@ package no.nav.mulighetsrommet.api.okonomi.refusjon import no.nav.mulighetsrommet.api.okonomi.models.RefusjonKravBeregning +import no.nav.mulighetsrommet.domain.dto.Kid +import no.nav.mulighetsrommet.domain.dto.Kontonummer import java.time.LocalDateTime import java.util.* @@ -9,4 +11,6 @@ data class RefusjonskravDbo( val gjennomforingId: UUID, val fristForGodkjenning: LocalDateTime, val beregning: RefusjonKravBeregning, + val kontonummer: Kontonummer?, + val kid: Kid?, ) diff --git a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt index 3f931efe54..6715cdf3a1 100644 --- a/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt +++ b/mulighetsrommet-api/src/main/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepository.kt @@ -24,17 +24,21 @@ class RefusjonskravRepository(private val db: Database) { fun upsert(dbo: RefusjonskravDbo, tx: TransactionalSession) { @Language("PostgreSQL") val refusjonskravQuery = """ - insert into refusjonskrav (id, gjennomforing_id, frist_for_godkjenning) - values (:id::uuid, :gjennomforing_id::uuid, :frist_for_godkjenning) + insert into refusjonskrav (id, gjennomforing_id, frist_for_godkjenning, kontonummer, kid) + values (:id::uuid, :gjennomforing_id::uuid, :frist_for_godkjenning, :kontonummer, :kid) on conflict (id) do update set gjennomforing_id = excluded.gjennomforing_id, - frist_for_godkjenning = excluded.frist_for_godkjenning + frist_for_godkjenning = excluded.frist_for_godkjenning, + kontonummer = excluded.kontonummer, + kid = excluded.kid """.trimIndent() val params = mapOf( "id" to dbo.id, "gjennomforing_id" to dbo.gjennomforingId, "frist_for_godkjenning" to dbo.fristForGodkjenning, + "kontonummer" to dbo.kontonummer?.value, + "kid" to dbo.kid?.value, ) queryOf(refusjonskravQuery, params).asExecute.runWithSession(tx) diff --git a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepositoryTest.kt b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepositoryTest.kt index 9c57067fb4..110214884f 100644 --- a/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepositoryTest.kt +++ b/mulighetsrommet-api/src/test/kotlin/no/nav/mulighetsrommet/api/okonomi/refusjon/RefusjonskravRepositoryTest.kt @@ -11,6 +11,8 @@ import no.nav.mulighetsrommet.api.fixtures.TiltakstypeFixtures import no.nav.mulighetsrommet.api.okonomi.models.* import no.nav.mulighetsrommet.database.kotest.extensions.FlywayDatabaseTestListener import no.nav.mulighetsrommet.database.kotest.extensions.truncateAll +import no.nav.mulighetsrommet.domain.dto.Kid +import no.nav.mulighetsrommet.domain.dto.Kontonummer import org.junit.jupiter.api.assertThrows import java.sql.SQLException import java.time.LocalDate @@ -90,6 +92,8 @@ class RefusjonskravRepositoryTest : FunSpec({ gjennomforingId = AFT1.id, fristForGodkjenning = frist, beregning = beregning, + kontonummer = Kontonummer("11111111111"), + kid = Kid("12345"), ) repository.upsert(krav) @@ -112,6 +116,10 @@ class RefusjonskravRepositoryTest : FunSpec({ slettet = ArrangorFixtures.underenhet1.slettetDato != null, ), beregning = beregning, + betalingsinformasjon = RefusjonskravDto.Betalingsinformasjon( + kontonummer = Kontonummer("11111111111"), + kid = Kid("12345"), + ), ) } @@ -121,6 +129,8 @@ class RefusjonskravRepositoryTest : FunSpec({ gjennomforingId = AFT1.id, fristForGodkjenning = LocalDate.of(2024, 10, 1).atStartOfDay(), beregning = beregning, + kontonummer = null, + kid = null, ) repository.upsert(krav) @@ -158,6 +168,8 @@ class RefusjonskravRepositoryTest : FunSpec({ deltakelser = setOf(), ), ), + kontonummer = null, + kid = null, ) assertThrows {