From 3461d63519ac0e214f06397985dc17e586d6bddc Mon Sep 17 00:00:00 2001 From: Mikel Cordovilla Date: Wed, 17 Apr 2024 17:07:37 +0200 Subject: [PATCH 1/4] OO#157 adding kunde konto daten information in rechnung json extract --- .../ch/openolitor/buchhaltung/BuchhaltungJsonProtocol.scala | 2 ++ .../ch/openolitor/buchhaltung/models/RechnungenModels.scala | 1 + .../buchhaltung/reporting/RechnungReportData.scala | 6 ++++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungJsonProtocol.scala b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungJsonProtocol.scala index 80189c3aa..385cb7b16 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungJsonProtocol.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungJsonProtocol.scala @@ -214,6 +214,7 @@ trait BuchhaltungJsonProtocol extends BaseJsonProtocol with LazyLogging with Sta fields("ort").convertTo[String], fields.get("paymentType").fold(Option.empty[PaymentType])(_.convertTo[Option[PaymentType]]), fields.get("qrCode").fold(Option.empty[String])(_.convertTo[Option[String]]), + fields.get("kundeKontoDaten").fold(Option.empty[KontoDaten])(_.convertTo[Option[KontoDaten]]), fields("erstelldat").convertTo[DateTime], fields("ersteller").convertTo[PersonId], fields("modifidat").convertTo[DateTime], @@ -247,6 +248,7 @@ trait BuchhaltungJsonProtocol extends BaseJsonProtocol with LazyLogging with Sta "ort" -> obj.ort.toJson, "paymentType" -> obj.paymentType.toJson, "qrCode" -> obj.qrCode.toJson, + "kundeKontoDaten" -> obj.kundeKontoDaten.toJson, "erstelldat" -> obj.erstelldat.toJson, "ersteller" -> obj.ersteller.toJson, "modifidat" -> obj.modifidat.toJson, diff --git a/src/main/scala/ch/openolitor/buchhaltung/models/RechnungenModels.scala b/src/main/scala/ch/openolitor/buchhaltung/models/RechnungenModels.scala index 803352694..0f73ce24a 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/models/RechnungenModels.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/models/RechnungenModels.scala @@ -250,6 +250,7 @@ case class RechnungDetailReport( ort: String, paymentType: Option[PaymentType], qrCode: Option[String], + kundeKontoDaten: Option[KontoDaten], // modification flags erstelldat: DateTime, ersteller: PersonId, diff --git a/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala b/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala index c17b72583..066f9d9d9 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala @@ -43,6 +43,7 @@ import scala.jdk.CollectionConverters._ trait RechnungReportData extends AsyncConnectionPoolContextAware with BuchhaltungJsonProtocol with LazyLogging with ExecutionContextAware { self: BuchhaltungReadRepositoryAsyncComponent with ActorReferences with StammdatenReadRepositoryAsyncComponent => + val d = Duration(1, SECONDS) def rechungenById(rechnungIds: Seq[RechnungId]): Future[(Seq[ValidationError[RechnungId]], Seq[RechnungDetailReport])] = { stammdatenReadRepository.getProjekt flatMap { maybeProjekt => @@ -63,10 +64,11 @@ trait RechnungReportData extends AsyncConnectionPoolContextAware with Buchhaltun case Some(error) if error.startsWith("Error: ") => { Left(ValidationError[RechnungId](rechnungId, error)) } - case Some(_) => Right(copyTo[RechnungDetail, RechnungDetailReport](rechnung, "qrCode" -> qrCode, "projekt" -> projektReport, "kontoDaten" -> kontoDaten)) + case Some(_) => + val maybeKundeKontoDaten: Option[KontoDaten] = Await.result(stammdatenReadRepository.getKontoDatenKunde(rechnung.kunde.id), d) + Right(copyTo[RechnungDetail, RechnungDetailReport](rechnung, "qrCode" -> qrCode, "projekt" -> projektReport, "kontoDaten" -> kontoDaten, "kundeKontoDaten" -> maybeKundeKontoDaten)) } } - }.getOrElse(Left(ValidationError[RechnungId](rechnungId, s"Rechnung konnte nicht gefunden werden")))) }) results.map(_.partition(_.isLeft) match { From f7d67b2995125826b8fa969c08473777d3ba6183 Mon Sep 17 00:00:00 2001 From: Mikel Cordovilla Date: Thu, 18 Apr 2024 11:10:00 +0200 Subject: [PATCH 2/4] OO#157 adding kunde konto daten information in rechnung json extract directly from query --- .../openolitor/buchhaltung/BuchhaltungJsonProtocol.scala | 4 +++- .../openolitor/buchhaltung/models/RechnungenModels.scala | 3 ++- .../repositories/BuchhaltungRepositoryQueries.scala | 9 ++++++--- .../repositories/KundenportalRepositoryQueries.scala | 9 ++++++--- 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungJsonProtocol.scala b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungJsonProtocol.scala index 385cb7b16..ddc1775d7 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungJsonProtocol.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungJsonProtocol.scala @@ -149,6 +149,7 @@ trait BuchhaltungJsonProtocol extends BaseJsonProtocol with LazyLogging with Sta fields("plz").convertTo[String], fields("ort").convertTo[String], fields.get("paymentType").fold(Option.empty[PaymentType])(_.convertTo[Option[PaymentType]]), + fields("kundeKontoDaten").convertTo[KontoDaten], fields("erstelldat").convertTo[DateTime], fields("ersteller").convertTo[PersonId], fields("modifidat").convertTo[DateTime], @@ -180,6 +181,7 @@ trait BuchhaltungJsonProtocol extends BaseJsonProtocol with LazyLogging with Sta "plz" -> obj.plz.toJson, "ort" -> obj.ort.toJson, "paymentType" -> obj.paymentType.toJson, + "kundeKontoDaten" -> obj.kundeKontoDaten.toJson, "erstelldat" -> obj.erstelldat.toJson, "ersteller" -> obj.ersteller.toJson, "modifidat" -> obj.modifidat.toJson, @@ -214,7 +216,7 @@ trait BuchhaltungJsonProtocol extends BaseJsonProtocol with LazyLogging with Sta fields("ort").convertTo[String], fields.get("paymentType").fold(Option.empty[PaymentType])(_.convertTo[Option[PaymentType]]), fields.get("qrCode").fold(Option.empty[String])(_.convertTo[Option[String]]), - fields.get("kundeKontoDaten").fold(Option.empty[KontoDaten])(_.convertTo[Option[KontoDaten]]), + fields("kundeKontoDaten").convertTo[KontoDaten], fields("erstelldat").convertTo[DateTime], fields("ersteller").convertTo[PersonId], fields("modifidat").convertTo[DateTime], diff --git a/src/main/scala/ch/openolitor/buchhaltung/models/RechnungenModels.scala b/src/main/scala/ch/openolitor/buchhaltung/models/RechnungenModels.scala index 0f73ce24a..12d780820 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/models/RechnungenModels.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/models/RechnungenModels.scala @@ -219,6 +219,7 @@ case class RechnungDetail( plz: String, ort: String, paymentType: Option[PaymentType], + kundeKontoDaten: KontoDaten, // modification flags erstelldat: DateTime, ersteller: PersonId, @@ -250,7 +251,7 @@ case class RechnungDetailReport( ort: String, paymentType: Option[PaymentType], qrCode: Option[String], - kundeKontoDaten: Option[KontoDaten], + kundeKontoDaten: KontoDaten, // modification flags erstelldat: DateTime, ersteller: PersonId, diff --git a/src/main/scala/ch/openolitor/buchhaltung/repositories/BuchhaltungRepositoryQueries.scala b/src/main/scala/ch/openolitor/buchhaltung/repositories/BuchhaltungRepositoryQueries.scala index f8942f0a0..69d4940c0 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/repositories/BuchhaltungRepositoryQueries.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/repositories/BuchhaltungRepositoryQueries.scala @@ -133,6 +133,7 @@ trait BuchhaltungRepositoryQueries extends LazyLogging with BuchhaltungDBMapping .leftJoin(heimlieferungAboMapping as heimlieferungAbo).on(rechnungsPosition.aboId, heimlieferungAbo.id) .leftJoin(postlieferungAboMapping as postlieferungAbo).on(rechnungsPosition.aboId, postlieferungAbo.id) .leftJoin(zusatzAboMapping as zusatzAbo).on(rechnungsPosition.aboId, zusatzAbo.id) + .leftJoin(kontoDatenMapping as kontoDaten).on(kontoDaten.kunde, rechnung.kundeId) .where.eq(rechnung.id, id) .orderBy(rechnung.rechnungsDatum) }.one(rechnungMapping(rechnung)) @@ -142,11 +143,13 @@ trait BuchhaltungRepositoryQueries extends LazyLogging with BuchhaltungDBMapping rs => postlieferungAboMapping.opt(postlieferungAbo)(rs), rs => heimlieferungAboMapping.opt(heimlieferungAbo)(rs), rs => depotlieferungAboMapping.opt(depotlieferungAbo)(rs), - rs => zusatzAboMapping.opt(zusatzAbo)(rs) + rs => zusatzAboMapping.opt(zusatzAbo)(rs), + rs => kontoDatenMapping.opt(kontoDaten)(rs) ) - .map({ (rechnung, kunden, rechnungsPositionen, pl, hl, dl, zusatzAbos) => + .map({ (rechnung, kunden, rechnungsPositionen, pl, hl, dl, zusatzAbos, kontoDaten) => val kunde = kunden.head val abos = pl ++ hl ++ dl ++ zusatzAbos + val kundeKontoDaten = kontoDaten.head val rechnungsPositionenDetail = { for { rechnungsPosition <- rechnungsPositionen @@ -156,7 +159,7 @@ trait BuchhaltungRepositoryQueries extends LazyLogging with BuchhaltungDBMapping } }.sortBy(_.sort.getOrElse(0)) - copyTo[Rechnung, RechnungDetail](rechnung, "kunde" -> kunde, "rechnungsPositionen" -> rechnungsPositionenDetail) + copyTo[Rechnung, RechnungDetail](rechnung, "kunde" -> kunde, "rechnungsPositionen" -> rechnungsPositionenDetail, "kundeKontoDaten" -> kundeKontoDaten) }).single } diff --git a/src/main/scala/ch/openolitor/kundenportal/repositories/KundenportalRepositoryQueries.scala b/src/main/scala/ch/openolitor/kundenportal/repositories/KundenportalRepositoryQueries.scala index 3d906f334..cf0cdab57 100644 --- a/src/main/scala/ch/openolitor/kundenportal/repositories/KundenportalRepositoryQueries.scala +++ b/src/main/scala/ch/openolitor/kundenportal/repositories/KundenportalRepositoryQueries.scala @@ -335,6 +335,7 @@ trait KundenportalRepositoryQueries extends LazyLogging with StammdatenDBMapping .leftJoin(heimlieferungAboMapping as heimlieferungAbo).on(rechnungsPosition.aboId, heimlieferungAbo.id) .leftJoin(postlieferungAboMapping as postlieferungAbo).on(rechnungsPosition.aboId, postlieferungAbo.id) .leftJoin(zusatzAboMapping as zusatzAbo).on(rechnungsPosition.aboId, zusatzAbo.id) + .leftJoin(kontoDatenMapping as kontoDaten).on(kontoDaten.kunde, rechnung.kundeId) .where.eq(rechnung.id, id) .and.eq(rechnung.kundeId, owner.kundeId) .orderBy(rechnung.rechnungsDatum) @@ -345,11 +346,13 @@ trait KundenportalRepositoryQueries extends LazyLogging with StammdatenDBMapping rs => postlieferungAboMapping.opt(postlieferungAbo)(rs), rs => heimlieferungAboMapping.opt(heimlieferungAbo)(rs), rs => depotlieferungAboMapping.opt(depotlieferungAbo)(rs), - rs => zusatzAboMapping.opt(zusatzAbo)(rs) + rs => zusatzAboMapping.opt(zusatzAbo)(rs), + rs => kontoDatenMapping.opt(kontoDaten)(rs) ) - .map({ (rechnung, kunden, rechnungsPositionen, pl, hl, dl, za) => + .map({ (rechnung, kunden, rechnungsPositionen, pl, hl, dl, za, kontoDaten) => val kunde = kunden.head val abos = pl ++ hl ++ dl ++ za + val kundeKontoDaten = kontoDaten.head val rechnungsPositionenDetail = { for { rechnungsPosition <- rechnungsPositionen @@ -359,7 +362,7 @@ trait KundenportalRepositoryQueries extends LazyLogging with StammdatenDBMapping } }.sortBy(_.sort.getOrElse(0)) - copyTo[Rechnung, RechnungDetail](rechnung, "kunde" -> kunde, "rechnungsPositionen" -> rechnungsPositionenDetail) + copyTo[Rechnung, RechnungDetail](rechnung, "kunde" -> kunde, "rechnungsPositionen" -> rechnungsPositionenDetail, "kundeKontoDaten" -> kundeKontoDaten) }).single } From 6f0183443be513034e2c36f9c2c0a1dae7251a43 Mon Sep 17 00:00:00 2001 From: Mikel Cordovilla Date: Thu, 18 Apr 2024 11:12:18 +0200 Subject: [PATCH 3/4] OO#157 adding kunde konto daten information in rechnung json extract directly from query --- .../openolitor/buchhaltung/reporting/RechnungReportData.scala | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala b/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala index 066f9d9d9..6bbc3fb78 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala @@ -43,7 +43,6 @@ import scala.jdk.CollectionConverters._ trait RechnungReportData extends AsyncConnectionPoolContextAware with BuchhaltungJsonProtocol with LazyLogging with ExecutionContextAware { self: BuchhaltungReadRepositoryAsyncComponent with ActorReferences with StammdatenReadRepositoryAsyncComponent => - val d = Duration(1, SECONDS) def rechungenById(rechnungIds: Seq[RechnungId]): Future[(Seq[ValidationError[RechnungId]], Seq[RechnungDetailReport])] = { stammdatenReadRepository.getProjekt flatMap { maybeProjekt => @@ -65,8 +64,7 @@ trait RechnungReportData extends AsyncConnectionPoolContextAware with Buchhaltun Left(ValidationError[RechnungId](rechnungId, error)) } case Some(_) => - val maybeKundeKontoDaten: Option[KontoDaten] = Await.result(stammdatenReadRepository.getKontoDatenKunde(rechnung.kunde.id), d) - Right(copyTo[RechnungDetail, RechnungDetailReport](rechnung, "qrCode" -> qrCode, "projekt" -> projektReport, "kontoDaten" -> kontoDaten, "kundeKontoDaten" -> maybeKundeKontoDaten)) + Right(copyTo[RechnungDetail, RechnungDetailReport](rechnung, "qrCode" -> qrCode, "projekt" -> projektReport, "kontoDaten" -> kontoDaten)) } } }.getOrElse(Left(ValidationError[RechnungId](rechnungId, s"Rechnung konnte nicht gefunden werden")))) From 096701e4475e1c5f550e5ce298956506653da96f Mon Sep 17 00:00:00 2001 From: Mikel Cordovilla Date: Thu, 18 Apr 2024 11:14:47 +0200 Subject: [PATCH 4/4] OO#157 adding kunde konto daten information in rechnung json extract directly from query --- .../openolitor/buchhaltung/reporting/RechnungReportData.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala b/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala index 6bbc3fb78..c17b72583 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala @@ -63,10 +63,10 @@ trait RechnungReportData extends AsyncConnectionPoolContextAware with Buchhaltun case Some(error) if error.startsWith("Error: ") => { Left(ValidationError[RechnungId](rechnungId, error)) } - case Some(_) => - Right(copyTo[RechnungDetail, RechnungDetailReport](rechnung, "qrCode" -> qrCode, "projekt" -> projektReport, "kontoDaten" -> kontoDaten)) + case Some(_) => Right(copyTo[RechnungDetail, RechnungDetailReport](rechnung, "qrCode" -> qrCode, "projekt" -> projektReport, "kontoDaten" -> kontoDaten)) } } + }.getOrElse(Left(ValidationError[RechnungId](rechnungId, s"Rechnung konnte nicht gefunden werden")))) }) results.map(_.partition(_.isLeft) match {