X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=inline;f=bin%2Fmozilla%2Fio.pl;h=bb3d2054bcd94e65b5217c3742d5f4f6854656ac;hb=6ebad56e58db857141565f397c555524cba43109;hp=e597aa036b56ff52a38a5cdfe1ab13df2b6f518a;hpb=1387c8c3ae668f43cafc8b81f51f7952b42db262;p=kivitendo-erp.git
diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl
index e597aa036..bb3d2054b 100644
--- a/bin/mozilla/io.pl
+++ b/bin/mozilla/io.pl
@@ -33,19 +33,22 @@
#
#######################################################################
+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 "$form->{path}/common.pl";
+require "bin/mozilla/common.pl";
# any custom scripts for this one
-if (-f "$form->{path}/custom_io.pl") {
- eval { require "$form->{path}/custom_io.pl"; };
+if (-f "bin/mozilla/custom_io.pl") {
+ eval { require "bin/mozilla/custom_io.pl"; };
}
-if (-f "$form->{path}/$form->{login}_io.pl") {
- eval { require "$form->{path}/$form->{login}_io.pl"; };
+if (-f "bin/mozilla/$form->{login}_io.pl") {
+ eval { require "bin/mozilla/$form->{login}_io.pl"; };
}
1;
@@ -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);
+
+ $form->{"lastcost_$i"} *= 1;
+
+ $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"}));
- $discount =
- $form->round_amount(
- $form->{"sellprice_$i"} * $form->{"discount_$i"} / 100,
- $decimalplaces);
+ 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;
+ }
- $linetotal =
- $form->round_amount($form->{"sellprice_$i"} - $discount, $decimalplaces);
- $linetotal = $form->round_amount($linetotal * $form->{"qty_$i"}, 2);
+ 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();
}
@@ -646,12 +724,12 @@ sub select_item {
my @new_fields =
qw(bin listprice inventory_accno income_accno expense_accno unit weight
- assembly taxaccounts partsgroup formel logdescription not_discountable
- part_payment_id partnodes id);
+ assembly taxaccounts partsgroup formel longdescription not_discountable
+ part_payment_id partnotes id lastcost price_factor_id price_factor);
push(@new_fields, "lizenzen") if ($lizenzen);
- map({ print($cgi->hidden("-name" => "new_${_}_$i",
- "-value" => $ref->{$_})); } @new_fields);
+ print join "\n", map { $cgi->hidden("-name" => "new_${_}_$i", "-value" => $ref->{$_}) } @new_fields;
+ print "\n";
}
print qq|
@@ -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->{$_})); }
- ("rowcount", "vc", "path", "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|
@@ -854,7 +936,7 @@ sub display_form {
# if we have a display_form
if ($form->{display_form}) {
- &{"$form->{display_form}"};
+ call_sub($form->{"display_form"});
exit;
}
@@ -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');
@@ -1150,7 +1235,7 @@ sub order {
$form->{cp_id} *= 1;
- require "$form->{path}/$form->{script}";
+ require "bin/mozilla/$form->{script}";
my $script = $form->{"script"};
$script =~ s|.*/||;
$script =~ s|.pl$||;
@@ -1214,7 +1299,7 @@ sub quotation {
$form->{rowcount}--;
- require "$form->{path}/$form->{script}";
+ require "bin/mozilla/$form->{script}";
map { $form->{"select$_"} = "" } ($form->{vc}, currency);
@@ -1256,166 +1341,35 @@ sub edit_e_mail {
$form->{print_and_post} = 0;
$form->{resubmit} = 0;
}
- if ($myconfig{role} eq 'admin') {
- $bcc = qq|
-
- | . $locale->text('Bcc') . qq| |
- |
-
-|;
- }
- if ($form->{formname} =~ /(pick|packing|bin)_list/) {
- $form->{email} = $form->{shiptoemail} if $form->{shiptoemail};
- }
+ $form->{email} = $form->{shiptoemail} if $form->{shiptoemail} && $form->{formname} =~ /(pick|packing|bin)_list/;
if ($form->{"cp_id"} && !$form->{"email"}) {
CT->get_contact(\%myconfig, $form);
$form->{"email"} = $form->{"cp_email"};
}
- $name = $form->{ $form->{vc} };
- $name =~ s/--.*//g;
- $title = $locale->text('E-mail') . " $name";
+ $title = $locale->text('E-mail') . " " . $form->get_formname_translation();
$form->{oldmedia} = $form->{media};
$form->{media} = "email";
- my %formname_translations =
- (
- "bin_list" => $locale->text('Bin List'),
- "credit_note" => $locale->text('Credit Note'),
- "invoice" => $locale->text('Invoice'),
- "packing_list" => $locale->text('Packing List'),
- "pick_list" => $locale->text('Pick List'),
- "proforma" => $locale->text('Proforma Invoice'),
- "purchase_order" => $locale->text('Purchase Order'),
- "request_quotation" => $locale->text('RFQ'),
- "sales_order" => $locale->text('Confirmation'),
- "sales_quotation" => $locale->text('Quotation'),
- "storno_invoice" => $locale->text('Storno Invoice'),
- "storno_packing_list" => $locale->text('Storno Packing List'),
- );
-
- my $attachment_filename = $formname_translations{$form->{"formname"}};
- my $prefix;
-
- if (grep({ $form->{"type"} eq $_ } qw(invoice credit_note))) {
- $prefix = "inv";
- } elsif ($form->{"type"} =~ /_quotation$/) {
- $prefix = "quo";
- } else {
- $prefix = "ord";
- }
-
- if ($attachment_filename && $form->{"${prefix}number"}) {
- $attachment_filename .= "_" . $form->{"${prefix}number"} .
- ($form->{"format"} =~ /pdf/i ? ".pdf" :
- $form->{"format"} =~ /postscript/i ? ".ps" :
- $form->{"format"} =~ /opendocument/i ? ".odt" :
- $form->{"format"} =~ /html/i ? ".html" : "");
- $attachment_filename =~ s/ /_/g;
- my %umlaute =
- (
- "ä" => "ae", "ö" => "oe", "ü" => "ue",
- "Ä" => "Ae", "Ö" => "Oe", "Ü" => "Ue",
- "ß" => "ss"
- );
- map({ $attachment_filename =~ s/$_/$umlaute{$_}/g; } keys(%umlaute));
- } else {
- $attachment_filename = "";
- }
+ my $attachment_filename = $form->generate_attachment_filename();
- if ($form->{"email"}) {
- $form->{"fokus"} = "Form.subject";
- } else {
- $form->{"fokus"} = "Form.email";
- }
+ $form->{"fokus"} = $form->{"email"} ? "Form.subject" : "Form.email";
$form->header;
- print qq|
-
+ my (@dont_hide_key_list, %dont_hide_key, @hidden_keys);
+ @dont_hide_key_list = qw(action email cc bcc subject message formname sendmode format header override);
+ @dont_hide_key{@dont_hide_key_list} = (1) x @dont_hide_key_list;
+ @hidden_keys = grep { !$dont_hide_key{$_} } grep { !ref $form->{$_} } keys %$form;
-
-
-
-