X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FHelper%2FZUGFeRD.pm;h=017bbc535ae266833ad447c1412fec4560b83ea8;hb=ba40069b4f465cd51d509ab280d1c6e61652bda9;hp=7ab425d48ed2bdaf6a83853b224e152840cf2c2d;hpb=b3089c09460c250bfab75cf84c34f4ea958dc2e1;p=kivitendo-erp.git
diff --git a/SL/DB/Helper/ZUGFeRD.pm b/SL/DB/Helper/ZUGFeRD.pm
index 7ab425d48..017bbc535 100644
--- a/SL/DB/Helper/ZUGFeRD.pm
+++ b/SL/DB/Helper/ZUGFeRD.pm
@@ -14,6 +14,7 @@ use SL::Helper::ISO3166;
use SL::Helper::ISO4217;
use SL::Helper::UNECERecommendation20;
use SL::VATIDNr;
+use SL::ZUGFeRD qw(:PROFILES);
use Carp;
use Encode qw(encode);
@@ -24,6 +25,13 @@ use XML::Writer;
my @line_names = qw(LineOne LineTwo LineThree);
+my %standards_ids = (
+ PROFILE_FACTURX_EXTENDED() => 'urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended',
+sub _is_profile {
+ my ($self, @profiles) = @_;
+ return any { $self->{_zugferd}->{profile} == $_ } @profiles;
+}
+
sub _u8 {
my ($value) = @_;
return encode('UTF-8', $value // '');
@@ -325,7 +333,7 @@ sub _totals {
$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_by_tax_id} })), 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));
@@ -340,14 +348,14 @@ sub _exchanged_document_context {
#
$params{xml}->startTag("rsm:ExchangedDocumentContext");
- if ($self->customer->create_zugferd_invoices_for_this_customer == 2) {
+ if ($self->{_zugferd}->{test_mode}) {
$params{xml}->startTag("ram:TestIndicator");
$params{xml}->dataElement("udt:Indicator", "true");
$params{xml}->endTag;
}
$params{xml}->startTag("ram:GuidelineSpecifiedDocumentContextParameter");
- $params{xml}->dataElement("ram:ID", "urn:cen.eu:en16931:2017#conformant#urn:zugferd.de:2p0:extended");
+ $params{xml}->dataElement("ram:ID", $standards_ids{ $self->{_zugferd}->{profile} });
$params{xml}->endTag;
$params{xml}->endTag;
#
@@ -435,7 +443,7 @@ sub _seller_trade_party {
#
$params{xml}->startTag("ram:DefinedTradeContact");
- $params{xml}->dataElement("ram:PersonName", _u8($sales_person_cfg{name} || $sales_person_cfg{login}));
+ $params{xml}->dataElement("ram:PersonName", _u8($sales_person->safe_name));
if ($sales_person_cfg{tel}) {
$params{xml}->startTag("ram:TelephoneUniversalCommunication");
@@ -477,7 +485,7 @@ sub _buyer_trade_party {
$params{xml}->dataElement("ram:Name", _u8($self->customer->name));
_customer_postal_trade_address(%params, customer => $self->customer);
- _specified_tax_registration($self->customer->ustid, %params);
+ _specified_tax_registration($self->customer->ustid, %params) if $self->customer->ustid;
$params{xml}->endTag;
#
@@ -608,7 +616,7 @@ sub _validate_data {
$result{bank_account} = scalar(@{ $bank_accounts }) == 1 ? $bank_accounts->[0] : first { $_->use_for_zugferd } @{ $bank_accounts };
if (!$result{bank_account}) {
- SL::X::ZUGFeRDValidation->throw(message => $prefix . $::locale->text('No bank account flagged for ZUGFeRD usage was found.'));
+ SL::X::ZUGFeRDValidation->throw(message => $prefix . $::locale->text('No bank account flagged for Factur-X/ZUGFeRD usage was found.'));
}
}
@@ -617,6 +625,11 @@ sub _validate_data {
sub create_zugferd_data {
my ($self) = @_;
+ $self->{_zugferd} = { SL::ZUGFeRD->convert_customer_setting($self->customer->create_zugferd_invoices_for_this_customer) };
+
+ if (!$standards_ids{ $self->{_zugferd}->{profile} }) {
+ croak "Profile '" . $self->{_zugferd}->{profile} . "' is not supported";
+ }
my $output = '';
@@ -655,7 +668,7 @@ sub create_zugferd_xmp_data {
return {
conformance_level => 'EXTENDED',
- document_file_name => 'ZUGFeRD-invoice.xml',
+ document_file_name => 'factur-x.xml',
document_type => 'INVOICE',
version => '1.0',
};