use SL::DB::MetaSetup::RequirementSpec;
use SL::DB::Manager::RequirementSpec;
use SL::DB::Helper::AttrDuration;
+use SL::DB::Helper::CustomVariables (
+ module => 'RequirementSpecs',
+ cvars_alias => 1,
+);
use SL::DB::Helper::LinkedRecords;
use SL::Locale::String;
use SL::Util qw(_hashify);
return $self->_create_copy(%params) if $self->db->in_transaction;
my $copy;
- if (!$self->db->do_transaction(sub { $copy = $self->_create_copy(%params) })) {
+ if (!$self->db->with_transaction(sub { $copy = $self->_create_copy(%params) })) {
$::lxdebug->message(LXDebug->WARN(), "create_copy failed: " . join("\n", (split(/\n/, $self->db->error))[0..2]));
return undef;
}
sub _create_copy {
my ($self, %params) = @_;
- my $copy = Rose::DB::Object::Helpers::clone_and_reset($self);
+ my $copy = $self->clone_and_reset;
$copy->copy_from($self, %params);
return $copy;
%attributes);
}
+ # Copy custom variables.
+ foreach my $var (@{ $source->cvars_by_config }) {
+ $self->cvar_by_name($var->config->name)->value($var->value);
+ }
+
my %paste_template_result;
# Clone text blocks and pictures.
my $clone_and_reset_position = sub {
my ($src_obj) = @_;
- my $cloned = Rose::DB::Object::Helpers::clone_and_reset($src_obj);
+ my $cloned = $src_obj->clone_and_reset;
$cloned->position(undef);
return $cloned;
};
my $clone_text_block = sub {
my ($text_block) = @_;
- my $cloned = Rose::DB::Object::Helpers::clone_and_reset($text_block);
+ my $cloned = $text_block->clone_and_reset;
$cloned->position(undef);
$cloned->pictures([ map { $clone_and_reset_position->($_) } @{ $text_block->pictures_sorted } ]);
return $cloned;
$self->$accessor($paste_template_result{parts});
# Save new object -- we need its ID for the items.
- $self->save;
+ $self->save(cascade => 1);
my %id_to_clone;
my $clone_item;
$clone_item = sub {
my ($item) = @_;
- my $cloned = Rose::DB::Object::Helpers::clone_and_reset($item);
+ my $cloned = $item->clone_and_reset;
$cloned->requirement_spec_id($self->id);
$cloned->position(undef);
$cloned->fb_number(undef) if $params->{paste_template};