@@ -4,7 +4,12 @@ import com.fasterxml.jackson.annotation.JsonFormat
4
4
import com.fasterxml.jackson.annotation.JsonIgnore
5
5
import com.fasterxml.jackson.annotation.JsonIgnoreProperties
6
6
import com.fasterxml.jackson.annotation.JsonProperty
7
+ import io.github.oshai.kotlinlogging.KotlinLogging
7
8
import java.time.LocalDate
9
+ import java.time.format.DateTimeFormatter
10
+ import java.util.Locale
11
+
12
+ private val log = KotlinLogging .logger { }
8
13
9
14
@JsonIgnoreProperties(ignoreUnknown = true )
10
15
data class OrdrelinjeOebs (
@@ -72,6 +77,8 @@ data class OrdrelinjeOebs(
72
77
// For statistikk formål
73
78
@JsonProperty(" ForsteGangsUtlan" )
74
79
val førsteGangsUtlån : String? , // Format: "Y, N, , N, N"
80
+ @JsonProperty(" ForsteTransDato" )
81
+ val førsteTransaksjonsDato : String? , // Format: "04-MAR-25, , 04-MAR-25"
75
82
@JsonProperty(" AntUtlan" )
76
83
val antallUtlån : String? , // Format: "1, 2, , 3, 4"
77
84
) {
@@ -110,6 +117,7 @@ data class OrdrelinjeOebs(
110
117
111
118
fun serienumreStatistikk (): List <AntallUtl ån> {
112
119
if (serienumre.isNullOrEmpty()) return listOf ()
120
+
113
121
val førsteGangsUtlån =
114
122
førsteGangsUtlån?.split(" ," )?.map {
115
123
when (it.trim()) {
@@ -118,17 +126,44 @@ data class OrdrelinjeOebs(
118
126
else -> null
119
127
}
120
128
}
129
+
130
+ val førsteTransaksjonsDatoFormat =
131
+ DateTimeFormatter .ofPattern(
132
+ " dd-LLL-uu" ,
133
+ Locale .of(" nb" , " NO" ),
134
+ ) // Format: "04-MAR-25, , 04-MAR-25"
135
+ val førsteTransaksjonsDato =
136
+ førsteTransaksjonsDato?.split(" ," )?.map { part ->
137
+ val date = part.trim()
138
+ if (date.count() == 9 ) {
139
+ runCatching {
140
+ LocalDate .parse(
141
+ // Fiks format fra "JAN" til "Jan", "MAR" til "Mar"
142
+ date.lowercase(), // .let { it.replaceRange(3, 4, it.substring(3, 4).uppercase()) }.replace("-", " "),
143
+ førsteTransaksjonsDatoFormat,
144
+ )
145
+ }.onFailure { e ->
146
+ log.error(e) { " Feilet i å tolke datoen: $date " }
147
+ }.getOrNull()
148
+ } else {
149
+ null
150
+ }
151
+ }
152
+
121
153
val antallUtlån = antallUtlån?.split(" ," )?.map { it.trim().toIntOrNull() }
154
+
122
155
if ((førsteGangsUtlån != null && serienumre.count() != førsteGangsUtlån.count()) ||
123
156
(antallUtlån != null && antallUtlån.count() != serienumre.count())
124
157
) {
125
158
// Uventet antall førsteGangsUtlån eller antallUtlån, må være lik antall serienumre (eller null)
126
159
return listOf ()
127
160
}
161
+
128
162
return serienumre.mapIndexed { idx, serieNr ->
129
163
AntallUtl ån(
130
164
serieNr = serieNr,
131
165
førsteGangsUtlån = førsteGangsUtlån?.getOrNull(idx),
166
+ førsteTransaksjonsDato = førsteTransaksjonsDato?.getOrNull(idx),
132
167
antallUtlån = antallUtlån?.getOrNull(idx),
133
168
)
134
169
}
@@ -138,5 +173,6 @@ data class OrdrelinjeOebs(
138
173
data class AntallUtl ån(
139
174
val serieNr : String ,
140
175
val førsteGangsUtlån : Boolean? ,
176
+ val førsteTransaksjonsDato : LocalDate ? ,
141
177
val antallUtlån : Int? ,
142
178
)
0 commit comments