From a3f90d6fa23d0a8d026682511e7624bd847d532f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sven=20Sch=C3=B6ling?= Date: Wed, 29 Sep 2010 12:26:09 +0200 Subject: [PATCH] Druckeradministration in die Adminumgebung verschoben. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- SL/AM.pm | 100 -------- SL/Auth.pm | 20 ++ SL/Printer.pm | 83 +++++++ bin/mozilla/admin.pl | 1 + bin/mozilla/admin_printer.pl | 118 +++++++++ bin/mozilla/am.pl | 232 +----------------- locale/de/all | 6 +- menu.ini | 14 -- templates/webpages/admin/list_users.html | 1 + .../webpages/admin_printer/_login_form.html | 4 + templates/webpages/admin_printer/edit.html | 41 ++++ templates/webpages/admin_printer/list.html | 44 ++++ templates/webpages/admin_printer/login.html | 16 ++ 13 files changed, 332 insertions(+), 348 deletions(-) create mode 100644 SL/Printer.pm create mode 100644 bin/mozilla/admin_printer.pl create mode 100644 templates/webpages/admin_printer/_login_form.html create mode 100644 templates/webpages/admin_printer/edit.html create mode 100644 templates/webpages/admin_printer/list.html create mode 100644 templates/webpages/admin_printer/login.html 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 = <{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|| - . $locale->text('Printer Description') - . qq||; - $column_header{printer_command} = - qq|| - . $locale->text('Printer Command') - . qq||; - $column_header{template_code} = - qq|| - . $locale->text('Template Code') - . qq||; - - $form->header; - - print qq| - - - - - - - - - - - - - -
$form->{title}
- - -|; - - map { print "$column_header{$_}\n" } @column_index; - - print qq| - -|; - - my ($i, %column_data); - foreach my $ref (@{ $form->{ALL} }) { - - $i++; - $i %= 2; - - print qq| - -|; - - - $column_data{printer_description} = qq||; - $column_data{printer_command} = qq||; - $column_data{template_code} = - qq||; - - map { print "$column_data{$_}\n" } @column_index; - - print qq| - -|; - } - - print qq| -
$ref->{printer_description}$ref->{printer_command}$ref->{template_code}
-

- -
-
- - - - - - - -
- - - -|; - - $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/\"/"/g; - $form->{template_code} =~ s/\"/"/g; - $form->{printer_command} =~ s/\"/"/g; - - - $form->header; - - print qq| - - -
- -{id}> - - - - - - - - - - - - - - - - - - - - - -
$form->{title}
| . $locale->text('Printer') . qq|
| . $locale->text('Printer Command') . qq|
| . $locale->text('Template Code') . qq|

-|; - - $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ä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ählen Sie den Kontenrahmen aus, der bei dieser Installation verwendet wird.', 'Please select the database you want to backup' => 'Bitte wä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ä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 @@ + [% IF LOCKED %] 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 %] +

[% 'Please select a user' | $T8 %]: [% L.select_tag('login', L.options_for_select(users, value => 'login', title => 'login', default => login)) %]

+ 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 %] + + + + +

[% title %]

+ +[%- PROCESS 'admin_printer/_login_form.html' %] + + + + + + + + + + + + + + + + + + +
[% 'Printer' | $T8 %]
[% 'Printer Command' | $T8 %]
[% 'Template Code' | $T8 %]

+ +
+ + + +[%- IF id %] + +[%- END %] + + +
+ + + 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 %] + + +
+ +

[% title %]

+ +[%- PROCESS 'admin_printer/_login_form.html' %] + + + + + + + + +
+ + + + + + +[%- IF all_printers.size %] +[%- FOREACH row = all_printers %] + + + + + +[%- END %] +[%- ELSE %] + +[%- END %] +
[% 'Description' | $T8 %][% 'Printer Command' | $T8 %][% 'Template Code' | $T8 %]
[% row.printer_description %][% row.printer_command | html %][% row.template_code | html %]
[% 'No data was found.' | $T8 %]
+

+ +
+ + + +
+ + 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 %] + +

[% 'Printer Management' | $T8 %]

+
+

[% 'Printers are created for a user database. Please select a user. The associated database will be edited.' | $T8 %]

+ +[%- PROCESS 'admin_printer/_login_form.html' %] + + +

+ + +

+ +
-- 2.20.1