1 package SL::DB::Project;
 
   5 use List::MoreUtils qw(any);
 
   7 use SL::DB::MetaSetup::Project;
 
   8 use SL::DB::Manager::Project;
 
  10 use SL::DB::Helper::CustomVariables(
 
  15 __PACKAGE__->meta->initialize;
 
  21   push @errors, $::locale->text('The project number is missing.')        if !$self->projectnumber;
 
  22   push @errors, $::locale->text('The project number is already in use.') if !$self->is_projectnumber_unique;
 
  23   push @errors, $::locale->text('The description is missing.')           if !$self->description;
 
  31   # Unsaved projects are never referenced.
 
  32   return 0 unless $self->id;
 
  35     my $column = $SL::DB::Manager::Project::project_id_column_prefixes{$_} . 'project_id';
 
  36     $self->db->dbh->selectrow_arrayref(qq|SELECT EXISTS(SELECT * FROM ${_} WHERE ${column} = ?)|, undef, $self->id)->[0]
 
  37   } @SL::DB::Manager::Project::tables_with_project_id_cols;
 
  40 sub is_projectnumber_unique {
 
  43   return 1 unless $self->projectnumber;
 
  45   my @filter = (projectnumber => $self->projectnumber);
 
  46   @filter    = (and => [ @filter, '!id' => $self->id ]) if $self->id;
 
  48   return !SL::DB::Manager::Project->get_first(where => \@filter);
 
  51 sub full_description {
 
  52   my ($self, %params) = @_;
 
  54   $params{style} ||= 'both';
 
  57   if ($params{style} =~ m/number/) {
 
  58     $description = $self->projectnumber;
 
  60   } elsif ($params{style} =~ m/description/) {
 
  61     $description = $self->description;
 
  64     $description = $self->projectnumber;
 
  65     if ($self->description && do { my $desc = quotemeta $self->description; $self->projectnumber !~ m/$desc/ }) {
 
  66       $description .= ' (' . $self->description . ')';
 
  81 SL::DB::Project: Model for the 'project' table
 
  85 This is a standard Rose::DB::Object based model and can be used as one.
 
  93 Checks whether or not all fields are set to valid values so that the
 
  94 object can be saved. If valid returns an empty list. Returns an array
 
  95 of translated error message otherwise.
 
  99 Checks whether or not the project is referenced from any other
 
 100 database table. Returns a boolean value.
 
 102 =item C<is_projectnumber_unique>
 
 104 Returns trueish if the project number is not used for any other
 
 105 project in the database. Also returns trueish if no project number has
 
 108 =item C<full_description %params>
 
 110 Returns a full description for the project which can consist of the
 
 111 project number, its description or both. This is determined by the
 
 112 parameter C<style> which defaults to C<both>:
 
 118 Returns the project's number followed by its description in
 
 119 parenthesis (e.g. "12345 (Secret Combinations)"). If the project's
 
 120 description is already part of the project's number then it will not
 
 123 =item C<projectnumber> (or simply C<number>)
 
 125 Returns only the project's number.
 
 127 =item C<projectdescription> (or simply C<description>)
 
 129 Returns only the project's description.
 
 137 Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>