use Carp;
use List::MoreUtils qw(any uniq);
+use List::Util qw(sum);
use Rose::DB::Object::Helpers qw(as_tree);
use SL::Locale::String qw(t8);
{name => 'ean', title => t8('EAN') }, ],
);
-use List::Util qw(sum);
__PACKAGE__->meta->add_relationships(
assemblies => {
type => 'one to many',
class => 'SL::DB::AssortmentItem',
column_map => { id => 'assortment_id' },
+ manager_args => { sort_by => 'position' },
},
history_entries => {
type => 'one to many',
column_map => { id => 'part_id' },
manager_args => { with_objects => [ 'shop' ] },
},
+ last_price_update => {
+ type => 'one to one',
+ class => 'SL::DB::PartsPriceHistory',
+ column_map => { id => 'part_id' },
+ manager_args => { sort_by => 'valid_from DESC', limit => 1 },
+ },
);
__PACKAGE__->meta->initialize;
__PACKAGE__->attr_sorted({ unsorted => 'customerprices', position => 'sortorder' });
__PACKAGE__->before_save('_before_save_set_partnumber');
+__PACKAGE__->before_save('_before_save_set_assembly_weight');
sub _before_save_set_partnumber {
my ($self) = @_;
return 1;
}
+sub _before_save_set_assembly_weight {
+ my ($self) = @_;
+
+ if ( $self->part_type eq 'assembly' ) {
+ my $weight_sum = $self->items_weight_sum;
+ $self->weight($self->items_weight_sum) if $weight_sum;
+ }
+ return 1;
+}
+
sub items {
my ($self) = @_;
SQL
my $objs = SL::DB::Manager::Inventory->get_all(
- query => [ id => [ \"$query" ] ],
+ query => [ id => [ \"$query" ] ], # make emacs happy "
with_objects => [ 'parts', 'trans_type', 'bin', 'bin.warehouse' ], # prevent lazy loading in template
sort_by => 'itime DESC',
);
sum map { $_->linetotal_lastcost } @{$self->items};
};
+sub items_weight_sum {
+ my ($self) = @_;
+
+ return unless $self->is_assembly;
+ return unless $self->items;
+ sum map { $_->linetotal_weight} @{$self->items};
+};
+
1;
__END__