projects
/
kivitendo-erp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
epic-s6g
[kivitendo-erp.git]
/
SL
/
DB
/
RequirementSpec.pm
diff --git
a/SL/DB/RequirementSpec.pm
b/SL/DB/RequirementSpec.pm
index
2354440
..
024e60d
100644
(file)
--- a/
SL/DB/RequirementSpec.pm
+++ b/
SL/DB/RequirementSpec.pm
@@
-8,6
+8,11
@@
use Rose::DB::Object::Helpers;
use SL::DB::MetaSetup::RequirementSpec;
use SL::DB::Manager::RequirementSpec;
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);
use SL::DB::Helper::LinkedRecords;
use SL::Locale::String;
use SL::Util qw(_hashify);
@@
-52,6
+57,8
@@
__PACKAGE__->meta->add_relationship(
__PACKAGE__->meta->initialize;
__PACKAGE__->meta->initialize;
+__PACKAGE__->attr_duration(qw(time_estimation));
+
__PACKAGE__->before_save('_before_save_initialize_not_null_columns');
sub validate {
__PACKAGE__->before_save('_before_save_initialize_not_null_columns');
sub validate {
@@
-138,7
+145,7
@@
sub create_copy {
return $self->_create_copy(%params) if $self->db->in_transaction;
my $copy;
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;
}
$::lxdebug->message(LXDebug->WARN(), "create_copy failed: " . join("\n", (split(/\n/, $self->db->error))[0..2]));
return undef;
}
@@
-149,7
+156,7
@@
sub create_copy {
sub _create_copy {
my ($self, %params) = @_;
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;
$copy->copy_from($self, %params);
return $copy;
@@
-168,21
+175,26
@@
sub _copy_from {
%attributes);
}
%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 %paste_template_result;
# Clone text blocks and pictures.
- my $clone_
picture
= sub {
- my ($
picture
) = @_;
- my $cloned =
Rose::DB::Object::Helpers::clone_and_reset($picture)
;
+ my $clone_
and_reset_position
= sub {
+ my ($
src_obj
) = @_;
+ my $cloned =
$src_obj->clone_and_reset
;
$cloned->position(undef);
return $cloned;
};
my $clone_text_block = sub {
my ($text_block) = @_;
$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->position(undef);
- $cloned->pictures([ map { $clone_
picture
->($_) } @{ $text_block->pictures_sorted } ]);
+ $cloned->pictures([ map { $clone_
and_reset_position
->($_) } @{ $text_block->pictures_sorted } ]);
return $cloned;
};
return $cloned;
};
@@
-194,8
+206,13
@@
sub _copy_from {
$self->add_text_blocks($paste_template_result{text_blocks});
}
$self->add_text_blocks($paste_template_result{text_blocks});
}
+ # Clone additional parts.
+ $paste_template_result{parts} = [ map { $clone_and_reset_position->($_) } @{ $source->parts } ];
+ my $accessor = $params->{paste_template} ? "add_parts" : "parts";
+ $self->$accessor($paste_template_result{parts});
+
# Save new object -- we need its ID for the items.
# Save new object -- we need its ID for the items.
- $self->save;
+ $self->save
(cascade => 1)
;
my %id_to_clone;
my %id_to_clone;
@@
-203,7
+220,7
@@
sub _copy_from {
my $clone_item;
$clone_item = sub {
my ($item) = @_;
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};
$cloned->requirement_spec_id($self->id);
$cloned->position(undef);
$cloned->fb_number(undef) if $params->{paste_template};