Renamed totalAmounts to totals and added articleNumber to InvoiceItem

This commit is contained in:
dankito 2024-12-02 17:58:54 +01:00
parent e76a130a75
commit ad23dc3fc3
6 changed files with 21 additions and 13 deletions

View File

@ -32,7 +32,7 @@ val fetchResult = emailsFetcher.fetchAllEmails(EmailAccount(
))
fetchResult.emails.forEach { email ->
println("${email.sender}: ${email.attachments.firstNotNullOfOrNull { it.invoice }?.totalAmounts?.duePayableAmount}")
println("${email.sender}: ${email.attachments.firstNotNullOfOrNull { it.invoice }?.totals?.duePayableAmount}")
}
```

View File

@ -36,8 +36,8 @@ open class MustangMapper(
adjustments.allowances.forEach { this.addAllowance(mapAllowance(it)) }
}
if (invoice.totalAmounts == null) {
invoice.totalAmounts = calculator.calculateTotalAmounts(this)
if (invoice.totals == null) {
invoice.totals = calculator.calculateTotalAmounts(this)
}
}
@ -64,7 +64,10 @@ open class MustangMapper(
open fun mapLineItem(item: InvoiceItem): IZUGFeRDExportableItem = Item(
// description has to be an empty string if not set
Product(item.name, item.description ?: "", item.unit, item.vatRate), item.unitPrice, item.quantity
Product(item.name, item.description ?: "", item.unit, item.vatRate).apply {
this.sellerAssignedID = item.articleNumber // TODO: what is the articleNumber? sellerAssignedId, globalId, ...?
},
item.unitPrice, item.quantity
).apply {
}
@ -101,7 +104,7 @@ open class MustangMapper(
amountAdjustments = mapAmountAdjustments(invoice),
totalAmounts = calculator.calculateTotalAmounts(invoice)
totals = calculator.calculateTotalAmounts(invoice)
)
open fun mapParty(party: TradeParty) = Party(
@ -111,7 +114,7 @@ open class MustangMapper(
)
open fun mapLineItem(item: IZUGFeRDExportableItem) = InvoiceItem(
item.product.name, item.quantity, item.product.unit, item.price, item.product.vatPercent, item.product.description.takeUnless { it.isBlank() }
item.product.name, item.quantity, item.product.unit, item.price, item.product.vatPercent, item.product.sellerAssignedID, item.product.description.takeUnless { it.isBlank() }
)
protected open fun mapAmountAdjustments(invoice: Invoice): AmountAdjustments? {

View File

@ -19,7 +19,7 @@ class Invoice(
* For outgoing invoices: You don't have to calculate them, we do this for you. This ensures that all total amounts
* are in accordance to other data of the invoice like the invoice item amounts and amount adjustments.
*/
var totalAmounts: TotalAmounts? = null
var totals: TotalAmounts? = null
) {
override fun toString() = "$details to $customer ${totalAmounts?.duePayableAmount?.let { " (${it.toPlainString()})" } ?: ""}"
override fun toString() = "$details to $customer ${totals?.duePayableAmount?.let { " (${it.toPlainString()})" } ?: ""}"
}

View File

@ -8,6 +8,7 @@ class InvoiceItem(
val unit: String,
val unitPrice: BigDecimal,
val vatRate: BigDecimal,
val articleNumber: String? = null,
val description: String? = null,
) {
override fun toString() = "$name, $quantity x $unitPrice, $vatRate %"

View File

@ -33,7 +33,7 @@ class Demonstration {
))
fetchResult.emails.forEach { email ->
println("${email.sender}: ${email.attachments.firstNotNullOfOrNull { it.invoice }?.totalAmounts?.duePayableAmount}")
println("${email.sender}: ${email.attachments.firstNotNullOfOrNull { it.invoice }?.totals?.duePayableAmount}")
}
}

View File

@ -1,5 +1,6 @@
package net.codinux.invoicing.test
import net.codinux.invoicing.calculator.AmountsCalculator
import net.codinux.invoicing.model.*
import java.math.BigDecimal
import java.time.LocalDate
@ -21,7 +22,7 @@ object DataGenerator {
const val SupplierEmail = "working-class-hero@rock.me"
const val SupplierPhone = "+4917012345678"
val SupplierFax: String? = null
val SupplierBankDetails = BankDetails("DE00123456780987654321", "ABZODEFFXXX", "Manuela Musterfrau")
val SupplierBankDetails = BankDetails("DE00123456780987654321", "ABZODEFFXXX", "Manuela Musterfrau", "Abzock-Bank")
const val CustomerName = "Untertänigster Leistungsempfänger"
const val CustomerAddress = "Party Street 1"
@ -40,6 +41,7 @@ object DataGenerator {
const val ItemUnit = "HUR" // EN code for 'hour'
val ItemUnitPrice = BigDecimal(99)
val ItemVatRate = BigDecimal(19)
val ItemArticleNumber: String? = null
val ItemDescription: String? = null
@ -53,8 +55,9 @@ object DataGenerator {
items: List<InvoiceItem> = listOf(createItem()),
dueDate: LocalDate? = DueDate,
paymentDescription: String? = dueDate?.let { "Zahlbar ohne Abzug bis ${DateTimeFormatter.ofPattern("dd.MM.yyyy").format(dueDate)}" },
buyerReference: String? = null
) = Invoice(InvoiceDetails(invoiceNumber, invoiceDate, dueDate, paymentDescription), supplier, customer, items, buyerReference)
) = Invoice(InvoiceDetails(invoiceNumber, invoiceDate, dueDate, paymentDescription), supplier, customer, items).apply {
this.totals = AmountsCalculator().calculateTotalAmounts(this)
}
fun createParty(
name: String,
@ -77,7 +80,8 @@ object DataGenerator {
unit: String = ItemUnit,
unitPrice: BigDecimal = ItemUnitPrice,
vatRate: BigDecimal = ItemVatRate,
articleNumber: String? = ItemArticleNumber,
description: String? = ItemDescription,
) = InvoiceItem(name, quantity, unit, unitPrice, vatRate, description)
) = InvoiceItem(name, quantity, unit, unitPrice, vatRate, articleNumber, description)
}