X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FInventory.pm;h=a95efaddb0188a4bda21e5db971686b2bebb6774;hb=821cc7062fddb5cbcc7b8077c34e252f00e09003;hp=454b012e201a8d105e42b92291fb74d4627bf001;hpb=34035b33f21af21316df798b19f2a758aa86b3a8;p=kivitendo-erp.git diff --git a/SL/Controller/Inventory.pm b/SL/Controller/Inventory.pm index 454b012e2..a95efaddb 100644 --- a/SL/Controller/Inventory.pm +++ b/SL/Controller/Inventory.pm @@ -44,6 +44,7 @@ sub action_stock_in { $::request->layout->focus('#part_id_name'); my $transfer_types = WH->retrieve_transfer_types('in'); map { $_->{description} = $main::locale->text($_->{description}) } @{ $transfer_types }; + $self->setup_stock_in_action_bar; $self->render('inventory/warehouse_selection_stock', title => $::form->{title}, TRANSFER_TYPES => $transfer_types ); } @@ -56,10 +57,10 @@ sub action_stock_usage { 'bins' => 'BINS', }); $::request->layout->use_javascript("${_}.js") for qw(kivi.PartsWarehouse); + $self->setup_stock_usage_action_bar; $self->render('inventory/warehouse_usage', title => $::form->{title}, year => DateTime->today->year, - # PARTSCLASSIFICATIONS => SL::DB:Manager::PartsClassification->get_all_classifications_by_name() , WAREHOUSES => $::form->{WAREHOUSES}, WAREHOUSE_FILTER => 1, warehouse_id => 0, @@ -70,7 +71,7 @@ sub action_stock_usage { sub getnumcolumns { my ($self) = @_; - return qw(stock incorrection found insum back outcorrection disposed + return qw(stock incorrection found insum back outcorrection disposed missing shipped used outsum consumed averconsumed); } @@ -92,16 +93,15 @@ sub action_usage { push @columns , qw(ptype unit) if $form->{report_generator_output_format} eq 'HTML'; - my @numcolumns = qw(stock incorrection found insum back outcorrection disposed + my @numcolumns = qw(stock incorrection found insum back outcorrection disposed missing shipped used outsum consumed averconsumed); push @columns , $self->getnumcolumns(); - my @hidden_variables = qw(reporttype year duetyp fromdate todate + my @hidden_variables = qw(reporttype year duetyp fromdate todate warehouse_id bin_id partnumber description bestbefore chargenumber partstypes_id); my %column_defs = ( 'partnumber' => { 'text' => $locale->text('Part Number'), }, - # 'partclass' => { 'text' => $locale->text('Part Classification'), }, 'partdescription' => { 'text' => $locale->text('Part_br_Description'), }, 'unit' => { 'text' => $locale->text('Unit'), }, 'stock' => { 'text' => $locale->text('stock_br'), }, @@ -127,7 +127,7 @@ sub action_usage { my @custom_headers = (); # Zeile 1: push @custom_headers, [ - { 'text' => $locale->text('Part'), + { 'text' => $locale->text('Part'), 'colspan' => ($form->{report_generator_output_format} eq 'HTML'?4:2), 'align' => 'center'}, { 'text' => $locale->text('Into bin'), 'colspan' => 4, 'align' => 'center'}, { 'text' => $locale->text('From bin'), 'colspan' => 7, 'align' => 'center'}, @@ -251,7 +251,7 @@ sub action_usage { $end->set_second(59); $end->set_minute(59); $end->set_hour(23); - if ( $end->epoch() > $actualepoch ) { + if ( $end->epoch() > $actualepoch ) { $end = DateTime->now_local; my $dur = $start->delta_md($end); $days = $dur->delta_months()*30 + $dur->delta_days() ; @@ -318,7 +318,7 @@ sub action_usage { $report->add_data($last_row); } $row_ind++ ; - } + } $last_partid = $entry->parts_id; $last_row = { }; $last_row->{partnumber}->{data} = $entry->part->partnumber; @@ -345,14 +345,14 @@ sub action_usage { if ( $entry->trans_type->description eq 'correction' ) { $prefix = $entry->trans_type->direction; } - $last_row->{$prefix.$entry->trans_type->description}->{data} += + $last_row->{$prefix.$entry->trans_type->description}->{data} += ( $entry->trans_type->direction eq 'out' ? -$entry->qty : $entry->qty ); } if ( $last_partid > 0 && ( $allrows || ($row_ind >= $first_nr && $row_ind < $last_nr ))) { $self->make_row_result($last_row,$days,$last_partid); $report->add_data($last_row); $row_ind++ ; - } + } my $num_rows = @{ $report->{data} } ; #$main::lxdebug->message(LXDebug->DEBUG2(), "count=".$row_ind." rows=".$num_rows); @@ -381,13 +381,11 @@ sub make_row_result { $row->{insum}->{data} = $row->{stock}->{data} + $row->{incorrection}->{data} + $row->{found}->{data}; $row->{outsum}->{data} = $row->{back}->{data} + $row->{outcorrection}->{data} + $row->{disposed}->{data} + $row->{missing}->{data} + $row->{shipped}->{data} + $row->{used}->{data}; - $row->{consumed}->{data} = $row->{outsum}->{data} - + $row->{consumed}->{data} = $row->{outsum}->{data} - $row->{outcorrection}->{data} - $row->{incorrection}->{data}; $row->{averconsumed}->{data} = $row->{consumed}->{data}*30/$days ; map { $row->{$_}->{data} = $form->format_amount($myconfig,$row->{$_}->{data},2); } $self->getnumcolumns(); -# $row->{partclass}->{data} = ''; - $row->{partnumber}->{link} = 'ic.pl?action=edit&id='.$partid; -# $row->{partdescription}->{link} = 'ic.pl?action=edit&id='.$partid; + $row->{partnumber}->{link} = 'controller.pl?action=Part/edit&part.id' . $partid; } sub action_stock { @@ -625,4 +623,88 @@ sub show_no_warehouses_error { $::form->show_generic_error($msg); } +sub setup_stock_in_action_bar { + my ($self, %params) = @_; + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('Stock'), + submit => [ '#form', { action => 'Inventory/stock' } ], + checks => [ 'check_part_selection_before_stocking' ], + accesskey => 'enter', + ], + ); + } +} + +sub setup_stock_usage_action_bar { + my ($self, %params) = @_; + + for my $bar ($::request->layout->get('actionbar')) { + $bar->add( + action => [ + t8('Show'), + submit => [ '#form', { action => 'Inventory/usage' } ], + accesskey => 'enter', + ], + ); + } +} + 1; +__END__ + +=encoding utf-8 + +=head1 NAME + +SL::Controller::Inventory - Report Controller for inventory + +=head1 DESCRIPTION + +This controller makes three reports about inventory in warehouses/stocks + +- warehouse content + +- warehouse journal + +- warehouse withdrawal + +=head1 FUNCTIONS + +=over 4 + +=item C + +Create a search form for stock withdrawal. +The search parameter for report are made like the reports in bin/mozilla/rp.pl + +=item C + +Make a report about stock withdrawal. + +The manual pagination is implemented like the pagination in SL::Controller::CsvImport. + +=back + +=head1 SPECIAL CASES + +Because of the PFD-Table Formatter some parameters for PDF must be different to the HTML parameters. +So in german language there are some tries to use a HTML Break in the second heading line +to produce two line heading inside table. The actual version has some abbreviations for the header texts. + +=head1 BUGS + +The PDF-Table library has some limits (doesn't display all if the line is to large) so +the format is adapted to this + + +=head1 AUTHOR + +only for C and C: + +Martin Helmling Emartin.helmling@opendynamic.deE + + +=cut