Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 333003d3

Von Moritz Bunkus vor fast 5 Jahren hinzugefügt

  • ID 333003d332756c5f53a33720aea7b714dfd335c8
  • Vorgänger e5f53eb5
  • Nachfolger dc78c225

ZUGFeRD: Validierung diverser nötiger Parameter

Unterschiede anzeigen:

SL/DB/Helper/ZUGFeRD.pm
15 15

  
16 16
use Carp;
17 17
use Encode qw(encode);
18
use List::MoreUtils qw(pairwise);
18
use List::MoreUtils qw(any pairwise);
19 19
use List::Util qw(first sum);
20 20
use Template;
21 21
use XML::Writer;
......
515 515
  #   </rsm:SupplyChainTradeTransaction>
516 516
}
517 517

  
518
sub _validate_data {
519
  my ($self) = @_;
520

  
521
  my $prefix = $::locale->text('The ZUGFeRD invoice data cannot be generated because the data validation failed.') . ' ';
522

  
523
  if (!$::instance_conf->get_co_ustid) {
524
    SL::X::ZUGFeRDValidation->throw(message => $prefix . $::locale->text('The VAT registration number is missing in the client configuration.'));
525
  }
526

  
527
  if (!$::instance_conf->get_company || any { my $get = "get_address_$_"; !$::instance_conf->$get } qw(street1 zipcode city)) {
528
    SL::X::ZUGFeRDValidation->throw(message => $prefix . $::locale->text('The company\'s address information is incomplete in the client configuration.'));
529
  }
530

  
531
  if ($::instance_conf->get_address_country && !SL::Helper::ISO3166::map_name_to_alpha_2_code($::instance_conf->get_address_country)) {
532
    SL::X::ZUGFeRDValidation->throw(message => $prefix . $::locale->text('The country from the company\'s address in the client configuration cannot be mapped to an ISO 3166-1 alpha 2 code.'));
533
  }
534

  
535
  if ($self->customer->country && !SL::Helper::ISO3166::map_name_to_alpha_2_code($self->customer->country)) {
536
    SL::X::ZUGFeRDValidation->throw(message => $prefix . $::locale->text('The country from the customer\'s address cannot be mapped to an ISO 3166-1 alpha 2 code.'));
537
  }
538

  
539
  if (!SL::Helper::ISO4217::map_currency_name_to_code($self->currency->name)) {
540
    SL::X::ZUGFeRDValidation->throw(message => $prefix . $::locale->text('The currency "#1" cannot be mapped to an ISO 4217 currency code.', $self->currency->name));
541
  }
542

  
543
  my $failed_unit = first { !SL::Helper::UNECERecommendation20::map_name_to_code($_) } map { $_->unit } @{ $self->items };
544
  if ($failed_unit) {
545
    SL::X::ZUGFeRDValidation->throw(message => $prefix . $::locale->text('One of the units used (#1) cannot be mapped to a known unit code from the UN/ECE Recommendation 20 list.', $failed_unit));
546
  }
547
}
548

  
518 549
sub create_zugferd_data {
519 550
  my ($self) = @_;
520 551

  
552
  _validate_data($self);
553

  
521 554
  my %ptc_data = $self->calculate_prices_and_taxes;
522 555
  my $output   = '';
523 556
  my $xml      = XML::Writer->new(
SL/X.pm
27 27
  'SL::X::DBUtilsError' => {
28 28
    isa                 => 'SL::X::DBError',
29 29
  },
30
  'SL::X::ZUGFeRDValidation' => {
31
    isa                 => 'SL::X::Base',
32
  },
30 33
);
31 34

  
32 35
1;
bin/mozilla/io.pl
2122 2122

  
2123 2123
  return if !$record || !$record->can('create_pdf_a_print_options') || !$record->can('create_zugferd_data');
2124 2124

  
2125
  my $xmlfile = File::Temp->new;
2126
  $xmlfile->print($record->create_zugferd_data);
2127
  $xmlfile->close;
2128

  
2129
  $form->{TEMPLATE_DRIVER_OPTIONS}->{pdf_a}           = $record->create_pdf_a_print_options(zugferd_xmp_data => $record->create_zugferd_xmp_data);
2130
  $form->{TEMPLATE_DRIVER_OPTIONS}->{pdf_attachments} = [
2131
    { source       => $xmlfile,
2132
      name         => 'ZUGFeRD-invoice.xml',
2133
      description  => $::locale->text('ZUGFeRD invoice'),
2134
      relationship => '/Alternative',
2135
      mime_type    => 'text/xml',
2136
    }
2137
  ];
2125
  eval {
2126
    my $xmlfile = File::Temp->new;
2127
    $xmlfile->print($record->create_zugferd_data);
2128
    $xmlfile->close;
2129

  
2130
    $form->{TEMPLATE_DRIVER_OPTIONS}->{pdf_a}           = $record->create_pdf_a_print_options(zugferd_xmp_data => $record->create_zugferd_xmp_data);
2131
    $form->{TEMPLATE_DRIVER_OPTIONS}->{pdf_attachments} = [
2132
      { source       => $xmlfile,
2133
        name         => 'ZUGFeRD-invoice.xml',
2134
        description  => $::locale->text('ZUGFeRD invoice'),
2135
        relationship => '/Alternative',
2136
        mime_type    => 'text/xml',
2137
      }
2138
    ];
2139
  };
2140

  
2141
  if (my $e = SL::X::ZUGFeRDValidation->caught) {
2142
    $::form->error($e->message);
2143
  }
2138 2144
}
locale/de/all
2133 2133
  'On Order'                    => 'Ist bestellt',
2134 2134
  'On the next page the type of all variables can be set.' => 'Auf der folgenden Seite können die Typen aller Variablen gesetzt werden.',
2135 2135
  'One of the columns "qty" or "target_qty" must be given. If "target_qty" is given, the quantity to transfer for each transfer will be calculate, so that the quantity for this part, warehouse and bin will result in the given "target_qty" after each transfer.' => 'Eine der Spalten "qty" oder "target_qty" muss angegeben werden. Wird "target_qty" angegeben, so wird die zu bewegende Menge für jede Lagerbewegung so berechnet, dass die Lagermenge für diesen Artikel, Lager und Lagerplatz nach jeder Lagerbewegung der angegebenen Zielmenge entspricht.',
2136
  'One of the units used (#1) cannot be mapped to a known unit code from the UN/ECE Recommendation 20 list.' => 'Eine der verwendeten Einheiten (#1) kann keinem der bekannten Einheiten-Codes aus der Liste UN/ECE Recommendation 20 zugeordnet werden.',
2136 2137
  'One or more Perl modules missing' => 'Ein oder mehr Perl-Module fehlen',
2137 2138
  'Onhand only sets the quantity in master data, not in inventory. This is only a legacy info field and will be overwritten as soon as a inventory transfer happens.' => 'Das Import-Feld Auf Lager setzt nur die Menge in den Stammdaten, nicht im Lagerbereich. Dies ist historisch gewachsen nur ein Informationsfeld was mit dem tatsächlichen Wert überschrieben wird, sobald eine wirkliche Lagerbewegung stattfindet (DB-Trigger).',
2138 2139
  'Only Price'                  => 'Nur Preis',
......
3183 3184
  'The SQL query can be parameterized with variables named as follows: <%name%>.' => 'Die SQL-Abfrage kann mittels Variablen wie folgt parametrisiert werden: <%Variablenname%>.',
3184 3185
  'The SQL query does not contain any parameter that need to be configured.' => 'Die SQL-Abfrage enthält keine Parameter, die angegeben werden müssten.',
3185 3186
  'The URL is missing.'         => 'URL fehlt',
3187
  'The VAT registration number is missing in the client configuration.' => 'Die Umsatzsteuer-ID-Nummer fehlt in der Mandantenkonfiguration.',
3186 3188
  'The WebDAV feature has been used.' => 'Das WebDAV-Feature wurde benutzt.',
3189
  'The ZUGFeRD invoice data cannot be generated because the data validation failed.' => 'Die ZUGFeRD-Rechnungsdaten können nicht erzeugt werden, da die Validierung fehlschlug.',
3187 3190
  'The ZUGFeRD notes have been saved.' => 'Die ZUGFeRD-Notizen wurden gespeichert.',
3188 3191
  'The abbreviation is missing.' => 'Abkürzung fehlt',
3189 3192
  'The access rights a user has within a client instance is still governed by his group membership.' => 'Welche Zugriffsrechte ein Benutzer innerhalb eines Mandanten hat, wird weiterhin über Gruppenmitgliedschaften geregelt.',
......
3237 3240
  'The columns &quot;Dunning Duedate&quot;, &quot;Total Fees&quot; and &quot;Interest&quot; show data for the previous dunning created for this invoice.' => 'Die Spalten &quot;Zahlbar bis&quot;, &quot;Kumulierte Gebühren&quot; und &quot;Zinsen&quot; zeigen Daten der letzten für diese Rechnung erzeugten Mahnung.',
3238 3241
  'The combination of database host, port and name is not unique.' => 'Die Kombination aus Datenbankhost, -port und -name ist nicht eindeutig.',
3239 3242
  'The command is missing.'     => 'Der Befehl fehlt.',
3243
  'The company\'s address information is incomplete in the client configuration.' => 'Die Firmenadresse in der Mandantenkonfiguration ist unvollständig.',
3240 3244
  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/kivitendo.conf.' => 'Die Verbindung zum LDAP-Server kann nicht verschlüsselt werden (Fehler bei SSL/TLS-Initialisierung). Bitte überprüfen Sie die Angaben in config/kivitendo.conf.',
3241 3245
  'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:',
3242 3246
  'The connection to the configured client database "#1" on host "#2:#3" failed.' => 'Die Verbindung zur konfigurierten Datenbank "#1" auf Host "#2:#3" schlug fehl.',
......
3246 3250
  'The connection to the template database failed:' => 'Die Verbindung zur Vorlagendatenbank schlug fehl:',
3247 3251
  'The connection was established successfully.' => 'Die Verbindung zur Datenbank wurde erfolgreich hergestellt.',
3248 3252
  'The contact person attribute "birthday" is converted from a free-form text field into a date field.' => 'Das Kontaktpersonenfeld "Geburtstag" wird von einem freien Textfeld auf ein Datumsfeld umgestellt.',
3253
  'The country from the company\'s address in the client configuration cannot be mapped to an ISO 3166-1 alpha 2 code.' => 'Das Land der Firmenadresse in der Mandantenkonfiguration kann keinem der bekannten ISO 3166-1 Alpha 2-Codes zugeordnet werden.',
3254
  'The country from the customer\'s address cannot be mapped to an ISO 3166-1 alpha 2 code.' => 'Das Land aus der Kunden-Rechnungsadresse kann keinem der bekannten ISO 3166-1 Alpha 2-Codes zugeordnet werden.',
3249 3255
  'The creation of the authentication database failed:' => 'Das Anlegen der Authentifizierungsdatenbank schlug fehl:',
3250 3256
  'The credentials (username & password) for connecting database are wrong.' => 'Die Daten (Benutzername & Passwort) für das Login zur Datenbank sind falsch.',
3257
  'The currency "#1" cannot be mapped to an ISO 4217 currency code.' => 'Die Währung "#1" kann keinem der bekannten ISO 4217-Codes zugeordnet werden.',
3251 3258
  'The custom data export has been deleted.' => 'Der benutzerdefinierte Datenexport wurde gelöscht.',
3252 3259
  'The custom data export has been saved.' => 'Der benutzerdefinierte Datenexport wurde gespeichert.',
3253 3260
  'The custom variable has been created.' => 'Die benutzerdefinierte Variable wurde erfasst.',

Auch abrufbar als: Unified diff