IBAN-Validierung bei Kunden-/Lieferantenstammdaten sowie bei Bankkonten
[kivitendo-erp.git] / SL / DB / Customer.pm
1 package SL::DB::Customer;
2
3 use strict;
4
5 use Rose::DB::Object::Helpers qw(as_tree);
6
7 use SL::DB::MetaSetup::Customer;
8 use SL::DB::Manager::Customer;
9 use SL::DB::Helper::IBANValidation;
10 use SL::DB::Helper::TransNumberGenerator;
11 use SL::DB::Helper::CustomVariables (
12   module      => 'CT',
13   cvars_alias => 1,
14 );
15
16 use SL::DB::VC;
17
18 __PACKAGE__->meta->add_relationship(
19   shipto => {
20     type         => 'one to many',
21     class        => 'SL::DB::Shipto',
22     column_map   => { id      => 'trans_id' },
23     manager_args => { sort_by => 'lower(shipto.shiptoname)' },
24     query_args   => [ module   => 'CT' ],
25   },
26   contacts => {
27     type         => 'one to many',
28     class        => 'SL::DB::Contact',
29     column_map   => { id      => 'cp_cv_id' },
30     manager_args => { sort_by => 'lower(contacts.cp_name)' },
31   },
32 );
33
34 __PACKAGE__->meta->initialize;
35
36 __PACKAGE__->before_save('_before_save_set_customernumber');
37
38 sub _before_save_set_customernumber {
39   my ($self) = @_;
40
41   $self->create_trans_number if !defined $self->customernumber || $self->customernumber eq '';
42   return 1;
43 }
44
45 sub validate {
46   my ($self) = @_;
47
48   my @errors;
49   push @errors, $::locale->text('The customer name is missing.') if !$self->name;
50   push @errors, $self->validate_ibans;
51
52   return @errors;
53 }
54
55 sub short_address {
56   my ($self) = @_;
57
58   return join ', ', grep { $_ } $self->street, $self->zipcode, $self->city;
59 }
60
61 sub displayable_name {
62   my $self = shift;
63
64   return join ' ', grep $_, $self->customernumber, $self->name;
65 }
66
67 sub is_customer { 1 };
68 sub is_vendor   { 0 };
69 sub payment_terms { goto &payment }
70
71 1;