use parent qw(SL::Controller::Base);
-use IO::File;
+use IO::Dir;
use List::Util qw(first);
+use SL::Common ();
use SL::DB::AuthUser;
use SL::DB::AuthGroup;
use SL::DB::Printer;
use SL::Helper::Flash;
use SL::Locale::String qw(t8);
+use SL::System::InstallationLock;
use SL::User;
use Rose::Object::MakeMethods::Generic
(
- 'scalar --get_set_init' => [ qw(client user group printer nologin_file_name db_cfg is_locked
- all_dateformats all_numberformats all_countrycodes all_stylesheets all_menustyles all_clients all_groups all_users all_rights all_printers) ],
+ 'scalar --get_set_init' => [ qw(client user group printer db_cfg is_locked
+ all_dateformats all_numberformats all_countrycodes all_stylesheets all_menustyles all_clients all_groups all_users all_rights all_printers
+ all_dbsources all_used_dbsources all_accounting_methods all_inventory_systems all_profit_determinations all_charts) ],
);
__PACKAGE__->run_before(\&setup_layout);
return if !$self->authenticate_root;
return if !$self->check_auth_db_and_tables;
return if $self->apply_dbupgrade_scripts;
+
$self->redirect_to(action => 'show');
}
my ($self) = @_;
return if $self->apply_dbupgrade_scripts;
- $self->action_show;
+ $self->redirect_to(action => 'show');
}
sub action_create_auth_db {
sub action_delete_user {
my ($self) = @_;
+ my @clients = @{ $self->user->clients || [] };
+
if (!$self->user->delete) {
flash('error', t8('The user could not be deleted.'));
$self->edit_user_form(title => t8('Edit User'));
return;
}
+ # Flag corresponding entries in 'employee' as deleted.
+ foreach my $client (@clients) {
+ my $dbh = $client->dbconnect(AutoCommit => 1) || next;
+ $dbh->do(qq|UPDATE employee SET deleted = TRUE WHERE login = ?|, undef, $self->user->login);
+ $dbh->disconnect;
+ }
+
flash_later('info', t8('The user has been deleted.'));
$self->redirect_to(action => 'show');
}
$dbh->disconnect if $dbh;
- $self->render('admin/test_db_connection',
+ $self->render('admin/test_db_connection', { layout => 0 },
title => t8('Database Connection Test'),
ok => $ok,
error => $error);
$self->redirect_to(action => 'list_printers', 'client.id' => $self->client->id);
}
+#
+# actions: database administration
+#
+
+sub action_database_administration {
+ my ($self) = @_;
+
+ $::form->{dbhost} ||= $::auth->{DB_config}->{host} || 'localhost';
+ $::form->{dbport} ||= $::auth->{DB_config}->{port} || 5432;
+ $::form->{dbuser} ||= $::auth->{DB_config}->{user} || 'kivitendo';
+ $::form->{dbpasswd} ||= $::auth->{DB_config}->{password};
+ $::form->{dbdefault} ||= 'template1';
+
+ $self->render('admin/dbadmin', title => t8('Database Administration'));
+}
+
+sub action_create_dataset {
+ my ($self) = @_;
+ $self->create_dataset_form;
+}
+
+sub action_do_create_dataset {
+ my ($self) = @_;
+
+ my @errors;
+ push @errors, t8("Dataset missing!") if !$::form->{db};
+ push @errors, t8("Default currency missing!") if !$::form->{defaultcurrency};
+
+ if (@errors) {
+ flash('error', @errors);
+ return $self->create_dataset_form;
+ }
+
+ $::form->{encoding} = 'UNICODE';
+ User->new->dbcreate($::form);
+
+ flash_later('info', t8("The dataset #1 has been created.", $::form->{db}));
+ $self->redirect_to(action => 'database_administration');
+}
+
+sub action_delete_dataset {
+ my ($self) = @_;
+ $self->delete_dataset_form;
+}
+
+sub action_do_delete_dataset {
+ my ($self) = @_;
+
+ my @errors;
+ push @errors, t8("Dataset missing!") if !$::form->{db};
+
+ if (@errors) {
+ flash('error', @errors);
+ return $self->create_dataset_form;
+ }
+
+ User->new->dbdelete($::form);
+
+ flash_later('info', t8("The dataset #1 has been deleted.", $::form->{db}));
+ $self->redirect_to(action => 'database_administration');
+}
+
#
# actions: locking, unlocking
#
sub action_unlock_system {
my ($self) = @_;
- unlink $self->nologin_file_name;
+
+ SL::System::InstallationLock->unlock;
flash_later('info', t8('Lockfile removed!'));
$self->redirect_to(action => 'show');
}
sub action_lock_system {
my ($self) = @_;
- my $fh = IO::File->new($self->nologin_file_name, "w");
- if (!$fh) {
- $::form->error(t8('Cannot create Lock!'));
-
- } else {
- $fh->close;
- flash_later('info', t8('Lockfile created!'));
- $self->redirect_to(action => 'show');
- }
+ SL::System::InstallationLock->unlock;
+ flash_later('info', t8('Lockfile created!'));
+ $self->redirect_to(action => 'show');
}
#
#
sub init_db_cfg { $::lx_office_conf{'authentication/database'} }
-sub init_nologin_file_name { $::lx_office_conf{paths}->{userspath} . '/nologin'; }
-sub init_is_locked { -e $_[0]->nologin_file_name }
+sub init_is_locked { SL::System::InstallationLock->is_locked }
sub init_client { SL::DB::Manager::AuthClient->find_by(id => ($::form->{id} || ($::form->{client} || {})->{id})) }
sub init_user { SL::DB::AuthUser ->new(id => ($::form->{id} || ($::form->{user} || {})->{id}))->load }
sub init_group { SL::DB::AuthGroup ->new(id => ($::form->{id} || ($::form->{group} || {})->{id}))->load }
sub init_all_groups { SL::DB::Manager::AuthGroup ->get_all_sorted }
sub init_all_printers { SL::DB::Manager::Printer ->get_all_sorted }
sub init_all_dateformats { [ qw(mm/dd/yy dd/mm/yy dd.mm.yy yyyy-mm-dd) ] }
-sub init_all_numberformats { [ qw(1,000.00 1000.00 1.000,00 1000,00) ] }
+sub init_all_numberformats { [ '1,000.00', '1000.00', '1.000,00', '1000,00' ] }
sub init_all_stylesheets { [ qw(lx-office-erp.css Mobile.css kivitendo.css) ] }
+sub init_all_dbsources { [ sort User->dbsources($::form) ] }
+sub init_all_used_dbsources { { map { (join(':', $_->dbhost || 'localhost', $_->dbport || 5432, $_->dbname) => $_->name) } @{ $_[0]->all_clients } } }
+sub init_all_accounting_methods { [ { id => 'accrual', name => t8('Accrual accounting') }, { id => 'cash', name => t8('Cash accounting') } ] }
+sub init_all_inventory_systems { [ { id => 'perpetual', name => t8('Perpetual inventory') }, { id => 'periodic', name => t8('Periodic inventory') } ] }
+sub init_all_profit_determinations { [ { id => 'balance', name => t8('Balancing') }, { id => 'income', name => t8('Cash basis accounting') } ] }
+
+sub init_all_charts {
+ tie my %dir_h, 'IO::Dir', 'sql/';
+
+ return [
+ map { s/-chart\.sql$//; +{ id => $_ } }
+ sort
+ grep { /-chart\.sql\z/ && !/Default-chart.sql\z/ }
+ keys %dir_h
+ ];
+}
+
sub init_all_menustyles {
return [
{ id => 'old', title => $::locale->text('Old (on the side)') },
$::request->layout(SL::Layout::Dispatcher->new(style => 'admin'));
$::request->layout->use_stylesheet("lx-office-erp.css");
$::form->{favicon} = "favicon.ico";
+ %::myconfig = (
+ countrycode => 'de',
+ numberformat => '1.000,00',
+ dateformat => 'dd.mm.yy',
+ ) if !%::myconfig;
}
sub setup_client {
sub login_form {
my ($self, %params) = @_;
- $::request->layout->focus('#admin_password');
- $self->render('admin/adminlogin', title => t8('kivitendo v#1 administration', $::form->{version}), %params);
+ my $version = $::form->read_version;
+ $self->render('admin/adminlogin', title => t8('kivitendo v#1 administration', $version), %params, version => $version);
}
sub edit_user_form {
$self->render('admin/edit_printer', %params);
}
+sub create_dataset_form {
+ my ($self, %params) = @_;
+ $self->render('admin/create_dataset', title => (t8('Database Administration') . " / " . t8('Create Dataset')));
+}
+
+sub delete_dataset_form {
+ my ($self, %params) = @_;
+ $self->render('admin/delete_dataset', title => (t8('Database Administration') . " / " . t8('Delete Dataset')));
+}
+
#
# helpers
#