use SL::Helper::Csv;
use SL::DB::Buchungsgruppe;
+use SL::DB::CustomVariable;
+use SL::DB::CustomVariableConfig;
use SL::DB::PartsGroup;
use SL::DB::PaymentTerm;
use SL::DB::PriceFactor;
+use SL::DB::Translation;
use SL::DB::Unit;
use parent qw(SL::Controller::CsvImport::Base);
use Rose::Object::MakeMethods::Generic
(
scalar => [ qw(table) ],
- 'scalar --get_set_init' => [ qw(bg_by settings parts_by price_factors_by units_by payment_terms_by packing_types_by partsgroups_by) ],
+ 'scalar --get_set_init' => [ qw(bg_by settings parts_by price_factors_by units_by packing_types_by partsgroups_by
+ translation_columns) ],
);
sub init_class {
return { map { my $col = $_; ( $col => { map { ( $_->$col => $_ ) } @{ $all_price_factors } } ) } qw(id description) };
}
-sub init_payment_terms_by {
- my ($self) = @_;
-
- my $all_payment_terms = SL::DB::Manager::PaymentTerm->get_all;
- return { map { my $col = $_; ( $col => { map { ( $_->$col => $_ ) } @{ $all_payment_terms } } ) } qw(id description) };
-}
-
sub init_packing_types_by {
my ($self) = @_;
shoparticle_if_missing parts_type) };
}
+sub init_all_cvar_configs {
+ my ($self) = @_;
+
+ return SL::DB::Manager::CustomVariableConfig->get_all(where => [ module => 'IC' ]);
+}
+
+sub init_translation_columns {
+ my ($self) = @_;
+
+ return [ map { ("description_" . $_->article_code, "notes_" . $_->article_code) } (@{ $self->all_languages }) ];
+}
+
sub check_objects {
my ($self) = @_;
return unless @{ $self->controller->data };
foreach my $entry (@{ $self->controller->data }) {
- my $object = $entry->{object};
- my $raw_data = $entry->{raw_data};
-
next unless $self->check_buchungsgruppe($entry);
next unless $self->check_type($entry);
next unless $self->check_unit($entry);
$self->check_existing($entry);
$self->handle_prices($entry) if $self->settings->{sellprice_adjustment};
$self->handle_shoparticle($entry);
+ $self->handle_translations($entry);
+ $self->handle_cvars($entry);
$self->set_various_fields($entry);
}
$self->add_columns(qw(buchungsgruppen_id unit));
$self->add_columns(map { "${_}_id" } grep { exists $self->controller->data->[0]->{raw_data}->{$_} } qw (price_factor payment packing_type partsgroup));
$self->add_columns(qw(shop)) if $self->settings->{shoparticle_if_missing};
+ $self->add_cvar_raw_data_columns;
+ map { $self->add_raw_data_columns($_) if exists $self->controller->data->[0]->{raw_data}->{$_} } @{ $self->translation_columns };
}
sub check_duplicates {
my $object = $entry->{object};
- my $entry->{part} = $self->parts_by->{partnumber}->{ $object->type }->{ $object->partnumber };
+ $entry->{part} = $self->parts_by->{partnumber}->{ $object->type }->{ $object->partnumber };
if ($self->settings->{article_number_policy} eq 'update_prices') {
if ($entry->{part}) {
map { $object->$_( $entry->{part}->$_ ) } qw(sellprice listprice lastcost);
- $entry->{priceupdate} = 1;
+ push @{ $entry->{information} }, $::locale->text('Updating prices of existing entry in database');
+ $entry->{object_to_save} = $entry->{part};
}
} else {
return 1;
}
-sub check_payment {
- my ($self, $entry) = @_;
-
- my $object = $entry->{object};
-
- # Check whether or not payment ID is valid.
- if ($object->payment_id && !$self->payment_terms_by->{id}->{ $object->payment_id }) {
- push @{ $entry->{errors} }, $::locale->text('Error: Invalid payment terms');
- return 0;
- }
-
- # Map name to ID if given.
- if (!$object->payment_id && $entry->{raw_data}->{payment}) {
- my $terms = $self->payment_terms_by->{description}->{ $entry->{raw_data}->{payment} };
-
- if (!$terms) {
- push @{ $entry->{errors} }, $::locale->text('Error: Invalid payment terms');
- return 0;
- }
-
- $object->payment_id($terms->id);
- }
-
- return 1;
-}
-
sub check_packing_type {
my ($self, $entry) = @_;
return 1;
}
+sub handle_translations {
+ my ($self, $entry) = @_;
+
+ my @translations;
+ foreach my $language (@{ $self->all_languages }) {
+ my ($desc, $notes) = @{ $entry->{raw_data} }{ "description_" . $language->article_code, "notes_" . $language->article_code };
+ next unless $desc || $notes;
+
+ push @translations, SL::DB::Translation->new(language_id => $language->id,
+ translation => $desc,
+ longdescription => $notes);
+ }
+
+ $entry->{object}->translations(\@translations);
+}
+
sub set_various_fields {
my ($self, $entry) = @_;
my ($self) = @_;
my $profile = $self->SUPER::init_profile;
- delete @{$profile}{qw(type priceupdate)};
+ delete @{$profile}{qw(alternate assembly bom expense_accno_id income_accno_id inventory_accno_id makemodel priceupdate stockable type)};
return $profile;
}
$self->SUPER::save_objects(data => $without_number);
}
+sub setup_displayable_columns {
+ my ($self) = @_;
+
+ $self->SUPER::setup_displayable_columns;
+ $self->add_cvar_columns_to_displayable_columns;
+
+ $self->add_displayable_columns({ name => 'bin', description => $::locale->text('Bin') },
+ { name => 'binding_max_qty', description => $::locale->text('Binding Max Qty') },
+ { name => 'buchungsgruppen_id', description => $::locale->text('Buchungsgruppe (database ID)') },
+ { name => 'buchungsgruppe', description => $::locale->text('Buchungsgruppe (name)') },
+ { name => 'description', description => $::locale->text('Description') },
+ { name => 'drawing', description => $::locale->text('Drawing') },
+ { name => 'ean', description => $::locale->text('EAN') },
+ { name => 'formel', description => $::locale->text('Formula') },
+ { name => 'gv', description => $::locale->text('Business Volume') },
+ { name => 'has_sernumber', description => $::locale->text('Has serial number') },
+ { name => 'image', description => $::locale->text('Image') },
+ { name => 'lastcost', description => $::locale->text('Last Cost') },
+ { name => 'listprice', description => $::locale->text('List Price') },
+ { name => 'microfiche', description => $::locale->text('Microfiche') },
+ { name => 'min_sellprice', description => $::locale->text('Minimum Sell Price') },
+ { name => 'not_discountable', description => $::locale->text('Not Discountable') },
+ { name => 'notes', description => $::locale->text('Notes') },
+ { name => 'obsolete', description => $::locale->text('Obsolete') },
+ { name => 'onhand', description => $::locale->text('On Hand') },
+ { name => 'packing_type_id', description => $::locale->text('Packing type (database ID)') },
+ { name => 'packing_type', description => $::locale->text('Packing type (name)') },
+ { name => 'partnumber', description => $::locale->text('Part Number') },
+ { name => 'partsgroup_id', description => $::locale->text('Partsgroup (database ID)') },
+ { name => 'partsgroup', description => $::locale->text('Partsgroup (name)') },
+ { name => 'payment_id', description => $::locale->text('Payment terms (database ID)') },
+ { name => 'payment', description => $::locale->text('Payment terms (name)') },
+ { name => 'price_factor_id', description => $::locale->text('Price factor (database ID)') },
+ { name => 'price_factor', description => $::locale->text('Price factor (name)') },
+ { name => 'rop', description => $::locale->text('ROP') },
+ { name => 'sellprice', description => $::locale->text('Sellprice') },
+ { name => 'shop', description => $::locale->text('Shopartikel') },
+ { name => 'unit', description => $::locale->text('Unit') },
+ { name => 've', description => $::locale->text('Verrechnungseinheit') },
+ { name => 'weight', description => $::locale->text('Weight') },
+ );
+
+ foreach my $language (@{ $self->all_languages }) {
+ $self->add_displayable_columns({ name => 'description_' . $language->article_code,
+ description => $::locale->text('Description (translation for #1)', $language->description) },
+ { name => 'notes_' . $language->article_code,
+ description => $::locale->text('Notes (translation for #1)', $language->description) });
+ }
+}
+
# TODO:
-# CVARs ins Profil rein
+# Preisgruppen
+# Preisaktualisierung
1;