commit a3f90d6fa23d0a8d026682511e7624bd847d532f
Author: Sven Schöling <s.schoeling@googlemail.com>
Date:   Wed Sep 29 12:26:09 2010 +0200

    Druckeradministration in die Adminumgebung verschoben.
    
    Printercommands werden mit webuser Rechnten ausgeführt, deshalb darf ein User
    keine anlegen. Da die Umgebung da völlig anders ist, geht das mit einem Rewrite
    der Masken einher.

diff --git a/SL/AM.pm b/SL/AM.pm
index f5736f14b..d637e2a59 100644
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -1108,106 +1108,6 @@ sub swap_sortkeys {
   $main::lxdebug->leave_sub();
 }
 
-sub printer {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query = qq|SELECT id, printer_description, template_code, printer_command
-                 FROM printers
-                 ORDER BY 2|;
-
-  my $sth = $dbh->prepare($query);
-  $sth->execute || $form->dberror($query);
-
-  $form->{"ALL"} = [];
-  while (my $ref = $sth->fetchrow_hashref("NAME_lc")) {
-    push @{ $form->{ALL} }, $ref;
-  }
-
-  $sth->finish;
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub get_printer {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query =
-    qq|SELECT p.printer_description, p.template_code, p.printer_command
-       FROM printers p
-       WHERE p.id = ?|;
-  my $sth = $dbh->prepare($query);
-  $sth->execute($form->{id}) || $form->dberror($query . " ($form->{id})");
-
-  my $ref = $sth->fetchrow_hashref("NAME_lc");
-
-  map { $form->{$_} = $ref->{$_} } keys %$ref;
-
-  $sth->finish;
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub save_printer {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-  my $query;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my @values = ($form->{printer_description},
-                $form->{template_code},
-                $form->{printer_command});
-
-  # id is the old record
-  if ($form->{id}) {
-    $query = qq|UPDATE printers SET
-                printer_description = ?, template_code = ?, printer_command = ?
-                WHERE id = ?|;
-    push(@values, $form->{id});
-  } else {
-    $query = qq|INSERT INTO printers
-                (printer_description, template_code, printer_command)
-                VALUES (?, ?, ?)|;
-  }
-  do_query($form, $dbh, $query, @values);
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub delete_printer {
-  $main::lxdebug->enter_sub();
-
-  my ($self, $myconfig, $form) = @_;
-
-  # connect to database
-  my $dbh = $form->dbconnect($myconfig);
-
-  my $query = qq|DELETE FROM printers
-              WHERE id = ?|;
-  do_query($form, $dbh, $query, $form->{id});
-
-  $dbh->disconnect;
-
-  $main::lxdebug->leave_sub();
-}
-
 sub payment {
   $main::lxdebug->enter_sub();
 
diff --git a/SL/Auth.pm b/SL/Auth.pm
index bf2a6a851..eb5a7805a 100644
--- a/SL/Auth.pm
+++ b/SL/Auth.pm
@@ -33,6 +33,26 @@ sub new {
   return $self;
 }
 
+sub get_user_dbh {
+  my ($self, $login) = @_;
+  my %user = $self->read_user($login);
+  my $dbh  = DBI->connect(
+    $user{dbconnect},
+    $user{dbuser},
+    $user{dbpasswd},
+    {
+      pg_enable_utf8 => $::locale->is_utf8,
+      AutoCommit     => 0
+    }
+  ) or $::form->dberror;
+
+  if ($user{dboptions}) {
+    $dbh->do($user{dboptions}) or $::form->dberror($user{dboptions});
+  }
+
+  return $dbh;
+}
+
 sub DESTROY {
   my $self = shift;
 
diff --git a/SL/Printer.pm b/SL/Printer.pm
new file mode 100644
index 000000000..346d734a2
--- /dev/null
+++ b/SL/Printer.pm
@@ -0,0 +1,83 @@
+package SL::Printer;
+
+use SL::DBUtils;
+
+sub all_printers {
+  $::lxdebug->enter_sub;
+
+  my ($self, %params) = @_;
+
+  my $dbh = $::auth->get_user_dbh($params{login});
+
+  my $query = qq|SELECT * FROM printers ORDER BY printer_description|;
+  my @printers = selectall_hashref_query($::form, $dbh, $query);
+
+  $::lxdebug->leave_sub;
+
+  return wantarray ? @printers : \@printers;
+}
+
+sub get_printer {
+  $::lxdebug->enter_sub;
+
+  my ($self, %params) = @_;
+
+  my $dbh = $::auth->get_user_dbh($params{login});
+
+  my $query = qq|SELECT * FROM printers WHERE id = ?|;
+  my ($printer) = selectfirst_hashref_query($::form, $dbh, $query, $params{id});
+
+  $::lxdebug->leave_sub;
+
+  return $printer;
+}
+
+sub save_printer {
+  $main::lxdebug->enter_sub();
+
+  my ($self, %params) = @_;
+
+  # connect to database
+  my $dbh = $::auth->get_user_dbh($params{login});
+  my $printer = $params{printer};
+
+  unless ($printer->{id}) {
+    ($printer->{id}) = selectfirst_array_query($::form, $dbh, "SELECT nextval('id'::text)");
+    do_query($::form, $dbh, "INSERT INTO printers (id, printer_description) VALUES (?, '')", $printer->{id});
+  }
+
+  my $query = <<SQL;
+    UPDATE printers SET
+      printer_description = ?,
+      template_code = ?,
+      printer_command = ?
+    WHERE id = ?
+SQL
+  do_query($::form, $dbh, $query,
+    $printer->{printer_description},
+    $printer->{template_code},
+    $printer->{printer_command},
+    $printer->{id},
+  );
+
+  $dbh->commit;
+
+  $::lxdebug->leave_sub;
+}
+
+sub delete_printer {
+  $::lxdebug->enter_sub;
+
+  my ($self, %params) = @_;
+
+  my $dbh = $::auth->get_user_dbh($params{login});
+
+  my $query = qq|DELETE FROM printers WHERE id = ?|;
+  do_query($::form, $dbh, $query, $params{id});
+
+  $dbh->commit;
+
+  $::lxdebug->leave_sub;
+}
+
+1;
diff --git a/bin/mozilla/admin.pl b/bin/mozilla/admin.pl
index ebf01c679..3a5e810c2 100755
--- a/bin/mozilla/admin.pl
+++ b/bin/mozilla/admin.pl
@@ -52,6 +52,7 @@ use SL::DBUtils;
 
 require "bin/mozilla/common.pl";
 require "bin/mozilla/admin_groups.pl";
+require "bin/mozilla/admin_printer.pl";
 
 use strict;
 
diff --git a/bin/mozilla/admin_printer.pl b/bin/mozilla/admin_printer.pl
new file mode 100644
index 000000000..bc623327f
--- /dev/null
+++ b/bin/mozilla/admin_printer.pl
@@ -0,0 +1,118 @@
+use strict;
+
+use SL::Printer;
+
+sub get_login {
+  unless ($::form->{login}) {
+    get_login_form();
+    ::end_of_request();
+  }
+  return $::form->{login};
+}
+
+sub get_login_form {
+  my %users = $::auth->read_all_users;
+
+  $::form->header;
+  print $::form->parse_html_template('admin_printer/login', {
+    users => [ values %users ],
+  });
+}
+
+sub printer_dispatcher {
+      $::lxdebug->dump(0,  "testing", $::form);
+  for (qw(get_login_form list_printers add_printer edit_printer save_printer delete_printer list_users)) {
+    if ($::form->{$_}) {
+      ::call_sub($::locale->findsub($_));
+      ::end_of_request()
+    }
+  }
+  die "cannot find sub";
+}
+
+sub printer_management {
+  &list_printers;
+}
+
+sub add_printer {
+  $::lxdebug->enter_sub;
+
+  my $login   = get_login();
+  my %users   = $::auth->read_all_users;
+
+  $::form->header;
+  print $::form->parse_html_template('admin_printer/edit', {
+    title   => $::locale->text("Add Printer"),
+    printer => { },
+    users   => [ values %users ],
+  });
+
+  $::lxdebug->leave_sub
+}
+
+sub edit_printer {
+  $::lxdebug->enter_sub;
+
+  my $login = get_login();
+  my $id    = $::form->{id} or $::form->{printer}{id} or &add_printer;
+  my %users   = $::auth->read_all_users;
+
+  my $printer = SL::Printer->get_printer(id => $id, login => $login);
+
+  $::form->header;
+  print $::form->parse_html_template('admin_printer/edit', {
+    title   => $::locale->text("Edit Printer"),
+    printer => $printer,
+    users   => [ values %users ],
+  });
+
+  $::lxdebug->leave_sub;
+}
+
+sub list_printers {
+  $::lxdebug->enter_sub;
+
+  my $login    = get_login();
+  my $printers = SL::Printer->all_printers(login => $login);
+  my %users   = $::auth->read_all_users;
+
+  $::form->header;
+  print $::form->parse_html_template('admin_printer/list', {
+    title        => $::locale->text('Printer'),
+    all_printers => $printers,
+    edit_link    => build_std_url("login=$login", 'action=edit_printer', 'id='),
+    users        => [ values %users ],
+  });
+
+  $::lxdebug->leave_sub;
+}
+
+
+sub save_printer {
+  $::lxdebug->enter_sub;
+
+  my $login   = get_login();
+  my $printer = $::form->{printer} || die 'no printer to save';
+
+  $::form->error($::locale->text('Description missing!'))     unless $printer->{printer_description};
+  $::form->error($::locale->text('Printer Command missing!')) unless $printer->{printer_command};
+
+  SL::Printer->save_printer(%$::form);
+
+  list_printers();
+  $::lxdebug->leave_sub;
+}
+
+sub delete_printer {
+  $::lxdebug->enter_sub;
+
+  my $login   = get_login();
+  my $printer = $::form->{printer} || die 'no printer to delete';
+
+  SL::Printer->delete_printer(%$::form);
+  list_printers();
+
+  $::lxdebug->leave_sub;
+}
+
+1;
diff --git a/bin/mozilla/am.pl b/bin/mozilla/am.pl
index 4a7840281..d9d484269 100644
--- a/bin/mozilla/am.pl
+++ b/bin/mozilla/am.pl
@@ -2014,234 +2014,6 @@ sub swap_buchungsgruppen {
   $main::lxdebug->leave_sub();
 }
 
-
-sub add_printer {
-  $main::lxdebug->enter_sub();
-
-  my $form     = $main::form;
-
-  $main::auth->assert('config');
-
-  $form->{title} = "Add";
-
-  $form->{callback} = "am.pl?action=add_printer" unless $form->{callback};
-
-  &printer_header;
-  &form_footer;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub edit_printer {
-  $main::lxdebug->enter_sub();
-
-  my $form     = $main::form;
-  my %myconfig = %main::myconfig;
-
-  $main::auth->assert('config');
-
-  $form->{title} = "Edit";
-
-  AM->get_printer(\%myconfig, \%$form);
-
-  &printer_header;
-
-  $form->{orphaned} = 1;
-  &form_footer;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub list_printer {
-  $main::lxdebug->enter_sub();
-
-  my $form     = $main::form;
-  my %myconfig = %main::myconfig;
-  my $locale   = $main::locale;
-
-  $main::auth->assert('config');
-
-  AM->printer(\%myconfig, \%$form);
-
-  $form->{callback} = "am.pl?action=list_printer";
-
-  my $callback = $form->escape($form->{callback});
-
-  $form->{title} = $locale->text('Printer');
-
-  my @column_index = qw(printer_description printer_command template_code);
-  my %column_header;
-  $column_header{printer_description} =
-      qq|<th class=listheading width=60%>|
-    . $locale->text('Printer Description')
-    . qq|</th>|;
-  $column_header{printer_command} =
-      qq|<th class=listheading width=10%>|
-    . $locale->text('Printer Command')
-    . qq|</th>|;
-  $column_header{template_code} =
-      qq|<th class=listheading>|
-    . $locale->text('Template Code')
-    . qq|</th>|;
-
-  $form->header;
-
-  print qq|
-<body>
-
-<table width=100%>
-  <tr>
-    <th class=listtop>$form->{title}</th>
-  </tr>
-  <tr height="5"></tr>
-  <tr>
-    <td>
-      <table width=100%>
-        <tr class=listheading>
-|;
-
-  map { print "$column_header{$_}\n" } @column_index;
-
-  print qq|
-        </tr>
-|;
-
-  my ($i, %column_data);
-  foreach my $ref (@{ $form->{ALL} }) {
-
-    $i++;
-    $i %= 2;
-
-    print qq|
-        <tr valign=top class=listrow$i>
-|;
-
-
-    $column_data{printer_description} = qq|<td><a href="am.pl?action=edit_printer&id=$ref->{id}&callback=$callback">$ref->{printer_description}</td>|;
-    $column_data{printer_command}           = qq|<td align=right>$ref->{printer_command}</td>|;
-    $column_data{template_code} =
-      qq|<td align=right>$ref->{template_code}</td>|;
-
-    map { print "$column_data{$_}\n" } @column_index;
-
-    print qq|
-        </tr>
-|;
-  }
-
-  print qq|
-      </table>
-    </td>
-  </tr>
-  <tr>
-  <td><hr size=3 noshade></td>
-  </tr>
-</table>
-
-<br>
-<form method=post action=am.pl>
-
-<input name=callback type=hidden value="$form->{callback}">
-
-<input type=hidden name=type value=printer>
-
-<input class=submit type=submit name=action value="|
-    . $locale->text('Add') . qq|">
-
-  </form>
-
-  </body>
-  </html>
-|;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub printer_header {
-  $main::lxdebug->enter_sub();
-
-  my $form     = $main::form;
-  my $locale   = $main::locale;
-
-  $main::auth->assert('config');
-
-  $form->{title}    = $locale->text("$form->{title} Printer");
-
-  # $locale->text('Add Printer')
-  # $locale->text('Edit Printer')
-
-  $form->{printer_description} =~ s/\"/&quot;/g;
-  $form->{template_code} =~ s/\"/&quot;/g;
-  $form->{printer_command} =~ s/\"/&quot;/g;
-
-
-  $form->header;
-
-  print qq|
-<body>
-
-<form method=post action=am.pl>
-
-<input type=hidden name=id value=$form->{id}>
-<input type=hidden name=type value=printer>
-
-<table width=100%>
-  <tr>
-    <th class=listtop colspan=2>$form->{title}</th>
-  </tr>
-  <tr height="5"></tr>
-  <tr>
-    <th align=right>| . $locale->text('Printer') . qq|</th>
-    <td><input name=printer_description size=30 value="$form->{printer_description}"></td>
-  <tr>
-  <tr>
-    <th align=right>| . $locale->text('Printer Command') . qq|</th>
-    <td><input name=printer_command size=30 value="$form->{printer_command}"></td>
-  </tr>
-  <tr>
-    <th align=right>| . $locale->text('Template Code') . qq|</th>
-    <td><input name=template_code size=5 value="$form->{template_code}"></td>
-  </tr>
-  <td colspan=2><hr size=3 noshade></td>
-  </tr>
-</table>
-|;
-
-  $main::lxdebug->leave_sub();
-}
-
-sub save_printer {
-  $main::lxdebug->enter_sub();
-
-  my $form     = $main::form;
-  my %myconfig = %main::myconfig;
-  my $locale   = $main::locale;
-
-  $main::auth->assert('config');
-
-  $form->isblank("printer_description", $locale->text('Description missing!'));
-  $form->isblank("printer_command", $locale->text('Printer Command missing!'));
-  AM->save_printer(\%myconfig, \%$form);
-  $form->redirect($locale->text('Printer saved!'));
-
-  $main::lxdebug->leave_sub();
-}
-
-sub delete_printer {
-  $main::lxdebug->enter_sub();
-
-  my $form     = $main::form;
-  my %myconfig = %main::myconfig;
-  my $locale   = $main::locale;
-
-  $main::auth->assert('config');
-
-  AM->delete_printer(\%myconfig, \%$form);
-  $form->redirect($locale->text('Printer deleted!'));
-
-  $main::lxdebug->leave_sub();
-}
-
 sub add_payment {
   $main::lxdebug->enter_sub();
 
@@ -2722,10 +2494,8 @@ sub config {
     { 'name' => $locale->text('Queue'),   'value' => 'queue',   'selected' => $selected{queue}, },
     ];
 
-  AM->printer(\%myconfig, $form);
-
   $form->{PRINTERS} = [];
-  foreach my $printer (@{$form->{"ALL"}}) {
+  foreach my $printer (SL::Printer->all_printers(%::myconfig)) {
     push @{ $form->{PRINTERS} }, {
       'name'     => $printer->{printer_description},
       'value'    => $printer->{id},
diff --git a/locale/de/all b/locale/de/all
index c256452e9..18b6d398f 100644
--- a/locale/de/all
+++ b/locale/de/all
@@ -1206,6 +1206,7 @@ $self->{texts} = {
   'Please read the file'        => 'Bitte lesen Sie die Datei',
   'Please select a customer from the list below.' => 'Bitte einen Endkunden aus der Liste ausw�hlen',
   'Please select a part from the list below.' => 'Bitte w&auml;hlen Sie einen Artikel aus der Liste aus.',
+  'Please select a user'        => 'Bitte w�hlen Sie einen Benutzer aus',
   'Please select a vendor from the list below.' => 'Bitte einen H�ndler aus der Liste ausw�hlen',
   'Please select the chart of accounts this installation is using from the list below.' => 'Bitte w&auml;hlen Sie den Kontenrahmen aus, der bei dieser Installation verwendet wird.',
   'Please select the database you want to backup' => 'Bitte w&auml;hlen Sie die zu sichernde Datenbank gefunden',
@@ -1249,9 +1250,8 @@ $self->{texts} = {
   'Printer'                     => 'Drucker',
   'Printer Command'             => 'Druckbefehl',
   'Printer Command missing!'    => 'Druckbefehl fehlt',
-  'Printer Description'         => 'Druckerbeschreibung',
-  'Printer deleted!'            => 'Drucker gel�scht!',
-  'Printer saved!'              => 'Drucker gespeichert!',
+  'Printer Management'          => 'Druckeradministration',
+  'Printers are created for a user database. Please select a user. The associated database will be edited.' => 'Drucker werden f�r eine Benutzerdatenbank erzeugt. Bitte w�hlen Sie einen Benutzer aus. Die Drucker werden in der verkn�pften Datenbank angelegt.',
   'Printing ... '               => 'Es wird gedruckt.',
   'Prior to Lx-Office v2.4.0 the user could enter arbitrary strings as units for parts, services and in invoices, sales quotations etc.' => 'Vor Lx-Office 2.4.0 konnte der Benutzer bei Artikeln, Dienstleistungen und Rechnungen, Angeboten etc beliebige Einheiten angeben.',
   'Prior to Lx-Office v2.4.0 the user had to chose the accounts for each part and service.' => 'Vor Lx-Office 2.4.0 musste der Benutzer die Konten bei jeder Ware und jeder Dienstleistung einzeln ausw&auml;hlen.',
diff --git a/menu.ini b/menu.ini
index 643a4e9ac..310c7b568 100644
--- a/menu.ini
+++ b/menu.ini
@@ -667,20 +667,6 @@ module=generictranslations.pl
 action=edit_greetings
 
 
-[System--Printer]
-module=menu.pl
-action=acc_menu
-target=acc_menu
-submenu=1
-
-[System--Printer--Add Printer]
-module=am.pl
-action=add_printer
-
-[System--Printer--List Printer]
-module=am.pl
-action=list_printer
-
 [System--Payment Terms]
 module=menu.pl
 action=acc_menu
diff --git a/templates/webpages/admin/list_users.html b/templates/webpages/admin/list_users.html
index 7d66002d1..e2011908e 100644
--- a/templates/webpages/admin/list_users.html
+++ b/templates/webpages/admin/list_users.html
@@ -36,6 +36,7 @@
 
   <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 %]">
   [% IF LOCKED %]
    <input type="submit" class="submit" name="action" value="[% 'Unlock System' | $T8 %]">
diff --git a/templates/webpages/admin_printer/_login_form.html b/templates/webpages/admin_printer/_login_form.html
new file mode 100644
index 000000000..411661cba
--- /dev/null
+++ b/templates/webpages/admin_printer/_login_form.html
@@ -0,0 +1,4 @@
+[%- USE T8 %]
+[%- USE L %]
+<p>[% 'Please select a user' | $T8 %]: [% L.select_tag('login', L.options_for_select(users, value => 'login', title => 'login', default => login)) %]</p>
+
diff --git a/templates/webpages/admin_printer/edit.html b/templates/webpages/admin_printer/edit.html
new file mode 100644
index 000000000..d158702e8
--- /dev/null
+++ b/templates/webpages/admin_printer/edit.html
@@ -0,0 +1,41 @@
+[%- USE T8 %]
+<body>
+
+<form method=post>
+
+<h1 class=listtop colspan=2>[% title %]</h1>
+
+[%- PROCESS 'admin_printer/_login_form.html' %]
+
+<input type=hidden name="printer.id" value="[% printer.id | html %]">
+<table width=100%>
+  <tr height="5"></tr>
+  <tr>
+    <th align=right>[% 'Printer' | $T8 %]</th>
+    <td><input name="printer.printer_description" size=30 value="[% printer.printer_description | html %]"></td>
+  <tr>
+  <tr>
+    <th align=right>[% 'Printer Command' | $T8 %]</th>
+    <td><input name="printer.printer_command" size=30 value="[% printer.printer_command | html %]"></td>
+  </tr>
+  <tr>
+    <th align=right>[% 'Template Code' | $T8 %]</th>
+    <td><input name="printer.template_code" size=5 value="[% printer.template_code | html %]"></td>
+  </tr>
+  <td colspan=2><hr size=3 noshade></td>
+  </tr>
+</table>
+
+<br>
+<input type=hidden name=action value="printer_dispatcher">
+<input type=submit class=submit name=save_printer value="[% 'Save' | $T8 %]">
+
+[%- IF id %]
+<input type=submit class=submit name=delete_printer value="[% 'Delete' | $T8 %]">
+[%- END %]
+<input type=submit class=submit name=list_printers value="[% 'Back' | $T8 %]">
+
+</form>
+
+</body>
+</html>
diff --git a/templates/webpages/admin_printer/list.html b/templates/webpages/admin_printer/list.html
new file mode 100644
index 000000000..6dd23618f
--- /dev/null
+++ b/templates/webpages/admin_printer/list.html
@@ -0,0 +1,44 @@
+[%- USE T8 %]
+
+<body>
+<form method='post'>
+
+<h1 class=listtop>[% title %]</h1>
+
+[%- PROCESS 'admin_printer/_login_form.html' %]
+
+<table width=100%>
+  <tr>
+    <td>
+      <table width=100%>
+        <tr class=listheading>
+          <th>[% 'Description' | $T8 %]</th>
+          <th>[% 'Printer Command' | $T8 %]</th>
+          <th>[% 'Template Code' | $T8 %]</th>
+        </tr>
+[%- IF all_printers.size %]
+[%- FOREACH row = all_printers %]
+        <tr valign=top class="listrow[% loop.count % 2 %]">
+          <td><a href="[% edit_link %][% row.id %]">[% row.printer_description %]</a></td>
+          <td align=right>[% row.printer_command | html %]</td>
+          <td align=right>[% row.template_code | html %]</td>
+        </tr>
+[%- END %]
+[%- ELSE %]
+        <tr><td colspan='3'>[% 'No data was found.' | $T8 %]</td></tr>
+[%- END %]
+      </table>
+    </td>
+  </tr>
+  <tr>
+  <td><hr size=3 noshade></td>
+  </tr>
+</table>
+
+<br>
+ <input type="hidden" name="action" value="printer_dispatcher">
+ <input type="submit" name="add_printer" value ="[% 'Add' | $T8 %]">
+ <input type="submit" name='get_login_form' value="[% 'Back' | $T8 %]">
+</form>
+</body>
+</html>
diff --git a/templates/webpages/admin_printer/login.html b/templates/webpages/admin_printer/login.html
new file mode 100644
index 000000000..d45f1ce85
--- /dev/null
+++ b/templates/webpages/admin_printer/login.html
@@ -0,0 +1,16 @@
+[% USE T8 %]
+[% USE L %]
+
+<h1 class=listtop>[% 'Printer Management' | $T8 %]</h1>
+<form method='post'>
+<p>[% 'Printers are created for a user database. Please select a user. The associated database will be edited.' | $T8 %]</p>
+
+[%- PROCESS 'admin_printer/_login_form.html' %]
+
+<input type='hidden' name='action' value='printer_dispatcher'>
+<p>
+<input type='submit' name='list_printers' value='[% 'Continue' | $T8 %]'>
+<input type='submit' name='list_users' value='[% 'Back' | $T8 %]'>
+</p>
+
+</form>
