Auftrags-Controller: Funktion "Speichern und Lieferschein".
[kivitendo-erp.git] / SL / Controller / RequirementSpecItem.pm
index d6b343f..c6026ce 100644 (file)
@@ -14,6 +14,7 @@ use SL::Controller::Helper::RequirementSpec;
 use SL::DB::RequirementSpec;
 use SL::DB::RequirementSpecComplexity;
 use SL::DB::RequirementSpecItem;
+use SL::DB::RequirementSpecPredefinedText;
 use SL::DB::RequirementSpecRisk;
 use SL::Helper::Flash;
 use SL::JSON;
@@ -22,7 +23,7 @@ use SL::Locale::String;
 use Rose::Object::MakeMethods::Generic
 (
   scalar                  => [ qw(item visible_item visible_section clicked_item sections) ],
-  'scalar --get_set_init' => [ qw(complexities risks js) ],
+  'scalar --get_set_init' => [ qw(complexities risks predefined_texts) ],
 );
 
 __PACKAGE__->run_before('check_auth');
@@ -38,7 +39,7 @@ sub action_ajax_list {
 
   if (!$::form->{clicked_id}) {
     # Clicked on "sections" in the tree. Do nothing.
-    return $self->render($self->js);
+    return $self->render;
   }
 
   my $clicked_item = SL::DB::RequirementSpecItem->new(id => $::form->{clicked_id})->load;
@@ -97,7 +98,7 @@ sub action_dragged_and_dropped {
   my $new_section         = $self->item->section;
   my $new_visible_section = SL::DB::RequirementSpecItem->new(id => $self->visible_item->id)->load->section;
 
-  return $self->invalidate_version->render($self) if !$old_visible_section || ($new_type eq 'section');
+  return $self->invalidate_version->render if !$old_visible_section || ($new_type eq 'section');
 
   # From here on $old_visible_section is definitely set.
 
@@ -155,6 +156,7 @@ sub action_ajax_add_section {
     ->hide('#column-content > *')
     ->appendTo($html, '#column-content')
     ->focus('#new_section_title')
+    ->reinit_widgets
     ->render($self);
 }
 
@@ -241,9 +243,10 @@ sub action_ajax_edit {
       ->remove("#edit_section_form")
       ->insertAfter($html, '#section-header-' . $self->item->id)
       ->jstree->select_node('#tree', '#fb-' . $self->item->id)
-      ->focus("#edit_section_title")
       ->val('#current_content_type', 'section')
       ->val('#current_content_id',   $self->item->id)
+      ->reinit_widgets
+      ->focus("#edit_section_title")
       ->render($self);
     return;
   }
@@ -262,9 +265,10 @@ sub action_ajax_edit {
     ->insertAfter($html, $content_top_id)
     ->run('kivi.requirement_spec.init_function_block_keypress_events', "${id_base}_form")
     ->jstree->select_node('#tree', '#fb-' . $self->item->id)
-    ->focus("#${id_base}_description")
     ->val('#current_content_type', $self->item->item_type)
     ->val('#current_content_id', $self->item->id)
+    ->reinit_widgets
+    ->focus("#${id_base}_description")
     ->render($self);
 }
 
@@ -295,7 +299,9 @@ sub action_ajax_update {
       ->html('#section-header-' . $self->item->id, $html)
       ->show('#section-header-' . $self->item->id)
       ->jstree->rename_node('#tree', '#fb-' . $self->item->id, $::request->presenter->requirement_spec_item_tree_node_title($self->item))
-      ->prop('#fb-' . $self->item->id, 'title', $self->item->content_excerpt)
+      ->prop('#fb-' . $self->item->id . ' a', 'title', $self->item->content_excerpt)
+      ->addClass('#fb-' . $self->item->id . ' a', 'tooltip')
+      ->reinit_widgets
       ->render($self);
   }
 
@@ -310,7 +316,9 @@ sub action_ajax_update {
   $self->js
     ->remove('#' . $prefix . '_form')
     ->replaceWith('#' . $id_prefix . 'top-' . $self->item->id, $html_top)
-    ->prop('#fb-' . $self->item->id, 'title', $self->item->content_excerpt)
+    ->prop('#fb-' . $self->item->id . ' a', 'title', $self->item->content_excerpt)
+    ->addClass('#fb-' . $self->item->id . ' a', 'tooltip')
+    ->reinit_widgets
     ->jstree->rename_node('#tree', '#fb-' . $self->item->id, $::request->presenter->requirement_spec_item_tree_node_title($self->item));
 
   $self->replace_bottom($self->item, id_prefix => $id_prefix);
@@ -489,7 +497,7 @@ sub action_ajax_paste {
 
 sub check_auth {
   my ($self) = @_;
-  $::auth->assert('sales_quotation_edit');
+  $::auth->assert('requirement_spec_edit');
 }
 
 sub load_requirement_spec_item {
@@ -521,9 +529,8 @@ sub init_risks {
   return SL::DB::Manager::RequirementSpecRisk->get_all_sorted;
 }
 
-sub init_js {
-  my ($self) = @_;
-  $self->js(SL::ClientJS->new);
+sub init_predefined_texts {
+  return SL::DB::Manager::RequirementSpecPredefinedText->get_all_sorted(where => [ useable_for_sections => 1 ]);
 }
 
 sub replace_bottom {
@@ -555,7 +562,7 @@ sub select_node {
 
 sub create_dependency_item {
   my $self = shift;
-  [ $_[0]->id, $self->presenter->truncate(join(' ', grep { $_ } ($_[1], $_[0]->fb_number, $_[0]->description))) ];
+  [ $_[0]->id, $self->presenter->truncate(join(' ', grep { $_ } ($_[1], $_[0]->fb_number, $_[0]->description_as_stripped_html))) ];
 }
 
 sub create_dependencies {
@@ -607,6 +614,7 @@ sub add_new_item_form {
     ->action($params{insert_position}, $html, $params{display_reference})
     ->action_if($self->item->item_type eq 'sub-function-block', 'show', '#sub-function-block-container-' . $self->item->parent_id)
     ->run('kivi.requirement_spec.init_function_block_keypress_events', "${id_base}_form")
+    ->reinit_widgets
     ->focus("#${id_base}_description");
 }
 
@@ -696,7 +704,7 @@ sub add_function_block {
   $self->js->show('#sub-function-block-container-' . $parent_id) if $new_type eq 'sub-function-block';
   $self->add_new_item_form(insert_position => $insert_position, insert_reference => $insert_reference, display_reference => $display_reference);
 
-  $self->js->render($self);
+  $self->js->render;
 }
 
 sub is_item_visible {