Datenbanktabelle und -modelle für CSV-Stammdatenimportprofile
[kivitendo-erp.git] / SL / DB / CsvImportProfile.pm
diff --git a/SL/DB/CsvImportProfile.pm b/SL/DB/CsvImportProfile.pm
new file mode 100644 (file)
index 0000000..85033e1
--- /dev/null
@@ -0,0 +1,76 @@
+package SL::DB::CsvImportProfile;
+
+use strict;
+
+use List::Util qw(first);
+
+use SL::DB::MetaSetup::CsvImportProfile;
+
+__PACKAGE__->meta->add_relationship(
+  settings => {
+    type       => 'one to many',
+    class      => 'SL::DB::CsvImportProfileSetting',
+    column_map => { id      => 'csv_import_profile_id' },
+  },
+);
+
+__PACKAGE__->meta->initialize;
+
+__PACKAGE__->meta->make_manager_class;
+
+__PACKAGE__->before_save('_before_save_unset_default_on_others');
+
+#
+# public functions
+#
+
+sub set {
+  my ($self, %params) = @_;
+
+  while (my ($key, $value) = each %params) {
+    my $setting = $self->_get_setting($key);
+
+    if (!$setting) {
+      $setting = SL::DB::CsvImportProfileSetting->new(key => $key);
+      $self->add_settings($setting);
+    }
+
+    $setting->value($value);
+  }
+
+  return $self;
+}
+
+sub get {
+  my ($self, $key, $default) = @_;
+
+  my $setting = $self->_get_setting($key);
+  return $setting ? $setting->value : $default;
+}
+
+#
+# hooks
+#
+
+sub _before_save_unset_default_on_others {
+  my ($self) = @_;
+
+  if ($self->is_default) {
+    SL::DB::Manager::CsvImportProfile->update_all(set   => { is_default => 0 },
+                                                  where => [ type       => $self->type,
+                                                             '!id'      => $self->id ]);
+  }
+
+  return 1;
+}
+
+#
+# helper functions
+#
+
+sub _get_setting {
+  my ($self, $key) = @_;
+  return first { $_->key eq $key } @{ $self->settings };
+}
+
+1;