|
package SL::Controller::OrderItem;
|
|
|
|
use strict;
|
|
|
|
use parent qw(SL::Controller::Base);
|
|
use SL::DB::Order;
|
|
use SL::DB::OrderItem;
|
|
use SL::DB::Customer;
|
|
use SL::DB::Part;
|
|
use SL::Controller::Helper::GetModels;
|
|
use SL::Controller::Helper::ParseFilter;
|
|
use SL::Locale::String qw(t8);
|
|
|
|
__PACKAGE__->run_before('check_auth');
|
|
|
|
use Rose::Object::MakeMethods::Generic (
|
|
'scalar' => [ qw(orderitems) ],
|
|
'scalar --get_set_init' => [ qw(model) ],
|
|
);
|
|
|
|
my %sort_columns = (
|
|
partnumber => t8('Part Number'),
|
|
ordnumber => t8('Order'),
|
|
customer => t8('Customer'),
|
|
transdate => t8('Date'),
|
|
);
|
|
|
|
sub action_search {
|
|
|
|
my ($self, %params) = @_;
|
|
|
|
my $title = t8("Sold order items");
|
|
|
|
$::request->layout->use_javascript('client_js.js');
|
|
|
|
# The actual loading of orderitems happens in action_order_item_list_dynamic_table
|
|
# which is processed inside this template and automatically called upon
|
|
# loading. This causes all filtered orderitems to be displayed,
|
|
# there is no paginate mechanism or export
|
|
$self->render('order_items_search/order_items', { layout => 1, process => 1 },
|
|
title => $title,
|
|
);
|
|
}
|
|
|
|
|
|
sub action_order_item_list_dynamic_table {
|
|
my ($self) = @_;
|
|
|
|
$self->orderitems( $self->model->get );
|
|
|
|
|
|
$self->add_linked_delivery_order_items;
|
|
|
|
$self->render('order_items_search/_order_item_list', { layout => 0 , process => 1 });
|
|
}
|
|
|
|
sub add_linked_delivery_order_items {
|
|
my ($self) = @_;
|
|
|
|
my $qty_round = 2;
|
|
|
|
foreach my $orderitem ( @{ $self->orderitems } ) {
|
|
my $dois = $orderitem->linked_delivery_order_items;
|
|
$orderitem->{deliveryorders} = join('<br>', map { $_->displayable_delivery_order_info($qty_round) } @{$dois});
|
|
};
|
|
};
|
|
|
|
sub init_model {
|
|
my ($self) = @_;
|
|
|
|
SL::Controller::Helper::GetModels->new(
|
|
controller => $self,
|
|
model => 'OrderItem',
|
|
query => [ SL::DB::Manager::Order->type_filter('sales_order') ],
|
|
sorted => {
|
|
_default => {
|
|
by => 'transdate',
|
|
dir => 0,
|
|
},
|
|
%sort_columns,
|
|
} ,
|
|
with_objects => [ 'order', 'order.customer', 'part' ],
|
|
);
|
|
}
|
|
|
|
sub check_auth {
|
|
$::auth->assert('sales_order_item_search');
|
|
}
|
|
|
|
1;
|
|
|
|
__END__
|
|
|
|
=encoding utf-8
|
|
|
|
=head1 NAME
|
|
|
|
SL::Controller::OrderItem - Controller for OrderItems
|
|
|
|
=head2 OVERVIEW
|
|
|
|
Controller for quickly finding orderitems in sales orders. For example the
|
|
customer phones you, saying he would like to order another one of the green
|
|
thingies he ordered 2 years ago. You have no idea what he is referring to, but
|
|
you can quickly filter by customer (a customerpicker) and e.g. part description
|
|
or partnumber or order date, successively narrowing down the search. The
|
|
resulting list is updated dynamically after keypresses.
|
|
|
|
=head1 Usage
|
|
|
|
Certain fields can be preset by passing them as get parameters in the URL, so
|
|
you could create links to this report:
|
|
|
|
controller.pl?action=OrderItem/search&ordnumber=24
|
|
controller.pl?action=OrderItem/search&customer_id=3455
|
|
|
|
=head1 TODO AND CAVEATS
|
|
|
|
=over 4
|
|
|
|
=item * amount of results is limited
|
|
|
|
=back
|
|
|
|
=cut
|