epic-s6ts
[kivitendo-erp.git] / scripts / console
index 97260d1..bf4ffaa 100755 (executable)
@@ -2,11 +2,16 @@
 
 use warnings;
 use strict;
+use utf8;
+use open qw(:std :utf8);
 use 5.008;                          # too much magic in here to include perl 5.6
 
 BEGIN {
-  unshift @INC, "modules/override"; # Use our own versions of various modules (e.g. YAML).
-  push    @INC, "modules/fallback"; # Only use our own versions of modules if there's no system version.
+  use FindBin;
+
+  unshift(@INC, $FindBin::Bin . '/../modules/override'); # Use our own versions of various modules (e.g. YAML).
+  push   (@INC, $FindBin::Bin . '/..');
+  push   (@INC, $FindBin::Bin . '/../modules/fallback'); # Only use our own versions of modules if there's no system version.
 }
 
 use Data::Dumper;
@@ -61,6 +66,10 @@ sub execute_code {
 my $repl = Devel::REPL->new;
 $repl->load_plugin($_) for @plugins;
 $repl->load_history($history_file);
+
+binmode($repl->out_fh, 'utf8');
+
+$repl->eval('use utf8;');
 $repl->eval('help');
 $repl->print("trying to auto login into client '$client' with login '$login'...\n");
 execute_code($repl, "lxinit '$client', '$login'");
@@ -84,6 +93,7 @@ use SL::Locale;
 use SL::LXDebug;
 use Data::Dumper;
 use List::Util qw(max);
+use Time::HiRes;
 
 # this is a cleaned up version of am.pl
 # it lacks redirection, some html setup and most of the authentication process.
@@ -116,9 +126,8 @@ sub lxinit {
 
   die "cannot find user $login"            unless %::myconfig = $::auth->read_user(login => $login);
 
-  $::form->{login} = $login; # normaly implicit at login
-
   die "cannot find locale for user $login" unless $::locale   = Locale->new($::myconfig{countrycode});
+  $::myconfig{login} = $login; # so SL::DB::Manager::Employee->current works in test database
 
   $::instance_conf->init;
 
@@ -153,11 +162,18 @@ sub help {
 
 Spezielle Kommandos:
 
-  help                - zeigt diese Hilfe an.
-  lxinit 'login'      - lädt das kivitendo-Environment für den User 'login'.
-  reload              - lädt modifizierte Module neu.
-  pp DATA             - zeigt die Datenstruktur mit Data::Dumper an.
-  quit                - beendet die Konsole
+  help              - zeigt diese Hilfe an.
+  lxinit 'login'    - lädt das kivitendo-Environment für den User 'login'.
+  reload            - lädt modifizierte Module neu.
+  pp DATA           - zeigt die Datenstruktur mit Data::Dumper an.
+  clock { CODE }    - zeigt die gebrauchte Zeit für die Ausführung von CODE an
+  quit              - beendet die Konsole
+
+  part              - shortcuts auf die jeweilige SL::DB::{...}::find_by
+  customer, vendor,
+  order, invoice,
+  purchase_invoice,
+  chart
 
 EOL
 #  load   'module'     - läd das angegebene Modul, d.h. bin/mozilla/module.pl und SL/Module.pm.
@@ -207,6 +223,48 @@ sub sql {
   }
 }
 
+sub part {
+  require SL::DB::Part;
+  SL::DB::Manager::Part->find_by(@_)
+}
+
+sub order {
+  require SL::DB::Order;
+  SL::DB::Manager::Order->find_by(@_)
+}
+
+sub invoice {
+  require SL::DB::Invoice;
+  SL::DB::Manager::Invoice->find_by(@_)
+}
+
+sub purchase_invoice {
+  require SL::DB::PurchaseInvoice;
+  SL::DB::Manager::PurchaseInvoice->find_by(@_)
+}
+
+sub customer {
+  require SL::DB::Customer;
+  SL::DB::Manager::Customer->find_by(@_)
+}
+
+sub vendor {
+  require SL::DB::Vendor;
+  SL::DB::Manager::Vendor->find_by(@_)
+}
+
+sub chart {
+  require SL::DB::Chart;
+  SL::DB::Manager::Chart->find_by(@_)
+}
+
+sub clock (&) {
+  my $s = [Time::HiRes::gettimeofday()];
+  $_[0]->();
+  Time::HiRes::tv_interval($s);
+}
+
+
 1;
 
 __END__
@@ -239,6 +297,12 @@ Print the manual page and exit.
 Log in as C<username>. The default is to use the value from the
 configuration file and C<demo> if none is set there.
 
+=item B<-c>, B<--client>=C<client>
+
+Use the database for client C<client>. C<client> can be a client's
+database ID or its name. The default is to use the value from the
+configuration file.
+
 =item B<-o>, B<--log-file>=C<filename>
 
 Use C<filename> as the log file. The default is to use the value from