@@ -42,7 +42,153 @@ export enum Avtalerolle {
42
42
}
43
43
44
44
const OpprettAvtaleVeileder : FunctionComponent = ( ) => {
45
- return < div className = { cls . className } > Opprett Avtale som Veileder</ div > ;
45
+ const [ deltakerFnr , setDeltakerFnr ] = useState < string > ( '' ) ;
46
+ const [ mentorFnr , setMentorFnr ] = useState < string > ( '' ) ;
47
+ const [ ugyldigAvtaletype , setUgyldigAvtaletype ] = useState < boolean > ( false ) ;
48
+ const [ bedriftNr , setBedriftNr ] = useState < string > ( '' ) ;
49
+ const [ bedriftNavn , setBedriftNavn ] = useState < string > ( '' ) ;
50
+ const [ valgtTiltaksType , setTiltaksType ] = useState < TiltaksType | undefined > ( ) ;
51
+ const [ modalIsOpen , setModalIsOpen ] = useState < boolean > ( false ) ;
52
+ const { alleredeRegistrertAvtale, setAlleredeRegistrertAvtale } = useContext ( AlleredeOpprettetAvtaleContext ) ;
53
+ const { arbeidstreningReadonly } = useFeatureToggles ( ) ;
54
+ const visVarsel = useContext ( FeilVarselContext ) ;
55
+
56
+ const navigate = useNavigate ( ) ;
57
+
58
+ const [ deltakerFnrFeil , setDeltakerFnrFeil , validerDeltakerFnr ] = useValidering (
59
+ deltakerFnr ,
60
+ validatorer ( 'Deltaker' , mentorFnr ) ,
61
+ ) ;
62
+ const [ mentorFnrFeil , setMentorFnrFeil , validerMentorFnr ] = useValidering (
63
+ mentorFnr ,
64
+ validatorer ( 'Mentor' , deltakerFnr ) ,
65
+ ) ;
66
+
67
+ const [ bedriftNrFeil , setBedriftNrFeil , validerBedriftNr ] = useValidering ( bedriftNr , [
68
+ ( verdi ) => {
69
+ if ( ! verdi ) return 'Virksomhetsnummer er påkrevd' ;
70
+ } ,
71
+ ( verdi ) => {
72
+ if ( ! validerOrgnr ( verdi ) ) return 'Ugyldig virksomhetsnummer' ;
73
+ } ,
74
+ ] ) ;
75
+
76
+ const orgnrOnChange = ( event : ChangeEvent < HTMLInputElement > ) : void => {
77
+ const verdi = event . target . value . replace ( / \D / g, '' ) ;
78
+ if ( / ^ \d { 0 , 9 } $ / . test ( verdi ) ) {
79
+ setBedriftNr ( verdi ) ;
80
+ setBedriftNrFeil ( undefined ) ;
81
+ setBedriftNavn ( '' ) ;
82
+ }
83
+ } ;
84
+
85
+ const orgnrOnBlur = ( ) : void => {
86
+ if ( validerBedriftNr ( ) ) {
87
+ hentBedriftBrreg ( bedriftNr )
88
+ . then ( ( response ) => {
89
+ setBedriftNavn ( response . bedriftNavn ) ;
90
+ setBedriftNrFeil ( undefined ) ;
91
+ } )
92
+ . catch ( ( error ) => {
93
+ setBedriftNavn ( '' ) ;
94
+ handterFeil ( error , ( feilmelding ) => setBedriftNrFeil ( feilmelding ) ) ;
95
+ } )
96
+ . catch ( ( error : Error ) => {
97
+ setBedriftNrFeil ( 'Det oppstod en uventet feil' ) ;
98
+ console . error (
99
+ `Det oppstod en uventet feil ved henting av virksomhetsnummer ${
100
+ bedriftNr ? bedriftNr : ''
101
+ } med feilmelding: `,
102
+ error ,
103
+ ) ;
104
+ } ) ;
105
+ } else {
106
+ setBedriftNavn ( '' ) ;
107
+ }
108
+ } ;
109
+
110
+ const setFeilmelding = ( melding : Feilkode ) => {
111
+ if ( melding === 'SOMMERJOBB_FOR_GAMMEL' ) {
112
+ setDeltakerFnrFeil ( Feilmeldinger . SOMMERJOBB_FOR_GAMMEL ) ;
113
+ }
114
+ } ;
115
+
116
+ const opprettAvtaleKlikk = async ( ) => {
117
+ let valgtAvtaleType = false ;
118
+ let feilDeltakerFNR = '' ;
119
+ let feilBedriftNr = '' ;
120
+ let feilMentorFNR = '' ;
121
+
122
+ if ( ! valgtTiltaksType ) {
123
+ valgtAvtaleType = true ;
124
+ }
125
+ if ( ! validerFnr ( deltakerFnr ) ) {
126
+ feilDeltakerFNR = Feilmeldinger . UGYLDIG_FØDSELSNUMMER ;
127
+ }
128
+ if ( ! validerOrgnr ( bedriftNr ) ) {
129
+ feilBedriftNr = Feilmeldinger . UGYLDIG_VIRKSOMHETSNUMMER ;
130
+ }
131
+ if ( ! validerMentorFnr ( ) ) {
132
+ feilMentorFNR = Feilmeldinger . UGYLDIG_FØDSELSNUMMER ;
133
+ }
134
+ if ( feilBedriftNr . length === 0 && feilDeltakerFNR . length === 0 && valgtTiltaksType ) {
135
+ if ( valgtTiltaksType === 'MENTOR' ) {
136
+ if ( deltakerFnr !== mentorFnr && feilMentorFNR . length === 0 ) {
137
+ const mentorAvtale = await opprettMentorAvtale (
138
+ deltakerFnr ,
139
+ mentorFnr ,
140
+ bedriftNr ,
141
+ valgtTiltaksType ,
142
+ Avtalerolle . VEILEDER ,
143
+ ) ;
144
+ amplitude . logEvent ( '#tiltak-avtale-opprettet' , { tiltakstype : valgtTiltaksType } ) ;
145
+ navigate ( generatePath ( Path . AVTALE_STEG , { avtaleId : mentorAvtale . id , steg : 'kontaktinformasjon' } ) ) ;
146
+ return ;
147
+ }
148
+ return ;
149
+ }
150
+ const avtale = await opprettAvtaleSomVeileder ( deltakerFnr , bedriftNr , valgtTiltaksType ) ;
151
+ amplitude . logEvent ( '#tiltak-avtale-opprettet' , { tiltakstype : valgtTiltaksType } ) ;
152
+ navigate ( generatePath ( Path . AVTALE_STEG , { avtaleId : avtale . id , steg : 'kontaktinformasjon' } ) ) ;
153
+ return ;
154
+ }
155
+
156
+ setUgyldigAvtaletype ( valgtAvtaleType ) ;
157
+ setBedriftNrFeil ( feilBedriftNr ) ;
158
+ setDeltakerFnrFeil ( feilDeltakerFNR ) ;
159
+ } ;
160
+
161
+ const sjekkOmAvtaleErOpprettet = async ( ) => {
162
+ if ( deltakerFnr . length === 11 && bedriftNr . length === 9 && valgtTiltaksType ) {
163
+ try {
164
+ const listeAvtalerDeltakerAlleredeRegistrert : AlleredeRegistrertAvtale [ ] | [ ] =
165
+ await sjekkOmDeltakerAlleredeErRegistrertPaaTiltak ( deltakerFnr , valgtTiltaksType , null , null , null ) ;
166
+ if ( listeAvtalerDeltakerAlleredeRegistrert . length > 0 ) {
167
+ setAlleredeRegistrertAvtale ( {
168
+ ...alleredeRegistrertAvtale ,
169
+ avtaler : listeAvtalerDeltakerAlleredeRegistrert ,
170
+ deltaker : deltakerFnr ,
171
+ } ) ;
172
+ }
173
+ } catch ( error ) {
174
+ console . error ( error ) ;
175
+ }
176
+ }
177
+ } ;
178
+
179
+ useEffect ( ( ) => {
180
+ sjekkOmAvtaleErOpprettet ( ) ;
181
+ // eslint-disable-next-line
182
+ } , [ valgtTiltaksType , deltakerFnr , bedriftNr ] ) ;
183
+
184
+ return (
185
+ < div className = { cls . className } >
186
+ < Dokumenttittel tittel = "Opprett avtale" />
187
+ < Heading size = "large" className = { cls . element ( 'innholdstittel' ) } >
188
+ Opprett avtale
189
+ </ Heading >
190
+ </ div >
191
+ ) ;
46
192
} ;
47
193
48
194
export default OpprettAvtaleVeileder ;
0 commit comments