1 package SL::Controller::CsvImport::BankTransaction;
6 use SL::Controller::CsvImport::Helper::Consistency;
7 use SL::DB::BankTransaction;
11 use parent qw(SL::Controller::CsvImport::Base);
13 use Rose::Object::MakeMethods::Generic
15 'scalar --get_set_init' => [ qw(table bank_accounts_by) ],
20 $self->class('SL::DB::BankTransaction');
23 sub init_bank_accounts_by {
26 return { map { my $col = $_; ( $col => { map { ( $_->$col => $_ ) } @{ $self->all_bank_accounts } } ) } qw(id account_number) };
32 $self->controller->track_progress(phase => 'building data', progress => 0);
35 my $num_data = scalar @{ $self->controller->data };
36 foreach my $entry (@{ $self->controller->data }) {
37 $self->controller->track_progress(progress => $i/$num_data * 100) if $i % 100 == 0;
39 $self->check_bank_account($entry);
40 $self->check_currency($entry, take_default => 1);
42 $self->join_purposes($entry);
43 #TODO: adde checks für die Variablen
48 $self->add_cvar_raw_data_columns;
51 sub setup_displayable_columns {
54 $self->SUPER::setup_displayable_columns;
56 $self->add_displayable_columns({ name => 'transaction_id', description => $::locale->text('Transaction ID') },
57 { name => 'local_bank_code', description => $::locale->text('Own bank code') },
58 { name => 'local_account_number', description => $::locale->text('Own bank account number') },
59 { name => 'local_bank_account_id', description => $::locale->text('ID of own bank account') },
60 { name => 'remote_bank_code', description => $::locale->text('Bank code of the goal/source') },
61 { name => 'remote_account_number', description => $::locale->text('Account number of the goal/source') },
62 { name => 'transdate', description => $::locale->text('Date of transaction') },
63 { name => 'valutadate', description => $::locale->text('Valuta') },
64 { name => 'amount', description => $::locale->text('Amount') },
65 { name => 'currency', description => $::locale->text('Currency') },
66 { name => 'currency_id', description => $::locale->text('Currency (database ID)') },
67 { name => 'remote_name', description => $::locale->text('Name of the goal/source') },
68 { name => 'remote_name_1', description => $::locale->text('Name of the goal/source') },
69 { name => 'purpose', description => $::locale->text('Purpose') },
73 sub check_bank_account {
74 my ($self, $entry) = @_;
76 my $object = $entry->{object};
78 # Check whether or not local_bank_account ID is valid.
79 if ($object->local_bank_account_id && !$self->bank_accounts_by->{id}->{ $object->local_bank_account_id }) {
80 push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
84 # Check whether or not local_bank_account ID, local_account_number and local_bank_code are consistent.
85 if ($object->local_bank_account_id && $entry->{raw_data}->{local_account_number}) {
86 my $bank_account = $self->bank_accounts_by->{id}->{ $object->local_bank_account_id };
87 if ($bank_account->account_number ne $entry->{raw_data}->{local_account_number}) {
88 push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
91 if ($entry->{raw_data}->{local_bank_code} && $entry->{raw_data}->{local_bank_code} ne $bank_account->bank_code) {
92 push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
98 # Map account information to ID if given.
99 if (!$object->local_bank_account_id && $entry->{raw_data}->{local_account_number}) {
100 my $bank_account = $self->bank_accounts_by->{account_number}->{ $entry->{raw_data}->{local_account_number} };
101 if (!$bank_account) {
102 push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
105 if ($entry->{raw_data}->{local_bank_code} && $entry->{raw_data}->{local_bank_code} ne $bank_account->bank_code) {
106 push @{ $entry->{errors} }, $::locale->text('Error: Invalid local bank account');
110 $object->local_bank_account_id($bank_account->id);
113 return $object->local_bank_account_id ? 1 : 0;
117 my ($self, $entry) = @_;
119 my $object = $entry->{object};
121 my $purpose = join('', $entry->{raw_data}->{purpose},
122 $entry->{raw_data}->{purpose1},
123 $entry->{raw_data}->{purpose2},
124 $entry->{raw_data}->{purpose3},
125 $entry->{raw_data}->{purpose4},
126 $entry->{raw_data}->{purpose5},
127 $entry->{raw_data}->{purpose6},
128 $entry->{raw_data}->{purpose7},
129 $entry->{raw_data}->{purpose8},
130 $entry->{raw_data}->{purpose9},
131 $entry->{raw_data}->{purpose10},
132 $entry->{raw_data}->{purpose11} );
133 $object->purpose($purpose);