kivitendo/SL/DB/CsvImportProfile.pm @ 79b7fc43
c2cf302a | Moritz Bunkus | package SL::DB::CsvImportProfile;
|
||
use strict;
|
||||
use List::Util qw(first);
|
||||
f64be46d | Sven Schöling | require SL::DB::MetaSetup::CsvImportProfile;
|
||
67643d03 | Sven Schöling | use Rose::DB::Object::Helpers qw(clone_and_reset);
|
||
c2cf302a | Moritz Bunkus | |||
__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
|
||||
#
|
||||
7f1f5efe | Moritz Bunkus | 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},
|
||||
1abd7845 | Moritz Bunkus | duplicates => 'no_check',
|
||
7f1f5efe | Moritz Bunkus | );
|
||
if ($self->type eq 'parts') {
|
||||
1abd7845 | Moritz Bunkus | my $bugru = SL::DB::Manager::Buchungsgruppe->find_by(description => { like => 'Standard%19%' });
|
||
7f1f5efe | Moritz Bunkus | |||
$self->_set_defaults(sellprice_places => 2,
|
||||
sellprice_adjustment => 0,
|
||||
sellprice_adjustment_type => 'percent',
|
||||
1abd7845 | Moritz Bunkus | article_number_policy => 'update_prices',
|
||
shoparticle_if_missing => '0',
|
||||
7f1f5efe | Moritz Bunkus | parts_type => 'part',
|
||
023fab8d | Moritz Bunkus | default_buchungsgruppe => ($bugru ? $bugru->id : undef),
|
||
1abd7845 | Moritz Bunkus | apply_buchungsgruppe => 'all',
|
||
7f1f5efe | Moritz Bunkus | );
|
||
48da0312 | Bernd Bleßmann | } elsif ($self->type eq 'orders') {
|
||
342c0c28 | Bernd Bleßmann | $self->_set_defaults(order_column => $::locale->text('Order'),
|
||
item_column => $::locale->text('OrderItem'),
|
||||
48da0312 | Bernd Bleßmann | max_amount_diff => 0.02,
|
||
);
|
||||
7f1f5efe | Moritz Bunkus | } else {
|
||
$self->_set_defaults(table => 'customer');
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
c2cf302a | Moritz Bunkus | 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);
|
||||
7f1f5efe | Moritz Bunkus | $self->settings(@{ $self->settings || [] }, $setting);
|
||
c2cf302a | Moritz Bunkus | }
|
||
$setting->value($value);
|
||||
}
|
||||
return $self;
|
||||
}
|
||||
sub get {
|
||||
my ($self, $key, $default) = @_;
|
||||
my $setting = $self->_get_setting($key);
|
||||
return $setting ? $setting->value : $default;
|
||||
}
|
||||
7f1f5efe | Moritz Bunkus | 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;
|
||||
}
|
||||
67643d03 | Sven Schöling | 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;
|
||||
}
|
||||
82c3b7eb | Sven Schöling | sub flatten {
|
||
my ($self) = @_;
|
||||
return map {
|
||||
$_->key => $_->value
|
||||
} $self->settings;
|
||||
}
|
||||
c2cf302a | Moritz Bunkus | #
|
||
# 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) = @_;
|
||||
7f1f5efe | Moritz Bunkus | return first { $_->key eq $key } @{ $self->settings || [] };
|
||
c2cf302a | Moritz Bunkus | }
|
||
1;
|