ActionBar: Verwendung undefinierter Werte in Tests vermeiden
[kivitendo-erp.git] / SL / Dev / CustomerVendor.pm
1 package SL::Dev::CustomerVendor;
2
3 use strict;
4 use base qw(Exporter);
5 our @EXPORT = qw(create_customer);
6
7 use SL::DB::TaxZone;
8 use SL::DB::Currency;
9 use SL::DB::Customer;
10
11 sub create_customer {
12   my (%params) = @_;
13
14   my $taxzone    = _check_taxzone(delete $params{taxzone_id});
15   my $currency   = _check_currency(delete $params{currency_id});
16
17   my $customer = SL::DB::Customer->new( name        => delete $params{name} || 'Testkunde',
18                                         currency_id => $currency->id,
19                                         taxzone_id  => $taxzone->id,
20                                       );
21   $customer->assign_attributes( %params );
22   return $customer;
23 }
24
25 sub create_vendor {
26   my (%params) = @_;
27
28   my $taxzone    = _check_taxzone(delete $params{taxzone_id});
29   my $currency   = _check_currency(delete $params{currency_id});
30
31   my $vendor = SL::DB::Vendor->new( name        => delete $params{name} || 'Testlieferant',
32                                     currency_id => $currency->id,
33                                     taxzone_id  => $taxzone->id,
34                                   );
35   $vendor->assign_attributes( %params );
36   return $vendor;
37 }
38
39 sub _check_taxzone {
40   my ($taxzone_id) = @_;
41   # check that taxzone_id exists or if no taxzone_id passed use 'Inland'
42   my $taxzone;
43   if ( $taxzone_id ) {
44     $taxzone = SL::DB::Manager::TaxZone->find_by( id => $taxzone_id ) || die "Can't find taxzone_id";
45   } else {
46     $taxzone = SL::DB::Manager::TaxZone->find_by( description => 'Inland') || die "No taxzone 'Inland'";
47   }
48   return $taxzone;
49 }
50
51 sub _check_currency {
52   my ($currency_id) = @_;
53   my $currency;
54   if ( $currency_id ) {
55     $currency = SL::DB::Manager::Currency->find_by( id => $currency_id ) || die "Can't find currency_id";
56   } else {
57     $currency = SL::DB::Manager::Currency->find_by( id => $::instance_conf->get_currency_id );
58   }
59   return $currency;
60 }
61
62 1;
63
64 __END__
65
66 =head1 NAME
67
68 SL::Dev::CustomerVendor - create customer and vendor objects for testing, with minimal defaults
69
70 =head1 FUNCTIONS
71
72 =head2 C<create_customer %PARAMS>
73
74 Creates a new customer.
75
76 Minimal usage, default values, without saving to database:
77
78   my $customer = SL::Dev::CustomerVendor::create_customer();
79
80 Complex usage, overwriting some defaults, and save to database:
81
82   SL::Dev::CustomerVendor::create_customer(name        => 'Test customer',
83                                            hourly_rate => 50,
84                                            taxzone_id  => 2,
85                                           )->save;
86
87 If neither taxzone_id or currency_id (both are NOT NULL) are passed as params
88 then default values are used.
89
90 =head2 C<create_vendor %PARAMS>
91
92 Creates a new vendor.
93
94 Minimal usage, default values, without saving to database:
95
96   my $vendor = SL::Dev::CustomerVendor::create_vendor();
97
98 Complex usage, overwriting some defaults, and save to database:
99
100   SL::Dev::CustomerVendor::create_vendor(name        => 'Test vendor',
101                                          taxzone_id  => 2,
102                                          notes       => "Order for 100$ for free delivery",
103                                         )->save;
104
105 =head1 BUGS
106
107 Nothing here yet.
108
109 =head1 AUTHOR
110
111 G. Richardson E<lt>grichardson@kivitendo-premium.deE<gt>
112
113 =cut