1 package SL::DB::CsvImportProfile;
 
   5 use List::Util qw(first);
 
   7 require SL::DB::MetaSetup::CsvImportProfile;
 
   8 use Rose::DB::Object::Helpers qw(clone_and_reset);
 
  10 __PACKAGE__->meta->add_relationship(
 
  12     type       => 'one to many',
 
  13     class      => 'SL::DB::CsvImportProfileSetting',
 
  14     column_map => { id      => 'csv_import_profile_id' },
 
  18 __PACKAGE__->meta->initialize;
 
  20 __PACKAGE__->meta->make_manager_class;
 
  22 __PACKAGE__->before_save('_before_save_unset_default_on_others');
 
  28 sub new_with_default {
 
  29   my ($class, $type) = @_;
 
  31   return $class->new(type => $type)->set_defaults;
 
  38   if ($self->type eq 'parts') {
 
  39     my $bugru = SL::DB::Manager::Buchungsgruppe->find_by(description => { like => 'Standard%19%' });
 
  41     $self->_set_defaults(sellprice_places          => 2,
 
  42                          sellprice_adjustment      => 0,
 
  43                          sellprice_adjustment_type => 'percent',
 
  44                          article_number_policy     => 'update_prices',
 
  45                          shoparticle_if_missing    => '0',
 
  47                          default_buchungsgruppe    => ($bugru ? $bugru->id : undef),
 
  48                          apply_buchungsgruppe      => 'all',
 
  50   } elsif ($self->type eq 'orders') {
 
  51     $self->_set_defaults(order_column    => $::locale->text('Order'),
 
  52                          item_column     => $::locale->text('OrderItem'),
 
  53                          max_amount_diff => 0.02,
 
  55   } elsif ($self->type eq 'mt940') {
 
  56     $self->_set_defaults(charset       => 'UTF8',
 
  58                          numberformat  => '1000.00',
 
  59                          update_policy => 'skip',
 
  61   } elsif ($self->type eq 'bank_transactions') {
 
  62     $self->_set_defaults(charset       => 'UTF8',
 
  63                          update_policy => 'skip',
 
  66     $self->_set_defaults(table => 'customer');
 
  69   # TODO: move the defaults into their own controller
 
  70   # defaults can only be set once, so use these values as default if they
 
  71   # haven't already been set above for one of the special import types
 
  72   # If the values have been set above they won't be overwritten here:
 
  74   $self->_set_defaults(sep_char     => ',',
 
  78                        numberformat => $::myconfig{numberformat},
 
  79                        duplicates   => 'no_check',
 
  86   my ($self, %params) = @_;
 
  88   while (my ($key, $value) = each %params) {
 
  89     my $setting = $self->_get_setting($key);
 
  92       $setting = SL::DB::CsvImportProfileSetting->new(key => $key);
 
  93       $self->settings(@{ $self->settings || [] }, $setting);
 
  96     $setting->value($value);
 
 103   my ($self, $key, $default) = @_;
 
 105   my $setting = $self->_get_setting($key);
 
 106   return $setting ? $setting->value : $default;
 
 110   my ($self, %params) = @_;
 
 112   while (my ($key, $value) = each %params) {
 
 113     $self->settings(@{ $self->settings || [] }, { key => $key, value => $value }) if !$self->_get_setting($key);
 
 119 sub clone_and_reset_deep {
 
 122   my $clone = $self->clone_and_reset;
 
 123   $clone->settings(map { $_->clone_and_reset } $self->settings);
 
 141 sub _before_save_unset_default_on_others {
 
 144   if ($self->is_default) {
 
 145     SL::DB::Manager::CsvImportProfile->update_all(set   => { is_default => 0 },
 
 146                                                   where => [ type       => $self->type,
 
 147                                                              '!id'      => $self->id ]);
 
 158   my ($self, $key) = @_;
 
 159   return first { $_->key eq $key } @{ $self->settings || [] };