X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FBankAccount.pm;h=5f4a3e4765899c9155b20228939491a9cb6bf5e0;hb=4ddcd46105d2a7afc41220ba51a703f9e2aef034;hp=4ef201b99ba8ad81c12db0ced0f5b1a8de0c1eb2;hpb=2d7e4203055156dccb2ca3fba82bbb32873ecd2e;p=kivitendo-erp.git diff --git a/SL/DB/BankAccount.pm b/SL/DB/BankAccount.pm index 4ef201b99..5f4a3e476 100644 --- a/SL/DB/BankAccount.pm +++ b/SL/DB/BankAccount.pm @@ -6,9 +6,47 @@ package SL::DB::BankAccount; use strict; use SL::DB::MetaSetup::BankAccount; +use SL::DB::Manager::BankAccount; +use SL::DB::Helper::ActsAsList; __PACKAGE__->meta->initialize; -# Creates get_all, get_all_count, get_all_iterator, delete_all and update_all. -__PACKAGE__->meta->make_manager_class; + +sub validate { + my ($self) = @_; + + my @errors; + + if ( not $self->{chart_id} ) { + push @errors, $::locale->text('There is no connected chart.'); + } else { + # check whether the assigned chart is valid or is already being used by + # another bank account (there is also a UNIQUE database constraint on + # chart_id) + + my $chart_id = $self->chart_id; + require SL::DB::Chart; + my $chart = SL::DB::Manager::Chart->find_by( id => $chart_id ); + if ( $chart ) { + my $linked_bank = SL::DB::Manager::BankAccount->find_by( chart_id => $chart_id ); + if ( $linked_bank ) { + if ( not $self->{id} or ( $self->{id} && $linked_bank->id != $self->{id} )) { + push @errors, $::locale->text('The account #1 is already being used by bank account #2.', $chart->displayable_name, $linked_bank->{name}); + }; + }; + } else { + push @errors, $::locale->text('The chart is not valid.'); + }; + }; + + push @errors, $::locale->text('The IBAN is missing.') unless $self->{iban}; + + return @errors; +} + +sub displayable_name { + my ($self) = @_; + + return join ' ', grep $_, $self->name, $self->bank, $self->iban; +} 1;