Speichern, Laden, Löschen von Importprofilen implementiert
[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                       );
42
43   if ($self->type eq 'parts') {
44     my $bugru = SL::DB::Manager::Buchungsgruppe->find_by(name => { like => 'Standard%19%' });
45
46     $self->_set_defaults(sellprice_places          => 2,
47                          sellprice_adjustment      => 0,
48                          sellprice_adjustment_type => 'percent',
49                          article_number_policy     => 'update_price',
50                          price_group_sep_char      => '!',
51                          shoparticle_if_missing    => 0,
52                          parts_type                => 'part',
53                          default_buchungsgruppe    => ($bugru ? $bugru->name : undef),
54                         );
55   } else {
56     $self->_set_defaults(table => 'customer');
57   }
58
59   return $self;
60 }
61
62 sub set {
63   my ($self, %params) = @_;
64
65   while (my ($key, $value) = each %params) {
66     my $setting = $self->_get_setting($key);
67
68     if (!$setting) {
69       $setting = SL::DB::CsvImportProfileSetting->new(key => $key);
70       $self->settings(@{ $self->settings || [] }, $setting);
71     }
72
73     $setting->value($value);
74   }
75
76   return $self;
77 }
78
79 sub get {
80   my ($self, $key, $default) = @_;
81
82   my $setting = $self->_get_setting($key);
83   return $setting ? $setting->value : $default;
84 }
85
86 sub _set_defaults {
87   my ($self, %params) = @_;
88
89   while (my ($key, $value) = each %params) {
90     $self->settings(@{ $self->settings || [] }, { key => $key, value => $value }) if !$self->_get_setting($key);
91   }
92
93   return $self;
94 }
95
96 #
97 # hooks
98 #
99
100 sub _before_save_unset_default_on_others {
101   my ($self) = @_;
102
103   if ($self->is_default) {
104     SL::DB::Manager::CsvImportProfile->update_all(set   => { is_default => 0 },
105                                                   where => [ type       => $self->type,
106                                                              '!id'      => $self->id ]);
107   }
108
109   return 1;
110 }
111
112 #
113 # helper functions
114 #
115
116 sub _get_setting {
117   my ($self, $key) = @_;
118   return first { $_->key eq $key } @{ $self->settings || [] };
119 }
120
121 1;