X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=bin%2Fmozilla%2Fio.pl;h=bb3d2054bcd94e65b5217c3742d5f4f6854656ac;hb=1e25131315e72036aa6df1d626011a761218d233;hp=6db2c5743f7c4768255cf7bc6bd0cdb93dbd532e;hpb=7dfa1c0a93585de7736045b5af28bd7dbb600ebc;p=kivitendo-erp.git diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl index 6db2c5743..bb3d2054b 100644 --- a/bin/mozilla/io.pl +++ b/bin/mozilla/io.pl @@ -33,10 +33,13 @@ # ####################################################################### +use CGI; +use CGI::Ajax; +use List::Util qw(max); + +use SL::Common; use SL::CT; use SL::IC; -use CGI::Ajax; -use CGI; require "bin/mozilla/common.pl"; @@ -91,6 +94,11 @@ sub display_row { $lxdebug->enter_sub(); my $numrows = shift; + my $is_sales = + (substr($form->{type}, 0, 6) eq "sales_") + || (($form->{type} eq "invoice") && ($form->{script} eq "is.pl")) + || ($form->{type} eq 'credit_note'); + if ($lizenzen && $form->{vc} eq "customer") { if ($form->{type} =~ /sales_order/) { @column_index = (runningnumber, partnumber, description, ship, qty); @@ -113,6 +121,8 @@ sub display_row { my $service_units = AM->retrieve_units(\%myconfig, $form, "service"); my $all_units = AM->retrieve_units(\%myconfig, $form); + my %price_factors = map { $_->{id} => $_->{factor} } @{ $form->{ALL_PRICE_FACTORS} }; + push @column_index, qw(unit); #for pricegroups column @@ -241,6 +251,9 @@ sub display_row { $delvar = 'reqdate'; } + $form->{marge_total} = 0; + $form->{sellprice_total} = 0; + $form->{lastcost_total} = 0; my %projectnumber_labels = (); my @projectnumber_values = (""); foreach my $item (@{ $form->{"ALL_PROJECTS"} }) { @@ -288,18 +301,45 @@ sub display_row { $form->{"unit_old_$i"} = $form->{"selected_unit_$i"}; } } + ($dec) = ($form->{"sellprice_$i"} =~ /\.(\d+)/); - $dec = length $dec; - $decimalplaces = ($dec > 2) ? $dec : 2; + $decimalplaces = max length($dec), 2; + + $price_factor = $price_factors{$form->{"price_factor_id_$i"}} || 1; + $discount = (100 - $form->{"discount_$i"} * 1) / 100; + + $linetotal = $form->round_amount($form->{"sellprice_$i"} * $form->{"qty_$i"} * $discount / $price_factor, $decimalplaces); + + my $real_sellprice = $form->{"sellprice_$i"} * $discount / $price_factor; + + # marge calculations + my ($marge_font_start, $marge_font_end); - $discount = - $form->round_amount( - $form->{"sellprice_$i"} * $form->{"discount_$i"} / 100, - $decimalplaces); + $form->{"lastcost_$i"} *= 1; - $linetotal = - $form->round_amount($form->{"sellprice_$i"} - $discount, $decimalplaces); - $linetotal = $form->round_amount($linetotal * $form->{"qty_$i"}, 2); + $marge_price_factor = $form->{"marge_price_factor_$i"} * 1 || 1; + + if ($real_sellprice && ($form->{"qty_$i"} * 1)) { + $form->{"marge_percent_$i"} = ($real_sellprice - $form->{"lastcost_$i"} / $marge_price_factor) * 100 / $real_sellprice; + $myconfig{"marge_percent_warn"} = 15 unless (defined($myconfig{"marge_percent_warn"})); + + if ($form->{"id_$i"} && + ($form->{"marge_percent_$i"} < (1 * $myconfig{"marge_percent_warn"}))) { + $marge_font_start = ""; + $marge_font_end = ""; + } + + } else { + $form->{"marge_percent_$i"} = 0; + } + + my $marge_adjust_credit_note = $form->{type} eq 'credit_note' ? -1 : 1; + $form->{"marge_absolut_$i"} = ($real_sellprice - $form->{"lastcost_$i"} / $marge_price_factor) * $form->{"qty_$i"} * $marge_adjust_credit_note; + $form->{"marge_total"} += $form->{"marge_absolut_$i"}; + $form->{"lastcost_total"} += $form->{"lastcost_$i"} * $form->{"qty_$i"} / $marge_price_factor; + $form->{"sellprice_total"} += $real_sellprice * $form->{"qty_$i"}; + + map { $form->{"${_}_$i"} = $form->format_amount(\%myconfig, $form->{"${_}_$i"}, 2) } qw(marge_absolut marge_percent); # convert " to " map { $form->{"${_}_$i"} =~ s/\"/"/g } @@ -331,9 +371,10 @@ sub display_row { qq||; if ($form->{"formel_$i"}) { - $column_data{qty} .= qq|| . - $cgi->hidden("-name" => "formel_$i", "-value" => $form->{"formel_$i"}) . $cgi->hidden("-name" => "alu_$i", "-value" => $form->{"alu_$i"}). qq||; + $column_data{qty} .= qq|| + . $cgi->hidden("-name" => "formel_$i", "-value" => $form->{"formel_$i"}) . $cgi->hidden("-name" => "alu_$i", "-value" => $form->{"alu_$i"}); } + $column_data{qty} .= qq||; $column_data{ship} = qq|{ALL_PRICE_FACTORS} }) { + my @values = ('', map { $_->{id} } @{ $form->{ALL_PRICE_FACTORS} }); + my %labels = map { $_->{id} => $_->{description} } @{ $form->{ALL_PRICE_FACTORS} }; + + $price_factor_select = + NTI($cgi->popup_menu('-name' => "price_factor_id_$i", + '-default' => $form->{"price_factor_id_$i"}, + '-values' => \@values, + '-labels' => \%labels, + '-style' => 'width:90px')) + . ' '; + } + $column_data{"unit"} = "" . + $price_factor_select . AM->unit_select_html($is_part || $is_assembly ? $dimension_units : $is_assigned ? $service_units : $all_units, "unit_$i", $this_unit, @@ -439,7 +495,8 @@ sub display_row { "id_$i", "inventory_accno_$i", "bin_$i", "partsgroup_$i", "partnotes_$i", "income_accno_$i", "expense_accno_$i", "listprice_$i", "assembly_$i", "taxaccounts_$i", "ordnumber_$i", "transdate_$i", "cusordnumber_$i", - "longdescription_$i", "basefactor_$i")); + "longdescription_$i", "basefactor_$i", "marge_absolut_$i", "marge_percent_$i", "lastcost_$i", + "marge_price_factor_$i")); ######################################## # Eintrag fuer Version 2.2.0 geaendert # @@ -491,10 +548,27 @@ sub display_row { } my $subtotalchecked = ($form->{"subtotal_$i"}) ? "checked" : ""; print qq| - |.$locale->text('Subtotal').qq|  + |.$locale->text('Subtotal').qq|  +|; + + if ($form->{"id_$i"} && $is_sales) { + my $marge_price_factor; + + $form->{"marge_price_factor_$i"} *= 1; + + if ($form->{"marge_price_factor_$i"} && (1 != $form->{"marge_price_factor_$i"})) { + $marge_price_factor = '/' . $form->format_amount(\%myconfig, $form->{"marge_price_factor_$i"}); + } + + print qq| + ${marge_font_start}| . $locale->text('Ertrag') . qq| $form->{"marge_absolut_$i"} $form->{"marge_percent_$i"} % ${marge_font_end} +  | . $locale->text('LP') . qq| | . $form->format_amount(\%myconfig, $form->{"listprice_$i"}, 2) . qq| +  | . $locale->text('EK') . qq| | . $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, 2) . $marge_price_factor; + } + + print qq| - |; ############## ENDE Neueintrag ################## @@ -511,6 +585,10 @@ sub display_row { |; + if (0 != ($form->{sellprice_total} * 1)) { + $form->{marge_percent} = ($form->{sellprice_total} - $form->{lastcost_total}) / $form->{sellprice_total} * 100; + } + $lxdebug->leave_sub(); } @@ -647,7 +725,7 @@ sub select_item { my @new_fields = qw(bin listprice inventory_accno income_accno expense_accno unit weight assembly taxaccounts partsgroup formel longdescription not_discountable - part_payment_id partnotes id); + part_payment_id partnotes id lastcost price_factor_id price_factor); push(@new_fields, "lizenzen") if ($lizenzen); print join "\n", map { $cgi->hidden("-name" => "new_${_}_$i", "-value" => $ref->{$_}) } @new_fields; @@ -703,10 +781,16 @@ sub item_selected { # if there was a price entered, override it $sellprice = $form->parse_amount(\%myconfig, $form->{"sellprice_$i"}); - map { $form->{"${_}_$i"} = $form->{"new_${_}_$j"} } + my @new_fields = qw(id partnumber description sellprice listprice inventory_accno income_accno expense_accno bin unit weight assembly taxaccounts - partsgroup formel longdescription not_discountable partnotes); + partsgroup formel longdescription not_discountable partnotes lastcost + price_factor_id price_factor); + + map { $form->{"${_}_$i"} = $form->{"new_${_}_$j"} } @new_fields; + + $form->{"marge_price_factor_$i"} = $form->{"new_price_factor_$j"}; + if ($form->{"part_payment_id_$i"} ne "") { $form->{payment_id} = $form->{"part_payment_id_$i"}; } @@ -756,8 +840,7 @@ sub item_selected { # delete all the new_ variables for $i (1 .. $form->{lastndx}) { - map { delete $form->{"new_${_}_$i"} } - qw(partnumber description sellprice bin listprice inventory_accno income_accno expense_accno unit assembly taxaccounts id); + map { delete $form->{"new_${_}_$i"} } @new_fields; } map { delete $form->{$_} } qw(ndx lastndx nextsub); @@ -820,12 +903,11 @@ sub new_item { . $locale->text('Part') . qq|
 | . $locale->text('Service'); -print $cgi->hidden("-name" => "previousform", "-value" => $previousform); -map({ print($cgi->hidden("-name" => $_, "-value" => $form->{$_})); } - qw(rowcount vc login password)); - map({ print($cgi->hidden("-name" => $_, "-value" => $form->{"$__$i"})); } - ("partnumber", "description")); -print $cgi->hidden("-name" => "taxaccount2", "-value" => $form->{taxaccounts}); + + print $cgi->hidden("-name" => "previousform", "-value" => $previousform); + map { print $cgi->hidden("-name" => $_, "-value" => $form->{$_}); } qw(rowcount vc login password); + map { print $cgi->hidden("-name" => $_, "-value" => $form->{"${_}_$i"}); } qw(partnumber description unit sellprice price_factor_id); + print $cgi->hidden("-name" => "taxaccount2", "-value" => $form->{taxaccounts}); print qq| @@ -945,10 +1027,7 @@ sub check_form { $lxdebug->enter_sub(); my @a = (); my $count = 0; - my @flds = ( - qw(id partnumber description qty ship sellprice unit discount inventory_accno income_accno expense_accno listprice taxaccounts bin assembly weight projectnumber project_id oldprojectnumber runningnumber serialnumber partsgroup payment_id not_discountable shop ve gv buchungsgruppen_id language_values sellprice_pg pricegroup_old price_old price_new unit_old ordnumber transdate longdescription basefactor) - ); - + my @flds = (qw(id partnumber description qty ship sellprice unit discount inventory_accno income_accno expense_accno listprice taxaccounts bin assembly weight projectnumber project_id oldprojectnumber runningnumber serialnumber partsgroup payment_id not_discountable shop ve gv buchungsgruppen_id language_values sellprice_pg pricegroup_old price_old price_new unit_old ordnumber transdate longdescription basefactor marge_absolut marge_percent marge_price_factor lastcost price_factor_id)); # remove any makes or model rows if ($form->{item} eq 'part') { @@ -1018,6 +1097,9 @@ sub check_form { $form->redo_rows(\@flds, \@a, $count, $form->{makemodel_rows}); $form->{makemodel_rows} = $count; + } elsif ($form->{item} eq 'service') { + map { $form->{$_} = $form->parse_amount(\%myconfig, $form->{$_}) } qw(listprice sellprice lastcost); + } else { # this section applies to invoices and orders @@ -1129,6 +1211,9 @@ sub order { } $form->{ordnumber} = $form->{invnumber}; + $form->{old_employee_id} = $form->{employee_id}; + $form->{old_salesman_id} = $form->{salesman_id}; + map { delete $form->{$_} } qw(id printed emailed queued); if ($form->{script} eq 'ir.pl' || $form->{type} eq 'request_quotation') { $form->{title} = $locale->text('Add Purchase Order'); @@ -1264,8 +1349,7 @@ sub edit_e_mail { $form->{"email"} = $form->{"cp_email"}; } - $form->{ $form->{vc} } =~ /--/; - $title = $locale->text('E-mail') . " $`"; + $title = $locale->text('E-mail') . " " . $form->get_formname_translation(); $form->{oldmedia} = $form->{media}; $form->{media} = "email"; @@ -1299,6 +1383,8 @@ sub send_email { print_form("return"); + Common->save_email_status(\%myconfig, $form); + $form->{callback} = $callback; $form->redirect(); @@ -1392,7 +1478,7 @@ sub print_options { opthash("opendocument", $form->{DF}{opendocument}, $locale->text("OpenDocument/OASIS")) : undef; push @LANGUAGE_ID, - map { opthash($_->{id}, ($_->{id} eq $form->{language} ? 'selected' : ''), $_->{description}) } +{}, @{ $form->{languages} } + map { opthash($_->{id}, ($_->{id} eq $form->{language_id} ? 'selected' : ''), $_->{description}) } +{}, @{ $form->{languages} } if (ref $form->{languages} eq 'ARRAY'); push @PRINTER_ID, @@ -1483,7 +1569,7 @@ sub print_form { $inv = "ord"; $due = "req"; $form->{"${inv}date"} = $form->{transdate}; - $form->{label} = $locale->text('Sales Order'); + $form->{label} = $locale->text('Confirmation'); $numberfld = "sonumber"; $order = 1; } @@ -1565,7 +1651,7 @@ sub print_form { $inv = "quo"; $due = "req"; $form->{"${inv}date"} = $form->{transdate}; - $form->{label} = $locale->text('Quotation'); + $form->{label} = $locale->text('RFQ'); $numberfld = "rfqnumber"; $order = 1; } @@ -1742,7 +1828,7 @@ sub print_form { } keys(%{$form}))); reformat_numbers($output_numberformat, undef, - qw(qty), + qw(qty price_factor), grep({ /^qty_\d+$/ } keys(%{$form})));