From df225dde169be6d009c5e803c598feae1f354a89 Mon Sep 17 00:00:00 2001 From: Alwin Egger Date: Thu, 24 Jul 2025 16:25:18 +0200 Subject: [PATCH 1/3] Support SCOR IBAN ISO-References for payments. WIP --- .../buchhaltung/BuchhaltungInsertService.scala | 16 ++++++++++++---- .../reporting/RechnungReportData.scala | 6 +++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala index 1b0e97226..19dec45be 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala @@ -32,13 +32,14 @@ import com.typesafe.scalalogging.LazyLogging import ch.openolitor.core.domain.EntityStore._ import akka.actor.ActorSystem import ch.openolitor.core.Macros._ -import ch.openolitor.stammdaten.models.{ Waehrung, CHF, EUR } +import ch.openolitor.stammdaten.models.{CHF, EUR, Waehrung} import ch.openolitor.stammdaten.models.KontoDaten import ch.openolitor.util.ConfigUtil._ import ch.openolitor.buchhaltung.repositories.DefaultBuchhaltungWriteRepositoryComponent import ch.openolitor.buchhaltung.repositories.BuchhaltungWriteRepositoryComponent import ch.openolitor.core.repositories.EventPublishingImplicits._ import ch.openolitor.stammdaten.models.KundeId +import net.codecrete.qrbill.generator.Payments object BuchhaltungInsertService { def apply(implicit sysConfig: SystemConfig, system: ActorSystem): BuchhaltungInsertService = new DefaultBuchhaltungInsertService(sysConfig, system) @@ -130,10 +131,17 @@ class BuchhaltungInsertService(override val sysConfig: SystemConfig) extends Eve def generateReferenzNummer(kontoDaten: KontoDaten, kundeId: KundeId, id: RechnungId): String = { val referenzNummerPrefix = kontoDaten.referenzNummerPrefix getOrElse ("") - val filled = s"${referenzNummerPrefix}%0${ReferenznummerLength - referenzNummerPrefix.size - RechnungIdLength}d%0${RechnungIdLength}d".format(kundeId.id, id.id) - val checksum = calculateChecksum(filled.toList map (_.asDigit)) + if (Payments.isQRIBAN(kontoDaten.iban)) { + val filled = s"${referenzNummerPrefix}%0${ReferenznummerLength - referenzNummerPrefix.size - RechnungIdLength}d%0${RechnungIdLength}d".format(kundeId.id, id.id) + val checksum = calculateChecksum(filled.toList map (_.asDigit)) - s"$filled$checksum" + s"$filled$checksum" + } else { + //TODO implement Refrenece Generation along this https://de.wikipedia.org/wiki/Strukturierte_Kreditorreferenz and https://www.mobilefish.com/services/creditor_reference/creditor_reference.php + val filled = s"${referenzNummerPrefix}dd".format(kundeId.id, id.id) + val checksum = calculateChecksum(filled.toList map (_.asDigit)) + s"RF$checksum$filled" + } } def generateEsrNummer(kontoDaten: KontoDaten, betrag: BigDecimal, waehrung: Waehrung, referenzNummer: String): String = { diff --git a/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala b/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala index c17b72583..d34e584f6 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/reporting/RechnungReportData.scala @@ -115,7 +115,11 @@ trait RechnungReportData extends AsyncConnectionPoolContextAware with Buchhaltun // more bill data bill.setUnstructuredMessage(rechnung.titel) bill.setReference(rechnung.referenzNummer) - bill.setReferenceType(Bill.REFERENCE_TYPE_QR_REF) + if (Payments.isQRIBAN(iban)) { + bill.setReferenceType(Bill.REFERENCE_TYPE_QR_REF) + } else { + bill.setReferenceType(Bill.REFERENCE_TYPE_CRED_REF) + } // Set debtor val debtor = new Address() From f72c8143611bae9e91edfeec82661461ad3b9cde Mon Sep 17 00:00:00 2001 From: Alwin Date: Thu, 24 Jul 2025 16:29:33 +0200 Subject: [PATCH 2/3] Update src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../ch/openolitor/buchhaltung/BuchhaltungInsertService.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala index 19dec45be..812e9c969 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala @@ -138,7 +138,7 @@ class BuchhaltungInsertService(override val sysConfig: SystemConfig) extends Eve s"$filled$checksum" } else { //TODO implement Refrenece Generation along this https://de.wikipedia.org/wiki/Strukturierte_Kreditorreferenz and https://www.mobilefish.com/services/creditor_reference/creditor_reference.php - val filled = s"${referenzNummerPrefix}dd".format(kundeId.id, id.id) + val filled = s"${referenzNummerPrefix}%d%d".format(kundeId.id, id.id) val checksum = calculateChecksum(filled.toList map (_.asDigit)) s"RF$checksum$filled" } From d7769b1f2f2f84331cd61608a48016ef735caba4 Mon Sep 17 00:00:00 2001 From: Alwin Date: Thu, 20 Nov 2025 09:10:34 +0100 Subject: [PATCH 3/3] Update src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../ch/openolitor/buchhaltung/BuchhaltungInsertService.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala index 812e9c969..3704a44ad 100644 --- a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala +++ b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala @@ -137,7 +137,7 @@ class BuchhaltungInsertService(override val sysConfig: SystemConfig) extends Eve s"$filled$checksum" } else { - //TODO implement Refrenece Generation along this https://de.wikipedia.org/wiki/Strukturierte_Kreditorreferenz and https://www.mobilefish.com/services/creditor_reference/creditor_reference.php + //TODO implement Reference Generation along this https://de.wikipedia.org/wiki/Strukturierte_Kreditorreferenz and https://www.mobilefish.com/services/creditor_reference/creditor_reference.php val filled = s"${referenzNummerPrefix}%d%d".format(kundeId.id, id.id) val checksum = calculateChecksum(filled.toList map (_.asDigit)) s"RF$checksum$filled"