use Carp;
use List::MoreUtils qw(any);
-use SL::ClientJS;
use SL::DB::Customer;
use SL::DB::Project;
use SL::DB::RequirementSpec;
use Rose::Object::MakeMethods::Generic
(
- 'scalar --get_set_init' => [ qw(requirement_spec version js versioned_copies) ],
+ 'scalar --get_set_init' => [ qw(requirement_spec version) ],
);
__PACKAGE__->run_before('check_auth');
$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};
$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 {
my %attributes = %{ delete($::form->{rs_version}) || {} };
my @errors = SL::DB::RequirementSpecVersion->new(%attributes, version_number => 1)->validate;
- return $self->js->error(@errors)->render($self) if @errors;
+ return $self->js->error(@errors)->render if @errors;
my $db = $self->requirement_spec->db;
- my @result = $self->version($self->requirement_spec->create_version(%attributes));
+ my @result = $self->requirement_spec->create_version(%attributes);
if (!@result) {
$::lxdebug->message(LXDebug::WARN(), "Error: " . $db->error);
- return $self->js->error($::locale->text('Saving failed. Error message from the database: #1'), $db->error)->render($self);
+ return $self->js->error($::locale->text('Saving failed. Error message from the database: #1'), $db->error)->render;
}
- my $html = $self->render('requirement_spec/_version', { output => 0 }, requirement_spec => $self->requirement_spec);
+ $self->version($result[0]);
+ 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')
- ->render($self);
+ ->html('#requirement_spec_version', $version_info_html)
+ ->html('#versioned_copies_list', $version_list_html)
+ ->dialog->close('#jqueryui_popup_dialog')
+ ->render;
}
#
sub check_auth {
my ($self, %params) = @_;
- $::auth->assert('sales_quotation_edit');
+ $::auth->assert('requirement_spec_edit');
}
#
$self->version(SL::DB::RequirementSpecVersion->new(id => $::form->{id})->load) if $::form->{id};
}
-sub init_js {
- my ($self, %params) = @_;
- $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 {