::end_of_request();
}
-
- my $memberfile = $::lx_office_conf{paths}->{memberfile};
- if (-f $memberfile) {
- my $memberdir = "";
-
- if ($memberfile =~ m|^.*/|) {
- $memberdir = $&;
- }
-
- my $backupdir = "${memberdir}member-file-migration";
-
- $form->{title} = $locale->text('User data migration');
- $form->header();
- print $form->parse_html_template('admin/user_migration', { 'memberfile' => $memberfile,
- 'backupdir' => $backupdir });
-
- ::end_of_request();
- }
}
sub create_auth_db {
login();
}
-sub migrate_users {
- $main::lxdebug->enter_sub();
-
- my $form = $main::form;
- my $locale = $main::locale;
-
- my $memberdir = "";
-
- my $memberfile = $::lx_office_conf{paths}->{memberfile};
- if ($memberfile =~ m|^.*/|) {
- $memberdir = $&;
- }
-
- my $backupdir = "${memberdir}member-file-migration";
-
- if (! -d $backupdir && !mkdir $backupdir, 0700) {
- $form->error(sprintf($locale->text('The directory "%s" could not be created:\n%s'), $backupdir, $!));
- }
-
- copy $memberfile, "users/member-file-migration/members";
-
- my $in = IO::File->new($memberfile, "r");
-
- $form->error($locale->text('Could not open the old memberfile.')) if (!$in);
-
- my (%members, $login);
-
- while (<$in>) {
- chomp;
-
- next if (m/^\s*\#/);
-
- if (m/^\[.*\]/) {
- $login = $_;
- $login =~ s/(\[|\])//g;
- $login =~ s/^\s*//;
- $login =~ s/\s*$//;
-
- $members{$login} = { "login" => $login };
- next;
- }
-
- if ($login && m/=/) {
- my ($key, $value) = split m/\s*=\s*/, $_, 2;
- $key =~ s|^\s*||;
- $value =~ s|\s*$||;
-
- $value =~ s|\\r||g;
- $value =~ s|\\n|\n|g;
-
- $members{$login}->{$key} = $value;
- }
- }
-
- $in->close();
-
- delete $members{"root login"};
-
- map { $_->{dbpasswd} = unpack 'u', $_->{dbpasswd} } values %members;
-
- while (my ($login, $params) = each %members) {
- $main::auth->save_user($login, %{ $params });
- $main::auth->change_password($login, $params->{password}, 1);
-
- my $conf_file = "${memberdir}${login}.conf";
-
- if (-f $conf_file) {
- copy $conf_file, "${backupdir}/${login}.conf";
- unlink $conf_file;
- }
- }
-
- unlink $memberfile;
-
- my @member_list = sort { lc $a->{login} cmp lc $b->{login} } values %members;
-
- $form->{title} = $locale->text('User data migration');
- $form->header();
- print $form->parse_html_template('admin/user_migration_done', { 'MEMBERS' => \@member_list });
-
- $main::lxdebug->leave_sub();
-}
-
-sub create_standard_group_ask {
- my $form = $main::form;
- my $locale = $main::locale;
-
- $form->{title} = $locale->text('Create a standard group');
-
- $form->header();
- print $form->parse_html_template("admin/create_standard_group_ask");
-}
-
-sub create_standard_group {
- my $form = $main::form;
- my $locale = $main::locale;
-
- my %members = $main::auth->read_all_users();
-
- my $groups = $main::auth->read_groups();
-
- foreach my $group (values %{$groups}) {
- if (($form->{group_id} != $group->{id})
- && ($form->{name} eq $group->{name})) {
- $form->show_generic_error($locale->text("A group with that name does already exist."));
- }
- }
-
- my $group = {
- 'name' => $locale->text('Full Access'),
- 'description' => $locale->text('Full access to all functions'),
- 'rights' => { map { $_ => 1 } SL::Auth::all_rights() },
- 'members' => [ map { $_->{id} } values %members ],
- };
-
- $main::auth->save_group($group);
-
- user_migration_complete(1);
-}
-
-sub dont_create_standard_group {
- user_migration_complete(0);
-}
-
-sub user_migration_complete {
- my $standard_group_created = shift;
-
- my $form = $main::form;
- my $locale = $main::locale;
-
- $form->{title} = $locale->text('User migration complete');
- $form->header();
-
- print $form->parse_html_template('admin/user_migration_complete', { 'standard_group_created' => $standard_group_created });
-}
-
sub list_users {
my $form = $main::form;
my $locale = $main::locale;
'<b>What</b> do you want to look for?' => '<b>Wonach</b> wollen Sie suchen?',
'A Buchungsgruppe consists of a descriptive name and the account numbers for the income and expense accounts for those four tax zones as well as the inventory account number.' => 'Eine Buchungsgruppe besteht aus einem deskriptiven Namen, den Erlös- und Aufwandskonten für diese vier Steuerzonen sowie aus einem Inventarkonto.',
'A digit is required.' => 'Eine Ziffer ist vorgeschrieben.',
- 'A group named "Full Access" has been created.' => 'Eine Gruppe namens "Vollzugriff" wurde angelegt.',
'A group with that name does already exist.' => 'Eine Gruppe mit diesem Namen gibt es bereits.',
'A lot of the usability of kivitendo has been enhanced with javascript. Although it is currently possible to use every aspect of kivitendo without javascript, we strongly recommend it. In a future version this may change and javascript may be necessary to access advanced features.' => 'Die Bedienung von kivitendo wurde an vielen Stellen mit Javascript verbessert. Obwohl es derzeit möglich ist, jeden Aspekt von kivitendo auch ohne Javascript zu benutzen, empfehlen wir es. In einer zukünftigen Version wird Javascript eventuell notwendig sein um weitergehende Features zu benutzen.',
'A lower-case character is required.' => 'Ein Kleinbuchstabe ist vorgeschrieben.',
'Allow access' => 'Zugriff erlauben',
'Allow the following users access to my follow-ups:' => 'Erlaube den folgenden Benutzern Zugriff auf meine Wiedervorlagen:',
'Alternatively you can create a new part which will then be selected.' => 'Sie können auch einen neuen Artikel anlegen, der dann automatisch ausgewählt wird.',
- 'Alternatively you can skip this step and create groups yourself.' => 'Alternativ können Sie diesen Schritt überspringen und selber Gruppen anlegen.',
'Amended Advance Turnover Tax Return' => 'Berichtigte Anmeldung',
'Amended Advance Turnover Tax Return (Nr. 10)' => 'Ist dies eine berichtigte Anmeldung? (Nr. 10/Zeile 15 Steuererklärung)',
'Amount' => 'Betrag',
'Could not load class #1, #2' => 'Konnte Klasse #1 nicht laden: "#2"',
'Could not load employee' => 'Konnte Benutzer nicht laden',
'Could not open the file users/members.' => 'Die Datei "users/members" konnte nicht geöffnet werden.',
- 'Could not open the old memberfile.' => 'Die Datei mit den Benutzerdaten konnte nicht geöffnet werden.',
'Could not print dunning.' => 'Die Mahnungen konnten nicht gedruckt werden.',
'Could not rename %s to %s. Reason: %s' => 'Die Datei "%s" konnte nicht in "%s" umbenannt werden. Grund: %s',
'Could not spawn ghostscript.' => 'Die Anwendung "ghostscript" konnte nicht gestartet werden.',
'Create a new department' => 'Eine neue Abteilung erfassen',
'Create a new payment term' => 'Neue Zahlungsbedingungen anlegen',
'Create a new project' => 'Neues Projekt anlegen',
- 'Create a standard group' => 'Eine Standard-Benutzergruppe anlegen',
'Create and edit RFQs' => 'Lieferantenanfragen erfassen und bearbeiten',
'Create and edit dunnings' => 'Mahnungen erfassen und bearbeiten',
'Create and edit invoices and credit notes' => 'Rechnungen und Gutschriften erfassen und bearbeiten',
'Do you really want to delete this group?' => 'Gruppe wirklich löschen?',
'Do you really want to delete this object?' => 'Wollen Sie dieses Objekt wirklich löschen?',
'Do you really want to delete this warehouse?' => 'Wollen Sie dieses Lager wirklich löschen?',
- 'Do you want kivitendo to create a group for access to all functions?' => 'Wollen Sie, dass kivitendo eine Gruppe mit Zugriff auf alle Funktionen anlegt?',
'Do you want to <b>limit</b> your search?' => 'Wollen Sie Ihre Suche <b>spezialisieren</b>?',
'Do you want to carry this shipping address over to the new purchase order so that the vendor can deliver the goods directly to your customer?' => 'Wollen Sie diese Lieferadresse in den neuen Lieferantenauftrag übernehmen, damit der Händler die Waren direkt an Ihren Kunden liefern kann?',
'Do you want to store the existing onhand values into a new warehouse?' => 'Möchten Sie die vorhandenen Mengendaten in ein Lager übertragen?',
'Duplicate in CSV file' => 'Duplikat in CSV-Datei',
'Duplicate in database' => 'Duplikat in Datenbank',
'During the next update a taxkey 0 with tax rate of 0 will automatically created.' => 'Beim nächsten Ausführen des Updates wird ein Steuerschlüssel 0 mit einem Steuersatz von 0% automatisch erzeugt.',
- 'During this user migration kivitendo can create such a group for you and grant all users access to all of kivitendo\'s functions.' => 'Im Rahmen dieser Benutzerdatenmigration kann kivitendo eine solche Gruppe für Sie anlegen und allen Benutzern Zugriff auf alle kivitendo-Funktionen gewähren.',
'E-mail' => 'eMail',
'E-mail Statement to' => 'Fälligkeitsabrechnung als eMail an',
'E-mail address missing!' => 'E-Mail-Adresse fehlt!',
'If the automatic creation of invoices for fees and interest is switched on for a dunning level then the following accounts will be used for the invoice.' => 'Wenn das automatische Erstellen einer Rechnung über Mahngebühren und Zinsen für ein Mahnlevel aktiviert ist, so werden die folgenden Konten für die Rechnung benutzt.',
'If the database user listed above does not have the right to create a database then enter the name and password of the superuser below:' => 'Falls der oben genannte Datenbankbenutzer nicht die Berechtigung zum Anlegen neuer Datenbanken hat, so können Sie hier den Namen und das Passwort des Datenbankadministratoraccounts angeben:',
'If the default transfer out always succeed use this bin for negative stock quantity.' => 'Standardlagerplatz für Auslagern ohne Prüfung auf Bestand',
- 'If you chose to let kivitendo do the migration then kivitendo will also remove the old member file after creating a backup copy of it in the directory "#1".' => 'Falls Sie sich entscheiden, kivitendo die Migration durchführen zu lassen, so wird kivitendo ein Backup der alten Dateien im Verzeichnis "#1" erstellen und die Dateien anschließend löschen.',
'If you enter values for the part number and / or part description then only those bins containing parts whose part number or part description match your input will be shown.' => 'Wenn Sie für die Artikelnummer und / oder die Beschreibung etwas eingeben, so werden nur die Lagerplätze angezeigt, in denen Waren eingelagert sind, die Ihre Suchbegriffe enthalten.',
'If you have not chosen for example the category revenue for a tax and you choose an revenue account to create a transfer in the general ledger, this tax will not be displayed in the tax dropdown.' => 'Wenn Sie z.B. die Kategory Erlös für eine Steuer nicht gewählt haben und ein Erlöskonto beim Erstellen einer Dialogbuchung wählen, wird diese Steuer auch nicht im Dropdown-Menü für die Steuern angezeigt.',
'If you see this message, you most likely just setup your LX-Office and haven\'t added any entry types. If this is the case, the option is accessible for administrators in the System menu.' => 'Wenn Sie diese Meldung sehen haben Sie wahrscheinlich ein frisches LX-Office Setup und noch keine Buchungsgruppen eingerichtet. Ein Administrator kann dies im Systemmenü erledigen.',
'Other users\' follow-ups' => 'Wiedervorlagen anderer Benutzer',
'Other values are ignored.' => 'Andere Eingaben werden ignoriert.',
'Others' => 'Andere',
- 'Otherwise all users will only have access to their own settings.' => 'Andernfalls haben alle Benutzer nur Zugriff auf ihre Einstellungen.',
'Otherwise the variable is only available for printing.' => 'Andernfalls steht die Variable nur beim Ausdruck zur Verfügung.',
'Otherwise you can simply check create warehouse and bins and define a name for the warehouse (Bins will be created automatically) and then continue' => 'Andernfalls einfach <b>"Automatisches Zuweisen der Lagerplätze"</b> anhaken und einen Namen für das Lager vergeben, bzw. per Auswahl auswählen (Lagerplätze werden dann automatisch hinzugefügt) danach auf weiter',
'Out of balance transaction!' => 'Buchung ist nicht ausgeglichen!',
'The department is in use and cannot be deleted.' => 'Die Abteilung wird benutzt und kann nicht gelöscht werden.',
'The description is missing.' => 'Die Beschreibung fehlt.',
'The description is shown on the form. Chose something short and descriptive.' => 'Die Beschreibung wird in der jeweiligen Maske angezeigt. Sie sollte kurz und prägnant sein.',
- 'The directory "%s" could not be created:\n%s' => 'Das Verzeichnis "%s" konnte nicht erstellt werden:\n%s',
'The directory %s does not exist.' => 'Das Verzeichnis %s existiert nicht.',
'The discount in percent' => 'Der prozentuale Rabatt',
'The discount must be less than 100%.' => 'Der Rabatt muss kleiner als 100% sein.',
'The following transactions are concerned:' => 'Die folgenden Buchungen sind betroffen:',
'The following units are unknown.' => 'Die folgenden Einheiten sind unbekannt.',
'The following units exist already:' => 'Die folgenden Einheiten existieren bereits:',
- 'The following users have been migrated into the authentication database:' => 'Die folgenden Benutzer wurden in die Authentifizierungsdatenbank migriert:',
'The following warnings occured during an upgrade to the document templates:' => 'Die folgenden Warnungen traten während einer Aktualisierung der Dokumentenvorlagen auf:',
'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ü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',
'The greetings have been saved.' => 'Die Anreden wurden gespeichert',
'The name is missing.' => 'Der Name fehlt.',
'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.',
'The number of days for full payment' => 'Die Anzahl Tage, bis die Rechnung in voller Höhe bezahlt werden muss',
- 'The old file containing the user information is still present ("#1"). Do you want to migrate these users into the database? If not then you will not be able to log in with any of the users present in the old file.' => 'Die alte Datei mit den Benutzerdaten existiert in dieser Installation noch immer ("#1"). Wollen Sie diese Benutzer in die neue Authentifizierungsdatenbank migrieren lassen? Falls nicht, so werden Sie sich nicht mehr mit den Benutzerdaten aus der alten Mitgliedsdatei anmelden können.',
'The option field is empty.' => 'Das Optionsfeld ist leer.',
'The package name is invalid.' => 'Der Paketname ist ungültig.',
'The parts for this delivery order have already been transferred in.' => 'Die Artikel dieses Lieferscheins wurden bereits eingelagert.',
'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ändert werden.',
'The units have been saved.' => 'Die Einheiten wurden gespeichert.',
'The user is a member in the following group(s):' => 'Der Benutzer ist Mitglied in den folgenden Gruppen:',
- 'The user migration process is complete.' => 'Der Prozess der Benutzerdatenmigration ist abgeschlossen.',
'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',
'The warehouse could not be deleted because it has already been used.' => 'Das Lager konnte nicht gelöscht werden, da es bereits in Benutzung war.',
'The warehouse does not contain any bins.' => 'Das Lager enthält keine Lagerplätze.',
'These units can be based on other units so that kivitendo can convert prices when the user switches from one unit to another.' => 'Einheiten können auf anderen Einheiten basieren, sodass kivitendo Preise automatisch umrechnen kann, wenn die Benutzer zwischen solchen Einheiten umschalten.',
'These wrong entries cannot be fixed automatically.' => 'Diese Einträge können nicht automatisch bereinigt werden.',
'This can be done with the following query:' => 'Dies kann mit der folgenden Datenbankabfrage erreicht werden:',
- 'This corresponds to kivitendo\'s behavior prior to version 2.4.4.' => 'Dies entspricht kivitendos Verhalten vor Version 2.4.4.',
'This could have happened for two reasons:' => 'Dies kann aus zwei Gründen geschehen sein:',
'This customer number is already in use.' => 'Diese Kundennummer wird bereits verwendet.',
'This feature especially prevents mistakes by mixing up prior tax and sales tax.' => 'Dieses Feature vermeidet insbesondere Verwechslungen von Umsatz- und Vorsteuer.',
- 'This group will be called "Full Access".' => 'Diese Gruppe wird "Vollzugriff" genannt.',
'This has been changed in this version, therefore please change the "old" bins to some real warehouse bins.' => 'Das wurde in dieser Version umgestellt, bitte ändern Sie die Freitext-Lagerplätze auf vorhandene Lagerplätze.',
'This has been changed in this version.' => 'Ab dieser Version ist dies nicht mehr so.',
'This installation uses an unknown chart of accounts ("#1"). This database upgrade cannot create standard buchungsgruppen automatically.' => 'Diese Installation benutzt einen unbekannten Kontenrahmen ("#1"). Dieses Datenbankupgrade kann die Standardbuchungsgruppen nicht automatisch anlegen.',
'User' => 'Benutzer',
'User Config' => 'Einstellungen',
'User Login' => 'Als Benutzer anmelden',
- 'User data migration' => 'Benutzerdatenmigration',
'User deleted!' => 'Benutzer gelöscht!',
'User login' => 'Benutzeranmeldung',
- 'User migration complete' => 'Benutzermigration abgeschlossen',
'User name' => 'Benutzername',
'User saved!' => 'Benutzer gespeichert!',
'Username' => 'Benutzername',
'You have selected none of the invoices.' => 'Sie haben keine der Rechnungen ausgewählt.',
'You have to chose a dimension unit and a service unit which will then be assigned to those entries.' => 'Sie müssen eine Maß- und eine Dienstleistungseinheit auswählen, die diesen Waren und Dienstleistungen, denen noch keine Einheit zugeordnet ist, zugeordnet wird.',
'You have to chose which unit to save for each of them.' => 'Sie müssen für jeden Artikel die neue Einheit auswählen.',
- 'You have to create at least one group, grant it access to kivitendo\'s functions and assign users to it.' => 'Sie müssen mindestens eine Gruppe anlegen, ihr Zugriff auf kivitendo-Funktionen gewähren und ihr Benutzer zuweisen.',
'You have to create new Buchungsgruppen for all the combinations of inventory, income and expense accounts that have been used already.' => 'Sie müssen neue Buchungsgruppen für alle Kombinationen aus Inventar-, Erlös- und Aufwandskonto, die bereits benutzt wurden.',
'You have to define a unit as a multiple of a smaller unit.' => 'Sie müssen Einheiten als ein Vielfaches einer kleineren Einheit eingeben.',
'You have to enter a company name in your user preferences (see the "Program" menu, "Preferences").' => 'Sie müssen einen Firmennamen in Ihren Einstellungen angeben (siehe Menü "Programm", "Einstellungen").',
'You have to specify an execution date for each antry.' => 'Sie müssen für jeden zu buchenden Eintrag ein Ausführungsdatum angeben.',
'You must chose a user.' => 'Sie müssen einen Benutzer auswählen.',
'You should create a backup of the database before proceeding because the backup might not be reversible.' => 'Sie sollten eine Sicherungskopie der Datenbank erstellen, bevor Sie fortfahren, da die Aktualisierung unter Umständen nicht umkehrbar ist.',
- 'You will now be forwarded to the administration panel.' => 'Sie werden nun zum Administrationsbereich weitergeleitet.',
'You\'re not editing a file.' => 'Sie bearbeiten momentan keine Datei.',
'You\'ve already chosen the following limitations:' => 'Sie haben bereits die folgenden Einschränkungen vorgenommen:',
'Your PostgreSQL installationen uses UTF-8 as its encoding. Therefore you have to configure kivitendo to use UTF-8 as well.' => 'Ihre PostgreSQL-Installation benutzt UTF-8 als Zeichensatz. Sie müssen deshalb kivitendo so konfigurieren, dass es ebenfalls UTF-8 als Zeichensatz benutzt.',
'kivitendo Homepage' => 'Infos zu kivitendo',
'kivitendo administration' => 'kivitendo Administration',
'kivitendo can fix these problems automatically.' => 'kivitendo kann solche Probleme automatisch beheben.',
- 'kivitendo has been switched to group-based access restrictions.' => 'kivitendo wurde auf eine gruppenbasierte Benutzerzugriffsverwaltung umgestellt.',
'kivitendo has found one or more problems in the general ledger.' => 'kivitendo hat ein oder mehrere Probleme im Hauptbuch gefunden.',
'kivitendo is about to update the database [ #1 ].' => 'kivitendo wird gleich die Datenbank [ #1 ] aktualisieren.',
'kivitendo is now able to manage warehouses instead of just tracking the amount of goods in your system.' => 'kivitendo enthält jetzt auch echte Lagerverwaultung anstatt reiner Mengenzählung.',