X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fic.pl;h=4b563e6b0a76210e6a36a94dc1113157b605ee37;hb=723b79bdf889207b36f5ab0edcfd4a6d81c6f8b6;hp=913c92d2ca9a0ffb6448c42c253080698551ea0c;hpb=e7127ad02437a6311dc646db8027c44ba19bd62c;p=kivitendo-erp.git diff --git a/bin/mozilla/ic.pl b/bin/mozilla/ic.pl index 913c92d2c..4b563e6b0 100644 --- a/bin/mozilla/ic.pl +++ b/bin/mozilla/ic.pl @@ -46,6 +46,7 @@ use SL::ReportGenerator; our ($form, $locale, %myconfig, $lxdebug); require "bin/mozilla/io.pl"; +require "bin/mozilla/invoice_io.pl"; require "bin/mozilla/common.pl"; require "bin/mozilla/reportgenerator.pl"; @@ -109,44 +110,33 @@ sub search { |; #write Trigger - $jsscript = - Form->write_trigger(\%myconfig, "2", "transdatefrom", "BL", "trigger1", - "transdateto", "BL", "trigger2"); + $jsscript = Form->write_trigger(\%myconfig, "2", "transdatefrom", "BL", "trigger1", "transdateto", "BL", "trigger2"); } else { # without JavaScript Calendar - $button1 = qq| - |; - $button2 = qq| - |; + $button1 = qq| |; + $button2 = qq| |; } unless ($form->{searchitems} eq 'service') { - $onhand = qq| -  | - . $locale->text('On Hand') . qq| -  | - . $locale->text('Short') . qq| + $onhand = qq|  | . $locale->text('On Hand') . qq| +  | . $locale->text('Short') . qq| |; $makemodel = qq| - | . $locale->text('Make') . qq| - - | . $locale->text('Model') . qq| - + | . $locale->text('Make') . 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| |; } @@ -1549,7 +1539,7 @@ sub generate_report { $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 + # if something should be activated if something else is active, enter it here my %dependencies = ( onhand => [ qw(l_onhand) ], short => [ qw(l_onhand) ], @@ -1714,7 +1704,7 @@ sub generate_report { 'output_format' => 'HTML', 'title' => $form->{title}, 'attachment_basename' => $attachment_basenames{$form->{searchitems}} . strftime('_%Y%m%d', localtime time), - ); + ); $report->set_options_from_form(); $report->set_columns(%column_defs); @@ -1728,22 +1718,26 @@ 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}[0]{ $form->{sort} } if (scalar @{ $form->{parts} }); + # postprocess parts foreach my $ref (@{ $form->{parts} }) { + + # fresh row, for inserting later my $row = { map { $_ => { 'data' => $ref->{$_} } } @columns }; - $ref->{exchangerate} = 1 unless $ref->{exchangerate}; - $ref->{sellprice} *= $ref->{exchangerate}; - $ref->{listprice} *= $ref->{exchangerate}; - $ref->{lastcost} *= $ref->{exchangerate}; + $ref->{exchangerate} ||= 1; + $ref->{price_factor} ||= 1; + $ref->{sellprice} *= $ref->{exchangerate} / $ref->{price_factor}; + $ref->{listprice} *= $ref->{exchangerate} / $ref->{price_factor}; + $ref->{lastcost} *= $ref->{exchangerate} / $ref->{price_factor}; # use this for assemblies my $onhand = $ref->{onhand}; if ($ref->{assemblyitem}) { - $row->{partnumber}->{align} = 'right'; - $row->{onhand}->{data} = 0; + $row->{partnumber}{align} = 'right'; + $row->{onhand}{data} = 0; $onhand = 0 if ($form->{sold}); } @@ -1752,11 +1746,11 @@ sub generate_report { $row->{description}->{link} = $edit_link; foreach (qw(sellprice listprice lastcost)) { - $row->{$_}->{data} = $form->format_amount(\%myconfig, $ref->{$_}, -2); - $row->{"linetotal$_"}->{data} = $form->format_amount(\%myconfig, $ref->{onhand} * $ref->{$_}, 2); + $row->{$_}{data} = $form->format_amount(\%myconfig, $ref->{$_}, -2); + $row->{"linetotal$_"}{data} = $form->format_amount(\%myconfig, $ref->{onhand} * $ref->{$_}, 2); } - map { $row->{$_}->{data} = $form->format_amount(\%myconfig, $ref->{$_}); } qw(onhand rop weight soldtotal); + map { $row->{$_}{data} = $form->format_amount(\%myconfig, $ref->{$_}); } qw(onhand rop weight soldtotal); if (!$ref->{assemblyitem}) { foreach my $col (@subtotal_columns) { @@ -1767,25 +1761,28 @@ sub generate_report { $subtotals{onhand} += $onhand; } + # set module stuff if ($ref->{module} eq 'oe') { my $edit_oe_link = build_std_url("script=oe.pl", 'action=edit', 'type=' . E($ref->{type}), 'id=' . E($ref->{trans_id}), 'callback'); - $row->{ordnumber}->{link} = $edit_oe_link; - $row->{quonumber}->{link} = $edit_oe_link if (!$ref->{ordnumber}); + $row->{ordnumber}{link} = $edit_oe_link; + $row->{quonumber}{link} = $edit_oe_link if (!$ref->{ordnumber}); } else { - $row->{invnumber}->{link} = build_std_url("script=$ref->{module}.pl", 'action=edit', 'type=invoice', 'id=' . E($ref->{trans_id}), 'callback'); + $row->{invnumber}{link} = build_std_url("script=$ref->{module}.pl", 'action=edit', 'type=invoice', 'id=' . E($ref->{trans_id}), 'callback'); } + # set properties of images if ($ref->{image} && (lc $report->{options}->{output_format} eq 'html')) { - $row->{image}->{data} = ''; - $row->{image}->{raw_data} = ''; + $row->{image}{data} = ''; + $row->{image}{raw_data} = ''; } - map { $row->{$_}->{link} = $ref->{$_} } qw(drawing microfiche); + map { $row->{$_}{link} = $ref->{$_} } qw(drawing microfiche); $report->add_data($row); - my $next_ref = $form->{parts}->[$idx + 1]; + my $next_ref = $form->{parts}[$idx + 1]; + # insert subtotal rows if (($form->{l_subtotal} eq 'Y') && (!$next_ref || (!$next_ref->{assemblyitem} && ($same_item ne $next_ref->{ $form->{sort} })))) { @@ -1903,7 +1900,7 @@ sub link_part { # if this is a tax field if ($key =~ /IC_tax/) { - if ($key =~ /$item/) { + if ($key =~ /\Q$item\E/) { $form->{taxaccounts} .= "$ref->{accno} "; $form->{"IC_tax_$ref->{accno}_description"} = "$ref->{accno}--$ref->{description}"; @@ -1980,6 +1977,7 @@ sub form_header { my ($notdiscountableok, $notdiscountable); my ($formula, $formula_label, $imagelinks, $obsolete, $shopok, $shop); + $form->get_lists('price_factors' => 'ALL_PRICE_FACTORS'); map({ $form->{$_} = $form->format_amount(\%myconfig, $form->{$_}, -2) } qw(sellprice listprice lastcost gv)); @@ -2320,6 +2318,22 @@ sub form_header { $unit_select .= AM->unit_select_html($units, "unit", $form->{"unit"}); } + my $price_factor; + if (0 < scalar @{ $form->{ALL_PRICE_FACTORS} }) { + my @values = ('', map { $_->{id} } @{ $form->{ALL_PRICE_FACTORS} }); + my %labels = map { $_->{id} => $_->{description} } @{ $form->{ALL_PRICE_FACTORS} }; + + $price_factor = + qq|| + . $locale->text('Price Factor') + . qq|| + . NTI($cgi->popup_menu('-name' => 'price_factor_id', + '-default' => $form->{price_factor_id}, + '-values' => \@values, + '-labels' => \%labels)) + . qq||; + } + $form->{fokus} = "ic.partnumber"; $form->header; @@ -2371,16 +2385,14 @@ sub form_header { - - + + - @@ -2433,6 +2445,7 @@ sub form_header { $lastcost + $price_factor @@ -2886,7 +2899,7 @@ sub save { # now take it apart and restore original values foreach my $item (split /&/, $previousform) { - my ($key, $value) = split /=/, $item, 2; + my ($key, $value) = split m/=/, $item, 2; $value =~ s/%26/&/g; $form->{$key} = $value; } @@ -2906,8 +2919,7 @@ sub save { $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 price_factor_id); $form->{sellprice} += $form->{"sellprice_$i"} * $form->{"qty_$i"}; $form->{weight} += $form->{"weight_$i"} * $form->{"qty_$i"}; @@ -2918,15 +2930,17 @@ sub save { $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 lastcost price_factor_id); + $form->{"sellprice_$i"} = $newform{lastcost} if ($form->{vendor_id}); + if ($form->{exchangerate} != 0) { $form->{"sellprice_$i"} /= $form->{exchangerate}; } + $lxdebug->message($LXDebug::DEBUG1, qq|sellprice_$i in previousform 2 = | . $form->{"sellprice_$i"} . qq|\n|); - map { $form->{"taxaccounts_$i"} .= "$_ " } split / /, - $newform{taxaccount}; + + map { $form->{"taxaccounts_$i"} .= "$_ " } split / /, $newform{taxaccount}; chop $form->{"taxaccounts_$i"}; foreach my $item (qw(description rate taxnumber)) { my $index = $form->{"taxaccounts_$i"} . "_$item"; @@ -2934,26 +2948,28 @@ sub save { } # 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); + map { $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}) } qw(weight listprice sellprice rop); } $form->{"id_$i"} = $parts_id; + + # Get the actual price factor (not just the ID) for the marge calculation. + $form->get_lists('price_factors' => 'ALL_PRICE_FACTORS'); + foreach my $pfac (@{ $form->{ALL_PRICE_FACTORS} }) { + next if ($pfac->{id} != $newform{price_factor_id}); + $form->{"marge_price_factor_$i"} = $pfac->{factor}; + last; + } + delete $form->{ALL_PRICE_FACTORS}; + delete $form->{action}; # restore original callback @@ -3057,10 +3073,19 @@ sub parts_language_selection { my $languages = IC->retrieve_languages(\%myconfig, $form); + if ($form->{language_values} ne "") { + foreach $item (split(/---\+\+\+---/, $form->{language_values})) { + my ($language_id, $translation, $longdescription) = split(/--\+\+--/, $item); + + foreach my $language (@{ $languages }) { + next unless ($language->{id} == $language_id); - my $callback = "$form->{script}?action=parts_language_selection&"; - map({ $callback .= "$_=" . $form->escape($form->{$_}) . "&" } - (qw(login password name input_name), grep({ /^[fl]_/ } keys %$form))); + $language->{translation} = $translation; + $language->{longdescription} = $longdescription; + last; + } + } + } my @header_sort = qw(name longdescription); my %header_title = ( "name" => $locale->text("Name"), @@ -3076,9 +3101,9 @@ sub parts_language_selection { $form->{"title"} = $locale->text("Language Values"); $form->header(); - print($form->parse_html_template("ic/parts_language_selection", { "HEADER" => \@header, - "LANGUAGES" => $languages, - "onload" => $onload })); + print $form->parse_html_template2("ic/parts_language_selection", { "HEADER" => \@header, + "LANGUAGES" => $languages, + "onload" => $onload }); $lxdebug->leave_sub(); }
| - . $locale->text('') . qq|
+ + $buchungsgruppe + $linkaccounts +
+
- - $buchungsgruppe - $linkaccounts -
-
| . $locale->text('Notes') . qq| $formula_label{sellprice}>
| . $locale->text('Unit') . qq| $unit_select