X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fic.pl;h=24a2754128b61085aad0e955e05b0854f605d37c;hb=08e820fa7a9aa4beae1da564b69a1362e6020121;hp=6cb9e9cd8d0b0108da9d8e701e6e2df2cc4a2967;hpb=09479f022ab9e0815ceee55923ae46df51afbd42;p=kivitendo-erp.git diff --git a/bin/mozilla/ic.pl b/bin/mozilla/ic.pl index 6cb9e9cd8..24a275412 100644 --- a/bin/mozilla/ic.pl +++ b/bin/mozilla/ic.pl @@ -24,7 +24,8 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1335, USA. #====================================================================== # # Inventory Control module @@ -74,23 +75,6 @@ require "bin/mozilla/reportgenerator.pl"; # end of main -sub add { - $lxdebug->enter_sub(); - - $auth->assert('part_service_assembly_edit'); - - my $title = 'Add ' . ucfirst $form->{item}; - $form->{title} = $locale->text($title); - $form->{callback} = "$form->{script}?action=add&item=$form->{item}" unless $form->{callback}; - $form->{unit_changeable} = 1; - - IC->get_pricegroups(\%myconfig, \%$form); - &link_part; - &display_form; - - $lxdebug->leave_sub(); -} - sub search { $lxdebug->enter_sub(); @@ -100,11 +84,9 @@ sub search { $form->{lastsort} = ""; # memory for which table was sort at last time $form->{ndxs_counter} = 0; # counter for added entries to top100 - my %is_xyz = map { +"is_$_" => ($form->{searchitems} eq $_) } qw(part service assembly); - $form->{title} = (ucfirst $form->{searchitems}) . "s"; + $form->{title} =~ s/ys$/ies/; $form->{title} = $locale->text($form->{title}); - $form->{title} = $locale->text('Assemblies') if ($is_xyz{is_assembly}); $form->{CUSTOM_VARIABLES} = CVar->get_configs('module' => 'IC'); ($form->{CUSTOM_VARIABLES_FILTER_CODE}, @@ -112,866 +94,40 @@ sub search { 'include_prefix' => 'l_', 'include_value' => 'Y'); + setup_ic_search_action_bar(); $form->header; $form->get_lists('partsgroup' => 'ALL_PARTSGROUPS'); - print $form->parse_html_template('ic/search', { %is_xyz, }); - - $lxdebug->leave_sub(); -} #end search() - -sub search_update_prices { - $lxdebug->enter_sub(); - - $auth->assert('part_service_assembly_edit'); - - my $pricegroups = IC->get_pricegroups(\%myconfig, \%$form); - - $form->{title} = $locale->text('Update Prices'); - - $form->header; - - print $form->parse_html_template('ic/search_update_prices', { PRICE_ROWS => $pricegroups }); + print $form->parse_html_template('ic/search'); $lxdebug->leave_sub(); } #end search() -sub confirm_price_update { - $lxdebug->enter_sub(); - - $auth->assert('part_service_assembly_edit'); - - my @errors = (); - my $value_found = undef; - - foreach my $idx (qw(sellprice listprice), (1..$form->{price_rows})) { - my $name = $idx =~ m/\d/ ? $form->{"pricegroup_${idx}"} : $idx eq 'sellprice' ? $locale->text('Sell Price') : $locale->text('List Price'); - my $type = $idx =~ m/\d/ ? $form->{"pricegroup_type_${idx}"} : $form->{"${idx}_type"}; - my $value_idx = $idx =~ m/\d/ ? "price_${idx}" : $idx; - my $value = $form->parse_amount(\%myconfig, $form->{$value_idx}); - - if ((0 > $value) && ($type eq 'percent')) { - push @errors, $locale->text('You cannot adjust the price for pricegroup "#1" by a negative percentage.', $name); - - } elsif (!$value && ($form->{$value_idx} ne '')) { - push @errors, $locale->text('No valid number entered for pricegroup "#1".', $name); - - } elsif (0 < $value) { - $value_found = 1; - } - } - - push @errors, $locale->text('No prices will be updated because no prices have been entered.') if (!$value_found); - - my $num_matches = IC->get_num_matches_for_priceupdate(); - - $form->header(); - - if (@errors) { - $form->show_generic_error(join('
', @errors), 'back_button' => 1); - } - - $form->{nextsub} = "update_prices"; - - map { delete $form->{$_} } qw(action header); - - print $form->parse_html_template('ic/confirm_price_update', { HIDDENS => [ map { name => $_, value => $form->{$_} }, keys %$form ], - num_matches => $num_matches }); - - $lxdebug->leave_sub(); -} - -sub update_prices { - $lxdebug->enter_sub(); - - $auth->assert('part_service_assembly_edit'); - - my $num_updated = IC->update_prices(\%myconfig, \%$form); - - if (-1 != $num_updated) { - $form->redirect($locale->text('#1 prices were updated.', $num_updated)); - } else { - $form->error($locale->text('Could not update prices!')); - } - - $lxdebug->leave_sub(); -} - -#sub choice { -# $lxdebug->enter_sub(); -# -# $auth->assert('part_service_assembly_edit'); -# -# our ($j, $lastndx); -# my ($totop100); -# -# $form->{title} = $locale->text('Top 100 hinzufuegen'); -# -# $form->header; -# -# push @custom_hiddens, qw(searchitems title bom titel revers lastsort sort ndxs_counter extras); -# push @custom_hiddens, qw(itemstatus l_linetotal l_partnumber l_description l_onhand l_unit l_sellprice l_linetotalsellprice); -# my @HIDDENS = ( -# +{ name => 'row', value => $j }, -# +{ name => 'nextsub', value => 'item_selected' }, -# +{ name => 'test', value => 'item_selected' }, -# +{ name => 'lastndx', value => $lastndx }, -# map(+{ name => $_, value => $form->{$_} }, @custom_hiddens), -# ); -# -# my ($partnumber, $description, $unit, $sellprice, $soldtotal); -# # if choice set data -## if ($form->{ndx}) { -## for my $i (0 .. $form->{ndxs_counter}) { -## -## # insert data into top100 -## push @{ $form->{parts} }, -## { number => "", -## partnumber => $form->{"totop100_partnumber_$j"}, -## description => $form->{"totop100_description_$j"}, -## unit => $form->{"totop100_unit_$j"}, -## sellprice => $form->{"totop100_sellprice_$j"}, -## soldtotal => $form->{"totop100_soldtotal_$j"}, -## }; -## } #rof -## } #fi -# -# $totop100 = ""; -# -# # set data for next page -# for my $i (1 .. $form->{ndxs_counter}) { -# $partnumber = $form->{"totop100_partnumber_$i"}; -# $description = $form->{"totop100_description_$i"}; -# $unit = $form->{"totop100_unit_$i"}; -# $sellprice = $form->{"totop100_sellprice_$i"}; -# $soldtotal = $form->{"totop100_soldtotal_$i"}; -# -# push @PARTS, { -# totop100_partnumber => $form->{"totop100_partnumber_$i"}, -# totop100_description => $form->{"totop100_description_$i"}, -# totop100_unit => $form->{"totop100_unit_$i"}, -# totop100_sellprice => $form->{"totop100_sellprice_$i"}, -# totop100_soldtotal => $form->{"totop100_soldtotal_$i"}, -# } -# -## $totop100 .= qq| -##{"totop100_partnumber_$i"}> -##{"totop100_description_$i"}> -##{"totop100_unit_$i"}> -##{"totop100_sellprice_$i"}> -##{"totop100_soldtotal_$i"}> -## |; -# } #rof -# -# print $form->parse_html_template('ic/choice', +{ HIDDENS => \@HIDDENS, PARTS => \@PARTS }); -# -# $lxdebug->leave_sub(); -#} #end choice - -#sub list { -# $lxdebug->enter_sub(); -# -# $auth->assert('part_service_assembly_edit'); -# -# our ($lastndx); -# our ($partnumber, $description, $unit, $sellprice, $soldtotal); -# -# my @sortorders = ("", "partnumber", "description", "all"); -# my $sortorder = $sortorders[($form->{description} ? 2 : 0) + ($form->{partnumber} ? 1 : 0)]; -# IC->get_parts(\%myconfig, \%$form, $sortorder); -# -# $form->{title} = $locale->text('Top 100 hinzufuegen'); -# -# $form->header; -# -# print qq| -#

| . $locale->text('choice part') . qq|

-#
-# -# -# -# -# -# -# -# -# |; -# -# my $j = 0; -# my $i = $form->{rows}; -# -# for ($j = 1; $j <= $i; $j++) { -# -# print qq| -# |; -# if ($j == 1) { -# print qq| -# |; -# } else { -# print qq| -# |; -# } -# print qq| -# -# -# -# -# -# -# -# |; -# } -# -# print qq| -# -#
 | . $locale->text('Part Number') . qq|| . $locale->text('Part Description') . qq|| . $locale->text('Unit of measure') . qq|| . $locale->text('Sell Price') . qq|| . $locale->text('soldtotal') . qq|
$form->{"partnumber_$j"}$form->{"description_$j"}$form->{"unit_$j"}$form->{"sellprice_$j"}$form->{"soldtotal_$j"}
-# -#
-# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -# -#{ndxs_counter}>|; -# -# my $totop100 = ""; -# -# if (($form->{ndxs_counter}) > 0) { -# for ($i = 1; ($i < $form->{ndxs_counter} + 1); $i++) { -# -# $partnumber = $form->{"totop100_partnumber_$i"}; -# $description = $form->{"totop100_description_$i"}; -# $unit = $form->{"totop100_unit_$i"}; -# $sellprice = $form->{"totop100_sellprice_$i"}; -# $soldtotal = $form->{"totop100_soldtotal_$i"}; -# -# $totop100 .= qq| -#{"totop100_partnumber_$i"}> -#{"totop100_description_$i"}> -#{"totop100_unit_$i"}> -#{"totop100_sellprice_$i"}> -#{"totop100_soldtotal_$i"}> -# |; -# } #rof -# } #fi -# -# print $totop100; -# -# print qq| -# -# -#
-#|; -# $lxdebug->leave_sub(); -#} #end list() - sub top100 { - $lxdebug->enter_sub(); - - $auth->assert('part_service_assembly_edit'); - - if ($form->{ndx}) { - $form->{ndxs_counter}++; - - if ($form->{ndxs_counter} > 0) { - - my $index = $form->{ndx}; - - $form->{"totop100_partnumber_$form->{ndxs_counter}"} = $form->{"new_partnumber_$index"}; - $form->{"totop100_description_$form->{ndxs_counter}"} = $form->{"new_description_$index"}; - $form->{"totop100_unit_$form->{ndxs_counter}"} = $form->{"new_unit_$index"}; - $form->{"totop100_sellprice_$form->{ndxs_counter}"} = $form->{"new_sellprice_$index"}; - $form->{"totop100_soldtotal_$form->{ndxs_counter}"} = $form->{"new_soldtotal_$index"}; - } #fi - } #fi - &addtop100(); - $lxdebug->leave_sub(); -} #end top100 - -sub addtop100 { - $lxdebug->enter_sub(); - - $auth->assert('part_service_assembly_edit'); - - my ($revers, $lastsort, $callback, $option, $description, $sameitem, - $partnumber, $unit, $sellprice, $soldtotal, $totop100, $onhand, $align); - my (@column_index, %column_header, %column_data); - my ($totalsellprice, $totallastcost, $totallistprice, $subtotalonhand, $subtotalsellprice, $subtotallastcost, $subtotallistprice); - - $form->{top100} = "top100"; - $form->{l_soldtotal} = "Y"; - $form->{soldtotal} = "soldtotal"; - $form->{sort} = "soldtotal"; - $form->{l_qty} = "N"; - $form->{l_linetotal} = ""; - $form->{revers} = 1; - $form->{number} = "position"; - $form->{l_number} = "Y"; - - $totop100 = ""; - - $form->{title} = $locale->text('Top 100'); - - $revers = $form->{revers}; - $lastsort = $form->{lastsort}; - - if (($form->{lastsort} eq "") && ($form->{sort} eq undef)) { - $form->{revers} = 0; - $form->{lastsort} = "partnumber"; - $form->{sort} = "partnumber"; - } #fi - - $callback = - "$form->{script}?action=top100&searchitems=$form->{searchitems}&itemstatus=$form->{itemstatus}&bom=$form->{bom}&l_linetotal=$form->{l_linetotal}&title=" - . $form->escape($form->{title}, 1); - - # if we have a serialnumber limit search - if ($form->{serialnumber} || $form->{l_serialnumber}) { - $form->{l_serialnumber} = "Y"; - unless ( $form->{bought} - || $form->{sold} - || $form->{rfq} - || $form->{quoted}) { - $form->{bought} = $form->{sold} = 1; - } - } - IC->all_parts(\%myconfig, \%$form); + $::lxdebug->enter_sub(); - if ($form->{itemstatus} eq 'active') { - $option .= $locale->text('Active') . " : "; - } - if ($form->{itemstatus} eq 'obsolete') { - $option .= $locale->text('Obsolete') . " : "; - } - if ($form->{itemstatus} eq 'orphaned') { - $option .= $locale->text('Orphaned') . " : "; - } - if ($form->{itemstatus} eq 'onhand') { - $option .= $locale->text('On Hand') . " : "; - $form->{l_onhand} = "Y"; - } - if ($form->{itemstatus} eq 'short') { - $option .= $locale->text('Short') . " : "; - $form->{l_onhand} = "Y"; - } - if ($form->{onorder}) { - $form->{l_ordnumber} = "Y"; - $callback .= "&onorder=$form->{onorder}"; - $option .= $locale->text('On Order') . " : "; - } - if ($form->{ordered}) { - $form->{l_ordnumber} = "Y"; - $callback .= "&ordered=$form->{ordered}"; - $option .= $locale->text('Ordered') . " : "; - } - if ($form->{rfq}) { - $form->{l_quonumber} = "Y"; - $callback .= "&rfq=$form->{rfq}"; - $option .= $locale->text('RFQ') . " : "; - } - if ($form->{quoted}) { - $form->{l_quonumber} = "Y"; - $callback .= ""ed=$form->{quoted}"; - $option .= $locale->text('Quoted') . " : "; - } - if ($form->{bought}) { - $form->{l_invnumber} = "Y"; - $callback .= "&bought=$form->{bought}"; - $option .= $locale->text('Bought') . " : "; - } - if ($form->{sold}) { - $form->{l_invnumber} = "Y"; - $callback .= "&sold=$form->{sold}"; - $option .= $locale->text('Sold') . " : "; - } - if ( $form->{bought} - || $form->{sold} - || $form->{onorder} - || $form->{ordered} - || $form->{rfq} - || $form->{quoted}) { - - $form->{l_lastcost} = ""; - $form->{l_name} = "Y"; - if ($form->{transdatefrom}) { - $callback .= "&transdatefrom=$form->{transdatefrom}"; - $option .= "\n
" - . $locale->text('From') - . " " - . $locale->date(\%myconfig, $form->{transdatefrom}, 1); - } - if ($form->{transdateto}) { - $callback .= "&transdateto=$form->{transdateto}"; - $option .= "\n
" - . $locale->text('To') - . " " - . $locale->date(\%myconfig, $form->{transdateto}, 1); - } - } - - $option .= "
"; - - if ($form->{partnumber}) { - $callback .= "&partnumber=$form->{partnumber}"; - $option .= $locale->text('Part Number') . qq| : $form->{partnumber}
|; - } - if ($form->{ean}) { - $callback .= "&partnumber=$form->{ean}"; - $option .= $locale->text('EAN') . qq| : $form->{ean}
|; - } - if ($form->{partsgroup}) { - $callback .= "&partsgroup=$form->{partsgroup}"; - $option .= $locale->text('Group') . qq| : $form->{partsgroup}
|; - } - if ($form->{serialnumber}) { - $callback .= "&serialnumber=$form->{serialnumber}"; - $option .= $locale->text('Serial Number') . qq| : $form->{serialnumber}
|; - } - if ($form->{description}) { - $callback .= "&description=$form->{description}"; - $description = $form->{description}; - $description =~ s/\n/
/g; - $option .= $locale->text('Part Description') . qq| : $form->{description}
|; - } - if ($form->{make}) { - $callback .= "&make=$form->{make}"; - $option .= $locale->text('Make') . qq| : $form->{make}
|; - } - if ($form->{model}) { - $callback .= "&model=$form->{model}"; - $option .= $locale->text('Model') . qq| : $form->{model}
|; - } - if ($form->{drawing}) { - $callback .= "&drawing=$form->{drawing}"; - $option .= $locale->text('Drawing') . qq| : $form->{drawing}
|; - } - if ($form->{microfiche}) { - $callback .= "µfiche=$form->{microfiche}"; - $option .= $locale->text('Microfiche') . qq| : $form->{microfiche}
|; - } - if ($form->{l_soldtotal}) { - $callback .= "&soldtotal=$form->{soldtotal}"; - $option .= $locale->text('soldtotal') . qq| : $form->{soldtotal}
|; - } - - my @columns = $form->sort_columns( - qw(number partnumber ean description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal) - ); - - if ($form->{l_linetotal}) { - $form->{l_onhand} = "Y"; - $form->{l_linetotalsellprice} = "Y" if $form->{l_sellprice}; - if ($form->{l_lastcost}) { - $form->{l_linetotallastcost} = "Y"; - if (($form->{searchitems} eq 'assembly') && !$form->{bom}) { - $form->{l_linetotallastcost} = ""; - } - } - $form->{l_linetotallistprice} = "Y" if $form->{l_listprice}; - } - - if ($form->{searchitems} eq 'service') { - - # remove bin, weight and rop from list - map { $form->{"l_$_"} = "" } qw(bin weight rop); - - $form->{l_onhand} = ""; - - # qty is irrelevant unless bought or sold - if ( $form->{bought} - || $form->{sold} - || $form->{onorder} - || $form->{ordered} - || $form->{rfq} - || $form->{quoted}) { - $form->{l_onhand} = "Y"; - } else { - $form->{l_linetotalsellprice} = ""; - $form->{l_linetotallastcost} = ""; - } - } - - foreach my $item (@columns) { - if ($form->{"l_$item"} eq "Y") { - push @column_index, $item; - - # add column to callback - $callback .= "&l_$item=Y"; - } - } - - if ($form->{l_subtotal} eq 'Y') { - $callback .= "&l_subtotal=Y"; - } - - $column_header{number} = - qq|| . $locale->text('number') . qq||; - $column_header{partnumber} = - qq|{revers}&lastsort=$form->{lastsort}>| - . $locale->text('Part Number') - . qq||; - $column_header{description} = - qq|{revers}&lastsort=$form->{lastsort}>| - . $locale->text('Part Description') - . qq||; - $column_header{partsgroup} = - qq|| - . $locale->text('Group') - . qq||; - $column_header{bin} = - qq|| - . $locale->text('Bin') - . qq||; - $column_header{priceupdate} = - qq|| - . $locale->text('Updated') - . qq||; - $column_header{onhand} = - qq|{revers}&lastsort=$form->{lastsort}>| - . $locale->text('Qty') - . qq||; - $column_header{unit} = - qq|| . $locale->text('Unit') . qq||; - $column_header{listprice} = - qq|| - . $locale->text('List Price') - . qq||; - $column_header{lastcost} = - qq|| . $locale->text('Last Cost') . qq||; - $column_header{rop} = - qq|| . $locale->text('ROP') . qq||; - $column_header{weight} = - qq|| . $locale->text('Weight') . qq||; - - $column_header{invnumber} = - qq|| - . $locale->text('Invoice Number') - . qq||; - $column_header{ordnumber} = - qq|| - . $locale->text('Order Number') - . qq||; - $column_header{quonumber} = - qq|| - . $locale->text('Quotation') - . qq||; - - $column_header{name} = - qq|| - . $locale->text('Name') - . qq||; - - $column_header{sellprice} = - qq|| - . $locale->text('Sell Price') - . qq||; - $column_header{linetotalsellprice} = - qq|| . $locale->text('Extended') . qq||; - $column_header{linetotallastcost} = - qq|| . $locale->text('Extended') . qq||; - $column_header{linetotallistprice} = - qq|| . $locale->text('Extended') . qq||; - - $column_header{image} = - qq|| . $locale->text('Image') . qq||; - $column_header{drawing} = - qq|| - . $locale->text('Drawing') - . qq||; - $column_header{microfiche} = - qq|| - . $locale->text('Microfiche') - . qq||; - - $column_header{serialnumber} = - qq|| - . $locale->text('Serial Number') - . qq||; - $column_header{soldtotal} = - qq|{revers}&lastsort=$form->{lastsort}>| - . $locale->text('soldtotal') - . qq||; - - $form->header; - my $colspan = $#column_index + 1; - - print qq| -

$form->{title}

- - - - - - -|; - - map { print "\n$column_header{$_}" } @column_index; - - print qq| - - |; - - # add order to callback - $form->{callback} = $callback .= "&sort=$form->{sort}"; - - # escape callback for href - $callback = $form->escape($callback); - - if (@{ $form->{parts} }) { - $sameitem = $form->{parts}->[0]->{ $form->{sort} }; - } - - # insert numbers for top100 - my $j = 0; - foreach my $ref (@{ $form->{parts} }) { - $j++; - $ref->{number} = $j; - } - - # if avaible -> insert choice here - if (($form->{ndxs_counter}) > 0) { - for (my $i = 1; ($i < $form->{ndxs_counter} + 1); $i++) { - $partnumber = $form->{"totop100_partnumber_$i"}; - $description = $form->{"totop100_description_$i"}; - $unit = $form->{"totop100_unit_$i"}; - $sellprice = $form->{"totop100_sellprice_$i"}; - $soldtotal = $form->{"totop100_soldtotal_$i"}; - - $totop100 .= qq| -{"totop100_partnumber_$i"}> -{"totop100_description_$i"}> -{"totop100_unit_$i"}> -{"totop100_sellprice_$i"}> -{"totop100_soldtotal_$i"}> - |; - - # insert into list - push @{ $form->{parts} }, - { number => "", - partnumber => "$partnumber", - description => "$description", - unit => "$unit", - sellprice => "$sellprice", - soldtotal => "$soldtotal" }; - } #rof - } #fi - # build data for columns - my $i = 0; - foreach my $ref (@{ $form->{parts} }) { - - if ($form->{l_subtotal} eq 'Y' && !$ref->{assemblyitem}) { - if ($sameitem ne $ref->{ $form->{sort} }) { - parts_subtotal(\@column_index, \$subtotalonhand, \$subtotalsellprice, \$subtotallastcost, \$subtotallistprice); - $sameitem = $ref->{ $form->{sort} }; - } - } - - $ref->{exchangerate} = 1 unless $ref->{exchangerate}; - $ref->{sellprice} *= $ref->{exchangerate}; - $ref->{listprice} *= $ref->{exchangerate}; - $ref->{lastcost} *= $ref->{exchangerate}; - - # use this for assemblies - $onhand = $ref->{onhand}; - - $align = "left"; - if ($ref->{assemblyitem}) { - $align = "right"; - $onhand = 0 if ($form->{sold}); - } - - $ref->{description} =~ s/\n/
/g; - - $column_data{number} = - ""; - $column_data{partnumber} = - ""; - $column_data{description} = ""; - $column_data{partsgroup} = ""; - - $column_data{onhand} = - ""; - $column_data{sellprice} = - ""; - $column_data{listprice} = - ""; - $column_data{lastcost} = - ""; - - $column_data{linetotalsellprice} = ""; - $column_data{linetotallastcost} = ""; - $column_data{linetotallistprice} = ""; - - if (!$ref->{assemblyitem}) { - $totalsellprice += $onhand * $ref->{sellprice}; - $totallastcost += $onhand * $ref->{lastcost}; - $totallistprice += $onhand * $ref->{listprice}; - - $subtotalonhand += $onhand; - $subtotalsellprice += $onhand * $ref->{sellprice}; - $subtotallastcost += $onhand * $ref->{lastcost}; - $subtotallistprice += $onhand * $ref->{listprice}; - } + $::auth->assert('part_service_assembly_edit'); - $column_data{rop} = - ""; - $column_data{weight} = - ""; - $column_data{unit} = ""; - $column_data{bin} = ""; - $column_data{priceupdate} = ""; - - $column_data{invnumber} = - ($ref->{module} ne 'oe') - ? "" - : ""; - $column_data{ordnumber} = - ($ref->{module} eq 'oe') - ? "" - : ""; - $column_data{quonumber} = - ($ref->{module} eq 'oe' && !$ref->{ordnumber}) - ? "" - : ""; - - $column_data{name} = ""; - - $column_data{image} = - ($ref->{image}) - ? "" - : ""; - $column_data{drawing} = - ($ref->{drawing}) - ? "" - : ""; - $column_data{microfiche} = - ($ref->{microfiche}) - ? "" - : ""; - - $column_data{serialnumber} = ""; - - $column_data{soldtotal} = ""; - - $i++; - $i %= 2; - print ""; - - map { print "\n$column_data{$_}" } @column_index; - - print qq| - -|; - } + $::form->{l_soldtotal} = "Y"; + $::form->{sort} = "soldtotal"; + $::form->{lastsort} = "soldtotal"; - if ($form->{l_subtotal} eq 'Y') { - parts_subtotal(\@column_index, \$subtotalonhand, \$subtotalsellprice, \$subtotallastcost, \$subtotallistprice); - } #fi + $::form->{l_qty} = undef; + $::form->{l_linetotal} = undef; + $::form->{l_number} = "Y"; + $::form->{number} = "position"; - if ($form->{"l_linetotal"}) { - map { $column_data{$_} = "" } @column_index; - $column_data{linetotalsellprice} = - ""; - $column_data{linetotallastcost} = - ""; - $column_data{linetotallistprice} = - ""; - - print ""; - - map { print "\n$column_data{$_}" } @column_index; - - print qq| - |; + unless ( $::form->{bought} + || $::form->{sold} + || $::form->{rfq} + || $::form->{quoted}) { + $::form->{bought} = $::form->{sold} = 1; } - print qq| - -
$option
" - . $form->format_amount(\%myconfig, $ref->{number}) - . "$ref->{partnumber} $ref->{description} $ref->{partsgroup} " - . $form->format_amount(\%myconfig, $ref->{onhand}) - . "" - . $form->format_amount(\%myconfig, $ref->{sellprice}) - . "" - . $form->format_amount(\%myconfig, $ref->{listprice}) - . "" - . $form->format_amount(\%myconfig, $ref->{lastcost}) - . "" - . $form->format_amount(\%myconfig, $ref->{onhand} * $ref->{sellprice}, 2) - . "" - . $form->format_amount(\%myconfig, $ref->{onhand} * $ref->{lastcost}, 2) - . "" - . $form->format_amount(\%myconfig, $ref->{onhand} * $ref->{listprice}, 2) - . "" - . $form->format_amount(\%myconfig, $ref->{rop}) . "" - . $form->format_amount(\%myconfig, $ref->{weight}) - . "$ref->{unit} $ref->{bin} $ref->{priceupdate} {module}.pl?action=edit&type=invoice&id=$ref->{trans_id}&callback=$callback>$ref->{invnumber}$ref->{invnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&callback=$callback>$ref->{ordnumber}$ref->{ordnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&callback=$callback>$ref->{quonumber}$ref->{quonumber}$ref->{name}{image}>{image} height=32 border=0> {drawing}>$ref->{drawing} {microfiche}>$ref->{microfiche} $ref->{serialnumber}$ref->{soldtotal}
 " - . $form->format_amount(\%myconfig, $totalsellprice, 2) - . "" - . $form->format_amount(\%myconfig, $totallastcost, 2) - . "" - . $form->format_amount(\%myconfig, $totallistprice, 2) - . "

- -|; - - print qq| - -
- -
{script}> - - - - - - - - - - - - - - - - -|; - - print $totop100; - - print qq| - - - - -
-|; + generate_report(); $lxdebug->leave_sub(); -} # end addtop100 +} # # Report for Wares. @@ -983,7 +139,7 @@ sub addtop100 { # searchitems=part revers=0 lastsort='' # # filter: -# partnumber ean description partsgroup serialnumber make model drawing microfiche +# partnumber ean description partsgroup classification serialnumber make model drawing microfiche # transdatefrom transdateto # # radio: @@ -1008,9 +164,7 @@ sub generate_report { my $cvar_configs = CVar->get_configs('module' => 'IC'); - $form->{title} = (ucfirst $form->{searchitems}) . "s"; - $form->{title} =~ s/ys$/ies/; - $form->{title} = $locale->text($form->{title}); + $form->{title} = $locale->text('Articles'); my %column_defs = ( 'bin' => { 'text' => $locale->text('Bin'), }, @@ -1032,7 +186,7 @@ sub generate_report { 'onhand' => { 'text' => $locale->text('Stocked Qty'), }, 'ordnumber' => { 'text' => $locale->text('Order Number'), }, 'partnumber' => { 'text' => $locale->text('Part Number'), }, - 'partsgroup' => { 'text' => $locale->text('Group'), }, + 'partsgroup' => { 'text' => $locale->text('Partsgroup'), }, 'priceupdate' => { 'text' => $locale->text('Updated'), }, 'quonumber' => { 'text' => $locale->text('Quotation'), }, 'rop' => { 'text' => $locale->text('ROP'), }, @@ -1040,10 +194,11 @@ sub generate_report { 'serialnumber' => { 'text' => $locale->text('Serial Number'), }, 'soldtotal' => { 'text' => $locale->text('Qty in Selected Records'), }, 'name' => { 'text' => $locale->text('Name in Selected Records'), }, - 'transdate' => { 'text' => $locale->text('Transdate'), }, + 'transdate' => { 'text' => $locale->text('Transdate Record'), }, 'unit' => { 'text' => $locale->text('Unit'), }, 'weight' => { 'text' => $locale->text('Weight'), }, - 'shop' => { 'text' => $locale->text('Shopartikel'), }, + 'shop' => { 'text' => $locale->text('Shop article'), }, + 'type_and_classific' => { 'text' => $locale->text('Type'), }, 'projectnumber' => { 'text' => $locale->text('Project Number'), }, 'projectdescription' => { 'text' => $locale->text('Project Description'), }, ); @@ -1118,8 +273,8 @@ sub generate_report { transdatefrom => $locale->text('From') . " " . $locale->date(\%myconfig, $form->{transdatefrom}, 1), transdateto => $locale->text('To (time)') . " " . $locale->date(\%myconfig, $form->{transdateto}, 1), partnumber => $locale->text('Part Number') . ": '$form->{partnumber}'", - partsgroup => $locale->text('Group') . ": '$form->{partsgroup}'", - partsgroup_id => $locale->text('Group') . ": '$pg_name'", + partsgroup => $locale->text('Partsgroup') . ": '$form->{partsgroup}'", + partsgroup_id => $locale->text('Partsgroup') . ": '$pg_name'", serialnumber => $locale->text('Serial Number') . ": '$form->{serialnumber}'", description => $locale->text('Part Description') . ": '$form->{description}'", make => $locale->text('Make') . ": '$form->{make}'", @@ -1134,7 +289,7 @@ sub generate_report { my @itemstatus_keys = qw(active obsolete orphaned onhand short); my @callback_keys = qw(onorder ordered rfq quoted bought sold partnumber partsgroup partsgroup_id serialnumber description make model - drawing microfiche l_soldtotal l_deliverydate transdatefrom transdateto insertdatefrom insertdateto ean shop); + drawing microfiche l_soldtotal l_deliverydate transdatefrom transdateto insertdatefrom insertdateto ean shop all); # calculate dependencies for (@itemstatus_keys, @callback_keys) { @@ -1168,8 +323,9 @@ sub generate_report { $form->{l_linetotallastcost} = $form->{searchitems} eq 'assembly' && !$form->{bom} ? "" : 'Y' if $form->{l_lastcost}; $form->{l_linetotallistprice} = "Y" if $form->{l_listprice}; } + $form->{"l_type_and_classific"} = "Y"; - if ($form->{searchitems} eq 'service') { + if ($form->{l_service} && !$form->{l_assembly} && !$form->{l_part}) { # remove bin, weight and rop from list map { $form->{"l_$_"} = "" } qw(bin weight rop); @@ -1216,14 +372,14 @@ sub generate_report { IC->all_parts(\%myconfig, \%$form); my @columns = qw( - partnumber description notes partsgroup bin onhand rop soldtotal unit listprice + partnumber type_and_classific description notes partsgroup bin onhand rop soldtotal unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber transdate name serialnumber deliverydate ean projectnumber projectdescription insertdate shop ); - my $pricegroups = SL::DB::Manager::Pricegroup->get_all(sort => 'id'); + my $pricegroups = SL::DB::Manager::Pricegroup->get_all_sorted; my @pricegroup_columns; my %column_defs_pricegroups; if ($form->{l_pricegroups}) { @@ -1249,6 +405,7 @@ sub generate_report { my @hidden_variables = ( qw(l_subtotal l_linetotal searchitems itemstatus bom l_pricegroups insertdatefrom insertdateto), + qw(l_type_and_classific classification_id l_part l_service l_assembly l_assortment), @itemstatus_keys, @callback_keys, map({ "cvar_$_->{name}" } @searchable_custom_variables), @@ -1275,13 +432,15 @@ sub generate_report { 'part' => $locale->text('part_list'), 'service' => $locale->text('service_list'), 'assembly' => $locale->text('assembly_list'), + 'article' => $locale->text('article_list'), ); $report->set_options('raw_top_info_text' => $form->parse_html_template('ic/generate_report_top', { options => \@options }), - 'raw_bottom_info_text' => $form->parse_html_template('ic/generate_report_bottom'), + 'raw_bottom_info_text' => $form->parse_html_template('ic/generate_report_bottom' , + { PART_CLASSIFICATIONS => SL::DB::Manager::PartClassification->get_all_sorted }), 'output_format' => 'HTML', 'title' => $form->{title}, - 'attachment_basename' => $attachment_basenames{$form->{searchitems}} . strftime('_%Y%m%d', localtime time), + 'attachment_basename' => 'article_list' . strftime('_%Y%m%d', localtime time), ); $report->set_options_from_form(); $locale->set_numberformat_wo_thousands_separator(\%myconfig) if lc($report->{options}->{output_format}) eq 'csv'; @@ -1335,7 +494,7 @@ sub generate_report { $soldtotal = 0 if ($form->{sold}); } - my $edit_link = build_std_url('action=edit', 'id=' . E($ref->{id}), 'callback'); + my $edit_link = build_std_url('script=controller.pl', 'action=Part/edit', 'part.id=' . E($ref->{id}), 'callback'); $row->{partnumber}->{link} = $edit_link; $row->{description}->{link} = $edit_link; @@ -1380,7 +539,7 @@ sub generate_report { $row->{quonumber}{link} = $edit_oe_quo_link if (!$ref->{ordnumber}); } else { - $row->{invnumber}{link} = build_std_url("script=$ref->{module}.pl", 'action=edit', 'type=invoice', 'id=' . E($ref->{trans_id}), 'callback'); + $row->{invnumber}{link} = build_std_url("script=$ref->{module}.pl", 'action=edit', 'type=invoice', 'id=' . E($ref->{trans_id}), 'callback') if ($ref->{invnumber}); } # set properties of images @@ -1391,6 +550,8 @@ sub generate_report { map { $row->{$_}{link} = $ref->{$_} } qw(drawing microfiche); $row->{notes}{data} = SL::HTML::Util->strip($ref->{notes}); + $row->{type_and_classific}{data} = $::request->presenter->type_abbreviation($ref->{part_type}). + $::request->presenter->classification_abbreviation($ref->{classification_id}); $report->add_data($row); @@ -1402,7 +563,7 @@ sub generate_report { (!$next_ref->{assemblyitem} && ($same_item ne $next_ref->{ $form->{sort} })))) { my $row = { map { $_ => { 'class' => 'listsubtotal', } } @columns }; - if (($form->{searchitems} ne 'assembly') || !$form->{bom}) { + if ( !$form->{l_assembly} || !$form->{bom}) { $row->{soldtotal}->{data} = $form->format_amount(\%myconfig, $subtotals{soldtotal}); } @@ -1426,735 +587,58 @@ sub generate_report { $report->add_data($row); } + setup_ic_generate_report_action_bar(); $report->generate_with_headers(); $lxdebug->leave_sub(); } #end generate_report -sub parts_subtotal { - $lxdebug->enter_sub(); - - $auth->assert('part_service_assembly_edit'); - - my (%column_data); - my ($column_index, $subtotalonhand, $subtotalsellprice, $subtotallastcost, $subtotallistprice) = @_; - - map { $column_data{$_} = " " } @{ $column_index }; - $$subtotalonhand = 0 if ($form->{searchitems} eq 'assembly' && $form->{bom}); - - $column_data{onhand} = - "" - . $form->format_amount(\%myconfig, $$subtotalonhand) - . ""; - - $column_data{linetotalsellprice} = - "" - . $form->format_amount(\%myconfig, $$subtotalsellprice, 2) - . ""; - $column_data{linetotallistprice} = - "" - . $form->format_amount(\%myconfig, $$subtotallistprice, 2) - . ""; - $column_data{linetotallastcost} = - "" - . $form->format_amount(\%myconfig, $$subtotallastcost, 2) - . ""; - - $$subtotalonhand = 0; - $$subtotalsellprice = 0; - $$subtotallistprice = 0; - $$subtotallastcost = 0; - - print ""; - - map { print "\n$column_data{$_}" } @{ $column_index }; - - print qq| - -|; - - $lxdebug->leave_sub(); -} - -sub edit { - $lxdebug->enter_sub(); - - $auth->assert('part_service_assembly_details'); - - # show history button - $form->{javascript} = qq||; - #/show hhistory button - IC->get_part(\%myconfig, \%$form); - - $form->{"original_partnumber"} = $form->{"partnumber"}; - - my $title = 'Edit ' . ucfirst $form->{item}; - $form->{title} = $locale->text($title); - - &link_part; - &display_form; - - $lxdebug->leave_sub(); -} - -sub link_part { - $lxdebug->enter_sub(); - - $auth->assert('part_service_assembly_details'); - - IC->create_links("IC", \%myconfig, \%$form); - - # currencies - map({ $form->{selectcurrency} .= "