X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;ds=inline;f=bin%2Fmozilla%2Fio.pl;h=bb3d2054bcd94e65b5217c3742d5f4f6854656ac;hb=6ebad56e58db857141565f397c555524cba43109;hp=5f2324f15e1600f813e8751932f4c99ec22e6b4a;hpb=cc38697a3af2c270c662e9187aeb3f6ecb92d709;p=kivitendo-erp.git
diff --git a/bin/mozilla/io.pl b/bin/mozilla/io.pl
index 5f2324f15..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;
- $discount =
- $form->round_amount(
- $form->{"sellprice_$i"} * $form->{"discount_$i"} / 100,
- $decimalplaces);
+ $price_factor = $price_factors{$form->{"price_factor_id_$i"}} || 1;
+ $discount = (100 - $form->{"discount_$i"} * 1) / 100;
- $linetotal =
- $form->round_amount($form->{"sellprice_$i"} - $discount, $decimalplaces);
- $linetotal = $form->round_amount($linetotal * $form->{"qty_$i"}, 2);
+ $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"}));
+
+ 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,
@@ -368,9 +424,9 @@ sub display_row {
}
$column_data{sellprice_pg} =
- qq| | | |;
+ qq| | |;
$column_data{sellprice} =
- qq| | |;
+ qq| | |;
} else {
# for last row and report
@@ -388,10 +444,10 @@ sub display_row {
# for last row
$column_data{sellprice_pg} = qq| | |;
- }
-
+ }
+
$column_data{sellprice} =
- qq| | |;
@@ -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 #
@@ -486,15 +543,32 @@ sub display_row {
? 'deliverydate'
: 'reqdate'; # invoice uses a different term for the same thing.
print qq|
- ${$reqdate_term}
+ ${$reqdate_term}
|;
}
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();
}
@@ -583,7 +661,7 @@ sub select_item {
$colspan = $#column_index + 1;
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;
-
-
-|;
+ print $form->parse_html_template('generic/edit_email',
+ { title => $title,
+ a_filename => $attachment_filename,
+ _print_options_ => print_options({ 'inline' => 1 }),
+ HIDDEN => [ map +{ name => $_, value => $form->{$_} }, @hidden_keys ],
+ SHOW_BCC => $myconfig{role} eq 'admin' });
$lxdebug->leave_sub();
}
@@ -1432,10 +1379,12 @@ sub send_email {
my $callback = $form->{script} . "?action=edit";
map({ $callback .= "\&${_}=" . E($form->{$_}); }
- qw(login password path type id));
+ qw(login password type id));
print_form("return");
+ Common->save_email_status(\%myconfig, $form);
+
$form->{callback} = $callback;
$form->redirect();
@@ -1452,7 +1401,11 @@ sub send_email {
#
# the inline options is untested, but intended to be used later in metatemplating
sub print_options {
- $lxdebug->enter_sub() and my ($inline) = @_;
+ $lxdebug->enter_sub();
+
+ my ($options) = @_;
+
+ $options ||= { };
# names 3 parameters and returns a hashref, for use in templates
sub opthash { +{ value => shift, selected => shift, oname => shift } }
@@ -1505,43 +1458,50 @@ sub print_options {
push @MEDIA, grep $_,
opthash("screen", $form->{OP}{screen}, $locale->text('Screen')),
- (scalar keys %{ $form->{printers} } && $latex_templates) ?
+ (scalar @{ $form->{printers} } && $latex_templates) ?
opthash("printer", $form->{OP}{printer}, $locale->text('Printer')) : undef,
- ($latex_templates) ?
+ ($latex_templates && !$options->{no_queue}) ?
opthash("queue", $form->{OP}{queue}, $locale->text('Queue')) : undef
if ($form->{media} ne 'email');
push @FORMAT, grep $_,
- ($opendocument_templates && $openofficeorg_writer_bin && $xvfb_bin && (-x $openofficeorg_writer_bin) && (-x $xvfb_bin)) ?
+ ($opendocument_templates && $openofficeorg_writer_bin && $xvfb_bin && (-x $openofficeorg_writer_bin) && (-x $xvfb_bin)
+ && !$options->{no_opendocument_pdf}) ?
opthash("opendocument_pdf", $form->{DF}{"opendocument_pdf"}, $locale->text("PDF (OpenDocument/OASIS)")) : undef,
- ($latex_templates) ? (
- opthash("pdf", $form->{DF}{pdf}, $locale->text('PDF')),
- opthash("postscript", $form->{DF}{postscript}, $locale->text('Postscript'))
- ) : undef,
- opthash("html", $form->{DF}{html}, "HTML"),
- ($opendocument_templates) ?
+ ($latex_templates) ?
+ opthash("pdf", $form->{DF}{pdf}, $locale->text('PDF')) : undef,
+ ($latex_templates && !$options->{no_postscript}) ?
+ opthash("postscript", $form->{DF}{postscript}, $locale->text('Postscript')) : undef,
+ (!$options->{no_html}) ?
+ opthash("html", $form->{DF}{html}, "HTML") : undef,
+ ($opendocument_templates && !$options->{no_opendocument}) ?
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,
map { opthash($_->{id}, ($_->{id} eq $form->{printer_id} ? 'selected' : ''), $_->{printer_description}) } +{}, @{ $form->{printers} }
- if (ref $form->{printers} eq 'ARRAY');
+ if ((ref $form->{printers} eq 'ARRAY') && scalar @{ $form->{printers } });
@SELECTS = map { sname => lc $_, DATA => \@$_, show => scalar @$_ }, qw(FORMNAME LANGUAGE_ID FORMAT SENDMODE MEDIA PRINTER_ID);
+ my %dont_display_groupitems = (
+ 'dunning' => 1,
+ );
+
%template_vars = (
- display_copies => scalar keys %{ $form->{printers} } && $latex_templates && $form->{media} ne 'email',
+ display_copies => scalar @{ $form->{printers} } && $latex_templates && $form->{media} ne 'email',
display_remove_draft => (!$form->{id} && $form->{draft_id}),
+ display_groupitems => !$dont_display_groupitems{$form->{type}},
groupitems_checked => $form->{groupitems} ? "checked" : '',
remove_draft_checked => $form->{remove_draft} ? "checked" : ''
);
my $print_options = $form->parse_html_template("generic/print_options", { SELECTS => \@SELECTS, %template_vars } );
- if ($inline) {
+ if ($options->{inline}) {
$lxdebug->leave_sub() and return $print_options;
} else {
print $print_options; $lxdebug->leave_sub();
@@ -1551,6 +1511,12 @@ sub print_options {
sub print {
$lxdebug->enter_sub();
+ if ($form->{print_nextsub}) {
+ call_sub($form->{print_nextsub});
+ $lxdebug->leave_sub();
+ return;
+ }
+
# if this goes to the printer pass through
if ($form->{media} eq 'printer' || $form->{media} eq 'queue') {
$form->error($locale->text('Select postscript or PDF!'))
@@ -1603,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;
}
@@ -1685,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;
}
@@ -1720,9 +1686,10 @@ sub print_form {
$form->{rowcount}--;
- &{"$display_form"};
+ call_sub($display_form);
# saving the history
if(!exists $form->{addition}) {
+ $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
$form->{addition} = "PRINTED";
$form->save_history($form->dbconnect(\%myconfig));
}
@@ -1742,7 +1709,7 @@ sub print_form {
$salesman_id_saved = $form->{salesman_id};
$cp_id_saved = $form->{cp_id};
- &{"$form->{vc}_details"}();
+ call_sub("$form->{vc}_details");
$form->{language_id} = $language_saved;
$form->{payment_id} = $payment_id_saved;
@@ -1809,8 +1776,17 @@ sub print_form {
$form->{templates} = "$myconfig{templates}";
+ delete $form->{printer_command};
+
$form->{language} = $form->get_template_language(\%myconfig);
- $form->{printer_code} = $form->get_printer_code(\%myconfig);
+
+ my $printer_code;
+ if ($form->{media} ne 'email') {
+ $printer_code = $form->get_printer_code(\%myconfig);
+ if ($printer_code ne "") {
+ $printer_code = "_" . $printer_code;
+ }
+ }
if ($form->{language} ne "") {
map({ $form->{"unit"}->[$_] =
@@ -1838,26 +1814,25 @@ sub print_form {
reformat_numbers($output_numberformat, 2,
qw(invtotal ordtotal quototal subtotal linetotal
listprice sellprice netprice discount
- tax taxbase),
+ tax taxbase total paid),
grep({ /^linetotal_\d+$/ ||
/^listprice_\d+$/ ||
/^sellprice_\d+$/ ||
/^netprice_\d+$/ ||
/^taxbase_\d+$/ ||
/^discount_\d+$/ ||
+ /^paid_\d+$/ ||
+ /^subtotal_\d+$/ ||
+ /^total_\d+$/ ||
/^tax_\d+$/
} keys(%{$form})));
reformat_numbers($output_numberformat, undef,
- qw(qty),
+ qw(qty price_factor),
grep({ /^qty_\d+$/
} keys(%{$form})));
- if ($form->{printer_code} ne "") {
- $form->{printer_code} = "_" . $form->{printer_code};
- }
-
- $form->{IN} = "$form->{formname}$form->{language}$form->{printer_code}.html";
+ $form->{IN} = "$form->{formname}$form->{language}${printer_code}.html";
if ($form->{format} eq 'postscript') {
$form->{postscript} = 1;
$form->{IN} =~ s/html$/tex/;
@@ -1873,6 +1848,8 @@ sub print_form {
$form->{"IN"} =~ s/html$/odt/;
}
+ delete $form->{OUT};
+
if ($form->{media} eq 'printer') {
$form->{OUT} = "| $form->{printer_command} &>/dev/null";
$form->{printed} .= " $form->{formname}";
@@ -1884,15 +1861,13 @@ sub print_form {
$form->{subject} = qq|$form->{label} $form->{"${inv}number"}|
unless $form->{subject};
- $form->{OUT} = "$sendmail";
-
$form->{emailed} .= " $form->{formname}";
$form->{emailed} =~ s/^ //;
}
$emailed = $form->{emailed};
if ($form->{media} eq 'queue') {
- %queued = split / /, $form->{queued};
+ %queued = map { s|.*/|| } split / /, $form->{queued};
if ($filename = $queued{ $form->{formname} }) {
$form->{queued} =~ s/$form->{formname} $filename//;
@@ -1915,6 +1890,7 @@ sub print_form {
# saving the history
if(!exists $form->{addition}) {
+ $form->{snumbers} = qq|ordnumber_| . $form->{ordnumber};
if($form->{media} =~ /printer/) {
$form->{addition} = "PRINTED";
}
@@ -1971,7 +1947,7 @@ sub print_form {
} qw(paid exchangerate);
}
- &{"$display_form"};
+ call_sub($display_form);
exit;
}
@@ -1982,7 +1958,7 @@ sub print_form {
$form->redirect(qq|$form->{label} $form->{"${inv}number"} $msg|);
}
if ($form->{printing}) {
- &{"$display_form"};
+ call_sub($display_form);
exit;
}
@@ -2036,7 +2012,7 @@ sub ship_to {
contact email phone fax));
# get details for name
- &{"$form->{vc}_details"}(@addr_vars);
+ call_sub("$form->{vc}_details", @addr_vars);
$number =
($form->{vc} eq 'customer')
@@ -2113,7 +2089,7 @@ sub ship_to {
| . $locale->text('Contact') . qq| |
$form->{contact} |
- |
+ |
| . $locale->text('Phone') . qq| |
@@ -2134,7 +2110,7 @@ sub ship_to {
-| . $cgi->hidden("-name" => "nexsub", "-value" => $nextsub);
+| . $cgi->hidden("-name" => "nextsub", "-value" => $nextsub);
;
@@ -2196,7 +2172,7 @@ sub new_license {
map { $form->{$_} = $form->escape($form->{$_}, 1) }
qw(partnumber description);
$form->{callback} =
- qq|$form->{script}?login=$form->{login}&path=$form->{path}&password=$form->{password}&action=add&vc=$form->{db}&$form->{db}_id=$form->{id}&$form->{db}=$name&type=$form->{type}&customer=$customer&partnumber=$form->{partnumber}&description=$form->{description}&previousform="$previousform"&initial=1|;
+ qq|$form->{script}?login=$form->{login}&password=$form->{password}&action=add&vc=$form->{db}&$form->{db}_id=$form->{id}&$form->{db}=$name&type=$form->{type}&customer=$customer&partnumber=$form->{partnumber}&description=$form->{description}&previousform="$previousform"&initial=1|;
$form->redirect;
$lxdebug->leave_sub();