# <ram:SpecifiedLineTradeDelivery>
$params{xml}->startTag("ram:SpecifiedLineTradeDelivery");
- $params{xml}->dataElement("ram:BilledQuantity", $params{item}->qty, "unitCode" => _unit_code($params{item}->unit));
+ $params{xml}->dataElement("ram:BilledQuantity", $params{item}->qty, unitCode => _unit_code($params{item}->unit));
$params{xml}->endTag;
# </ram:SpecifiedLineTradeDelivery>
}
}
-sub _format_payment_terms_description {
+sub _calculate_payment_terms_values {
my ($self) = @_;
my (%vars, %amounts, %formatted_amounts);
$formatted_amounts{$_} = $::form->format_amount(\%::myconfig, $amounts{$_}, 2);
}
+ return (
+ vars => \%vars,
+ amounts => \%amounts,
+ formatted_amounts => \%formatted_amounts,
+ );
+}
+
+sub _format_payment_terms_description {
+ my ($self, %params) = @_;
+
my $description = ($self->payment_terms->translated_attribute('description_long_invoice', $self->language_id) // '') || $self->payment_terms->description_long_invoice;
- $description =~ s{<\%$_\%>}{ $vars{$_} }ge for keys %vars;
- $description =~ s{<\%$_\%>}{ $formatted_amounts{$_} }ge for keys %formatted_amounts;
+ $description =~ s{<\%$_\%>}{ $params{vars}->{$_} }ge for keys %{ $params{vars} };
+ $description =~ s{<\%$_\%>}{ $params{formatted_amounts}->{$_} }ge for keys %{ $params{formatted_amounts} };
return $description;
}
return unless $self->payment_terms;
+ my %payment_terms_vars = _calculate_payment_terms_values($self);
+
# <ram:SpecifiedTradePaymentTerms>
$params{xml}->startTag("ram:SpecifiedTradePaymentTerms");
- $params{xml}->dataElement("ram:Description", _u8(_format_payment_terms_description($self)));
+ $params{xml}->dataElement("ram:Description", _u8(_format_payment_terms_description($self, %payment_terms_vars)));
# <ram:DueDateDateTime>
$params{xml}->startTag("ram:DueDateDateTime");
- $params{xml}->dataElement("udt:DateTimeString", $self->duedate->strftime('%Y%m%d'), "format" => "102");
+ $params{xml}->dataElement("udt:DateTimeString", $self->duedate->strftime('%Y%m%d'), format => "102");
$params{xml}->endTag;
# </ram:DueDateDateTime>
if ($self->payment_terms->percent_skonto && $self->payment_terms->terms_skonto) {
+ my $currency_id = _u8(SL::Helper::ISO4217::map_currency_name_to_code($self->currency->name) // 'EUR');
+
# <ram:ApplicableTradePaymentDiscountTerms>
$params{xml}->startTag("ram:ApplicableTradePaymentDiscountTerms");
- $params{xml}->dataElement("ram:BasisPeriodMeasure", $self->payment_terms->terms_skonto, "unitCode" => "DAY");
+ $params{xml}->dataElement("ram:BasisPeriodMeasure", $self->payment_terms->terms_skonto, unitCode => "DAY");
+ $params{xml}->dataElement("ram:BasisAmount", _r2($payment_terms_vars{amounts}->{invtotal}), currencyID => $currency_id);
$params{xml}->dataElement("ram:CalculationPercent", _r2($self->payment_terms->percent_skonto * 100));
$params{xml}->endTag;
# </ram:ApplicableTradePaymentDiscountTerms>
$params{xml}->dataElement("ram:LineTotalAmount", _r2($self->netamount));
$params{xml}->dataElement("ram:TaxBasisTotalAmount", _r2($self->netamount));
- $params{xml}->dataElement("ram:TaxTotalAmount", _r2(sum(values %{ $params{ptc_data}->{taxes} })), "currencyID" => "EUR");
+ $params{xml}->dataElement("ram:TaxTotalAmount", _r2(sum(values %{ $params{ptc_data}->{taxes} })), currencyID => "EUR");
$params{xml}->dataElement("ram:GrandTotalAmount", _r2($self->amount));
$params{xml}->dataElement("ram:TotalPrepaidAmount", _r2($self->paid));
$params{xml}->dataElement("ram:DuePayableAmount", _r2($self->amount - $self->paid));
# <ram:IssueDateTime>
$params{xml}->startTag("ram:IssueDateTime");
- $params{xml}->dataElement("udt:DateTimeString", $self->transdate->strftime('%Y%m%d'), "format" => "102");
+ $params{xml}->dataElement("udt:DateTimeString", $self->transdate->strftime('%Y%m%d'), format => "102");
$params{xml}->endTag;
# </ram:IssueDateTime>
# <ram:SpecifiedTaxRegistration>
$params{xml}->startTag("ram:SpecifiedTaxRegistration");
- $params{xml}->dataElement("ram:ID", _u8($ustid_nr), "schemeID" => "VA");
+ $params{xml}->dataElement("ram:ID", _u8($ustid_nr), schemeID => "VA");
$params{xml}->endTag;
# </ram:SpecifiedTaxRegistration>
}
$params{xml}->startTag("ram:ActualDeliverySupplyChainEvent");
$params{xml}->startTag("ram:OccurrenceDateTime");
- $params{xml}->dataElement("udt:DateTimeString", ($self->deliverydate // $self->transdate)->strftime('%Y%m%d'), "format" => "102");
+ $params{xml}->dataElement("udt:DateTimeString", ($self->deliverydate // $self->transdate)->strftime('%Y%m%d'), format => "102");
$params{xml}->endTag;
$params{xml}->endTag;