UTF8-Flags setzen/beachten
[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
10 sub new {
11   my $class = shift;
12   my $self  = {};
13
14   bless $self, $class;
15
16   $self->_init(@_);
17
18   return $self;
19 }
20
21 sub _init {
22   my $self       = shift;
23   my %params     = @_;
24
25   $self->{sepa}  = $params{sepa};
26   delete $params{sepa};
27
28   my $missing_parameter = first { !$params{$_} } qw(src_iban src_bic dst_iban dst_bic recipient reference amount end_to_end_id);
29   croak "Missing parameter: $missing_parameter" if ($missing_parameter);
30
31   $params{end_to_end_id}  ||= 'NOTPROVIDED';
32   $params{execution_date} ||= strftime "%Y-%m-%d", localtime;
33
34   croak "Execution date format wrong for '$params{execution_date}': not YYYY-MM-DD." if ($params{execution_date} !~ /^\d{4}-\d{2}-\d{2}$/);
35
36   map { $self->{$_} = $self->{sepa}->{iconv}->convert($params{$_})       } keys %params;
37   map { $self->{$_} =~ s/\s+//g                                          } qw(src_iban src_bic dst_iban dst_bic);
38   map { $self->{$_} = $self->{sepa}->_replace_special_chars($self->{$_}) } qw(recipient reference end_to_end_id);
39 }
40
41 sub get {
42   my $self    = shift;
43   my $key     = shift;
44   my $max_len = shift;
45
46   return undef if (!defined $self->{$key});
47
48   my $str = $max_len ? substr($self->{$key}, 0, $max_len) : $self->{$key};
49
50   return encode('UTF-8', $str);
51 }
52
53 1;