+sub update_project_link_none_keep_existing {
+ my ($self, $action) = @_;
+
+ $self->requirement_spec->update_attributes(project_id => undef) if $action eq 'none';
+ $self->requirement_spec->update_attributes(project_id => $::form->{new_project_id}) if $action eq 'existing';
+
+ return $self->invalidate_version
+ ->replaceWith('#basic_settings', $self->render('requirement_spec/_show_basic_settings', { output => 0 }))
+ ->remove('#project_link_form')
+ ->flash('info', t8('The project link has been updated.'))
+ ->render;
+}
+
+sub update_project_link_new {
+ my ($self) = @_;
+
+ return $self->js
+ ->replaceWith('#project_link_form', $self->render('requirement_spec/_new_project_form', { output => 0 }))
+ ->render;
+}
+
+sub update_project_link_create {
+ my ($self) = @_;
+ my $params = delete($::form->{project}) || {};
+ my $project = SL::DB::Project->new(
+ %{ $params },
+ valid => 1,
+ active => 1,
+ );
+
+ my @errors = $project->validate;
+
+ return $self->js->error(@errors)->render if @errors;
+
+ my $db = $self->requirement_spec->db;
+ if (!$db->with_transaction(sub {
+ $project->save;
+ $self->requirement_spec->update_attributes(project_id => $project->id);
+
+ })) {
+ $::lxdebug->message(LXDebug::WARN(), "Error: " . $db->error);
+ return $self->js->error(t8('Saving failed. Error message from the database: #1', $db->error))->render;
+ }
+
+ return $self->invalidate_version
+ ->replaceWith('#basic_settings', $self->render('requirement_spec/_show_basic_settings', { output => 0 }))
+ ->remove('#project_link_form')
+ ->flash('info', t8('The project has been created.'))
+ ->flash('info', t8('The project link has been updated.'))
+ ->render;
+}
+
+sub init_models {
+ my ($self) = @_;
+
+ SL::Controller::Helper::GetModels->new(
+ controller => $self,
+ sorted => {
+ _default => {
+ by => 'customer',
+ dir => 1,
+ },
+ %sort_columns,
+ },
+ query => [
+ and => [
+ working_copy_id => undef,
+ is_template => $::form->{is_template} ? 1 : 0,
+ ],
+ ],
+ with_objects => [ 'customer', 'type', 'status', 'project' ],
+ );
+}
+
+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;
+}
+
+sub _setup_form_action_bar {
+ my ($self) = @_;
+
+ for my $bar ($::request->layout->get('actionbar')) {
+ $bar->add(
+ action => [
+ t8('Save'),
+ submit => [ '#basic_settings_form', { action => 'RequirementSpec/' . ($self->requirement_spec->id ? 'update' : 'create') } ],
+ accesskey => 'enter',
+ ],
+
+ link => [
+ t8('Abort'),
+ link => $self->url_for(action => 'list', is_template => $self->requirement_spec->is_template),
+ ],
+ );
+ }
+}
+
+sub _setup_search_action_bar {
+ my ($self, %params) = @_;
+
+ for my $bar ($::request->layout->get('actionbar')) {
+ $bar->add(
+ action => [
+ t8('Update'),
+ submit => [ '#search_form', { action => 'RequirementSpec/list' } ],
+ accesskey => 'enter',
+ ],
+ link => [
+ t8('Add'),
+ link => $self->url_for(action => 'new', is_template => $::form->{is_template}),
+ ],
+ );
+ }
+}
+