X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FDB%2FCustomVariableConfig.pm;h=f8bf7a168564088e20f830087fd9aa98f6a44331;hb=1deb1fbe7e1c00bb64df6e8d47023c1e429af8f6;hp=5823e9b7c48e4eb7f8690247d9855c2d628a8677;hpb=117fefacdfaf457a502b32bae2f0e10fd0e11414;p=kivitendo-erp.git diff --git a/SL/DB/CustomVariableConfig.pm b/SL/DB/CustomVariableConfig.pm index 5823e9b7c..f8bf7a168 100644 --- a/SL/DB/CustomVariableConfig.pm +++ b/SL/DB/CustomVariableConfig.pm @@ -5,10 +5,122 @@ package SL::DB::CustomVariableConfig; use strict; +use List::MoreUtils qw(any); + use SL::DB::MetaSetup::CustomVariableConfig; +use SL::DB::Manager::CustomVariableConfig; use SL::DB::Helper::ActsAsList; -# Creates get_all, get_all_count, get_all_iterator, delete_all and update_all. -__PACKAGE__->meta->make_manager_class; +__PACKAGE__->meta->add_relationship( + partsgroups => { + type => 'many to many', + map_class => 'SL::DB::CustomVariableConfigPartsgroup', + }, +); + +__PACKAGE__->meta->initialize; + +__PACKAGE__->configure_acts_as_list(group_by => [qw(module)]); + +sub validate { + my ($self) = @_; + + my @errors; + push @errors, $::locale->text('The name is missing.') if !$self->name; + push @errors, $::locale->text('The description is missing.') if !$self->description; + push @errors, $::locale->text('The type is missing.') if !$self->type; + push @errors, $::locale->text('The option field is empty.') if (($self->type || '') eq 'select') && !$self->options; + + return @errors; +} + +use constant OPTION_DEFAULTS => + { + MAXLENGTH => 75, + WIDTH => 30, + HEIGHT => 5, + }; + +sub processed_options { + my ($self) = @_; + + if( exists($self->{processed_options_cache}) ) { + return $self->{processed_options_cache}; + } + + my $ops = $self->options; + my $ret; + + if ( $self->type eq 'select' ) { + my @op_array = split('##', $ops); + $ret = \@op_array; + } + else { + $ret = {%{$self->OPTION_DEFAULTS}}; + while ( $ops =~ /\s*([^=\s]+)\s*=\s*([^\s]*)(?:\s*|$)/g ) { + $ret->{$1} = $2; + } + } + + $self->{processed_options_cache} = $ret; + + return $ret; +} + +sub processed_flags { + my ($self) = @_; + + if( exists($self->{processed_flags_cache}) ) { + return $self->{processed_flags_cache}; + } + + my $flags = $self->flags; + my $ret = {}; + + foreach my $flag (split m/:/, $flags) { + if ( $flag =~ m/(.*?)=(.*)/ ) { + $ret->{$1} = $2; + } else { + $ret->{$flag} = 1; + } + } + + $self->{processed_flags_cache} = $ret; + + return $ret; +} + +sub has_flag { + my ($self, $flag) = @_; + + return $self->processed_flags()->{$flag}; +} + +sub type_dependent_default_value { + my ($self) = @_; + + return $self->default_value if $self->type ne 'select'; + return (any { $_ eq $self->default_value } @{ $self->processed_options }) ? $self->default_value : $self->processed_options->[0]; +} + +sub value_col { + my ($self) = @_; + + my $type = $self->type; + + return { + bool => 'bool_value', + timestamp => 'timestamp_value', + date => 'timestamp_value', + number => 'number_value', + integer => 'number_value', + customer => 'number_value', + vendor => 'number_value', + part => 'number_value', + text => 'text_value', + textfield => 'text_value', + select => 'text_value' + }->{$type}; +} 1;