Aufrufe von 'exit' durch eigene Funktion '::end_of_request()' ersetzt.
[kivitendo-erp.git] / SL / SEPA / XML / Transaction.pm
1 package SL::SEPA::XML::Transaction;
2
3 use strict;
4
5 use Carp;
6 use Encode;
7 use List::Util qw(first);
8 use POSIX qw(strftime);
9 use Text::Iconv;
10
11 sub new {
12   my $class = shift;
13   my $self  = {};
14
15   bless $self, $class;
16
17   $self->_init(@_);
18
19   return $self;
20 }
21
22 sub _init {
23   my $self       = shift;
24   my %params     = @_;
25
26   $self->{sepa}  = $params{sepa};
27   delete $params{sepa};
28
29   my $missing_parameter = first { !$params{$_} } qw(src_iban src_bic dst_iban dst_bic recipient reference amount end_to_end_id);
30   croak "Missing parameter: $missing_parameter" if ($missing_parameter);
31
32   $params{end_to_end_id}  ||= 'NOTPROVIDED';
33   $params{execution_date} ||= strftime "%Y-%m-%d", localtime;
34
35   croak "Execution date format wrong for '$params{execution_date}': not YYYY-MM-DD." if ($params{execution_date} !~ /^\d{4}-\d{2}-\d{2}$/);
36
37   map { $self->{$_} = decode('UTF-8', $self->{sepa}->{iconv}->convert($params{$_})) } keys %params;
38   map { $self->{$_} =~ s/\s+//g                                                     } qw(src_iban src_bic dst_iban dst_bic);
39   map { $self->{$_} = $self->{sepa}->_replace_special_chars($self->{$_})            } qw(recipient reference end_to_end_id);
40 }
41
42 sub get {
43   my $self    = shift;
44   my $key     = shift;
45   my $max_len = shift;
46
47   return undef if (!defined $self->{$key});
48
49   my $str = $max_len ? substr($self->{$key}, 0, $max_len) : $self->{$key};
50
51   return encode('UTF-8', $str);
52 }
53
54 1;