]> wagnertech.de Git - kivitendo-erp.git/blobdiff - SL/Controller/RequirementSpec.pm
Pflichtenhefte: Funktion Abschnitte/Funktionsblöcke neu nummerieren
[kivitendo-erp.git] / SL / Controller / RequirementSpec.pm
index a29c7cb92bbf0f8b93cc01664ed017afdd60a5f3..d88ec8f29a873042f4108ac3d53a5a3d6f928a74 100644 (file)
@@ -29,7 +29,7 @@ use Rose::Object::MakeMethods::Generic
 (
   scalar                  => [ qw(requirement_spec_item visible_item visible_section) ],
   'scalar --get_set_init' => [ qw(requirement_spec customers types statuses complexities risks projects project_types project_statuses default_project_type default_project_status copy_source js
-                                  current_text_block_output_position models) ],
+                                  current_text_block_output_position models time_based_units) ],
 );
 
 __PACKAGE__->run_before('setup');
@@ -265,6 +265,33 @@ sub action_paste_template {
   $self->invalidate_version->render($self);
 }
 
+sub action_renumber_sections {
+  my ($self)  = @_;
+
+  my %numbers = map { ($_ => 1)                                                                         } qw(section function_block);
+  my %formats = map { my $method = "${_}_number_format"; ($_ => $self->requirement_spec->type->$method) } qw(section function_block);
+  my @items   = @{ $self->requirement_spec->sections_sorted };
+
+  $self->requirement_spec->db->with_transaction(sub {
+    while (@items) {
+      my $item = shift @items;
+      my $type = $item->parent_id ? 'function_block' : 'section';
+
+      $item->update_attributes(fb_number => SL::PrefixedNumber->new(number => $formats{$type} || 0)->set_to($numbers{$type}));
+
+      $numbers{$type}++;
+
+      unshift @items, @{ $item->children_sorted };
+    }
+
+    $self->requirement_spec->invalidate_version unless $self->requirement_spec->is_template;
+
+    1;
+  });
+
+  $self->redirect_to(action => 'show', id => $self->requirement_spec->id);
+}
+
 #
 # filters
 #
@@ -289,6 +316,7 @@ sub init_project_types          { SL::DB::Manager::ProjectType->get_all_sorted
 sub init_projects               { SL::DB::Manager::Project->get_all_sorted                    }
 sub init_risks                  { SL::DB::Manager::RequirementSpecRisk->get_all_sorted        }
 sub init_statuses               { SL::DB::Manager::RequirementSpecStatus->get_all_sorted      }
+sub init_time_based_units       { SL::DB::Manager::Unit->time_based_units                     }
 sub init_types                  { SL::DB::Manager::RequirementSpecType->get_all_sorted        }
 
 sub init_customers {