X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FRequirementSpec.pm;h=6694ce38dc45aba8f2af1420a5994be2f8a5b3b8;hb=de7609414010f5dfa6c47091633a6319d0106c48;hp=72d5859f0f90cc592342ed69cbe17f48a72d5619;hpb=0ba48077d82fbbedc9db571bf9b2c6281affa94c;p=kivitendo-erp.git diff --git a/SL/Controller/RequirementSpec.pm b/SL/Controller/RequirementSpec.pm index 72d5859f0..6694ce38d 100644 --- a/SL/Controller/RequirementSpec.pm +++ b/SL/Controller/RequirementSpec.pm @@ -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'); @@ -63,7 +63,7 @@ sub action_new { $self->requirement_spec(SL::DB::RequirementSpec->new(is_template => $::form->{is_template})); if ($self->copy_source) { - $self->requirement_spec->$_($self->copy_source->$_) for qw(type_id status_id customer_id title hourly_rate) + $self->requirement_spec->$_($self->copy_source->$_) for qw(type_id status_id customer_id title hourly_rate is_template) } $self->render('requirement_spec/new', title => $self->requirement_spec->is_template ? t8('Create a new requirement spec template') : t8('Create a new requirement spec')); @@ -234,7 +234,10 @@ sub action_create_pdf { sub action_select_template_to_paste { my ($self) = @_; - my @templates = grep { @{ $_->sections } || @{ $_->text_blocks } } @{ SL::DB::Manager::RequirementSpec->get_all(where => [ is_template => 1 ], sort_by => 'lower(title)') }; + my @templates = @{ SL::DB::Manager::RequirementSpec->get_all( + where => [ is_template => 1, SL::DB::Manager::RequirementSpec->not_empty_filter ], + sort_by => 'lower(requirement_specs.title)', + ) }; $self->render('requirement_spec/select_template_to_paste', { layout => 0 }, TEMPLATES => \@templates); } @@ -253,9 +256,42 @@ sub action_paste_template { $self->render_first_pasted_section_as_list($result{sections}->[0]); } + my $parts_list = $self->render('requirement_spec_part/show', { output => 0 }); + $self->js + ->replaceWith('#additional_parts_list_container', $parts_list) + ->show( '#additional_parts_list_container') + ->remove( '#additional_parts_form_container'); + $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 # @@ -265,7 +301,7 @@ sub setup { $::auth->assert('requirement_spec_edit'); $::request->{layout}->use_stylesheet("${_}.css") for qw(jquery.contextMenu requirement_spec); - $::request->{layout}->use_javascript("${_}.js") for qw(jquery.jstree jquery/jquery.contextMenu jquery/jquery.hotkeys requirement_spec ckeditor/ckeditor ckeditor/adapters/jquery); + $::request->{layout}->use_javascript("${_}.js") for qw(jquery.jstree jquery/jquery.contextMenu jquery/jquery.hotkeys requirement_spec ckeditor/ckeditor ckeditor/adapters/jquery autocomplete_part); $self->init_visible_section; return 1; @@ -280,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 { @@ -450,7 +487,7 @@ sub render_pasted_text_block { sub set_default_filter_args { my ($self) = @_; - if (!$::form->{filter}) { + if (!$::form->{filter} && !$::form->{is_template}) { $::form->{filter} = { status_id => [ map { $_->{id} } grep { $_->name ne 'done' } @{ $self->statuses } ], };