use SL::DB::RequirementSpecStatus;
use SL::DB::RequirementSpecType;
use SL::DB::RequirementSpec;
+use SL::Helper::CreatePDF qw();
use SL::Helper::Flash;
use SL::Locale::String;
use SL::Template::LaTeX;
(
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 html_template) ],
);
__PACKAGE__->run_before('setup');
my $version = $versioned_copy->versions->[0];
$version->update_attributes(working_copy_id => $self->requirement_spec->id);
- flash_later('info', t8('The requirement spec has been reverted to version #1.', $self->requirement_spec->version->version_number));
+ flash_later('info', t8('The requirement spec has been reverted to version #1.', $versioned_copy->version->version_number));
$self->js->redirect_to($self->url_for(action => 'show', id => $self->requirement_spec->id))->render($self);
}
unlink $result{file_name};
}
+sub action_create_html {
+ my ($self, %params) = @_;
+
+ my $base_name = $self->requirement_spec->type->template_file_name || 'requirement_spec';
+ my @pictures = $self->prepare_pictures_for_printing;
+ my $content = SL::Helper::CreatePDF->create_parsed_file(
+ template => "${base_name}.html",
+ format => 'html',
+ template_type => 'HTML',
+ variables => {
+ SELF => $self,
+ rspec => $self->requirement_spec,
+ });
+
+ # $content is now a scalar of bytes, but $self->render() expects a
+ # scalar of characters.
+ $content = Encode::decode('utf-8', $content);
+
+ $self->render(\$content, { layout => 0, process => 0 });
+}
+
sub action_select_template_to_paste {
my ($self) = @_;
$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
#
$::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;
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 {
);
}
+sub init_html_template {
+ my ($self) = @_;
+ my $base_name = $self->requirement_spec->type->template_file_name || 'requirement_spec';
+ my $template = SL::Helper::CreatePDF->find_template(name => $base_name, extension => 'html');
+ return !!$template;
+}
+
1;