Merge branch 'test' of ../kivitendo-erp_20220811
[kivitendo-erp.git] / SL / DB / CustomVariableConfig.pm
index fd247d8..6ba2238 100644 (file)
@@ -5,10 +5,19 @@ 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;
 
+__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)]);
@@ -25,4 +34,94 @@ sub validate {
   return @errors;
 }
 
+use constant OPTION_DEFAULTS =>
+  {
+    MAXLENGTH => 75,
+    WIDTH     => 225,
+    HEIGHT    => 90,
+  };
+
+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',
+    htmlfield => 'text_value',
+    text      => 'text_value',
+    textfield => 'text_value',
+    select    => 'text_value'
+  }->{$type};
+}
+
 1;