Merge branch 'master' of github.com:kivitendo/kivitendo-erp
[kivitendo-erp.git] / SL / Controller / RequirementSpecVersion.pm
index 0588847..eab34d6 100644 (file)
@@ -17,7 +17,7 @@ use SL::Locale::String;
 
 use Rose::Object::MakeMethods::Generic
 (
-  'scalar --get_set_init' => [ qw(requirement_spec version js versioned_copies) ],
+  'scalar --get_set_init' => [ qw(requirement_spec version js) ],
 );
 
 __PACKAGE__->run_before('check_auth');
@@ -37,13 +37,14 @@ sub action_new {
 
   $self->version(SL::DB::RequirementSpecVersion->new);
 
-  my $previous_version = $self->requirement_spec->previous_version;
-  my %differences      = $self->calculate_differences(current => $self->requirement_spec, previous => $previous_version);
+  my $previous_version = $self->requirement_spec->highest_version;
 
   if (!$previous_version) {
     $self->version->description(t8('Initial version.'));
 
   } else {
+    my %differences = $self->calculate_differences(current => $self->requirement_spec, previous => $previous_version);
+
     my @lines;
 
     my $fb_diff = $differences{function_blocks};
@@ -59,7 +60,7 @@ sub action_new {
     $self->version->description(@lines ? join("\n", @lines) : t8('No changes since previous version.'));
   }
 
-  $self->render('requirement_spec_version/new', { layout => 0 }, title => t8('Create a new version'));
+  $self->render('requirement_spec_version/new', { layout => 0 });
 }
 
 sub action_create {
@@ -78,11 +79,13 @@ sub action_create {
     return $self->js->error($::locale->text('Saving failed. Error message from the database: #1'), $db->error)->render($self);
   }
 
-  my $html = $self->render('requirement_spec/_version', { output => 0 }, requirement_spec => $self->requirement_spec);
+  my $version_info_html = $self->render('requirement_spec/_version',     { output => 0 }, requirement_spec => $self->requirement_spec);
+  my $version_list_html = $self->render('requirement_spec_version/list', { output => 0 });
 
   $self->js
-    ->html('#requirement_spec_version', $html)
-    ->jqmClose('.jqmWindow')
+    ->html('#requirement_spec_version', $version_info_html)
+    ->html('#versioned_copies_list',    $version_list_html)
+    ->dialog->close('#jqueryui_popup_dialog')
     ->render($self);
 }
 
@@ -92,7 +95,7 @@ sub action_create {
 
 sub check_auth {
   my ($self, %params) = @_;
-  $::auth->assert('sales_quotation_edit');
+  $::auth->assert('requirement_spec_edit');
 }
 
 #
@@ -114,17 +117,13 @@ sub init_js {
   $self->js(SL::ClientJS->new);
 }
 
-sub init_versioned_copies {
-  my ($self) = @_;
-  $self->versioned_copies([
-    sort { $b->mtime <=> $a->mtime } @{ $self->requirement_spec->versioned_copies }
-  ]);
-}
-
 sub has_item_changed {
   my ($previous, $current) = @_;
   croak "Missing previous/current" if !$previous || !$current;
-  return any { ($previous->$_ || '') ne ($current->$_ || '') } qw(item_type parent_id fb_number title description complexity_id risk_id time_estimation net_sum);
+
+  return 1 if any { ($previous->$_ || '') ne ($current->$_ || '') } qw(item_type fb_number title description complexity_id risk_id);
+  return 0 if !$current->parent_id;
+  return $previous->parent->fb_number ne $current->parent->fb_number;
 }
 
 sub has_text_block_changed {