close $temp_fh;
if ($template->uses_temp_file() || $self->{media} eq 'email') {
- $out = $self->{OUT};
- $out_mode = $self->{OUT_MODE} || '>';
- $self->{OUT} = "$self->{tmpfile}";
+ $out = $self->{OUT};
+ $out_mode = $self->{OUT_MODE} || '>';
+ $self->{OUT} = "$self->{tmpfile}";
$self->{OUT_MODE} = '>';
}
my $result;
+ my $command_formatter = sub {
+ my ($out_mode, $out) = @_;
+ return $out_mode eq '|-' ? SL::Template::create(type => 'ShellCommand', form => $self)->parse($out) : $out;
+ };
if ($self->{OUT}) {
+ $self->{OUT} = $command_formatter->($self->{OUT_MODE}, $self->{OUT});
open(OUT, $self->{OUT_MODE}, $self->{OUT}) or $self->error("error on opening $self->{OUT} with mode $self->{OUT_MODE} : $!");
} else {
*OUT = ($::dispatcher->get_standard_filehandles)[1];
# if we send html or plain text inline
if (($self->{format} eq 'html') && ($self->{sendmode} eq 'inline')) {
- $mail->{contenttype} = "text/html";
-
- $mail->{message} =~ s/\r//g;
- $mail->{message} =~ s/\n/<br>\n/g;
- $myconfig->{signature} =~ s/\n/<br>\n/g;
- $mail->{message} .= "<br>\n-- <br>\n$myconfig->{signature}\n<br>";
+ $mail->{contenttype} = "text/html";
+ $mail->{message} =~ s/\r//g;
+ $mail->{message} =~ s/\n/<br>\n/g;
+ $myconfig->{signature} =~ s/\n/<br>\n/g;
+ $mail->{message} .= "<br>\n-- <br>\n$myconfig->{signature}\n<br>";
open(IN, "<", $self->{tmpfile})
or $self->error($self->cleanup . "$self->{tmpfile} : $!");
- while (<IN>) {
- $mail->{message} .= $_;
- }
-
+ $mail->{message} .= $_ while <IN>;
close(IN);
} else {
#print(STDERR "OUT $self->{OUT}\n");
for my $i (1 .. $self->{copies}) {
if ($self->{OUT}) {
- open OUT, $self->{OUT_MODE}, $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
+ $self->{OUT} = $command_formatter->($self->{OUT_MODE}, $self->{OUT});
+
+ open OUT, $self->{OUT_MODE}, $self->{OUT} or $self->error($self->cleanup . "$self->{OUT} : $!");
print OUT $_ while <IN>;
close OUT;
- seek IN, 0, 0;
+ seek IN, 0, 0;
} else {
$self->{attachment_filename} = ($self->{attachment_filename})
$joins_needed{apoe} = 1 if $joins_needed{cv} || grep { $form->{$_} || $form->{"l_$_"} } @apoe_filters;
$joins_needed{invoice_oi} = 1 if $joins_needed{apoe} || grep { $form->{$_} || $form->{"l_$_"} } @invoice_oi_filters;
- # in bsoorq, use qtys instead of onhand
- if ($joins_needed{invoice_oi}) {
- $renamed_columns{onhand} = 'onhand_before_bsooqr';
- $renamed_columns{qty} = 'onhand';
- }
-
# special case for description search.
# up in the simple filter section the description filter got interpreted as something like: WHERE description ILIKE '%$form->{description}%'
# now we'd like to search also for the masked description entered in orderitems and invoice, so...
use SL::Template::LaTeX;
use SL::Template::OpenDocument;
use SL::Template::PlainText;
+use SL::Template::ShellCommand;
use SL::Template::XML;
sub create {
--- /dev/null
+package SL::Template::ShellCommand;
+
+use parent qw(SL::Template::LaTeX);
+
+use strict;
+
+use String::ShellQuote;
+
+sub new {
+ my $type = shift;
+
+ return $type->SUPER::new(@_);
+}
+
+sub substitute_vars {
+ my ($self, $text, @indices) = @_;
+
+ my $form = $self->{"form"};
+
+ while ($text =~ /$self->{substitute_vars_re}/) {
+ my ($tag_pos, $tag_len) = ($-[0], $+[0] - $-[0]);
+ my ($var, @option_list) = split(/\s+/, $1);
+ my %options = map { ($_ => 1) } @option_list;
+
+ my $value = $self->_get_loop_variable($var, 0, @indices);
+ $value = $form->parse_amount({ numberformat => $::myconfig{output_numberformat} || $::myconfig{numberformat} }, $value) if $options{NOFORMAT};
+ $value = $self->format_string($value); # Don't allow NOESCAPE for arguments passed to shell commands.
+
+ substr($text, $tag_pos, $tag_len, $value);
+ }
+
+ return $text;
+}
+
+sub format_string {
+ my ($self, $variable) = @_;
+
+ return shell_quote_best_effort($variable);
+}
+
+sub get_mime_type {
+ return "text/plain";
+}
+
+sub parse {
+ my ($self, $text) = @_;
+
+ return $self->parse_block($text);
+}
+
+1;
do_query($form, $dbh, $query, ($self->{login}, $myconfig->{name}, $myconfig->{tel}, "user"));
} elsif ($update_existing) {
- my $query = qq|UPDATE employee SET name = ?, workphone = ?, role = 'user' WHERE id = ?|;
+ my $query = qq|UPDATE employee SET name = ?, workphone = ?, role = 'user', deleted = 'f' WHERE id = ?|;
do_query($form, $dbh, $query, $myconfig->{name}, $myconfig->{tel}, $id);
}
$form->{invdate} = $form->{transdate};
- my %saved_variables = map +( $_ => $form->{$_} ), qw(AR AR_amount_1 taxchart_1 oldcustomer);
+ my %saved_variables = map +( $_ => $form->{$_} ), qw(AR AR_amount_1 taxchart_1 customer_id);
&check_name("customer");
- # check_name ruft get_customer auf, oldcustomer wird überschrieben, daher wird dies vorher gemerkt
- # get_customer holt Bemerkungen als intnotes, für Debitorenbuchungen gibt es aber nur das Feld notes
- $form->{notes} = $form->{intnotes} if $saved_variables{oldcustomer} ne $form->{customer};
+ # check_name loads customer notes into notes, but ar only knows intnotes, so copy them
+ $form->{notes} = $form->{intnotes} if $saved_variables{customer_id} != $form->{customer_id};
$form->{AR} = $saved_variables{AR};
if ($saved_variables{AR_amount_1} =~ m/.--./) {
'listprice' => { 'text' => $locale->text('List Price'), },
'microfiche' => { 'text' => $locale->text('Microfiche'), },
'name' => { 'text' => $locale->text('Name'), },
- 'onhand' => { 'text' => $locale->text('Qty'), },
+ 'onhand' => { 'text' => $locale->text('Stocked Qty'), },
'ordnumber' => { 'text' => $locale->text('Order Number'), },
'partnumber' => { 'text' => $locale->text('Part Number'), },
'partsgroup' => { 'text' => $locale->text('Group'), },
'rop' => { 'text' => $locale->text('ROP'), },
'sellprice' => { 'text' => $locale->text('Sell Price'), },
'serialnumber' => { 'text' => $locale->text('Serial Number'), },
- 'soldtotal' => { 'text' => $locale->text('soldtotal'), },
+ 'soldtotal' => { 'text' => $locale->text('Qty in Selected Records'), },
'transdate' => { 'text' => $locale->text('Transdate'), },
'unit' => { 'text' => $locale->text('Unit'), },
'weight' => { 'text' => $locale->text('Weight'), },
IC->all_parts(\%myconfig, \%$form);
my @columns = qw(
- partnumber description partsgroup bin onhand rop unit listprice
+ partnumber description partsgroup bin onhand rop soldtotal unit listprice
linetotallistprice sellprice linetotalsellprice lastcost linetotallastcost
priceupdate weight image drawing microfiche invnumber ordnumber quonumber
- transdate name serialnumber soldtotal deliverydate ean
+ transdate name serialnumber deliverydate ean
);
my @includeable_custom_variables = grep { $_->{includeable} } @{ $cvar_configs };
delete $form->{OUT};
if ($form->{media} eq 'printer') {
- #$form->{OUT} = "| $form->{printer_command} &>/dev/null";
$form->{OUT} = $form->{printer_command};
$form->{OUT_MODE} = '|-';
$form->{printed} .= " $form->{formname}";
# openclosed checkboxes
my @tmp;
push @tmp, sprintf qq|<input name="delivered" id="delivered" type="checkbox" class="checkbox" value="1" %s><label for="delivered">%s</label>|,
- $form->{"delivered"} ? "checked" : "", $locale->text('Delivered') if $form->{"type"} =~ /_order$/;
+ $form->{"delivered"} ? "checked" : "", $locale->text('Delivery Order created') if $form->{"type"} =~ /_order$/;
push @tmp, sprintf qq|<input name="closed" id="closed" type="checkbox" class="checkbox" value="1" %s><label for="closed">%s</label>|,
$form->{"closed"} ? "checked" : "", $locale->text('Closed') if $form->{id};
$TMPL_VAR{openclosed} = sprintf qq|<tr><td colspan=%d align=center>%s</td></tr>\n|, 2 * scalar @tmp, join "\n", @tmp if @tmp;
'globalprojectnumber' => { 'text' => $locale->text('Project Number'), },
'transaction_description' => { 'text' => $locale->text('Transaction description'), },
'open' => { 'text' => $locale->text('Open'), },
- 'delivered' => { 'text' => $locale->text('Delivered'), },
+ 'delivered' => { 'text' => $locale->text('Delivery Order created'), },
'marge_total' => { 'text' => $locale->text('Ertrag'), },
'marge_percent' => { 'text' => $locale->text('Ertrag prozentual'), },
'vcnumber' => { 'text' => $form->{vc} eq 'customer' ? $locale->text('Customer Number') : $locale->text('Vendor Number'), },
};
push @options, $locale->text('Open') if $form->{open};
push @options, $locale->text('Closed') if $form->{closed};
- push @options, $locale->text('Delivered') if $form->{delivered};
+ push @options, $locale->text('Delivery Order created') if $form->{delivered};
push @options, $locale->text('Not delivered') if $form->{notdelivered};
push @options, $locale->text('Periodic invoices active') if $form->{periodic_invoices_actibe};
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<HTML>
-<HEAD>
-<TITLE>GNU General Public License</TITLE>
-</HEAD>
-
-<BODY BGCOLOR=ffffff>
-
-
-<pre>
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
- <signature of Ty Coon>, 1 April 1989
+ <signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
-
-
-</BODY>
-</HTML>
-
######################################################################
-# Lx-Office ERP
-# distributed from Linet Services GbR - Braunschweig
+# Lx-Office ERP
+# distributed from Linet Services GmbH - Braunschweig
#
# based von SQL-Ledger - Author: Dieter Simander
#
<li><a href="#variablen_ausgeben">Variablen ausgeben</a>
</li>
+ <li><a href="#verwendung_in_druckbefehlen">Verwendung in Druckbefehlen</a>
+ </li>
+
<li><a href="dokumentenvorlagen-und-variablen.html#tag_style">
Anfang und Ende der Tags verändern</a></li>
zum Inhaltsverzeichnis</a></small><br>
<hr>
+ <h2><a name="verwendung_in_druckbefehlen">Verwendung in Druckbefehlen</a></h2>
+
+ <p>
+ In der Admininstration können Drucker definiert werden. Auch im dort
+ eingebbaren Druckbefehl können die hier aufgelisteten Variablen und
+ Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach den
+ Regeln der gängigen Shells formatiert, sodass Sonderzeichen
+ wie <code>`...`</code> nicht zu unerwünschtem Verhalten führen.
+ </p>
+
+ <p>
+ Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl, für
+ das die Telefonnummer eines Ansprechpartners als Teil der
+ Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
+ z.B. wie folgt aussehen:
+ </p>
+
+ <p>
+ <code>send_fax --number <%if cp_phone2%><%cp_phone2%><%else%><%cp_phone1%><%end%></code>
+ </p>
+
+ <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
+ zum Inhaltsverzeichnis</a></small><br>
+ <hr>
+
<h2><a name="tag_style">
Anfang und Ende der Tags verändern</a></h2>
'Delivered' => 'Geliefert',
'Delivery Date' => 'Lieferdatum',
'Delivery Order' => 'Lieferschein',
+ 'Delivery Order created' => 'Lieferschein erstellt',
'Delivery Order Date' => 'Lieferscheindatum',
'Delivery Order Date missing!' => 'Lieferscheindatum fehlt!',
'Delivery Order Number' => 'Lieferscheinnummer',
'Purpose' => 'Verwendungszweck',
'Qty' => 'Menge',
'Qty according to delivery order' => 'Menge laut Lieferschein',
+ 'Qty in Selected Records' => 'Menge in gewählten Belegen',
'Qty in stock' => 'Lagerbestand',
'Quantity' => 'Menge',
'Quantity missing.' => 'Die Mengenangabe fehlt.',
'Steuersatz' => 'Steuersatz',
'Stock' => 'Einlagern',
'Stock value' => 'Bestandswert',
+ 'Stocked Qty' => 'Lagermenge',
'Storno' => 'Storno',
'Storno (one letter abbreviation)' => 'S',
'Storno Invoice' => 'Stornorechnung',
'Delivered' => 'Geliefert',
'Delivery Date' => 'Lieferdatum',
'Delivery Order' => 'Lieferschein',
+ 'Delivery Order created' => 'Lieferschein erstellt',
'Delivery Order Date' => 'Lieferscheindatum',
'Delivery Order Date missing!' => 'Lieferscheindatum fehlt!',
'Delivery Order Number' => 'Lieferscheinnummer',
--- /dev/null
+-- @tag: employee_deleted
+-- @description: Benutzer löschbar machen
+-- @depends: release_2_6_3
+
+ALTER TABLE employee ADD COLUMN deleted BOOLEAN DEFAULT 'f';
<input type="submit" class="submit" name="action" value="[% 'Add User' | $T8 %]">
<input type="submit" class="submit" name="action" value="[% 'Edit groups' | $T8 %]">
- <input type="submit" class="submit" name="action" value="[% 'Printer Management' | $T8 %]">
<input type="submit" class="submit" name="action" value="[% 'Pg Database Administration' | $T8 %]">
+ <input type="submit" class="submit" name="action" value="[% 'Printer Management' | $T8 %]">
[% IF LOCKED %]
<input type="submit" class="submit" name="action" value="[% 'Unlock System' | $T8 %]">
[% ELSE %]
</td>
<td>
<input name="l_soldtotal" id="l_soldtotal" class="checkbox" type="checkbox" value="Y">
- <label for="l_soldtotal">[% 'soldtotal' | $T8 %]</label>
+ <label for="l_soldtotal">[% 'Qty in Selected Records' | $T8 %]</label>
</td>
<td>
<input name="l_ean" id="l_ean" class="checkbox" type="checkbox" value="Y">
</td>
<td>
<input name="delivered" id="delivered" class="checkbox" type="checkbox" value="1" checked>
- <label for="delivered">[% 'Delivered' | $T8 %]</label>
+ <label for="delivered">[% 'Delivery Order created' | $T8 %]</label>
</td>
</tr>
[%- END %]