Projekt

Allgemein

Profil

Herunterladen (3,18 KB) Statistiken
| Zweig: | Markierung: | Revision:
package SL::DB::Project;

use strict;

use List::MoreUtils qw(any);

use SL::DB::MetaSetup::Project;
use SL::DB::Manager::Project;

use SL::DB::Helper::CustomVariables(
module => 'Projects',
cvars_alias => 1,
);

__PACKAGE__->meta->initialize;

sub validate {
my ($self) = @_;

my @errors;
push @errors, $::locale->text('The project number is missing.') if !$self->projectnumber;
push @errors, $::locale->text('The project number is already in use.') if !$self->is_projectnumber_unique;
push @errors, $::locale->text('The description is missing.') if !$self->description;

return @errors;
}

sub is_used {
my ($self) = @_;

# Unsaved projects are never referenced.
return 0 unless $self->id;

return any {
my $column = $SL::DB::Manager::Project::project_id_column_prefixes{$_} . 'project_id';
$self->db->dbh->selectrow_arrayref(qq|SELECT EXISTS(SELECT * FROM ${_} WHERE ${column} = ?)|, undef, $self->id)->[0]
} @SL::DB::Manager::Project::tables_with_project_id_cols;
}

sub is_projectnumber_unique {
my ($self) = @_;

return 1 unless $self->projectnumber;

my @filter = (projectnumber => $self->projectnumber);
@filter = (and => [ @filter, '!id' => $self->id ]) if $self->id;

return !SL::DB::Manager::Project->get_first(where => \@filter);
}

sub full_description {
my ($self, %params) = @_;

$params{style} ||= 'both';
my $description;

if ($params{style} =~ m/number/) {
$description = $self->projectnumber;

} elsif ($params{style} =~ m/description/) {
$description = $self->description;

} else {
$description = $self->projectnumber;
if ($self->description && do { my $desc = quotemeta $self->description; $self->projectnumber !~ m/$desc/ }) {
$description .= ' (' . $self->description . ')';
}
}

return $description;
}

1;

__END__

=pod

=head1 NAME

SL::DB::Project: Model for the 'project' table

=head1 SYNOPSIS

This is a standard Rose::DB::Object based model and can be used as one.

=head1 FUNCTIONS

=over 4

=item C<validate>

Checks whether or not all fields are set to valid values so that the
object can be saved. If valid returns an empty list. Returns an array
of translated error message otherwise.

=item C<is_used>

Checks whether or not the project is referenced from any other
database table. Returns a boolean value.

=item C<is_projectnumber_unique>

Returns trueish if the project number is not used for any other
project in the database. Also returns trueish if no project number has
been set yet.

=item C<full_description %params>

Returns a full description for the project which can consist of the
project number, its description or both. This is determined by the
parameter C<style> which defaults to C<both>:

=over 2

=item C<both>

Returns the project's number followed by its description in
parenthesis (e.g. "12345 (Secret Combinations)"). If the project's
description is already part of the project's number then it will not
be appended.

=item C<projectnumber> (or simply C<number>)

Returns only the project's number.

=item C<projectdescription> (or simply C<description>)

Returns only the project's description.

=back

=back

=head1 AUTHOR

Moritz Bunkus E<lt>m.bunkus@linet-services.deE<gt>

=cut
(69-69/109)