X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fic.pl;h=3d9d6ef2de9580fff5f10a60f8455d53362b192e;hb=2efc8cbcc63c56094e0692067b7cb678c1583987;hp=3df2e51ed60d680415ea750787642b39997b9196;hpb=4dbb09950c9f5596646537c12d991c99086fe7c1;p=kivitendo-erp.git diff --git a/bin/mozilla/ic.pl b/bin/mozilla/ic.pl index 3df2e51ed..3d9d6ef2d 100644 --- a/bin/mozilla/ic.pl +++ b/bin/mozilla/ic.pl @@ -30,13 +30,26 @@ # Inventory Control module # #====================================================================== - +#$locale->text('ea'); use SL::IC; -require "$form->{path}/io.pl"; +#use SL::PE; + +use strict; +#use warnings; + +require "bin/mozilla/io.pl"; +require "bin/mozilla/common.pl"; 1; + +# global imports +my $form = $main::form; +my $locale = $main::locale; +my %myconfig = %main::myconfig; +my $lxdebug = $main::lxdebug; + # end of main sub add { @@ -44,10 +57,13 @@ sub add { $form->{title} = $locale->text('Add ' . ucfirst $form->{item}); - $form->{callback} = "$form->{script}?action=add&item=$form->{item}&path=$form->{path}&login=$form->{login}&password=$form->{password}" unless $form->{callback}; + $form->{callback} = + "$form->{script}?action=add&item=$form->{item}&login=$form->{login}&password=$form->{password}" + unless $form->{callback}; - $form->{unit} = ($form->{item} eq 'service') ? $locale->text('hr') : $locale->text('ea'); + $form->{"unit_changeable"} = 1; + IC->get_pricegroups(\%myconfig, \%$form); &link_part; &display_form; @@ -57,68 +73,79 @@ sub add { sub search { $lxdebug->enter_sub(); - $form->{title} = (ucfirst $form->{searchitems})."s"; + my ($button1, $button2, $onhand, $makemodel, $serialnumber, $l_serialnumber, $toplevel, $bought); + + $form->{title} = (ucfirst $form->{searchitems}) . "s"; $form->{title} = $locale->text($form->{title}); # switch for backward sorting $form->{revers} = 0; + # memory for which table was sort at last time $form->{lastsort} = ""; + # counter for added entries to top100 $form->{ndxs_counter} = 0; -# $locale->text('Parts') -# $locale->text('Services') + # $locale->text('Parts') + # $locale->text('Services') # use JavaScript Calendar or not - $form->{jsscript} = $jscalendar; - $jsscript = ""; - if ($form->{jsscript}) - { + $form->{jsscript} = 1; + my $jsscript = ""; + if ($form->{jsscript}) { + # with JavaScript Calendar $button1 = qq| - text('button').qq|> + text('button') . qq|> |; - $button2 = qq| + $button2 = qq| - text('button').qq|> + text('button') . qq|> |; + #write Trigger - $jsscript = Form->write_trigger(\%myconfig,"2","transdatefrom","BL","trigger1","transdateto","BL","trigger2"); - } - else - { - # without JavaScript Calendar - $button1 = qq| + $jsscript = + Form->write_trigger(\%myconfig, "2", "transdatefrom", "BL", "trigger1", + "transdateto", "BL", "trigger2"); + } else { + + # without JavaScript Calendar + $button1 = qq| |; - $button2 = qq| + $button2 = qq| |; - } + } unless ($form->{searchitems} eq 'service') { $onhand = qq| -  |.$locale->text('On Hand').qq| -  |.$locale->text('Short').qq| +  | + . $locale->text('On Hand') . qq| +  | + . $locale->text('Short') . qq| |; $makemodel = qq| - |.$locale->text('Make').qq| + | . $locale->text('Make') . qq| - |.$locale->text('Model').qq| + | . $locale->text('Model') . qq| |; $serialnumber = qq| - |.$locale->text('Serial Number').qq| + | . $locale->text('Serial Number') . qq| |; $l_serialnumber = qq| -  |.$locale->text('Serial Number').qq| +  | + . $locale->text('Serial Number') . qq| |; } @@ -131,8 +158,10 @@ sub search { -  |.$locale->text('Top Level').qq| -  |.$locale->text('Individual Items').qq| +  | + . $locale->text('Top Level') . qq| +  | + . $locale->text('Individual Items') . qq| |; @@ -147,28 +176,28 @@ sub search { - + - + - +
|.$locale->text('Sold').qq|| . $locale->text('Sold') . qq|

|.$locale->text('Ordered').qq|| . $locale->text('Ordered') . qq|

|.$locale->text('Quoted').qq|| . $locale->text('Quoted') . qq|
  - |.$locale->text('From').qq| + | . $locale->text('From') . qq| $button1 - |.$locale->text('To').qq| + | . $locale->text('To (time)') . qq| $button2 @@ -178,7 +207,7 @@ sub search { } else { - $bought = qq| + $bought = qq| @@ -188,27 +217,27 @@ sub search { - + - + - + - + - + - +
|.$locale->text('Bought').qq|| . $locale->text('Bought') . qq| |.$locale->text('Sold').qq|| . $locale->text('Sold') . qq|

|.$locale->text('On Order').qq|| . $locale->text('On Order') . qq| |.$locale->text('Ordered').qq|| . $locale->text('Ordered') . qq|

|.$locale->text('RFQ').qq|| . $locale->text('RFQ') . qq| |.$locale->text('Quoted').qq|| . $locale->text('Quoted') . qq|
@@ -216,9 +245,9 @@ sub search { - + $button1 - + $button2
|.$locale->text('From').qq|| . $locale->text('From') . qq||.$locale->text('To').qq|| . $locale->text('To (time)') . qq|
@@ -250,33 +279,39 @@ sub search { - + + + - + - + $serialnumber $makemodel - + - + $toplevel $bought @@ -287,36 +322,56 @@ sub search { - + @@ -331,35 +386,267 @@ $jsscript -{path}> {login}> {password}> +
- - + + + + + + +|; + $lxdebug->leave_sub(); +} #end search() + +sub search_update_prices { + $lxdebug->enter_sub(); + + my ($onhand, $makemodel, $serialnumber, $l_serialnumber, $toplevel, $bought); + + $form->{title} = $locale->text('Update prices'); + IC->get_pricegroups(\%myconfig, \%$form); + + # use JavaScript Calendar or not +# $form->{jsscript} = 1; +# $jsscript = ""; +# if ($form->{jsscript}) { +# +# # with JavaScript Calendar +# $button1 = qq| +# +# +# |; +# $button2 = qq| +# +# +# |; +# +# #write Trigger +# $jsscript = +# Form->write_trigger(\%myconfig, "2", "transdatefrom", "BL", "trigger1", +# "transdateto", "BL", "trigger2"); +# } else { +# +# # without JavaScript Calendar +# $button1 = qq| +# |; +# $button2 = qq| +# |; +# } + + $onhand = qq| +  | + . $locale->text('On Hand') . qq| +  | + . $locale->text('Short') . qq| +|; + + $makemodel = qq| + + + + + + +|; + + $serialnumber = qq| + + +|; + + $l_serialnumber = qq| + +|; + + + + $form->header; + + print qq| + + +{script}> + + + +
|.$locale->text('Part Number').qq|| . $locale->text('Part Number') . qq| | . $locale->text('EAN') . qq|
|.$locale->text('Part Description').qq|| + . $locale->text('Part Description') . qq|
|.$locale->text('Group').qq|| . $locale->text('Group') . qq|
|.$locale->text('Drawing').qq|| . $locale->text('Drawing') . qq| |.$locale->text('Microfiche').qq|| . $locale->text('Microfiche') . qq|
-  |.$locale->text('Active').qq| +  | + . $locale->text('Active') . qq| $onhand -  |.$locale->text('Obsolete').qq| -  |.$locale->text('Orphaned').qq| +  | + . $locale->text('Obsolete') . qq| +  | + . $locale->text('Orphaned') . qq|
|.$locale->text('Include in Report').qq|| + . $locale->text('Include in Report') . qq| - - + + $l_serialnumber - + - - - - + + + + - - - - + + + + - - - - + + + + - - + + +
 |.$locale->text('Part Number').qq| |.$locale->text('Part Description').qq| | + . $locale->text('Part Number') . qq| | + . $locale->text('Part Description') . qq| |.$locale->text('Unit of measure').qq| | + . $locale->text('Unit of measure') . qq|
 |.$locale->text('List Price').qq| |.$locale->text('Sell Price').qq| |.$locale->text('Last Cost').qq| |.$locale->text('Line Total').qq| | + . $locale->text('List Price') . qq| | + . $locale->text('Sell Price') . qq| | + . $locale->text('Last Cost') . qq| | + . $locale->text('Line Total') . qq|
 |.$locale->text('Updated').qq| |.$locale->text('Bin').qq| |.$locale->text('ROP').qq| |.$locale->text('Weight').qq| | + . $locale->text('Updated') . qq| | + . $locale->text('Bin') . qq| | + . $locale->text('ROP') . qq| | + . $locale->text('Weight') . qq|
 |.$locale->text('Image').qq| |.$locale->text('Drawing').qq| |.$locale->text('Microfiche').qq| |.$locale->text('Group').qq| | + . $locale->text('Image') . qq| | + . $locale->text('Drawing') . qq| | + . $locale->text('Microfiche') . qq| | + . $locale->text('Group') . qq|
 |.$locale->text('Subtotal').qq| |.$locale->text('soldtotal').qq| | + . $locale->text('Subtotal') . qq| | + . $locale->text('soldtotal') . qq| | + . $locale->text('deliverydate') . qq|
text('button') . qq|>text('button') . qq|>
| . $locale->text('Make') . qq|| . $locale->text('Model') . qq|
| . $locale->text('Serial Number') . qq| | + . $locale->text('Serial Number') . qq|
+ + + + |; - $column_header{partnumber} = qq||; - $column_header{description} = qq||; - $column_header{partsgroup} = qq||; - $column_header{bin} = qq||; - $column_header{priceupdate} = qq||; - $column_header{onhand} = qq||; - $column_header{unit} = qq||; - $column_header{listprice} = qq||; - $column_header{lastcost} = qq||; - $column_header{rop} = qq||; - $column_header{weight} = qq||; - - $column_header{invnumber} = qq||; - $column_header{ordnumber} = qq||; - $column_header{quonumber} = qq||; - - $column_header{name} = qq||; - - $column_header{sellprice} = qq||; - $column_header{linetotalsellprice} = qq||; - $column_header{linetotallastcost} = qq||; - $column_header{linetotallistprice} = qq||; - - $column_header{image} = qq||; - $column_header{drawing} = qq||; - $column_header{microfiche} = qq||; - - $column_header{serialnumber} = qq||; - $column_header{soldtotal} = qq||; + $column_header{number} = + qq||; + $column_header{partnumber} = + qq||; + $column_header{description} = + qq||; + $column_header{partsgroup} = + qq||; + $column_header{bin} = + qq||; + $column_header{priceupdate} = + qq||; + $column_header{onhand} = + qq||; + $column_header{unit} = + qq||; + $column_header{listprice} = + qq||; + $column_header{lastcost} = + qq||; + $column_header{rop} = + qq||; + $column_header{weight} = + qq||; + + $column_header{invnumber} = + qq||; + $column_header{ordnumber} = + qq||; + $column_header{quonumber} = + qq||; + + $column_header{name} = + qq||; + + $column_header{sellprice} = + qq||; + $column_header{linetotalsellprice} = + qq||; + $column_header{linetotallastcost} = + qq||; + $column_header{linetotallistprice} = + qq||; + + $column_header{image} = + qq||; + $column_header{drawing} = + qq||; + $column_header{microfiche} = + qq||; + + $column_header{serialnumber} = + qq||; + $column_header{soldtotal} = + qq||; $form->header; - $colspan = $#column_index + 1; + my $colspan = $#column_index + 1; print qq| @@ -897,25 +1242,25 @@ sub addtop100 { $callback = $form->escape($callback); if (@{ $form->{parts} }) { - $sameitem = $form->{parts}->[0]->{$form->{sort}}; + $sameitem = $form->{parts}->[0]->{ $form->{sort} }; } + # insert numbers for top100 - my $j=0; - foreach $ref (@{ $form->{parts} }) { + my $j = 0; + foreach my $ref (@{ $form->{parts} }) { $j++; $ref->{number} = $j; - } + } + # if avaible -> insert choice here - 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"}; - + 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"}> @@ -923,24 +1268,32 @@ sub addtop100 { {"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 - foreach $ref (@{ $form->{parts} }) { + push @{ $form->{parts} }, + { number => "", + partnumber => "$partnumber", + description => "$description", + unit => "$unit", + sellprice => "$sellprice", + soldtotal => "$soldtotal" }; + } #rof + } #fi + # build data for columns + foreach my $ref (@{ $form->{parts} }) { + my $i = 0; if ($form->{l_subtotal} eq 'Y' && !$ref->{assemblyitem}) { - if ($sameitem ne $ref->{$form->{sort}}) { - &parts_subtotal; - $sameitem = $ref->{$form->{sort}}; + if ($sameitem ne $ref->{ $form->{sort} }) { + &parts_subtotal; + $sameitem = $ref->{ $form->{sort} }; } } - + $ref->{exchangerate} = 1 unless $ref->{exchangerate}; $ref->{sellprice} *= $ref->{exchangerate}; $ref->{listprice} *= $ref->{exchangerate}; - $ref->{lastcost} *= $ref->{exchangerate}; + $ref->{lastcost} *= $ref->{exchangerate}; # use this for assemblies $onhand = $ref->{onhand}; @@ -954,52 +1307,98 @@ sub addtop100 { $ref->{description} =~ s/ /
/g; - $column_data{number} = ""; - $column_data{partnumber} = ""; + $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} = ""; + $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}; + $totallastcost += $onhand * $ref->{lastcost}; $totallistprice += $onhand * $ref->{listprice}; - $subtotalonhand += $onhand; + $subtotalonhand += $onhand; $subtotalsellprice += $onhand * $ref->{sellprice}; - $subtotallastcost += $onhand * $ref->{lastcost}; + $subtotallastcost += $onhand * $ref->{lastcost}; $subtotallistprice += $onhand * $ref->{listprice}; } - $column_data{rop} = ""; - $column_data{weight} = ""; - $column_data{unit} = ""; - $column_data{bin} = ""; + $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{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{image} = + ($ref->{image}) + ? "" + : ""; + $column_data{drawing} = + ($ref->{drawing}) + ? "" + : ""; + $column_data{microfiche} = + ($ref->{microfiche}) + ? "" + : ""; $column_data{serialnumber} = ""; $column_data{soldtotal} = ""; - $i++; $i %= 2; + $i++; + $i %= 2; print ""; map { print "\n$column_data{$_}" } @column_index; @@ -1011,13 +1410,22 @@ sub addtop100 { if ($form->{l_subtotal} eq 'Y') { &parts_subtotal; - }#fi + } #fi if ($form->{"l_linetotal"}) { map { $column_data{$_} = "" } @column_index; - $column_data{linetotalsellprice} = ""; - $column_data{linetotallastcost} = ""; - $column_data{linetotallistprice} = ""; + $column_data{linetotalsellprice} = + ""; + $column_data{linetotallastcost} = + ""; + $column_data{linetotallistprice} = + ""; print ""; @@ -1039,7 +1447,6 @@ sub addtop100 { {script}> -{path}> {login}> {password}> @@ -1064,16 +1471,10 @@ sub addtop100 { print qq| - - |; - - if ($form->{menubar}) { - require "$form->{path}/menu.pl"; - &menubar; - } + - print qq| @@ -1081,162 +1482,158 @@ sub addtop100 { |; $lxdebug->leave_sub(); -}# end addtop100 - +} # end addtop100 +# +# Report for Wares. +# Warning, deep magic ahead. +# This function parses the requested details, sanity checks them, and converts them into a format thats usable for IC->all_parts +# +# flags coming from the form: +# hardcoded: +# searchitems=part revers=0 lastsort='' +# +# filter: +# partnumber ean description partsgroup serialnumber make model drawing microfiche +# transdatefrom transdateto +# +# radio: +# itemstatus = active | onhand | short | obsolete | orphaned +# action = continue | top100 +# +# checkboxes: +# bought sold onorder ordered rfq quoted +# l_partnumber l_description l_serialnumber l_unit l_listprice l_sellprice l_lastcost +# l_linetotal l_priceupdate l_bin l_rop l_weight l_image l_drawing l_microfiche +# l_partsgroup l_subtotal l_soldtotal l_deliverydate +# +# hiddens: +# nextsub login password revers lastsort sort ndxs_counter +# sub generate_report { $lxdebug->enter_sub(); - $revers = $form->{revers}; + my ($revers, $lastsort, $description); + my (@column_index, %column_header, %column_data, @columns, @options, @callbacks); + my ($totalsellprice, $totallastcost, $totallistprice, $subtotalonhand, $subtotalsellprice, $subtotallastcost, $subtotallistprice); + my ($colspan, $sameitem, $onhand, $align); + + $revers = $form->{revers}; $lastsort = $form->{lastsort}; - if (($form->{lastsort} eq "")&&($form->{sort} eq undef)) - { + # sorting and direction of sorting + # ToDO: change this to the simpler field+direction method + if (($form->{lastsort} eq "") && ($form->{sort} eq undef)) { + $form->{revers} = 0; + $form->{lastsort} = "partnumber"; + $form->{sort} = "partnumber"; + } else { + if ($form->{lastsort} eq $form->{sort}) { + $form->{revers} = 1 - $form->{revers}; + } else { $form->{revers} = 0; - $form->{lastsort} = "partnumber"; - $form->{sort} = "partnumber"; - } - else - { - # switch between backward sorting of tables - if ($form->{lastsort} eq $form->{sort}) - { - if ($form->{revers}==0) - { - $form->{revers} = 1; - } - else - { - $form->{revers} = 0; - }#fi - } - else - { - $form->{revers}== 0; $form->{lastsort} = $form->{sort}; - }#fi - }#fi - - $callback = "$form->{script}?action=generate_report&path=$form->{path}&login=$form->{login}&password=$form->{password}&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; - } + } #fi + } #fi + + # special case if we have a serialnumber limit search + # serialnumbers are only given in invoices and orders, + # so they can only pop up in bought, sold, rfq, and quoted stuff + $form->{no_sn_joins} = 'Y' if ( !$form->{bought} && !$form->{sold} + && !$form->{rfq} && !$form->{quoted} + && ($form->{l_serialnumber} || $form->{serialnumber})); + + # special case for any checkbox of bought | sold | onorder | ordered | rfq | quoted. + # if any of these are ticked the behavior changes slightly for lastcost + # since all those are aggregation checks for the legder tables this is an internal switch + # refered to as ledgerchecks + $form->{ledgerchecks} = 'Y' if ( $form->{bought} || $form->{sold} || $form->{onorder} + || $form->{ordered} || $form->{rfq} || $form->{quoted}); + + # if something should be aktivated if something else is active, enter it here + my %dependencies = ( + onhand => [ qw(l_onhand) ], + short => [ qw(l_onhand) ], + onorder => [ qw(l_ordnumber) ], + ordered => [ qw(l_ordnumber) ], + rfq => [ qw(l_quonumber) ], + quoted => [ qw(l_quonumber) ], + bought => [ qw(l_invnumber) ], + sold => [ qw(l_invnumber) ], + ledgerchecks => [ qw(l_name) ], + serialnumber => [ qw(l_serialnumber) ], + no_sn_joins => [ qw(bought sold) ], + ); + + # these strings get displayed at the top of the results to indicate the user which switches were used + my %optiontexts = ( + active => $locale->text('Active'), + obsolete => $locale->text('Obsolete'), + orphaned => $locale->text('Orphaned'), + onhand => $locale->text('On Hand'), + short => $locale->text('Short'), + onorder => $locale->text('On Order'), + ordered => $locale->text('Ordered'), + rfq => $locale->text('RFQ'), + quoted => $locale->text('Quoted'), + bought => $locale->text('Bought'), + sold => $locale->text('Sold'), + 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}'", + serialnumber => $locale->text('Serial Number') . ": '$form->{serialnumber}'", + description => $locale->text('Part Description') . ": '$form->{description}'", + make => $locale->text('Make') . ": '$form->{make}'", + model => $locale->text('Model') . ": '$form->{model}'", + drawing => $locale->text('Drawing') . ": '$form->{drawing}'", + microfiche => $locale->text('Microfiche') . ": '$form->{microfiche}'", + l_soldtotal => $locale->text('soldtotal'), + ); + + # this local subfunction generates a callback token from the input key. + # easy to join into a callback later + sub callback_token { + map { /\w+$/; return "&$&=$form->{$&}" } @_; + } + + my @itemstatus_keys = qw(active obsolete orphaned onhand short); + my @callback_keys = qw(onorder ordered rfq quoted bought sold partnumber partsgroup serialnumber description make model + drawing microfiche l_soldtotal l_deliverydate transdatefrom transdateto); + my $callback = "$form->{script}?action=generate_report"; + map { $callback .= "&$_=" . $form->escape($form->{$_}) } qw(login password searchitems itemstatus bom l_linetotal title); + + # calculate dependencies + for (@itemstatus_keys, @callback_keys) { + next if ($form->{itemstatus} ne $_ && !$form->{$_}); + map { $form->{$_} = 'Y' } @{ $dependencies{$_} } if $dependencies{$_}; } - IC->all_parts(\%myconfig, \%$form); - - - 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')." : "; + # generate callback and optionstrings + for my $key (@itemstatus_keys, @callback_keys) { + next if ($form->{itemstatus} ne $key && !$form->{$key}); + push @options, $optiontexts{$key}; + push @callbacks, callback_token($key) if grep { $_ eq $key } @callback_keys;; } - 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}) { + my $option = $locale->text('Options') . ': ' . join(', ', grep $_, @options) . '
'; + $callback .= join '', grep $_, @callbacks; - $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); - } - } + $lxdebug->message(0, $callback); - $option .= "
"; + IC->all_parts(\%myconfig, \%$form); + + # special case for lastcost + $form->{l_lastcost} = "" if $form->{ledgerchecks}; - if ($form->{partnumber}) { - $callback .= "&partnumber=$form->{partnumber}"; - $option .= $locale->text('Part Number').qq| : $form->{partnumber}
|; - } - 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/ -/
/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}
|; - } - # table soldtotal aktive - if ($form->{l_soldtotal}) - { - $callback .= "&soldtotal=$form->{soldtotal}"; - $option .= $locale->text('soldtotal').qq| : $form->{soldtotal}
|; + $description =~ s/\n/
/g; } - @columns = $form->sort_columns(qw(partnumber description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal)); + @columns = $form->sort_columns( + qw(partnumber description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice + lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber soldtotal deliverydate) + ); if ($form->{l_linetotal}) { $form->{l_onhand} = "Y"; @@ -1244,30 +1641,37 @@ sub generate_report { if ($form->{l_lastcost}) { $form->{l_linetotallastcost} = "Y"; if (($form->{searchitems} eq 'assembly') && !$form->{bom}) { - $form->{l_linetotallastcost} = ""; + $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}) { + if ( $form->{bought} + || $form->{sold} + || $form->{onorder} + || $form->{ordered} + || $form->{rfq} + || $form->{quoted}) { $form->{l_onhand} = "Y"; } else { $form->{l_linetotalsellprice} = ""; - $form->{l_linetotallastcost} = ""; + $form->{l_linetotallastcost} = ""; } } - $form->{l_lastcost} = "" if ($form->{searchitems} eq 'assembly' && !$form->{bom}); + $form->{l_lastcost} = "" + if ($form->{searchitems} eq 'assembly' && !$form->{bom}); - foreach $item (@columns) { + foreach my $item (@columns) { if ($form->{"l_$item"} eq "Y") { push @column_index, $item; @@ -1279,35 +1683,96 @@ sub generate_report { if ($form->{l_subtotal} eq 'Y') { $callback .= "&l_subtotal=Y"; } - $column_header{partnumber} = qq||; - $column_header{description} = qq||; - $column_header{partsgroup} = qq||; - $column_header{bin} = qq||; - $column_header{priceupdate} = qq||; - $column_header{onhand} = qq||; - $column_header{unit} = qq||; - $column_header{listprice} = qq||; - $column_header{lastcost} = qq||; - $column_header{rop} = qq||; - $column_header{weight} = qq||; - - $column_header{invnumber} = qq||; - $column_header{ordnumber} = qq||; - $column_header{quonumber} = qq||; - - $column_header{name} = qq||; - - $column_header{sellprice} = qq||; - $column_header{linetotalsellprice} = qq||; - $column_header{linetotallastcost} = qq||; - $column_header{linetotallistprice} = qq||; - - $column_header{image} = qq||; - $column_header{drawing} = qq||; - $column_header{microfiche} = qq||; - - $column_header{serialnumber} = qq||; - $column_header{soldtotal} = qq||; + $column_header{partnumber} = + qq||; + $column_header{description} = + qq||; + $column_header{partsgroup} = + qq||; + $column_header{bin} = + qq||; + $column_header{priceupdate} = + qq||; + $column_header{onhand} = + qq||; + $column_header{unit} = + qq||; + $column_header{listprice} = + qq||; + $column_header{lastcost} = + qq||; + $column_header{rop} = + qq||; + $column_header{weight} = + qq||; + + $column_header{invnumber} = + qq||; + $column_header{ordnumber} = + qq||; + $column_header{quonumber} = + qq||; + + $column_header{name} = + qq||; + + $column_header{sellprice} = + qq||; + $column_header{linetotalsellprice} = + qq||; + $column_header{linetotallastcost} = + qq||; + $column_header{linetotallistprice} = + qq||; + + $column_header{image} = + qq||; + $column_header{drawing} = + qq||; + $column_header{microfiche} = + qq||; + + $column_header{serialnumber} = + qq||; + $column_header{soldtotal} = + qq||; + + $column_header{deliverydate} = + qq||; $form->header; $colspan = $#column_index + 1; @@ -1332,7 +1797,6 @@ sub generate_report { |; - # add order to callback $form->{callback} = $callback .= "&sort=$form->{sort}"; @@ -1340,22 +1804,23 @@ sub generate_report { $callback = $form->escape($callback); if (@{ $form->{parts} }) { - $sameitem = $form->{parts}->[0]->{$form->{sort}}; + $sameitem = $form->{parts}->[0]->{ $form->{sort} }; } - foreach $ref (@{ $form->{parts} }) { + foreach my $ref (@{ $form->{parts} }) { + my $i = 0; if ($form->{l_subtotal} eq 'Y' && !$ref->{assemblyitem}) { - if ($sameitem ne $ref->{$form->{sort}}) { - &parts_subtotal; - $sameitem = $ref->{$form->{sort}}; + if ($sameitem ne $ref->{ $form->{sort} }) { + &parts_subtotal; + $sameitem = $ref->{ $form->{sort} }; } } $ref->{exchangerate} = 1 unless $ref->{exchangerate}; $ref->{sellprice} *= $ref->{exchangerate}; $ref->{listprice} *= $ref->{exchangerate}; - $ref->{lastcost} *= $ref->{exchangerate}; + $ref->{lastcost} *= $ref->{exchangerate}; # use this for assemblies $onhand = $ref->{onhand}; @@ -1369,51 +1834,99 @@ sub generate_report { $ref->{description} =~ s/ /
/g; - $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} = ""; + $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}; + $totallastcost += $onhand * $ref->{lastcost}; $totallistprice += $onhand * $ref->{listprice}; - $subtotalonhand += $onhand; + $subtotalonhand += $onhand; $subtotalsellprice += $onhand * $ref->{sellprice}; - $subtotallastcost += $onhand * $ref->{lastcost}; + $subtotallastcost += $onhand * $ref->{lastcost}; $subtotallistprice += $onhand * $ref->{listprice}; } - $column_data{rop} = ""; - $column_data{weight} = ""; - $column_data{unit} = ""; - $column_data{bin} = ""; + $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{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{image} = + ($ref->{image}) + ? "" + : ""; + $column_data{drawing} = + ($ref->{drawing}) + ? "" + : ""; + $column_data{microfiche} = + ($ref->{microfiche}) + ? "" + : ""; $column_data{serialnumber} = ""; - $column_data{soldtotal} = ""; + $column_data{soldtotal} = + ""; + + $column_data{deliverydate} = ""; - $i++; $i %= 2; + $i++; + $i %= 2; print ""; map { print "\n$column_data{$_}" } @column_index; @@ -1424,16 +1937,24 @@ sub generate_report { } - if ($form->{l_subtotal} eq 'Y') { &parts_subtotal; } if ($form->{"l_linetotal"}) { map { $column_data{$_} = "" } @column_index; - $column_data{linetotalsellprice} = ""; - $column_data{linetotallastcost} = ""; - $column_data{linetotallistprice} = ""; + $column_data{linetotalsellprice} = + ""; + $column_data{linetotallastcost} = + ""; + $column_data{linetotallistprice} = + ""; print ""; @@ -1449,7 +1970,6 @@ sub generate_report { |; - print qq|
@@ -1460,20 +1980,13 @@ sub generate_report { {searchitems}> -{path}> {login}> {password}>|; print qq| - |; - + - if ($form->{menubar}) { - require "$form->{path}/menu.pl"; - &menubar; - } - - print qq| @@ -1481,26 +1994,47 @@ sub generate_report { |; $lxdebug->leave_sub(); -}#end generate_report - - +} #end generate_report sub parts_subtotal { $lxdebug->enter_sub(); + + # imports + my %column_data = $main::column_data; + my @column_index = $main::column_index; + my $subtotalonhand = $main::subtotalonhand; + my $totalsellprice = $main::totalsellprice; + my $totallastcost = $main::totallastcost; + my $totallistprice = $main::totallistprice; + my $subtotalsellprice = $main::subtotalsellprice; + my $subtotallastcost = $main::subtotallastcost; + my $subtotallistprice = $main::subtotallistprice; map { $column_data{$_} = "" } @column_index; $subtotalonhand = 0 if ($form->{searchitems} eq 'assembly' && $form->{bom}); - $column_data{onhand} = ""; - - $column_data{linetotalsellprice} = ""; - $column_data{linetotallistprice} = ""; - $column_data{linetotallastcost} = ""; - - $subtotalonhand = 0; + $column_data{onhand} = + ""; + + $column_data{linetotalsellprice} = + ""; + $column_data{linetotallistprice} = + ""; + $column_data{linetotallastcost} = + ""; + + $subtotalonhand = 0; $subtotalsellprice = 0; $subtotallistprice = 0; - $subtotallastcost = 0; + $subtotallastcost = 0; print ""; @@ -1513,14 +2047,16 @@ sub parts_subtotal { $lxdebug->leave_sub(); } - - sub edit { $lxdebug->enter_sub(); - + # show history button + $form->{javascript} = qq||; + #/show hhistory button IC->get_part(\%myconfig, \%$form); - $form->{title} = $locale->text('Edit '.ucfirst $form->{item}); + $form->{"original_partnumber"} = $form->{"partnumber"}; + + $form->{title} = $locale->text('Edit ' . ucfirst $form->{item}); &link_part; &display_form; @@ -1528,45 +2064,48 @@ sub edit { $lxdebug->leave_sub(); } - - sub link_part { $lxdebug->enter_sub(); IC->create_links("IC", \%myconfig, \%$form); - # currencies - map { $form->{selectcurrency} .= "|; + foreach my $item (@{ $form->{payment_terms} }) { + if ($form->{payment_id} eq $item->{id}) { + $payment .= qq||; + } else { + $payment .= qq||; + } + } + + if (($rows = $form->numtextrows($form->{notes}, 40)) < 2) { - $rows = 2; + $rows = 4; } - $notes = qq||; + $notes = + qq||; if (($rows = $form->numtextrows($form->{description}, 40)) > 1) { - $description = qq||; + $description = + qq||; } else { - $description = qq||; + $description = + qq||; } - foreach $item (split / /, $form->{taxaccounts}) { + $ean = qq||; + + foreach my $item (split / /, $form->{taxaccounts}) { $form->{"IC_tax_$item"} = ($form->{"IC_tax_$item"}) ? "checked" : ""; } + IC->retrieve_buchungsgruppen(\%myconfig, $form); + if (@{ $form->{BUCHUNGSGRUPPEN} }) { + foreach my $item (@{ $form->{BUCHUNGSGRUPPEN} }) { + if ($item->{id} == $form->{buchungsgruppen_id}) { + $form->{selectbuchungsgruppe} .= + " + + + |; + + # set option - foreach $item (qw(IC IC_income IC_expense)) { + foreach my $item (qw(IC IC_income IC_expense)) { if ($form->{$item}) { if ($form->{id} && $form->{orphaned}) { - $form->{"select$item"} =~ s/ selected//; - $form->{"select$item"} =~ s/option>\Q$form->{$item}\E/option selected>$form->{$item}/; + $form->{"select$item"} =~ s/ selected//; + $form->{"select$item"} =~ + s/option>\Q$form->{$item}\E/option selected>$form->{$item}/; } else { - $form->{"select$item"} = qq| - + |; if (!$eur) { $linkaccounts = qq| - + |; } - + if ($form->{item} eq "part") { $linkaccounts .= qq| - + - + |; - - $weight = qq| - + @@ -1730,24 +2309,21 @@ sub form_header { } - if ($form->{item} eq "assembly") { $lastcost = ""; $linkaccounts = qq| - + |; - - $weight = qq| - + |; - + } - if ($form->{item} eq "service") { - + $linkaccounts = qq| - + - + |; + } + $linkaccounts = qq||; + if ($form->{IC_cogs_default}) { + $form->{IC_expense_default} = $form->{IC_cogs_default}; } + if (($form->{item} eq "service") || ($form->{item} eq "part")) { + $linkaccounts .= qq||; + } + if ($form->{item} eq "part") { + $linkaccounts .= qq||; + } if ($form->{item} ne 'service') { - $n = ($form->{onhand} > 0) ? "1" : "0"; + $n = ($form->{onhand} > 0) ? "1" : "0"; $rop = qq| - - + + |; if ($form->{item} eq 'assembly') { $rop .= qq| - + |; @@ -1808,39 +2389,52 @@ sub form_header { $rop .= qq| - + |; - + $bin = qq| - + |; $vegv = qq| - + - + -|; +|; + $notdiscountableok = ($form->{not_discountable}) == 1 ? "checked" : ""; + $notdiscountable .= qq| + + + + +|; + + $formel = + qq||; $imagelinks = qq| - + |; } - $shopok=$form->{shop} == 1 ? "checked" : ""; - $obsolete .= qq| + $shopok = $form->{shop} == 1 ? "checked" : ""; + $shop .= qq| - + |; -# type=submit $locale->text('Add Part') -# type=submit $locale->text('Add Service') -# type=submit $locale->text('Add Assembly') + # type=submit $locale->text('Add Part') + # type=submit $locale->text('Add Service') + # type=submit $locale->text('Add Assembly') -# type=submit $locale->text('Edit Part') -# type=submit $locale->text('Edit Service') -# type=submit $locale->text('Edit Assembly') + # type=submit $locale->text('Edit Part') + # type=submit $locale->text('Edit Service') + # type=submit $locale->text('Edit Assembly') # use JavaScript Calendar or not - $form->{jsscript} = $jscalendar; - $jsscript = ""; - if ($form->{jsscript}) - { + my ($jsscript, $button1); + $form->{jsscript} = 1; + $jsscript = ""; + if ($form->{jsscript}) { + # with JavaScript Calendar $button1 = qq| - + |; - #write Trigger - $jsscript = Form->write_trigger(\%myconfig,"1","priceupdate","BL","trigger1","","",""); - } - else - { - # without JavaScript Calendar - $button1 = qq| + + #write Trigger + $jsscript = + Form->write_trigger(\%myconfig, "1", "priceupdate", "BL", "trigger1"); + } else { + + # without JavaScript Calendar + $button1 = qq| |; - } + } + + my $unit_select = ''; + if (!$form->{"unit_changeable"}) { + $unit_select .= '' . $form->{"unit"}; + } else { + my $units = AM->retrieve_units(\%myconfig, $form, $form->{"item"} eq "service" ? "service" : "dimension"); + $unit_select .= AM->unit_select_html($units, "unit", $form->{"unit"}); + } $form->{fokus} = "ic.partnumber"; $form->header; print qq| - + + {script}> @@ -1913,6 +2520,8 @@ sub form_header { {rowcount}> + +
$form->{title}
+ + + + + + + + + + + + + $serialnumber + + $makemodel + + + + + + + $toplevel + + + + + $bought + + + + |; + print qq| + + + + + +
| . $locale->text('Part Number') . qq|
| + . $locale->text('Part Description') . qq|
| . $locale->text('Group') . qq|
| . $locale->text('Drawing') . qq|| . $locale->text('Microfiche') . qq|
+  | + . $locale->text('Active') . qq| + $onhand +  | + . $locale->text('Obsolete') . qq| +  | + . $locale->text('Orphaned') . qq| +
+
+
+ + + + + + + + + + + + + + + + +|; + for my $i (1 .. $form->{price_rows}) { + print qq| + + + + + + +|; + } + + print qq| +
| . $locale->text('Preisklasse') . qq|| . $locale->text('Preis') . qq|| . $locale->text('Prozentual/Absolut') . qq|
| . $locale->text('Sell Price') . qq|/
| . $locale->text('List Price') . qq|/
$form->{"pricegroup_$i"}/
+

+ +{price_rows}> + +{login}> +{password}> + +
+ |; $lxdebug->leave_sub(); -}#end search() +} #end search() + +sub confirm_price_update { + $lxdebug->enter_sub(); + + + $form->{nextsub} = "update_prices"; + $form->header; + + print qq| + + +
{script}> +|; + + # delete action variable + map { delete $form->{$_} } qw(action header); + + foreach my $key (keys %$form) { + $form->{$key} =~ s/\"/"/g; + print qq|\n|; + } + + print qq| +

| . $locale->text('Confirm!') . qq|

+ +

| + . $locale->text('Are you sure you want to update the prices') +. qq|

+ +

+ +

+|; + + $lxdebug->leave_sub(); +} +sub update_prices { + $lxdebug->enter_sub(); + + if (IC->update_prices(\%myconfig, \%$form)) { + $form->redirect($form->{update_count} . $locale->text('prices updated!')); + } else { + $form->error($locale->text('Could not update prices!')); + } + + $lxdebug->leave_sub(); +} sub choice { $lxdebug->enter_sub(); + my $j = $main::j; + my $lastndx = $main::lastndx; + + my ($totop100); + $form->{title} = $locale->text('Top 100 hinzufuegen'); - - $form->header; - -print qq| + + $form->header; + + print qq|
{script}> @@ -370,12 +657,11 @@ print qq| |; - -print qq| + print qq| - - + + @@ -383,10 +669,9 @@ print qq|
|.$locale->text('Part Number').qq||.$locale->text('Part Description').qq|| . $locale->text('Part Number') . qq|| . $locale->text('Part Description') . qq|

|; - -print qq| -{path}> + print qq| + {login}> {password}> @@ -418,36 +703,40 @@ print qq| {extras}>|; -# if choice set data -if ($form->{ndx}) - { - for($i=0;$i<$form->{ndxs_counter};$i++) - { - # prepeare data - $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"}; + my ($partnumber, $description, $unit, $sellprice, $soldtotal); + # if choice set data + if ($form->{ndx}) { + for (my $i = 0; $i < $form->{ndxs_counter}; $i++) { + + # prepeare data + $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"}; # insert data into top100 - push @{$form->{parts}},{number => "",partnumber => "$partnumber",description => "$description",unit => "$unit",sellprice => "$sellprice", soldtotal => "$soldtotal"}; - }#rof - }#fi + push @{ $form->{parts} }, + { number => "", + partnumber => "$partnumber", + description => "$description", + unit => "$unit", + sellprice => "$sellprice", + soldtotal => "$soldtotal" }; + } #rof + } #fi $totop100 = ""; # set data for next page - 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"}; - + 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"}> @@ -455,86 +744,66 @@ if ($form->{ndx}) {"totop100_sellprice_$i"}> {"totop100_soldtotal_$i"}> |; - }#rof - }#fi + } #rof + } #fi -print $totop100; + print $totop100; -print qq| - + print qq| +
|; $lxdebug->leave_sub(); -}#end choice - - +} #end choice sub list { $lxdebug->enter_sub(); - # get parts for - if (($form->{partnumber} eq "") and ($form->{description} eq "")) - { - IC->get_parts(\%myconfig, \%$form, ""); - } - else - { - if ((!($form->{partnumber} eq "")) and ($form->{description} eq "")) - { - IC->get_parts(\%myconfig, \%$form, "partnumber"); - } - else - { - if (($form->{partnumber} eq "") and (!($form->{description} eq ""))) - { - IC->get_parts(\%myconfig, \%$form, "description"); - } - else - { - IC->get_parts(\%myconfig, \%$form, "all"); - }#fi - }#fi - }#fi - + my $lastndx = $main::lastndx; + + 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| + print qq|
- + - - - - - + + + + + |; - - my $j=0; - my $i=$form->{rows}; - for ($j=1; $j<=$i; $j++){ + my $j = 0; + my $i = $form->{rows}; + + for ($j = 1; $j <= $i; $j++) { print qq| |; - if ($j==1) { - print qq| + if ($j == 1) { + print qq| |; - } - else { - print qq| + } else { + print qq| |; - } - print qq| + } + print qq| @@ -545,14 +814,13 @@ print qq| |; } -print qq| + print qq|
|.$locale->text('choice part').qq|| . $locale->text('choice part') . 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|| . $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"}

-{path}> {login}> {password}> @@ -580,24 +848,17 @@ print qq| {ndxs_counter}>|; + my $totop100 = ""; -$totop100 = ""; - -if (($form->{ndxs_counter})>0) - { - for($i=1;($i<$form->{ndxs_counter}+1);$i++) - { - $j1=$form->{"totop100_partnumber_$i"}; - $j2=$form->{"totop100_description_$i"}; - $j3=$form->{"totop100_unit_$i"}; - $j4=$form->{"totop100_sellprice_$i"}; - $j5=$form->{"totop100_soldtotal_$i"}; - - $partnumber=$j1; - $description=$j2; - $unit=$j3; - $sellprice=$j4; - $soldtotal=$j5; + if (($form->{ndxs_counter}) > 0) { + for ($i = 1; ($i < $form->{ndxs_counter} + 1); $i++) { + + # ToDO: does this really make sense? + $main::partnumber = $form->{"totop100_partnumber_$i"}; + $main::description = $form->{"totop100_description_$i"}; + $main::unit = $form->{"totop100_unit_$i"}; + $main::sellprice = $form->{"totop100_sellprice_$i"}; + $main::soldtotal = $form->{"totop100_soldtotal_$i"}; $totop100 .= qq| {"totop100_partnumber_$i"}> @@ -606,146 +867,159 @@ if (($form->{ndxs_counter})>0) {"totop100_sellprice_$i"}> {"totop100_soldtotal_$i"}> |; - }#rof - }#fi + } #rof + } #fi -print $totop100; + print $totop100; -print qq| - + print qq| +
|; $lxdebug->leave_sub(); -}#end list() - +} #end list() sub top100 { $lxdebug->enter_sub(); - if ($form->{ndx}){ + if ($form->{ndx}) { $form->{ndxs_counter}++; - - if ($form->{ndxs_counter}>0){ - $index = $form->{ndx}; - - $j1 = $form->{"new_partnumber_$index"}; - $form->{"totop100_partnumber_$form->{ndxs_counter}"} =$j1; - $j2 = $form->{"new_description_$index"}; - $form->{"totop100_description_$form->{ndxs_counter}"} = $j2; - $j3 = $form->{"new_unit_$index"}; - $form->{"totop100_unit_$form->{ndxs_counter}"} = $j3; - $j4 = $form->{"new_sellprice_$index"}; - $form->{"totop100_sellprice_$form->{ndxs_counter}"} = $j4; - $j5 = $form->{"new_soldtotal_$index"}; - $form->{"totop100_soldtotal_$form->{ndxs_counter}"} = $j5; - }#fi - }#fi + 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 - +} #end top100 sub addtop100 { $lxdebug->enter_sub(); - $form->{top100} = "top100"; + 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"; - $callback .= "&form->{top100}=$form->{top100}"; + $form->{soldtotal} = "soldtotal"; + $form->{sort} = "soldtotal"; + $form->{l_qty} = "N"; $form->{l_linetotal} = ""; - $form->{revers} = 1; - $form->{number} = "position"; - $form->{l_number} = "Y"; - - my $totop100 = ""; + $form->{revers} = 1; + $form->{number} = "position"; + $form->{l_number} = "Y"; + + $totop100 = ""; $form->{title} = $locale->text('Top 100'); - - $revers = $form->{revers}; + + $revers = $form->{revers}; $lastsort = $form->{lastsort}; - if (($form->{lastsort} eq "")&&($form->{sort} eq undef)) - { - $form->{revers} = 0; - $form->{lastsort} = "partnumber"; - $form->{sort} = "partnumber"; - }#fi + if (($form->{lastsort} eq "") && ($form->{sort} eq undef)) { + $form->{revers} = 0; + $form->{lastsort} = "partnumber"; + $form->{sort} = "partnumber"; + } #fi - $callback = "$form->{script}?action=top100&path=$form->{path}&login=$form->{login}&password=$form->{password}&searchitems=$form->{searchitems}&itemstatus=$form->{itemstatus}&bom=$form->{bom}&l_linetotal=$form->{l_linetotal}&title=".$form->escape($form->{title},1); + $callback = + "$form->{script}?action=top100&login=$form->{login}&password=$form->{password}&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}) { + unless ( $form->{bought} + || $form->{sold} + || $form->{rfq} + || $form->{quoted}) { $form->{bought} = $form->{sold} = 1; } } IC->all_parts(\%myconfig, \%$form); if ($form->{itemstatus} eq 'active') { - $option .= $locale->text('Active')." : "; + $option .= $locale->text('Active') . " : "; } if ($form->{itemstatus} eq 'obsolete') { - $option .= $locale->text('Obsolete')." : "; + $option .= $locale->text('Obsolete') . " : "; } if ($form->{itemstatus} eq 'orphaned') { - $option .= $locale->text('Orphaned')." : "; + $option .= $locale->text('Orphaned') . " : "; } if ($form->{itemstatus} eq 'onhand') { - $option .= $locale->text('On Hand')." : "; + $option .= $locale->text('On Hand') . " : "; $form->{l_onhand} = "Y"; } if ($form->{itemstatus} eq 'short') { - $option .= $locale->text('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')." : "; + $option .= $locale->text('On Order') . " : "; } if ($form->{ordered}) { $form->{l_ordnumber} = "Y"; $callback .= "&ordered=$form->{ordered}"; - $option .= $locale->text('Ordered')." : "; + $option .= $locale->text('Ordered') . " : "; } if ($form->{rfq}) { $form->{l_quonumber} = "Y"; $callback .= "&rfq=$form->{rfq}"; - $option .= $locale->text('RFQ')." : "; + $option .= $locale->text('RFQ') . " : "; } if ($form->{quoted}) { $form->{l_quonumber} = "Y"; $callback .= ""ed=$form->{quoted}"; - $option .= $locale->text('Quoted')." : "; + $option .= $locale->text('Quoted') . " : "; } if ($form->{bought}) { $form->{l_invnumber} = "Y"; $callback .= "&bought=$form->{bought}"; - $option .= $locale->text('Bought')." : "; + $option .= $locale->text('Bought') . " : "; } if ($form->{sold}) { $form->{l_invnumber} = "Y"; $callback .= "&sold=$form->{sold}"; - $option .= $locale->text('Sold')." : "; + $option .= $locale->text('Sold') . " : "; } - if ($form->{bought} || $form->{sold} || $form->{onorder} || $form->{ordered} || $form->{rfq} || $form->{quoted}) { + if ( $form->{bought} + || $form->{sold} + || $form->{onorder} + || $form->{ordered} + || $form->{rfq} + || $form->{quoted}) { $form->{l_lastcost} = ""; - $form->{l_name} = "Y"; + $form->{l_name} = "Y"; if ($form->{transdatefrom}) { $callback .= "&transdatefrom=$form->{transdatefrom}"; - $option .= "\n
".$locale->text('From')." ".$locale->date(\%myconfig, $form->{transdatefrom}, 1); + $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 .= "\n
" + . $locale->text('To') + . " " + . $locale->date(\%myconfig, $form->{transdateto}, 1); } } @@ -753,46 +1027,53 @@ sub addtop100 { if ($form->{partnumber}) { $callback .= "&partnumber=$form->{partnumber}"; - $option .= $locale->text('Part Number').qq| : $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}
|; + $option .= $locale->text('Group') . qq| : $form->{partsgroup}
|; } if ($form->{serialnumber}) { $callback .= "&serialnumber=$form->{serialnumber}"; - $option .= $locale->text('Serial Number').qq| : $form->{serialnumber}
|; + $option .= + $locale->text('Serial Number') . qq| : $form->{serialnumber}
|; } if ($form->{description}) { $callback .= "&description=$form->{description}"; $description = $form->{description}; $description =~ s/ /
/g; - $option .= $locale->text('Part Description').qq| : $form->{description}
|; + $option .= + $locale->text('Part Description') . qq| : $form->{description}
|; } if ($form->{make}) { $callback .= "&make=$form->{make}"; - $option .= $locale->text('Make').qq| : $form->{make}
|; + $option .= $locale->text('Make') . qq| : $form->{make}
|; } if ($form->{model}) { $callback .= "&model=$form->{model}"; - $option .= $locale->text('Model').qq| : $form->{model}
|; + $option .= $locale->text('Model') . qq| : $form->{model}
|; } if ($form->{drawing}) { $callback .= "&drawing=$form->{drawing}"; - $option .= $locale->text('Drawing').qq| : $form->{drawing}
|; + $option .= $locale->text('Drawing') . qq| : $form->{drawing}
|; } if ($form->{microfiche}) { $callback .= "µfiche=$form->{microfiche}"; - $option .= $locale->text('Microfiche').qq| : $form->{microfiche}
|; + $option .= $locale->text('Microfiche') . qq| : $form->{microfiche}
|; } - if ($form->{l_soldtotal}) - { + if ($form->{l_soldtotal}) { $callback .= "&soldtotal=$form->{soldtotal}"; - $option .= $locale->text('soldtotal').qq| : $form->{soldtotal}
|; + $option .= $locale->text('soldtotal') . qq| : $form->{soldtotal}
|; } - @columns = $form->sort_columns(qw(number partnumber description partsgroup bin onhand rop unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber name serialnumber 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"; @@ -800,30 +1081,37 @@ sub addtop100 { if ($form->{l_lastcost}) { $form->{l_linetotallastcost} = "Y"; if (($form->{searchitems} eq 'assembly') && !$form->{bom}) { - $form->{l_linetotallastcost} = ""; + $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}) { + if ( $form->{bought} + || $form->{sold} + || $form->{onorder} + || $form->{ordered} + || $form->{rfq} + || $form->{quoted}) { $form->{l_onhand} = "Y"; } else { $form->{l_linetotalsellprice} = ""; - $form->{l_linetotallastcost} = ""; + $form->{l_linetotallastcost} = ""; } } - $form->{l_lastcost} = "" if ($form->{searchitems} eq 'assembly' && !$form->{bom}); + $form->{l_lastcost} = "" + if ($form->{searchitems} eq 'assembly' && !$form->{bom}); - foreach $item (@columns) { + foreach my $item (@columns) { if ($form->{"l_$item"} eq "Y") { push @column_index, $item; @@ -836,39 +1124,96 @@ sub addtop100 { $callback .= "&l_subtotal=Y"; } - $column_header{number} = qq|
|.$locale->text('number').qq|{revers}&lastsort=$form->{lastsort}>|.$locale->text('Part Number').qq|{revers}&lastsort=$form->{lastsort}>|.$locale->text('Part Description').qq||.$locale->text('Group').qq||.$locale->text('Bin').qq||.$locale->text('Updated').qq|{revers}&lastsort=$form->{lastsort}>|.$locale->text('Qty').qq||.$locale->text('Unit').qq||.$locale->text('List Price').qq||.$locale->text('Last Cost').qq||.$locale->text('ROP').qq||.$locale->text('Weight').qq||.$locale->text('Invoice Number').qq||.$locale->text('Order Number').qq||.$locale->text('Quotation').qq||.$locale->text('Name').qq||.$locale->text('Sell Price').qq||.$locale->text('Extended').qq||.$locale->text('Extended').qq||.$locale->text('Extended').qq||.$locale->text('Image').qq||.$locale->text('Drawing').qq||.$locale->text('Microfiche').qq||.$locale->text('Serial Number').qq|{revers}&lastsort=$form->{lastsort}>|.$locale->text('soldtotal').qq|| . $locale->text('number') . qq|{revers}&lastsort=$form->{lastsort}>| + . $locale->text('Part Number') + . qq|{revers}&lastsort=$form->{lastsort}>| + . $locale->text('Part Description') + . qq|| + . $locale->text('Group') + . qq|| + . $locale->text('Bin') + . qq|| + . $locale->text('Updated') + . qq|{revers}&lastsort=$form->{lastsort}>| + . $locale->text('Qty') + . qq|| . $locale->text('Unit') . qq|| + . $locale->text('List Price') + . qq|| . $locale->text('Last Cost') . qq|| . $locale->text('ROP') . qq|| . $locale->text('Weight') . qq|| + . $locale->text('Invoice Number') + . qq|| + . $locale->text('Order Number') + . qq|| + . $locale->text('Quotation') + . qq|| + . $locale->text('Name') + . qq|| + . $locale->text('Sell Price') + . qq|| . $locale->text('Extended') . qq|| . $locale->text('Extended') . qq|| . $locale->text('Extended') . qq|| . $locale->text('Image') . qq|| + . $locale->text('Drawing') + . qq|| + . $locale->text('Microfiche') + . qq|| + . $locale->text('Serial Number') + . qq|{revers}&lastsort=$form->{lastsort}>| + . $locale->text('soldtotal') + . qq|".$form->format_amount(\%myconfig, $ref->{number}, '', " ")."$ref->{partnumber} " + . $form->format_amount(\%myconfig, $ref->{number}) + . "$ref->{partnumber} $ref->{description} $ref->{partsgroup} ".$form->format_amount(\%myconfig, $ref->{onhand}, '', " ")."".$form->format_amount(\%myconfig, $ref->{sellprice}, 2, " ") . "".$form->format_amount(\%myconfig, $ref->{listprice}, 2, " ") . "".$form->format_amount(\%myconfig, $ref->{lastcost}, 2, " ") . "".$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, " ")."$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} " + . $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}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{invnumber}$ref->{invnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{ordnumber}$ref->{ordnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{quonumber}$ref->{quonumber}{module}.pl?action=edit&type=invoice&id=$ref->{trans_id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{invnumber}$ref->{invnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{ordnumber}$ref->{ordnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{quonumber}$ref->{quonumber}$ref->{name}{image}>{image} height=32 border=0> {drawing}>$ref->{drawing} {microfiche}>$ref->{microfiche} {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, " ")."" + . $form->format_amount(\%myconfig, $totalsellprice, 2) + . "" + . $form->format_amount(\%myconfig, $totallastcost, 2) + . "" + . $form->format_amount(\%myconfig, $totallistprice, 2) + . "
{revers}&lastsort=$form->{lastsort}>|.$locale->text('Part Number').qq|{revers}&lastsort=$form->{lastsort}>|.$locale->text('Part Description').qq||.$locale->text('Group').qq||.$locale->text('Bin').qq||.$locale->text('Updated').qq|{revers}&lastsort=$form->{lastsort}>|.$locale->text('Qty').qq||.$locale->text('Unit').qq||.$locale->text('List Price').qq||.$locale->text('Last Cost').qq||.$locale->text('ROP').qq||.$locale->text('Weight').qq||.$locale->text('Invoice Number').qq||.$locale->text('Order Number').qq||.$locale->text('Quotation').qq||.$locale->text('Name').qq||.$locale->text('Sell Price').qq||.$locale->text('Extended').qq||.$locale->text('Extended').qq||.$locale->text('Extended').qq||.$locale->text('Image').qq||.$locale->text('Drawing').qq||.$locale->text('Microfiche').qq||.$locale->text('Serial Number').qq|{revers}&lastsort=$form->{lastsort}>|.$locale->text('soldtotal').qq|{revers}&lastsort=$form->{lastsort}>| + . $locale->text('Part Number') + . qq|{revers}&lastsort=$form->{lastsort}>| + . $locale->text('Part Description') + . qq|| + . $locale->text('Group') + . qq|| + . $locale->text('Bin') + . qq|| + . $locale->text('Updated') + . qq|{revers}&lastsort=$form->{lastsort}>| + . $locale->text('Qty') + . qq|| . $locale->text('Unit') . qq|| + . $locale->text('List Price') + . qq|| . $locale->text('Last Cost') . qq|| . $locale->text('ROP') . qq|| . $locale->text('Weight') . qq|| + . $locale->text('Invoice Number') + . qq|| + . $locale->text('Order Number') + . qq|| + . $locale->text('Quotation') + . qq|| + . $locale->text('Name') + . qq|| + . $locale->text('Sell Price') + . qq|| . $locale->text('Extended') . qq|| . $locale->text('Extended') . qq|| . $locale->text('Extended') . qq|| . $locale->text('Image') . qq|| + . $locale->text('Drawing') + . qq|| + . $locale->text('Microfiche') + . qq|| + . $locale->text('Serial Number') + . qq|{revers}&lastsort=$form->{lastsort}>| + . $locale->text('soldtotal') + . qq|{revers}&lastsort=$form->{lastsort}>| + . $locale->text('deliverydate') + . qq|
{script}?action=edit&id=$ref->{id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{partnumber} $ref->{description} $ref->{partsgroup} ".$form->format_amount(\%myconfig, $ref->{onhand}, '', " ")."".$form->format_amount(\%myconfig, $ref->{sellprice}, 2, " ") . "".$form->format_amount(\%myconfig, $ref->{listprice}, 2, " ") . "".$form->format_amount(\%myconfig, $ref->{lastcost}, 2, " ") . "".$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, " ")."{script}?action=edit&id=$ref->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{partnumber} {script}?action=edit&id=$ref->{id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{description} $ref->{partsgroup} " + . $form->format_amount(\%myconfig, $ref->{onhand}) + . "" + . $form->format_amount(\%myconfig, $ref->{sellprice}, -2) + . "" + . $form->format_amount(\%myconfig, $ref->{listprice}, -2) + . "" + . $form->format_amount(\%myconfig, $ref->{lastcost}, -2) + . "" + . $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} " + . $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}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{invnumber}$ref->{invnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{ordnumber}$ref->{ordnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&path=$form->{path}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{quonumber}$ref->{quonumber}{module}.pl?action=edit&type=invoice&id=$ref->{trans_id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{invnumber}$ref->{invnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{ordnumber}$ref->{ordnumber}{module}.pl?action=edit&type=$ref->{type}&id=$ref->{trans_id}&login=$form->{login}&password=$form->{password}&callback=$callback>$ref->{quonumber}$ref->{quonumber}$ref->{name}{image}>{image} height=32 border=0> {drawing}>$ref->{drawing} {microfiche}>$ref->{microfiche} {image}>{image} height=32 border=0> {drawing}>$ref->{drawing} {microfiche}>$ref->{microfiche} $ref->{serialnumber}".$form->format_amount(\%myconfig, $ref->{soldtotal}, '', " ")."" + . $form->format_amount(\%myconfig, $ref->{soldtotal}) + . "$ref->{deliverydate}
 ".$form->format_amount(\%myconfig, $totalsellprice, 2, " ")."".$form->format_amount(\%myconfig, $totallastcost, 2, " ")."".$form->format_amount(\%myconfig, $totallistprice, 2, " ")."" + . $form->format_amount(\%myconfig, $totalsellprice, 2) + . "" + . $form->format_amount(\%myconfig, $totallastcost, 2) + . "" + . $form->format_amount(\%myconfig, $totallistprice, 2) + . "
 ".$form->format_amount(\%myconfig, $subtotalonhand, '', " ")."".$form->format_amount(\%myconfig, $subtotalsellprice, 2, " ")."".$form->format_amount(\%myconfig, $subtotallistprice, 2, " ")."".$form->format_amount(\%myconfig, $subtotallastcost, 2, " ")."" + . $form->format_amount(\%myconfig, $subtotalonhand) + . "" + . $form->format_amount(\%myconfig, $subtotalsellprice, 2) + . "" + . $form->format_amount(\%myconfig, $subtotallistprice, 2) + . "" + . $form->format_amount(\%myconfig, $subtotallastcost, 2) + . "
| . $locale->text('Buchungsgruppe') . qq|
|.$locale->text('Last Cost').qq|| + . $locale->text('Last Cost') . qq| {lastcost}>
|.$locale->text('Inventory').qq|| . $locale->text('Inventory') . qq|
|.$locale->text('Revenue').qq|| . $locale->text('Revenue') . qq|
|.$locale->text('COGS').qq|| . $locale->text('Expense') . qq|
|.$locale->text('Weight').qq|| . $locale->text('Weight') . qq| -
{weight}> -   - $form->{weightunit} - {weightunit}> -
|.$locale->text('Revenue').qq|| . $locale->text('Revenue') . qq|
|.$locale->text('Weight').qq|| . $locale->text('Weight') . qq| @@ -1755,52 +2331,57 @@ sub form_header {  $form->{weight} {weight}> -
-   - $form->{weightunit} - {weightunit}> -
|.$locale->text('Revenue').qq|| . $locale->text('Revenue') . qq|
|.$locale->text('Expense').qq|| . $locale->text('Expense') . qq|
|.$locale->text('On Hand').qq| |.$form->format_amount(\%myconfig, $form->{onhand}).qq|| . $locale->text('On Hand') . qq| | + . $form->format_amount(\%myconfig, $form->{onhand}) . qq|
|.$locale->text('Stock').qq|| . $locale->text('Stock') . qq| {stock}>
|.$locale->text('ROP').qq|| . $locale->text('ROP') . qq| {rop}>
|.$locale->text('Bin').qq|| . $locale->text('Bin') . qq| {bin}>
|.$locale->text('Verrechnungseinheit').qq|| + . $locale->text('Verrechnungseinheit') . qq| {ve}>
|.$locale->text('Geschäftsvolumen').qq|| + . $locale->text('Business Volume') . qq| {gv}>
| + . $locale->text('Not Discountable') . qq|
- + - + - +
|.$locale->text('Image').qq|| . $locale->text('Image') . qq| |.$locale->text('Microfiche').qq|| . $locale->text('Microfiche') . qq|
|.$locale->text('Drawing').qq|| . $locale->text('Drawing') . qq|
@@ -1853,53 +2447,66 @@ sub form_header { if ($form->{id}) { $obsolete = qq|
|.$locale->text('Obsolete').qq|| . $locale->text('Obsolete') . qq| {obsolete}>
|.$locale->text('Shopartikel').qq|| + . $locale->text('Shopartikel') . qq|
text('button').qq|>text('button') . qq|>
@@ -1923,8 +2532,8 @@ sub form_header { |; - $column_header{description} = qq||; - $column_header{bin} = qq||; - $column_header{onhand} = qq||; - $column_header{rop} = qq||; - $column_header{stock} = qq||; - - @column_index = (qw(partnumber description bin onhand rop stock)); - - $form->{title} = $locale->text('Stock Assembly'); - - $form->{callback} = "$form->{script}?action=stock_assembly&path=$form->{path}&login=$form->{login}&password=$form->{password}"; - - $form->header; - - $colspan = $#column_index + 1; - - print qq| - - -{script}> - -
- - + + @@ -1943,42 +2552,77 @@ sub form_header { @@ -1987,13 +2631,12 @@ sub form_header { $imagelinks - + $jsscript |; $lxdebug->leave_sub(); } - sub form_footer { $lxdebug->enter_sub(); @@ -2004,8 +2647,10 @@ sub form_footer { @@ -2015,7 +2660,6 @@ sub form_footer { } print qq| - {path}> {login}> {password}> @@ -2028,7 +2672,8 @@ sub form_footer {
|.$locale->text('Part Number').qq||.$locale->text('Part Description').qq|| . $locale->text('Part Number') . qq|| . $locale->text('Part Description') . qq| $group
- + - $linkaccounts + - + + - + + + + + + + + + + + +
|.$locale->text('Link Accounts').qq|| + . $locale->text('') . qq|
+ + $buchungsgruppe + $linkaccounts +
+
|.$locale->text('Notes').qq|| . $locale->text('Notes') . qq|| . $locale->text('Formula') . qq|
+ $notes + $formel +
| . $locale->text('EAN-Code') . qq|
+ + + $ean +
+ + + + + +
| . $locale->text('Payment Terms') . qq|
+
- + $button1 - + - + - + $lastcost - - + + $weight $rop $bin + $notdiscountable $vegv + $shop $obsolete
|.$locale->text('Updated').qq|| + . $locale->text('Updated') . qq|
|.$locale->text('List Price').qq|| . $locale->text('List Price') . qq| {listprice}>
|.$locale->text('Sell Price').qq|| . $locale->text('Sell Price') . qq| {sellprice}>
|.$locale->text('Unit').qq|| . $locale->text('Unit') . qq|$unit_select
- - + +
|.$locale->text('Total').qq| |.$form->format_amount(\%myconfig, $form->{assemblytotal}, 2).qq|| + . $locale->text('Total') . qq| | + . $form->format_amount(\%myconfig, $form->{assemblytotal}, 2) . qq|

- + |; unless ($form->{item} eq "service") { @@ -2038,41 +2683,59 @@ sub form_footer { } print qq| - |; + {price_rows}>|; + + print qq| + |; if ($form->{id}) { - if (! $form->{previousform}) { + if (!$form->{previousform}) { print qq| - |; + |; } if ($form->{orphaned}) { - if (! $form->{previousform}) { - if ($form->{item} eq 'assembly') { - if (! $form->{onhand}) { - print qq| - |; - } - } else { - print qq| - |; - } + if (!$form->{previousform}) { + if ($form->{item} eq 'assembly') { + if (!$form->{onhand}) { + print qq| + |; + } + } else { + print qq| + |; + } } } } - if (! $form->{previousform}) { + if (!$form->{previousform}) { if ($form->{menubar}) { - require "$form->{path}/menu.pl"; + require "bin/mozilla/menu.pl"; &menubar; } } - +# button for saving history + if($form->{id} ne "") { + print qq| + {id} + . qq|); name=history id=history value=| + . $locale->text('history') + . qq|>|; + } +# /button for saving history print qq| + + |; @@ -2080,25 +2743,23 @@ sub form_footer { $lxdebug->leave_sub(); } - sub makemodel_row { $lxdebug->enter_sub(); my ($numrows) = @_; - - $form->{"make_$i"} =~ s/\"/"/g; - $form->{"model_$i"} =~ s/\"/"/g; - + print qq|
- - + + |; - for $i (1 .. $numrows) { + for my $i (1 .. $numrows) { + $form->{"make_$i"} =~ s/\"/"/g; + $form->{"model_$i"} =~ s/\"/"/g; print qq| @@ -2116,28 +2777,35 @@ sub makemodel_row { $lxdebug->leave_sub(); } - sub assembly_row { $lxdebug->enter_sub(); my ($numrows) = @_; + my (@column_index, %column_data, %column_header); + my ($nochange, $callback, $previousform, $linetotal, $href); + + my $deliverydate = $main::deliverydate; # ToDO: cjeck if this indeed comes from global context - @column_index = qw(runningnumber qty unit bom partnumber description partsgroup total); + @column_index = + qw(runningnumber qty unit bom partnumber description partsgroup total); if ($form->{previousform}) { - $nochange = 1; + $nochange = 1; @column_index = qw(qty unit bom partnumber description partsgroup total); } else { + # change callback $form->{old_callback} = $form->{callback}; - $callback = $form->{callback}; - $form->{callback} = "$form->{script}?action=display_form"; + $callback = $form->{callback}; + $form->{callback} = "$form->{script}?action=display_form"; # delete action map { delete $form->{$_} } qw(action header); $previousform = ""; + # save form variables in a previousform variable - foreach $key (sort keys %$form) { + foreach my $key (sort keys %$form) { + # escape ampersands $form->{$key} =~ s/&/%26/g; $previousform .= qq|$key=$form->{$key}&|; @@ -2147,21 +2815,29 @@ sub assembly_row { $form->{callback} = $callback; $form->{assemblytotal} = 0; - $form->{weight} = 0; - - } - $column_header{runningnumber} = qq||; - $column_header{qty} = qq||; - $column_header{unit} = qq||; - $column_header{partnumber} = qq||; - $column_header{description} = qq||; - $column_header{total} = qq||; - $column_header{bom} = qq||; - $column_header{partsgroup} = qq||; + $form->{weight} = 0; + + } + $column_header{runningnumber} = + qq||; + $column_header{qty} = + qq||; + $column_header{unit} = + qq||; + $column_header{partnumber} = + qq||; + $column_header{description} = + qq||; + $column_header{total} = + qq||; + $column_header{bom} = qq||; + $column_header{partsgroup} = qq||; - print qq| + print qq| - + |; - for $i (1 .. $numrows) { + for my $i (1 .. $numrows) { $form->{"partnumber_$i"} =~ s/\"/"/g; - $linetotal = $form->round_amount($form->{"sellprice_$i"} * $form->{"qty_$i"}, 2); + $linetotal = + $form->round_amount($form->{"sellprice_$i"} * $form->{"qty_$i"}, 2); $form->{assemblytotal} += $linetotal; $form->{"qty_$i"} = $form->format_amount(\%myconfig, $form->{"qty_$i"}); @@ -2188,54 +2865,72 @@ sub assembly_row { if (($i >= 1) && ($i == $numrows)) { if ($nochange) { - map { $column_data{$_} = qq|| } qw(qty unit partnumber description bom partsgroup); + map { $column_data{$_} = qq|| } + qw(qty unit partnumber description bom partsgroup); } else { - map { $column_data{$_} = qq|| } qw(runningnumber unit bom); + map { $column_data{$_} = qq|| } qw(runningnumber unit bom); - $column_data{qty} = qq||; - $column_data{partnumber} = qq||; - $column_data{description} = qq||; - $column_data{partsgroup} = qq||; + $column_data{qty} = + qq||; + $column_data{partnumber} = + qq||; + $column_data{description} = + qq||; + $column_data{partsgroup} = + qq||; } } else { - if ($form->{previousform}) { - $column_data{partnumber} = qq||; - $column_data{qty} = qq||; + $column_data{partnumber} = + qq||; + $column_data{qty} = + qq||; - $column_data{bom} = qq||; + $column_data{bom} = + qq||; - $column_data{partsgroup} = qq||; + $column_data{partsgroup} = + qq||; } else { - $href = qq|$form->{script}?action=edit&id=$form->{"id_$i"}&path=$form->{path}&login=$form->{login}&password=$form->{password}&rowcount=$i&previousform=$previousform|; - $column_data{partnumber} = qq||; - $column_data{runningnumber} = qq||; - $column_data{qty} = qq||; + $href = + qq|$form->{script}?action=edit&id=$form->{"id_$i"}&login=$form->{login}&password=$form->{password}&rowcount=$i&previousform=$previousform|; + $column_data{partnumber} = + qq||; + $column_data{runningnumber} = + qq||; + $column_data{qty} = + qq||; $form->{"bom_$i"} = ($form->{"bom_$i"}) ? "checked" : ""; - $column_data{bom} = qq||; + $column_data{bom} = + qq||; - $column_data{partsgroup} = qq||; + $column_data{partsgroup} = + qq||; } - $column_data{unit} = qq||; - $column_data{description} = qq||; + $column_data{unit} = + qq||; + $column_data{description} = + qq||; } - + $column_data{total} = qq||; - + + $column_data{deliverydate} = qq||; + print qq| |; map { print "\n$column_data{$_}" } @column_index; - + print qq| {"id_$i"}> @@ -2249,19 +2944,20 @@ sub assembly_row { |; - + $lxdebug->leave_sub(); } - sub update { $lxdebug->enter_sub(); - + if ($form->{item} eq "assembly") { - $i = $form->{assembly_rows}; + my $i = $form->{assembly_rows}; # if last row is empty check the form otherwise retrieve item - if (($form->{"partnumber_$i"} eq "") && ($form->{"description_$i"} eq "") && ($form->{"partsgroup_$i"} eq "")) { + if ( ($form->{"partnumber_$i"} eq "") + && ($form->{"description_$i"} eq "") + && ($form->{"partsgroup_$i"} eq "")) { &check_form; @@ -2269,78 +2965,106 @@ sub update { IC->assembly_item(\%myconfig, \%$form); - $rows = scalar @{ $form->{item_list} }; + my $rows = scalar @{ $form->{item_list} }; if ($rows) { - $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"}); + $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"}); - if ($rows > 1) { - $form->{makemodel_rows}--; - &select_item; - exit; - } else { - map { $form->{item_list}[$i]{$_} =~ s/\"/"/g } qw(partnumber description unit partsgroup); - map { $form->{"${_}_$i"} = $form->{item_list}[0]{$_} } keys %{ $form->{item_list}[0] }; - $form->{"runningnumber_$i"} = $form->{assembly_rows}; - $form->{assembly_rows}++; + if ($rows > 1) { + $form->{makemodel_rows}--; + &select_item; + exit; + } else { + map { $form->{item_list}[$i]{$_} =~ s/\"/"/g } + qw(partnumber description unit partsgroup); + map { $form->{"${_}_$i"} = $form->{item_list}[0]{$_} } + keys %{ $form->{item_list}[0] }; + $form->{"runningnumber_$i"} = $form->{assembly_rows}; + $form->{assembly_rows}++; - &check_form; + &check_form; - } + } } else { $form->{rowcount} = $i; - $form->{assembly_rows}++; + $form->{assembly_rows}++; - &new_item; + &new_item; } } } - + if ($form->{item} eq "part") { &check_form; } if ($form->{item} eq 'service') { - map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(sellprice listprice); - + map({ $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } + qw(sellprice listprice lastcost)); &form_header; + &price_row; &form_footer; } $lxdebug->leave_sub(); } - sub save { $lxdebug->enter_sub(); - # check if there is a part number + my ($parts_id, %newform, $previousform, $amount, $callback); + + # check if there is a part number - commented out, cause there is an automatic allocation of numbers # $form->isblank("partnumber", $locale->text(ucfirst $form->{item}." Part Number missing!")); + # check if there is a description + $form->isblank("description", $locale->text("Part Description missing!")); + if ($form->{obsolete}) { - $form->error($locale->text("Inventory quantity must be zero before you can set this $form->{item} obsolete!")) if ($form->{onhand}); + $form->error( + $locale->text( + "Inventory quantity must be zero before you can set this $form->{item} obsolete!" + )) + if ($form->{onhand} * 1); + } + + if (!$form->{buchungsgruppen_id}) { + $form->error($locale->text("Parts must have an entry type.") . " " . + $locale->text("If you see this message, you most likely just setup your LX-Office and haven't added any entry types. If this is the case, the option is accessible for administrators in the System menu.") + ); } -# expand dynamic strings -# $locale->text('Inventory quantity must be zero before you can set this part obsolete!') -# $locale->text('Inventory quantity must be zero before you can set this assembly obsolete!') -# $locale->text('Part Number missing!') -# $locale->text('Service Number missing!') -# $locale->text('Assembly Number missing!') + $form->error($locale->text('Description must not be empty!')) unless $form->{description}; + $form->error($locale->text('Partnumber must not be set to empty!')) if $form->{id} && !$form->{partnumber}; + # expand dynamic strings + # $locale->text('Inventory quantity must be zero before you can set this part obsolete!') + # $locale->text('Inventory quantity must be zero before you can set this assembly obsolete!') + # $locale->text('Part Number missing!') + # $locale->text('Service Number missing!') + # $locale->text('Assembly Number missing!') # save part - $rc = IC->save(\%myconfig, \%$form); - if ($rc == 3) { + $lxdebug->message($LXDebug::DEBUG1, "ic.pl: sellprice in save = $form->{sellprice}\n"); + if (IC->save(\%myconfig, \%$form) == 3) { $form->error($locale->text('Partnumber not unique!')); } + # saving the history + if(!exists $form->{addition}) { + $form->{snumbers} = qq|partnumber_| . $form->{partnumber}; + $form->{addition} = "SAVED"; + $form->save_history($form->dbconnect(\%myconfig)); + } + # /saving the history $parts_id = $form->{id}; - + + my $i; # load previous variables if ($form->{previousform}) { + # save the new form variables before splitting previousform map { $newform{$_} = $form->{$_} } keys %$form; @@ -2350,59 +3074,74 @@ sub save { map { delete $form->{$_} } keys %newform; # now take it apart and restore original values - foreach $item (split /&/, $previousform) { - ($key, $value) = split /=/, $item, 2; + foreach my $item (split /&/, $previousform) { + my ($key, $value) = split /=/, $item, 2; $value =~ s/%26/&/g; $form->{$key} = $value; } $form->{taxaccounts} = $newform{taxaccount2}; - + if ($form->{item} eq 'assembly') { # undo number formatting - map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(weight listprice sellprice rop); + map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } + qw(weight listprice sellprice rop); $form->{assembly_rows}--; $i = $newform{rowcount}; $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"}); $form->{sellprice} -= $form->{"sellprice_$i"} * $form->{"qty_$i"}; - $form->{weight} -= $form->{"weight_$i"} * $form->{"qty_$i"}; - + $form->{weight} -= $form->{"weight_$i"} * $form->{"qty_$i"}; + # change/add values for assembly item - map { $form->{"${_}_$i"} = $newform{$_} } qw(partnumber description bin unit weight listprice sellprice inventory_accno income_accno expense_accno); - + map { $form->{"${_}_$i"} = $newform{$_} } + qw(partnumber description bin unit weight listprice sellprice inventory_accno income_accno expense_accno); + $form->{sellprice} += $form->{"sellprice_$i"} * $form->{"qty_$i"}; - $form->{weight} += $form->{"weight_$i"} * $form->{"qty_$i"}; + $form->{weight} += $form->{"weight_$i"} * $form->{"qty_$i"}; } else { + # set values for last invoice/order item $i = $form->{rowcount}; $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"}); - map { $form->{"${_}_$i"} = $newform{$_} } qw(partnumber description bin unit listprice inventory_accno income_accno expense_accno sellprice); + map { $form->{"${_}_$i"} = $newform{$_} } + qw(partnumber description bin unit listprice inventory_accno income_accno expense_accno sellprice); $form->{"sellprice_$i"} = $newform{lastcost} if ($form->{vendor_id}); - if ($form->{exchangerate} != 0) { - $form->{"sellprice_$i"} /= $form->{exchangerate}; + $form->{"sellprice_$i"} /= $form->{exchangerate}; } - - map { $form->{"taxaccounts_$i"} .= "$_ " } split / /, $newform{taxaccount}; + $lxdebug->message($LXDebug::DEBUG1, qq|sellprice_$i in previousform 2 = | . $form->{"sellprice_$i"} . qq|\n|); + map { $form->{"taxaccounts_$i"} .= "$_ " } split / /, + $newform{taxaccount}; chop $form->{"taxaccounts_$i"}; - foreach $item (qw(description rate taxnumber)) { - $index = $form->{"taxaccounts_$i"} . "_$item"; - $form->{$index} = $newform{$index}; + foreach my $item (qw(description rate taxnumber)) { + my $index = $form->{"taxaccounts_$i"} . "_$item"; + $form->{$index} = $newform{$index}; } # credit remaining calculation - $amount = $form->{"sellprice_$i"} * (1 - $form->{"discount_$i"} / 100) * $form->{"qty_$i"}; - map { $form->{"${_}_base"} += $amount } (split / /, $form->{"taxaccounts_$i"}); - map { $amount += ($form->{"${_}_base"} * $form->{"${_}_rate"}) } split / /, $form->{"taxaccounts_$i"} if !$form->{taxincluded}; + $amount = + $form->{"sellprice_$i"} * (1 - $form->{"discount_$i"} / 100) * + $form->{"qty_$i"}; + map { $form->{"${_}_base"} += $amount } + (split / /, $form->{"taxaccounts_$i"}); + map { $amount += ($form->{"${_}_base"} * $form->{"${_}_rate"}) } + split / /, $form->{"taxaccounts_$i"} + if !$form->{taxincluded}; $form->{creditremaining} -= $amount; - + + # redo number formatting, because invoice parse them! + $i = $form->{rowcount}; + map { + $form->{"${_}_$i"} = + $form->format_amount(\%myconfig, $form->{"${_}_$i"}) + } qw(weight listprice sellprice rop); } - + $form->{"id_$i"} = $parts_id; delete $form->{action}; @@ -2414,13 +3153,15 @@ sub save { $form->{makemodel_rows}--; # put callback together - foreach $key (keys %$form) { + foreach my $key (keys %$form) { + # do single escape for Apache 2.0 - $value = $form->escape($form->{$key}, 1); + my $value = $form->escape($form->{$key}, 1); $callback .= qq|&$key=$value|; } $form->{callback} = $callback; } + $lxdebug->message($LXDebug::DEBUG1, qq|ic.pl: sellprice_$i nach sub save = | . $form->{"sellprice_$i"} . qq|\n|); # redirect $form->redirect; @@ -2428,22 +3169,36 @@ sub save { $lxdebug->leave_sub(); } - sub save_as_new { $lxdebug->enter_sub(); + # saving the history + if(!exists $form->{addition}) { + $form->{snumbers} = qq|partnumber_| . $form->{partnumber}; + $form->{addition} = "SAVED AS NEW"; + $form->save_history($form->dbconnect(\%myconfig)); + } + # /saving the history $form->{id} = 0; + if ($form->{"original_partnumber"} && + ($form->{"partnumber"} eq $form->{"original_partnumber"})) { + $form->{partnumber} = ""; + } &save; - $lxdebug->leave_sub(); } - sub delete { $lxdebug->enter_sub(); + # saving the history + if(!exists $form->{addition}) { + $form->{snumbers} = qq|partnumber_| . $form->{partnumber}; + $form->{addition} = "DELETED"; + $form->save_history($form->dbconnect(\%myconfig)); + } + # /saving the history + my $rc = IC->delete(\%myconfig, \%$form); - $rc = IC->delete(\%myconfig, \%$form); - # redirect $form->redirect($locale->text('Item deleted!')) if ($rc > 0); $form->error($locale->text('Cannot delete item!')); @@ -2451,164 +3206,70 @@ sub delete { $lxdebug->leave_sub(); } - -sub stock_assembly { +sub price_row { $lxdebug->enter_sub(); - $form->{title} = $locale->text('Stock Assembly'); - - $form->header; - - print qq| - - -{script}> + my ($numrows) = @_; -
|.$locale->text('Make').qq||.$locale->text('Model').qq|| . $locale->text('Make') . qq|| . $locale->text('Model') . qq|
|.$locale->text('No.').qq||.$locale->text('Qty').qq||.$locale->text('Unit').qq||.$locale->text('Part Number').qq||.$locale->text('Part Description').qq||.$locale->text('Extended').qq||.$locale->text('BOM').qq||.$locale->text('Group').qq|| . $locale->text('No.') . qq|| . $locale->text('Qty') . qq|| . $locale->text('Unit') . qq|| + . $locale->text('Part Number') + . qq|| . $locale->text('Part Description') . qq|| . $locale->text('Extended') . qq|| . $locale->text('BOM') . qq|| . $locale->text('Group') . qq|
|.$locale->text('Individual Items').qq|| . $locale->text('Individual Items') . qq|
@@ -2175,10 +2851,11 @@ sub assembly_row {
$form->{"partnumber_$i"}$form->{"qty_$i"}$form->{"partnumber_$i"}$form->{"qty_$i"}{"bom_$i"}>|; - $column_data{bom} .= ($form->{"bom_$i"}) ? "x" : " "; - $column_data{bom} .= qq|{"bom_$i"}>|; + $column_data{bom} .= ($form->{"bom_$i"}) ? "x" : " "; + $column_data{bom} .= qq|$form->{"partsgroup_$i"}$form->{"partsgroup_$i"}$form->{"partnumber_$i"}$form->{"partnumber_$i"}{"bom_$i"}>{"bom_$i"}>$form->{"partsgroup_$i"}$form->{"partsgroup_$i"}$form->{"unit_$i"}$form->{"description_$i"}$form->{"unit_$i"}$form->{"description_$i"}$linetotal$deliverydate
+ print qq| - - - - - -
$form->{title}
- +
- - - + + +|; + for my $i (1 .. $numrows) { + print qq| - - + + + +|; + } + + print qq|
|.$locale->text('Part Number').qq| | . $locale->text('Preisklasse') . qq|| . $locale->text('Preis') . qq|
|.$locale->text('Part Description').qq|$form->{"pricegroup_$i"}

- -{path}> -{login}> -{password}> - - - -
- - - - - |; $lxdebug->leave_sub(); } - -sub list_assemblies { +sub parts_language_selection { $lxdebug->enter_sub(); - IC->retrieve_assemblies(\%myconfig, \%$form); - - $column_header{partnumber} = qq|
|.$locale->text('Part Number').qq||.$locale->text('Part Description').qq||.$locale->text('Bin').qq||.$locale->text('Qty').qq||.$locale->text('ROP').qq||.$locale->text('Add').qq|
- - - - - |; - - map { print "\n$column_header{$_}" } @column_index; - - print qq| - -|; - - $i = 1; - foreach $ref (@{ $form->{assembly_items} }) { - - map { $ref->{$_} =~ s/\"/"/g } qw(partnumber description); - - $column_data{partnumber} = qq||; - $column_data{description} = qq||; - $column_data{bin} = qq||; - $column_data{onhand} = qq||; - $column_data{rop} = qq||; - $column_data{stock} = qq||; - - $j++; $j %= 2; - print qq|{id}>\n|; - - map { print "\n$column_data{$_}" } @column_index; - - print qq| - -|; - - $i++; - - } - - $i--; - print qq| - - -
$form->{title}
$ref->{partnumber}$ref->{description} $ref->{bin} |.$form->format_amount(\%myconfig, $ref->{onhand}, '', " ").qq||.$form->format_amount(\%myconfig, $ref->{rop}, '', " ").qq|

-
- - -{path}> -{login}> -{password}> - - + my $onload = $main::onload; - + my $languages = IC->retrieve_languages(\%myconfig, $form); -
- - + my $callback = "$form->{script}?action=parts_language_selection&"; + map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" } + (qw(login password name input_name), grep({ /^[fl]_/ } keys %$form))); - - -|; - - $lxdebug->leave_sub(); -} + my @header_sort = qw(name longdescription); + my %header_title = ( "name" => $locale->text("Name"), + "longdescription" => $locale->text("Long Description"), + ); + my @header = + map(+{ "column_title" => $header_title{$_}, + "column" => $_, + "callback" => $callback, + }, + @header_sort); -sub restock_assemblies { - $lxdebug->enter_sub(); + $form->{"title"} = $locale->text("Language Values"); + $form->header(); + print($form->parse_html_template("ic/parts_language_selection", { "HEADER" => \@header, + "LANGUAGES" => $languages, + "onload" => $onload })); - $form->redirect($locale->text('Assemblies restocked!')) if (IC->restock_assemblies(\%myconfig, \%$form)); - $form->error($locale->text('Cannot stock assemblies!')); - $lxdebug->leave_sub(); } - -sub continue { &{ $form->{nextsub} } }; - - +sub continue { call_sub($form->{"nextsub"}); }