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) = @_;
} 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/ }) {
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
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