cvars_alias => 1,
);
+__PACKAGE__->meta->add_relationship(
+ employee_invoice_permissions => {
+ type => 'many to many',
+ map_class => 'SL::DB::EmployeeProjectInvoices',
+ },
+);
+
__PACKAGE__->meta->initialize;
sub validate {
return !SL::DB::Manager::Project->get_first(where => \@filter);
}
+sub displayable_name {
+ my ($self) = @_;
+
+ return join ' ', grep $_, $self->projectnumber, $self->description;
+}
+
+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;
+
+ } elsif (($params{style} =~ m/full/) && $self->customer) {
+ $description = $self->projectnumber;
+ if ($self->description && do { my $desc = quotemeta $self->description; $self->projectnumber !~ m/$desc/ }) {
+ $description .= ' ' . $self->description;
+ }
+
+ $description = $self->customer->name . " (${description})";
+
+ } else {
+ $description = $self->projectnumber;
+ if ($self->description && do { my $desc = quotemeta $self->description; $self->projectnumber !~ m/$desc/ }) {
+ $description .= ' (' . $self->description . ')';
+ }
+ }
+
+ return $description;
+}
+
+sub may_employee_view_project_invoices {
+ my ($self, $employee) = @_;
+
+ return undef if !$self->id;
+
+ my $employee_id = ref($employee) ? $employee->id : $employee * 1;
+ my $query = <<EOSQL;
+ SELECT project_id
+ FROM employee_project_invoices
+ WHERE (employee_id = ?)
+ AND (project_id = ?)
+ LIMIT 1
+EOSQL
+
+ return !!$self->db->dbh->selectrow_arrayref($query, undef, $employee_id, $self->id)->[0];
+}
+
1;
__END__
project in the database. Also returns trueish if no project number has
been set yet.
+=item C<displayable_name>
+
+Returns a human-readable description of the project, consisting of projectnumber
+and description.
+
+=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.
+
+=item C<full>
+
+Returns the customer name followed by the project number and project
+description in parenthesis (e.g. "Evil Corp (12345 World
+domination)"). If the project's description is already part of the
+project's number then it will not be appended.
+
+If this project isn't linked to a customer then the style C<both> is
+used instead.
+
+=back
+
=back
=head1 AUTHOR