diff --git a/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala b/src/main/scala/ch/openolitor/buchhaltung/BuchhaltungInsertService.scala index 1b0e97226..3704a44ad 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 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" + } } 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()