048db7c101fb5e008f37263d9120197597dc6ec2
[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::TransNumberGenerator;
10 use SL::DB::Helper::CustomVariables (
11   module      => 'CT',
12   cvars_alias => 1,
13 );
14
15 use SL::DB::VC;
16
17 __PACKAGE__->meta->add_relationship(
18   shipto => {
19     type         => 'one to many',
20     class        => 'SL::DB::Shipto',
21     column_map   => { id      => 'trans_id' },
22     manager_args => { sort_by => 'lower(shipto.shiptoname)' },
23     query_args   => [ module   => 'CT' ],
24   },
25   contacts => {
26     type         => 'one to many',
27     class        => 'SL::DB::Contact',
28     column_map   => { id      => 'cp_cv_id' },
29     manager_args => { sort_by => 'lower(contacts.cp_name)' },
30   },
31 );
32
33 __PACKAGE__->meta->initialize;
34
35 __PACKAGE__->before_save('_before_save_set_customernumber');
36
37 sub _before_save_set_customernumber {
38   my ($self) = @_;
39
40   $self->create_trans_number if !defined $self->customernumber || $self->customernumber eq '';
41   return 1;
42 }
43
44 sub validate {
45   my ($self) = @_;
46
47   my @errors;
48   push @errors, $::locale->text('The customer name is missing.') if !$self->name;
49
50   return @errors;
51 }
52
53 sub short_address {
54   my ($self) = @_;
55
56   return join ', ', grep { $_ } $self->street, $self->zipcode, $self->city;
57 }
58
59 sub displayable_name {
60   my $self = shift;
61
62   return join ' ', grep $_, $self->customernumber, $self->name;
63 }
64
65 sub is_customer { 1 };
66 sub is_vendor   { 0 };
67 sub payment_terms { goto &payment }
68
69 1;