Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
authorBernd Blessmann <bibi@online.de>
Tue, 10 Jan 2012 11:10:33 +0000 (12:10 +0100)
committerBernd Blessmann <bibi@online.de>
Tue, 10 Jan 2012 11:10:33 +0000 (12:10 +0100)
19 files changed:
SL/Form.pm
SL/IC.pm
SL/Template.pm
SL/Template/ShellCommand.pm [new file with mode: 0644]
SL/User.pm
bin/mozilla/ar.pl
bin/mozilla/ic.pl
bin/mozilla/io.pl
bin/mozilla/oe.pl
doc/COPYING
doc/copyright
doc/dbschema.dia [deleted file]
doc/dokumentenvorlagen-und-variablen.html
locale/de/all
locale/de_DE/all
sql/Pg-upgrade2/employee_deleted.sql [new file with mode: 0644]
templates/webpages/admin/list_users.html
templates/webpages/ic/search.html
templates/webpages/oe/search.html

index 0c291da..529426e 100644 (file)
@@ -1106,15 +1106,20 @@ sub parse_template {
   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];
@@ -1154,19 +1159,15 @@ sub parse_template {
 
       # 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 {
@@ -1203,10 +1204,12 @@ sub parse_template {
       #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})
index 5396c7a..67fbba0 100644 (file)
--- a/SL/IC.pm
+++ b/SL/IC.pm
@@ -1007,12 +1007,6 @@ sub all_parts {
   $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...
index df18e70..ab499e9 100644 (file)
@@ -16,6 +16,7 @@ use SL::Template::HTML;
 use SL::Template::LaTeX;
 use SL::Template::OpenDocument;
 use SL::Template::PlainText;
+use SL::Template::ShellCommand;
 use SL::Template::XML;
 
 sub create {
diff --git a/SL/Template/ShellCommand.pm b/SL/Template/ShellCommand.pm
new file mode 100644 (file)
index 0000000..0824129
--- /dev/null
@@ -0,0 +1,51 @@
+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;
index 49ba339..5d58b5d 100644 (file)
@@ -738,7 +738,7 @@ sub create_employee_entry {
     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);
   }
 
index 1522339..a6e1220 100644 (file)
@@ -1046,13 +1046,12 @@ sub update {
 
   $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/.--./) {
index c6714e6..8c915f4 100644 (file)
@@ -1043,7 +1043,7 @@ sub generate_report {
     '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'), },
@@ -1052,7 +1052,7 @@ sub generate_report {
     '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'), },
@@ -1201,10 +1201,10 @@ sub generate_report {
   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 };
index 1e380cd..dbefff3 100644 (file)
@@ -1517,7 +1517,6 @@ sub print_form {
   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}";
index 139b6f9..dd1d8e2 100644 (file)
@@ -318,7 +318,7 @@ sub form_header {
   # 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;
@@ -833,7 +833,7 @@ sub orders {
     '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'), },
@@ -879,7 +879,7 @@ sub orders {
   };
   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};
 
index 083bb41..7edebd1 100644 (file)
@@ -1,13 +1,3 @@
-<!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
 
@@ -301,8 +291,8 @@ to attach them to the start of each source file to most effectively
 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.
 
-    &lt;one line to give the program's name and a brief idea of what it does.&gt;
-    Copyright (C) 19yy  &lt;name of author&gt;
+    <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
@@ -340,7 +330,7 @@ necessary.  Here is a sample; alter the names:
   Yoyodyne, Inc., hereby disclaims all copyright interest in the program
   `Gnomovision' (which makes passes at compilers) written by James Hacker.
 
-  &lt;signature of Ty Coon&gt;, 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
@@ -348,8 +338,3 @@ proprietary programs.  If your program is a subroutine library, you may
 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>
-
index 70cdbab..3b87ce7 100644 (file)
@@ -1,6 +1,6 @@
 ######################################################################
-# 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
 #
diff --git a/doc/dbschema.dia b/doc/dbschema.dia
deleted file mode 100644 (file)
index 7d6eb07..0000000
Binary files a/doc/dbschema.dia and /dev/null differ
index 1009f31..e1dac11 100644 (file)
@@ -51,6 +51,9 @@ td {
   <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&auml;ndern</a></li>
 
@@ -229,6 +232,31 @@ td {
    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 &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</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&auml;ndern</a></h2>
 
index db410c7..c4ec6b0 100644 (file)
@@ -574,6 +574,7 @@ $self->{texts} = {
   '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',
@@ -1428,6 +1429,7 @@ $self->{texts} = {
   '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.',
@@ -1652,6 +1654,7 @@ $self->{texts} = {
   'Steuersatz'                  => 'Steuersatz',
   'Stock'                       => 'Einlagern',
   'Stock value'                 => 'Bestandswert',
+  'Stocked Qty'                 => 'Lagermenge',
   'Storno'                      => 'Storno',
   'Storno (one letter abbreviation)' => 'S',
   'Storno Invoice'              => 'Stornorechnung',
index 3657999..6ab32d5 100644 (file)
@@ -539,6 +539,7 @@ $self->{texts} = {
   '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',
diff --git a/sql/Pg-upgrade2/employee_deleted.sql b/sql/Pg-upgrade2/employee_deleted.sql
new file mode 100644 (file)
index 0000000..939580e
--- /dev/null
@@ -0,0 +1,5 @@
+-- @tag: employee_deleted
+-- @description: Benutzer löschbar machen
+-- @depends: release_2_6_3
+
+ALTER TABLE employee ADD COLUMN deleted BOOLEAN DEFAULT 'f';
index eb55dc5..2e6228f 100644 (file)
@@ -40,8 +40,8 @@
 
   <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 %]
index 1d94fe8..6235d00 100644 (file)
           </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">
index 788a1a2..22d83b0 100644 (file)
         </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 %]