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 || [] };