kivitendo/SL/Controller/OrderItem.pm @ 68748667
d4557a8b | Geoffrey Richardson | 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 {
|
||||
983b4461 | Bernd Bleßmann | $::auth->assert('sales_order_item_search');
|
||
d4557a8b | Geoffrey Richardson | }
|
||
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
|