X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/baac72df4777f1d63da63867e893c302b5c0bf5a..1f592a0f4f88893b5c2cb29b2d10e2d07b444ac0:/SL/DB/RequirementSpecItem.pm diff --git a/SL/DB/RequirementSpecItem.pm b/SL/DB/RequirementSpecItem.pm index 19f36a90e..072b59b09 100644 --- a/SL/DB/RequirementSpecItem.pm +++ b/SL/DB/RequirementSpecItem.pm @@ -4,5 +4,52 @@ use strict; use SL::DB::MetaSetup::RequirementSpecItem; use SL::DB::Manager::RequirementSpecItem; +use SL::DB::Helper::ActsAsList; + +__PACKAGE__->meta->add_relationship( + children => { + type => 'one to many', + class => 'SL::DB::RequirementSpecItem', + column_map => { id => 'parent_id' }, + }, +); + +__PACKAGE__->meta->initialize; + +__PACKAGE__->configure_acts_as_list(group_by => [qw(requirement_spec_id parent_id)]); + +__PACKAGE__->before_delete(\&_before_delete_delete_children); + +sub _before_delete_delete_children { + my ($self) = @_; + + foreach my $child (@{ SL::DB::Manager::RequirementSpecItem->get_all(where => [ parent_id => $self->id ]) }) { + my $result = $child->delete; + return $result if !$result; + } + + 1; +} + +sub sorted_children { + my ($self) = @_; + + return [ sort { $a->position <=> $b->position } @{ $self->children } ]; +} + +sub get_section { + my ($self) = @_; + + $self = $self->parent while $self->parent_id; + + return $self; +} + +sub get_type { + my ($self) = @_; + + return 'section' if !$self->parent_id; + return $self->parent->parent_id ? 'sub-function-block' : 'function-block'; +} 1;