Datenbanktabelle und -modelle für CSV-Stammdatenimportprofile
[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 set {
28   my ($self, %params) = @_;
29
30   while (my ($key, $value) = each %params) {
31     my $setting = $self->_get_setting($key);
32
33     if (!$setting) {
34       $setting = SL::DB::CsvImportProfileSetting->new(key => $key);
35       $self->add_settings($setting);
36     }
37
38     $setting->value($value);
39   }
40
41   return $self;
42 }
43
44 sub get {
45   my ($self, $key, $default) = @_;
46
47   my $setting = $self->_get_setting($key);
48   return $setting ? $setting->value : $default;
49 }
50
51 #
52 # hooks
53 #
54
55 sub _before_save_unset_default_on_others {
56   my ($self) = @_;
57
58   if ($self->is_default) {
59     SL::DB::Manager::CsvImportProfile->update_all(set   => { is_default => 0 },
60                                                   where => [ type       => $self->type,
61                                                              '!id'      => $self->id ]);
62   }
63
64   return 1;
65 }
66
67 #
68 # helper functions
69 #
70
71 sub _get_setting {
72   my ($self, $key) = @_;
73   return first { $_->key eq $key } @{ $self->settings };
74 }
75
76 1;