Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
[kivitendo-erp.git] / SL / DB / CsvImportProfile.pm
1 package SL::DB::CsvImportProfile;
2
3 use strict;
4
5 use List::Util qw(first);
6
7 use SL::DB::MetaSetup::CsvImportProfile;
8
9 __PACKAGE__->meta->add_relationship(
10   settings => {
11     type       => 'one to many',
12     class      => 'SL::DB::CsvImportProfileSetting',
13     column_map => { id      => 'csv_import_profile_id' },
14   },
15 );
16
17 __PACKAGE__->meta->initialize;
18
19 __PACKAGE__->meta->make_manager_class;
20
21 __PACKAGE__->before_save('_before_save_unset_default_on_others');
22
23 #
24 # public functions
25 #
26
27 sub new_with_default {
28   my ($class, $type) = @_;
29
30   return $class->new(type => $type)->set_defaults;
31 }
32
33 sub set_defaults {
34   my ($self) = @_;
35
36   $self->_set_defaults(sep_char     => ',',
37                        quote_char   => '"',
38                        escape_char  => '"',
39                        charset      => 'CP850',
40                        numberformat => $::myconfig{numberformat},
41                        duplicates   => 'no_check',
42                       );
43
44   if ($self->type eq 'parts') {
45     my $bugru = SL::DB::Manager::Buchungsgruppe->find_by(description => { like => 'Standard%19%' });
46
47     $self->_set_defaults(sellprice_places          => 2,
48                          sellprice_adjustment      => 0,
49                          sellprice_adjustment_type => 'percent',
50                          article_number_policy     => 'update_prices',
51                          shoparticle_if_missing    => '0',
52                          parts_type                => 'part',
53                          default_buchungsgruppe    => ($bugru ? $bugru->id : undef),
54                          apply_buchungsgruppe      => 'all',
55                         );
56   } else {
57     $self->_set_defaults(table => 'customer');
58   }
59
60   return $self;
61 }
62
63 sub set {
64   my ($self, %params) = @_;
65
66   while (my ($key, $value) = each %params) {
67     my $setting = $self->_get_setting($key);
68
69     if (!$setting) {
70       $setting = SL::DB::CsvImportProfileSetting->new(key => $key);
71       $self->settings(@{ $self->settings || [] }, $setting);
72     }
73
74     $setting->value($value);
75   }
76
77   return $self;
78 }
79
80 sub get {
81   my ($self, $key, $default) = @_;
82
83   my $setting = $self->_get_setting($key);
84   return $setting ? $setting->value : $default;
85 }
86
87 sub _set_defaults {
88   my ($self, %params) = @_;
89
90   while (my ($key, $value) = each %params) {
91     $self->settings(@{ $self->settings || [] }, { key => $key, value => $value }) if !$self->_get_setting($key);
92   }
93
94   return $self;
95 }
96
97 #
98 # hooks
99 #
100
101 sub _before_save_unset_default_on_others {
102   my ($self) = @_;
103
104   if ($self->is_default) {
105     SL::DB::Manager::CsvImportProfile->update_all(set   => { is_default => 0 },
106                                                   where => [ type       => $self->type,
107                                                              '!id'      => $self->id ]);
108   }
109
110   return 1;
111 }
112
113 #
114 # helper functions
115 #
116
117 sub _get_setting {
118   my ($self, $key) = @_;
119   return first { $_->key eq $key } @{ $self->settings || [] };
120 }
121
122 1;