use List::Util qw(first);
-use SL::DB::MetaSetup::CsvImportProfile;
+require SL::DB::MetaSetup::CsvImportProfile;
+use Rose::DB::Object::Helpers qw(clone_and_reset);
__PACKAGE__->meta->add_relationship(
settings => {
# public functions
#
+sub new_with_default {
+ my ($class, $type) = @_;
+
+ return $class->new(type => $type)->set_defaults;
+}
+
+sub set_defaults {
+ my ($self) = @_;
+
+ $self->_set_defaults(sep_char => ',',
+ quote_char => '"',
+ escape_char => '"',
+ charset => 'CP850',
+ numberformat => $::myconfig{numberformat},
+ duplicates => 'no_check',
+ );
+
+ if ($self->type eq 'parts') {
+ my $bugru = SL::DB::Manager::Buchungsgruppe->find_by(description => { like => 'Standard%19%' });
+
+ $self->_set_defaults(sellprice_places => 2,
+ sellprice_adjustment => 0,
+ sellprice_adjustment_type => 'percent',
+ article_number_policy => 'update_prices',
+ shoparticle_if_missing => '0',
+ parts_type => 'part',
+ default_buchungsgruppe => ($bugru ? $bugru->id : undef),
+ apply_buchungsgruppe => 'all',
+ );
+ } elsif ($self->type eq 'orders') {
+ $self->_set_defaults(order_column => $::locale->text('Order'),
+ item_column => $::locale->text('OrderItem'),
+ max_amount_diff => 0.02,
+ );
+ } else {
+ $self->_set_defaults(table => 'customer');
+ }
+
+ return $self;
+}
+
sub set {
my ($self, %params) = @_;
if (!$setting) {
$setting = SL::DB::CsvImportProfileSetting->new(key => $key);
- $self->add_settings($setting);
+ $self->settings(@{ $self->settings || [] }, $setting);
}
$setting->value($value);
return $setting ? $setting->value : $default;
}
+sub _set_defaults {
+ my ($self, %params) = @_;
+
+ while (my ($key, $value) = each %params) {
+ $self->settings(@{ $self->settings || [] }, { key => $key, value => $value }) if !$self->_get_setting($key);
+ }
+
+ return $self;
+}
+
+sub clone_and_reset_deep {
+ my ($self) = @_;
+
+ my $clone = $self->clone_and_reset;
+ $clone->settings(map { $_->clone_and_reset } $self->settings);
+ $clone->name('');
+
+ return $clone;
+}
+
+sub flatten {
+ my ($self) = @_;
+
+ return map {
+ $_->key => $_->value
+ } $self->settings;
+}
+
#
# hooks
#
sub _get_setting {
my ($self, $key) = @_;
- return first { $_->key eq $key } @{ $self->settings };
+ return first { $_->key eq $key } @{ $self->settings || [] };
}
1;