X-Git-Url: http://wagnertech.de/git?p=kivitendo-erp.git;a=blobdiff_plain;f=SL%2FController%2FOrderItem.pm;fp=SL%2FController%2FOrderItem.pm;h=7cdfb355522fdef5b194c1bd2b08cb25a81cd4e1;hp=0000000000000000000000000000000000000000;hb=53593baa211863fbf66540cf1bcc36c8fb37257f;hpb=deb4d2dbb676d7d6f69dfe7815d6e0cb09bd4a44 diff --git a/SL/Controller/OrderItem.pm b/SL/Controller/OrderItem.pm new file mode 100644 index 000000000..7cdfb3555 --- /dev/null +++ b/SL/Controller/OrderItem.pm @@ -0,0 +1,125 @@ +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('
', 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_edit'); +} + +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