projects
/
kivitendo-erp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Factur-X/ZUGFeRD: in »Factur-X/ZUGFeRD« umbenannt
[kivitendo-erp.git]
/
SL
/
DB
/
Helper
/
ZUGFeRD.pm
diff --git
a/SL/DB/Helper/ZUGFeRD.pm
b/SL/DB/Helper/ZUGFeRD.pm
index
211e885
..
017bbc5
100644
(file)
--- 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::Helper::ISO4217;
use SL::Helper::UNECERecommendation20;
use SL::VATIDNr;
+use SL::ZUGFeRD qw(:PROFILES);
use Carp;
use Encode qw(encode);
use Carp;
use Encode qw(encode);
@@
-24,6
+25,13
@@
use XML::Writer;
my @line_names = qw(LineOne LineTwo LineThree);
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 // '');
sub _u8 {
my ($value) = @_;
return encode('UTF-8', $value // '');
@@
-340,14
+348,14
@@
sub _exchanged_document_context {
# <rsm:ExchangedDocumentContext>
$params{xml}->startTag("rsm:ExchangedDocumentContext");
# <rsm:ExchangedDocumentContext>
$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}->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;
# </rsm:ExchangedDocumentContext>
$params{xml}->endTag;
$params{xml}->endTag;
# </rsm:ExchangedDocumentContext>
@@
-435,7
+443,7
@@
sub _seller_trade_party {
# <ram:DefinedTradeContact>
$params{xml}->startTag("ram:DefinedTradeContact");
# <ram:DefinedTradeContact>
$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");
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);
$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;
# </ram:BuyerTradeParty>
$params{xml}->endTag;
# </ram:BuyerTradeParty>
@@
-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}) {
$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) = @_;
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 = '';
my $output = '';
@@
-655,7
+668,7
@@
sub create_zugferd_xmp_data {
return {
conformance_level => 'EXTENDED',
return {
conformance_level => 'EXTENDED',
- document_file_name => '
ZUGFeRD-invoice
.xml',
+ document_file_name => '
factur-x
.xml',
document_type => 'INVOICE',
version => '1.0',
};
document_type => 'INVOICE',
version => '1.0',
};