Pflichtenhefte bearbeiten
[kivitendo-erp.git] / SL / DB / RequirementSpec.pm
1 package SL::DB::RequirementSpec;
2
3 use strict;
4
5 use Carp;
6
7 use SL::DB::MetaSetup::RequirementSpec;
8 use SL::DB::Manager::RequirementSpec;
9 use SL::Locale::String;
10
11 __PACKAGE__->meta->add_relationship(
12   items          => {
13     type         => 'one to many',
14     class        => 'SL::DB::RequirementSpecItem',
15     column_map   => { id => 'requirement_spec_id' },
16   },
17   text_blocks    => {
18     type         => 'one to many',
19     class        => 'SL::DB::RequirementSpecTextBlock',
20     column_map   => { id => 'requirement_spec_id' },
21   },
22 );
23
24 __PACKAGE__->meta->initialize;
25
26 __PACKAGE__->before_save('_before_save_initialize_not_null_columns');
27
28 sub validate {
29   my ($self) = @_;
30
31   my @errors;
32   push @errors, t8('The title is missing.') if !$self->title;
33
34   return @errors;
35 }
36
37 sub _before_save_initialize_not_null_columns {
38   my ($self) = @_;
39
40   $self->previous_section_number(0) if !defined $self->previous_section_number;
41   $self->previous_fb_number(0)      if !defined $self->previous_fb_number;
42
43   return 1;
44 }
45
46 sub text_blocks_for_position {
47   my ($self, $output_position) = @_;
48
49   return [ sort { $a->position <=> $b->position } grep { $_->output_position == $output_position } @{ $self->text_blocks } ];
50 }
51
52 sub sections {
53   my ($self, @rest) = @_;
54
55   croak "This sub is not a writer" if @rest;
56
57   return [ sort { $a->position <=> $b->position } grep { !$_->parent_id } @{ $self->items } ];
58 }
59
60 sub displayable_name {
61   my ($self) = @_;
62
63   return sprintf('%s: "%s"', $self->type->description, $self->title);
64 }
65
66 1;