b816bedb80fedd0f0a643b4517c1a89b7e09af38
[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 require 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                        dateformat   => $::myconfig{dateformat},
42                        duplicates   => 'no_check',
43                       );
44
45   return $self;
46 }
47
48 sub set {
49   my ($self, %params) = @_;
50
51   while (my ($key, $value) = each %params) {
52     my $setting = $self->_get_setting($key);
53
54     if (!$setting) {
55       $setting = SL::DB::CsvImportProfileSetting->new(key => $key);
56       $self->settings(@{ $self->settings || [] }, $setting);
57     }
58
59     $setting->value($value);
60   }
61
62   return $self;
63 }
64
65 sub get {
66   my ($self, $key, $default) = @_;
67
68   my $setting = $self->_get_setting($key);
69   return $setting ? $setting->value : $default;
70 }
71
72 sub _set_defaults {
73   my ($self, %params) = @_;
74
75   while (my ($key, $value) = each %params) {
76     $self->settings(@{ $self->settings || [] }, { key => $key, value => $value }) if !$self->_get_setting($key);
77   }
78
79   return $self;
80 }
81
82 sub clone_and_reset_deep {
83   my ($self) = @_;
84
85   my $clone = $self->clone_and_reset;
86   $clone->settings(map { $_->clone_and_reset } $self->settings);
87   $clone->is_default(0);
88   $clone->name('');
89   return $clone;
90 }
91
92 sub flatten {
93   my ($self) = @_;
94
95   return map {
96     $_->key => $_->value
97   } $self->settings;
98 }
99
100 #
101 # hooks
102 #
103
104 sub _before_save_unset_default_on_others {
105   my ($self) = @_;
106
107   if ($self->is_default) {
108     SL::DB::Manager::CsvImportProfile->update_all(set   => { is_default => 0 },
109                                                   where => [ type       => $self->type,
110                                                              '!id'      => $self->id ]);
111   }
112
113   return 1;
114 }
115
116 #
117 # helper functions
118 #
119
120 sub _get_setting {
121   my ($self, $key) = @_;
122   return first { $_->key eq $key } @{ $self->settings || [] };
123 }
124
125 1;