module => 'IC',
cvars_alias => 1,
);
+use List::Util qw(sum);
__PACKAGE__->meta->add_relationships(
assemblies => {
makemodels => {
type => 'one to many',
class => 'SL::DB::MakeModel',
+ manager_args => { sort_by => 'sortorder' },
column_map => { id => 'parts_id' },
},
translations => {
$class->new(%params, part_type => 'assortment');
}
+sub last_modification {
+ my ($self) = @_;
+ return $self->mtime or $self->itime;
+};
+
sub orphaned {
my ($self) = @_;
die 'not an accessor' if @_ > 1;
if (!exists $charts->{$taxzone}->{$type}) {
require SL::DB::Buchungsgruppe;
my $bugru = SL::DB::Buchungsgruppe->load_cached($self->buchungsgruppen_id);
- my $chart_id = ($type eq 'inventory') ? ($self->inventory_accno_id ? $bugru->inventory_accno_id : undef)
+ my $chart_id = ($type eq 'inventory') ? ($self->is_part ? $bugru->inventory_accno_id : undef)
: $bugru->call_sub("${type}_accno_id", $taxzone);
if ($chart_id) {
join ' ', grep $_, map $_[0]->$_, qw(partnumber description);
}
+sub clone_and_reset_deep {
+ my ($self) = @_;
+
+ my $clone = $self->clone_and_reset; # resets id and partnumber (primary key and unique constraint)
+ $clone->makemodels( map { $_->clone_and_reset } @{$self->makemodels});
+ $clone->translations( map { $_->clone_and_reset } @{$self->translations});
+
+ if ( $self->is_assortment ) {
+ $clone->assortment_items( map { $_->clone } @{$self->assortment_items} );
+ foreach my $ai ( @{ $clone->assortment_items } ) {
+ $ai->assortment_id(undef);
+ };
+ };
+
+ if ( $self->is_assembly ) {
+ $clone->assemblies( map { $_->clone_and_reset } @{$self->assemblies});
+ };
+
+ if ( $self->prices ) {
+ $clone->prices( map { $_->clone } @{$self->prices}); # pricegroup_id gets reset here because it is part of a unique contraint
+ if ( $clone->prices ) {
+ foreach my $price ( @{$clone->prices} ) {
+ $price->id(undef);
+ $price->parts_id(undef);
+ };
+ };
+ };
+
+ return $clone;
+}
+
+sub assembly_sellprice_sum {
+ my ($self) = @_;
+
+ return unless $self->is_assembly;
+ sum map { $_->linetotal } @{$self->part->assemblies};
+};
+
+sub assembly_lastcost_sum {
+ my ($self) = @_;
+
+ return unless $self->is_assembly;
+ sum map { $_->linetotal } @{$self->part->assemblies};
+};
+
+sub assortment_sellprice_sum {
+ my ($self) = @_;
+
+ return unless $self->is_assortment;
+ sum map { $_->linetotal } @{$self->part->assortment_items};
+};
+
+sub assortment_lastcost_sum {
+ my ($self) = @_;
+
+ return unless $self->is_assortment;
+ sum map { $_->linetotal } @{$self->part->assortment_items};
+};
+
1;
__END__
Please note, that this is a write only accessor, the original Buchungsgruppe can
not be retrieved from an article once set.
+=item C<assembly_sellprice_sum>
+
+Non-recursive sellprice sum of all the assembly item sellprices.
+
+=item C<assortment_sellprice_sum>
+
+Non-recursive sellprice sum of all the assortment item sellprices.
+
+=item C<assembly_lastcost_sum>
+
+Non-recursive lastcost sum of all the assembly item lastcosts.
+
+=item C<assortment_lastcost_sum>
+
+Non-recursive lastcost sum of all the assortment item lastcosts.
+
=back
=head1 AUTHORS