X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fic.pl;h=0b607da1d5a95f789fe7bb337b18dc97b3368ef9;hb=b81f2b8fd88c28f96f49fbe50e94276384d0d511;hp=b29daa63c57d9bbf0044263886ba49c2491408fb;hpb=f11dcc70cd323fe2071ea62b53fc0ec106c3c02d;p=kivitendo-erp.git diff --git a/bin/mozilla/ic.pl b/bin/mozilla/ic.pl index b29daa63c..0b607da1d 100644 --- a/bin/mozilla/ic.pl +++ b/bin/mozilla/ic.pl @@ -32,7 +32,7 @@ #====================================================================== use POSIX qw(strftime); -use List::Util qw(max); +use List::Util qw(first max); use List::MoreUtils qw(any); use SL::AM; @@ -78,7 +78,8 @@ sub add { $auth->assert('part_service_assembly_edit'); - $form->{title} = $locale->text('Add ' . ucfirst $form->{item}); + my $title = 'Add ' . ucfirst $form->{item}; + $form->{title} = $locale->text($title); $form->{callback} = "$form->{script}?action=add&item=$form->{item}" unless $form->{callback}; $form->{unit_changeable} = 1; @@ -114,8 +115,10 @@ sub search { $form->header; + $form->get_lists('partsgroup' => 'ALL_PARTSGROUPS'); print $form->parse_html_template('ic/search', { %is_xyz, - dateformat => $myconfig{dateformat}, }); + dateformat => $myconfig{dateformat}, + limit => $myconfig{vclimit}, }); $lxdebug->leave_sub(); } #end search() @@ -127,6 +130,8 @@ sub search_update_prices { my $pricegroups = IC->get_pricegroups(\%myconfig, \%$form); + $form->{title} = $locale->text('Update Prices'); + $form->header; print $form->parse_html_template('ic/search_update_prices', { PRICE_ROWS => $pricegroups }); @@ -789,7 +794,7 @@ sub addtop100 { if ($form->{l_subtotal} eq 'Y' && !$ref->{assemblyitem}) { if ($sameitem ne $ref->{ $form->{sort} }) { - &parts_subtotal; + parts_subtotal(\@column_index, \$subtotalonhand, \$subtotalsellprice, \$subtotallastcost, \$subtotallistprice); $sameitem = $ref->{ $form->{sort} }; } } @@ -912,7 +917,7 @@ sub addtop100 { } if ($form->{l_subtotal} eq 'Y') { - &parts_subtotal; + parts_subtotal(\@column_index, \$subtotalonhand, \$subtotalsellprice, \$subtotallastcost, \$subtotallistprice); } #fi if ($form->{"l_linetotal"}) { @@ -1023,6 +1028,38 @@ sub generate_report { $form->{title} =~ s/ys$/ies/; $form->{title} = $locale->text($form->{title}); + my %column_defs = ( + 'bin' => { 'text' => $locale->text('Bin'), }, + 'deliverydate' => { 'text' => $locale->text('deliverydate'), }, + 'description' => { 'text' => $locale->text('Part Description'), }, + 'drawing' => { 'text' => $locale->text('Drawing'), }, + 'ean' => { 'text' => $locale->text('EAN'), }, + 'image' => { 'text' => $locale->text('Image'), }, + 'invnumber' => { 'text' => $locale->text('Invoice Number'), }, + 'lastcost' => { 'text' => $locale->text('Last Cost'), }, + 'linetotallastcost' => { 'text' => $locale->text('Extended'), }, + 'linetotallistprice' => { 'text' => $locale->text('Extended'), }, + 'linetotalsellprice' => { 'text' => $locale->text('Extended'), }, + 'listprice' => { 'text' => $locale->text('List Price'), }, + 'microfiche' => { 'text' => $locale->text('Microfiche'), }, + 'name' => { 'text' => $locale->text('Name'), }, + 'onhand' => { 'text' => $locale->text('Stocked Qty'), }, + 'ordnumber' => { 'text' => $locale->text('Order Number'), }, + 'partnumber' => { 'text' => $locale->text('Part Number'), }, + 'partsgroup' => { 'text' => $locale->text('Group'), }, + 'priceupdate' => { 'text' => $locale->text('Updated'), }, + 'quonumber' => { 'text' => $locale->text('Quotation'), }, + 'rop' => { 'text' => $locale->text('ROP'), }, + 'sellprice' => { 'text' => $locale->text('Sell Price'), }, + 'serialnumber' => { 'text' => $locale->text('Serial Number'), }, + 'soldtotal' => { 'text' => $locale->text('Qty in Selected Records'), }, + 'transdate' => { 'text' => $locale->text('Transdate'), }, + 'unit' => { 'text' => $locale->text('Unit'), }, + 'weight' => { 'text' => $locale->text('Weight'), }, + 'projectnumber' => { 'text' => $locale->text('Project Number'), }, + 'projectdescription' => { 'text' => $locale->text('Project Description'), }, + ); + $revers = $form->{revers}; $lastsort = $form->{lastsort}; @@ -1070,6 +1107,13 @@ sub generate_report { no_sn_joins => [ qw(bought sold) ], ); + # get name of partsgroup if id is given + my $pg_name; + if ($form->{partsgroup_id}) { + my $pg = SL::DB::PartsGroup->new(id => $form->{partsgroup_id})->load; + $pg_name = $pg->{'partsgroup'}; + } + # these strings get displayed at the top of the results to indicate the user which switches were used my %optiontexts = ( active => $locale->text('Active'), @@ -1087,17 +1131,19 @@ sub generate_report { transdateto => $locale->text('To (time)') . " " . $locale->date(\%myconfig, $form->{transdateto}, 1), partnumber => $locale->text('Part Number') . ": '$form->{partnumber}'", partsgroup => $locale->text('Group') . ": '$form->{partsgroup}'", + partsgroup_id => $locale->text('Group') . ": '$pg_name'", 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'), + l_soldtotal => $locale->text('Qty in Selected Records'), + ean => $locale->text('EAN') . ": '$form->{ean}'", ); 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 + my @callback_keys = qw(onorder ordered rfq quoted bought sold partnumber partsgroup partsgroup_id serialnumber description make model drawing microfiche l_soldtotal l_deliverydate transdatefrom transdateto ean); # calculate dependencies @@ -1114,7 +1160,12 @@ sub generate_report { } # special case for lastcost - $form->{l_lastcost} = "" if $form->{ledgerchecks}; + if ($form->{ledgerchecks}){ + # ledgerchecks don't know about sellprice or lastcost. they just return a + # price. so rename sellprice to price, and drop lastcost. + $column_defs{sellprice}{text} = $locale->text('Price'); + $form->{l_lastcost} = "" + } if ($form->{description}) { $description = $form->{description}; @@ -1122,7 +1173,7 @@ sub generate_report { } if ($form->{l_linetotal}) { - $form->{l_onhand} = "Y"; + $form->{l_qty} = "Y"; $form->{l_linetotalsellprice} = "Y" if $form->{l_sellprice}; $form->{l_linetotallastcost} = $form->{searchitems} eq 'assembly' && !$form->{bom} ? "" : 'Y' if $form->{l_lastcost}; $form->{l_linetotallistprice} = "Y" if $form->{l_listprice}; @@ -1142,20 +1193,31 @@ sub generate_report { || $form->{ordered} || $form->{rfq} || $form->{quoted}) { - $form->{l_onhand} = "Y"; +# $form->{l_onhand} = "Y"; } else { $form->{l_linetotalsellprice} = ""; $form->{l_linetotallastcost} = ""; } } + # soldtotal doesn't make sense with more than one bsooqr option. + # so reset it to sold (the most common option), and issue a warning + my @bsooqr = qw(sold bought onorder ordered rfq quoted); + if ($form->{l_subtotal} && 1 < grep { $form->{$_} } @bsooqr) { + my $enabled = first { $form->{$_} } @bsooqr; + $form->{$_} = '' for @bsooqr; + $form->{$enabled} = 'Y'; + + push @options, $::locale->text('Subtotal cannot distinguish betweens record types. Only one of the selected record types will be displayed: #1', $optiontexts{$enabled}); + } + IC->all_parts(\%myconfig, \%$form); my @columns = qw( - partnumber description partsgroup bin onhand rop unit listprice + partnumber description partsgroup bin onhand rop soldtotal unit listprice linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost priceupdate weight image drawing microfiche invnumber ordnumber quonumber - transdate name serialnumber soldtotal deliverydate + transdate name serialnumber deliverydate ean projectnumber projectdescription ); my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs }; @@ -1164,40 +1226,12 @@ sub generate_report { push @columns, map { "cvar_$_->{name}" } @includeable_custom_variables; - my %column_defs = ( - 'bin' => { 'text' => $locale->text('Bin'), }, - 'deliverydate' => { 'text' => $locale->text('deliverydate'), }, - 'description' => { 'text' => $locale->text('Part Description'), }, - 'drawing' => { 'text' => $locale->text('Drawing'), }, - 'image' => { 'text' => $locale->text('Image'), }, - 'invnumber' => { 'text' => $locale->text('Invoice Number'), }, - 'lastcost' => { 'text' => $locale->text('Last Cost'), }, - 'linetotallastcost' => { 'text' => $locale->text('Extended'), }, - 'linetotallistprice' => { 'text' => $locale->text('Extended'), }, - 'linetotalsellprice' => { 'text' => $locale->text('Extended'), }, - 'listprice' => { 'text' => $locale->text('List Price'), }, - 'microfiche' => { 'text' => $locale->text('Microfiche'), }, - 'name' => { 'text' => $locale->text('Name'), }, - 'onhand' => { 'text' => $locale->text('Qty'), }, - 'ordnumber' => { 'text' => $locale->text('Order Number'), }, - 'partnumber' => { 'text' => $locale->text('Part Number'), }, - 'partsgroup' => { 'text' => $locale->text('Group'), }, - 'priceupdate' => { 'text' => $locale->text('Updated'), }, - 'quonumber' => { 'text' => $locale->text('Quotation'), }, - 'rop' => { 'text' => $locale->text('ROP'), }, - 'sellprice' => { 'text' => $locale->text('Sell Price'), }, - 'serialnumber' => { 'text' => $locale->text('Serial Number'), }, - 'soldtotal' => { 'text' => $locale->text('soldtotal'), }, - 'transdate' => { 'text' => $locale->text('Transdate'), }, - 'unit' => { 'text' => $locale->text('Unit'), }, - 'weight' => { 'text' => $locale->text('Weight'), }, - %column_defs_cvars, - ); - - map { $column_defs{$_}->{visible} = $form->{"l_$_"} ? 1 : 0 } @columns; + %column_defs = (%column_defs,%column_defs_cvars); # nochmal die cvars als überschrift hinzufügen + map { $column_defs{$_}->{visible} = $form->{"l_$_"} ? 1 : 0 } @columns; map { $column_defs{$_}->{align} = 'right' } qw(onhand sellprice listprice lastcost linetotalsellprice linetotallastcost linetotallistprice rop weight soldtotal); - my @hidden_variables = (qw(l_subtotal l_linetotal searchitems itemstatus bom), @itemstatus_keys, @callback_keys, @searchable_custom_variables, map { "l_$_" } @columns); + my @hidden_variables = (qw(l_subtotal l_linetotal searchitems itemstatus bom), @itemstatus_keys, @callback_keys, + map({ "cvar_$_->{name}" } @searchable_custom_variables), map { "l_$_" } @columns); my $callback = build_std_url('action=generate_report', grep { $form->{$_} } @hidden_variables); my @sort_full = qw(partnumber description onhand soldtotal deliverydate); @@ -1226,6 +1260,7 @@ sub generate_report { 'attachment_basename' => $attachment_basenames{$form->{searchitems}} . strftime('_%Y%m%d', localtime time), ); $report->set_options_from_form(); + $locale->set_numberformat_wo_thousands_separator(\%myconfig) if lc($report->{options}->{output_format}) eq 'csv'; $report->set_columns(%column_defs); $report->set_column_order(@columns); @@ -1251,7 +1286,7 @@ sub generate_report { my %subtotals = map { $_ => 0 } ('onhand', @subtotal_columns); my %totals = map { $_ => 0 } @subtotal_columns; my $idx = 0; - my $same_item = $form->{parts}[0]{ $form->{sort} } if (scalar @{ $form->{parts} }); + my $same_item = @{ $form->{parts} } ? $form->{parts}[0]{ $form->{sort} } : undef; my $defaults = AM->get_defaults(); @@ -1268,12 +1303,12 @@ sub generate_report { $ref->{lastcost} *= $ref->{exchangerate} / $ref->{price_factor}; # use this for assemblies - my $onhand = $ref->{onhand}; + my $soldtotal = $ref->{soldtotal}; if ($ref->{assemblyitem}) { $row->{partnumber}{align} = 'right'; - $row->{onhand}{data} = 0; - $onhand = 0 if ($form->{sold}); + $row->{soldtotal}{data} = 0; + $soldtotal = 0 if ($form->{sold}); } my $edit_link = build_std_url('action=edit', 'id=' . E($ref->{id}), 'callback'); @@ -1291,11 +1326,11 @@ sub generate_report { if (!$ref->{assemblyitem}) { foreach my $col (@subtotal_columns) { - $totals{$col} += $onhand * $ref->{$col}; - $subtotals{$col} += $onhand * $ref->{$col}; + $totals{$col} += $soldtotal * $ref->{$col}; + $subtotals{$col} += $soldtotal * $ref->{$col}; } - $subtotals{onhand} += $onhand; + $subtotals{soldtotal} += $soldtotal; } # set module stuff @@ -1326,11 +1361,11 @@ sub generate_report { my $row = { map { $_ => { 'class' => 'listsubtotal', } } @columns }; if (($form->{searchitems} ne 'assembly') || !$form->{bom}) { - $row->{onhand}->{data} = $form->format_amount(\%myconfig, $subtotals{onhand}); + $row->{soldtotal}->{data} = $form->format_amount(\%myconfig, $subtotals{soldtotal}); } map { $row->{"linetotal$_"}->{data} = $form->format_amount(\%myconfig, $subtotals{$_}, 2) } @subtotal_columns; - map { $subtotals{$_} = 0 } ('onhand', @subtotal_columns); + map { $subtotals{$_} = 0 } ('soldtotal', @subtotal_columns); $report->add_data($row); @@ -1359,39 +1394,38 @@ sub parts_subtotal { $auth->assert('part_service_assembly_edit'); - # imports - our (%column_data, @column_index); - our ($subtotalonhand, $totalsellprice, $totallastcost, $totallistprice, $subtotalsellprice, $subtotallastcost, $subtotallistprice); + my (%column_data); + my ($column_index, $subtotalonhand, $subtotalsellprice, $subtotallastcost, $subtotallistprice) = @_; - map { $column_data{$_} = " " } @column_index; - $subtotalonhand = 0 if ($form->{searchitems} eq 'assembly' && $form->{bom}); + map { $column_data{$_} = " " } @{ $column_index }; + $$subtotalonhand = 0 if ($form->{searchitems} eq 'assembly' && $form->{bom}); $column_data{onhand} = "" - . $form->format_amount(\%myconfig, $subtotalonhand) + . $form->format_amount(\%myconfig, $$subtotalonhand) . ""; $column_data{linetotalsellprice} = "" - . $form->format_amount(\%myconfig, $subtotalsellprice, 2) + . $form->format_amount(\%myconfig, $$subtotalsellprice, 2) . ""; $column_data{linetotallistprice} = "" - . $form->format_amount(\%myconfig, $subtotallistprice, 2) + . $form->format_amount(\%myconfig, $$subtotallistprice, 2) . ""; $column_data{linetotallastcost} = "" - . $form->format_amount(\%myconfig, $subtotallastcost, 2) + . $form->format_amount(\%myconfig, $$subtotallastcost, 2) . ""; - $subtotalonhand = 0; - $subtotalsellprice = 0; - $subtotallistprice = 0; - $subtotallastcost = 0; + $$subtotalonhand = 0; + $$subtotalsellprice = 0; + $$subtotallistprice = 0; + $$subtotallastcost = 0; print ""; - map { print "\n$column_data{$_}" } @column_index; + map { print "\n$column_data{$_}" } @{ $column_index }; print qq| @@ -1412,7 +1446,8 @@ sub edit { $form->{"original_partnumber"} = $form->{"partnumber"}; - $form->{title} = $locale->text('Edit ' . ucfirst $form->{item}); + my $title = 'Edit ' . ucfirst $form->{item}; + $form->{title} = $locale->text($title); &link_part; &display_form; @@ -1516,7 +1551,6 @@ sub form_header { $auth->assert('part_service_assembly_edit'); - $form->{eur} = $main::eur; # config dumps into namespace - yuck $form->{pg_keys} = sub { "$_[0]->{partsgroup}--$_[0]->{id}" }; $form->{description_area} = ($form->{rows} = $form->numtextrows($form->{description}, 40)) > 1; $form->{notes_rows} = max 4, $form->numtextrows($form->{notes}, 40), $form->numtextrows($form->{formel}, 40); @@ -1570,8 +1604,8 @@ sub form_footer { sub makemodel_row { $lxdebug->enter_sub(); my ($numrows) = @_; - - my @mm_data = grep { any { $_ ne '' } @$_{qw(make model)} } map +{ make => $form->{"make_$_"}, model => $form->{"model_$_"} }, 1 .. $numrows; + #hli + my @mm_data = grep { any { $_ ne '' } @$_{qw(make model)} } map +{ make => $form->{"make_$_"}, model => $form->{"model_$_"}, lastcost => $form->{"lastcost_$_"}, lastupdate => $form->{"lastupdate_$_"}, sortorder => $form->{"sortorder_$_"} }, 1 .. $numrows; delete @{$form}{grep { m/^make_\d+/ || m/^model_\d+/ } keys %{ $form }}; print $form->parse_html_template('ic/makemodel', { MM_DATA => [ @mm_data, {} ], mm_rows => scalar @mm_data + 1 }); @@ -1584,8 +1618,6 @@ sub assembly_row { my (@column_index); my ($nochange, $callback, $previousform, $linetotal, $line_purchase_price, $href); - our ($deliverydate); # ToDO: check if this indeed comes from global context - @column_index = qw(runningnumber qty unit bom partnumber description partsgroup lastcost total); if ($form->{previousform}) { @@ -1602,9 +1634,9 @@ sub assembly_row { map { delete $form->{$_} } qw(action header); # save form variables in a previousform variable - $previousform = $form->escape($form->escape(join '&', map { - sprintf "%s=%s", Q($_), /^listprice|lastcost|sellprice$/ ? $form->format_amount(\%myconfig, $form->{$_}) : $form->{$_} - } grep { ref $form->{$_} eq '' && $form->{$_} } grep { !/^select/ } sort keys %$form )); + my %form_to_save = map { ($_ => m/^ (?: listprice | sellprice | lastcost ) $/x ? $form->format_amount(\%myconfig, $form->{$_}) : $form->{$_}) } + keys %{ $form }; + $previousform = $::auth->save_form_in_session(form => \%form_to_save); $form->{callback} = $callback; $form->{assemblytotal} = 0; @@ -1673,7 +1705,6 @@ sub assembly_row { $row{lastcost}{data} = $line_purchase_price; $row{total}{data} = $linetotal; - $row{deliverydate}{data} = $deliverydate; $row{lastcost}{align} = 'right'; $row{total}{align} = 'right'; $row{deliverydate}{align} = 'right'; @@ -1695,6 +1726,9 @@ sub update { # parse pricegroups. and no, don't rely on check_form for this... map { $form->{"price_$_"} = $form->parse_amount(\%myconfig, $form->{"price_$_"}) } 1 .. $form->{price_rows}; + # same for lastcosts + map { $form->{"lastcost_$_"} = $form->parse_amount(\%myconfig, $form->{"lastcost_$_"}) } 1 .. $form->{"makemodel_rows"}; + if ($form->{item} eq "assembly") { my $i = $form->{assembly_rows}; @@ -1716,8 +1750,8 @@ sub update { if ($rows > 1) { $form->{makemodel_rows}--; - &select_item; - exit; + select_item(mode => 'IC'); + ::end_of_request(); } else { map { $form->{item_list}[$i]{$_} =~ s/\"/"/g } qw(partnumber description unit partsgroup); @@ -1752,7 +1786,7 @@ sub save { $auth->assert('part_service_assembly_edit'); - my ($parts_id, %newform, $previousform, $amount, $callback); + my ($parts_id, %newform, $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!")); @@ -1781,7 +1815,7 @@ sub save { if(!exists $form->{addition}) { $form->{snumbers} = qq|partnumber_| . $form->{partnumber}; $form->{addition} = "SAVED"; - $form->save_history($form->dbconnect(\%myconfig)); + $form->save_history; } # /saving the history $parts_id = $form->{id}; @@ -1793,20 +1827,14 @@ sub save { # save the new form variables before splitting previousform map { $newform{$_} = $form->{$_} } keys %$form; - $previousform = $form->unescape($form->{previousform}); - # don't trample on previous variables map { delete $form->{$_} } keys %newform; my $ic_cvar_configs = CVar->get_configs(module => 'IC'); my @ic_cvar_fields = map { "cvar_$_->{name}" } @{ $ic_cvar_configs }; - # now take it apart and restore original values - foreach my $item (split /&/, $previousform) { - my ($key, $value) = split m/=/, $item, 2; - $value =~ s/%26/&/g; - $form->{$key} = $value; - } + # restore original values + $::auth->restore_form_from_session($newform{previousform}, form => $form); $form->{taxaccounts} = $newform{taxaccount2}; if ($form->{item} eq 'assembly') { @@ -1816,7 +1844,7 @@ sub save { qw(weight listprice sellprice rop); $form->{assembly_rows}--; - $i = $newform{rowcount}; + $i = $form->{assembly_rows}; $form->{"qty_$i"} = 1 unless ($form->{"qty_$i"}); $form->{sellprice} -= $form->{"sellprice_$i"} * $form->{"qty_$i"}; @@ -1865,7 +1893,7 @@ sub save { $form->{creditremaining} -= $amount; # redo number formatting, because invoice parse them! - map { $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}) } qw(weight listprice sellprice rop); + map { $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}) } qw(weight listprice sellprice lastcost rop); } $form->{"id_$i"} = $parts_id; @@ -1914,7 +1942,7 @@ sub save_as_new { if(!exists $form->{addition}) { $form->{snumbers} = qq|partnumber_| . $form->{partnumber}; $form->{addition} = "SAVED AS NEW"; - $form->save_history($form->dbconnect(\%myconfig)); + $form->save_history; } # /saving the history $form->{id} = 0; @@ -1935,7 +1963,7 @@ sub delete { if(!exists $form->{addition}) { $form->{snumbers} = qq|partnumber_| . $form->{partnumber}; $form->{addition} = "DELETED"; - $form->save_history($form->dbconnect(\%myconfig)); + $form->save_history; } # /saving the history my $rc = IC->delete(\%myconfig, \%$form); @@ -1970,8 +1998,6 @@ sub parts_language_selection { $auth->assert('part_service_assembly_edit'); - our ($onload, $callback); - my $languages = IC->retrieve_languages(\%myconfig, $form); if ($form->{language_values} ne "") { @@ -1996,15 +2022,13 @@ sub parts_language_selection { my @header = map(+{ "column_title" => $header_title{$_}, "column" => $_, - "callback" => $callback, }, @header_sort); $form->{"title"} = $locale->text("Language Values"); $form->header(); print $form->parse_html_template("ic/parts_language_selection", { "HEADER" => \@header, - "LANGUAGES" => $languages, - "onload" => $onload }); + "LANGUAGES" => $languages, }); $lxdebug->leave_sub(); } @@ -2028,4 +2052,25 @@ sub ajax_autocomplete { $main::lxdebug->leave_sub(); } +sub back_to_record { + _check_io_auth(); + + + delete @{$::form}{qw(action action_add action_back_to_record back_sub description item notes partnumber sellprice taxaccount2 unit vc)}; + + $::auth->restore_form_from_session($::form->{previousform}, clobber => 1); + $::form->{rowcount}--; + $::form->{action} = 'display_form'; + $::form->{callback} = $::form->{script} . '?' . join('&', map { $::form->escape($_) . '=' . $::form->escape($::form->{$_}) } sort keys %{ $::form }); + $::form->redirect; +} + sub continue { call_sub($form->{"nextsub"}); } + +sub dispatcher { + my $action = first { $::form->{"action_${_}"} } qw(add back_to_record); + $::form->error($::locale->text('No action defined.')) unless $action; + + $::form->{dispatched_action} = $action; + call_sub($action); +}