#
#######################################################################
+use SL::Common;
use SL::CT;
use SL::IC;
use CGI::Ajax;
$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);
$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"} }) {
$linetotal =
$form->round_amount($form->{"sellprice_$i"} - $discount, $decimalplaces);
$linetotal = $form->round_amount($linetotal * $form->{"qty_$i"}, 2);
+ my $real_sellprice = $form->{"sellprice_$i"} - $discount;
+
+ # marge calculations
+ my ($marge_font_start, $marge_font_end);
+
+ $form->{"lastcost_$i"} *= 1;
+
+ if ($real_sellprice && ($form->{"qty_$i"} * 1)) {
+ $form->{"marge_percent_$i"} = ($real_sellprice - $form->{"lastcost_$i"}) * 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 = "<font color=\"#ff0000\">";
+ $marge_font_end = "</font>";
+ }
+
+ } 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"}) * $form->{"qty_$i"} * $marge_adjust_credit_note;
+ $form->{"marge_total"} += $form->{"marge_absolut_$i"};
+ $form->{"lastcost_total"} += $form->{"lastcost_$i"} * $form->{"qty_$i"};
+ $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 }
qq|<td align="right"><input name="qty_$i" size="5" value="|
. $form->format_amount(\%myconfig, $form->{"qty_$i"}, $qty_dec) .qq|">|;
if ($form->{"formel_$i"}) {
- $column_data{qty} .= qq|<button type="button" onclick="calculate_qty_selection_window('qty_$i','alu_$i', 'formel_$i', $i)">| . $locale->text('*/') . qq|</button>| .
- $cgi->hidden("-name" => "formel_$i", "-value" => $form->{"formel_$i"}) . $cgi->hidden("-name" => "alu_$i", "-value" => $form->{"alu_$i"}). qq|</td>|;
+ $column_data{qty} .= qq|<button type="button" onclick="calculate_qty_selection_window('qty_$i','alu_$i', 'formel_$i', $i)">| . $locale->text('*/') . qq|</button>|
+ . $cgi->hidden("-name" => "formel_$i", "-value" => $form->{"formel_$i"}) . $cgi->hidden("-name" => "alu_$i", "-value" => $form->{"alu_$i"});
}
+ $column_data{qty} .= qq|</td>|;
$column_data{ship} =
qq|<td align="right"><input name="ship_$i" size=5 value="|
. $form->format_amount(\%myconfig, $form->{"ship_$i"})
"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"));
########################################
# Eintrag fuer Version 2.2.0 geaendert #
my $subtotalchecked = ($form->{"subtotal_$i"}) ? "checked" : "";
print qq|
<b>|.$locale->text('Subtotal').qq|</b> <input type="checkbox" name="subtotal_$i" value="1" "$subtotalchecked">
+|;
+
+ if ($form->{"id_$i"} && $is_sales) {
+ print qq|
+ ${marge_font_start}<b>| . $locale->text('Ertrag') . qq|</b> $form->{"marge_absolut_$i"} $form->{"marge_percent_$i"} % ${marge_font_end}
+ <b>| . $locale->text('LP') . qq|</b> | . $form->format_amount(\%myconfig, $form->{"listprice_$i"}, 2) . qq|
+ <b>| . $locale->text('EK') . qq|</b> | . $form->format_amount(\%myconfig, $form->{"lastcost_$i"}, 2);
+ }
+
+ print qq|
</td>
</tr>
-
|;
############## ENDE Neueintrag ##################
</tr>
|;
+ if (0 != ($form->{sellprice_total} * 1)) {
+ $form->{marge_percent} = ($form->{sellprice_total} - $form->{lastcost_total}) / $form->{sellprice_total} * 100;
+ }
+
$lxdebug->leave_sub();
}
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);
push(@new_fields, "lizenzen") if ($lizenzen);
print join "\n", map { $cgi->hidden("-name" => "new_${_}_$i", "-value" => $ref->{$_}) } @new_fields;
map { $form->{"${_}_$i"} = $form->{"new_${_}_$j"} }
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);
if ($form->{"part_payment_id_$i"} ne "") {
$form->{payment_id} = $form->{"part_payment_id_$i"};
}
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)
+ 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 lastcost )
);
$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
}
$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');
$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";
print_form("return");
+ Common->save_email_status(\%myconfig, $form);
+
$form->{callback} = $callback;
$form->redirect();
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,
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!'))
$inv = "ord";
$due = "req";
$form->{"${inv}date"} = $form->{transdate};
- $form->{label} = $locale->text('Sales Order');
+ $form->{label} = $locale->text('Confirmation');
$numberfld = "sonumber";
$order = 1;
}
$inv = "quo";
$due = "req";
$form->{"${inv}date"} = $form->{transdate};
- $form->{label} = $locale->text('Quotation');
+ $form->{label} = $locale->text('RFQ');
$numberfld = "rfqnumber";
$order = 1;
}
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"}->[$_] =
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/;