Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 9636227e

Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt

  • ID 9636227ee0ce9cb050db33573e523d68764ebde8
  • Vorgänger 0038d2a7
  • Nachfolger 91d2ef32

Admin: Anlegen, Bearbeiten und Löschen von Mandanten implementiert

Unterschiede anzeigen:

SL/Controller/Admin.pm
14 14

  
15 15
use Rose::Object::MakeMethods::Generic
16 16
(
17
  'scalar --get_set_init' => [ qw(client user nologin_file_name db_cfg all_dateformats all_numberformats all_countrycodes all_stylesheets all_menustyles all_clients all_groups) ],
17
  'scalar --get_set_init' => [ qw(client user nologin_file_name db_cfg all_dateformats all_numberformats all_countrycodes all_stylesheets all_menustyles all_clients all_groups all_users) ],
18 18
);
19 19

  
20 20
__PACKAGE__->run_before(\&setup_layout);
......
165 165
  $self->redirect_to(action => 'show');
166 166
}
167 167

  
168
#
169
# actions: clients
170
#
171

  
172
sub action_new_client {
173
  my ($self) = @_;
174

  
175
  $self->client(SL::DB::AuthClient->new(
176
    dbhost   => $::auth->{DB_config}->{host},
177
    dbport   => $::auth->{DB_config}->{port},
178
    dbuser   => $::auth->{DB_config}->{user},
179
    dbpasswd => $::auth->{DB_config}->{password},
180
  ));
181

  
182
  $self->edit_client_form(title => t8('Create a new client'));
183
}
184

  
185
sub action_edit_client {
186
  my ($self) = @_;
187
  $self->edit_client_form(title => t8('Edit Client'));
188
}
189

  
190
sub action_save_client {
191
  my ($self) = @_;
192
  my $params = delete($::form->{client}) || { };
193
  my $is_new = !$params->{id};
194

  
195
  $self->client($is_new ? SL::DB::AuthClient->new : SL::DB::AuthClient->new(id => $params->{id})->load)->assign_attributes(%{ $params });
196

  
197
  my @errors = $self->client->validate;
198

  
199
  if (@errors) {
200
    flash('error', @errors);
201
    $self->edit_client_form(title => $is_new ? t8('Create a new client') : t8('Edit Client'));
202
    return;
203
  }
204

  
205
  $self->client->save;
206
  if ($self->client->is_default) {
207
    SL::DB::Manager::AuthClient->update_all(set => { is_default => 0 }, where => [ '!id' => $self->client->id ]);
208
  }
209

  
210
  flash_later('info', $is_new ? t8('The client has been created.') : t8('The client has been saved.'));
211
  $self->redirect_to(action => 'show');
212
}
213

  
214
sub action_delete_client {
215
  my ($self) = @_;
216

  
217
  if (!$self->client->delete) {
218
    flash('error', t8('The client could not be deleted.'));
219
    $self->edit_client_form(title => t8('Edit Client'));
220
    return;
221
  }
222

  
223
  flash_later('info', t8('The client has been deleted.'));
224
  $self->redirect_to(action => 'show');
225
}
226

  
227
sub action_test_database_connectivity {
228
  my ($self)    = @_;
229

  
230
  my %cfg       = %{ $::form->{client} || {} };
231
  my $dbconnect = 'dbi:Pg:dbname=' . $cfg{dbname} . ';host=' . $cfg{dbhost} . ';port=' . $cfg{dbport};
232
  my $dbh       = DBI->connect($dbconnect, $cfg{dbuser}, $cfg{dbpasswd});
233

  
234
  my $ok        = !!$dbh;
235
  my $error     = $DBI::errstr;
236

  
237
  $dbh->disconnect if $dbh;
238

  
239
  $self->render('admin/test_db_connection',
240
                title => t8('Database Connection Test'),
241
                ok    => $ok,
242
                error => $error);
243
}
244

  
168 245
#
169 246
# actions: locking, unlocking
170 247
#
......
199 276
sub init_client            { SL::DB::AuthClient->new(id => ($::form->{id} || ($::form->{client} || {})->{id}))->load }
200 277
sub init_user              { SL::DB::AuthUser  ->new(id => ($::form->{id} || ($::form->{user}   || {})->{id}))->load }
201 278
sub init_all_clients       { SL::DB::Manager::AuthClient->get_all_sorted                                             }
279
sub init_all_users         { SL::DB::Manager::AuthUser->get_all_sorted                                               }
202 280
sub init_all_groups        { SL::DB::Manager::AuthGroup->get_all_sorted                                              }
203 281
sub init_all_dateformats   { [ qw(mm/dd/yy dd/mm/yy dd.mm.yy yyyy-mm-dd)      ]                                      }
204 282
sub init_all_numberformats { [ qw(1,000.00 1000.00 1.000,00 1000,00)          ]                                      }
......
245 323
  $self->render('admin/edit_user', %params);
246 324
}
247 325

  
326
sub edit_client_form {
327
  my ($self, %params) = @_;
328

  
329
  $::request->layout->use_javascript("${_}.js") for qw(jquery.selectboxes jquery.multiselect2side);
330
  $self->render('admin/edit_client', %params);
331
}
332

  
248 333
#
249 334
# helpers
250 335
#
SL/DB/AuthClient.pm
4 4

  
5 5
use SL::DB::MetaSetup::AuthClient;
6 6
use SL::DB::Manager::AuthClient;
7
use SL::DB::Helper::Util;
7 8

  
8 9
__PACKAGE__->meta->add_relationship(
9 10
  users => {
......
22 23

  
23 24
__PACKAGE__->meta->initialize;
24 25

  
26
sub validate {
27
  my ($self) = @_;
28

  
29
  my @errors;
30
  push @errors, $::locale->text('The name is missing.')                                           if !$self->name;
31
  push @errors, $::locale->text('The database name is missing.')                                  if !$self->dbname;
32
  push @errors, $::locale->text('The database host is missing.')                                  if !$self->dbhost;
33
  push @errors, $::locale->text('The database port is missing.')                                  if !$self->dbport;
34
  push @errors, $::locale->text('The database user is missing.')                                  if !$self->dbuser;
35
  push @errors, $::locale->text('The name is not unique.')                                        if !SL::DB::Helper::Util::is_unique($self, 'name');
36
  push @errors, $::locale->text('The combination of database host, port and name is not unique.') if !SL::DB::Helper::Util::is_unique($self, 'dbhost', 'dbport', 'dbname');
37

  
38
  return @errors;
39
}
40

  
25 41
1;
locale/de/all
448 448
  'Close Books up to'           => 'Die Bücher abschließen bis zum',
449 449
  'Close Flash'                 => 'Schließen',
450 450
  'Close SEPA exports'          => 'SEPA-Export abschließen',
451
  'Close Window'                => 'Fenster Schließen',
452
  'Close window'                => 'Fenster schließen',
451
  'Close Window'                => 'Fenster Schließen',
453 452
  'Closed'                      => 'Geschlossen',
454 453
  'Collective Orders only work for orders from one customer!' => 'Sammelaufträge funktionieren nur für Aufträge von einem Kunden!',
455 454
  'Column name'                 => 'Spaltenname',
......
496 495
  'Create Date'                 => 'Erstelldatum',
497 496
  'Create a new background job' => 'Einen neuen Hintergrund-Job anlegen',
498 497
  'Create a new business'       => 'Einen neuen Kunden-/Lieferantentyp erfassen',
498
  'Create a new client'         => 'Einen neuen Mandanten anlegen',
499 499
  'Create a new department'     => 'Eine neue Abteilung erfassen',
500 500
  'Create a new payment term'   => 'Neue Zahlungsbedingungen anlegen',
501 501
  'Create a new project'        => 'Neues Projekt anlegen',
......
594 594
  'Database ID'                 => 'Datenbank-ID',
595 595
  'Database User'               => 'Datenbankbenutzer',
596 596
  'Database backups and restorations are disabled in the configuration.' => 'Datenbanksicherungen und -wiederherstellungen sind in der Konfiguration deaktiviert.',
597
  'Database host and port'      => 'Datenbankhost und -port',
597 598
  'Database name'               => 'Datenbankname',
598 599
  'Database settings'           => 'Datenbankeinstellungen',
599 600
  'Database template'           => 'Datenbankvorlage',
600 601
  'Database update error:'      => 'Fehler beim Datenbankupgrade:',
602
  'Database user and password'  => 'Datebankbenutzer und -passwort',
601 603
  'Dataset'                     => 'Datenbank',
602 604
  'Dataset missing!'            => 'Datenbank fehlt!',
603 605
  'Dataset name'                => 'Datenbankname',
......
634 636
  'Default Warehouse'           => 'Standard-Lager',
635 637
  'Default Warehouse with ignoring on hand' => 'Standardlager für Auslagern ohne Prüfung auf Bestand',
636 638
  'Default buchungsgruppe'      => 'Standardbuchungsgruppe',
639
  'Default client'              => 'Standardmandant',
637 640
  'Default currency'            => 'Standardwährung',
638 641
  'Default currency missing!'   => 'Standardwährung fehlt!',
639 642
  'Default output medium'       => 'Standardausgabekanal',
......
770 773
  'Edit Assembly'               => 'Erzeugnis bearbeiten',
771 774
  'Edit Bins'                   => 'Lagerplätze bearbeiten',
772 775
  'Edit Buchungsgruppe'         => 'Buchungsgruppe bearbeiten',
776
  'Edit Client'                 => 'Mandanten bearbeiten',
773 777
  'Edit Credit Note'            => 'Gutschrift bearbeiten',
774 778
  'Edit Customer'               => 'Kunde editieren',
775 779
  'Edit Dunning'                => 'Mahnungen konfigurieren',
......
926 930
  'Filter date by'              => 'Datum filtern nach',
927 931
  'Filter for customer variables' => 'Filter für benutzerdefinierte Kundenvariablen',
928 932
  'Filter for item variables'   => 'Filter für benutzerdefinierte Artikelvariablen',
929
  'Filter parts'                => 'Artikel filtern',
930 933
  'Finish'                      => 'Abschließen',
931 934
  'First 20 Lines'              => 'Nur erste 20 Datensätze',
932 935
  'Fix transaction'             => 'Buchung korrigieren',
......
990 993
  'Group'                       => 'Warengruppe',
991 994
  'Group Invoices'              => 'Rechnungen zusammenfassen',
992 995
  'Group Items'                 => 'Waren gruppieren',
996
  'Group assignment'            => 'Gruppenzuordnung',
993 997
  'Group deleted!'              => 'Warengruppe gelöscht!',
994 998
  'Group membership'            => 'Gruppenzugehörigkeit',
995 999
  'Group missing!'              => 'Warengruppe fehlt!',
......
1347 1351
  'No transaction selected!'    => 'Keine Transaktion ausgewählt',
1348 1352
  'No transfers were executed in this export.' => 'In diesem SEPA-Export wurden keine Überweisungen ausgeführt.',
1349 1353
  'No unknown units where found.' => 'Es wurden keine unbekannten Einheiten gefunden.',
1350
  'No users have been created yet.' => 'Es wurden noch keine Benutzer angelegt.',
1354
  'No users have been created yet.' => 'Es wurden noch keine Benutzer anleget.',
1351 1355
  'No valid number entered for pricegroup "#1".' => 'Für Preisgruppe "#1" wurde keine gültige Nummer eingegeben.',
1352 1356
  'No vendor has been selected yet.' => 'Es wurde noch kein Lieferant ausgewählt.',
1353 1357
  'No warehouse has been created yet or the quantity of the bins is not configured yet.' => 'Es wurde noch kein Lager angelegt, bzw. die dazugehörigen Lagerplätze sind noch nicht konfiguriert.',
......
1505 1509
  'Please enter a profile name.' => 'Bitte geben Sie einen Profilnamen an.',
1506 1510
  'Please enter the currency you are working with.' => 'Bitte geben Sie die Währung an, mit der Sie arbeiten.',
1507 1511
  'Please enter the login for the new user.' => 'Bitte geben Sie das Login für den neuen Benutzer ein.',
1512
  'Please enter the name for the new client.' => 'Bitte geben Sie einen Namen für den neuen Mandanten ein.',
1508 1513
  'Please enter the name of the database that will be used as the template for the new database:' => 'Bitte geben Sie den Namen der Datenbank an, die als Vorlage für die neue Datenbank benutzt wird:',
1509 1514
  'Please enter the name of the dataset you want to restore the backup in.' => 'Bitte geben Sie den Namen der Datenbank ein, in der Sie die Sicherung wiederherstellen wollen.',
1510 1515
  'Please enter the sales tax identification number.' => 'Bitte geben Sie die Umsatzsteueridentifikationsnummer an.',
......
1975 1980
  'Templates'                   => 'Vorlagen',
1976 1981
  'Terms missing in row '       => '+Tage fehlen in Zeile ',
1977 1982
  'Test and preview'            => 'Test und Vorschau',
1983
  'Test database connectivity'  => 'Datenbankverbindung testen',
1978 1984
  'Text field'                  => 'Textfeld',
1979 1985
  'Text field variables: \'WIDTH=w HEIGHT=h\' sets the width and height of the text field. They default to 30 and 5 respectively.' => 'Textfelder: \'WIDTH=w HEIGHT=h\' setzen die Breite und die Höhe des Textfeldes. Wenn nicht anders angegeben, so werden sie 30 Zeichen breit und fünf Zeichen hoch dargestellt.',
1980 1986
  'Text variables: \'MAXLENGTH=n\' sets the maximum entry length to \'n\'.' => 'Textzeilen: \'MAXLENGTH=n\' setzt eine Maximallänge von n Zeichen.',
......
2016 2022
  'The business has been saved.' => 'Der Kunden-/Lieferantentyp wurde gespeichert.',
2017 2023
  'The business is in use and cannot be deleted.' => 'Der Kunden-/Lieferantentyp wird benutzt und kann nicht gelöscht werden.',
2018 2024
  'The changing of tax-o-matic account is NOT recommended, but if you do so please also (re)configure buchungsgruppen and reconfigure ALL charts which point to this tax-o-matic account. ' => 'Es wird nicht empfohlen Steuerkonten (Umsatzsteuer oder Vorsteuer) "umzuhängen", aber falls es gemacht wird, bitte auch entsprechend konsequent die Buchungsgruppen und die Konten die mit dieser Steuer verknüpft sind umkonfigurieren.',
2025
  'The client could not be deleted.' => 'Der Mandant konnte nicht gelöscht werden.',
2026
  'The client has been created.' => 'Der Mandant wurde angelegt.',
2027
  'The client has been deleted.' => 'Der Mandant wurde gelöscht.',
2028
  'The client has been saved.'  => 'Der Mandant wurde gespeichert.',
2019 2029
  'The column "make_X" can contain either a vendor\'s database ID, a vendor number or a vendor\'s name.' => 'Die Spalte "make_X" can entweder die Datenbank-ID des Lieferanten, eine Lieferantennummer oder einen Lieferantennamen enthalten.',
2020 2030
  'The column triplets can occur multiple times with different numbers "X" each time (e.g. "make_1", "model_1", "lastcost_1", "make_2", "model_2", "lastcost_2", "make_3", "model_3", "lastcost_3" etc).' => 'Die Spalten-Dreiergruppen können mehrfach auftreten, sofern sie unterschiedliche Nummern "X" verwenden (z.B. "make_1", "model_1", "lastcost_1", "make_2", "model_2", "lastcost_2", "make_3", "model_3", "lastcost_3" etc).',
2021 2031
  'The columns "Dunning Duedate", "Total Fees" and "Interest" show data for the previous dunning created for this invoice.' => 'Die Spalten "Zahlbar bis", "Kumulierte Gebühren" und "Zinsen" zeigen Daten der letzten für diese Rechnung erzeugten Mahnung.',
2032
  'The combination of database host, port and name is not unique.' => '',
2022 2033
  'The connection to the LDAP server cannot be encrypted (SSL/TLS startup failure). Please check config/kivitendo.conf.' => 'Die Verbindung zum LDAP-Server kann nicht verschlüsselt werden (Fehler bei SSL/TLS-Initialisierung). Bitte überprüfen Sie die Angaben in config/kivitendo.conf.',
2023 2034
  'The connection to the authentication database failed:' => 'Die Verbindung zur Authentifizierungsdatenbank schlug fehl:',
2024 2035
  'The connection to the configured client database "#1" on host "#2:#3" failed.' => 'Die Verbindung zur konfigurierten Datenbank "#1" auf Host "#2:#3" schlug fehl.',
......
2031 2042
  'The custom variable has been saved.' => 'Die benutzerdefinierte Variable wurde gespeichert.',
2032 2043
  'The database #1 has been successfully deleted.' => 'Die Datenbank #1 wurde erfolgreich gelöscht.',
2033 2044
  'The database for user management and authentication does not exist. You can create let kivitendo create it with the following parameters:' => 'Die Datenbank für die Benutzeranmeldung existiert nicht. Sie können Sie von kivitendo automatisch mit den folgenden Parametern anlegen lassen:',
2045
  'The database host is missing.' => 'Der Datenbankhost fehlt.',
2046
  'The database name is missing.' => 'Der Datenbankname fehlt.',
2047
  'The database port is missing.' => 'Der Datenbankport fehlt.',
2034 2048
  'The database update/creation did not succeed. The file #1 contained the following error:' => 'Die Datenbankaktualisierung/erstellung schlug fehl. Die Datei #1 enthielt den folgenden Fehler:',
2035 2049
  'The database upgrade for the introduction of Buchungsgruppen is now complete.' => 'Das Datenbankupgrade für die Einführung von Buchungsgruppen ist jetzt beendet.',
2036 2050
  'The database upgrade for the introduction of units is now complete.' => 'Das Datenbankupgrade zwecks Einführung von Einheiten ist nun beendet.',
2051
  'The database user is missing.' => 'Der Datenbankbenutzer fehlt.',
2037 2052
  'The dataset #1 has been successfully created.' => 'Die Datenbank #1 wurde erfolgreich angelegt.',
2038 2053
  'The dataset backup has been sent via email to #1.' => 'Die Datenbanksicherung wurde per Email an #1 verschickt.',
2039 2054
  'The dataset has to exist before a restoration can be started.' => 'Die Datenbank muss vor der Wiederherstellung bereits angelegt worden sein.',
......
2066 2081
  'The following Datasets need to be updated' => 'Folgende Datenbanken müssen aktualisiert werden',
2067 2082
  'The following currencies have been used, but they are not defined:' => 'Die folgenden Währungen wurden benutzt, sind aber nicht ordnungsgemäß in der Datenbank eingetragen:',
2068 2083
  'The following drafts have been saved and can be loaded.' => 'Die folgenden Entwürfe wurden gespeichert und können geladen werden.',
2084
  'The following groups are valid for this client' => 'Die folgenden Gruppen sind für diesen Mandanten gültig',
2069 2085
  'The following list has been generated automatically from existing users collapsing users with identical settings into a single entry.' => 'Die folgende Liste wurde automatisch aus den im System vorhandenen Benutzern zusammengestellt, wobei identische Einstellungen zu einem Eintrag zusammengefasst wurden.',
2070 2086
  'The following old files whose settings have to be merged manually into the new configuration file "config/kivitendo.conf" still exist:' => 'Es existieren noch die folgenden alten Dateien, deren Einstellungen manuell in die neue Konfiguratsdatei "config/kivitendo.conf" migriert werden müssen:',
2071 2087
  'The following transaction contains wrong taxes:' => 'Die folgende Buchung enthält falsche Steuern:',
......
2073 2089
  'The following transactions are concerned:' => 'Die folgenden Buchungen sind betroffen:',
2074 2090
  'The following units are unknown.' => 'Die folgenden Einheiten sind unbekannt.',
2075 2091
  'The following units exist already:' => 'Die folgenden Einheiten existieren bereits:',
2092
  'The following users will have access to this client' => 'Die folgenden Benutzer werden auf diesen Mandanten Zugriff haben',
2076 2093
  'The following warnings occured during an upgrade to the document templates:' => 'Die folgenden Warnungen traten während einer Aktualisierung der Dokumentenvorlagen auf:',
2077 2094
  'The formula needs the following syntax:<br>For regular article:<br>Variablename= Variable Unit;<br>Variablename2= Variable2 Unit2;<br>...<br>###<br>Variable + ( Variable2 / Variable )<br><b>Please be beware of the spaces in the formula</b><br>' => 'Die Formeln m&uuml;ssen in der folgenden Syntax eingegeben werden:<br>Bei normalen Artikeln:<br>Variablenname = Variable Einheit;<br>Variablenname2 = Variable2 Einheit2;<br>...<br>###<br>Variable + Variable2 * ( Variable - Variable2 )<br>Variablennamen und Einheiten dürfen nur aus alphanumerischen Zeichen bestehen.<br>Es muss jeweils die Gesamte Zeile eingegeben werden',
2078 2095
  'The greetings have been saved.' => 'Die Anreden wurden gespeichert',
......
2090 2107
  'The name in row %d has already been used before.' => 'Der Name in Zeile %d wurde vorher bereits benutzt.',
2091 2108
  'The name is missing in row %d.' => 'Der Name fehlt in Zeile %d.',
2092 2109
  'The name is missing.'        => 'Der Name fehlt.',
2110
  'The name is not unique.'     => 'Der Name ist nicht eindeutig.',
2093 2111
  'The name must only consist of letters, numbers and underscores and start with a letter.' => 'Der Name darf nur aus Buchstaben (keine Umlaute), Ziffern und Unterstrichen bestehen und muss mit einem Buchstaben beginnen.',
2094 2112
  'The number of days for full payment' => 'Die Anzahl Tage, bis die Rechnung in voller Höhe bezahlt werden muss',
2095 2113
  'The option field is empty.'  => 'Das Optionsfeld ist leer.',
......
2151 2169
  'The unit in row %d has been used in the meantime and cannot be changed anymore.' => 'Die Einheit in Zeile %d wurde in der Zwischenzeit benutzt und kann nicht mehr ge&auml;ndert werden.',
2152 2170
  'The units have been saved.'  => 'Die Einheiten wurden gespeichert.',
2153 2171
  'The user can chose which client to connect to during login.' => 'Bei der Anmeldung kann der Benutzer auswählen, welchen Mandanten er benutzen möchte.',
2154
  'The user could not be deleted.' => '',
2172
  'The user could not be deleted.' => 'Der Benutzer konnte nicht gelöscht werden.',
2155 2173
  'The user has been created.'  => 'Der Benutzer wurde angelegt.',
2156
  'The user has been deleted.'  => '',
2174
  'The user has been deleted.'  => 'Der Benutzer wurde gelöscht.',
2157 2175
  'The user has been saved.'    => 'Der Benutzer wurde gespeichert.',
2158 2176
  'The variable name must only consist of letters, numbers and underscores. It must begin with a letter. Example: send_christmas_present' => 'Der Variablenname darf nur aus Zeichen (keine Umlaute), Ziffern und Unterstrichen bestehen. Er muss mit einem Buchstaben beginnen. Beispiel: weihnachtsgruss_verschicken',
2159 2177
  'The warehouse could not be deleted because it has already been used.' => 'Das Lager konnte nicht gel&ouml;scht werden, da es bereits in Benutzung war.',
......
2205 2223
  'This installation uses an unknown chart of accounts (&quot;#1&quot;). This database upgrade cannot create standard buchungsgruppen automatically.' => 'Diese Installation benutzt einen unbekannten Kontenrahmen (&quot;#1&quot;). Dieses Datenbankupgrade kann die Standardbuchungsgruppen nicht automatisch anlegen.',
2206 2224
  'This is a preliminary check for existing sources. Nothing will be created or deleted at this stage!' => 'In diesem Schritt werden bestehende Datenbanken gesucht. Es werden noch keine &Auml;nderungen vorgenommen!',
2207 2225
  'This is a very critical problem.' => 'Dieses Problem ist sehr schwerwiegend.',
2226
  'This is the client to be selected by default on the login screen.' => 'Dies ist derjenige Mandant, der im Loginbildschirm standardmäßig ausgewählt sein wird.',
2208 2227
  'This is the default bin for ignoring onhand' => 'Standardlagerplatz für Auslagern ohne Bestandsprüfung',
2209 2228
  'This is the default bin for parts' => 'Standard-Lagerplatz für Stammdaten/Waren',
2210 2229
  'This list is capped at 15 items to keep it fast. If you need a full list, please use reports.' => 'Diese Liste ist auf 15 Zeilen begrenzt. Wenn Sie eine vollständige Liste benötigen, erstellen Sie bitte einen Bericht.',
......
2333 2352
  'User name'                   => 'Benutzername',
2334 2353
  'Username'                    => 'Benutzername',
2335 2354
  'Users in this group'         => 'BenutzerInnen in dieser Gruppe',
2355
  'Users that have access to this client' => 'Benutzer mit Zugriff auf diesen Mandaten',
2336 2356
  'Users with access'           => 'Benutzer mit Zugriff',
2337 2357
  'Users with access to this client' => 'Benutzer mit Zugriff auf diesen Mandanten',
2338 2358
  'VAT ID'                      => 'UStdID-Nr',
2339 2359
  'Valid'                       => 'Gültig',
2340 2360
  'Valid from'                  => 'Gültig ab',
2341 2361
  'Valid until'                 => 'gültig bis',
2342
  'Valid/Obsolete'              => 'Gültig/ungültig',
2343 2362
  'Value'                       => 'Wert',
2344 2363
  'Variable'                    => 'Variable',
2345 2364
  'Variable Description'        => 'Datenfeldbezeichnung',
templates/webpages/admin/edit_client.html
1
[%- USE HTML %]
2
[%- USE L %][%- USE LxERP -%]
3

  
4
[%- INCLUDE 'common/flash.html' %]
5

  
6
<h1>[% HTML.escape(title) %]</h1>
7

  
8
<p>[% L.link(SELF.url_for(action="show"), LxERP.t8("Back")) %]</p>
9

  
10
<form method="post" action="controller.pl" id="form">
11
 [% L.hidden_tag("client.id", SELF.client.id) %]
12
 [% L.hidden_tag("action", "") %]
13

  
14
 <h2>[%- LxERP.t8("Settings") %]</h2>
15

  
16
 <table>
17
  <tr>
18
   <th align="right">[% LxERP.t8('Client name') %]</th>
19
   <td>[% L.input_tag("client.name", SELF.client.name) %]</td>
20
  </tr>
21

  
22
  <tr>
23
   <th align="right">[% LxERP.t8('Default client') %]</th>
24
   <td>[% L.checkbox_tag("client.is_default", label=LxERP.t8('This is the client to be selected by default on the login screen.'), checked=SELF.client.is_default) %]</td>
25
  </tr>
26

  
27
  <tr>
28
   <th align="right">[% LxERP.t8('Database name') %]</th>
29
   <td>[% L.input_tag("client.dbname", SELF.client.dbname, 'data-dbsettings'=1) %]</td>
30
  </tr>
31

  
32
  <tr>
33
   <th align="right">[% LxERP.t8('Database host and port') %]</th>
34
   <td>
35
    [% L.input_tag("client.dbhost", SELF.client.dbhost, 'data-dbsettings'=1) %]
36
    [% L.input_tag("client.dbport", SELF.client.dbport, 'data-dbsettings'=1, size=6) %]
37
   </td>
38
  </tr>
39

  
40
  <tr>
41
   <th align="right">[% LxERP.t8('Database user and password') %]</th>
42
   <td>
43
    [% L.input_tag("client.dbuser",   SELF.client.dbuser, 'data-dbsettings'=1) %]
44
    [% L.input_tag("client.dbpasswd", SELF.client.dbpasswd, 'data-dbsettings'=1) %]
45
   </td>
46
  </tr>
47
 </table>
48

  
49
 <div>
50
  [% L.button_tag("test_database_connectivity()", LxERP.t8("Test database connectivity")) %]
51
 </div>
52

  
53
 <h2>[%- LxERP.t8("Access to clients") %]</h2>
54

  
55
[% IF SELF.all_users.size %]
56
 <p>
57
  [%- LxERP.t8("The following users will have access to this client") %]:
58
 </p>
59

  
60
 <div class="clearfix">
61
  [% L.select_tag("client.users[]", SELF.all_users, id="client_users", title_key="login", default=SELF.client.users, default_key='id', multiple=1) %]
62
  [% L.multiselect2side("client_users", labelsx => LxERP.t8("All users"), labeldx => LxERP.t8("Users that have access to this client")) %]
63
 </div>
64

  
65
[%- ELSE %]
66
 <p>
67
  [% LxERP.t8("No users have been created yet.") %]
68
 </p>
69
[%- END %]
70

  
71
 <h2>[%- LxERP.t8("Group assignment") %]</h2>
72

  
73
[% IF SELF.all_groups.size %]
74
 <p>
75
  [%- LxERP.t8("The following groups are valid for this client") %]:
76
 </p>
77

  
78
 <div class="clearfix">
79
  [% L.select_tag("client.groups[]", SELF.all_groups, id="client_groups", title_key="name", default=SELF.client.groups, default_key='id', multiple=1) %]
80
  [% L.multiselect2side("client_groups", labelsx => LxERP.t8("All groups"), labeldx => LxERP.t8("Groups valid for this client")) %]
81
 </div>
82

  
83
[%- ELSE %]
84
 <p>
85
  [% LxERP.t8("No groups have been created yet.") %]
86
 </p>
87
[%- END %]
88

  
89
<hr size="3" noshade>
90

  
91
<p>
92
 [% L.link(SELF.url_for(action="show"), LxERP.t8("Back")) %]
93

  
94
 [% L.button_tag("submit_with_action('save_client')", LxERP.t8("Save")) %]
95
 [% IF SELF.client.id %]
96
  [% L.button_tag("save_as_new()", LxERP.t8("Save as new")) %]
97
  [% L.button_tag("submit_with_action('delete_client')", LxERP.t8("Delete"), confirm=LxERP.t8("Are you sure?")) %]
98
 [%- END %]
99
</p>
100

  
101
</form>
102

  
103
<script type="text/javascript">
104
 <!--
105
  function submit_with_action(action) {
106
    $("#action").val("Admin/" + action);
107
    $("#form").submit();
108
  }
109

  
110
  function save_as_new() {
111
    var new_client_name = prompt("[% LxERP.t8("Please enter the name for the new client.") %]", "");
112
    if (!new_client_name)
113
      return;
114

  
115
    $("#client_name").val(new_client_name);
116
    $("#client_id").val("");
117
    submit_with_action("save_client");
118
  }
119

  
120
  function test_database_connectivity() {
121
    open_jqm_window({
122
      url:  'controller.pl?action=Admin/test_database_connectivity',
123
      data: $("INPUT[data-dbsettings=1]").serialize(),
124
      type: 'POST'
125
    });
126
    return true;
127
  }
128
   -->
129
</script>
templates/webpages/admin/show.html
7 7
<div>
8 8
 [% LxERP.t8("Actions") %]:
9 9
 <span class="link_separator"></span>
10
 [% L.link(SELF.url_for(action="new_client"), LxERP.t8("Add Client")) %]
11
 <span class="link_separator">|</span>
12 10
 [% L.link(SELF.url_for(action="new_user"), LxERP.t8("Add User")) %]
13 11
 <span class="link_separator">|</span>
12
 [% L.link(SELF.url_for(action="new_client"), LxERP.t8("Add Client")) %]
13
 <span class="link_separator">|</span>
14 14
 [% L.link(SELF.url_for(action="edit_groups"), LxERP.t8("Edit groups")) %]
15 15
 <span class="link_separator">|</span>
16 16
 [% L.link(SELF.url_for(action="pg_database_administration", controller="admin.pl"), LxERP.t8("Pg Database Administration")) %]
......
45 45

  
46 46
[%- ELSE %]
47 47
  <table width="100%">
48
   <tr>
49
    <th class="listtop">[% LxERP.t8('Login Name') %]</th>
50
    <th class="listtop">[% LxERP.t8('Name') %]</th>
51
    <th class="listtop">[% LxERP.t8('Language') %]</th>
48
   <tr class="listheading">
49
    <th>[% LxERP.t8('Login Name') %]</th>
50
    <th>[% LxERP.t8('Name') %]</th>
51
    <th>[% LxERP.t8('Language') %]</th>
52 52
   </tr>
53 53

  
54 54
[% FOREACH user = USERS %]
......
72 72

  
73 73
[%- ELSE %]
74 74
  <table width="100%">
75
   <tr>
76
    <th class="listtop">[% LxERP.t8('Client name') %]</th>
77
    <th class="listtop">[% LxERP.t8('Database ID') %]</th>
78
    <th class="listtop">[% LxERP.t8('Database name') %]</th>
79
    <th class="listtop">[% LxERP.t8('Database Host') %]</th>
80
    <th class="listtop">[% LxERP.t8('Database User') %]</th>
75
   <tr class="listheading">
76
    <th>[% LxERP.t8('Client name') %]</th>
77
    <th>[% LxERP.t8('Database ID') %]</th>
78
    <th>[% LxERP.t8('Database name') %]</th>
79
    <th>[% LxERP.t8('Database Host') %]</th>
80
    <th>[% LxERP.t8('Database User') %]</th>
81
    <th>[% LxERP.t8('Default client') %]</th>
81 82
   </tr>
82 83

  
83 84
[%- FOREACH client = CLIENTS %]
84 85
   <tr class="listrow">
85
    <td>[% L.link(SELF.url_for(action="edit_client", client_id=client.id), HTML.escape(client.name)) %]</td>
86
    <td>[% L.link(SELF.url_for(action="edit_client", id=client.id), HTML.escape(client.name)) %]</td>
86 87
    <td>[% HTML.escape(client.id) %]</td>
87 88
    <td>[% HTML.escape(client.dbname) %]</td>
88 89
    <td>[% HTML.escape(client.dbhost) %][% IF client.dbport %]:[%- HTML.escape(client.dbport) %][%- END %]</td>
89 90
    <td>[% HTML.escape(client.dbuser) %]</td>
91
    <td>[% IF client.is_default %][% LxERP.t8("Yes") %][%- ELSE %][% LxERP.t8("No") %][%- END %]</td>
90 92
   </tr>
91 93
[%- END %]
92 94
  </table>
templates/webpages/admin/test_db_connection.html
1
[%- USE T8 %]
2
[%- USE HTML %]
1
[%- USE HTML %][%- USE LxERP -%][%- USE L -%]
2
<h1>[% HTML.escape(title) %]</h1>
3 3

  
4
 <h1>[% title %]</h1>
4
[%- IF ok %]
5 5

  
6
 [%- IF connection_ok %]
6
 <p class="message_ok">[% LxERP.t8('The connection was established successfully.') %]</p>
7 7

  
8
 <p class="message_ok">[% 'The connection was established successfully.' | $T8 %]</p>
9

  
10
 [%- ELSE %]
8
[%- ELSE %]
11 9

  
12 10
 <p class="message_error">
13
  [% 'The connection to the database could not be established.' | $T8 %]
14
  [% 'Error message from the database driver:' | $T8 %]
11
  [% LxERP.t8('The connection to the database could not be established.') %]
12
  [% LxERP.t8('Error message from the database driver:') %]
15 13
 </p>
16 14

  
17
 <p>[% HTML.escape(errstr) %]</p>
15
 <p>[% HTML.escape(error) %]</p>
18 16

  
19
 [%- END %]
17
[%- END %]
20 18

  
21
 <p>
22
  <form>
23
   <input type="button" class="submit" onclick="window.close()" value="[% 'Close Window' | $T8 %]">
24
  </form>
25
 </p>
19
<div>
20
 [% L.button_tag("\$('#jqm_popup_dialog .close').trigger('click');", LxERP.t8("Close Window")) %]
21
</div>

Auch abrufbar als: Unified diff